diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index ebe51d3b..00000000 --- a/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -# EditorConfig is awesome: https://EditorConfig.org - -# top-most EditorConfig file -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = false -insert_final_newline = false \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..433332f8 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +test/coverage/ +es/ +lib/ +umd/ +*.test.js diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..4bfd9014 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,51 @@ +{ + "env": { + "browser": true, + "node": true, + "es6": true + }, + "extends": ["eslint:recommended", "plugin:react/recommended"], + "parser": "babel-eslint", + "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 + } + }, + "plugins": [ + "react" + ], + "root": true, + "rules": { + "comma-dangle": 0, + "linebreak-style": 0 + }, + "settings": { + "react": { + "createClass": "createReactClass", // Regex for Component Factory to use, + // default to "createReactClass" + "pragma": "React", // Pragma to use, default to "React" + "version": "16.8", // React version, default to the latest React stable release + "flowVersion": "0.81" // Flow version + }, + "propWrapperFunctions": [ "forbidExtraProps" ] // The names of any functions used to wrap the + // propTypes object, e.g. `forbidExtraProps`. + // If this isn't set, any propTypes wrapped in + // a function will be skipped. + } +} diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 205021e4..00000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Enforce Unix newlines -* text=auto eol=lf diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 96e19d0c..37d6ae2a 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,178 +1,34 @@ -# Contributing to CoreUI +# Contributing -Looking to contribute something to CoreUI? **Here's how you can help.** +## Usage -Please take a moment to review this document in order to make the contribution process easy and effective for everyone involved. +```bash +# Install dependencies +npm install -Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue or assessing -patches and features. +# Build +npm run build -## Using the issue tracker +# Run all tests with lint/jest +npm run test -The [issue tracker](https://github.com/coreui/coreui-react/issues) is -the preferred channel for [bug reports](#bug-reports), [features requests](#feature-requests) -and [submitting pull requests](#pull-requests), but please respect the following -restrictions: +# Run test in watch mode +npm run test:watch -* Please **do not** use the issue tracker for personal support requests. +# Update test snapshot +npm run test:update -* Please **do not** post comments consisting solely of "+1" or ":thumbsup:". - Use [GitHub's "reactions" feature](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments) - instead. +# Run linter +npm run lint -## Bug reports +# Run linter with auto fix +npm run lint:fix +``` +## Workflow -A bug is a _demonstrable problem_ that is caused by the code in the repository. -Good bug reports are extremely helpful, so thanks! - -Guidelines for bug reports: - -0. **Validate and lint your code** — to ensure your problem isn't caused by a simple error in your own code. - -1. **Use the GitHub issue search** — check if the issue has already been reported. - -2. **Check if the issue has been fixed** — try to reproduce it using the latest `master` or development branch in the repository. - -3. **Isolate the problem** — ideally create a [reduced test case](https://css-tricks.com/reduced-test-cases/) and a live example. [This JS Bin](http://jsbin.com/lefey/1/edit?html,output) is a helpful template. - - -A good bug report shouldn't leave others needing to chase you up for more -information. Please try to be as detailed as possible in your report. What is -your environment? What steps will reproduce the issue? What browser(s) and OS -experience the problem? Do other browsers show the bug differently? What -would you expect to be the outcome? All these details will help people to fix -any potential bugs. - -Example: - -> Short and descriptive example bug report title -> -> A summary of the issue and the browser/OS environment in which it occurs. If -> suitable, include the steps required to reproduce the bug. -> -> 1. This is the first step -> 2. This is the second step -> 3. Further steps, etc. -> -> `` - a link to the reduced test case -> -> Any other information you want to share that is relevant to the issue being -> reported. This might include the lines of code that you have identified as -> causing the bug, and potential solutions (and your opinions on their -> merits). - -## Feature requests - -Feature requests are welcome. Before opening a feature request, please take a -moment to find out whether your idea fits with the scope and aims of the -project. It's up to *you* to make a strong case to convince the project's -developers of the merits of this feature. Please provide as much detail -and context as possible. - - -## Pull requests - -Good pull requests—patches, improvements, new features—are a fantastic -help. They should remain focused in scope and avoid containing unrelated -commits. - -**Please ask first** before embarking on any significant pull request (e.g. -implementing features, refactoring code, porting to a different language), -otherwise you risk spending a lot of time working on something that the -project's developers might not want to merge into the project. - -Adhering to the following process is the best way to get your work -included in the project: - -1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork, - and configure the remotes: - - ```bash - # Clone your fork of the repo into the current directory - git clone https://github.com//coreui-react.git - # Navigate to the newly cloned directory - cd coreui - # Assign the original repo to a remote called "upstream" - git remote add upstream https://github.com/coreui/coreui-react.git - ``` - -2. If you cloned a while ago, get the latest changes from upstream: - - ```bash - git checkout master - git pull upstream master - ``` - -3. Create a new topic branch (off the main project development branch) to - contain your feature, change, or fix: - - ```bash - git checkout -b - ``` - -4. Commit your changes in logical chunks. Please adhere to these [git commit - message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) - or your code is unlikely to be merged into the main project. Use Git's - [interactive rebase](https://help.github.com/articles/interactive-rebase) - feature to tidy up your commits before making them public. - -5. Locally merge (or rebase) the upstream development branch into your topic branch: - - ```bash - git pull [--rebase] upstream master - ``` - -6. Push your topic branch up to your fork: - - ```bash - git push origin - ``` - -7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) - with a clear title and description against the `master` branch. - -**IMPORTANT**: By submitting a patch, you agree to allow the project owners to -license your work under the terms of the [MIT License](LICENSE). - -### Semantic Git commit messages - -Inspired by Sparkbox's awesome article on -[semantic commit messages](http://seesparkbox.com/foundry/semantic_commit_messages). -Please use following commit message format. - -* chore (updating npm tasks etc; no production code change) -> ```git test -m 'chore: commit-message-here'``` -* docs (changes to documentation) -> ```git commit -m 'docs: commit-message-here'``` -* feat (new feature) -> ```git commit -m 'feat: commit-message-here'``` -* fix (bug fix) -> ```git commit -m 'fix: commit-message-here'``` -* refactor (refactoring production code) -> ```git commit -m 'refactor: commit-message-here'``` -* style (formatting, missing semi colons, etc; no code change) -> ```git commit -m 'style: commit-message-here'``` -* test (adding missing tests, refactoring tests; no production code change) -> ```git test -m 'refactor: commit-message-here'``` - -## Code guidelines - -### HTML - -[Adhere to the Code Guide.](http://codeguide.co/#html) - -- Use tags and elements appropriate for an HTML5 doctype (e.g., self-closing tags). -- Use CDNs and HTTPS for third-party JS when possible. We don't use protocol-relative URLs in this case because they break when viewing the page locally via `file://`. -- Use [WAI-ARIA](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) attributes in documentation examples to promote accessibility. - -### CSS - -[Adhere to the Code Guide.](http://codeguide.co/#css) - -- When feasible, default color palettes should comply with [WCAG color contrast guidelines](http://www.w3.org/TR/WCAG20/#visual-audio-contrast). -- Except in rare cases, don't remove default `:focus` styles (via e.g. `outline: none;`) without providing alternative styles. See [this A11Y Project post](http://a11yproject.com/posts/never-remove-css-outlines) for more details. - -### JS - -- No semicolons (in client-side JS) -- 2 spaces (no tabs) -- strict mode -- "Attractive" -- Don't use [jQuery event alias convenience methods](https://github.com/jquery/jquery/blob/master/src/event/alias.js) (such as `$().focus()`). Instead, use [`$().trigger(eventType, ...)`](http://api.jquery.com/trigger/) or [`$().on(eventType, ...)`](http://api.jquery.com/on/), depending on whether you're firing an event or listening for an event. (For example, `$().trigger('focus')` or `$().on('focus', function (event) { /* handle focus event */ })`) We do this to be compatible with custom builds of jQuery where the event aliases module has been excluded. - -## License - -By contributing your code, you agree to license your contribution under the [MIT License](LICENSE). \ No newline at end of file +- Create a component in the src/components folder +- Add tests in the src/components/\_\_tests\_\_ folder +- Register this component in src/index.js +- Run lint and tests before commiting anything +- Commit using [Commit Convention](./COMMIT_CONVENTION.md) +- PR on github diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 544d42d2..00000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,4 +0,0 @@ -# These are supported funding model platforms - -custom: "https://coreui.io/pricing/?support=true" -open_collective: coreui diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..9e0cfad4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,26 @@ +Before opening an issue: + +- [Search for duplicate or closed issues](https://github.com/coreui/coreui-react/issues?utf8=%E2%9C%93&q=is%3Aissue) +- Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs +- Read the [contributing guidelines](./CONTRIBUTING.md) + +When asking general "how to" questions: + +- Please do not open an issue here +- Post your question here - https://community.coreui.io/c/support/coreui-for-react/15 + +When reporting a bug, include: + +- Operating system and version (Windows, Mac OS X, Android, iOS, etc...) +- Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser) +- Reduced test cases and potential fixes using [CodePen](https://codepen.io/) or [JS Bin](https://jsbin.com/) + +When suggesting a feature: + +- Please do not open an issue here, +- Post your feature request here - https://community.coreui.io/c/feature-requests/12 +- Include: + - As much detail as possible for what we should add and why it's important to CoreUI for React.js + - Relevant links to prior art, screenshots, or live demos whenever possible + +**Please use GitHub only when reporting a bug, all issues with the general "how to" questions will be automatically closed.** \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 87980fbc..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Bug report -about: Tell us about a bug you may have identified in Bootstrap. -title: '' -labels: '' -assignees: '' - ---- - -Before opening: - -- [Search for duplicate or closed issues](https://github.com/coreui/coreui-react/issues?utf8=%E2%9C%93&q=is%3Aissue) -- [Validate](https://html5.validator.nu/) any HTML to avoid common problems -- Read the [contributing guidelines](https://github.com/coreui/coreui-react/blob/main/.github/CONTRIBUTING.md) - -Bug reports must include: - -- Operating system and version (Windows, macOS, Android, iOS) -- Browser and version (Chrome, Firefox, Safari, Microsoft Edge, Opera, Android Browser) -- A [reduced test case](https://css-tricks.com/reduced-test-cases/) or suggested fix using [CodePen](https://codepen.io/) or [JS Bin](https://jsbin.com/) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index ca4169dc..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for a new feature in CoreUI. -title: '' -labels: feature -assignees: '' - ---- - -Before opening: - -- [Search for duplicate or closed issues](https://github.com/coreui/coreui-react/issues?utf8=%E2%9C%93&q=is%3Aissue) -- Read the [contributing guidelines](https://github.com/coreui/coreui-react/blob/main/.github/CONTRIBUTING.md) - -Feature requests must include: - -- As much detail as possible for what we should add and why it's important to Bootstrap -- Relevant links to prior art, screenshots, or live demos whenever possible diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..af184f85 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,35 @@ + + + + + +**What kind of change does this PR introduce?** (check at least one) + +- [ ] Bugfix +- [ ] Feature +- [ ] Code style update +- [ ] Refactor +- [ ] Build-related changes +- [ ] Other, please describe: + +**Does this PR introduce a breaking change?** (check one) + +- [ ] Yes +- [ ] No + +If yes, please describe the impact and migration path for existing applications: + +**The PR fulfills these requirements:** + +- [ ] It's submitted to the `develop` branch (or to a previous version branch), _not_ the `master` branch +- [ ] When resolving a specific issue, it's referenced in the PR's title (e.g. `fix #xxx[,#xxx]`, where "xxx" is the issue number) +- [ ] All tests are passing +- [ ] New/updated tests are included + +If adding a **new feature**, the PR's description includes: +- [ ] A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it) + +**Other information:** diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md deleted file mode 100644 index 9d4da715..00000000 --- a/.github/SUPPORT.md +++ /dev/null @@ -1,9 +0,0 @@ -### Bug reports - -See the [contributing guidelines](CONTRIBUTING.md) for sharing bug reports. - -### How-to - -For general troubleshooting or help getting started: - -- Join [GitHub Discussions](https://github.com/coreui/coreui-react/discussions/). diff --git a/.github/workflows/daily-project-check.yml b/.github/workflows/daily-project-check.yml index 5776ce77..f68d27c9 100644 --- a/.github/workflows/daily-project-check.yml +++ b/.github/workflows/daily-project-check.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - node-version: [12.x] + node-version: [14.x] os: [ubuntu-latest, windows-latest, macOS-latest] steps: diff --git a/.github/workflows/project-check.yml b/.github/workflows/project-check.yml index 854186a4..0c2f4402 100644 --- a/.github/workflows/project-check.yml +++ b/.github/workflows/project-check.yml @@ -5,8 +5,6 @@ on: branches: - master pull_request: - branches: - - master jobs: build: @@ -15,7 +13,7 @@ jobs: strategy: matrix: - node-version: [12.x] + node-version: [14.x] os: [ubuntu-latest, windows-latest, macOS-latest] steps: diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml deleted file mode 100644 index ae659d2c..00000000 --- a/.github/workflows/stale.yml +++ /dev/null @@ -1,27 +0,0 @@ -# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time. -# -# You can adjust the behavior by modifying this file. -# For more information, see: -# https://github.com/actions/stale -name: Mark stale issues and pull requests - -on: - schedule: - - cron: '18 14 * * *' - -jobs: - stale: - - runs-on: ubuntu-latest - permissions: - issues: write - pull-requests: write - - steps: - - uses: actions/stale@v3 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions' - stale-pr-message: 'This PR has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions' - stale-issue-label: 'no-issue-activity' - stale-pr-label: 'no-pr-activity' diff --git a/.gitignore b/.gitignore index 70f24f47..c10b43c5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,33 +1,25 @@ -.cache -coverage/ -dist/ -node_modules/ -public/ -yarn.lock +# See https://help.github.com/ignore-files/ for more about ignoring files. -# IDEs and editors -.idea/ +# dependencies +node_modules +/node_modules +package-lock.json -# Visual Studio Code -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* +# testing +/demo/dist -# System files +# testing +/coverage + +# # production +# /es +# /lib +# /umd + +# misc .DS_Store -Thumbs.db +.idea + +npm-debug.log* -# Numerous always-ignore extensions -*.diff -*.err -*.log -*.orig -*.rej -*.swo -*.swp -*.vi -*.zip -*~ \ No newline at end of file +.history \ No newline at end of file diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index d6139f86..00000000 --- a/.gitmodules +++ /dev/null @@ -1,8 +0,0 @@ -[submodule "packages/coreui-react-chartjs"] - path = packages/coreui-react-chartjs - url = https://github.com/coreui/coreui-react-chartjs.git - branch = main -[submodule "packages/coreui-icons-react"] - path = packages/coreui-icons-react - url = https://github.com/coreui/coreui-icons-react.git - branch = main diff --git a/.prettierignore b/.prettierignore index 849ddff3..ab056b46 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1 @@ -dist/ +lib/index.js \ No newline at end of file diff --git a/.storybook/main.js b/.storybook/main.js new file mode 100644 index 00000000..8aa29d07 --- /dev/null +++ b/.storybook/main.js @@ -0,0 +1,32 @@ +var path = require('path') +var webpack = require('webpack') + +module.exports = { + //stories: ['../stories/*.stories.js'], + //stories: ['/stories/*.stories.js'], + // stories: ['../stories/*.stories.js'], + + //stories: ['../stories/TEST.stories.js'], + //stories: ['../src/*.stories.js'] + //stories: ['../src/**/*.stories.js'] + stories: ['../stories/*.stories.js'], + module: { + loaders: [ + { + test: /\.js$/, + loaders: [ 'babel-loader' ], + exclude: /node_modules/, + include: __dirname + }, + { + test: /\.css?$/, + loaders: [ 'style-loader', 'raw-loader' ], + include: __dirname + } + ] + }, + addons: [ + '@storybook/addon-storysource', + '@storybook/addon-knobs', + ], +}; \ No newline at end of file diff --git a/.storybook/preview.js b/.storybook/preview.js new file mode 100644 index 00000000..c6941510 --- /dev/null +++ b/.storybook/preview.js @@ -0,0 +1,23 @@ +import React from 'react'; +import { addDecorator } from '@storybook/react'; +import '@coreui/coreui/dist/css/coreui.min.css'; +import CRow from '../src/grid/CRow' +import CContainer from '../src/grid/CContainer' +import CCol from '../src/grid/CCol' +import CCard from '../src/card/CCard' +//@import '~@coreui/icons/css/all.css'; + +addDecorator(story => ( + <> + + + + +

CoreUI

+
+
+ {story()} +
+
+ +)); diff --git a/.storybook/webpack.config.js b/.storybook/webpack.config.js new file mode 100644 index 00000000..acbd10a5 --- /dev/null +++ b/.storybook/webpack.config.js @@ -0,0 +1,13 @@ +const path = require('path'); + +module.exports = { + module: { + rules: [ + { + test: /\.css?$/, + loaders: [ 'style-loader', 'raw-loader' ], + include: path.resolve(__dirname, '../') + } + ] + } +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 27a44689..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "editor.defaultFormatter": "esbenp.prettier-vscode" - } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..58215b58 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,464 @@ +### Changelog + +All notable changes to this project will be documented in this file. Dates are displayed in UTC. + +#### [3.4.6](https://github.com/coreui/coreui-react/compare/3.4.5...3.4.6) + +> 15 March 2021 + +- Fix for custom CPagination props [`9ed2c9f`](https://github.com/coreui/coreui-react/commit/9ed2c9fef09782f44c12cb4b3687fedba1725c1a) +- chore: dependencies update [`82e5c9c`](https://github.com/coreui/coreui-react/commit/82e5c9c41fad851974b4c221ff45247145896e71) +- chore: github workflows update [`147b761`](https://github.com/coreui/coreui-react/commit/147b761a74f6f43db2901c65285e1f7cf4cb969e) + +#### [3.4.5](https://github.com/coreui/coreui-react/compare/3.4.4...3.4.5) + +> 20 January 2021 + +- chore: dependencies update [`136c5ba`](https://github.com/coreui/coreui-react/commit/136c5ba88d9e72c7e1443cf676d952778d6f9427) +- fix(CModal): add scrollable attribute to type definitions - thanks @pehlert [`7d03dfc`](https://github.com/coreui/coreui-react/commit/7d03dfcb8c633951c6466e6022f051c419bd66c7) + +#### [3.4.4](https://github.com/coreui/coreui-react/compare/3.4.3...3.4.4) + +> 19 January 2021 + +- test(CModal): update test, snapshots and story [`c797328`](https://github.com/coreui/coreui-react/commit/c7973286896a7e354ba64ee7b81a78fbf35e19e4) +- chore: dependencies update [`852c9c8`](https://github.com/coreui/coreui-react/commit/852c9c830108c303796ea677b890a614cdb38270) +- added scrollable prop to CModal - uses modal-dialog-scrollable from Bootstrap [`1b3a019`](https://github.com/coreui/coreui-react/commit/1b3a019f12561b625567e805f4d489b3e79a1da1) +- chore(release): 3.4.4 [`29b2471`](https://github.com/coreui/coreui-react/commit/29b2471f2ac5183f52e612306097bc8a75cf721b) +- fix(CModal): add missing modal-dialog-scrollable - thanks @ljuborados [`9d480af`](https://github.com/coreui/coreui-react/commit/9d480afbe6d619c51abd152fc332b3c09974b2da) + +#### [3.4.3](https://github.com/coreui/coreui-react/compare/3.4.2...3.4.3) + +> 22 December 2020 + +- fix(CDataTable): correct itemsPerPageSelect padding [`#171`](https://github.com/coreui/coreui-react/pull/171) +- fix(CDataTable): tableFilter and cleaner minor cleanup [`1b5079f`](https://github.com/coreui/coreui-react/commit/1b5079f76020d579d2edc00da20edec0956521bf) +- chore(release): 3.4.3 [`72497b6`](https://github.com/coreui/coreui-react/commit/72497b696f8f90694fc953c5d047511c14c351d1) + +#### [3.4.2](https://github.com/coreui/coreui-react/compare/3.4.1...3.4.2) + +> 18 December 2020 + +- fix(CToast): add missing color prop [`f48c98c`](https://github.com/coreui/coreui-react/commit/f48c98cf7f66ed3089730fbb37da5d0c4a975563) +- chore(release): 3.4.2 [`939098f`](https://github.com/coreui/coreui-react/commit/939098f265dc9fe8d908995db369bae3f3c65ef9) + +#### [3.4.1](https://github.com/coreui/coreui-react/compare/3.4.0...3.4.1) + +> 18 December 2020 + +- fix(index.d.ts): CDropdownDivider and CDropdownHeader not defined [`#170`](https://github.com/coreui/coreui-react/issues/170) +- chore(release): 3.4.1 [`cdb9aa7`](https://github.com/coreui/coreui-react/commit/cdb9aa7e247fbfb7053a7ad1e9ca2917b2c6640b) +- chore: dependencies update [`4ae0d80`](https://github.com/coreui/coreui-react/commit/4ae0d80405a4093bd8d1545a1ea7006f33665f9e) + +#### [3.4.0](https://github.com/coreui/coreui-react/compare/3.4.0-beta.0...3.4.0) + +> 11 December 2020 + +- chore: 3.4.0 version release for React 17 [`ddaea52`](https://github.com/coreui/coreui-react/commit/ddaea52b12d05825e56f79275e30132b14b8db2b) +- fix(CWidgetBrand): addHeaderClass bad PropTypes [`d2c102b`](https://github.com/coreui/coreui-react/commit/d2c102b50f0b15a89a2a66334923798b267ddeea) +- chore: dependencies update [`8b7abe8`](https://github.com/coreui/coreui-react/commit/8b7abe8716aec3aa3757a1e25067931253c14c6f) + +#### [3.4.0-beta.0](https://github.com/coreui/coreui-react/compare/3.3.6...3.4.0-beta.0) + +> 10 December 2020 + +- test: enzyme-adapter-react-17 temp fix [`9a93f26`](https://github.com/coreui/coreui-react/commit/9a93f2610254f5584eb5e8f70b34a8456b3a2dc8) +- chore: update to React 17 and dependencies [`dc7e219`](https://github.com/coreui/coreui-react/commit/dc7e219546b6c2a41a060042ce619e84fb1140ae) +- test(CToast): use act() from react-dom/test-utils [`fce83f8`](https://github.com/coreui/coreui-react/commit/fce83f810768ed67a27acc2f9b10c4e845d91092) +- fix(stories): className [`ab3348a`](https://github.com/coreui/coreui-react/commit/ab3348a5aac8eb008c23a5cc6292a7836353a311) +- test(CDataTable): snap update className fix [`d6e58d5`](https://github.com/coreui/coreui-react/commit/d6e58d5003426184e632071d9a8fe2e38b73baad) +- fix(CWidgetBrand): addHeaderClass bad PropTypes [`937a713`](https://github.com/coreui/coreui-react/commit/937a71394614d8bd66524900fdd415d8dc6f5918) + +#### [3.3.6](https://github.com/coreui/coreui-react/compare/3.3.5...3.3.6) + +> 10 December 2020 + +- fix(CWidgetBrand): addHeaderClass bad PropTypes [`d2c102b`](https://github.com/coreui/coreui-react/commit/d2c102b50f0b15a89a2a66334923798b267ddeea) +- 3.3.6 version release [`7fc09a3`](https://github.com/coreui/coreui-react/commit/7fc09a343da9b623548ebc99cddd5fe9bf40c956) +- fix(stories): className [`ab3348a`](https://github.com/coreui/coreui-react/commit/ab3348a5aac8eb008c23a5cc6292a7836353a311) + +#### [3.3.5](https://github.com/coreui/coreui-react/compare/3.3.4...3.3.5) + +> 9 December 2020 + +- test: add github actions project check [`552a1fd`](https://github.com/coreui/coreui-react/commit/552a1fd7a7dfe5273f55ed1445e98651df80928e) +- 3.3.5 version release [`757f523`](https://github.com/coreui/coreui-react/commit/757f523cdac052fab1735d7ada274fc417d8021f) +- fix(CDataTable): missing select perPageItems initial value [`eaca895`](https://github.com/coreui/coreui-react/commit/eaca8955913fafe0f6100952e98ebf7afd34c32b) +- chore: dependencies update [`41f3899`](https://github.com/coreui/coreui-react/commit/41f38999bb2e32c80d23a425c66cb79bca3ec363) + +#### [3.3.4](https://github.com/coreui/coreui-react/compare/3.3.3...3.3.4) + +> 26 November 2020 + +- chore: dependencies update [`7ded326`](https://github.com/coreui/coreui-react/commit/7ded3260c88bae4fda149cf2037c4f0cb5f75d9f) +- chore: update changelog [`86cec07`](https://github.com/coreui/coreui-react/commit/86cec0727dc56160eadc71fb82b97dc5a460659b) +- chore: 3.3.4 version release [`dea91fc`](https://github.com/coreui/coreui-react/commit/dea91fcac3e890c8ed3deeee5b386cf8d25547b4) + +#### [3.3.3](https://github.com/coreui/coreui-react/compare/3.3.2...3.3.3) + +> 4 November 2020 + +- chore: dependencies update [`a53dbdc`](https://github.com/coreui/coreui-react/commit/a53dbdce08a200aacb52ab935b43dc480d85d327) +- fix(Modal): missing className prop [`7bbc5fd`](https://github.com/coreui/coreui-react/commit/7bbc5fdd06d9a3de4cc56ac57e80dc4c4ef8fa45) +- chore: 3.3.3 version release [`0022dc8`](https://github.com/coreui/coreui-react/commit/0022dc81ddf306aefdec0023d3c2f2c0cc8e7000) + +#### [3.3.2](https://github.com/coreui/coreui-react/compare/3.3.1...3.3.2) + +> 24 October 2020 + +- chore: 3.3.2 version release [`fbf5379`](https://github.com/coreui/coreui-react/commit/fbf537971f7e83729832939ec979818d9a608dfe) +- chore: dependencies update [`b3b5410`](https://github.com/coreui/coreui-react/commit/b3b54105bfc31cd60c84ce7418f5e1dced19ad6c) +- test: fix test configuration, update snapshots [`81a4d7f`](https://github.com/coreui/coreui-react/commit/81a4d7f5f38cbee457ca4368fb1e40cbffb09cf8) +- test: update tabs tests [`39b4284`](https://github.com/coreui/coreui-react/commit/39b4284b98cb507c6a83860f218f42a559d99532) +- chore: delete test snapshots from es build [`b40c300`](https://github.com/coreui/coreui-react/commit/b40c300261b91c440543fbb477fc8ed6738cc2a9) +- test: fix tooltip tests [`44839c9`](https://github.com/coreui/coreui-react/commit/44839c97fab34d645e424f33cec5e6bd18d525e3) +- test: comment out some broken tests as todo [`64f7387`](https://github.com/coreui/coreui-react/commit/64f73871ff1c33f07adffc058c161e517db29167) +- fix: CTabPane: fix 'active' prop, refactor component [`7fa04f8`](https://github.com/coreui/coreui-react/commit/7fa04f8311b7820e2b50a657d538f8d5a18c188e) +- chore: exclude test files from es build [`cf34f54`](https://github.com/coreui/coreui-react/commit/cf34f549844d842d67e95da0f8ce98adc1e32549) +- chore: update changelog [`edd558a`](https://github.com/coreui/coreui-react/commit/edd558a05dcbe7219cfdbff18b793c70b586147d) +- chore: Merge branch 'dev-tests' into dev [`b47d3d5`](https://github.com/coreui/coreui-react/commit/b47d3d57de935dc753ed6b991828db067bdabcce) +- chore: Merge branch 'dev-storybook' into dev [`27c4629`](https://github.com/coreui/coreui-react/commit/27c462980c3845d204c48f14eece0618b2021430) + +#### [3.3.1](https://github.com/coreui/coreui-react/compare/3.3.0...3.3.1) + +> 15 October 2020 + +- chore: 3.3.1 version release [`abbe01f`](https://github.com/coreui/coreui-react/commit/abbe01f61b1c38cd764bb3e4ebbfa11ec10127a3) +- chore: dependencies update [`93397ae`](https://github.com/coreui/coreui-react/commit/93397ae968cd4e11c6780b2ed7a00cacea74e2e9) +- fix(CSidebar): onShowChange callback behavior overwritten for overlaid [`c463ea5`](https://github.com/coreui/coreui-react/commit/c463ea566e3b997d3926781f13273fcd66bf7065) +- fix(CSidebar): add missing xxl breakpoint [`9c84573`](https://github.com/coreui/coreui-react/commit/9c84573511feeff615bee105a5cb2a0ced8fc5a6) + +#### [3.3.0](https://github.com/coreui/coreui-react/compare/3.2.3...3.3.0) + +> 4 September 2020 + +- fix: CSidebarNavItem/CSidebarNavDropdown: accessibility fixes #141 [`#141`](https://github.com/coreui/coreui-react/issues/141) +- chore: 3.3.0 version release - update dependencies [`b3be47d`](https://github.com/coreui/coreui-react/commit/b3be47da28c8813e273bc00af73f552589c7e52f) +- refactor: CSidebar: clearify component [`02b6b0d`](https://github.com/coreui/coreui-react/commit/02b6b0d3b3d60635f51cb6340200d88ca8610f93) +- feat: CSidebar: close mobile/overlaid sidebar on 'esc' #141 [`4e35ed8`](https://github.com/coreui/coreui-react/commit/4e35ed83c9d14737e10fb732984f0f5f8ca4da49) +- fix: CSidebar: close sidebar when click on `Item` in overlaid mode [`59d31b7`](https://github.com/coreui/coreui-react/commit/59d31b7a315c115891ef0be371decddd6d0af68d) +- chore: update changelog [`5f71c83`](https://github.com/coreui/coreui-react/commit/5f71c8306e86fdea0097483a57475b5ddb7e43b5) +- feat: CSidebarNavItem: allow passing nodes to 'name' prop #140 [`074c7e7`](https://github.com/coreui/coreui-react/commit/074c7e775543efc3a87c904f4c8704883127edb5) +- fix: CSidebar: disable 'useCapture' in overlaid sidebar closing [`30e7004`](https://github.com/coreui/coreui-react/commit/30e7004dd8edb8e947048188911b8a20049375e8) +- fix: CDataTable: add space in 'noItemsText' [`1d41870`](https://github.com/coreui/coreui-react/commit/1d41870ca606e0c628fc89854ad3aad6490cb839) + +#### [3.2.3](https://github.com/coreui/coreui-react/compare/3.2.2...3.2.3) + +> 11 August 2020 + +- chore: 3.2.3 version release - update dependencies [`f238624`](https://github.com/coreui/coreui-react/commit/f23862495a8a3d7e394108361dbee2d61dcb94fb) +- chore: update changelog [`77a9487`](https://github.com/coreui/coreui-react/commit/77a94872ebdfcf235b29de8e7a3712db0bceb19c) +- fix: CDataTable: fix wrong class assignment in itemsPerPageSelect #138 [`8425052`](https://github.com/coreui/coreui-react/commit/8425052d2c7cb4a431a1611977da98cc0f21b64c) + +#### [3.2.2](https://github.com/coreui/coreui-react/compare/3.2.1...3.2.2) + +> 31 July 2020 + +- chore: 3.2.2 release: update dependencies [`895f454`](https://github.com/coreui/coreui-react/commit/895f4545e0de72c103e1e20b082161c1f9fab1e5) +- fix: CDataTable component fixes [`9dae2ab`](https://github.com/coreui/coreui-react/commit/9dae2ab32fc9dcc730b1214ecb777776f5346bf9) +- fix: CSidebarNavDropdown: add possibility of component as `icon` [`03c4c32`](https://github.com/coreui/coreui-react/commit/03c4c3239f42b174c703f0ee5b0eef45761ceb9f) +- chore: update changelog [`df6d3b9`](https://github.com/coreui/coreui-react/commit/df6d3b9664c72690a542a1804fcff9164cc80f42) + +#### [3.2.1](https://github.com/coreui/coreui-react/compare/3.2.0...3.2.1) + +> 30 July 2020 + +- chore: 3.2.1 release: update dependencies [`40bba4d`](https://github.com/coreui/coreui-react/commit/40bba4db24b2c83416397c0b6e269a70df626641) +- chore: update chengelog [`cebb691`](https://github.com/coreui/coreui-react/commit/cebb69100d950948baa9e305a865a0ac95bf89a4) +- fix: CDataTable: fix isSortable method [`581e5a2`](https://github.com/coreui/coreui-react/commit/581e5a20019f8c4981e1a9ad1e9be30f46297789) + +#### [3.2.0](https://github.com/coreui/coreui-react/compare/3.1.0...3.2.0) + +> 28 July 2020 + +- chore: fix changelog [`0c6b6cb`](https://github.com/coreui/coreui-react/commit/0c6b6cbb2ef18e5c48be345bdace9ba51595a0f0) +- chore: add postinstall script [`acde502`](https://github.com/coreui/coreui-react/commit/acde5021d1925e901926171b3381a34809f8cea5) +- feat: CDataTable: add cleaner prop [`d0dba67`](https://github.com/coreui/coreui-react/commit/d0dba670cc49817e18f388fa80326d8b2141f6a7) +- refactor: CDataTable: disable filtering and sorting on non data columns [`2b134aa`](https://github.com/coreui/coreui-react/commit/2b134aa0d388b99ab33ea574748814d4effba32e) +- chore: 3.2.0 release: update dependencies [`9c8e377`](https://github.com/coreui/coreui-react/commit/9c8e37729073471c9a48e532e830782dec5ae1a6) +- feat: CModal: add autofucus and `esc` key support [`ecc4920`](https://github.com/coreui/coreui-react/commit/ecc4920a6dc72b5b7a34cd71a08ccdae5d3ca156) +- refactor: CDataTable: small refactors [`407201e`](https://github.com/coreui/coreui-react/commit/407201eddf3ce77591484dd78d2faa8d81a526e5) +- feat: CDrodownMenu: hide menu on `esc` [`c4fea1c`](https://github.com/coreui/coreui-react/commit/c4fea1c72777ff63a62cf9c04cbb59f90cee882c) +- chore: update changelog [`f3d83c3`](https://github.com/coreui/coreui-react/commit/f3d83c3286f4db4ad6b2b18bc8203b2944381d61) +- fix: CDataTable disable auto removing columnFilter [`a745c28`](https://github.com/coreui/coreui-react/commit/a745c286c60bdbb7b75c7db263c303c860865508) +- fix: CBreadcrumbRouter: display route only if it has 'name' key [`e4d743d`](https://github.com/coreui/coreui-react/commit/e4d743da43a51584ddf34a54746b9bd9208df44e) +- fix: CSidebarNavItem: do not render `icon` if prop is undefined #133 [`5fd72b0`](https://github.com/coreui/coreui-react/commit/5fd72b05def832894f9c6b1b166182d984b5068b) + +#### [3.1.0](https://github.com/coreui/coreui-react/compare/3.0.6...3.1.0) + +> 23 July 2020 + +- chore: modify library build [`62194bb`](https://github.com/coreui/coreui-react/commit/62194bb147e9327037778f951936663c14dc28e3) +- refactor: add full propTypes to className prop in components [`cd9c98a`](https://github.com/coreui/coreui-react/commit/cd9c98a890c9717db3a882e39ac3ccde9a711db6) +- chore: 3.1.0 release: update dependencies [`174370e`](https://github.com/coreui/coreui-react/commit/174370e754abf484bc47fba0641b7a3732e16de0) +- fix: delete disabled string type from 'innerRef' prop [`5c91a7f`](https://github.com/coreui/coreui-react/commit/5c91a7f3fe705738508c9c79cb7edfd0694444fd) +- chore: refactor typings [`7c584e4`](https://github.com/coreui/coreui-react/commit/7c584e4da250d7405080c59bc4721d0d4042bc16) +- fix: make components using Transition component use new API #127 [`eba59c2`](https://github.com/coreui/coreui-react/commit/eba59c22abf28c55dc433e5cf5e8715cba9d12e0) +- chore: add missing dependency [`0bb44f8`](https://github.com/coreui/coreui-react/commit/0bb44f8f9a406857c8652ce0fa548b458249a59e) +- chore: update changelog [`14b0c52`](https://github.com/coreui/coreui-react/commit/14b0c52cbc3562792df5b73d6b58e668971111d8) +- fix: CTabPane: fix passing innerRef [`7fa5601`](https://github.com/coreui/coreui-react/commit/7fa5601bd389078f7312b81c26962f2502dd6a87) +- fix: CAlert: add innerRef prop [`c1022a8`](https://github.com/coreui/coreui-react/commit/c1022a8cc83b1a898bd18e774751597210108177) +- feat: CSidebarNavItem: add possibility of passing icon as node [`520dc49`](https://github.com/coreui/coreui-react/commit/520dc49c2d1d1b39871ab864e64a8da18cef4273) +- fix: CModal: fix deprecation warning [`ad88025`](https://github.com/coreui/coreui-react/commit/ad8802576a22fa612883e3d928087f234c402d60) +- fix: CDropdownToggle: add role attribute in case of non-button tag [`4de6508`](https://github.com/coreui/coreui-react/commit/4de6508bbfdb128c07042b4c08e2bccc8b731988) + +#### [3.0.6](https://github.com/coreui/coreui-react/compare/3.0.5...3.0.6) + +> 15 July 2020 + +- chore: 3.0.6 release - update dependencies [`86cdba4`](https://github.com/coreui/coreui-react/commit/86cdba439efcc0eba1dc795579e0f7c32c8475fa) +- chore: dependencies update [`b49a95d`](https://github.com/coreui/coreui-react/commit/b49a95d19584356ef69cc174c6ba01a2f9144ee2) +- chore: CCol: add 'xxl' breakpoint, clean component #128 [`4dd4704`](https://github.com/coreui/coreui-react/commit/4dd4704433e8bb3ab875a9db52cc31f67c010d27) +- chore: Changelog update [`f1c00e8`](https://github.com/coreui/coreui-react/commit/f1c00e822644f9ea75fad7e11d014d9d78558fc6) + +#### [3.0.5](https://github.com/coreui/coreui-react/compare/3.0.4...3.0.5) + +> 30 June 2020 + +- chore: 3.0.5 version release: update [`422a4ce`](https://github.com/coreui/coreui-react/commit/422a4ce75b65760781daac9a0ec0971607cb74cb) +- fix: CModal: fix animation when rendered through portal [`dd28a8d`](https://github.com/coreui/coreui-react/commit/dd28a8de426842684cbcd70e038b8dad7aa72bd1) + +#### [3.0.4](https://github.com/coreui/coreui-react/compare/3.0.3...3.0.4) + +> 22 June 2020 + +- fix: CBreadcrumbRouter: fix assigning paths to items #118 [`7e2c87b`](https://github.com/coreui/coreui-react/commit/7e2c87bfeec6ee03661a5bb891bfe439fe26c0f4) +- chore: 3.0.4 version release: update dependencies [`5eac06b`](https://github.com/coreui/coreui-react/commit/5eac06b6f6ee1cffaf02a7e2e3696b517f324e56) + +#### [3.0.3](https://github.com/coreui/coreui-react/compare/3.0.2...3.0.3) + +> 17 June 2020 + +- chore: add auto-changelog [`dd56a22`](https://github.com/coreui/coreui-react/commit/dd56a22df2479371b33abc3802fb4f0406525fe1) +- chore: 3.0.3 version release: update dependencies and changelog [`293c637`](https://github.com/coreui/coreui-react/commit/293c63726e1a477af657d6b13fa619cba3ecde2f) +- fix: CModal: fix animations [`7740fce`](https://github.com/coreui/coreui-react/commit/7740fcee3583d0fd9324f23d1cd12f0c9914b19a) +- fix: CBreadcrumbRouter: add route parameters support #118 [`6d8b59b`](https://github.com/coreui/coreui-react/commit/6d8b59b9cfa145a30f4e54832941ce28ef514e29) +- feat: CDataTable: add footerSlot prop [`4d68dc8`](https://github.com/coreui/coreui-react/commit/4d68dc8f31ac724b79a003d2c6240b6f064e6cd4) + +#### [3.0.2](https://github.com/coreui/coreui-react/compare/3.0.1...3.0.2) + +> 8 June 2020 + +- chore: 3.0.2 version release [`780509e`](https://github.com/coreui/coreui-react/commit/780509ec5dac4ae2f4ca8a6f58bb2a719c286fcb) +- refactor: CPopover: delete style import [`c24553d`](https://github.com/coreui/coreui-react/commit/c24553d8fe907dc29a98f36fcae36f4b4e4f8612) + +#### [3.0.1](https://github.com/coreui/coreui-react/compare/3.0.0...3.0.1) + +> 3 June 2020 + +- chore: fix typings [`09ca1a5`](https://github.com/coreui/coreui-react/commit/09ca1a5915c16ce37cf43cb63e04adb59065e52e) +- chore: 3.0.1 version release [`5bea981`](https://github.com/coreui/coreui-react/commit/5bea9814e56224b7ac01dd0749b85a822e2fbafb) + +#### [3.0.0](https://github.com/coreui/coreui-react/compare/3.0.0-rc.2...3.0.0) + +> 1 June 2020 + +- fix: delete excessive components - CListGroupItemHeading/Text [`3681ad2`](https://github.com/coreui/coreui-react/commit/3681ad24225078f338d2b3d646ca71bf70de4095) +- chore: 3.0.0 release [`aec0f09`](https://github.com/coreui/coreui-react/commit/aec0f093e08d92d38a3e633623e61971d7e93d67) +- fix: prevent breaking change in CListGroupItemHeading/Text [`8299524`](https://github.com/coreui/coreui-react/commit/829952493cbd84ebc607ec748617fb9d666354d2) +- feat: CSidebarNavItem: add color prop [`12c2ba3`](https://github.com/coreui/coreui-react/commit/12c2ba3b26d8cdc3aa6e9937f9ad3333a13e7788) +- fix: CFade: assign nodeRef to Transition to prevent warning [`907e59a`](https://github.com/coreui/coreui-react/commit/907e59a6297a2221567aab5cba8548ec28e204e5) + +#### [3.0.0-rc.2](https://github.com/coreui/coreui-react/compare/v2.5.8...3.0.0-rc.2) + +> 29 May 2020 + +- Breadcrumb rewrite, BuuttonGroup & ButtonToolbar refactor [`#2`](https://github.com/coreui/coreui-react/pull/2) +- fix: CAlert: component refactor [`#1`](https://github.com/coreui/coreui-react/pull/1) +- CoreUI v3.0.0-alpha.0 for React - demo update WIP [`c8905a3`](https://github.com/coreui/coreui-react/commit/c8905a3d86731d2a494fba52abed062a400a0830) +- chore: delete demo [`5ef9a37`](https://github.com/coreui/coreui-react/commit/5ef9a375a1ecdaf509c57a72fffe76054c1dd69f) +- chore: update dependencies add package-lock.json to github [`d37cc9b`](https://github.com/coreui/coreui-react/commit/d37cc9bb61aa726b21bc645050bf78bf4bebb6fb) +- CoreUI v3.0.0-alpha.0 for React - initial commit [`9113dbd`](https://github.com/coreui/coreui-react/commit/9113dbd668d66556ddbf2c2154763fab388832e9) +- chore: 3.0.0-beta.3 release - update dependencies and clean docs [`7a71431`](https://github.com/coreui/coreui-react/commit/7a7143183efe0846fdaad5a49750f2fd5ac31968) +- chore: 3.0.0-beta.4 release [`f8c1a8b`](https://github.com/coreui/coreui-react/commit/f8c1a8b712316882855b5411847b2886bc551fab) +- chore: 3.0.0-beta.1 release [`99dd67f`](https://github.com/coreui/coreui-react/commit/99dd67f60ef5d46b150bb20bb4940f9c9ec9557a) +- chore: delete legacy components [`ab3aa58`](https://github.com/coreui/coreui-react/commit/ab3aa58f3cccf2a62f6035bb0fdc6b0fda8f1b40) +- feat: add typings [`54dc1c6`](https://github.com/coreui/coreui-react/commit/54dc1c6dc2f868b00e694f16c0a4245cc5bccf49) +- fix: CDataTable: many fixes and API changes [`a6085ce`](https://github.com/coreui/coreui-react/commit/a6085cef91fb9989a883e2771e35ace582e3f269) +- - update: merge with new tooltip/popover (based on tipy.js) [`11a09d1`](https://github.com/coreui/coreui-react/commit/11a09d1da26fb196fae3722b153af2be4717ed15) +- refactor: remove cssModules functionality [`df8c4c0`](https://github.com/coreui/coreui-react/commit/df8c4c0592de7a57f1c5f6844266eeaf378be1de) +- update: popper update try, error with ver. 2.1: [`ef92bac`](https://github.com/coreui/coreui-react/commit/ef92bac50a4fbf35319740b9eac9d69f539726f8) +- fix: CCarousel: rewrite components [`4e8ac70`](https://github.com/coreui/coreui-react/commit/4e8ac7086f266fb86ae9aff89a75f9401bef91d1) +- fix: form components refactor: [`a3b3ccc`](https://github.com/coreui/coreui-react/commit/a3b3ccc7e9ebd0f612bf57f9b834a82d56448ff7) +- refactor: extract CIcons, CCharts, minor changes [`a4c5e8c`](https://github.com/coreui/coreui-react/commit/a4c5e8c1a0865b9f5328818ace0a194f61515dda) +- chore: 3.0.0-beta.2 release [`f6160fc`](https://github.com/coreui/coreui-react/commit/f6160fcb82dd645e7e8b557987473dd923357dda) +- fix: Sidebar components rewrite: make them similar to Vue version [`8706cf0`](https://github.com/coreui/coreui-react/commit/8706cf077ccf6ac89fb0010d538c3babcd18607d) +- fix: leave one state of CCarousel definition [`db633c8`](https://github.com/coreui/coreui-react/commit/db633c8cbaa988ef1fa120e16a26fb957be0c6ea) +- fix: CModal component rewrite - simplify component [`55ceeef`](https://github.com/coreui/coreui-react/commit/55ceeef186fbe3f487d750e0e347728aa717e330) +- refactor: change project folder architecture [`dcb2fd8`](https://github.com/coreui/coreui-react/commit/dcb2fd88be9593b89930570753d5dc0faba73114) +- chore: cleanup [`4bbe3d3`](https://github.com/coreui/coreui-react/commit/4bbe3d3ac426902dc345e63c629a30470953c0c6) +- fix: CDropdown: component rewrite: [`14c2675`](https://github.com/coreui/coreui-react/commit/14c26757d0abf34675a5d1125cd8109c83f98888) +- fix: components cleanup [`f25cf59`](https://github.com/coreui/coreui-react/commit/f25cf590c24452e620b2e51c94164ea92c0fa1f6) +- fix: refactor CToast components: [`4741e67`](https://github.com/coreui/coreui-react/commit/4741e6707afd8f86d15e83f80f76e440b61898d6) +- fix: Breadcrumb components rewrite [`6d0e7fa`](https://github.com/coreui/coreui-react/commit/6d0e7fa293392f80dfb8a600f5f6f75d37d35e0b) +- fix: delete unneeded components [`99586ab`](https://github.com/coreui/coreui-react/commit/99586ab3e5fb409105ac6d4570605583ca53362d) +- fix: rewrite Brand components - make Brands simple wrappers [`ce4fdeb`](https://github.com/coreui/coreui-react/commit/ce4fdeb2ebbf90d9b36c16535800367927769c44) +- fix: CPagination: component rewrite according to Vue functionality [`097d359`](https://github.com/coreui/coreui-react/commit/097d359c4fd72480d211b83fc5188a82ca62133c) +- fix: merge CCollapse components, delete 'custom' and 'toggle' props [`63ba549`](https://github.com/coreui/coreui-react/commit/63ba54920d972ddd778216409f4134d3dd9fdcf0) +- - update: warnings removed [`aa50395`](https://github.com/coreui/coreui-react/commit/aa503958be9a290379f1561a042e1ece7c22062d) +- chore: delete dead code [`f6d2210`](https://github.com/coreui/coreui-react/commit/f6d2210586593a935c27f37daf36d442ae3b4d1c) +- docs: changelog cleanup [`c6c3b39`](https://github.com/coreui/coreui-react/commit/c6c3b39a6795169119c24e27ce1ef7216a04089d) +- fix: fix typings [`4631662`](https://github.com/coreui/coreui-react/commit/4631662660531fa847ec8211779027f215081a4a) +- fix: components cleanup [`7108882`](https://github.com/coreui/coreui-react/commit/71088829915be675fc66ea99345f47a44bfdb899) +- fix: CProgress: rewrite component similar to Vue version [`0781c4a`](https://github.com/coreui/coreui-react/commit/0781c4a939c4bf1a18ae17dd556022eb92e132dd) +- feat: improve Tab activation mechanism, fix bugs [`625c04b`](https://github.com/coreui/coreui-react/commit/625c04b256fccfa9428271b26bad4c57f2487c88) +- fix: CSidebar wrapper components fixes [`d17c8ff`](https://github.com/coreui/coreui-react/commit/d17c8ff8c55b8d367b55cbdd99fd4fa408dcb86c) +- refactor: clean components with fade functionality [`e23dd3f`](https://github.com/coreui/coreui-react/commit/e23dd3fc8b785ec7730ae072d21170a25af4bd4e) +- - fix: CSidebar - merge with Krzysiek [`a47bca1`](https://github.com/coreui/coreui-react/commit/a47bca1ec0a4fad34342229a2a44fbd0fb0b1cce) +- fix: CSwitch component fixes: [`4f7e74b`](https://github.com/coreui/coreui-react/commit/4f7e74b84ce2d5a37081ee3c8b1e6d15dda34669) +- - fix: CDropdownMenu: component rewrite [`9ce0f00`](https://github.com/coreui/coreui-react/commit/9ce0f00d8a0c054f557a46dbaede4ab409dbe956) +- fix: CDropdownToggle: component rewrite [`137965e`](https://github.com/coreui/coreui-react/commit/137965ed782b04e51d28e0803e98d96e78efacdf) +- chore: CListGroupItemHeading, CListGroupItemText - clean components [`118fa2a`](https://github.com/coreui/coreui-react/commit/118fa2a1f7e2e8926c2635bcbd27bcedb4a41925) +- fix: CEmbed refactor: [`ee82fa0`](https://github.com/coreui/coreui-react/commit/ee82fa0d63539eafa813876cf65d12e4a8a54bfe) +- fix: CDropdownItem, CDropdownHeader, CDropdownDivider: [`d0d000e`](https://github.com/coreui/coreui-react/commit/d0d000ec5ee88416365ec094f288afa86365fddc) +- fix: CMedia: reduce components to basic functionality [`d175ad5`](https://github.com/coreui/coreui-react/commit/d175ad590d84dfc627efbeb5270145357e148871) +- fix: CCardBody, CCardHeader, CCardFooter: add misiing props [`4171551`](https://github.com/coreui/coreui-react/commit/41715510539bd596e5550c4335f7ed54c1d1f98b) +- refactor: CCard: Reduce column, deck, group components to CCardGroup [`707b3f8`](https://github.com/coreui/coreui-react/commit/707b3f84c4909320ab19ad606b88778ce5f548c7) +- fix: turn CHeader sub-components to simple wrappers without props [`ddf287e`](https://github.com/coreui/coreui-react/commit/ddf287e3d86e7b34cdad5795dc8a15b4c4363858) +- - update: custom is true by default [`4827eb9`](https://github.com/coreui/coreui-react/commit/4827eb9a5ea5d947fde443e8c6b9d8afdf85b43d) +- fix: peerDependencies [`bd0903a`](https://github.com/coreui/coreui-react/commit/bd0903aa1e3939bda2863b015e140841b653a3b9) +- - update: react-popper v 2.1 added [`d043f6c`](https://github.com/coreui/coreui-react/commit/d043f6c7f0fc6fc5175cce4e1e33d558730cbca0) +- feat: add CElementCover component [`9a254db`](https://github.com/coreui/coreui-react/commit/9a254db32c82ec664db18394cdb10b0aa4a6573f) +- chore: delete CCustomInput component [`54f6aef`](https://github.com/coreui/coreui-react/commit/54f6aefe653842ffabbf099b7015a48ef5b78ec6) +- fix: CWidgetBrand: fix wrong texts diplay, clean the component [`3431017`](https://github.com/coreui/coreui-react/commit/343101714259843a8be8219f33b4bfed80c9ef45) +- fix: CLink: component refactor [`61859ed`](https://github.com/coreui/coreui-react/commit/61859ed4a72b3989d2cf64b8d6760fea6a426d94) +- fix: CWidgetIcon: component API fix [`ea43b6b`](https://github.com/coreui/coreui-react/commit/ea43b6ba002b90e4ab171f8d1508ef59baf3e375) +- feat: added internal CScrollbar component allowing menu animation [`50f8661`](https://github.com/coreui/coreui-react/commit/50f8661c1698302e70c55b96d541e83427287c32) +- fix: CButton: component refactor [`5770132`](https://github.com/coreui/coreui-react/commit/5770132be29a73f25b7fe36b9a0ae7ac920aceb6) +- chore: change Shared folder name to utils [`7cd4900`](https://github.com/coreui/coreui-react/commit/7cd4900406a1cbbff0d7590147064cb84e9ed0b2) +- chore: delete obsolete CPopoverBody and CPopoverHeader components [`775f0fa`](https://github.com/coreui/coreui-react/commit/775f0fa97ea36e992dafd45a11592decd8b154a7) +- fix: CListGroup, CListGroupItem fixes: [`950fab5`](https://github.com/coreui/coreui-react/commit/950fab53f15d1dbf9af4e2d4c793964ca733cf83) +- fix: rename CHeaderSubheader to CSubheader, clean component [`302dd82`](https://github.com/coreui/coreui-react/commit/302dd82dcda686a2bdba7ae5b546ded6c15f5983) +- fix: CWidgetSimple: component API fix [`abfb1d1`](https://github.com/coreui/coreui-react/commit/abfb1d1d023889bcc9685f95df0dd3c6fdadeee2) +- fix: CWidgetProgressIcon: component API fix [`2b17cd7`](https://github.com/coreui/coreui-react/commit/2b17cd7b5d6ea4bf49e7efa1dba8c6fea98fb2bc) +- fix: remove possibility of inheriting advanced transition options [`97ea903`](https://github.com/coreui/coreui-react/commit/97ea903a309b6acc8e82a6b6d56a86cc3802490e) +- fix: CWidgetProgress: component API fix [`a80ec4a`](https://github.com/coreui/coreui-react/commit/a80ec4a0d87bc2ac0b21943ff3107f4d7d6d8680) +- fix: CCollapse: fix component [`1aa4b69`](https://github.com/coreui/coreui-react/commit/1aa4b69e900c60f6eb00f6384a92e6735cf08f6f) +- chore: CPortal: disable using component until it is well tested [`98ad19d`](https://github.com/coreui/coreui-react/commit/98ad19d3f393a2d651dbd8516a7148c6610f362c) +- fix: CCard: delete 'custom' and corelating props [`e0f9c06`](https://github.com/coreui/coreui-react/commit/e0f9c0687f4f85d0ada02ffbf09c4b5bb0fea292) +- fix: CSidebarMinimizer: component refactor [`b933237`](https://github.com/coreui/coreui-react/commit/b9332372f8ab0e1dbb681f887e4c0dc4a7fe0e8e) +- fix: CTable: simplify to simple wrapper [`549d954`](https://github.com/coreui/coreui-react/commit/549d954db092496b45fb8d4605485153143dce98) +- fix: CModalHeader: simplify component: [`145fb7a`](https://github.com/coreui/coreui-react/commit/145fb7a8e7abb769ab28ad636ac367fd7a3308e9) +- - fix: CDataTable component - now with Vue Scoped Slots prop equivalent [`abd9ff1`](https://github.com/coreui/coreui-react/commit/abd9ff104f215350045b69479f7b68d9d241330e) +- fix: CWidgetDropdown: fix bugs: [`0aa4c8b`](https://github.com/coreui/coreui-react/commit/0aa4c8ba5f5bd746e9b52357bb55ba5ce66f1795) +- fix: fix modal animation mechanism [`3165af9`](https://github.com/coreui/coreui-react/commit/3165af9228ffe4a50d6a34401530362be5a58c64) +- fix: CToggler: delete 'custom' and 'type' props, clear component [`de0e368`](https://github.com/coreui/coreui-react/commit/de0e368cbe56cdcc539e93d579f99584831188dd) +- - update: innerRef value set [`6a01afc`](https://github.com/coreui/coreui-react/commit/6a01afc05488573c8ab2100f0d8ed10790be688e) +- fix: CSpinner: component refactor [`5066958`](https://github.com/coreui/coreui-react/commit/50669580ea8af68ed059790ba16bce00c1961783) +- refactor: CTooltip: limit main props to essential [`3d36c5c`](https://github.com/coreui/coreui-react/commit/3d36c5cfeca9eb8a61027261aa8eb516b96b40ac) +- fix: CNavItem: delete custom prop and correlated functionalities [`540e8c2`](https://github.com/coreui/coreui-react/commit/540e8c204c0c67139f3f54d8bd75048fc462dd5f) +- - fix: CDataTable sorting [`80d6e20`](https://github.com/coreui/coreui-react/commit/80d6e20e333285d8945109bc041fafc126e8b176) +- fix: CCardImg: Inherit CImg functionalities, change placemnt to variant [`fe1800e`](https://github.com/coreui/coreui-react/commit/fe1800e0850301cb01237487a8f4fbfbbccf0769) +- chore: CImg: clean component [`032fc29`](https://github.com/coreui/coreui-react/commit/032fc29aaf1db4393a5c8dd3a34a967e86d5006a) +- docs: README update [`18b1384`](https://github.com/coreui/coreui-react/commit/18b13848194550bd717eb5836f91ddd40829e7be) +- fix: fix memory leaks in components using timeouts [`129bb59`](https://github.com/coreui/coreui-react/commit/129bb59afb52e9425dd19a77b0d00181534e6af4) +- refactor: CNavLink: concise component [`a4634fb`](https://github.com/coreui/coreui-react/commit/a4634fbac11df253fe7af8c7a437592834057f72) +- fix: CNav: delete 'horizontal' prop, clear component [`f5f4dd1`](https://github.com/coreui/coreui-react/commit/f5f4dd16bb86b3c35f5cd22b8a62afd465b0c7a5) +- refactor: CCardLink: optimize definition [`8c65f88`](https://github.com/coreui/coreui-react/commit/8c65f882b54516b0441b99d160cc433f31618053) +- fix: CButtonClose: component refactor [`a24f91c`](https://github.com/coreui/coreui-react/commit/a24f91c8ab021b6e1514f57cbf29e0c8d45ded77) +- feat: add CModalTitle component [`c1c3033`](https://github.com/coreui/coreui-react/commit/c1c303319b2a47c60ddeef4a36824e5ff58360d2) +- fix: CBadge: allow inheriting CLink functionality, smaller fixes [`35c3df6`](https://github.com/coreui/coreui-react/commit/35c3df6537b22425b48272a6cb1d23c13684ae5e) +- fix: CNavbar: change sticky prop to bool, small fixes, clean code [`c6fbff2`](https://github.com/coreui/coreui-react/commit/c6fbff22474ad8a6336b13a131e5cd8c4f83b8cf) +- fix: missing helper exports, minor fixes [`fb4d8e3`](https://github.com/coreui/coreui-react/commit/fb4d8e3c868a386fa34e04e83880facac31eb5e7) +- fix: CButtonToolbar: component refactor: [`3bda5f7`](https://github.com/coreui/coreui-react/commit/3bda5f73ca43a1152fbce051243961eb6ad7a7b3) +- fix: CButtonGroup: delete 'tag', add default role attribute [`688eb3b`](https://github.com/coreui/coreui-react/commit/688eb3b7041535402658ddd2e63c24455f6f8c4e) +- fix: CLink: add 'disabled' prop: [`20db7d8`](https://github.com/coreui/coreui-react/commit/20db7d86c85e2f439aa6b61bd8bcdd8e10e3b318) +- feat: add CSelect component [`57468e7`](https://github.com/coreui/coreui-react/commit/57468e74b12c98ce1ed6f1d60ec8e818f683efe4) +- fix: move fade functionality from CTabs to CTabContent [`4f96e17`](https://github.com/coreui/coreui-react/commit/4f96e174bf8eb5706ec52fbdb20ad7fa5d7d8c7f) +- fix: CInput rename elementSize/size to size/sizeHtml [`95e3f29`](https://github.com/coreui/coreui-react/commit/95e3f294394035957717e6967485f93654982e96) +- feat: CCreateElement: add posibility of pasing component tag as string [`e294b4b`](https://github.com/coreui/coreui-react/commit/e294b4b6df619e75496676a41d3aeceb91e2cf42) +- fix: CTabs: add fade prop inherited by CTabPane component [`33b78e7`](https://github.com/coreui/coreui-react/commit/33b78e7b8f2c1fa071bb40cb8b444cbef8a0b0bb) +- fix: CCallout: delete tag prop, clean generating class [`5bacd2b`](https://github.com/coreui/coreui-react/commit/5bacd2b71c400f7c9af7d158ce77fbade1694d57) +- fix: CFooter: set fixed to false by default, clean component [`8e4e30c`](https://github.com/coreui/coreui-react/commit/8e4e30cd03604b6856d279cb6b9ed5ea184c22b3) +- fix: CSidebarNavDropdown: fix default closing mechanism [`c824fa7`](https://github.com/coreui/coreui-react/commit/c824fa799225494b811d85e833c379df2f7c9930) +- fix: React.Fragment backward compatible [`9ee4493`](https://github.com/coreui/coreui-react/commit/9ee44938dfee86de9691d046897be15867b0ff54) +- refactor: minor refactors [`fc2af86`](https://github.com/coreui/coreui-react/commit/fc2af866478b486379eafa4ec4c7b982af6ae94c) +- chore: clean code (linter warnings) [`79f2325`](https://github.com/coreui/coreui-react/commit/79f2325c14c91b4f3592d868336825fe555eb649) +- refactor: delete checked and onCheckedChange props [`be2f00b`](https://github.com/coreui/coreui-react/commit/be2f00b8ae5be74d5f9baf552e2fd6d3a5e59a72) +- refactor: CAlert: delete transition prop [`96e98fe`](https://github.com/coreui/coreui-react/commit/96e98fe28e6c21153d831a45e6494fb6949e6be1) +- refactor: change trigger props names to on{...}Change [`8f910c1`](https://github.com/coreui/coreui-react/commit/8f910c16554d7f805569543e24130e51c84b89c3) +- feat: add CCreateElement component [`0cee7b0`](https://github.com/coreui/coreui-react/commit/0cee7b0b4d3e306813bd86bed4e1399eb50fa25c) +- fix: CNavbarText: change default tag to 'div', clean component [`9977be0`](https://github.com/coreui/coreui-react/commit/9977be0c00ed546ac20e4a01f752981e3d3d9728) +- feat: CLink: add default rel attribute when target="_blank" [`79dad26`](https://github.com/coreui/coreui-react/commit/79dad26e4b8940304be904bc94c1cb66e58348f2) +- chore: clean components [`ef444f0`](https://github.com/coreui/coreui-react/commit/ef444f0166b395fe33217cc95eced48b5a28cb6b) +- fix: CNavBarNav: delete wrong class 'nav', clean component [`9962cdd`](https://github.com/coreui/coreui-react/commit/9962cdd6547e9ab12338bc721c7e2adec4bf7b39) +- fix: CSidebar, CSidebarNavDropdown: add default dropdown mode [`f677f5a`](https://github.com/coreui/coreui-react/commit/f677f5ae34026fb11696a90bb32900364b21d168) +- fix: update CIcon imports [`16647ba`](https://github.com/coreui/coreui-react/commit/16647ba650c73a17e68423f9d07e69f157ff6e98) +- - update: ... [`2132022`](https://github.com/coreui/coreui-react/commit/2132022438b18b31cdb844439a0c54d577925d0e) +- fix: CImg: delete 'active' and 'alt' props, smaller refactors [`78255d4`](https://github.com/coreui/coreui-react/commit/78255d4e7b4e50c2a37d3298ddeffe26b6cd25e6) +- Ship: 3.0.0-alpha.10 [`f77a972`](https://github.com/coreui/coreui-react/commit/f77a972af3b9cac1a5e19fb3056a660fba7c8c74) +- fix: minor cleanup [`4cd82cb`](https://github.com/coreui/coreui-react/commit/4cd82cb6a0474718909521675783ae8a0dc7c159) +- fix: CBreadcrumbRouter: generate path only if routes are passed [`79875db`](https://github.com/coreui/coreui-react/commit/79875dbd9595e36250255288d372d624031e0ad3) +- fix: demo cleanup [`7bd82c8`](https://github.com/coreui/coreui-react/commit/7bd82c8587f96d1ca81a69835311dda7885e06db) +- fix: CToast: correct behavior when fade is set to false [`1c73ce4`](https://github.com/coreui/coreui-react/commit/1c73ce48d2fadc8c851d7f32e3cab33532dc603d) +- Ship: 3.0.0-alpha.12 [`c440f29`](https://github.com/coreui/coreui-react/commit/c440f29454aff171b7eef40c7c52d893da96e717) +- chore: dependencies update [`09511b1`](https://github.com/coreui/coreui-react/commit/09511b156a83e2e60bed4de4d7e67825031cbe9b) +- chore: 3.0.0-rc.1 release [`6b7819e`](https://github.com/coreui/coreui-react/commit/6b7819e4ec69f91ed24bef2dfdd56ab71d58f2a3) +- - fix: default values for custom=true by default components set [`1c0a95e`](https://github.com/coreui/coreui-react/commit/1c0a95e2eeb4b28f9b681522d579c6d63dd5e67c) +- - fix: CSlot render now null instead of '' (in some cases generate warnings) [`f00913e`](https://github.com/coreui/coreui-react/commit/f00913e6da18eb412a57c5a1be3621515996438d) +- chore: change CIcon imports to CIconRaw imports [`0a18a61`](https://github.com/coreui/coreui-react/commit/0a18a61e9949b7e72e5749d9d0d0d22f6fab655c) +- fix: CDataTable restore loading functionality: [`b8f2aaa`](https://github.com/coreui/coreui-react/commit/b8f2aaa3ba91e4c0e1c10cce633b097788e9c4fa) +- refactor: CAlert: add CButtonClose component instead off html button [`91e7254`](https://github.com/coreui/coreui-react/commit/91e725437a42001ebda51addfdc570c2924f3599) +- fix: Attempted import error: '@coreui/icons-react' does not contain a default export (imported as 'CIcon') [`f107c35`](https://github.com/coreui/coreui-react/commit/f107c3506cbc31e1fad031d6d3c414e8a90b568f) +- fix: CDataTable: make recalculation mechanism 100% safe [`a6bc1df`](https://github.com/coreui/coreui-react/commit/a6bc1df75f1018e869150c59eb1106cd52178d94) +- Ship: 3.0.0-alpha.1 [`c17a4be`](https://github.com/coreui/coreui-react/commit/c17a4be596669e351d2f501bd5abf84b642bdfb0) +- chore: dependencies update and module fix [`86c4295`](https://github.com/coreui/coreui-react/commit/86c429579caeba2dbd3c9174d5fc260050e20551) +- chore: 3.0.0-beta.6 release [`ef24ff2`](https://github.com/coreui/coreui-react/commit/ef24ff2e7840497852ef52c0532d18e490fcc254) +- fix: CDataTable: fix bugs, protect against non-array 'items' prop [`c081868`](https://github.com/coreui/coreui-react/commit/c0818681f8766077f7fa6f445125d3856c258f1f) +- fix: fix passing refs to components [`2752af4`](https://github.com/coreui/coreui-react/commit/2752af44a5cc56749fc60c686576e2aa4c8ee1e1) +- fix: small fixes [`a00cc4f`](https://github.com/coreui/coreui-react/commit/a00cc4f7f3c597dfa3ad7a90ef34006c3b014967) +- fix(CSwitch): A component is changing an uncontrolled input of type checkbox to be controlled [`955370e`](https://github.com/coreui/coreui-react/commit/955370e600fd19ec25bdffaea4ca37be9ad981a2) +- - fix: link to Icon changed from dir to @ [`466c8f5`](https://github.com/coreui/coreui-react/commit/466c8f56439d082fdfe1a762b8e9d3d89d59d6f7) +- refactor: replace CFormFeedback with CValidFeedback and CInvalidFeedback [`1e9f0b1`](https://github.com/coreui/coreui-react/commit/1e9f0b161fb985f4d52f1ba81819fad2c13d5c8a) +- - link to navlink [`294d642`](https://github.com/coreui/coreui-react/commit/294d642a6aaa8a5b7af09c1ccfce775c6fa4c09c) +- refactor: CBadge: clean component [`b33d2a3`](https://github.com/coreui/coreui-react/commit/b33d2a35f887c437ea9622868a8535fa380e1b35) +- fix: CCreateElement: fix passing children [`51ad5f4`](https://github.com/coreui/coreui-react/commit/51ad5f41824f392710d523377271cfdedf0f8c0d) +- chore: dependencies update [`b22e1ae`](https://github.com/coreui/coreui-react/commit/b22e1ae40cd54d758b893c400d2792de11157fc2) +- fix: CSidebarNavItem: add innerRef prop [`dde7f1c`](https://github.com/coreui/coreui-react/commit/dde7f1c5b319edc554cdd3602e7603987295c818) +- - fix: CCard default custom value set to true [`5c86a3a`](https://github.com/coreui/coreui-react/commit/5c86a3afca48ac606ed8abcd9615aa48c759dc21) +- update: unused vars removed from CToastHeader [`2209f71`](https://github.com/coreui/coreui-react/commit/2209f71d2d9d139bf04e37201ce15aba8d5a7580) +- chore: 3.0.0-beta.7 release [`5c3b022`](https://github.com/coreui/coreui-react/commit/5c3b022b92122504f9d77025606500430862299d) +- fix: CSidebarNavDropdown: place useLocation hook in try/catch block [`2365228`](https://github.com/coreui/coreui-react/commit/236522882f5a60c189c4f380fa7ac2a12627412a) +- fix: CSidebar: emit onShowChange only on close [`6be35c6`](https://github.com/coreui/coreui-react/commit/6be35c6918ef5465510fed0132b757c122224e2a) +- fix: CSidebar: fix updating sidebar state [`7217997`](https://github.com/coreui/coreui-react/commit/7217997d3b67a669e054b149a76ebccda2d7c3b0) +- chore: dependencies update [`0dec2d4`](https://github.com/coreui/coreui-react/commit/0dec2d48294d39795db98c1ef2c6af020e0f48d9) +- fix: CMediaBody, CMediaFooter: minor fixes [`08b7460`](https://github.com/coreui/coreui-react/commit/08b74606fb6bf7eac834ca096e920f024979a2a3) +- chore: dependencies update and cleanup [`ea1736d`](https://github.com/coreui/coreui-react/commit/ea1736d554933ad67ceab6628a8d2127cf99567a) +- fix: CScrollbar: fix rtl mode [`fa66112`](https://github.com/coreui/coreui-react/commit/fa66112b0d81e0c9610f1e2d846970cc8b4f45e3) +- Ship: 3.0.0-alpha.11 [`278d97b`](https://github.com/coreui/coreui-react/commit/278d97bd8f607fc191578a109abeb7b517d58f2c) +- fix: restore footer slot to CWidgetIcon component [`5b18abd`](https://github.com/coreui/coreui-react/commit/5b18abd657639e7d29149d2475596f2021caaeb9) +- fix: CBreadcrumb: fix cssModules [`eb1623f`](https://github.com/coreui/coreui-react/commit/eb1623f6a16c15c60277bdca5a211a1c5d08a77d) +- chore: 3.0.0-rc.2 version release [`c30698c`](https://github.com/coreui/coreui-react/commit/c30698cfaed8282d045b2ee4d9dd51b72ea3b5fc) +- fix: CSidebarNavDropdown: fix default mode for nested dropdowns [`c5922ca`](https://github.com/coreui/coreui-react/commit/c5922ca941b7393a02ff31770ea0d9b2ba42fceb) +- chore: dependencies update [`080e634`](https://github.com/coreui/coreui-react/commit/080e6341afb00bae2e20d4db38cd0d5fd6d0f8d3) +- refactor(CSidebarNavDroprdown): add console.warn on undefined pathname [`b127ecf`](https://github.com/coreui/coreui-react/commit/b127ecffb1d993b334e79e4cff57784522a2d081) +- chore: 3.0.0-beta.5 release [`bcec1de`](https://github.com/coreui/coreui-react/commit/bcec1deb5dce3d5070a87e769c10cfeae8b0fd90) +- fix: isObject typo [`97bf646`](https://github.com/coreui/coreui-react/commit/97bf64695d18dda40b3c5c4ed0d1ce16ccde733f) +- fix: CSpinner: fix aria attributes [`7dd7aae`](https://github.com/coreui/coreui-react/commit/7dd7aaece47be51fa9c9d7cdd7759efc2a9ddd00) +- fix: CPagination: add disabled prop to inactive links [`af9a1c2`](https://github.com/coreui/coreui-react/commit/af9a1c25ffa93173529686421f1e2c622a960a3e) +- fix: CTabPane: fix tab assignment [`3d9f041`](https://github.com/coreui/coreui-react/commit/3d9f0415128ea8890ec97bddde109377fb1a6f3d) +- fix: CDropdown: add specific arrow class [`9c937b5`](https://github.com/coreui/coreui-react/commit/9c937b51885a94e8f29d845bec850320b416b0b5) +- Ship: 3.0.0-alpha.7 [`88f054c`](https://github.com/coreui/coreui-react/commit/88f054c84fcb23abffffe32909c5a33fda6c5e56) +- fix: CBreadcrumbRouter: add key to items [`bd0fbd4`](https://github.com/coreui/coreui-react/commit/bd0fbd4d60261e1fa5a9483d68c5839355d5adc4) +- chore: add CSelect component to exports [`4c25748`](https://github.com/coreui/coreui-react/commit/4c2574800e0c88a19cc00aaec693aa4d334f90b6) +- - fix: custom by default true for CNavItem [`29e24cf`](https://github.com/coreui/coreui-react/commit/29e24cf5b7288fde16fd8e6a93713b748f09b042) +- fix: CDropdown: delete development console.log [`e64c1ef`](https://github.com/coreui/coreui-react/commit/e64c1ef025396cec530283ea431c13827754e0c9) +- fix: CDropdown: add missing 'show' and 'dropdown' classes [`71e9122`](https://github.com/coreui/coreui-react/commit/71e91225854acdf35d56aaae3c95e413cd8c2a6c) +- refactor: cleanup [`d88bcb3`](https://github.com/coreui/coreui-react/commit/d88bcb339f0e5564fb5439dd3c2d66eeb8fb1eec) +- fix: fix modules in package.json [`c7ad9a5`](https://github.com/coreui/coreui-react/commit/c7ad9a546f1fb8797838842a828b2b8fd891ecfe) +- fix: CLink: stop passing false to rel attribute [`7b7d9c6`](https://github.com/coreui/coreui-react/commit/7b7d9c6022acfa8c8505d55044b851ab2575f0c8) +- fix: CProgressBar: fix striped state [`f1817f5`](https://github.com/coreui/coreui-react/commit/f1817f5d606fc1fdaf618b9974d700606be40a1e) +- fix: CTabPane: fix error occuring when context is not passed [`ee952af`](https://github.com/coreui/coreui-react/commit/ee952af324f343bd923b90fb3f21e46d1841fdad) +- fix: CDropdownToggle: allow caret in link toggle [`c7f6eba`](https://github.com/coreui/coreui-react/commit/c7f6ebabc82b9c542e78d75f376755ed19651df7) +- Ship: 3.0.0-alpha.9 [`6d9a3f3`](https://github.com/coreui/coreui-react/commit/6d9a3f31abc2d4383711ee5caee796f4219944ee) +- Ship: 3.0.0-alpha.8 [`c408665`](https://github.com/coreui/coreui-react/commit/c408665ba4c787872526de1f961708169232112e) +- fix: change default 'fixed' value to true [`7c824c4`](https://github.com/coreui/coreui-react/commit/7c824c45e762eac6987688d50b2eb28514358ef6) +- chore: enable library rapid development and installing from gh [`543dffd`](https://github.com/coreui/coreui-react/commit/543dffda4d492df82b42f6433b0734fb50ab5978) +- Ship: 3.0.0-alpha.6 [`a64f06e`](https://github.com/coreui/coreui-react/commit/a64f06ec42e7f4dda9d9ccb21fba85f1cf57065b) +- fix: es module [`5790081`](https://github.com/coreui/coreui-react/commit/5790081227b21ab79b85343a9eec1d6e2df7a4a3) +- chore: import from source instead of module [`d09a4b8`](https://github.com/coreui/coreui-react/commit/d09a4b86ea7b595d3f28f3632b2145c69530ac26) +- fix: CProgress: fix 'height' propType [`511c2a2`](https://github.com/coreui/coreui-react/commit/511c2a2fb351d9dea7afee34f1de93e26157c6bb) +- - fix: CNavbar classes [`3e9994a`](https://github.com/coreui/coreui-react/commit/3e9994a4f2b214b7fd94b36770318717fea20c4d) +- fix(CSidebarNavItem): Invalid argument supplied to to oneOfType [`d7f38e1`](https://github.com/coreui/coreui-react/commit/d7f38e1b81fc9617430a2cc38b7941e3997a5bf7) +- - console.log removed [`5a0b08a`](https://github.com/coreui/coreui-react/commit/5a0b08a511e97012fd429bf0a8f1ac27e0448106) +- fix: CSidebarNav: remove obsolete styles [`dbe7dc4`](https://github.com/coreui/coreui-react/commit/dbe7dc464941c5ff1b6e05c63d44dfc5a0ad12dc) diff --git a/LICENSE b/LICENSE index fbb053e0..010704f9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025 creativeLabs Łukasz Holeczek +Copyright (c) 2020 creativeLabs Łukasz Holeczek Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 96d149a2..ed84c282 100644 --- a/README.md +++ b/README.md @@ -1,230 +1,76 @@ -

- - CoreUI logo - -

- -

CoreUI for React.js

- -

- React.js Components Library built on top of Bootstrap 5 and TypeScript. -
- Explore CoreUI for React.js docs » -
-
- Report bug - · - Request feature - · - Blog -

- - -## Table of contents - -- [Quick start](#quick-start) -- [Components](#components) -- [Status](#status) -- [Bugs and feature requests](#bugs-and-feature-requests) -- [Documentation](#documentation) -- [Frameworks](#frameworks) -- [Templates](#templates) -- [Contributing](#contributing) -- [Community](#community) -- [Versioning](#versioning) -- [Creators](#creators) -- [Support CoreUI Development](#support-coreui-development) -- [Copyright and license](#copyright-and-license) - -## Quick start - -### Instalation - -Several quick start options are available: - -- [Download the latest release](https://github.com/coreui/coreui-react/archive/v5.7.1.zip) -- Clone the repo: `git clone https://github.com/coreui/coreui-react.git` -- Install with [npm](https://www.npmjs.com/): `npm install @coreui/react` -- Install with [yarn](https://yarnpkg.com/): `yarn add @coreui/react` - -Read the [Getting started page](https://coreui.io/react/docs/getting-started/introduction/) for information on the framework contents, templates and examples, and more. - -### Stylesheets - -React components are styled using `@coreui/coreui` CSS library, but you can use them also with bootstrap CSS library. That is possible because `@coreui/coreui` library is compatible with bootstrap, it just extends its functionalities. The only exception are custom CoreUI components, which don't exist in the Bootstrap ecosystem. - -#### CoreUI CSS files - -##### Installation - -```bash -yarn add @coreui/coreui -``` - -or - -```bash -npm install @coreui/coreui --save -``` +# CoreUI React components library -##### Basic usage +[![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=CoreUI%20-%20Free%20Vue%20Admin%20Template%20&url=http://coreui.io/react/&hashtags=bootstrap,admin,template,dashboard,panel,free,angular,react,vue) +[![npm_latest][npm-coreui-react-badge-latest]][npm-coreui-react] +[![npm next][npm-coreui-react-badge-next]][npm-coreui-react] +[![NPM downloads][npm-coreui-react-download]][npm-coreui-react] +[![Build](https://github.com/coreui/coreui-react/actions/workflows/project-check.yml/badge.svg)](https://github.com/coreui/coreui-react/actions/workflows/project-check.yml) +[![Daily check](https://github.com/coreui/coreui-react/actions/workflows/daily-project-check.yml/badge.svg)](https://github.com/coreui/coreui-react/actions/workflows/daily-project-check.yml) +[![react](https://img.shields.io/badge/react-^17.0.1-lightgrey.svg?style=flat-square&logo=react)][coreui] -```js -import '@coreui/coreui/dist/css/coreui.min.css' -``` +[npm-coreui-react-download]: https://img.shields.io/npm/dm/@coreui/react.svg?style=flat-square +[npm-coreui-react]: https://www.npmjs.com/package/@coreui/react +[npm-coreui-react-badge-latest]: https://img.shields.io/npm/v/@coreui/react/latest?style=flat-square +[npm-coreui-react-badge-next]: https://img.shields.io/npm/v/@coreui/react/next?style=flat-square +[coreui]: https://coreui.io/react -#### Bootstrap CSS files +##### @coreui/react v3 for [CoreUI 3 for React](https://coreui.io/react/) -##### Installation +###### Over 90 bootstrap based React components and directives -```bash -yarn add bootstrap -``` +##### For library guide please visit our [Documentation site »](https://coreui.io/react/docs) -or +Check out demo of components usage: [CoreUI React Admin Template »](https://coreui.io/react/demo) -```bash -npm install bootstrap -``` +![Template](https://coreui.io/images/github/vue-free-template-3.gif) -##### Basic usage +### Installation -```js -import "bootstrap/dist/css/bootstrap.min.css"; +Before installation you need to install [node and npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) on your machine. +```shell +npm install @coreui/react ``` -## Components - -- [React Accordion](https://coreui.io/react/docs/components/accordion/) -- [React Alert](https://coreui.io/react/docs/components/alert/) -- [React Avatar](https://coreui.io/react/docs/components/avatar/) -- [React Badge](https://coreui.io/react/docs/components/badge/) -- [React Breadcrumb](https://coreui.io/react/docs/components/breadcrumb/) -- [React Button](https://coreui.io/react/docs/components/button/) -- [React Button Group](https://coreui.io/react/docs/components/button-group/) -- [React Callout](https://coreui.io/react/docs/components/callout/) -- [React Card](https://coreui.io/react/docs/components/card/) -- [React Carousel](https://coreui.io/react/docs/components/carousel/) -- [React Checkbox](https://coreui.io/react/docs/forms/checkbox/) -- [React Close Button](https://coreui.io/react/docs/components/close-button/) -- [React Collapse](https://coreui.io/react/docs/components/collapse/) -- [React Date Picker](https://coreui.io/react/docs/forms/date-picker/) **PRO** -- [React Date Range Picker](https://coreui.io/react/docs/forms/date-range-picker/) **PRO** -- [React Dropdown](https://coreui.io/react/docs/components/dropdown/) -- [React Floating Labels](https://coreui.io/react/docs/forms/floating-labels/) -- [React Footer](https://coreui.io/react/docs/components/footer/) -- [React Header](https://coreui.io/react/docs/components/header/) -- [React Image](https://coreui.io/react/docs/components/image/) -- [React Input](https://coreui.io/react/docs/forms/input/) -- [React Input Group](https://coreui.io/react/docs/forms/input-group/) -- [React List Group](https://coreui.io/react/docs/components/list-group/) -- [React Loading Button](https://coreui.io/react/docs/components/loading-button/) **PRO** -- [React Modal](https://coreui.io/react/docs/components/modal/) -- [React Multi Select](https://coreui.io/react/docs/forms/multi-select/) **PRO** -- [React Navs & Tabs](https://coreui.io/react/docs/components/navs-tabs/) -- [React Navbar](https://coreui.io/react/docs/components/navbar/) -- [React Offcanvas](https://coreui.io/react/docs/components/offcanvas/) -- [React Pagination](https://coreui.io/react/docs/components/pagination/) -- [React Placeholder](https://coreui.io/react/docs/components/placeholder/) -- [React Popover](https://coreui.io/react/docs/components/popover/) -- [React Progress](https://coreui.io/react/docs/components/progress/) -- [React Radio](https://coreui.io/react/docs/forms/radio/) -- [React Range](https://coreui.io/react/docs/forms/range/) -- [React Rating](https://coreui.io/react/docs/forms/rating/) -- [React Select](https://coreui.io/react/docs/forms/select/) -- [React Sidebar](https://coreui.io/react/docs/components/sidebar/) -- [React Smart Pagination](https://coreui.io/react/docs/components/smart-pagination/) **PRO** -- [React Smart Table](https://coreui.io/react/docs/components/smart-table/) **PRO** -- [React Spinner](https://coreui.io/react/docs/components/spinner/) -- [React Switch](https://coreui.io/react/docs/forms/switch/) -- [React Table](https://coreui.io/react/docs/components/table/) -- [React Textarea](https://coreui.io/react/docs/forms/textarea/) -- [React Time Picker](https://coreui.io/react/docs/forms/time-picker/) **PRO** -- [React Toast](https://coreui.io/react/docs/components/toast/) -- [React Tooltip](https://coreui.io/react/docs/components/tooltip/) - -## Status - -[![npm version](https://img.shields.io/npm/v/@coreui/react)](https://www.npmjs.com/package/@coreui/react) - -## Bugs and feature requests - -Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/coreui/coreui-react/blob/v4/.github/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/coreui/coreui-react/issues/new). - -## Documentation - -The documentation for the CoreUI & CoreUI PRO is hosted at our website [CoreUI for React](https://coreui.io/react/docs/getting-started/introduction) - -### Running documentation locally - -1. Run `yarn install` or `npm install` to install the Node.js dependencies. -2. Run `yarn bootstrap` or `npm run bootstrap` to link local packages together and install remaining package dependencies. -3. From the root directory, run `yarn docs:dev` or `npm run docs:dev` (or a specific npm script) to rebuild distributed CSS and JavaScript files, as well as our docs assets. -4. Open `http://localhost:8000/` in your browser, and voilà. - -## Frameworks +#### Styling -CoreUI supports most popular frameworks. +Components are styled using @coreui/coreui CSS library, but you can use them also with bootstrap CSS library. That is possible because @coreui/coreui library is compatible with bootstrap, it just extends its functionalities. The only exception is custom CoreUI components, which don't exist in the Bootstrap ecosystem (template components, callout, switch). -- [CoreUI for Angular](https://github.com/coreui/coreui-angular) -- [CoreUI for Bootstrap (Vanilla JS)](https://github.com/coreui/coreui) -- [CoreUI for React](https://github.com/coreui/coreui-react) -- [CoreUI for Vue](https://github.com/coreui/coreui-vue) +Styles have to be imported separately! Import [CoreUI](https://github.com/coreui/coreui) CSS library (recommended), or [Bootstrap](https://getbootstrap.com/) library -## Templates - -Fully featured, out-of-the-box, templates for your application based on CoreUI. - -- [Angular Admin Template](https://coreui.io/angular) -- [Bootstrap Admin Template](https://coreui.io/) -- [React Admin Template](https://coreui.io/react) -- [Vue Admin Template](https://coreui.io/vue) - -## Contributing - -Please read through our [contributing guidelines](https://github.com/coreui/coreui-react/blob/v4/.github/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development. - -Editor preferences are available in the [editor config](https://github.com/coreui/coreui-react/blob/v4/.editorconfig) for easy use in common text editors. Read more and download plugins at . - -## Community - -Stay up to date on the development of CoreUI and reach out to the community with these helpful resources. - -- Read and subscribe to [The Official CoreUI Blog](https://coreui.io/blog/). - -You can also follow [@core_ui on Twitter](https://twitter.com/core_ui). - -## Versioning - -For transparency into our release cycle and in striving to maintain backward compatibility, CoreUI is maintained under [the Semantic Versioning guidelines](http://semver.org/). - -See [the Releases section of our project](https://github.com/coreui/coreui-react/releases) for changelogs for each release version. - -## Creators +Installation: +```shell +npm install @coreui/coreui +``` -**Łukasz Holeczek** +Styles usage: +```scss +@import "~@coreui/coreui/scss/coreui"; +``` -* -* +### Changelog +See the GitHub [release history](https://github.com/coreui/coreui-react/releases). -**Andrzej Kopański** +### Contributing +See [CONTRIBUTING.md](https://github.com/coreui/coreui-react/blob/master/CONTRIBUTING.md). -* +### Credits +Some design ideas and solutions in this library inspired by [reactstrap library](https://reactstrap.github.io/) -**CoreUI Team** -* -* -* +--- +- bootstrapped with [nwb](https://github.com/insin/nwb) toolkit -## Support CoreUI Development +#### `npm run` scripts -CoreUI is an MIT-licensed open source project and is completely free to use. However, the amount of effort needed to maintain and develop new features for the project is not sustainable without proper financial backing. You can support development by buying the [CoreUI PRO](https://coreui.io/pricing/?framework=react&src=github-coreui-react) or by becoming a sponsor via [Open Collective](https://opencollective.com/coreui/). +`package.json` is configured with `"scripts"` we can use with `npm run` while developing the project. -## Copyright and license +Command | Description | +--- | --- +`npm test` | run tests +`npm run test:coverage` | run tests and produce a code coverage report in `coverage/` +`npm run test:watch` | start a test server and re-run tests on every change +`npm run build` | prepare for publishing to npm +`npm run clean` | delete built resources -Copyright 2025 creativeLabs Łukasz Holeczek. Code released under the [MIT License](https://github.com/coreui/coreui-react/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/). \ No newline at end of file +#### see also: +- [Developing React Components and Libraries with nwb](https://github.com/insin/nwb/blob/master/docs/guides/ReactComponents.md#developing-react-components-and-libraries-with-nwb) diff --git a/babel.config.cjs b/babel.config.cjs new file mode 100644 index 00000000..e1bf5250 --- /dev/null +++ b/babel.config.cjs @@ -0,0 +1,48 @@ +module.exports = { + "presets": [ + [ + "@babel/env", + { + "shippedProposals": true, + "modules": false, + "targets": { + "ie": 11 + } + } + ], + "@babel/react" + ], + "plugins": [ + "@babel/plugin-proposal-export-default-from", + "@babel/plugin-proposal-export-namespace-from", + "@babel/plugin-transform-runtime", "@babel/plugin-proposal-object-rest-spread" + ], + "env": { + "esm-dir": { + "presets": [ + [ + "@babel/env", + { + "loose": true, + "shippedProposals": true, + "modules": false, + "targets": { + "ie": 11 + } + } + ], + "@babel/react" + ], + "plugins": [["@babel/plugin-transform-runtime", { "useESModules": true }]] + }, + "test": { + "presets": [ + "@babel/env", "@babel/preset-react" + ], + "plugins": [ + "babel-plugin-dynamic-import-node", + // 'babel-plugin-transform-dynamic-import' + ] + } + } +} \ No newline at end of file diff --git a/es/CPortal.js b/es/CPortal.js new file mode 100644 index 00000000..beb2e436 --- /dev/null +++ b/es/CPortal.js @@ -0,0 +1,36 @@ +// import {useEffect, useRef} from 'react'; +// import ReactDOM from 'react-dom'; +// import PropTypes from 'prop-types'; +// import {canUseDOM} from './utils/helper.js'; +// //component - CoreUI / CPortal +// const CPortal = props=>{ +// const fields = useRef({defaultNode: null}).current; +// // effect +// useEffect(() => { +// return function cleanup() { +// if (fields.defaultNode) { +// document.body.removeChild(fields.defaultNode); +// } +// fields.defaultNode = null; +// }; +// }, +// [fields.defaultNode]); +// // render +// if (!canUseDOM) { +// return null; +// } +// if (!props.node && !fields.defaultNode) { +// fields.defaultNode = document.createElement('div'); +// document.body.appendChild(fields.defaultNode); +// } +// return ReactDOM.createPortal( +// props.children, +// props.node || fields.defaultNode +// ); +// } +// CPortal.propTypes = { +// children: PropTypes.node.isRequired, +// // +// node: PropTypes.any +// }; +// export default CPortal; \ No newline at end of file diff --git a/es/README.md b/es/README.md new file mode 100644 index 00000000..00e07c57 --- /dev/null +++ b/es/README.md @@ -0,0 +1,19 @@ +## @coreui/react v3 for [CoreUI 3 for React](https://coreui.io/react/) + +[![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=CoreUI%20-%20Free%20Vue%20Admin%20Template%20&url=http://coreui.io/react/&hashtags=bootstrap,admin,template,dashboard,panel,free,angular,react,vue) +[![npm_latest][npm-coreui-react-badge-latest]][npm-coreui-react] +[![npm next][npm-coreui-react-badge-next]][npm-coreui-react] +[![NPM downloads][npm-coreui-react-download]][npm-coreui-react] +[![Build](https://img.shields.io/github/workflow/status/coreui/coreui-react/Project%20check?style=flat-square)][coreui] +[![react](https://img.shields.io/badge/react-^17.0.1-lightgrey.svg?style=flat-square&logo=react)][coreui] + +[npm-coreui-react-download]: https://img.shields.io/npm/dm/@coreui/react.svg?style=flat-square +[npm-coreui-react]: https://www.npmjs.com/package/@coreui/react +[npm-coreui-react-badge-latest]: https://img.shields.io/npm/v/@coreui/react/latest?style=flat-square +[npm-coreui-react-badge-next]: https://img.shields.io/npm/v/@coreui/react/next?style=flat-square +[coreui]: https://coreui.io/react + + +```bash +npm install @coreui/react +``` diff --git a/es/alert/CAlert.js b/es/alert/CAlert.js new file mode 100644 index 00000000..40417b26 --- /dev/null +++ b/es/alert/CAlert.js @@ -0,0 +1,82 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useState, useEffect, useRef } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import CFade from '../fade/CFade'; +import { omitByKeys } from '@coreui/utils/src'; +import { CFadeProps } from '../utils/helper.js'; +import CButtonClose from '../button/CButtonClose'; //component - CoreUI / CAlert + +var CAlert = function CAlert(props) { + var _classNames; + + var children = props.children, + className = props.className, + innerRef = props.innerRef, + onShowChange = props.onShowChange, + closeButton = props.closeButton, + color = props.color, + fade = props.fade, + show = props.show, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "innerRef", "onShowChange", "closeButton", "color", "fade", "show"]); //render + + + var classes = classNames(className, 'alert', (_classNames = {}, _classNames["alert-" + color] = color, _classNames['alert-dismissible'] = closeButton, _classNames)); + var alertTransition = { + baseClass: fade ? CFade.baseClass : '', + timeout: fade ? CFade.timeout : 0, + unmountOnExit: true + }; + + var _useState = useState(show), + isOpen = _useState[0], + setIsOpen = _useState[1]; + + useEffect(function () { + setIsOpen(show); + }, [show]); + var timeout = useRef(); + useEffect(function () { + onShowChange && onShowChange(isOpen); + clearTimeout(timeout.current); + + if (typeof isOpen === 'number' && isOpen > 0) { + timeout.current = setTimeout(function () { + setIsOpen(isOpen - 1); + }, 1000); + } + + return function () { + return clearTimeout(timeout.current); + }; + }, [isOpen]); + var attrs = omitByKeys(attributes, CFadeProps); + return /*#__PURE__*/React.createElement(CFade, _extends({}, alertTransition, { + className: classes, + in: Boolean(isOpen), + role: "alert" + }, attrs, { + innerRef: innerRef + }), children, closeButton && /*#__PURE__*/React.createElement(CButtonClose, { + onClick: function onClick() { + return setIsOpen(false); + } + })); +}; + +CAlert.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.object, PropTypes.array]), + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + onShowChange: PropTypes.func, + closeButton: PropTypes.bool, + color: PropTypes.string, + fade: PropTypes.bool, + show: PropTypes.oneOfType([PropTypes.bool, PropTypes.number]) +}; +CAlert.defaultProps = { + show: true, + fade: true +}; +export default CAlert; \ No newline at end of file diff --git a/es/badge/CBadge.js b/es/badge/CBadge.js new file mode 100644 index 00000000..e068d3a7 --- /dev/null +++ b/es/badge/CBadge.js @@ -0,0 +1,39 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; +import CLink from '../link/CLink'; //component - CoreUI / CBadge + +var CBadge = function CBadge(props) { + var _classNames, _ref; + + var tag = props.tag, + className = props.className, + innerRef = props.innerRef, + color = props.color, + shape = props.shape, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "color", "shape"]); // render + + + var classes = classNames(className, 'badge', (_classNames = {}, _classNames["badge-" + color] = color, _classNames["badge-" + shape] = shape, _classNames)); + var Tag = attributes.to || attributes.href ? CLink : tag; + var ref = (_ref = {}, _ref["" + (typeof Tag === 'string' ? 'ref' : 'innerRef')] = innerRef, _ref); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, ref)); +}; + +CBadge.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + color: PropTypes.string, + shape: PropTypes.oneOf(['', 'pill']) +}; +CBadge.defaultProps = { + tag: 'span' +}; +export default CBadge; \ No newline at end of file diff --git a/es/breadcrumb/CBreadcrumb.js b/es/breadcrumb/CBreadcrumb.js new file mode 100644 index 00000000..bd588eb7 --- /dev/null +++ b/es/breadcrumb/CBreadcrumb.js @@ -0,0 +1,27 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CBreadcrumb + +var CBreadcrumb = function CBreadcrumb(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); + + var classes = classNames(className, 'breadcrumb'); //render + + return /*#__PURE__*/React.createElement("ol", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CBreadcrumb.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CBreadcrumb; \ No newline at end of file diff --git a/es/breadcrumb/CBreadcrumbItem.js b/es/breadcrumb/CBreadcrumbItem.js new file mode 100644 index 00000000..7a2f9718 --- /dev/null +++ b/es/breadcrumb/CBreadcrumbItem.js @@ -0,0 +1,30 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CBreadcrumbItem + +var CBreadcrumbItem = function CBreadcrumbItem(props) { + var className = props.className, + innerRef = props.innerRef, + active = props.active, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "active"]); //render + + + var classes = classNames(className, active ? 'active' : false, 'breadcrumb-item'); + return /*#__PURE__*/React.createElement("li", _extends({ + className: classes, + role: "presentation", + "aria-current": active ? 'page' : undefined + }, attributes, { + ref: innerRef + })); +}; + +CBreadcrumbItem.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + active: PropTypes.bool +}; +export default CBreadcrumbItem; \ No newline at end of file diff --git a/es/breadcrumb/CBreadcrumbRouter.js b/es/breadcrumb/CBreadcrumbRouter.js new file mode 100644 index 00000000..bd4e6dc8 --- /dev/null +++ b/es/breadcrumb/CBreadcrumbRouter.js @@ -0,0 +1,91 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React from "react"; +import PropTypes from "prop-types"; +import classNames from "classnames"; +import CBreadcrumb from "./CBreadcrumb"; +import CBreadcrumbItem from "./CBreadcrumbItem"; // import { Link, useLocation, matchPath } from 'react-router-dom'; + +import Link from "next/link"; +import matchPath from "./matchPath"; //component - CoreUI / CBreadcrumbRouter + +var getPaths = function getPaths(pathname) { + var paths = ["/"]; + if (pathname === "/") return paths; + pathname.split("/").reduce(function (prev, curr) { + var currPath = prev + "/" + curr; + paths.push(currPath); + return currPath; + }); + return paths; +}; + +var CBreadcrumbRouteItem = function CBreadcrumbRouteItem(_ref, fullCurrPath) { + var name = _ref.name, + currPath = _ref.currPath; + + if (currPath === fullCurrPath) { + return /*#__PURE__*/React.createElement(CBreadcrumbItem, { + key: currPath, + active: true + }, name); + } else { + return /*#__PURE__*/React.createElement(CBreadcrumbItem, { + key: currPath + }, /*#__PURE__*/React.createElement(Link, { + href: currPath + }, name)); + } +}; + +var CBreadcrumbRouter = function CBreadcrumbRouter(props) { + var className = props.className, + innerRef = props.innerRef, + routes = props.routes, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "routes"]); + + var items = null; + + if (routes) { + // const currPath = useLocation().pathname + var currPath = window.location.pathname; + var paths = getPaths(currPath); + var currRoutes = paths.map(function (currPath) { + var route = routes.find(function (route) { + return matchPath(currPath, { + path: route.path, + exact: route.exact + }); + }); + return _objectSpread(_objectSpread({}, route), {}, { + currPath: currPath + }); + }).filter(function (route) { + return route && route.name; + }); + items = currRoutes.map(function (route) { + return CBreadcrumbRouteItem(route, currPath); + }); + } //render + + + var classes = classNames(className); + return /*#__PURE__*/React.createElement(CBreadcrumb, _extends({ + className: classes + }, attributes, { + ref: innerRef + }), items); +}; + +CBreadcrumbRouter.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + routes: PropTypes.array +}; +export default CBreadcrumbRouter; \ No newline at end of file diff --git a/es/breadcrumb/matchPath.js b/es/breadcrumb/matchPath.js new file mode 100644 index 00000000..c481cb9a --- /dev/null +++ b/es/breadcrumb/matchPath.js @@ -0,0 +1,82 @@ +import { pathToRegexp } from "path-to-regexp"; +var cache = {}; +var cacheLimit = 10000; +var cacheCount = 0; + +function compilePath(path, options) { + var cacheKey = "" + options.end + options.strict + options.sensitive; + var pathCache = cache[cacheKey] || (cache[cacheKey] = {}); + if (pathCache[path]) return pathCache[path]; + var keys = []; + var regexp = pathToRegexp(path, keys, options); + var result = { + regexp: regexp, + keys: keys + }; + + if (cacheCount < cacheLimit) { + pathCache[path] = result; + cacheCount++; + } + + return result; +} +/** + * Public API for matching a URL pathname to a path. + */ + + +function matchPath(pathname, options) { + if (options === void 0) { + options = {}; + } + + if (typeof options === "string" || Array.isArray(options)) { + options = { + path: options + }; + } + + var _options = options, + path = _options.path, + _options$exact = _options.exact, + exact = _options$exact === void 0 ? false : _options$exact, + _options$strict = _options.strict, + strict = _options$strict === void 0 ? false : _options$strict, + _options$sensitive = _options.sensitive, + sensitive = _options$sensitive === void 0 ? false : _options$sensitive; + var paths = [].concat(path); + return paths.reduce(function (matched, path) { + if (!path && path !== "") return null; + if (matched) return matched; + + var _compilePath = compilePath(path, { + end: exact, + strict: strict, + sensitive: sensitive + }), + regexp = _compilePath.regexp, + keys = _compilePath.keys; + + var match = regexp.exec(pathname); + if (!match) return null; + var url = match[0], + values = match.slice(1); + var isExact = pathname === url; + if (exact && !isExact) return null; + return { + path: path, + // the path used to match + url: path === "/" && url === "" ? "/" : url, + // the matched portion of the URL + isExact: isExact, + // whether or not we matched exactly + params: keys.reduce(function (memo, key, index) { + memo[key.name] = values[index]; + return memo; + }, {}) + }; + }, null); +} + +export default matchPath; \ No newline at end of file diff --git a/es/button/CButton.js b/es/button/CButton.js new file mode 100644 index 00000000..0b13b7c1 --- /dev/null +++ b/es/button/CButton.js @@ -0,0 +1,74 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; +import CLink from '../link/CLink'; //component - CoreUI / CButton + +var CButton = function CButton(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + onClick = props.onClick, + disabled = props.disabled, + active = props.active, + block = props.block, + color = props.color, + size = props.size, + pressed = props.pressed, + shape = props.shape, + variant = props.variant, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "onClick", "disabled", "active", "block", "color", "size", "pressed", "shape", "variant"]); + + var click = function click(e) { + return !disabled && onClick && onClick(e); + }; + + var isLink = attributes.to || attributes.href; //render + + var classes = classNames(className, 'btn', variant || color ? "btn" + (variant ? '-' + variant : '') + "-" + color : false, size ? "btn-" + size : false, block ? 'btn-block' : false, shape ? "btn-" + shape : false, pressed ? 'btn-pressed' : false, { + 'active': active && !isLink, + 'disabled': disabled && !isLink + }); + + if (isLink) { + return /*#__PURE__*/React.createElement(CLink, _extends({}, attributes, { + active: active, + disabled: disabled, + className: classes, + onClick: click, + innerRef: innerRef + })); + } else { + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes, + type: "button", + disabled: disabled + }, attributes, { + onClick: click, + ref: innerRef + })); + } +}; + +CButton.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + active: PropTypes.bool, + block: PropTypes.bool, + shape: PropTypes.string, + variant: PropTypes.oneOf(['', 'ghost', 'outline']), + color: PropTypes.string, + disabled: PropTypes.bool, + onClick: PropTypes.func, + size: PropTypes.string, + pressed: PropTypes.bool +}; +CButton.defaultProps = { + tag: 'button' +}; //export + +export default CButton; \ No newline at end of file diff --git a/es/button/CButtonClose.js b/es/button/CButtonClose.js new file mode 100644 index 00000000..45b43924 --- /dev/null +++ b/es/button/CButtonClose.js @@ -0,0 +1,34 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CButtonClose + +var CButtonClose = function CButtonClose(props) { + var children = props.children, + className = props.className, + buttonClass = props.buttonClass, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "buttonClass", "innerRef"]); //render + + + var classes = classNames(buttonClass, className); + return /*#__PURE__*/React.createElement("button", _extends({ + className: classes, + "aria-label": "Close" + }, attributes, { + ref: innerRef + }), children || String.fromCharCode(215)); +}; + +CButtonClose.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + buttonClass: PropTypes.string, + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CButtonClose.defaultProps = { + buttonClass: 'close' +}; +export default CButtonClose; \ No newline at end of file diff --git a/es/button/CButtonGroup.js b/es/button/CButtonGroup.js new file mode 100644 index 00000000..565b1512 --- /dev/null +++ b/es/button/CButtonGroup.js @@ -0,0 +1,31 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CButtonGroup + +var CButtonGroup = function CButtonGroup(props) { + var className = props.className, + innerRef = props.innerRef, + size = props.size, + vertical = props.vertical, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "size", "vertical"]); //render + + + var classes = classNames(className, size ? 'btn-group-' + size : false, vertical ? 'btn-group-vertical' : 'btn-group'); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes, + role: "group" + }, attributes, { + ref: innerRef + })); +}; + +CButtonGroup.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + size: PropTypes.oneOf(['', 'sm', 'lg']), + vertical: PropTypes.bool +}; +export default CButtonGroup; \ No newline at end of file diff --git a/es/button/CButtonToolbar.js b/es/button/CButtonToolbar.js new file mode 100644 index 00000000..f71fcf7e --- /dev/null +++ b/es/button/CButtonToolbar.js @@ -0,0 +1,33 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CButtonToolbar + +var CButtonToolbar = function CButtonToolbar(props) { + var _classNames; + + var className = props.className, + innerRef = props.innerRef, + justify = props.justify, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "justify"]); //render + + + var classes = classNames(className, 'btn-toolbar', (_classNames = {}, _classNames["justify-content-" + justify] = justify, _classNames)); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes, + role: "toolbar", + "aria-label": "toolbar" + }, attributes, { + ref: innerRef + })); +}; + +CButtonToolbar.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + role: PropTypes.string, + justify: PropTypes.oneOf(['', 'start', 'end', 'between', 'center']) +}; +export default CButtonToolbar; \ No newline at end of file diff --git a/es/callout/CCallout.js b/es/callout/CCallout.js new file mode 100644 index 00000000..43efb8d4 --- /dev/null +++ b/es/callout/CCallout.js @@ -0,0 +1,28 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CCallout + +var CCallout = function CCallout(props) { + var className = props.className, + innerRef = props.innerRef, + color = props.color, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "color"]); //render + + + var classes = classNames('c-callout', color ? 'c-callout-' + color : null, className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCallout.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + color: PropTypes.string +}; +export default CCallout; \ No newline at end of file diff --git a/es/card/CCard.js b/es/card/CCard.js new file mode 100644 index 00000000..249852ec --- /dev/null +++ b/es/card/CCard.js @@ -0,0 +1,50 @@ +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CCard + +var CCard = function CCard(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + color = props.color, + textColor = props.textColor, + borderColor = props.borderColor, + align = props.align, + accentColor = props.accentColor, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "color", "textColor", "borderColor", "align", "accentColor"]); //render + + + var classes = classNames(className, 'card', align ? "text-" + align : false, textColor ? "text-" + textColor : false, color ? "bg-" + color : false, borderColor ? "border-" + borderColor : false, accentColor ? "card-accent-" + accentColor : false); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +export var sharedPropTypes = { + align: PropTypes.oneOf(['', 'left', 'center', 'right']), + color: PropTypes.string, + borderColor: PropTypes.string, + textColor: PropTypes.string +}; +CCard.propTypes = _objectSpread({ + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + accentColor: PropTypes.string +}, sharedPropTypes); +CCard.defaultProps = { + tag: 'div' +}; +export default CCard; \ No newline at end of file diff --git a/es/card/CCardBody.js b/es/card/CCardBody.js new file mode 100644 index 00000000..fd8d2215 --- /dev/null +++ b/es/card/CCardBody.js @@ -0,0 +1,43 @@ +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; +import { sharedPropTypes } from './CCard'; //component - CoreUI / CCardBody + +var CCardBody = function CCardBody(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + color = props.color, + textColor = props.textColor, + borderColor = props.borderColor, + align = props.align, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "color", "textColor", "borderColor", "align"]); //render + + + var classes = classNames(className, 'card-body', align ? "text-" + align : false, textColor ? "text-" + textColor : false, color ? "bg-" + color : false, borderColor ? "border-" + borderColor : false); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCardBody.propTypes = _objectSpread({ + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}, sharedPropTypes); +CCardBody.defaultProps = { + tag: 'div' +}; +export default CCardBody; \ No newline at end of file diff --git a/es/card/CCardFooter.js b/es/card/CCardFooter.js new file mode 100644 index 00000000..7488ea41 --- /dev/null +++ b/es/card/CCardFooter.js @@ -0,0 +1,43 @@ +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; +import { sharedPropTypes } from './CCard.js'; //component - CoreUI / CCardFooter + +var CCardFooter = function CCardFooter(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + color = props.color, + textColor = props.textColor, + borderColor = props.borderColor, + align = props.align, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "color", "textColor", "borderColor", "align"]); //render + + + var classes = classNames(className, 'card-footer', align ? "text-" + align : false, textColor ? "text-" + textColor : false, color ? "bg-" + color : false, borderColor ? "border-" + borderColor : false); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCardFooter.propTypes = _objectSpread({ + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}, sharedPropTypes); +CCardFooter.defaultProps = { + tag: 'footer' +}; +export default CCardFooter; \ No newline at end of file diff --git a/es/card/CCardGroup.js b/es/card/CCardGroup.js new file mode 100644 index 00000000..f1aae396 --- /dev/null +++ b/es/card/CCardGroup.js @@ -0,0 +1,36 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CCardGroup + +var CCardGroup = function CCardGroup(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + deck = props.deck, + columns = props.columns, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "deck", "columns"]); //render + + + var classes = classNames("card-" + (columns ? 'columns' : deck ? 'deck' : 'group'), className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCardGroup.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + deck: PropTypes.bool, + columns: PropTypes.bool +}; +CCardGroup.defaultProps = { + tag: 'div' +}; +export default CCardGroup; \ No newline at end of file diff --git a/es/card/CCardHeader.js b/es/card/CCardHeader.js new file mode 100644 index 00000000..8b4a9bdf --- /dev/null +++ b/es/card/CCardHeader.js @@ -0,0 +1,43 @@ +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; +import { sharedPropTypes } from './CCard'; //component - CoreUI / CCardHeader + +var CCardHeader = function CCardHeader(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + color = props.color, + textColor = props.textColor, + borderColor = props.borderColor, + align = props.align, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "color", "textColor", "borderColor", "align"]); //render + + + var classes = classNames(className, 'card-header', align ? "text-" + align : false, textColor ? "text-" + textColor : false, color ? "bg-" + color : false, borderColor ? "border-" + borderColor : false); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCardHeader.propTypes = _objectSpread({ + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}, sharedPropTypes); +CCardHeader.defaultProps = { + tag: 'header' +}; +export default CCardHeader; \ No newline at end of file diff --git a/es/card/CCardImg.js b/es/card/CCardImg.js new file mode 100644 index 00000000..200694b8 --- /dev/null +++ b/es/card/CCardImg.js @@ -0,0 +1,23 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import CImg from '../image/CImg'; //component - CoreUI / CCardImg + +var CCardImg = function CCardImg(props) { + var variant = props.variant, + rest = _objectWithoutPropertiesLoose(props, ["variant"]); + + var classSuffix = variant !== 'full' ? "-" + variant : ''; + return /*#__PURE__*/React.createElement(CImg, _extends({}, rest, { + className: ["card-img" + classSuffix, rest.className] + })); +}; + +CCardImg.propTypes = { + variant: PropTypes.oneOf(['', 'top', 'bottom', 'full']) +}; +CCardImg.defaultProps = { + variant: 'full' +}; +export default CCardImg; \ No newline at end of file diff --git a/es/card/CCardImgOverlay.js b/es/card/CCardImgOverlay.js new file mode 100644 index 00000000..8eee1f13 --- /dev/null +++ b/es/card/CCardImgOverlay.js @@ -0,0 +1,31 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CCardImgOverlay + +var CCardImgOverlay = function CCardImgOverlay(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames(className, 'card-img-overlay'); + return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CCardImgOverlay.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CCardImgOverlay.defaultProps = { + tag: 'div' +}; +export default CCardImgOverlay; \ No newline at end of file diff --git a/es/card/CCardLink.js b/es/card/CCardLink.js new file mode 100644 index 00000000..2b97c8b1 --- /dev/null +++ b/es/card/CCardLink.js @@ -0,0 +1,13 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; + +/* eslint react/prop-types: 0 */ +import React from 'react'; +import CLink from '../link/CLink'; + +var CCardLink = function CCardLink(props) { + return /*#__PURE__*/React.createElement(CLink, _extends({}, props, { + className: ['card-link', props.className] + })); +}; + +export default CCardLink; \ No newline at end of file diff --git a/es/card/CCardSubtitle.js b/es/card/CCardSubtitle.js new file mode 100644 index 00000000..4d514d1d --- /dev/null +++ b/es/card/CCardSubtitle.js @@ -0,0 +1,31 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CCardSubtitle + +var CCardSubtitle = function CCardSubtitle(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames(className, 'card-subtitle'); + return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CCardSubtitle.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CCardSubtitle.defaultProps = { + tag: 'h6' +}; +export default CCardSubtitle; \ No newline at end of file diff --git a/es/card/CCardText.js b/es/card/CCardText.js new file mode 100644 index 00000000..2d54c1b8 --- /dev/null +++ b/es/card/CCardText.js @@ -0,0 +1,31 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CCardText + +var CCardText = function CCardText(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames(className, 'card-text'); + return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CCardText.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CCardText.defaultProps = { + tag: 'p' +}; +export default CCardText; \ No newline at end of file diff --git a/es/card/CCardTitle.js b/es/card/CCardTitle.js new file mode 100644 index 00000000..b0f79257 --- /dev/null +++ b/es/card/CCardTitle.js @@ -0,0 +1,31 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CCardTitle + +var CCardTitle = function CCardTitle(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames(className, 'card-title'); + return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CCardTitle.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CCardTitle.defaultProps = { + tag: 'h4' +}; +export default CCardTitle; \ No newline at end of file diff --git a/es/carousel/CCarousel.js b/es/carousel/CCarousel.js new file mode 100644 index 00000000..6ef01846 --- /dev/null +++ b/es/carousel/CCarousel.js @@ -0,0 +1,92 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useState, useRef, useEffect } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +export var Context = /*#__PURE__*/React.createContext({}); //component - CoreUI / CCarousel + +var CCarousel = function CCarousel(props) { + var className = props.className, + innerRef = props.innerRef, + autoSlide = props.autoSlide, + activeIndex = props.activeIndex, + animate = props.animate, + onSlideChange = props.onSlideChange, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "autoSlide", "activeIndex", "animate", "onSlideChange"]); + + var _useState = useState([null, activeIndex]), + state = _useState[0], + setState = _useState[1]; + + var _useState2 = useState(null), + itemNumber = _useState2[0], + setItemNumber = _useState2[1]; + + var _useState3 = useState(), + animating = _useState3[0], + setAnimating = _useState3[1]; + + useEffect(function () { + setState([state[1], activeIndex]); + }, [activeIndex]); + var timeout = useRef(); + + var setNext = function setNext() { + reset(); + + if (autoSlide) { + timeout.current = setTimeout(function () { + return nextItem(); + }, autoSlide); + } + }; + + var reset = function reset() { + return clearTimeout(timeout.current); + }; + + var nextItem = function nextItem() { + setState([state[1], itemNumber === state[1] + 1 ? 0 : state[1] + 1, 'next']); + }; + + useEffect(function () { + onSlideChange && onSlideChange(state[1]); + setNext(); + return function () { + return reset(); + }; + }, [state]); + var classes = classNames('carousel', className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes, + onMouseEnter: reset, + onMouseLeave: setNext + }, attributes, { + ref: innerRef + }), /*#__PURE__*/React.createElement(Context.Provider, { + value: { + state: state, + setState: setState, + animate: animate, + itemNumber: itemNumber, + setItemNumber: setItemNumber, + animating: animating, + setAnimating: setAnimating + } + }, props.children)); +}; + +CCarousel.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + children: PropTypes.array, + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + activeIndex: PropTypes.number, + autoSlide: PropTypes.number, + animate: PropTypes.bool, + onSlideChange: PropTypes.func +}; +CCarousel.defaultProps = { + activeIndex: 0 +}; +export default CCarousel; \ No newline at end of file diff --git a/es/carousel/CCarouselCaption.js b/es/carousel/CCarouselCaption.js new file mode 100644 index 00000000..fa7a914d --- /dev/null +++ b/es/carousel/CCarouselCaption.js @@ -0,0 +1,26 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CCarouselCaption + +var CCarouselCaption = function CCarouselCaption(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); //render + + + var classes = classNames('carousel-caption', className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCarouselCaption.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CCarouselCaption; \ No newline at end of file diff --git a/es/carousel/CCarouselControl.js b/es/carousel/CCarouselControl.js new file mode 100644 index 00000000..ba6f35aa --- /dev/null +++ b/es/carousel/CCarouselControl.js @@ -0,0 +1,57 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useContext } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { Context } from './CCarousel'; //component - CoreUI / CCarouselControl + +var CCarouselControl = function CCarouselControl(props) { + var className = props.className, + children = props.children, + innerRef = props.innerRef, + direction = props.direction, + attributes = _objectWithoutPropertiesLoose(props, ["className", "children", "innerRef", "direction"]); + + var _useContext = useContext(Context), + state = _useContext.state, + setState = _useContext.setState, + itemNumber = _useContext.itemNumber, + animating = _useContext.animating; + + var onClick = function onClick() { + if (animating) { + return; + } + + var newIdx; + + if (direction === 'next') { + newIdx = itemNumber === state[1] + 1 ? 0 : state[1] + 1; + } else { + newIdx = state[1] === 0 ? itemNumber - 1 : state[1] - 1; + } + + setState([state[1], newIdx, direction]); + }; //render + + + var anchorClasses = classNames("carousel-control-" + direction, className); + return /*#__PURE__*/React.createElement("a", _extends({ + className: anchorClasses + }, attributes, { + onClick: onClick, + ref: innerRef + }), children || /*#__PURE__*/React.createElement("span", { + className: "carousel-control-" + direction + "-icon", + "aria-label": direction + })); +}; + +CCarouselControl.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + children: PropTypes.node, + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + direction: PropTypes.oneOf(['prev', 'next']).isRequired +}; +export default CCarouselControl; \ No newline at end of file diff --git a/es/carousel/CCarouselIndicators.js b/es/carousel/CCarouselIndicators.js new file mode 100644 index 00000000..a4da7761 --- /dev/null +++ b/es/carousel/CCarouselIndicators.js @@ -0,0 +1,51 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useContext } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { Context } from './CCarousel'; //component - CoreUI / CCarouselIndicators + +var CCarouselIndicators = function CCarouselIndicators(props) { + var className = props.className, + innerRef = props.innerRef, + indicatorsClass = props.indicatorsClass, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "indicatorsClass"]); + + var _useContext = useContext(Context), + itemNumber = _useContext.itemNumber, + state = _useContext.state, + setState = _useContext.setState, + animating = _useContext.animating; //render + + + var listClasses = classNames(indicatorsClass, className); + var indicators = Array.from({ + length: itemNumber + }, function (_, i) { + return i; + }).map(function (key) { + return /*#__PURE__*/React.createElement("li", { + key: "indicator" + key, + onClick: function onClick() { + !animating && key !== state[1] && setState([state[1], key]); + }, + className: state[1] === key ? 'active' : '' + }); + }); + return /*#__PURE__*/React.createElement("ol", _extends({ + className: listClasses + }, attributes, { + ref: innerRef + }), indicators); +}; + +CCarouselIndicators.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + indicatorsClass: PropTypes.string +}; +CCarouselIndicators.defaultProps = { + indicatorsClass: 'carousel-indicators' +}; +export default CCarouselIndicators; \ No newline at end of file diff --git a/es/carousel/CCarouselInner.js b/es/carousel/CCarouselInner.js new file mode 100644 index 00000000..d9ebc25e --- /dev/null +++ b/es/carousel/CCarouselInner.js @@ -0,0 +1,26 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CCarouselInner + +var CCarouselInner = function CCarouselInner(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); //render + + + var classes = classNames('carousel-inner', className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCarouselInner.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CCarouselInner; \ No newline at end of file diff --git a/es/carousel/CCarouselItem.js b/es/carousel/CCarouselItem.js new file mode 100644 index 00000000..bcf1af7f --- /dev/null +++ b/es/carousel/CCarouselItem.js @@ -0,0 +1,110 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useState, useContext, useEffect, useRef } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { Transition } from 'react-transition-group'; +import { Context } from './CCarousel'; //component - CoreUI / CCarouselItem + +var getIndex = function getIndex(el) { + return Array.from(el.parentNode.children).indexOf(el); +}; + +var getDirection = function getDirection(state) { + if (state[2]) { + return state[2] === 'next' ? 'right' : 'left'; + } else { + return state[1] > state[0] ? 'right' : 'left'; + } +}; + +var CCarouselItem = function CCarouselItem(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "innerRef"]); + + var _useContext = useContext(Context), + animate = _useContext.animate, + state = _useContext.state, + itemNumber = _useContext.itemNumber, + setItemNumber = _useContext.setItemNumber, + animating = _useContext.animating, + setAnimating = _useContext.setAnimating; + + var ref = typeof innerRef === 'object' ? innerRef : useRef(); + typeof innerRef === 'function' && innerRef(ref); + + var _useState = useState(), + isIn = _useState[0], + setIsIn = _useState[1]; + + useEffect(function () { + if (!itemNumber) { + setItemNumber(ref.current.parentNode.children.length); + } + + setIsIn(state[1] === getIndex(ref.current)); + }, [state]); + + var onEnter = function onEnter() { + setAnimating(false); + }; + + var onEntering = function onEntering() { + /* eslint-disable no-unused-vars */ + var offsetHeight = ref.current.offsetHeight; + setAnimating(true); + /* eslint-enable no-unused-vars */ + }; + + var onExit = function onExit() { + setAnimating(false); + }; + + var onExiting = function onExiting() { + setAnimating(true); + }; + + var onExited = function onExited() { + setAnimating(false); + }; // const nodeRef = React.useRef() + //render + + + if (!animate || state[0] === null) { + var itemClasses = classNames('carousel-item', isIn && 'active', className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: itemClasses, + ref: ref + }, attributes), children); + } + + return /*#__PURE__*/React.createElement(Transition, { + timeout: 600, + in: isIn, + onEnter: onEnter, + onEntering: onEntering, + onExit: onExit, + onExiting: onExiting, + onExited: onExited, + nodeRef: ref + }, function (status) { + var direction = getDirection(state); + var isActive = status === 'entered' || status === 'exiting'; + var directionClassName = (status === 'entering' || status === 'exiting') && animating && (direction === 'right' ? 'carousel-item-left' : 'carousel-item-right'); + var orderClassName = status === 'entering' && (direction === 'right' ? 'carousel-item-next' : 'carousel-item-prev'); + var itemClasses = classNames('carousel-item', isActive && 'active', directionClassName, orderClassName, className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: itemClasses, + ref: ref + }, attributes), children); + }); +}; + +CCarouselItem.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CCarouselItem; \ No newline at end of file diff --git a/es/collapse/CCollapse.js b/es/collapse/CCollapse.js new file mode 100644 index 00000000..d137e05d --- /dev/null +++ b/es/collapse/CCollapse.js @@ -0,0 +1,91 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React, { useState, useRef } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { Transition } from 'react-transition-group'; + +var getTransitionClass = function getTransitionClass(s) { + return s === 'entering' ? 'collapsing' : s === 'entered' ? 'collapse show' : s === 'exiting' ? 'collapsing' : 'collapse'; +}; //component - CoreUI / CCollapse + + +var CCollapse = function CCollapse(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + show = props.show, + navbar = props.navbar, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "innerRef", "show", "navbar"]); + + var _useState = useState(), + height = _useState[0], + setHeight = _useState[1]; + + var ref = typeof innerRef === 'object' ? innerRef : useRef(); + typeof innerRef === 'function' && innerRef(ref); + + var onEntering = function onEntering() { + setHeight(ref.current.scrollHeight); + }; + + var onEntered = function onEntered() { + setHeight(null); + }; + + var onExit = function onExit() { + setHeight(ref.current.scrollHeight); + }; + + var onExiting = function onExiting() { + var _unused = ref.current.offsetHeight; // eslint-disable-line no-unused-vars + + setHeight(0); + }; + + var onExited = function onExited() { + setHeight(null); + }; //render + + + return /*#__PURE__*/React.createElement(Transition, { + in: show, + timeout: 350, + appear: false, + enter: true, + exit: true, + onEntering: onEntering, + onEntered: onEntered, + onExit: onExit, + onExiting: onExiting, + onExited: onExited, + nodeRef: ref + }, function (status) { + var collapseClass = getTransitionClass(status); + var classes = classNames(className, collapseClass, navbar && 'navbar-collapse'); + var style = height === null ? null : { + height: height + }; + return /*#__PURE__*/React.createElement("div", _extends({}, attributes, { + style: _objectSpread(_objectSpread({}, attributes.style), style), + className: classes, + ref: ref + }), children); + }); +}; + +CCollapse.propTypes = { + children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]), + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + show: PropTypes.bool, + navbar: PropTypes.bool +}; +export default CCollapse; \ No newline at end of file diff --git a/es/create-element/CCreateElement.js b/es/create-element/CCreateElement.js new file mode 100644 index 00000000..485aed32 --- /dev/null +++ b/es/create-element/CCreateElement.js @@ -0,0 +1,37 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useMemo } from 'react'; +import PropTypes from 'prop-types'; //component - CoreUI / CCreateElement + +var CCreateElement = function CCreateElement(_ref) { + var items = _ref.items, + _ref$components = _ref.components, + components = _ref$components === void 0 ? {} : _ref$components; + + var renderItem = function renderItem(item, i) { + var _tag = item._tag, + _children = item._children, + rest = _objectWithoutPropertiesLoose(item, ["_tag", "_children"]); + + var Tag = components[_tag] || _tag; + var children = _children ? _children.map(function (child, i) { + return typeof child === 'object' ? renderItem(child, i) : child; + }) : ''; + return /*#__PURE__*/React.createElement(Tag, _extends({ + key: Tag + i + }, rest), children); + }; + + var generatedItems = useMemo(function () { + return items && items.map(function (item, i) { + return renderItem(item, i); + }); + }, [JSON.stringify(items)]); + return /*#__PURE__*/React.createElement(React.Fragment, null, generatedItems); +}; + +CCreateElement.propTypes = { + items: PropTypes.array.isRequired, + components: PropTypes.object +}; +export default CCreateElement; \ No newline at end of file diff --git a/es/dropdown/CDropdown.js b/es/dropdown/CDropdown.js new file mode 100644 index 00000000..6639d9ab --- /dev/null +++ b/es/dropdown/CDropdown.js @@ -0,0 +1,64 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useState } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; +export var Context = /*#__PURE__*/React.createContext({}); //component - CoreUI / CDropdown + +var CDropdown = function CDropdown(props) { + var className = props.className, + tag = props.tag, + innerRef = props.innerRef, + inNav = props.inNav, + attributes = _objectWithoutPropertiesLoose(props, ["className", "tag", "innerRef", "inNav"]); + + var _useState = useState(), + reference = _useState[0], + setReference = _useState[1]; + + var _useState2 = useState(), + isOpen = _useState2[0], + setIsOpen = _useState2[1]; + + var _useState3 = useState(), + split = _useState3[0], + setSplit = _useState3[1]; + + var _useState4 = useState(''), + placement = _useState4[0], + setPlacement = _useState4[1]; + + var carretClass = placement.includes('top') ? 'dropup' : placement.includes('right') ? 'dropright' : placement.includes('left') ? 'dropleft' : 'dropdown'; + var Tag = tag || (inNav ? 'li' : 'div'); + var classes = classNames(className, carretClass, { + 'nav-item': inNav, + 'btn-group': split, + 'show': isOpen + }); + return /*#__PURE__*/React.createElement(Context.Provider, { + value: { + isOpen: isOpen, + setIsOpen: setIsOpen, + reference: reference, + setReference: setReference, + inNav: inNav, + setSplit: setSplit, + setPlacement: setPlacement + } + }, /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + }))); +}; + +CDropdown.propTypes = { + tag: tagPropType, + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + inNav: PropTypes.bool +}; +export default CDropdown; \ No newline at end of file diff --git a/es/dropdown/CDropdownDivider.js b/es/dropdown/CDropdownDivider.js new file mode 100644 index 00000000..41e62b4f --- /dev/null +++ b/es/dropdown/CDropdownDivider.js @@ -0,0 +1,11 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import React from 'react'; +import CDropdownItem from './CDropdownItem'; //component - CoreUI / CDropdownDivider + +var CDropdownDivider = function CDropdownDivider(props) { + return /*#__PURE__*/React.createElement(CDropdownItem, _extends({}, props, { + divider: true + })); +}; + +export default CDropdownDivider; \ No newline at end of file diff --git a/es/dropdown/CDropdownHeader.js b/es/dropdown/CDropdownHeader.js new file mode 100644 index 00000000..70640aa9 --- /dev/null +++ b/es/dropdown/CDropdownHeader.js @@ -0,0 +1,11 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import React from 'react'; +import CDropdownItem from './CDropdownItem'; //component - CoreUI / CDropdownHeader + +var CDropdownHeader = function CDropdownHeader(props) { + return /*#__PURE__*/React.createElement(CDropdownItem, _extends({}, props, { + header: true + })); +}; + +export default CDropdownHeader; \ No newline at end of file diff --git a/es/dropdown/CDropdownItem.js b/es/dropdown/CDropdownItem.js new file mode 100644 index 00000000..a454fca0 --- /dev/null +++ b/es/dropdown/CDropdownItem.js @@ -0,0 +1,68 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useContext } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; +import { Context } from './CDropdown'; +import CLink from '../link/CLink'; //component - CoreUI / CDropdownItem + +var CDropdownItem = function CDropdownItem(props) { + var _ref; + + var tag = props.tag, + className = props.className, + innerRef = props.innerRef, + onClick = props.onClick, + color = props.color, + divider = props.divider, + header = props.header, + active = props.active, + disabled = props.disabled, + rest = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "onClick", "color", "divider", "header", "active", "disabled"]); + + var _useContext = useContext(Context), + setIsOpen = _useContext.setIsOpen; + + var isItem = !(header || divider); + + var click = function click(e) { + if (disabled) { + return; + } + + onClick && onClick(e); + isItem && setIsOpen(false); + }; //render + + + var tabIndex = isItem && !disabled ? null : -1; + var role = tabIndex === null ? 'menuitem' : undefined; + var Tag = tag || (!isItem ? 'div' : CLink); + var ref = (_ref = {}, _ref["" + (typeof Tag === 'string' ? 'ref' : 'innerRef')] = innerRef, _ref); + var classes = classNames(className, 'dropdown-' + (header ? 'header' : divider ? 'divider' : 'item'), { + active: active + }, color && 'bg-' + color, disabled && Tag !== CLink && 'disabled'); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes, + tabIndex: tabIndex, + role: role, + disabled: disabled + }, rest, { + onClick: click + }, ref)); +}; + +CDropdownItem.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + color: PropTypes.string, + divider: PropTypes.bool, + header: PropTypes.bool, + disabled: PropTypes.bool, + onClick: PropTypes.func, + active: PropTypes.bool +}; +export default CDropdownItem; \ No newline at end of file diff --git a/es/dropdown/CDropdownMenu.js b/es/dropdown/CDropdownMenu.js new file mode 100644 index 00000000..9a10e252 --- /dev/null +++ b/es/dropdown/CDropdownMenu.js @@ -0,0 +1,98 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useState, useEffect, useContext } from "react"; +import PropTypes from "prop-types"; +import classNames from "classnames"; +import { Context } from "./CDropdown"; +import { createPopper } from "@popperjs/core"; //component - CoreUI / CDropdownMenu + +var CDropdownMenu = function CDropdownMenu(props) { + var className = props.className, + show = props.show, + placement = props.placement, + modifiers = props.modifiers, + innerRef = props.innerRef, + rest = _objectWithoutPropertiesLoose(props, ["className", "show", "placement", "modifiers", "innerRef"]); + + var _useContext = useContext(Context), + reference = _useContext.reference, + isOpen = _useContext.isOpen, + setIsOpen = _useContext.setIsOpen, + setPlacement = _useContext.setPlacement; + + var _useState = useState(null), + popperElement = _useState[0], + setPopperElement = _useState[1]; + + var _useState2 = useState(null), + popper = _useState2[0], + setPopper = _useState2[1]; + + innerRef && innerRef(popperElement); + useEffect(function () { + setIsOpen(show); + setPlacement(placement); + }, [show, placement]); + var classes = classNames(className, "dropdown-menu", "m-0", { + show: isOpen + }); + useEffect(function () { + if (!reference) { + return; + } + + setPopper(createPopper(reference, popperElement, { + placement: placement, + modifiers: modifiers || [] + })); + return function () { + if (popper) { + popper.destroy(); + } + }; + }, [isOpen]); + + var checkClose = function checkClose(e) { + if ([reference, popperElement].every(function (el) { + return !el.contains(e.target); + })) { + setIsOpen(false); + } + }; + + var onKeypress = function onKeypress(e) { + return e.keyCode == "27" && setIsOpen(false); + }; + + useEffect(function () { + if (isOpen) { + document.addEventListener("click", checkClose); + document.addEventListener("keydown", onKeypress); + } + + return function () { + document.removeEventListener("click", checkClose); + document.removeEventListener("keydown", onKeypress); + }; + }, [isOpen]); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes, + ref: setPopperElement, + role: "menu", + "aria-hidden": !isOpen + }, rest)); +}; + +CDropdownMenu.propTypes = { + children: PropTypes.node.isRequired, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + modifiers: PropTypes.array, + show: PropTypes.bool, + placement: PropTypes.oneOf(["", "top-end", "top", "top-start", "bottom-end", "bottom", "bottom-start", "right-start", "right", "right-end", "left-start", "left", "left-end"]) +}; +CDropdownMenu.defaultProps = { + placement: "bottom-start" +}; +export default CDropdownMenu; \ No newline at end of file diff --git a/es/dropdown/CDropdownToggle.js b/es/dropdown/CDropdownToggle.js new file mode 100644 index 00000000..f8b4c86c --- /dev/null +++ b/es/dropdown/CDropdownToggle.js @@ -0,0 +1,81 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useContext, useEffect } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; +import CButton from '../button/CButton'; +import CLink from '../link/CLink'; +import { Context } from './CDropdown'; //component - CoreUI / CDropdownToggle + +var CDropdownToggle = function CDropdownToggle(props) { + var _togglerAttrs; + + var className = props.className, + innerRef = props.innerRef, + onClick = props.onClick, + caret = props.caret, + split = props.split, + tag = props.tag, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "onClick", "caret", "split", "tag"]); + + var _useContext = useContext(Context), + reference = _useContext.reference, + setReference = _useContext.setReference, + isOpen = _useContext.isOpen, + setIsOpen = _useContext.setIsOpen, + inNav = _useContext.inNav, + setSplit = _useContext.setSplit; + + innerRef && innerRef(reference); + useEffect(function () { + setSplit(split); + }); + + var click = function click(e) { + if (props.disabled) { + return; + } + + onClick && onClick(e); + setIsOpen(!isOpen); + }; + + var Tag = tag || (inNav ? CLink : CButton); + var classes = classNames(className, { + 'dropdown-toggle': caret && !split, + 'nav-link': inNav + }); + var togglerAttrs = (_togglerAttrs = { + onClick: click, + 'aria-expanded': isOpen ? 'true' : 'false', + 'aria-haspopup': 'true', + 'aria-label': 'Dropdown toggle' + }, _togglerAttrs["" + (tag && typeof tag === 'string' ? 'ref' : 'innerRef')] = setReference, _togglerAttrs['role'] = Tag === CButton ? null : 'button', _togglerAttrs); + + if (split) { + return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CButton, attributes, props.children), /*#__PURE__*/React.createElement(CButton, _extends({ + className: "dropdown-toggle dropdown-toggle-split" + }, togglerAttrs, attributes), '')); + } else { + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, togglerAttrs, attributes)); + } +}; + +CDropdownToggle.propTypes = { + tag: tagPropType, + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + caret: PropTypes.bool, + onClick: PropTypes.func, + split: PropTypes.bool, + disabled: PropTypes.bool +}; +CDropdownToggle.defaultProps = { + caret: true +}; +export default CDropdownToggle; \ No newline at end of file diff --git a/es/element-cover/CElementCover.js b/es/element-cover/CElementCover.js new file mode 100644 index 00000000..b23ae528 --- /dev/null +++ b/es/element-cover/CElementCover.js @@ -0,0 +1,103 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React, { useEffect, createRef, useState } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import CSpinner from '../spinner/CSpinner'; //component - CoreUI / CElementCover + +var CElementCover = function CElementCover(props) { + var className = props.className, + children = props.children, + innerRef = props.innerRef, + boundaries = props.boundaries, + opacity = props.opacity, + attributes = _objectWithoutPropertiesLoose(props, ["className", "children", "innerRef", "boundaries", "opacity"]); + + var _useState = useState({}), + customBoundaries = _useState[0], + setCustomBoundaries = _useState[1]; + + var ref = /*#__PURE__*/createRef(null); + innerRef && innerRef(ref); + + var getCustomBoundaries = function getCustomBoundaries() { + if (!ref || !ref.current || !boundaries) { + return {}; + } + + var parent = ref.current.parentElement; + var parentCoords = parent.getBoundingClientRect(); + var customBoundaries = {}; + boundaries.forEach(function (_ref) { + var sides = _ref.sides, + query = _ref.query; + var element = parent.querySelector(query); + + if (!element || !sides) { + return; + } + + var coords = element.getBoundingClientRect(); + sides.forEach(function (side) { + var sideMargin = Math.abs(coords[side] - parentCoords[side]); + customBoundaries[side] = sideMargin + 'px'; + }); + }); + return customBoundaries; + }; + + useEffect(function () { + setCustomBoundaries(getCustomBoundaries()); + }, [JSON.stringify(getCustomBoundaries())]); //render + + var classes = classNames(className); + + var containerCoords = _objectSpread({ + top: 0, + left: 0, + right: 0, + bottom: 0 + }, customBoundaries); + + var coverStyles = _objectSpread(_objectSpread({}, containerCoords), {}, { + position: 'absolute', + backgroundColor: "rgb(255,255,255," + opacity + ")" + }); + + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes, + style: coverStyles + }, attributes, { + ref: ref + }), children || /*#__PURE__*/React.createElement("div", { + style: { + position: 'absolute', + top: '50%', + left: '50%', + transform: 'translateX(-50%) translateY(-50%)' + } + }, /*#__PURE__*/React.createElement(CSpinner, { + grow: true, + size: "lg", + color: "primary" + }))); +}; + +CElementCover.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + boundaries: PropTypes.array, + opacity: PropTypes.number +}; +CElementCover.defaultProps = { + opacity: 0.4 +}; +export default CElementCover; \ No newline at end of file diff --git a/es/embed/CEmbed.js b/es/embed/CEmbed.js new file mode 100644 index 00000000..b11e158d --- /dev/null +++ b/es/embed/CEmbed.js @@ -0,0 +1,35 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CEmbed + +var CEmbed = function CEmbed(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + ratio = props.ratio, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "ratio"]); //render + + + var classes = classNames(className, 'embed-responsive', "embed-responsive-" + ratio); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CEmbed.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + ratio: PropTypes.oneOf(['21by9', '16by9', '4by3', '1by1']) +}; +CEmbed.defaultProps = { + tag: 'div', + ratio: '16by9' +}; +export default CEmbed; \ No newline at end of file diff --git a/es/embed/CEmbedItem.js b/es/embed/CEmbedItem.js new file mode 100644 index 00000000..f56daf6e --- /dev/null +++ b/es/embed/CEmbedItem.js @@ -0,0 +1,33 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CEmbedItem + +var CEmbedItem = function CEmbedItem(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames(className, 'embed-responsive-item'); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CEmbedItem.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + type: PropTypes.oneOf(['iframe', 'embed', 'video', 'object', 'img']) +}; +CEmbedItem.defaultProps = { + tag: 'iframe' +}; +export default CEmbedItem; \ No newline at end of file diff --git a/es/fade/CFade.js b/es/fade/CFade.js new file mode 100644 index 00000000..154ab2e8 --- /dev/null +++ b/es/fade/CFade.js @@ -0,0 +1,57 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useRef } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { pickByKeys, omitByKeys } from '@coreui/utils/src'; +import { TransitionPropTypeKeys, tagPropType } from '../utils/helper.js'; +import { Transition } from 'react-transition-group'; //component - CoreUI / CFade + +var CFade = function CFade(props) { + var Tag = props.tag, + className = props.className, + children = props.children, + innerRef = props.innerRef, + baseClass = props.baseClass, + baseClassActive = props.baseClassActive, + rest = _objectWithoutPropertiesLoose(props, ["tag", "className", "children", "innerRef", "baseClass", "baseClassActive"]); //render + + + var transitionProps = pickByKeys(rest, TransitionPropTypeKeys); + var childProps = omitByKeys(rest, TransitionPropTypeKeys); + var ref = typeof innerRef === 'object' ? innerRef : useRef(); + typeof innerRef === 'function' && innerRef(ref); + return /*#__PURE__*/React.createElement(Transition, _extends({}, transitionProps, { + nodeRef: ref + }), function (status) { + var isActive = status === 'entered'; + var classes = classNames(className, baseClass, isActive && baseClassActive); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, childProps, { + ref: ref + }), children); + }); +}; + +CFade.propTypes = { + tag: tagPropType, + children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]), + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + baseClass: PropTypes.string, + baseClassActive: PropTypes.string +}; +CFade.defaultProps = { + tag: 'div', + // + baseClass: 'fade', + baseClassActive: 'show', + timeout: 150, + appear: true, + enter: true, + exit: true, + in: true +}; +export default CFade; \ No newline at end of file diff --git a/es/form/CForm.js b/es/form/CForm.js new file mode 100644 index 00000000..99c2816c --- /dev/null +++ b/es/form/CForm.js @@ -0,0 +1,36 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CForm + +var CForm = function CForm(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + inline = props.inline, + wasValidated = props.wasValidated, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "inline", "wasValidated"]); //render + + + var classes = classNames(className, inline ? 'form-inline' : false, wasValidated ? 'was-validated' : false); + return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CForm.propTypes = { + tag: tagPropType, + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + inline: PropTypes.bool, + wasValidated: PropTypes.bool +}; +CForm.defaultProps = { + tag: 'form' +}; +export default CForm; \ No newline at end of file diff --git a/es/form/CFormFeedback.js b/es/form/CFormFeedback.js new file mode 100644 index 00000000..6873c2f8 --- /dev/null +++ b/es/form/CFormFeedback.js @@ -0,0 +1,41 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CFormFeedback + +var CFormFeedback = function CFormFeedback(props) { + var className = props.className, + innerRef = props.innerRef, + valid = props.valid, + tooltip = props.tooltip, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "valid", "tooltip"]); //render + + + var validMode = tooltip ? 'tooltip' : 'feedback'; + var classes = classNames(valid ? "valid-" + validMode : "invalid-" + validMode, className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CFormFeedback.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + valid: PropTypes.bool, + tooltip: PropTypes.bool +}; +export var CValidFeedback = function CValidFeedback(props) { + return /*#__PURE__*/React.createElement(CFormFeedback, _extends({}, props, { + valid: true + })); +}; +export var CInvalidFeedback = function CInvalidFeedback(props) { + return /*#__PURE__*/React.createElement(CFormFeedback, _extends({}, props, { + valid: false + })); +}; \ No newline at end of file diff --git a/es/form/CFormGroup.js b/es/form/CFormGroup.js new file mode 100644 index 00000000..86390697 --- /dev/null +++ b/es/form/CFormGroup.js @@ -0,0 +1,36 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CFormGroup + +var CFormGroup = function CFormGroup(props) { + var className = props.className, + innerRef = props.innerRef, + row = props.row, + disabled = props.disabled, + variant = props.variant, + inline = props.inline, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "row", "disabled", "variant", "inline"]); //render + + + var checkClass = variant && variant.includes('custom') ? 'custom-control' : 'form-check'; + var classes = classNames(row && 'row', !variant && 'form-group', variant && checkClass, variant === 'custom-radio' && 'custom-radio', variant === 'custom-checkbox' && 'custom-checkbox', variant && inline && checkClass + "-inline", variant && disabled && 'disabled', className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CFormGroup.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + row: PropTypes.bool, + variant: PropTypes.oneOf(['checkbox', 'custom-checkbox', 'custom-radio']), + inline: PropTypes.bool, + disabled: PropTypes.bool +}; +export default CFormGroup; \ No newline at end of file diff --git a/es/form/CFormText.js b/es/form/CFormText.js new file mode 100644 index 00000000..68ec00d4 --- /dev/null +++ b/es/form/CFormText.js @@ -0,0 +1,36 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CFormText + +var CFormText = function CFormText(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + color = props.color, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "color"]); //render + + + var classes = classNames('form-text', color && "text-" + color, className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CFormText.propTypes = { + tag: tagPropType, + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + color: PropTypes.string +}; +CFormText.defaultProps = { + tag: 'small', + color: 'muted' +}; +export default CFormText; \ No newline at end of file diff --git a/es/form/CInput.js b/es/form/CInput.js new file mode 100644 index 00000000..aafbfe48 --- /dev/null +++ b/es/form/CInput.js @@ -0,0 +1,150 @@ +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CInput + +var commonPropTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + valid: PropTypes.bool, + invalid: PropTypes.bool +}; + +var CInput = function CInput(props) { + var className = props.className, + innerRef = props.innerRef, + type = props.type, + valid = props.valid, + invalid = props.invalid, + plaintext = props.plaintext, + size = props.size, + sizeHtml = props.sizeHtml, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "type", "valid", "invalid", "plaintext", "size", "sizeHtml"]); // render + + + var classes = classNames(plaintext ? 'form-control-plaintext' : 'form-control', size && "form-control-" + size, invalid && 'is-invalid', valid && 'is-valid', className); + return /*#__PURE__*/React.createElement("input", _extends({ + className: classes, + type: type + }, attributes, { + size: sizeHtml, + ref: innerRef + })); +}; + +CInput.propTypes = _objectSpread(_objectSpread({}, commonPropTypes), {}, { + plaintext: PropTypes.bool, + type: PropTypes.string, + size: PropTypes.string, + sizeHtml: PropTypes.oneOfType([PropTypes.string, PropTypes.number]) +}); +CInput.defaultProps = { + type: 'text' +}; + +var CTextarea = function CTextarea(props) { + var className = props.className, + innerRef = props.innerRef, + valid = props.valid, + invalid = props.invalid, + plaintext = props.plaintext, + size = props.size, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "valid", "invalid", "plaintext", "size"]); // render + + + var classes = classNames(plaintext ? 'form-control-plaintext' : 'form-control', size && "form-control-" + size, invalid && 'is-invalid', valid && 'is-valid', className); + return /*#__PURE__*/React.createElement("textarea", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CTextarea.propTypes = _objectSpread(_objectSpread({}, commonPropTypes), {}, { + plaintext: PropTypes.bool, + size: PropTypes.string +}); + +var CInputFile = function CInputFile(props) { + var className = props.className, + innerRef = props.innerRef, + valid = props.valid, + invalid = props.invalid, + custom = props.custom, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "valid", "invalid", "custom"]); // render + + + var classes = classNames(custom ? 'custom-file-input' : 'form-control-file', invalid && 'is-invalid', valid && 'is-valid', className); + return /*#__PURE__*/React.createElement("input", _extends({ + className: classes + }, attributes, { + type: "file", + ref: innerRef + })); +}; + +CInputFile.propTypes = _objectSpread(_objectSpread({}, commonPropTypes), {}, { + custom: PropTypes.bool +}); + +var CInputCheckbox = function CInputCheckbox(props) { + var className = props.className, + innerRef = props.innerRef, + valid = props.valid, + invalid = props.invalid, + custom = props.custom, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "valid", "invalid", "custom"]); // render + + + var classes = classNames(custom ? 'custom-control-input' : 'form-check-input', invalid && 'is-invalid', valid && 'is-valid', className); + return /*#__PURE__*/React.createElement("input", _extends({ + className: classes, + type: "checkbox" + }, attributes, { + ref: innerRef + })); +}; + +CInputCheckbox.propTypes = _objectSpread(_objectSpread({}, commonPropTypes), {}, { + custom: PropTypes.bool +}); + +var CInputRadio = function CInputRadio(props) { + return /*#__PURE__*/React.createElement(CInputCheckbox, _extends({}, props, { + type: "radio" + })); +}; + +var CSelect = function CSelect(props) { + var className = props.className, + innerRef = props.innerRef, + valid = props.valid, + invalid = props.invalid, + size = props.size, + sizeHtml = props.sizeHtml, + custom = props.custom, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "valid", "invalid", "size", "sizeHtml", "custom"]); // render + + + var baseClass = custom ? 'custom-select' : 'form-control'; + var classes = classNames(baseClass, size && baseClass + "-" + size, invalid && 'is-invalid', valid && 'is-valid', className); + return /*#__PURE__*/React.createElement("select", _extends({ + className: classes + }, attributes, { + size: sizeHtml, + ref: innerRef + })); +}; + +CSelect.propTypes = _objectSpread(_objectSpread({}, commonPropTypes), {}, { + size: PropTypes.string, + sizeHtml: PropTypes.oneOfType([PropTypes.string, PropTypes.number]) +}); +export { CInput, CTextarea, CInputFile, CInputCheckbox, CInputRadio, CSelect }; \ No newline at end of file diff --git a/es/form/CInputGroup.js b/es/form/CInputGroup.js new file mode 100644 index 00000000..bc0612ff --- /dev/null +++ b/es/form/CInputGroup.js @@ -0,0 +1,28 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CInputGroup + +var CInputGroup = function CInputGroup(props) { + var className = props.className, + innerRef = props.innerRef, + size = props.size, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "size"]); //render + + + var classes = classNames('input-group', size && "input-group-" + size, className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CInputGroup.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + size: PropTypes.string +}; +export default CInputGroup; \ No newline at end of file diff --git a/es/form/CInputGroupAddon.js b/es/form/CInputGroupAddon.js new file mode 100644 index 00000000..171d1ad7 --- /dev/null +++ b/es/form/CInputGroupAddon.js @@ -0,0 +1,39 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CInputGroupAddon + +var CInputGroupAddon = function CInputGroupAddon(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + prepend = props.prepend, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "innerRef", "prepend"]); //render + + + var classes = classNames('input-group-' + (prepend ? 'prepend' : 'append'), className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + }), children); +}; + +CInputGroupAddon.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + prepend: PropTypes.bool +}; +export var CInputGroupAppend = function CInputGroupAppend(props) { + return /*#__PURE__*/React.createElement(CInputGroupAddon, _extends({}, props, { + prepend: false + })); +}; +export var CInputGroupPrepend = function CInputGroupPrepend(props) { + return /*#__PURE__*/React.createElement(CInputGroupAddon, _extends({}, props, { + prepend: true + })); +}; \ No newline at end of file diff --git a/es/form/CInputGroupText.js b/es/form/CInputGroupText.js new file mode 100644 index 00000000..fb991ea9 --- /dev/null +++ b/es/form/CInputGroupText.js @@ -0,0 +1,32 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CInputGroupText + +var CInputGroupText = function CInputGroupText(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames('input-group-text', className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CInputGroupText.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CInputGroupText.defaultProps = { + tag: 'div' +}; +export default CInputGroupText; \ No newline at end of file diff --git a/es/form/CLabel.js b/es/form/CLabel.js new file mode 100644 index 00000000..65187250 --- /dev/null +++ b/es/form/CLabel.js @@ -0,0 +1,44 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; +import CCol from '../grid/CCol'; //component - CoreUI / CLabel + +var CLabel = function CLabel(props) { + var tag = props.tag, + className = props.className, + innerRef = props.innerRef, + hidden = props.hidden, + variant = props.variant, + col = props.col, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "hidden", "variant", "col"]); // render + + + var classes = classNames(hidden && 'sr-only', variant === 'custom-checkbox' && 'custom-control-label', variant === 'checkbox' && 'form-check-label', variant === 'custom-file' && 'custom-file-label', col && 'col-form-label', col && typeof col === 'string' && "col-form-label-" + col, className); + var Tag = col ? CCol : tag; + var addLabelTag = col && { + tag: tag + }; + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, addLabelTag, attributes, { + ref: innerRef + })); +}; + +CLabel.propTypes = { + tag: tagPropType, + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + hidden: PropTypes.bool, + variant: PropTypes.oneOf(['custom-file', 'checkbox', 'custom-checkbox']), + col: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]) +}; +CLabel.defaultProps = { + tag: 'label' +}; +export default CLabel; \ No newline at end of file diff --git a/es/grid/CCol.js b/es/grid/CCol.js new file mode 100644 index 00000000..78641588 --- /dev/null +++ b/es/grid/CCol.js @@ -0,0 +1,85 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; +var stringOrNumberProp = PropTypes.oneOfType([PropTypes.number, PropTypes.string]); +var columnProps = PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string, PropTypes.shape({ + size: PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.string]), + order: stringOrNumberProp, + offset: stringOrNumberProp +})]); + +var getColumnSizeClass = function getColumnSizeClass(isXs, colWidth, colSize) { + if (colSize === true || colSize === '') { + return isXs ? 'col' : "col-" + colWidth; + } else if (colSize === 'auto') { + return isXs ? 'col-auto' : "col-" + colWidth + "-auto"; + } + + return isXs ? "col-" + colSize : "col-" + colWidth + "-" + colSize; +}; //component - CoreUI / CCol + + +var CCol = function CCol(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + widths = props.widths, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "widths"]); //render + + + var colClasses = []; + widths.forEach(function (colWidth, i) { + var columnProp = props[colWidth]; + delete attributes[colWidth]; + + if (!columnProp && columnProp !== '') { + return; + } + + var isXs = !i; + + if (typeof columnProp === 'object') { + var _classNames; + + var colSizeInterfix = isXs ? '-' : "-" + colWidth + "-"; + var colClass = getColumnSizeClass(isXs, colWidth, columnProp.size); + colClasses.push(classNames((_classNames = {}, _classNames[colClass] = columnProp.size || columnProp.size === '', _classNames["order" + colSizeInterfix + columnProp.order] = columnProp.order || columnProp.order === 0, _classNames["offset" + colSizeInterfix + columnProp.offset] = columnProp.offset || columnProp.offset === 0, _classNames))); + } else { + var _colClass = getColumnSizeClass(isXs, colWidth, columnProp); + + colClasses.push(_colClass); + } + }); + + if (!colClasses.length) { + colClasses.push('col'); + } + + var classes = classNames(className, colClasses); + return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CCol.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + xs: columnProps, + sm: columnProps, + md: columnProps, + lg: columnProps, + xl: columnProps, + xxl: columnProps, + widths: PropTypes.array +}; +CCol.defaultProps = { + tag: 'div', + widths: ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'] +}; +export default CCol; \ No newline at end of file diff --git a/es/grid/CContainer.js b/es/grid/CContainer.js new file mode 100644 index 00000000..76962539 --- /dev/null +++ b/es/grid/CContainer.js @@ -0,0 +1,33 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CContainer + +var CContainer = function CContainer(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + fluid = props.fluid, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "fluid"]); //render + + + var classes = classNames(className, fluid ? 'container-fluid' : 'container'); + return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CContainer.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + fluid: PropTypes.bool +}; +CContainer.defaultProps = { + tag: 'div' +}; +export default CContainer; \ No newline at end of file diff --git a/es/grid/CRow.js b/es/grid/CRow.js new file mode 100644 index 00000000..bda1ae94 --- /dev/null +++ b/es/grid/CRow.js @@ -0,0 +1,41 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CRow + +var CRow = function CRow(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + gutters = props.gutters, + form = props.form, + alignHorizontal = props.alignHorizontal, + alignVertical = props.alignVertical, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "gutters", "form", "alignHorizontal", "alignVertical"]); //render + + + var classes = classNames(className, !gutters ? 'no-gutters' : null, alignHorizontal ? "justify-content-" + alignHorizontal : null, alignVertical ? "align-" + alignVertical : null, form ? 'form-row' : 'row'); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CRow.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + gutters: PropTypes.bool, + form: PropTypes.bool, + alignHorizontal: PropTypes.string, + alignVertical: PropTypes.string +}; +CRow.defaultProps = { + tag: 'div', + gutters: true +}; +export default CRow; \ No newline at end of file diff --git a/es/image/CImg.js b/es/image/CImg.js new file mode 100644 index 00000000..d7b49e69 --- /dev/null +++ b/es/image/CImg.js @@ -0,0 +1,65 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CImg + +var CImg = function CImg(props) { + var className = props.className, + innerRef = props.innerRef, + fluid = props.fluid, + block = props.block, + thumbnail = props.thumbnail, + shape = props.shape, + align = props.align, + src = props.src, + width = props.width, + height = props.height, + placeholderColor = props.placeholderColor, + fluidGrow = props.fluidGrow, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "fluid", "block", "thumbnail", "shape", "align", "src", "width", "height", "placeholderColor", "fluidGrow"]); + + var alignClass = align === 'center' ? 'mx-auto' : align === 'right' ? 'float-right' : align === 'left' ? 'float-left' : ''; // render + + var classes = classNames(className, alignClass, thumbnail && 'img-thumbnail', fluid || fluidGrow && 'img-fluid', fluidGrow && 'w-100', block && 'd-block', shape); + return src ? /*#__PURE__*/React.createElement("img", _extends({ + className: classes, + src: src, + width: width, + height: height + }, attributes, { + ref: innerRef + })) : /*#__PURE__*/React.createElement("svg", _extends({ + className: classes, + width: width, + height: height, + style: { + 'backgroundColor': placeholderColor + } + }, attributes, { + ref: innerRef + })); +}; + +CImg.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + src: PropTypes.string, + width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), + height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), + block: PropTypes.bool, + fluid: PropTypes.bool, + fluidGrow: PropTypes.bool, + shape: PropTypes.string, + //oneOf(['', 'rounded']), + thumbnail: PropTypes.bool, + align: PropTypes.oneOf(['', 'left', 'right', 'center']), + placeholderColor: PropTypes.string +}; +CImg.defaultProps = { + placeholderColor: 'transparent' +}; +export default CImg; \ No newline at end of file diff --git a/es/index.d.ts b/es/index.d.ts new file mode 100644 index 00000000..0291a4cd --- /dev/null +++ b/es/index.d.ts @@ -0,0 +1,1174 @@ +import { HTMLProps } from 'react' +type ChildElement = any +type Omit = Pick> +type className = string | className[] | object +type innerRef = object | Function +type HTMLPropsNoClassName = Omit, 'className'> + +interface CAlert extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + onShowChange?: Function; + closeButton?: boolean; + color?: string; + fade?: boolean; + show?: boolean | number; +} + +interface CBadge extends CLink { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + color?: string; + shape?: '' | 'pill'; +} + +interface CBrand extends CLink { + tag?: any; + children?: ChildElement; + className?: className | Array; + innerRef?: innerRef; +} + +interface CHeaderBrand extends CBrand { } +interface CNavbarBrand extends CBrand { } +interface CSidebarBrand extends CBrand { } + +interface CBreadcrumb extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; +} + +interface CBreadcrumbItem extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + active?: boolean; +} + +interface CBreadcrumbRouter extends HTMLPropsNoClassName { + className?: className; + innerRef?: innerRef; + routes?: Array; +} + +interface CButton extends Omit { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + active?: boolean; + block?: boolean; + shape?: string; + variant?: '' | 'ghost' | 'outline'; + color?: string; + disabled?: boolean; + onClick?: Function; + size?: string; + pressed?: boolean; +} + +interface CButtonClose extends Omit, 'className'> { + children?: ChildElement; + className?: className; + buttonClass?: string; + innerRef?: innerRef; +} + +interface CButtonGroup extends Omit< HTMLPropsNoClassName, 'size'> { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + size?: '' | 'sm' | 'lg'; + vertical?: boolean; +} + +interface CButtonToolbar extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + role?: string; + justify?: '' | 'start' | 'end' | 'between' | 'center'; +} + +interface CCallout extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + color?: string; +} + +interface sharedCardProps { + align?: '' | 'left' | 'center' | 'right'; + color?: string; + borderColor?: string; + textColor?: string; +} + +interface CCard extends sharedCardProps, HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + accentColor?: string; +} + +interface CCardBody extends sharedCardProps, HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CCardFooter extends sharedCardProps, HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CCardGroup extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + deck?: boolean; + columns?: boolean; +} + +interface CCardHeader extends sharedCardProps, HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CCardImg extends CImg { + variant?: '' | 'top' | 'bottom' | 'full'; +} + +interface CCardImgOverlay extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CCardSubtitle extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CCardText extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CCardTitle extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CCarousel extends HTMLPropsNoClassName { + className?: className; + children?: ChildElement; + innerRef?: innerRef; + activeIndex?: number; + autoSlide?: number; + animate?: boolean; + onSlideChange?: Function; +} + +interface CCarouselCaption extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; +} + +interface CCarouselControl extends HTMLPropsNoClassName { + className?: className; + children?: ChildElement; + innerRef?: innerRef; + direction: 'prev' | 'next'; +} + +interface CCarouselIndicators extends HTMLPropsNoClassName { + className?: className; + innerRef?: innerRef; + indicatorsClass?: string +} + +interface CCarouselInner extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; +} + +interface CCarouselItem extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; +} + +type columnProps = boolean | number | string | { + size?: boolean | number | string, + order?: string | number, + offset?: string | number +} + +interface CCol extends HTMLPropsNoClassName { + children?: ChildElement + tag?: any + className?: className + innerRef?: innerRef + xs?: columnProps + sm?: columnProps + md?: columnProps + lg?: columnProps + xl?: columnProps + xxl?: columnProps + widths?: Array +} + + +interface Transition { + nodeRef?: any; + in?: boolean; + mountOnEnter?: boolean; + unmountOnExit?: boolean; + appear?: boolean; + enter?: boolean; + exit?: boolean; + timeout?: number | { enter?: number, exit?: number, appear?: number }; + addEndListener?: Function; + onEnter?: Function; + onEntering?: Function; + onEntered?: Function; + onExit?: Function; + onExiting?: Function; + onExited?: Function; +} + +interface CCollapse extends HTMLPropsNoClassName { + children?: ChildElement | Array; + className?: className; + innerRef?: innerRef; + show?: boolean; + navbar?: boolean; +} + +interface CContainer extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + fluid?: boolean; +} + +interface CCreateElement { + items: Array; + components?: object; +} + +interface CDataTable { + innerRef?: innerRef; + overTableSlot?: ChildElement; + columnHeaderSlot?: object; + sortingIconSlot?: Function; + columnFilterSlot?: object; + noItemsViewSlot?: ChildElement; + noItemsView?: object; + captionSlot?: ChildElement; + underTableSlot?: ChildElement; + scopedSlots?: object; + theadTopSlot?: ChildElement; + loadingSlot?: ChildElement; + loading?: boolean; + fields?: Array; + pagination?: boolean | object; + activePage?: number; + itemsPerPage?: number; + items?: Array; + sorter?: boolean | object; + clickableRows?: boolean; + columnFilter?: boolean | object; + tableFilterValue?: string; + tableFilter?: boolean | object; + cleaner?: boolean | Function; + addTableClasses?: string | Array | object; + size?: string; + dark?: boolean; + striped?: boolean; + hover?: boolean; + border?: boolean; + outlined?: boolean; + responsive?: boolean; + footer?: boolean; + itemsPerPageSelect?: boolean | object; + sorterValue?: object; + columnFilterValue?: object; + header?: boolean; + onRowClick?: Function; + onSorterValueChange?: Function; + onPaginationChange?: Function; + onColumnFilterChange?: Function; + onPagesChange?: Function; + onTableFilterChange?: Function; + onPageChange?: Function; + onFilteredItemsChange?: Function; +} + +interface CDropdown extends HTMLPropsNoClassName { + tag?: any; + children?: ChildElement; + className?: className; + innerRef?: innerRef; + inNav?: boolean; +} + +interface CDropdownItem extends CLink { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + color?: string; + divider?: boolean; + header?: boolean; + disabled?: boolean; + onClick?: Function; + active?: boolean; +} + +interface CDropdownDivider extends CDropdownItem { } + +interface CDropdownHeader extends CDropdownItem { } + +interface CDropdownMenu extends HTMLPropsNoClassName { + children: ChildElement; + className?: className; + innerRef?: innerRef; + modifiers?: Array; + show?: boolean; + placement?: '' | 'top-end' | 'top' | 'top-start' | + 'bottom-end' | 'bottom' | 'bottom-start' | + 'right-start' | 'right' | 'right-end' | + 'left-start' | 'left' | 'left-end'; +} + +interface CDropdownToggle extends CButton { + tag?: any; + children?: ChildElement; + className?: className; + innerRef?: innerRef; + caret?: boolean; + onClick?: Function; + split?: boolean; + disabled?: boolean; +} + +interface CElementCover extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + boundaries?: Array; + opacity?: number; +} + +interface CEmbed extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + ratio?: '21by9' | '16by9' | '4by3' | '1by1'; +} + +interface CEmbedItem extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + type?: 'iframe' | 'embed' | 'video' | 'object' | 'img'; +} + +interface CFade extends Transition { + tag?: any; + children?: Array | ChildElement; + className?: className; + innerRef?: innerRef; + baseClass?: string; + baseClassActive?: string; +} + +interface CFooter extends HTMLPropsNoClassName { + tag?: Function | string; + children?: ChildElement; + className?: className; + innerRef?: innerRef; + fixed?: boolean; +} + +interface CForm extends HTMLPropsNoClassName { + tag?: any; + children?: ChildElement; + className?: className; + innerRef?: innerRef; + inline?: boolean; + wasValidated?: boolean; +} + +interface CValidFeedback extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + tooltip?: boolean; +} + +interface CInvalidFeedback extends CValidFeedback { } + +interface CFormGroup { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + row?: boolean; + variant?: 'checkbox' | 'custom-checkbox' | 'custom-radio'; + inline?: boolean; + disabled?: boolean; +} + +interface CFormText extends HTMLPropsNoClassName { + tag?: any; + children?: ChildElement; + className?: className; + innerRef?: innerRef; + color?: string; +} + +interface CHeader extends HTMLPropsNoClassName { + tag?: Function | string; + className?: className; + children?: ChildElement; + innerRef?: innerRef; + fixed?: boolean; + withSubheader?: boolean; + colorScheme?: string; +} + +interface CHeaderNav extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; +} + +interface CHeaderNavItem extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; +} + +interface CHeaderNavLink extends CLink { + className?: className; + innerRef?: innerRef; +} + +interface CImg extends HTMLPropsNoClassName { + tag?: any; + className?: className | Array; + innerRef?: innerRef; + src?: string; + width?: number | string; + height?: number | string; + block?: boolean; + fluid?: boolean; + fluidGrow?: boolean; + shape?: string; + thumbnail?: boolean; + align?: '' | 'left' | 'right' | 'center'; + placeholderColor?: string; +} + +interface sharedInputProps { + className?: className; + innerRef?: innerRef; + valid?: boolean; + invalid?: boolean; +} + +interface CInput extends sharedInputProps, Omit< HTMLPropsNoClassName, 'size'> { + plaintext?: boolean; + type?: string; + size?: string; + sizeHtml?: string | number; +} + +interface CTextarea extends sharedInputProps, Omit< HTMLPropsNoClassName, 'size'> { + plaintext?: boolean; + size?: string; +} + +interface CInputFile extends sharedInputProps, HTMLPropsNoClassName { + custom?: boolean; +} + +interface CInputCheckbox extends sharedInputProps, HTMLPropsNoClassName { + custom?: boolean; +} + +interface CInputRadio extends CInputCheckbox { } + +interface CSelect extends sharedInputProps, Omit< HTMLPropsNoClassName, 'size'> { + children?: ChildElement; + size?: string; + sizeHtml?: string | number; +} + +interface CInputGroup extends Omit< HTMLPropsNoClassName, 'size'> { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + size?: string; +} + +interface CInputGroupAppend extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; +} + +interface CInputGroupPrepend extends CInputGroupAppend { } + +interface CInputGroupText extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CJumbotron extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + fluid?: boolean; +} + +interface CLabel extends HTMLPropsNoClassName { + tag?: any; + children?: ChildElement; + className?: className; + innerRef?: innerRef; + hidden?: boolean; + variant?: 'custom-file' | 'checkbox' | 'custom-checkbox'; + col?: string | boolean; +} + +interface NavLink extends HTMLProps { + to?: string | object | Function; + replace?: boolean; + component?: any; + activeclassName?: className; + activeStyle?: object; + exact?: boolean; + strict?: boolean; + isActive?: Function; + location?: object; +} + +interface CLink extends Omit { + children?: ChildElement; + innerRef?: innerRef; + active?: boolean; + href?: string; + onClick?: Function; + disabled?: boolean; + className?: className | Array; + to?: object | string | number; +} + + +interface CCardLink extends CLink { } + +interface CListGroup extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + flush?: boolean; + horizontal?: string; + accent?: boolean; +} + +interface CListGroupItem extends Omit { + tag?: any; + className?: className; + innerRef?: innerRef; + active?: boolean; + disabled?: boolean; + color?: string; + accent?: string; + action?: boolean; +} + +interface CMedia extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; +} + +interface CMediaBody extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; +} + +interface CModal extends Omit< HTMLPropsNoClassName, 'size'> { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + show?: boolean; + centered?: boolean; + size?: '' | 'sm' | 'lg' | 'xl'; + backdrop?: boolean; + color?: string; + borderColor?: string; + onOpened?: Function; + onClosed?: Function; + fade?: boolean; + closeOnBackdrop?: boolean; + onClose?: Function; + addContentClass?: string; + scrollable?: boolean; +} + +interface CModalBody extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CModalFooter extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CModalHeader extends HTMLPropsNoClassName { + tag?: any; + children?: ChildElement; + className?: className; + innerRef?: innerRef; + closeButton?: boolean; +} + +interface CModalTitle extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CNav extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + variant?: '' | 'tabs' | 'pills'; + vertical?: boolean | string; + justified?: boolean; + fill?: boolean; + inCard?: boolean; +} + +interface CNavbar extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + light?: boolean; + color?: string; + fixed?: '' | 'top' | 'bottom'; + sticky?: boolean; + expandable?: boolean | string; +} + +interface CNavbarNav extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CNavbarText extends HTMLPropsNoClassName { + tag?: any; + children?: ChildElement; + className?: className; + innerRef?: innerRef; +} + +interface CNavItem extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CNavLink extends CLink { + className?: className; + innerRef?: innerRef; + onClick?: Function; +} + +interface CPagination extends Omit< HTMLPropsNoClassName, 'size'> { + className?: className; + innerRef?: innerRef; + activePage?: number; + dots?: boolean; + arrows?: boolean; + doubleArrows?: boolean; + firstButton?: ChildElement | string; + previousButton?: ChildElement | string; + nextButton?: ChildElement | string; + lastButton?: ChildElement | string; + size?: '' | 'sm' | 'lg'; + align?: 'start' | 'center' | 'end'; + addListClass?: string; + limit?: number; + pages?: number; + onActivePageChange: Function; +} + +interface CTooltip { + children?: ChildElement; + content?: ChildElement; + interactive?: boolean; + placement?: '' | 'top-end' | 'top' | 'top-start' | + 'bottom-end' | 'bottom' | 'bottom-start' | + 'right-start' | 'right' | 'right-end' | + 'left-start' | 'left' | 'left-end'; + trigger?: string; + advancedOptions?: object; +} + +interface CPopover extends CTooltip { + content?: ChildElement; + header?: ChildElement; +} + +interface CProgress extends Omit< HTMLPropsNoClassName, 'size'> { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + size?: string; + value?: string | number; + max?: string | number; + animated?: boolean; + striped?: boolean; + color?: string; + precision?: number; + showPercentage?: boolean; + showValue?: boolean; +} + +interface CProgressBar extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + value?: number; + max?: number; + animated?: boolean; + striped?: boolean; + color?: string; + precision?: number; + showPercentage?: boolean; + showValue?: boolean; +} + +interface CRow extends Omit< HTMLPropsNoClassName, 'form'> { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; + gutters?: boolean; + form?: boolean; + alignHorizontal?: string; + alignVertical?: string; +} + +interface CScrollbar extends HTMLPropsNoClassName { + tag?: Function | string; + className?: className; + settings?: object; + switcher?: boolean; + innerRef?: innerRef; +} + +interface CSidebar extends Omit< HTMLPropsNoClassName, 'size'> { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + fixed?: boolean; + unfoldable?: boolean; + overlaid?: boolean; + breakpoint?: false | '' | 'sm' | 'md' | 'lg' | 'xl'; + minimize?: boolean; + show?: '' | true | false | 'responsive'; + size?: '' | 'sm' | 'lg' | 'xl'; + hideOnMobileClick?: boolean; + aside?: boolean; + colorScheme?: string; + dropdownMode?: '' | 'openActive' | 'close' | 'closeInactive' | 'noAction'; + onShowChange?: Function; + onMinimizeChange?: Function; +} + +interface CSidebarClose extends CButtonClose { } + +interface CSidebarFooter extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: Function | string; + className?: className; + innerRef?: innerRef; +} + +interface CSidebarForm extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: Function | string; + className?: className; + innerRef?: innerRef; +} + +interface CSidebarHeader extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: Function | string; + className?: className; + innerRef?: innerRef; +} + +interface CSidebarMinimizer extends HTMLPropsNoClassName { + className?: className; + innerRef?: innerRef; +} + +interface CSidebarNav extends HTMLPropsNoClassName { + className?: className; + children?: ChildElement; + innerRef?: innerRef; +} + +interface CSidebarNavDivider extends HTMLPropsNoClassName { + className?: className; + innerRef?: innerRef; +} + +interface CSidebarNavDropdown extends HTMLPropsNoClassName { + className?: className; + children?: ChildElement; + innerRef?: innerRef; + name?: string; + icon?: object | string; + fontIcon?: string; + show?: boolean; + route?: string; +} + +interface CSidebarNavItem extends Omit { + className?: className; + innerRef?: innerRef; + icon?: string | object; + fontIcon?: string; + badge?: object; + addLinkClass?: string; + label?: boolean; + name?: string; +} + +interface CSidebarNavTitle extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; +} + +interface CSpinner extends Omit< HTMLPropsNoClassName, 'size'> { + tag?: any; + className?: className; + innerRef?: innerRef; + grow?: boolean; + size?: string; + color?: string; +} + +interface CSubheader extends HTMLPropsNoClassName { + children?: ChildElement; + tag?: any; + className?: className; + innerRef?: innerRef; +} + +interface CSwitch extends Omit< HTMLPropsNoClassName, 'size'> { + className?: className + innerRef?: innerRef + size?: '' | 'lg' | 'sm' + color?: string + labelOn?: string + labelOff?: string + variant?: '' | '3d' | 'opposite' | 'outline' + shape?: '' | 'pill' | 'square' +} + +interface CTabContent extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + fade?: boolean; +} + +interface CTabPane extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + active?: boolean; +} + +interface CTabs extends HTMLPropsNoClassName { + children?: ChildElement; + activeTab?: string | number; + onActiveTabChange?: Function; +} + +interface CToast extends HTMLPropsNoClassName { + className?: className; + children?: ChildElement; + innerRef?: innerRef; + show?: boolean; + autohide?: number | boolean; + fade?: boolean; + color?: string; + onStateChange?: Function; +} + +interface CToastBody extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; +} + +interface CToaster extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + position?: '' | 'static' | 'top-right' | 'top-left' | 'top-center' | 'top-full' | + 'bottom-right' | 'bottom-left' | 'bottom-center' | 'bottom-full'; +} + +interface CToastHeader extends HTMLPropsNoClassName { + className?: className; + children?: ChildElement; + innerRef?: innerRef; + closeButton?: boolean; +} + +interface CToggler extends Omit, 'className'> { + tag?: any; + children?: ChildElement; + className?: className; + innerRef?: innerRef; + inHeader?: boolean; + inNavbar?: boolean; +} + +interface CWidgetBrand extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + color?: string; + rightHeader?: string; + rightFooter?: string; + leftHeader?: string; + leftFooter?: string; + addHeaderClasses?: string | Array | object; + bodySlot?: ChildElement; +} + +interface CWidgetDropdown extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + header?: string; + color?: string; + footerSlot?: ChildElement; + text?: string; +} + +interface CWidgetIcon extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + header?: string; + text?: string; + iconPadding?: boolean; + color?: string; + footerSlot?: ChildElement; +} + +interface CWidgetProgress extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + header?: string; + text?: string; + footer?: string; + color?: string; + value?: number; + inverse?: boolean; +} + +interface CWidgetProgressIcon extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + header?: string; + text?: string; + color?: string; + value?: number; + inverse?: boolean; + progressSlot?: ChildElement; +} + +interface CWidgetSimple extends HTMLPropsNoClassName { + children?: ChildElement; + className?: className; + innerRef?: innerRef; + header?: string; + text?: string; +} + +export declare const CAlert: (props: CAlert) => any; +export declare const CBadge: (props: CBadge) => any; +export declare const CBrand: (props: CBrand) => any; +export declare const CHeaderBrand: (props: CHeaderBrand) => any; +export declare const CNavbarBrand: (props: CNavbarBrand) => any; +export declare const CSidebarBrand: (props: CSidebarBrand) => any; +export declare const CBreadcrumb: (props: CBreadcrumb) => any; +export declare const CBreadcrumbItem: (props: CBreadcrumbItem) => any; +export declare const CBreadcrumbRouter: (props: CBreadcrumbRouter) => any; +export declare const CButton: (props: CButton) => any; +export declare const CButtonClose: (props: CButtonClose) => any; +export declare const CButtonGroup: (props: CButtonGroup) => any; +export declare const CButtonToolbar: (props: CButtonToolbar) => any; +export declare const CCallout: (props: CCallout) => any; +export declare const CCard: (props: CCard) => any; +export declare const CCardBody: (props: CCardBody) => any; +export declare const CCardFooter: (props: CCardFooter) => any; +export declare const CCardGroup: (props: CCardGroup) => any; +export declare const CCardHeader: (props: CCardHeader) => any; +export declare const CCardImg: (props: CCardImg) => any; +export declare const CCardImgOverlay: (props: CCardImgOverlay) => any; +export declare const CCardSubtitle: (props: CCardSubtitle) => any; +export declare const CCardText: (props: CCardText) => any; +export declare const CCardTitle: (props: CCardTitle) => any; +export declare const CCarousel: (props: CCarousel) => any; +export declare const CCarouselCaption: (props: CCarouselCaption) => any; +export declare const CCarouselControl: (props: CCarouselControl) => any; +export declare const CCarouselIndicators: (props: CCarouselIndicators) => any; +export declare const CCarouselInner: (props: CCarouselInner) => any; +export declare const CCarouselItem: (props: CCarouselItem) => any; +export declare const CCol: (props: CCol) => any; +export declare const CCollapse: (props: CCollapse) => any; +export declare const CContainer: (props: CContainer) => any; +export declare const CCreateElement: (props: CCreateElement) => any; +export declare const CDataTable: (props: CDataTable) => any; +export declare const CDropdown: (props: CDropdown) => any; +export declare const CDropdownItem: (props: CDropdownItem) => any; +export declare const CDropdownDivider: (props: CDropdownDivider) => any; +export declare const CDropdownHeader: (props: CDropdownHeader) => any; +export declare const CDropdownMenu: (props: CDropdownMenu) => any; +export declare const CDropdownToggle: (props: CDropdownToggle) => any; +export declare const CElementCover: (props: CElementCover) => any; +export declare const CEmbed: (props: CEmbed) => any; +export declare const CEmbedItem: (props: CEmbedItem) => any; +export declare const CFade: (props: CFade) => any; +export declare const CFooter: (props: CFooter) => any; +export declare const CForm: (props: CForm) => any; +export declare const CValidFeedback: (props: CValidFeedback) => any; +export declare const CInvalidFeedback: (props: CInvalidFeedback) => any; +export declare const CFormGroup: (props: CFormGroup) => any; +export declare const CFormText: (props: CFormText) => any; +export declare const CHeader: (props: CHeader) => any; +export declare const CHeaderNav: (props: CHeaderNav) => any; +export declare const CHeaderNavItem: (props: CHeaderNavItem) => any; +export declare const CHeaderNavLink: (props: CHeaderNavLink) => any; +export declare const CImg: (props: CImg) => any; +export declare const CInput: (props: CInput) => any; +export declare const CTextarea: (props: CTextarea) => any; +export declare const CInputFile: (props: CInputFile) => any; +export declare const CInputCheckbox: (props: CInputCheckbox) => any; +export declare const CInputRadio: (props: CInputRadio) => any; +export declare const CSelect: (props: CSelect) => any; +export declare const CInputGroup: (props: CInputGroup) => any; +export declare const CInputGroupAppend: (props: CInputGroupAppend) => any; +export declare const CInputGroupPrepend: (props: CInputGroupPrepend) => any; +export declare const CInputGroupText: (props: CInputGroupText) => any; +export declare const CJumbotron: (props: CJumbotron) => any; +export declare const CLabel: (props: CLabel) => any; +export declare const CLink: (props: CLink) => any; +export declare const CCardLink: (props: CCardLink) => any; +export declare const CListGroup: (props: CListGroup) => any; +export declare const CListGroupItem: (props: CListGroupItem) => any; +export declare const CMedia: (props: CMedia) => any; +export declare const CMediaBody: (props: CMediaBody) => any; +export declare const CModal: (props: CModal) => any; +export declare const CModalBody: (props: CModalBody) => any; +export declare const CModalFooter: (props: CModalFooter) => any; +export declare const CModalHeader: (props: CModalHeader) => any; +export declare const CModalTitle: (props: CModalTitle) => any; +export declare const CNav: (props: CNav) => any; +export declare const CNavbar: (props: CNavbar) => any; +export declare const CNavbarNav: (props: CNavbarNav) => any; +export declare const CNavbarText: (props: CNavbarText) => any; +export declare const CNavItem: (props: CNavItem) => any; +export declare const CNavLink: (props: CNavLink) => any; +export declare const CPagination: (props: CPagination) => any; +export declare const CPopover: (props: CPopover) => any; +export declare const CProgress: (props: CProgress) => any; +export declare const CProgressBar: (props: CProgressBar) => any; +export declare const CRow: (props: CRow) => any; +export declare const CScrollbar: (props: CScrollbar) => any; +export declare const CSidebar: (props: CSidebar) => any; +export declare const CSidebarClose: (props: CSidebarClose) => any; +export declare const CSidebarFooter: (props: CSidebarFooter) => any; +export declare const CSidebarForm: (props: CSidebarForm) => any; +export declare const CSidebarHeader: (props: CSidebarHeader) => any; +export declare const CSidebarMinimizer: (props: CSidebarMinimizer) => any; +export declare const CSidebarNav: (props: CSidebarNav) => any; +export declare const CSidebarNavDivider: (props: CSidebarNavDivider) => any; +export declare const CSidebarNavDropdown: (props: CSidebarNavDropdown) => any; +export declare const CSidebarNavItem: (props: CSidebarNavItem) => any; +export declare const CSidebarNavTitle: (props: CSidebarNavTitle) => any; +export declare const CSpinner: (props: CSpinner) => any; +export declare const CSubheader: (props: CSubheader) => any; +export declare const CSwitch: (props: CSwitch) => any; +export declare const CTabContent: (props: CTabContent) => any; +export declare const CTabPane: (props: CTabPane) => any; +export declare const CTabs: (props: CTabs) => any; +export declare const CToast: (props: CToast) => any; +export declare const CToastBody: (props: CToastBody) => any; +export declare const CToaster: (props: CToaster) => any; +export declare const CToastHeader: (props: CToastHeader) => any; +export declare const CTooltip: (props: CTooltip) => any; +export declare const CToggler: (props: CToggler) => any; +export declare const CWidgetBrand: (props: CWidgetBrand) => any; +export declare const CWidgetDropdown: (props: CWidgetDropdown) => any; +export declare const CWidgetIcon: (props: CWidgetIcon) => any; +export declare const CWidgetProgress: (props: CWidgetProgress) => any; +export declare const CWidgetProgressIcon: (props: CWidgetProgressIcon) => any; +export declare const CWidgetSimple: (props: CWidgetSimple) => any; diff --git a/es/index.js b/es/index.js new file mode 100644 index 00000000..0dc6a40f --- /dev/null +++ b/es/index.js @@ -0,0 +1,127 @@ +export { default as CAlert } from './alert/CAlert'; +export { default as CBadge } from './badge/CBadge'; +export { default as CButton } from './button/CButton'; +export { default as CButtonClose } from './button/CButtonClose'; +export { default as CButtonGroup } from './button/CButtonGroup'; +export { default as CButtonToolbar } from './button/CButtonToolbar'; +export { default as CBreadcrumb } from './breadcrumb/CBreadcrumb'; +export { default as CBreadcrumbRouter } from './breadcrumb/CBreadcrumbRouter'; +export { default as CBreadcrumbItem } from './breadcrumb/CBreadcrumbItem'; +export { default as CCallout } from './callout/CCallout'; +export { default as CCard } from './card/CCard'; +export { default as CCardBody } from './card/CCardBody'; +export { default as CCardHeader } from './card/CCardHeader'; +export { default as CCardFooter } from './card/CCardFooter'; +export { default as CCardGroup } from './card/CCardGroup'; +export { default as CCardImg } from './card/CCardImg'; +export { default as CCardImgOverlay } from './card/CCardImgOverlay'; +export { default as CCardLink } from './card/CCardLink'; +export { default as CCardTitle } from './card/CCardTitle'; +export { default as CCardSubtitle } from './card/CCardSubtitle'; +export { default as CCardText } from './card/CCardText'; +export { default as CCarousel } from './carousel/CCarousel'; +export { default as CCarouselItem } from './carousel/CCarouselItem'; +export { default as CCarouselControl } from './carousel/CCarouselControl'; +export { default as CCarouselIndicators } from './carousel/CCarouselIndicators'; +export { default as CCarouselCaption } from './carousel/CCarouselCaption'; +export { default as CCarouselInner } from './carousel/CCarouselInner'; +export { default as CCollapse } from './collapse/CCollapse'; +export { default as CCreateElement } from './create-element/CCreateElement'; +export { default as CDropdown } from './dropdown/CDropdown'; +export { default as CDropdownDivider } from './dropdown/CDropdownDivider'; +export { default as CDropdownHeader } from './dropdown/CDropdownHeader'; +export { default as CDropdownItem } from './dropdown/CDropdownItem'; +export { default as CDropdownMenu } from './dropdown/CDropdownMenu'; +export { default as CDropdownToggle } from './dropdown/CDropdownToggle'; +export { default as CElementCover } from './element-cover/CElementCover'; +export { default as CEmbed } from './embed/CEmbed'; +export { default as CEmbedItem } from './embed/CEmbedItem'; +export { default as CFade } from './fade/CFade'; +export { default as CForm } from './form/CForm'; +export { CValidFeedback, CInvalidFeedback } from './form/CFormFeedback'; +export { default as CLabel } from './form/CLabel'; +export { default as CFormGroup } from './form/CFormGroup'; +export { default as CFormText } from './form/CFormText'; +export { CTextarea, CInput, CInputFile, CInputCheckbox, CInputRadio, CSelect } from './form/CInput'; +export { default as CInputGroup } from './form/CInputGroup'; +export { CInputGroupPrepend } from './form/CInputGroupAddon'; +export { CInputGroupAppend } from './form/CInputGroupAddon'; +export { default as CInputGroupText } from './form/CInputGroupText'; +export { default as CRow } from './grid/CRow'; +export { default as CCol } from './grid/CCol'; +export { default as CContainer } from './grid/CContainer'; +export { default as CImg } from './image/CImg'; +export { default as CJumbotron } from './jumbotron/CJumbotron'; +export { default as CLink } from './link/CLink'; +export { default as CListGroup } from './list-group/CListGroup'; +export { default as CListGroupItem } from './list-group/CListGroupItem'; +import React from 'react'; + +var wrapper = function wrapper(props) { + console.warn('CListGroupItemText component is deprecated, please use div tag instead'); + return /*#__PURE__*/React.createElement("div", props); +}; + +var heading = function heading(props) { + console.warn('CListGroupItemHeading component is deprecated, please use h5 tag instead'); + return /*#__PURE__*/React.createElement("h5", props); +}; + +export { wrapper as CListGroupItemText }; +export { heading as CListGroupItemHeading }; +export { default as CMedia } from './media/CMedia'; +export { default as CMediaBody } from './media/CMediaBody'; +export { default as CModal } from './modal/CModal'; +export { default as CModalBody } from './modal/CModalBody'; +export { default as CModalHeader } from './modal/CModalHeader'; +export { default as CModalFooter } from './modal/CModalFooter'; +export { default as CModalTitle } from './modal/CModalTitle'; +export { default as CNav } from './nav/CNav'; +export { default as CNavItem } from './nav/CNavItem'; +export { default as CNavLink } from './nav/CNavLink'; +export { default as CNavbarBrand } from './navbar/CNavbarBrand'; +export { default as CNavbar } from './navbar/CNavbar'; +export { default as CNavbarNav } from './navbar/CNavbarNav'; +export { default as CNavbarText } from './navbar/CNavbarText'; +export { default as CPagination } from './pagination/CPagination'; +export { default as CProgress } from './progress/CProgress'; +export { default as CProgressBar } from './progress/CProgressBar'; +export { default as CSpinner } from './spinner/CSpinner'; +export { default as CSwitch } from './switch/CSwitch'; +export { default as CDataTable } from './table/CDataTable'; +export { default as CTabs } from './tabs/CTabs'; +export { default as CTabPane } from './tabs/CTabPane'; +export { default as CTabContent } from './tabs/CTabContent'; +export { default as CFooter } from './template/CFooter'; +export { default as CHeader } from './template/CHeader'; +export { default as CHeaderNav } from './template/CHeaderNav'; +export { default as CHeaderNavItem } from './template/CHeaderNavItem'; +export { default as CHeaderNavLink } from './template/CHeaderNavLink'; +export { default as CHeaderBrand } from './template/CHeaderBrand'; +export { default as CSubheader } from './template/CSubheader'; +export { default as CSidebar } from './template/CSidebar'; +export { default as CSidebarBrand } from './template/CSidebarBrand'; +export { default as CSidebarNavDivider } from './template/CSidebarNavDivider'; +export { default as CSidebarNavTitle } from './template/CSidebarNavTitle'; +export { default as CSidebarNavItem } from './template/CSidebarNavItem'; +export { default as CSidebarNavDropdown } from './template/CSidebarNavDropdown'; +export { default as CSidebarFooter } from './template/CSidebarFooter'; +export { default as CSidebarForm } from './template/CSidebarForm'; +export { default as CSidebarHeader } from './template/CSidebarHeader'; +export { default as CSidebarMinimizer } from './template/CSidebarMinimizer'; +export { default as CSidebarNav } from './template/CSidebarNav'; +export { default as CSidebarClose } from './template/CSidebarClose'; +export { default as CToast } from './toast/CToast'; +export { default as CToastHeader } from './toast/CToastHeader'; +export { default as CToastBody } from './toast/CToastBody'; +export { default as CToaster } from './toast/CToaster'; +export { default as CToggler } from './toggler/CToggler'; +export { default as CTooltip } from './tooltip/CTooltip'; +export { default as CPopover } from './tooltip/CPopover'; // export {default as CPortal} from './portal/CPortal'; + +export { default as CWidgetProgress } from './widgets/CWidgetProgress'; +export { default as CWidgetIcon } from './widgets/CWidgetIcon'; +export { default as CWidgetBrand } from './widgets/CWidgetBrand'; +export { default as CWidgetProgressIcon } from './widgets/CWidgetProgressIcon'; +export { default as CWidgetDropdown } from './widgets/CWidgetDropdown'; +export { default as CWidgetSimple } from './widgets/CWidgetSimple'; \ No newline at end of file diff --git a/es/jumbotron/CJumbotron.js b/es/jumbotron/CJumbotron.js new file mode 100644 index 00000000..3310ba43 --- /dev/null +++ b/es/jumbotron/CJumbotron.js @@ -0,0 +1,33 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CJumbotron + +var CJumbotron = function CJumbotron(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + fluid = props.fluid, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "fluid"]); //render + + + var classes = classNames(className, 'jumbotron', fluid ? 'jumbotron-fluid' : false); + return /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CJumbotron.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + fluid: PropTypes.bool +}; +CJumbotron.defaultProps = { + tag: 'div' +}; +export default CJumbotron; \ No newline at end of file diff --git a/es/link/ActiveLink.js b/es/link/ActiveLink.js new file mode 100644 index 00000000..b1e3f9e7 --- /dev/null +++ b/es/link/ActiveLink.js @@ -0,0 +1,33 @@ +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from "react"; +import { useRouter } from "next/router"; +import PropTypes from "prop-types"; +import Link from "next/link"; + +var ActiveLink = function ActiveLink(_ref) { + var children = _ref.children, + className = _ref.className, + _ref$activeClassName = _ref.activeClassName, + activeClassName = _ref$activeClassName === void 0 ? "active" : _ref$activeClassName, + _ref$disabled = _ref.disabled, + disabled = _ref$disabled === void 0 ? false : _ref$disabled, + props = _objectWithoutPropertiesLoose(_ref, ["children", "className", "activeClassName", "disabled"]); + + var _useRouter = useRouter(), + asPath = _useRouter.asPath; // pages/index.js will be matched via props.href + // pages/about.js will be matched via props.href + // pages/[slug].js will be matched via props.as + + + var cname = (asPath === props.href || asPath === props.as) && !disabled ? [className, activeClassName].join(" ") : className; + return disabled ? /*#__PURE__*/React.createElement("span", { + className: cname + }, children) : /*#__PURE__*/React.createElement(Link, props, /*#__PURE__*/React.createElement("a", { + className: cname + }, children)); +}; + +ActiveLink.propTypes = { + activeClassName: PropTypes.string +}; +export default ActiveLink; \ No newline at end of file diff --git a/es/link/CLink.js b/es/link/CLink.js new file mode 100644 index 00000000..042d5cbc --- /dev/null +++ b/es/link/CLink.js @@ -0,0 +1,68 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from "react"; +import PropTypes from "prop-types"; +import ActiveLink from "./ActiveLink"; //component - CoreUI / CLink + +var CLink = function CLink(props) { + var className = props.className, + innerRef = props.innerRef, + active = props.active, + _props$activeClassNam = props.activeClassName, + activeClassName = _props$activeClassNam === void 0 ? "active" : _props$activeClassNam, + href = props.href, + onClick = props.onClick, + disabled = props.disabled, + rest = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "active", "activeClassName", "href", "onClick", "disabled"]); + + var to = rest ? rest.to : null; + + var click = function click(e) { + if (!href && !to || href === "#") { + e.preventDefault(); + } + + !disabled && onClick && onClick(e); + }; // render + + + return to ? /*#__PURE__*/React.createElement(ActiveLink, _extends({}, rest, { + className: className, + activeClassName: activeClassName, + disabled: disabled, + href: to, + ref: innerRef + })) : /*#__PURE__*/React.createElement("a", _extends({ + href: href || "#", + className: className, + rel: rest.target === "_blank" ? "noopener norefferer" : null + }, rest, { + onClick: click, + ref: innerRef + })); +}; + +CLink.propTypes = { + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + active: PropTypes.bool, + href: PropTypes.string, + onClick: PropTypes.func, + disabled: PropTypes.bool, + // ...NavLink.propTypes, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + to: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.func]) +}; // CLink.sortAttributes = (attributesToSort) => { +// const attributes = {} +// const linkProps = {} +// Object.entries(attributesToSort || {}).forEach(([key, value]) => { +// if (Object.keys(CLink.propTypes).includes(key)) { +// linkProps[key] = value +// } else { +// attributes[key] = value +// } +// }) +// return { linkProps, attributes } +// } + +export default CLink; \ No newline at end of file diff --git a/es/list-group/CListGroup.js b/es/list-group/CListGroup.js new file mode 100644 index 00000000..171ae93e --- /dev/null +++ b/es/list-group/CListGroup.js @@ -0,0 +1,41 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CListGroup + +var CListGroup = function CListGroup(props) { + var _classNames; + + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + horizontal = props.horizontal, + flush = props.flush, + accent = props.accent, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "horizontal", "flush", "accent"]); // render + + + var classes = classNames(className, 'list-group', (_classNames = {}, _classNames["list-group-horizontal-" + horizontal] = horizontal, _classNames['list-group-flush'] = flush, _classNames['list-group-accent'] = accent, _classNames)); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes, + role: "list-items" + }, attributes, { + ref: innerRef + })); +}; + +CListGroup.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + flush: PropTypes.bool, + horizontal: PropTypes.string, + accent: PropTypes.bool +}; +CListGroup.defaultProps = { + tag: 'ul' +}; +export default CListGroup; \ No newline at end of file diff --git a/es/list-group/CListGroupItem.js b/es/list-group/CListGroupItem.js new file mode 100644 index 00000000..1ecaec81 --- /dev/null +++ b/es/list-group/CListGroupItem.js @@ -0,0 +1,56 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; +import CLink from '../link/CLink'; //component - CoreUI / CListGroupItem + +var CListGroupItem = function CListGroupItem(props) { + var _classNames; + + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + active = props.active, + disabled = props.disabled, + action = props.action, + color = props.color, + accent = props.accent, + rest = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "active", "disabled", "action", "color", "accent"]); //render + + + var classes = classNames(className, 'list-group-item', (_classNames = { + 'list-group-item-action': action || rest.href || rest.to || Tag == 'button', + active: active, + disabled: disabled + }, _classNames["list-group-item-" + color] = color, _classNames["list-group-item-accent-" + accent] = accent, _classNames)); + + if (props.href || props.to) { + return /*#__PURE__*/React.createElement(CLink, _extends({}, rest, { + className: classes, + innerRef: innerRef + })); + } else { + return /*#__PURE__*/React.createElement(Tag, _extends({}, rest, { + className: classes, + ref: innerRef + })); + } +}; + +CListGroupItem.propTypes = { + tag: tagPropType, + className: PropTypes.any, + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + active: PropTypes.bool, + disabled: PropTypes.bool, + color: PropTypes.string, + accent: PropTypes.string, + action: PropTypes.bool +}; +CListGroupItem.defaultProps = { + tag: 'li' +}; +export default CListGroupItem; \ No newline at end of file diff --git a/es/list-group/CListGroupItemHeading.js b/es/list-group/CListGroupItemHeading.js new file mode 100644 index 00000000..b53e527c --- /dev/null +++ b/es/list-group/CListGroupItemHeading.js @@ -0,0 +1,32 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CListGroupItemHeading + +var CListGroupItemHeading = function CListGroupItemHeading(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); // render + + + var classes = classNames('list-group-item-heading', className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CListGroupItemHeading.propTypes = { + tag: tagPropType, + className: PropTypes.any, + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]) +}; +CListGroupItemHeading.defaultProps = { + tag: 'h5' +}; +export default CListGroupItemHeading; \ No newline at end of file diff --git a/es/list-group/CListGroupItemText.js b/es/list-group/CListGroupItemText.js new file mode 100644 index 00000000..e1a6f05b --- /dev/null +++ b/es/list-group/CListGroupItemText.js @@ -0,0 +1,32 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CListGroupItemText + +var CListGroupItemText = function CListGroupItemText(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames('list-group-item-text', className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CListGroupItemText.propTypes = { + tag: tagPropType, + className: PropTypes.any, + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.string]) +}; +CListGroupItemText.defaultProps = { + tag: 'p' +}; +export default CListGroupItemText; \ No newline at end of file diff --git a/es/media/CMedia.js b/es/media/CMedia.js new file mode 100644 index 00000000..6c9188c6 --- /dev/null +++ b/es/media/CMedia.js @@ -0,0 +1,26 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CMedia + +var CMedia = function CMedia(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); //render + + + var classes = classNames('media', className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CMedia.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CMedia; \ No newline at end of file diff --git a/es/media/CMediaBody.js b/es/media/CMediaBody.js new file mode 100644 index 00000000..9b29cb7c --- /dev/null +++ b/es/media/CMediaBody.js @@ -0,0 +1,26 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CMediaBody + +var CMediaBody = function CMediaBody(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); //render + + + var classes = classNames('media-body', className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CMediaBody.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CMediaBody; \ No newline at end of file diff --git a/es/modal/CModal.js b/es/modal/CModal.js new file mode 100644 index 00000000..24c12256 --- /dev/null +++ b/es/modal/CModal.js @@ -0,0 +1,146 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useState, useEffect, useRef } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { Transition } from 'react-transition-group'; +export var Context = /*#__PURE__*/React.createContext({}); + +var getTransitionClass = function getTransitionClass(s) { + return s === 'entering' ? 'd-block' : s === 'entered' ? 'show d-block' : s === 'exiting' ? 'd-block' : ''; +}; //animation fixes introduced thanks to Sirlordt +//component - CoreUI / CModal + + +var CModal = function CModal(props) { + var _classNames, _classNames2, _classNames3; + + var innerRef = props.innerRef, + show = props.show, + centered = props.centered, + size = props.size, + color = props.color, + borderColor = props.borderColor, + fade = props.fade, + backdrop = props.backdrop, + closeOnBackdrop = props.closeOnBackdrop, + onOpened = props.onOpened, + onClosed = props.onClosed, + addContentClass = props.addContentClass, + onClose = props.onClose, + className = props.className, + scrollable = props.scrollable, + attributes = _objectWithoutPropertiesLoose(props, ["innerRef", "show", "centered", "size", "color", "borderColor", "fade", "backdrop", "closeOnBackdrop", "onOpened", "onClosed", "addContentClass", "onClose", "className", "scrollable"]); + + var _useState = useState(false), + isOpen = _useState[0], + setIsOpen = _useState[1]; + + var _useState2 = useState(false), + modalTrigger = _useState2[0], + setModalTrigger = _useState2[1]; + + var modalClick = function modalClick(e) { + return e.target.dataset.modal && closeOnBackdrop && close(); + }; + + useEffect(function () { + setIsOpen(show); + }, [show]); + + var onKeypress = function onKeypress(e) { + return e.keyCode == '27' && close(); + }; + + useEffect(function () { + isOpen && document.addEventListener('keydown', onKeypress); + return function () { + return document.removeEventListener('keydown', onKeypress); + }; + }, [isOpen]); + + var close = function close() { + onClose && onClose(); + setIsOpen(false); + }; + + var onEntered = function onEntered() { + setModalTrigger(document.querySelector(':focus')); + nodeRef.current.focus(); + onOpened && onOpened(); + }; + + var onExited = function onExited() { + modalTrigger && modalTrigger.focus(); + onClosed && onClosed(); + }; + + var modalClasses = classNames('modal overflow-auto fade', (_classNames = {}, _classNames["modal-" + color] = color, _classNames), className); + var dialogClasses = classNames('modal-dialog', (_classNames2 = { + 'modal-dialog-scrollable': scrollable, + 'modal-dialog-centered': centered + }, _classNames2["modal-" + size] = size, _classNames2)); + var contentClasses = classNames('modal-content', (_classNames3 = {}, _classNames3["border-" + borderColor] = borderColor, _classNames3), addContentClass); + var backdropClasses = classNames({ + 'modal-backdrop': true, + 'fade': fade, + 'show': isOpen || fade + }); + var nodeRef = useRef(null); + return /*#__PURE__*/React.createElement("div", { + onClick: modalClick + }, /*#__PURE__*/React.createElement(Transition, { + in: Boolean(isOpen), + onEntered: onEntered, + onExited: onExited, + timeout: fade ? 150 : 0, + nodeRef: nodeRef + }, function (status) { + var transitionClass = getTransitionClass(status); + var classes = classNames(modalClasses, transitionClass); + return /*#__PURE__*/React.createElement("div", { + tabIndex: "-1", + role: "dialog", + className: classes, + "data-modal": true, + ref: nodeRef + }, /*#__PURE__*/React.createElement("div", { + className: dialogClasses, + role: "document" + }, /*#__PURE__*/React.createElement("div", _extends({}, attributes, { + className: contentClasses, + ref: innerRef + }), /*#__PURE__*/React.createElement(Context.Provider, { + value: { + close: close + } + }, props.children)))); + }), backdrop && isOpen && /*#__PURE__*/React.createElement("div", { + className: backdropClasses + })); +}; + +CModal.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + show: PropTypes.bool, + centered: PropTypes.bool, + size: PropTypes.oneOf(['', 'sm', 'lg', 'xl']), + backdrop: PropTypes.bool, + color: PropTypes.string, + borderColor: PropTypes.string, + onOpened: PropTypes.func, + onClosed: PropTypes.func, + fade: PropTypes.bool, + closeOnBackdrop: PropTypes.bool, + onClose: PropTypes.func, + addContentClass: PropTypes.string, + scrollable: PropTypes.bool +}; +CModal.defaultProps = { + backdrop: true, + fade: true, + closeOnBackdrop: true +}; +export default CModal; \ No newline at end of file diff --git a/es/modal/CModalBody.js b/es/modal/CModalBody.js new file mode 100644 index 00000000..10792654 --- /dev/null +++ b/es/modal/CModalBody.js @@ -0,0 +1,32 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CModalBody + +var CModalBody = function CModalBody(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames(className, 'modal-body'); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CModalBody.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CModalBody.defaultProps = { + tag: 'div' +}; +export default CModalBody; \ No newline at end of file diff --git a/es/modal/CModalFooter.js b/es/modal/CModalFooter.js new file mode 100644 index 00000000..95f62d3b --- /dev/null +++ b/es/modal/CModalFooter.js @@ -0,0 +1,32 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CModalFooter + +var CModalFooter = function CModalFooter(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames(className, 'modal-footer'); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CModalFooter.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CModalFooter.defaultProps = { + tag: 'footer' +}; +export default CModalFooter; \ No newline at end of file diff --git a/es/modal/CModalHeader.js b/es/modal/CModalHeader.js new file mode 100644 index 00000000..b21e3adb --- /dev/null +++ b/es/modal/CModalHeader.js @@ -0,0 +1,42 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useContext } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; +import { Context } from './CModal'; +import CButtonClose from '../button/CButtonClose'; //component - CoreUI / CModalHeader + +var CModalHeader = function CModalHeader(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + closeButton = props.closeButton, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "closeButton"]); + + var _useContext = useContext(Context), + close = _useContext.close; //render + + + var classes = classNames(className, 'modal-header'); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + }), props.children, closeButton && /*#__PURE__*/React.createElement(CButtonClose, { + onClick: close + })); +}; + +CModalHeader.propTypes = { + tag: tagPropType, + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + closeButton: PropTypes.bool +}; +CModalHeader.defaultProps = { + tag: 'header' +}; +export default CModalHeader; \ No newline at end of file diff --git a/es/modal/CModalTitle.js b/es/modal/CModalTitle.js new file mode 100644 index 00000000..83d0f84c --- /dev/null +++ b/es/modal/CModalTitle.js @@ -0,0 +1,32 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CModalTitle + +var CModalTitle = function CModalTitle(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames('modal-title', className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CModalTitle.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CModalTitle.defaultProps = { + tag: 'h5' +}; +export default CModalTitle; \ No newline at end of file diff --git a/es/nav/CNav.js b/es/nav/CNav.js new file mode 100644 index 00000000..f8cc5186 --- /dev/null +++ b/es/nav/CNav.js @@ -0,0 +1,45 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CNav + +var CNav = function CNav(props) { + var _classNames; + + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + variant = props.variant, + vertical = props.vertical, + justified = props.justified, + fill = props.fill, + inCard = props.inCard, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "variant", "vertical", "justified", "fill", "inCard"]); + + var verticalClass = "flex" + (vertical === true ? '' : "-" + vertical) + "-column"; //render + + var classes = classNames('nav', vertical && verticalClass, (_classNames = {}, _classNames["nav-" + variant] = variant, _classNames['nav-justified'] = justified, _classNames['nav-fill'] = fill, _classNames["card-header-" + variant] = inCard && variant, _classNames), className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CNav.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + variant: PropTypes.oneOf(['', 'tabs', 'pills']), + vertical: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]), + justified: PropTypes.bool, + fill: PropTypes.bool, + inCard: PropTypes.bool +}; +CNav.defaultProps = { + tag: 'ul' +}; +export default CNav; \ No newline at end of file diff --git a/es/nav/CNavItem.js b/es/nav/CNavItem.js new file mode 100644 index 00000000..1004ffc2 --- /dev/null +++ b/es/nav/CNavItem.js @@ -0,0 +1,32 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CNavItem + +var CNavItem = function CNavItem(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames('nav-item', className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CNavItem.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CNavItem.defaultProps = { + tag: 'li' +}; +export default CNavItem; \ No newline at end of file diff --git a/es/nav/CNavLink.js b/es/nav/CNavLink.js new file mode 100644 index 00000000..34bab94b --- /dev/null +++ b/es/nav/CNavLink.js @@ -0,0 +1,57 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useContext, useState, createRef, useEffect } from 'react'; +import PropTypes from 'prop-types'; +import CLink from '../link/CLink'; +import { Context } from '../tabs/CTabs'; + +var getIndex = function getIndex(el) { + return Array.from(el.parentNode.children).indexOf(el); +}; + +var getState = function getState(_ref) { + var el = _ref.current; + var hasSiblings = el.parentElement.childNodes.length > 1; + return el.dataset.tab || getIndex(hasSiblings ? el : el.parentElement); +}; + +var CNavLink = function CNavLink(props) { + var innerRef = props.innerRef, + className = props.className, + onClick = props.onClick, + rest = _objectWithoutPropertiesLoose(props, ["innerRef", "className", "onClick"]); + + var tabState = useContext(Context); + var actTab = (tabState || {}).active; + var ref = /*#__PURE__*/createRef(); + innerRef && innerRef(ref); + + var _useState = useState(), + active = _useState[0], + setActive = _useState[1]; + + useEffect(function () { + typeof actTab !== 'undefined' && setActive(getState(ref) === actTab); + }, [actTab]); + + var click = function click(e) { + onClick && onClick(e); + tabState && tabState.setActiveTab(getState(ref)); + }; + + return /*#__PURE__*/React.createElement(CLink, _extends({ + active: active + }, rest, { + innerRef: ref, + onClick: click, + className: ['nav-link', className] + })); +}; + +CNavLink.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + onClick: PropTypes.func +}; +export default CNavLink; \ No newline at end of file diff --git a/es/navbar/CNavbar.js b/es/navbar/CNavbar.js new file mode 100644 index 00000000..4a4c8459 --- /dev/null +++ b/es/navbar/CNavbar.js @@ -0,0 +1,44 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CNavbar + +var CNavbar = function CNavbar(props) { + var _classNames; + + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + expandable = props.expandable, + light = props.light, + fixed = props.fixed, + sticky = props.sticky, + color = props.color, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "expandable", "light", "fixed", "sticky", "color"]); //render + + + var classes = classNames('navbar', className, light ? 'navbar-light' : 'navbar-dark', (_classNames = {}, _classNames["navbar-expand" + (expandable === true ? '' : "-" + expandable)] = expandable, _classNames["bg-" + color] = color, _classNames["fixed-" + fixed] = fixed, _classNames['sticky-top'] = sticky, _classNames)); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CNavbar.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + light: PropTypes.bool, + color: PropTypes.string, + fixed: PropTypes.oneOf(['', 'top', 'bottom']), + sticky: PropTypes.bool, + expandable: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]) +}; +CNavbar.defaultProps = { + tag: 'nav' +}; +export default CNavbar; \ No newline at end of file diff --git a/es/navbar/CNavbarBrand.js b/es/navbar/CNavbarBrand.js new file mode 100644 index 00000000..7bfae639 --- /dev/null +++ b/es/navbar/CNavbarBrand.js @@ -0,0 +1,13 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; + +/* eslint react/prop-types: 0 */ +import React from 'react'; +import CBrand from '../utils/CBrand'; //component - CoreUI / CNavbarBrand + +var CNavbarBrand = function CNavbarBrand(props) { + return /*#__PURE__*/React.createElement(CBrand, _extends({}, props, { + className: ['navbar-brand', props.className] + })); +}; + +export default CNavbarBrand; \ No newline at end of file diff --git a/es/navbar/CNavbarNav.js b/es/navbar/CNavbarNav.js new file mode 100644 index 00000000..8276e88c --- /dev/null +++ b/es/navbar/CNavbarNav.js @@ -0,0 +1,32 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CNavbarNav + +var CNavbarNav = function CNavbarNav(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames('navbar-nav', className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CNavbarNav.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CNavbarNav.defaultProps = { + tag: 'ul' +}; +export default CNavbarNav; \ No newline at end of file diff --git a/es/navbar/CNavbarText.js b/es/navbar/CNavbarText.js new file mode 100644 index 00000000..6299291d --- /dev/null +++ b/es/navbar/CNavbarText.js @@ -0,0 +1,33 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CNavbarText + +var CNavbarText = function CNavbarText(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames('navbar-text', className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CNavbarText.propTypes = { + tag: tagPropType, + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CNavbarText.defaultProps = { + tag: 'div' +}; +export default CNavbarText; \ No newline at end of file diff --git a/es/pagination/CPagination.js b/es/pagination/CPagination.js new file mode 100644 index 00000000..5584b29a --- /dev/null +++ b/es/pagination/CPagination.js @@ -0,0 +1,196 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useEffect } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import CLink from '../link/CLink'; //component - CoreUI / CPagination + +var CPagination = function CPagination(props) { + var className = props.className, + innerRef = props.innerRef, + addListClass = props.addListClass, + activePage = props.activePage, + size = props.size, + firstButton = props.firstButton, + previousButton = props.previousButton, + nextButton = props.nextButton, + lastButton = props.lastButton, + dots = props.dots, + arrows = props.arrows, + doubleArrows = props.doubleArrows, + limit = props.limit, + pages = props.pages, + align = props.align, + onActivePageChange = props.onActivePageChange, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "addListClass", "activePage", "size", "firstButton", "previousButton", "nextButton", "lastButton", "dots", "arrows", "doubleArrows", "limit", "pages", "align", "onActivePageChange"]); + + useEffect(function () { + pages < activePage && onActivePageChange(pages, true); + }, [pages]); //render + + var listClasses = classNames('pagination', size && 'pagination-' + size, 'justify-content-' + align, addListClass); + var backArrowsClasses = classNames('page-item', activePage === 1 && 'disabled'); + var nextArrowsClasses = classNames('page-item', activePage === pages && 'disabled'); + + var showDots = function () { + return dots && limit > 4 && limit < pages; + }(); + + var maxPrevItems = function () { + return Math.floor((limit - 1) / 2); + }(); + + var maxNextItems = function () { + return Math.ceil((limit - 1) / 2); + }(); + + var beforeDots = function () { + return showDots && activePage > maxPrevItems + 1; + }(); + + var afterDots = function () { + return showDots && activePage < pages - maxNextItems; + }(); + + var computedLimit = function () { + return limit - afterDots - beforeDots; + }(); + + var range = function () { + return activePage + maxNextItems; + }(); + + var lastItem = function () { + return range >= pages ? pages : range - afterDots; + }(); + + var itemsAmount = function () { + return pages < computedLimit ? pages : computedLimit; + }(); + + var items = function () { + if (activePage - maxPrevItems <= 1) { + return Array.from({ + length: itemsAmount + }, function (v, i) { + return i + 1; + }); + } else { + return Array.from({ + length: itemsAmount + }, function (v, i) { + return lastItem - i; + }).reverse(); + } + }(); + + var setPage = function setPage(number) { + if (number !== activePage) { + onActivePageChange(number); + } + }; + + return /*#__PURE__*/React.createElement("nav", _extends({ + className: className, + "aria-label": "pagination" + }, attributes, { + ref: innerRef + }), /*#__PURE__*/React.createElement("ul", { + className: listClasses + }, doubleArrows && /*#__PURE__*/React.createElement("li", { + className: backArrowsClasses + }, /*#__PURE__*/React.createElement(CLink, { + className: "page-link", + onClick: function onClick() { + return setPage(1); + }, + "aria-label": "Go to first page", + "aria-disabled": activePage === 1, + disabled: activePage === 1 + }, firstButton)), arrows && /*#__PURE__*/React.createElement("li", { + className: backArrowsClasses + }, /*#__PURE__*/React.createElement(CLink, { + className: "page-link", + onClick: function onClick() { + return setPage(activePage - 1); + }, + "aria-label": "Go to previous page", + "aria-disabled": activePage === 1, + disabled: activePage === 1 + }, previousButton)), beforeDots && /*#__PURE__*/React.createElement("li", { + role: "separator", + className: "page-item disabled" + }, /*#__PURE__*/React.createElement("span", { + className: "page-link" + }, "\u2026")), items.map(function (i) { + return /*#__PURE__*/React.createElement("li", { + className: (activePage === i ? 'active' : '') + " page-item", + key: i + }, /*#__PURE__*/React.createElement(CLink, { + className: "page-link", + onClick: function onClick(e) { + return setPage(i, e); + }, + "aria-label": activePage === i ? "Current page " + i : "Go to page " + i + }, i)); + }), afterDots && /*#__PURE__*/React.createElement("li", { + role: "separator", + className: "page-item disabled" + }, /*#__PURE__*/React.createElement("span", { + className: "page-link" + }, "\u2026")), arrows && /*#__PURE__*/React.createElement("li", { + className: nextArrowsClasses + }, /*#__PURE__*/React.createElement(CLink, { + className: "page-link", + onClick: function onClick() { + return setPage(activePage + 1); + }, + "aria-label": "Go to next page", + "aria-disabled": activePage === pages, + disabled: activePage === pages + }, nextButton)), doubleArrows && /*#__PURE__*/React.createElement("li", { + className: nextArrowsClasses + }, /*#__PURE__*/React.createElement(CLink, { + className: "page-link", + onClick: function onClick() { + return setPage(pages); + }, + "aria-label": "Go to last page", + "aria-disabled": activePage === pages, + disabled: activePage === pages + }, lastButton)))); +}; + +CPagination.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + activePage: PropTypes.number, + dots: PropTypes.bool, + arrows: PropTypes.bool, + doubleArrows: PropTypes.bool, + firstButton: PropTypes.oneOfType([PropTypes.node, PropTypes.string]), + previousButton: PropTypes.oneOfType([PropTypes.node, PropTypes.string]), + nextButton: PropTypes.oneOfType([PropTypes.node, PropTypes.string]), + lastButton: PropTypes.oneOfType([PropTypes.node, PropTypes.string]), + size: PropTypes.oneOf(['', 'sm', 'lg']), + align: PropTypes.oneOf(['start', 'center', 'end']), + addListClass: PropTypes.string, + limit: PropTypes.number, + pages: PropTypes.number, + onActivePageChange: PropTypes.func.isRequired +}; +CPagination.defaultProps = { + activePage: 1, + dots: true, + arrows: true, + doubleArrows: true, + limit: 5, + firstButton: /*#__PURE__*/React.createElement(React.Fragment, null, "\xAB"), + previousButton: /*#__PURE__*/React.createElement(React.Fragment, null, "\u2039"), + nextButton: /*#__PURE__*/React.createElement(React.Fragment, null, "\u203A"), + lastButton: /*#__PURE__*/React.createElement(React.Fragment, null, "\xBB"), + align: 'start', + pages: 10 +}; +export default CPagination; \ No newline at end of file diff --git a/es/progress/CProgress.js b/es/progress/CProgress.js new file mode 100644 index 00000000..91de298c --- /dev/null +++ b/es/progress/CProgress.js @@ -0,0 +1,67 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import CProgressBar from './CProgressBar'; +export var Context = /*#__PURE__*/React.createContext({}); //component - CoreUI / CProgress + +var CProgress = function CProgress(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + size = props.size, + color = props.color, + striped = props.striped, + animated = props.animated, + precision = props.precision, + showPercentage = props.showPercentage, + showValue = props.showValue, + max = props.max, + value = props.value, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "innerRef", "size", "color", "striped", "animated", "precision", "showPercentage", "showValue", "max", "value"]); + + var inheritedProps = { + color: color, + striped: striped, + animated: animated, + precision: precision, + showPercentage: showPercentage, + showValue: showValue, + max: max, + value: value + }; + var progressClasses = classNames('progress', size && 'progress-' + size, className); // render + + return /*#__PURE__*/React.createElement("div", _extends({ + className: progressClasses + }, attributes, { + ref: innerRef + }), /*#__PURE__*/React.createElement(Context.Provider, { + value: { + inheritedProps: inheritedProps + } + }, children || /*#__PURE__*/React.createElement(CProgressBar, null))); +}; + +CProgress.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + size: PropTypes.string, + value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + max: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + animated: PropTypes.bool, + striped: PropTypes.bool, + color: PropTypes.string, + precision: PropTypes.number, + showPercentage: PropTypes.bool, + showValue: PropTypes.bool +}; +CProgress.defaultProps = { + value: 0, + max: 100, + precision: 0 +}; +export default CProgress; \ No newline at end of file diff --git a/es/progress/CProgressBar.js b/es/progress/CProgressBar.js new file mode 100644 index 00000000..cce5f51e --- /dev/null +++ b/es/progress/CProgressBar.js @@ -0,0 +1,65 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React, { useContext } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { Context } from './CProgress'; //component - CoreUI / CProgressBar + +var CProgressBar = function CProgressBar(directProps) { + var _useContext = useContext(Context), + inheritedProps = _useContext.inheritedProps; + + var props = _objectSpread(_objectSpread({}, inheritedProps), directProps); + + var children = props.children, + className = props.className, + innerRef = props.innerRef, + color = props.color, + striped = props.striped, + animated = props.animated, + precision = props.precision, + showPercentage = props.showPercentage, + showValue = props.showValue, + max = props.max, + value = props.value, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "innerRef", "color", "striped", "animated", "precision", "showPercentage", "showValue", "max", "value"]); // render + + + var progressBarClasses = classNames('progress-bar', animated && 'progress-bar-animated', (striped || animated) && 'progress-bar-striped', color && "bg-" + color, className); + var valLabel = Number(value).toFixed(precision); + var percentLabel = Number(value / max * 100).toFixed(precision) + '%'; + return /*#__PURE__*/React.createElement("div", _extends({ + className: progressBarClasses, + style: { + width: value / max * 100 + "%" + }, + role: "progressbar", + "aria-valuenow": value, + "aria-valuemin": "0", + "aria-valuemax": max + }, attributes, { + ref: innerRef + }), showPercentage ? percentLabel : showValue ? valLabel : children); +}; + +CProgressBar.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + value: PropTypes.number, + max: PropTypes.number, + animated: PropTypes.bool, + striped: PropTypes.bool, + color: PropTypes.string, + precision: PropTypes.number, + showPercentage: PropTypes.bool, + showValue: PropTypes.bool +}; +export default CProgressBar; \ No newline at end of file diff --git a/es/spinner/CSpinner.js b/es/spinner/CSpinner.js new file mode 100644 index 00000000..c6889ccf --- /dev/null +++ b/es/spinner/CSpinner.js @@ -0,0 +1,42 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CSpinner + +var CSpinner = function CSpinner(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + grow = props.grow, + size = props.size, + color = props.color, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "grow", "size", "color"]); //render + + + var type = grow ? 'grow' : 'border'; + var classes = classNames("spinner-" + type, size && "spinner-" + type + "-" + size, color && "text-" + color, className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes, + "aria-hidden": "false", + "aria-label": "Loading", + role: "status" + }, attributes, { + ref: innerRef + })); +}; + +CSpinner.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + grow: PropTypes.bool, + size: PropTypes.string, + color: PropTypes.string +}; +CSpinner.defaultProps = { + tag: 'div' +}; +export default CSpinner; \ No newline at end of file diff --git a/es/styleMock.js b/es/styleMock.js new file mode 100644 index 00000000..a0995453 --- /dev/null +++ b/es/styleMock.js @@ -0,0 +1 @@ +module.exports = {}; \ No newline at end of file diff --git a/es/switch/CSwitch.js b/es/switch/CSwitch.js new file mode 100644 index 00000000..4e87922d --- /dev/null +++ b/es/switch/CSwitch.js @@ -0,0 +1,46 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CSwitch + +var CSwitch = function CSwitch(props) { + var className = props.className, + innerRef = props.innerRef, + size = props.size, + color = props.color, + labelOn = props.labelOn, + labelOff = props.labelOff, + variant = props.variant, + shape = props.shape, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "size", "color", "labelOn", "labelOff", "variant", "shape"]); //render + + + var classes = classNames('c-switch form-check-label', (labelOn || labelOff) && 'c-switch-label', size && "c-switch-" + size, shape && "c-switch-" + shape, color && "c-switch" + (variant ? "-" + variant : '') + "-" + color, className); + var inputClasses = classNames('c-switch-input', 'c-form-check-input'); + return /*#__PURE__*/React.createElement("label", { + className: classes + }, /*#__PURE__*/React.createElement("input", _extends({ + className: inputClasses, + type: "checkbox" + }, attributes, { + ref: innerRef + })), /*#__PURE__*/React.createElement("span", { + className: "c-switch-slider", + "data-checked": labelOn, + "data-unchecked": labelOff + })); +}; + +CSwitch.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + size: PropTypes.oneOf(['', 'lg', 'sm']), + shape: PropTypes.oneOf(['', 'pill', 'square']), + variant: PropTypes.oneOf(['', '3d', 'opposite', 'outline']), + color: PropTypes.string, + labelOn: PropTypes.string, + labelOff: PropTypes.string +}; +export default CSwitch; \ No newline at end of file diff --git a/es/table/CDataTable.css b/es/table/CDataTable.css new file mode 100644 index 00000000..9cc1914f --- /dev/null +++ b/es/table/CDataTable.css @@ -0,0 +1,18 @@ +.c-datatable-filter { + display: flex; + flex-flow: row nowrap; + justify-content: flex-start; + align-items: center; +} +.c-datatable-filter label { + margin-bottom: 0; +} +.c-datatable-items-per-page { + display: flex; + flex-flow: row nowrap; + justify-content: flex-end; + align-items: center; +} +.c-datatable-items-per-page label { + margin-bottom: 0; +} diff --git a/es/table/CDataTable.js b/es/table/CDataTable.js new file mode 100644 index 00000000..e75f524c --- /dev/null +++ b/es/table/CDataTable.js @@ -0,0 +1,595 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React, { useState, useRef, useMemo, useEffect } from "react"; +import PropTypes from "prop-types"; +import classNames from "classnames"; +import CPagination from "../pagination/CPagination"; +import CElementCover from "../element-cover/CElementCover"; +import CIcon from "@coreui/icons-react"; +import { cilArrowTop, cilBan, cilFilterX } from "@coreui/icons"; +/*import style from './CDataTable.module.css'*/ + +/*import './CDataTable.css'*/ +//component - CoreUI / CTable + +var CDataTable = function CDataTable(props) { + var _ref2; + + var innerRef = props.innerRef, + overTableSlot = props.overTableSlot, + columnHeaderSlot = props.columnHeaderSlot, + sortingIconSlot = props.sortingIconSlot, + columnFilterSlot = props.columnFilterSlot, + noItemsViewSlot = props.noItemsViewSlot, + noItemsView = props.noItemsView, + captionSlot = props.captionSlot, + footerSlot = props.footerSlot, + underTableSlot = props.underTableSlot, + theadTopSlot = props.theadTopSlot, + loadingSlot = props.loadingSlot, + scopedSlots = props.scopedSlots, + loading = props.loading, + fields = props.fields, + pagination = props.pagination, + activePage = props.activePage, + itemsPerPage = props.itemsPerPage, + items = props.items, + sorter = props.sorter, + header = props.header, + clickableRows = props.clickableRows, + columnFilter = props.columnFilter, + tableFilterValue = props.tableFilterValue, + tableFilter = props.tableFilter, + cleaner = props.cleaner, + addTableClasses = props.addTableClasses, + size = props.size, + dark = props.dark, + striped = props.striped, + hover = props.hover, + border = props.border, + outlined = props.outlined, + responsive = props.responsive, + footer = props.footer, + itemsPerPageSelect = props.itemsPerPageSelect, + sorterValue = props.sorterValue, + columnFilterValue = props.columnFilterValue, + onRowClick = props.onRowClick, + onSorterValueChange = props.onSorterValueChange, + onPaginationChange = props.onPaginationChange, + onColumnFilterChange = props.onColumnFilterChange, + onPagesChange = props.onPagesChange, + onTableFilterChange = props.onTableFilterChange, + onPageChange = props.onPageChange, + onFilteredItemsChange = props.onFilteredItemsChange; + var compData = useRef({ + firstRun: true, + columnFiltered: 0, + changeItems: 0 + }).current; // + + var _useState = useState(itemsPerPage), + perPageItems = _useState[0], + setPerPageItems = _useState[1]; + + var _useState2 = useState(sorterValue || {}), + sorterState = _useState2[0], + setSorterState = _useState2[1]; + + var _useState3 = useState(tableFilterValue), + tableFilterState = _useState3[0], + setTableFilterState = _useState3[1]; + + var _useState4 = useState(columnFilterValue || {}), + columnFilterState = _useState4[0], + setColumnFilterState = _useState4[1]; + + var _useState5 = useState(activePage || 1), + page = _useState5[0], + setPage = _useState5[1]; + + var _useState6 = useState(items || []), + passedItems = _useState6[0], + setPassedItems = _useState6[1]; // functions + + + var cellClass = function cellClass(item, colName, index) { + var classes = []; + + if (item._cellClasses && item._cellClasses[colName]) { + classes.push(item._cellClasses[colName]); + } + + if (fields && fields[index]._classes) { + classes.push(fields[index]._classes); + } + + return classes; + }; + + var pretifyName = function pretifyName(name) { + return name.replace(/[-_.]/g, " ").replace(/ +/g, " ").replace(/([a-z0-9])([A-Z])/g, "$1 $2").split(" ").map(function (word) { + return word.charAt(0).toUpperCase() + word.slice(1); + }).join(" "); + }; + + var headerClass = function headerClass(i) { + return fields && fields[i]._classes && fields[i]._classes; + }; + + var isSortable = function isSortable(i) { + var isDataColumn = itemsDataColumns.includes(rawColumnNames[i]); + return sorter && (!fields || fields[i].sorter !== false) && isDataColumn; + }; + + var headerStyles = function headerStyles(index) { + var style = { + verticalAlign: "middle", + overflow: "hidden" + }; + + if (isSortable(index)) { + style.cursor = "pointer"; + } + + if (fields && fields[index] && fields[index]._style) { + return _objectSpread(_objectSpread({}, style), fields[index]._style); + } + + return style; + }; + + var getIconState = function getIconState(index) { + var direction = sorterState.asc ? "asc" : "desc"; + return rawColumnNames[index] === sorterState.column ? direction : 0; + }; + + var iconClasses = function iconClasses(index) { + var state = getIconState(index); + return ["position-absolute", style["icon-transition"], style["arrow-position"], !state && style["transparent"], state === "desc" && style["rotate-icon"]]; + }; + + var rowClicked = function rowClicked(item, index, e, detailsClick) { + if (detailsClick === void 0) { + detailsClick = false; + } + + onRowClick && onRowClick(item, index, getClickedColumnName(e, detailsClick), e); + }; + + var changeSort = function changeSort(column, index) { + if (!isSortable(index)) { + return; + } //if column changed or sort was descending change asc to true + + + var state = sorterState; + var columnRepeated = state.column === column; + + if (!sorter || !sorter.resetable) { + state.column = column; + } else { + state.column = columnRepeated && state.asc === false ? null : column; + } + + state.asc = !(columnRepeated && state.asc); + setSorterState(_objectSpread({}, state)); + }; + + useEffect(function () { + onSorterValueChange && onSorterValueChange(sorterState); + }, [JSON.stringify(sorterState)]); + + var paginationChange = function paginationChange(e) { + onPaginationChange && onPaginationChange(Number(e.target.value)); + !itemsPerPageSelect.external && setPerPageItems(Number(e.target.value)); + }; + + var columnFilterEvent = function columnFilterEvent(colName, value, type) { + var _objectSpread2; + + var isLazy = columnFilter && columnFilter.lazy === true; + + if (isLazy && type === "input" || !isLazy && type === "change") { + return; + } + + var newState = _objectSpread(_objectSpread({}, columnFilterState), {}, (_objectSpread2 = {}, _objectSpread2["" + colName] = value, _objectSpread2)); + + setColumnFilterState(newState); + }; + + useEffect(function () { + onColumnFilterChange && onColumnFilterChange(columnFilterState); + }, [JSON.stringify(columnFilterState)]); + + var tableFilterChange = function tableFilterChange(value, type) { + var isLazy = tableFilter && tableFilter.lazy === true; + + if (isLazy && type === "input" || !isLazy && type === "change") { + return; + } + + setTableFilterState(value); + }; + + useEffect(function () { + onTableFilterChange && onTableFilterChange(tableFilterState); + }, [tableFilterState]); + + var getClickedColumnName = function getClickedColumnName(e, detailsClick) { + if (detailsClick) { + return "details"; + } else { + var children = Array.from(e.target.closest("tr").children); + var clickedCell = children.filter(function (child) { + return child.contains(e.target); + })[0]; + return rawColumnNames[children.indexOf(clickedCell)]; + } + }; + + var clean = function clean() { + setTableFilterState(""); + setColumnFilterState({}); + setSorterState({ + column: "", + asc: true + }); + }; // computed + + + var genCols = Object.keys(passedItems[0] || {}).filter(function (el) { + return el.charAt(0) !== "_"; + }); + var rawColumnNames = fields ? fields.map(function (el) { + return el.key || el; + }) : genCols; + var itemsDataColumns = rawColumnNames.filter(function (name) { + return genCols.includes(name); + }); + useMemo(function () { + compData.columnFiltered++; + }, [JSON.stringify(columnFilter), JSON.stringify(columnFilterState), itemsDataColumns.join(""), compData.changeItems]); + var columnFiltered = useMemo(function () { + var items = passedItems; + + if (columnFilter && columnFilter.external) { + return items; + } + + Object.entries(columnFilterState).forEach(function (_ref) { + var key = _ref[0], + value = _ref[1]; + var columnFilter = String(value).toLowerCase(); + + if (columnFilter && itemsDataColumns.includes(key)) { + items = items.filter(function (item) { + return String(item[key]).toLowerCase().includes(columnFilter); + }); + } + }); + return items; + }, [compData.columnFiltered]); + var tableFiltered = useMemo(function () { + var items = columnFiltered; + + if (!tableFilterState || tableFilter && tableFilter.external) { + return items; + } + + var filter = tableFilterState.toLowerCase(); + + var valueContainFilter = function valueContainFilter(val) { + return String(val).toLowerCase().includes(filter); + }; + + items = items.filter(function (item) { + return !!itemsDataColumns.find(function (key) { + return valueContainFilter(item[key]); + }); + }); + return items; + }, [compData.columnFiltered, tableFilterState, JSON.stringify(tableFilter)]); + var sortedItems = useMemo(function () { + var col = sorterState.column; + + if (!col || !itemsDataColumns.includes(col) || sorter && sorter.external) { + return tableFiltered; + } //if values in column are to be sorted by numeric value they all have to be type number + + + var flip = sorterState.asc ? 1 : -1; + var sorted = tableFiltered.slice().sort(function (item, item2) { + var value = item[col]; + var value2 = item2[col]; + var a = typeof value === "number" ? value : String(value).toLowerCase(); + var b = typeof value2 === "number" ? value2 : String(value2).toLowerCase(); + return a > b ? 1 * flip : b > a ? -1 * flip : 0; + }); + return sorted; + }, [JSON.stringify(tableFiltered), JSON.stringify(sorterState), JSON.stringify(sorter)]); + useEffect(function () { + !compData.firstRun && onFilteredItemsChange && onFilteredItemsChange(sortedItems); + }, [JSON.stringify(sortedItems)]); + var tableClasses = ["table", (_ref2 = {}, _ref2["table-" + size] = size, _ref2["table-dark"] = dark, _ref2["table-striped"] = striped, _ref2["table-hover"] = hover, _ref2["table-bordered"] = border, _ref2.border = outlined, _ref2), addTableClasses]; + var columnNames = useMemo(function () { + if (fields) { + return fields.map(function (f) { + return f.label !== undefined ? f.label : pretifyName(f.key || f); + }); + } + + return rawColumnNames.map(function (el) { + return pretifyName(el); + }); + }, [fields, rawColumnNames]); + var sortingIconStyles = sorter && "position-relative pr-4"; + var colspan = rawColumnNames.length; + var totalPages = Math.ceil(sortedItems.length / perPageItems) || 1; + useMemo(function () { + !compData.firstRun && onPagesChange && onPagesChange(totalPages); + }, [totalPages]); + var computedPage = useMemo(function () { + var compPage = pagination ? page : activePage; + !compData.firstRun && onPageChange && onPageChange(compPage); + return compPage; + }, [page, activePage, pagination]); + var firstItemIndex = (computedPage - 1) * perPageItems || 0; + var paginatedItems = sortedItems.slice(firstItemIndex, firstItemIndex + perPageItems); + var currentItems = computedPage ? paginatedItems : sortedItems; + var tableFilterData = { + label: tableFilter && tableFilter.label || "Filter:", + placeholder: tableFilter && tableFilter.placeholder || "type string..." + }; + var paginationSelect = { + label: itemsPerPageSelect && itemsPerPageSelect.label || "Items per page:", + values: itemsPerPageSelect && itemsPerPageSelect.values || [5, 10, 20, 50] + }; + + var noItemsText = function () { + var customValues = noItemsView || {}; + + if (passedItems.length) { + return customValues.noResults || "No filtering results"; + } + + return customValues.noItems || "No items"; + }(); + + var isFiltered = tableFilterState || sorterState.column || Object.values(columnFilterState).join(""); + var cleanerProps = { + content: cilFilterX, + className: "mfs-2 " + (isFiltered ? "text-danger" : "transparent"), + role: isFiltered ? "button" : null, + tabIndex: isFiltered ? 0 : null + }; // watch + + useMemo(function () { + return setPerPageItems(itemsPerPage); + }, [itemsPerPage]); + useMemo(function () { + return setSorterState(_objectSpread({}, sorterValue)); + }, [sorterValue]); + useMemo(function () { + return setTableFilterState(tableFilterValue); + }, [tableFilterValue]); + useMemo(function () { + return setColumnFilterState(_objectSpread({}, columnFilterValue)); + }, [columnFilterValue]); //items + + useMemo(function () { + if (items && !compData.firstRun && (items.length !== passedItems.length || JSON.stringify(items) !== JSON.stringify(passedItems))) { + setPassedItems(items); + compData.changeItems++; + } + }); // render + + compData.firstRun = false; + var paginationProps = typeof pagination === "object" ? pagination : null; + var headerContent = /*#__PURE__*/React.createElement("tr", null, columnNames.map(function (name, index) { + return /*#__PURE__*/React.createElement("th", { + onClick: function onClick() { + changeSort(rawColumnNames[index], index); + }, + className: classNames([headerClass(index), sortingIconStyles]), + style: headerStyles(index), + key: index + }, columnHeaderSlot["" + rawColumnNames[index]] || /*#__PURE__*/React.createElement("div", { + className: "d-inline" + }, name), isSortable(index) && (sortingIconSlot && sortingIconSlot(getIconState(index), iconClasses(index)) || /*#__PURE__*/React.createElement(CIcon, { + customClasses: classNames(iconClasses(index)), + width: 18, + content: cilArrowTop + }))); + })); + return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { + ref: innerRef + }, (itemsPerPageSelect || tableFilter || cleaner) && /*#__PURE__*/React.createElement("div", { + className: "row my-2 mx-0" + }, (tableFilter || cleaner) && /*#__PURE__*/React.createElement("div", { + className: "col-sm-6 form-inline p-0 c-datatable-filter" + }, tableFilter && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("label", { + className: "mfe-2" + }, tableFilterData.label), /*#__PURE__*/React.createElement("input", { + className: "form-control", + type: "text", + placeholder: tableFilterData.placeholder, + onInput: function onInput(e) { + tableFilterChange(e.target.value, "input"); + }, + onChange: function onChange(e) { + tableFilterChange(e.target.value, "change"); + }, + value: tableFilterState || "", + "aria-label": "table filter input" + })), cleaner && (typeof cleaner === "function" ? cleaner(clean, isFiltered, cleanerProps) : /*#__PURE__*/React.createElement(CIcon, _extends({}, cleanerProps, { + onClick: clean, + onKeyUp: function onKeyUp(event) { + if (event.key === "Enter") clean(); + } + })))), itemsPerPageSelect && /*#__PURE__*/React.createElement("div", { + className: "col-sm-6 p-0 " + (tableFilter || cleaner ? "" : "offset-sm-6") + }, /*#__PURE__*/React.createElement("div", { + className: "form-inline justify-content-sm-end c-datatable-items-per-page" + }, /*#__PURE__*/React.createElement("label", { + className: "mfe-2" + }, paginationSelect.label), /*#__PURE__*/React.createElement("select", { + className: "form-control", + onChange: paginationChange, + "aria-label": "changes number of visible items", + value: perPageItems + }, paginationSelect.values.map(function (number, key) { + return /*#__PURE__*/React.createElement("option", { + val: number, + key: key + }, number); + })))))), overTableSlot, /*#__PURE__*/React.createElement("div", { + className: "position-relative " + (responsive && "table-responsive") + }, /*#__PURE__*/React.createElement("table", { + className: classNames(tableClasses) + }, /*#__PURE__*/React.createElement("thead", null, theadTopSlot, header && headerContent, columnFilter && /*#__PURE__*/React.createElement("tr", { + className: "table-sm" + }, rawColumnNames.map(function (colName, index) { + return /*#__PURE__*/React.createElement("th", { + className: classNames(headerClass(index)), + key: index + }, columnFilterSlot["" + rawColumnNames[index]] || (!fields || fields[index].filter !== false) && /*#__PURE__*/React.createElement("input", { + className: "form-control form-control-sm", + onInput: function onInput(e) { + columnFilterEvent(colName, e.target.value, "input"); + }, + onChange: function onChange(e) { + columnFilterEvent(colName, e.target.value, "change"); + }, + value: columnFilterState[colName] || "", + "aria-label": "column name: '" + colName + "' filter input" + })); + }))), /*#__PURE__*/React.createElement("tbody", { + style: clickableRows && { + cursor: "pointer" + } + }, currentItems.map(function (item, itemIndex) { + return /*#__PURE__*/React.createElement(React.Fragment, { + key: itemIndex + }, /*#__PURE__*/React.createElement("tr", { + className: classNames(item._classes), + tabIndex: clickableRows && 0, + onClick: function onClick(e) { + rowClicked(item, itemIndex + firstItemIndex, e); + } + }, rawColumnNames.map(function (colName, index) { + return scopedSlots[colName] && /*#__PURE__*/React.cloneElement(scopedSlots[colName](item, itemIndex + firstItemIndex), { + key: index + }) || /*#__PURE__*/React.createElement("td", { + className: classNames(cellClass(item, colName, index)), + key: index + }, String(item[colName])); + })), scopedSlots.details && /*#__PURE__*/React.createElement("tr", { + onClick: function onClick(e) { + rowClicked(item, itemIndex + firstItemIndex, e, true); + }, + className: "p-0", + style: { + border: "none !important" + }, + key: "details" + itemIndex + }, /*#__PURE__*/React.createElement("td", { + colSpan: colspan, + className: "p-0", + style: { + border: "none !important" + } + }, scopedSlots.details(item, itemIndex + firstItemIndex)))); + }), !currentItems.length && /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("td", { + colSpan: colspan + }, noItemsViewSlot || /*#__PURE__*/React.createElement("div", { + className: "text-center my-5" + }, /*#__PURE__*/React.createElement("h2", null, noItemsText + " ", /*#__PURE__*/React.createElement(CIcon, { + width: "30", + name: "cilBan", + content: cilBan, + className: "text-danger mb-2" + })))))), footer && currentItems.length > 0 && /*#__PURE__*/React.createElement("tfoot", null, headerContent), footerSlot, captionSlot), loading && (loadingSlot || /*#__PURE__*/React.createElement(CElementCover, { + boundaries: [{ + sides: ["top"], + query: "td" + }, { + sides: ["bottom"], + query: "tbody" + }] + }))), underTableSlot, pagination && /*#__PURE__*/React.createElement(CPagination, _extends({ + style: { + display: totalPages > 1 ? "inline" : "none" + }, + onActivePageChange: function onActivePageChange(page) { + setPage(page); + }, + pages: totalPages, + activePage: page + }, paginationProps))); +}; + +CDataTable.propTypes = { + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + overTableSlot: PropTypes.node, + columnHeaderSlot: PropTypes.object, + sortingIconSlot: PropTypes.func, + columnFilterSlot: PropTypes.object, + noItemsViewSlot: PropTypes.node, + noItemsView: PropTypes.object, + captionSlot: PropTypes.node, + footerSlot: PropTypes.node, + underTableSlot: PropTypes.node, + scopedSlots: PropTypes.object, + theadTopSlot: PropTypes.node, + loadingSlot: PropTypes.node, + loading: PropTypes.bool, + fields: PropTypes.array, + pagination: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]), + activePage: PropTypes.number, + itemsPerPage: PropTypes.number, + items: PropTypes.array, + sorter: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]), + clickableRows: PropTypes.bool, + columnFilter: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]), + tableFilterValue: PropTypes.string, + tableFilter: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]), + cleaner: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]), + addTableClasses: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + size: PropTypes.string, + dark: PropTypes.bool, + striped: PropTypes.bool, + hover: PropTypes.bool, + border: PropTypes.bool, + outlined: PropTypes.bool, + responsive: PropTypes.bool, + footer: PropTypes.bool, + itemsPerPageSelect: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]), + sorterValue: PropTypes.object, + columnFilterValue: PropTypes.object, + header: PropTypes.bool, + onRowClick: PropTypes.func, + onSorterValueChange: PropTypes.func, + onPaginationChange: PropTypes.func, + onColumnFilterChange: PropTypes.func, + onPagesChange: PropTypes.func, + onTableFilterChange: PropTypes.func, + onPageChange: PropTypes.func, + onFilteredItemsChange: PropTypes.func +}; +CDataTable.defaultProps = { + itemsPerPage: 10, + responsive: true, + columnHeaderSlot: {}, + columnFilterSlot: {}, + scopedSlots: {}, + sorterValue: {}, + header: true +}; +export default CDataTable; \ No newline at end of file diff --git a/es/table/CDataTable.module.css b/es/table/CDataTable.module.css new file mode 100644 index 00000000..d7768cc9 --- /dev/null +++ b/es/table/CDataTable.module.css @@ -0,0 +1,17 @@ +.transparent { + opacity: 0.4; +} +.icon-transition { + -webkit-transition: transform 0.3s; + transition: transform 0.3s; +} +.arrow-position { + right: 0; + top: 50%; + -ms-transform: translateY(-50%); + transform: translateY(-50%); +} +.rotate-icon { + -ms-transform: translateY(-50%) rotate(-180deg); + transform: translateY(-50%) rotate(-180deg); +} diff --git a/es/tabs/CTabContent.js b/es/tabs/CTabContent.js new file mode 100644 index 00000000..865589b7 --- /dev/null +++ b/es/tabs/CTabContent.js @@ -0,0 +1,35 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CTabContent + +export var Context = /*#__PURE__*/React.createContext(); + +var CTabContent = function CTabContent(props) { + var className = props.className, + innerRef = props.innerRef, + fade = props.fade, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "fade"]); // render + + + var classes = classNames('tab-content', className); + return /*#__PURE__*/React.createElement(Context.Provider, { + value: fade + }, /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + }))); +}; + +CTabContent.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + fade: PropTypes.bool +}; +CTabContent.defaultProps = { + fade: true +}; +export default CTabContent; \ No newline at end of file diff --git a/es/tabs/CTabPane.js b/es/tabs/CTabPane.js new file mode 100644 index 00000000..54a2bc7f --- /dev/null +++ b/es/tabs/CTabPane.js @@ -0,0 +1,65 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useState, useContext, useRef, useEffect } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import CFade from '../fade/CFade'; +import { omitByKeys } from '@coreui/utils/src'; +import { CFadeProps } from '../utils/helper.js'; +import { Context } from './CTabs.js'; +import { Context as FadeContext } from './CTabContent.js'; //component - CoreUI / CTabPane + +var getIndex = function getIndex(el) { + return Array.from(el.parentNode.children).indexOf(el); +}; + +var getState = function getState(r) { + return r.current.dataset.tab || getIndex(r.current); +}; + +var CTabPane = function CTabPane(props) { + var className = props.className, + innerRef = props.innerRef, + active = props.active, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "active"]); + + var _ref = useContext(Context) || {}, + activeTab = _ref.active, + setActiveTab = _ref.setActiveTab; + + var fade = useContext(FadeContext); + var ref = typeof innerRef === 'object' ? innerRef : useRef(); + typeof innerRef === 'function' && innerRef(ref); + + var _useState = useState(), + isActive = _useState[0], + setIsActive = _useState[1]; + + useEffect(function () { + setIsActive(activeTab === getState(ref)); + }, [activeTab]); + useEffect(function () { + if (active !== undefined) { + setActiveTab ? setActiveTab(active && getState(ref)) : setIsActive(active); + } + }, [active]); //render + + var classes = classNames('tab-pane', { + 'active': isActive + }, className); + var attrs = omitByKeys(attributes, CFadeProps); + return /*#__PURE__*/React.createElement(CFade, _extends({ + in: isActive, + baseClass: fade ? 'fade' : '', + className: classes + }, attrs, { + innerRef: ref + })); +}; + +CTabPane.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + active: PropTypes.bool +}; +export default CTabPane; \ No newline at end of file diff --git a/es/tabs/CTabs.js b/es/tabs/CTabs.js new file mode 100644 index 00000000..cfe1cdae --- /dev/null +++ b/es/tabs/CTabs.js @@ -0,0 +1,37 @@ +import React, { useState, useEffect } from 'react'; +import PropTypes from 'prop-types'; //component - CoreUI / CTabPane + +export var Context = /*#__PURE__*/React.createContext(); + +var CTabs = function CTabs(props) { + var children = props.children, + activeTab = props.activeTab, + onActiveTabChange = props.onActiveTabChange; + + var _useState = useState(0), + active = _useState[0], + setActive = _useState[1]; + + useEffect(function () { + activeTab !== undefined && setActive(activeTab); + }, [activeTab]); + + var setActiveTab = function setActiveTab(tab) { + onActiveTabChange && onActiveTabChange(tab); + setActive(tab); + }; + + return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Context.Provider, { + value: { + active: active, + setActiveTab: setActiveTab + } + }, children)); +}; + +CTabs.propTypes = { + children: PropTypes.node, + activeTab: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), + onActiveTabChange: PropTypes.func +}; +export default CTabs; \ No newline at end of file diff --git a/es/template/CFooter.js b/es/template/CFooter.js new file mode 100644 index 00000000..a45f6e83 --- /dev/null +++ b/es/template/CFooter.js @@ -0,0 +1,35 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CFooter + +var CFooter = function CFooter(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + fixed = props.fixed, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "fixed"]); //render + + + var classes = classNames('c-footer', fixed ? 'c-footer-fixed' : null, className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CFooter.propTypes = { + tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]), + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + fixed: PropTypes.bool +}; +CFooter.defaultProps = { + tag: 'footer', + fixed: false +}; +export default CFooter; \ No newline at end of file diff --git a/es/template/CHeader.js b/es/template/CHeader.js new file mode 100644 index 00000000..ab7c5bdd --- /dev/null +++ b/es/template/CHeader.js @@ -0,0 +1,40 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CHeader + +var CHeader = function CHeader(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + fixed = props.fixed, + colorScheme = props.colorScheme, + withSubheader = props.withSubheader, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "fixed", "colorScheme", "withSubheader"]); // render + + + var classes = classNames(className, 'c-header', colorScheme ? 'c-header-' + colorScheme : null, fixed ? 'c-header-fixed' : null, withSubheader ? 'c-header-with-subheader' : null); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CHeader.propTypes = { + tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]), + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + children: PropTypes.node, + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + fixed: PropTypes.bool, + withSubheader: PropTypes.bool, + colorScheme: PropTypes.string +}; +CHeader.defaultProps = { + tag: 'header', + fixed: true, + colorScheme: 'light' +}; +export default CHeader; \ No newline at end of file diff --git a/es/template/CHeaderBrand.js b/es/template/CHeaderBrand.js new file mode 100644 index 00000000..b5974235 --- /dev/null +++ b/es/template/CHeaderBrand.js @@ -0,0 +1,13 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; + +/* eslint react/prop-types: 0 */ +import React from 'react'; +import CBrand from '../utils/CBrand'; //component - CoreUI / CHeaderBrand + +var CHeaderBrand = function CHeaderBrand(props) { + return /*#__PURE__*/React.createElement(CBrand, _extends({}, props, { + className: ['c-header-brand', props.className] + })); +}; + +export default CHeaderBrand; \ No newline at end of file diff --git a/es/template/CHeaderNav.js b/es/template/CHeaderNav.js new file mode 100644 index 00000000..49a0a5d6 --- /dev/null +++ b/es/template/CHeaderNav.js @@ -0,0 +1,26 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CHeaderNav + +var CHeaderNav = function CHeaderNav(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); //render + + + var classes = classNames(className, 'c-header-nav'); + return /*#__PURE__*/React.createElement("ul", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CHeaderNav.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CHeaderNav; \ No newline at end of file diff --git a/es/template/CHeaderNavItem.js b/es/template/CHeaderNavItem.js new file mode 100644 index 00000000..b28fafe0 --- /dev/null +++ b/es/template/CHeaderNavItem.js @@ -0,0 +1,26 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CHeaderNavItem + +var CHeaderNavItem = function CHeaderNavItem(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); //render + + + var classes = classNames(className, 'c-header-nav-item'); + return /*#__PURE__*/React.createElement("li", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CHeaderNavItem.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CHeaderNavItem; \ No newline at end of file diff --git a/es/template/CHeaderNavLink.js b/es/template/CHeaderNavLink.js new file mode 100644 index 00000000..65115014 --- /dev/null +++ b/es/template/CHeaderNavLink.js @@ -0,0 +1,27 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import CLink from '../link/CLink'; //component - CoreUI / CHeaderNavLink + +var CHeaderNavLink = function CHeaderNavLink(props) { + var className = props.className, + innerRef = props.innerRef, + rest = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); //render + + + var classes = classNames(className, 'c-header-nav-link'); + return /*#__PURE__*/React.createElement(CLink, _extends({ + className: classes + }, rest, { + innerRef: innerRef + })); +}; + +CHeaderNavLink.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CHeaderNavLink; \ No newline at end of file diff --git a/es/template/CScrollbar.js b/es/template/CScrollbar.js new file mode 100644 index 00000000..2fbb63f0 --- /dev/null +++ b/es/template/CScrollbar.js @@ -0,0 +1,72 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useState, createRef, useEffect } from "react"; +import PropTypes from "prop-types"; +import classNames from "classnames"; +import PerfectScrollbar from "perfect-scrollbar"; +/*import 'perfect-scrollbar/css/perfect-scrollbar.css'*/ + +/*import './scrollbar.css'*/ +//component - CoreUI / CScrollbar + +var CScrollbar = function CScrollbar(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + settings = props.settings, + switcher = props.switcher, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef", "settings", "switcher"]); + + var _useState = useState(), + instance = _useState[0], + setInstance = _useState[1]; + + var ref = /*#__PURE__*/createRef(); + innerRef && innerRef(ref); + useEffect(function () { + switcher ? init() : uninit(); + }, [switcher]); + useEffect(function () { + return uninit(); + }, []); + + var init = function init() { + if (!instance) { + createPerfectScrollbar(); + } + }; + + var createPerfectScrollbar = function createPerfectScrollbar() { + setInstance(new PerfectScrollbar(ref.current, settings)); + }; + + var uninit = function uninit() { + if (instance) { + instance.destroy(); + setInstance(null); + } + }; // render + + + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classNames(className), + style: { + position: "relative" + } + }, attributes, { + ref: ref + })); +}; + +CScrollbar.propTypes = { + tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]), + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + settings: PropTypes.object, + switcher: PropTypes.bool, + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CScrollbar.defaultProps = { + tag: "div" +}; +export default CScrollbar; \ No newline at end of file diff --git a/es/template/CSidebar.js b/es/template/CSidebar.js new file mode 100644 index 00000000..b3089846 --- /dev/null +++ b/es/template/CSidebar.js @@ -0,0 +1,43 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import React from "react"; +import PropTypes from "prop-types"; +import dynamic from "next/dynamic"; +export var Context = /*#__PURE__*/React.createContext({}); +var DynamicSidebar = dynamic(function () { + return import("./_DynamicSidebar.js"); +}, { + ssr: false +}); //component - CoreUI / CSidebar + +var CSidebar = function CSidebar(props) { + return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DynamicSidebar, _extends({}, props, { + Context: Context + }))); +}; + +CSidebar.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + fixed: PropTypes.bool, + unfoldable: PropTypes.bool, + overlaid: PropTypes.bool, + breakpoint: PropTypes.oneOf([false, "", "sm", "md", "lg", "xl", "xxl"]), + minimize: PropTypes.bool, + show: PropTypes.oneOf(["", true, false, "responsive"]), + size: PropTypes.oneOf(["", "sm", "lg", "xl"]), + hideOnMobileClick: PropTypes.bool, + aside: PropTypes.bool, + colorScheme: PropTypes.string, + dropdownMode: PropTypes.oneOf(["", "openActive", "close", "closeInactive", "noAction"]), + onShowChange: PropTypes.func, + onMinimizeChange: PropTypes.func +}; +CSidebar.defaultProps = { + fixed: true, + breakpoint: "lg", + show: "responsive", + hideOnMobileClick: true, + colorScheme: "dark" +}; +export default CSidebar; \ No newline at end of file diff --git a/es/template/CSidebarBrand.js b/es/template/CSidebarBrand.js new file mode 100644 index 00000000..eb9514fc --- /dev/null +++ b/es/template/CSidebarBrand.js @@ -0,0 +1,13 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; + +/* eslint react/prop-types: 0 */ +import React from 'react'; +import CBrand from '../utils/CBrand'; //component - CoreUI / CSidebarBrand + +var CSidebarBrand = function CSidebarBrand(props) { + return /*#__PURE__*/React.createElement(CBrand, _extends({}, props, { + className: ['c-sidebar-brand', props.className] + })); +}; + +export default CSidebarBrand; \ No newline at end of file diff --git a/es/template/CSidebarClose.js b/es/template/CSidebarClose.js new file mode 100644 index 00000000..b74d6535 --- /dev/null +++ b/es/template/CSidebarClose.js @@ -0,0 +1,18 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import React from 'react'; +import CButtonClose from '../button/CButtonClose'; //component - CoreUI / CSidebarClose + +var CSidebarClose = function CSidebarClose(props) { + return /*#__PURE__*/React.createElement(CButtonClose, _extends({}, props, { + buttonClass: 'c-sidebar-close' + }), /*#__PURE__*/React.createElement("svg", { + className: "c-icon", + width: "24", + height: "24", + viewBox: "0 0 24 24" + }, /*#__PURE__*/React.createElement("title", null, "x"), /*#__PURE__*/React.createElement("path", { + d: "M20.030 5.030l-1.061-1.061-6.97 6.97-6.97-6.97-1.061 1.061 6.97 6.97-6.97 6.97 1.061 1.061 6.97-6.97 6.97 6.97 1.061-1.061-6.97-6.97 6.97-6.97z" + }))); +}; + +export default CSidebarClose; \ No newline at end of file diff --git a/es/template/CSidebarFooter.js b/es/template/CSidebarFooter.js new file mode 100644 index 00000000..ba9bfcbf --- /dev/null +++ b/es/template/CSidebarFooter.js @@ -0,0 +1,31 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CSidebarFooter + +var CSidebarFooter = function CSidebarFooter(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); // render + + + var classes = classNames('c-sidebar-footer', className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CSidebarFooter.propTypes = { + tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]), + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CSidebarFooter.defaultProps = { + tag: 'div' +}; +export default CSidebarFooter; \ No newline at end of file diff --git a/es/template/CSidebarForm.js b/es/template/CSidebarForm.js new file mode 100644 index 00000000..d48b57e9 --- /dev/null +++ b/es/template/CSidebarForm.js @@ -0,0 +1,31 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CSidebarForm + +var CSidebarForm = function CSidebarForm(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames('c-sidebar-form', className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CSidebarForm.propTypes = { + tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]), + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CSidebarForm.defaultProps = { + tag: 'div' +}; +export default CSidebarForm; \ No newline at end of file diff --git a/es/template/CSidebarHeader.js b/es/template/CSidebarHeader.js new file mode 100644 index 00000000..38f1461d --- /dev/null +++ b/es/template/CSidebarHeader.js @@ -0,0 +1,31 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CSidebarHeader + +var CSidebarHeader = function CSidebarHeader(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames('c-sidebar-header', className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CSidebarHeader.propTypes = { + tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]), + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CSidebarHeader.defaultProps = { + tag: 'div' +}; +export default CSidebarHeader; \ No newline at end of file diff --git a/es/template/CSidebarMinimizer.js b/es/template/CSidebarMinimizer.js new file mode 100644 index 00000000..777f4d25 --- /dev/null +++ b/es/template/CSidebarMinimizer.js @@ -0,0 +1,32 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useContext } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { Context } from './CSidebar'; //component - CoreUI / CSidebarMinimizer + +var CSidebarMinimizer = function CSidebarMinimizer(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); + + var _useContext = useContext(Context), + toggleMinimize = _useContext.toggleMinimize; //render + + + var classes = classNames('c-sidebar-minimizer', className); + return /*#__PURE__*/React.createElement("button", _extends({ + className: classes, + type: "button" + }, attributes, { + onClick: toggleMinimize, + ref: innerRef + })); +}; + +CSidebarMinimizer.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CSidebarMinimizer; \ No newline at end of file diff --git a/es/template/CSidebarNav.js b/es/template/CSidebarNav.js new file mode 100644 index 00000000..a142f8f3 --- /dev/null +++ b/es/template/CSidebarNav.js @@ -0,0 +1,36 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useContext } from "react"; +import PropTypes from "prop-types"; +import classNames from "classnames"; +import CScrollbar from "./CScrollbar"; +import { Context } from "./CSidebar"; //component - CoreUI / CSidebarNav + +var CSidebarNav = function CSidebarNav(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); + + var _useContext = useContext(Context), + scrollbarExist = _useContext.scrollbarExist; + + var navClasses = classNames("c-sidebar-nav", "h-100", className); //state + + return /*#__PURE__*/React.createElement(CScrollbar, _extends({ + settings: { + suppressScrollX: true + }, + className: navClasses, + innerRef: innerRef, + switcher: scrollbarExist, + tag: "ul" + }, attributes)); +}; + +CSidebarNav.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + children: PropTypes.node, + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CSidebarNav; \ No newline at end of file diff --git a/es/template/CSidebarNavDivider.js b/es/template/CSidebarNavDivider.js new file mode 100644 index 00000000..fb3ee3d0 --- /dev/null +++ b/es/template/CSidebarNavDivider.js @@ -0,0 +1,26 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CSidebarNavDivider + +var CSidebarNavDivider = function CSidebarNavDivider(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); //render + + + var classes = classNames('c-sidebar-nav-divider', className); + return /*#__PURE__*/React.createElement("li", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CSidebarNavDivider.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CSidebarNavDivider; \ No newline at end of file diff --git a/es/template/CSidebarNavDropdown.js b/es/template/CSidebarNavDropdown.js new file mode 100644 index 00000000..c2d5e145 --- /dev/null +++ b/es/template/CSidebarNavDropdown.js @@ -0,0 +1,117 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React, { useState, useContext, useEffect, createRef, isValidElement } from "react"; +import PropTypes from "prop-types"; +import classNames from "classnames"; +import CIcon from "@coreui/icons-react"; // import { useLocation } from 'react-router-dom' + +import { Context } from "./CSidebar"; +export var DropdownContext = /*#__PURE__*/React.createContext({}); +export var iconProps = function iconProps(icon) { + if (typeof icon === "object") { + var _objectSpread2; + + var key = icon.size ? "className" : "customClasses"; + return _objectSpread(_objectSpread({}, icon), {}, (_objectSpread2 = {}, _objectSpread2["" + key] = icon.customClasses || "c-sidebar-nav-icon " + icon.className, _objectSpread2)); + } else { + return { + customClasses: "c-sidebar-nav-icon", + name: icon + }; + } +}; //component - CoreUI / CSidebarNavDropdown + +var CSidebarNavDropdown = function CSidebarNavDropdown(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + icon = props.icon, + fontIcon = props.fontIcon, + name = props.name, + show = props.show, + route = props.route, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "innerRef", "icon", "fontIcon", "name", "show", "route"]); + + var ref = /*#__PURE__*/createRef(); + innerRef && innerRef(ref); + + var _useContext = useContext(Context), + dropdownMode = _useContext.dropdownMode, + openDropdown = _useContext.openDropdown, + setOpenDropdown = _useContext.setOpenDropdown; + + var _useState = useState(show), + isOpen = _useState[0], + setIsOpen = _useState[1]; + + useEffect(function () { + setIsOpen(show); + }, [show]); + useEffect(function () { + !dropdownMode && (!openDropdown || !ref.current.contains(openDropdown)) && setIsOpen(false); + }, [openDropdown]); + + var toggle = function toggle() { + !dropdownMode && setOpenDropdown(isOpen ? ref.current.parentNode.closest(".c-sidebar-nav-dropdown") : ref.current); + setIsOpen(!isOpen); + }; + + var path = ""; + + try { + // path = useLocation().pathname + path = window.location.pathname; + } catch (e) { + console.warn(e); + } + + useEffect(function () { + if (dropdownMode === "close") { + setIsOpen(false); + } else if (dropdownMode === "closeInactive" && route) { + setIsOpen(path.includes(route)); + } else if ((!dropdownMode || dropdownMode !== "noAction") && !isOpen && route) { + setIsOpen(path.includes(route)); + } + }, [path]); //render + + var classes = classNames("c-sidebar-nav-dropdown", isOpen && "c-show", className); + var iconClasses = classNames("c-sidebar-nav-icon", fontIcon); + return /*#__PURE__*/React.createElement("li", _extends({ + className: classes + }, attributes, { + ref: ref + }), /*#__PURE__*/React.createElement("a", { + className: "c-sidebar-nav-dropdown-toggle", + tabIndex: "0", + onClick: toggle, + "aria-label": "menu dropdown" + }, icon && ( /*#__PURE__*/isValidElement(icon) ? icon : /*#__PURE__*/React.createElement(CIcon, iconProps(icon))), fontIcon && /*#__PURE__*/React.createElement("i", { + className: iconClasses + }), name), /*#__PURE__*/React.createElement("ul", { + className: "c-sidebar-nav-dropdown-items" + }, /*#__PURE__*/React.createElement(DropdownContext.Provider, { + value: { + isOpen: isOpen + } + }, children))); +}; + +CSidebarNavDropdown.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + children: PropTypes.node, + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), + icon: PropTypes.oneOfType([PropTypes.object, PropTypes.string]), + fontIcon: PropTypes.string, + show: PropTypes.bool, + route: PropTypes.string +}; +export default CSidebarNavDropdown; \ No newline at end of file diff --git a/es/template/CSidebarNavItem.js b/es/template/CSidebarNavItem.js new file mode 100644 index 00000000..6a05ef42 --- /dev/null +++ b/es/template/CSidebarNavItem.js @@ -0,0 +1,66 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React, { isValidElement, useContext } from "react"; +import PropTypes from "prop-types"; +import classNames from "classnames"; +import CLink from "../link/CLink"; +import CBadge from "../badge/CBadge"; +import CIcon from "@coreui/icons-react"; +import { iconProps } from "./CSidebarNavDropdown"; +import { DropdownContext } from "./CSidebarNavDropdown"; //component - CoreUI / CSidebarNavItem + +var CSidebarNavItem = function CSidebarNavItem(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + name = props.name, + icon = props.icon, + fontIcon = props.fontIcon, + badge = props.badge, + addLinkClass = props.addLinkClass, + label = props.label, + color = props.color, + rest = _objectWithoutPropertiesLoose(props, ["children", "className", "innerRef", "name", "icon", "fontIcon", "badge", "addLinkClass", "label", "color"]); + + var _useContext = useContext(DropdownContext), + isOpen = _useContext.isOpen; + + var classes = classNames("c-sidebar-nav-item", className); + var linkClasses = classNames(label ? "c-sidebar-nav-label" : "c-sidebar-nav-link", color && "c-sidebar-nav-link-" + color, addLinkClass); + var routerLinkProps = rest.to && { + exact: true, + activeClassName: "c-active" + }; + return /*#__PURE__*/React.createElement("li", { + className: classes, + ref: innerRef + }, children || /*#__PURE__*/React.createElement(CLink, _extends({ + className: linkClasses + }, routerLinkProps, rest, { + tabIndex: isOpen === false ? -1 : 0 + }), icon && ( /*#__PURE__*/isValidElement(icon) ? icon : /*#__PURE__*/React.createElement(CIcon, iconProps(icon))), fontIcon && /*#__PURE__*/React.createElement("i", { + className: "c-sidebar-nav-icon " + fontIcon + }), name, badge && /*#__PURE__*/React.createElement(CBadge, _objectSpread(_objectSpread({}, badge), {}, { + text: null + }), badge.text))); +}; + +CSidebarNavItem.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + icon: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), + fontIcon: PropTypes.string, + badge: PropTypes.object, + addLinkClass: PropTypes.string, + label: PropTypes.bool, + name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), + color: PropTypes.string +}; +export default CSidebarNavItem; \ No newline at end of file diff --git a/es/template/CSidebarNavTitle.js b/es/template/CSidebarNavTitle.js new file mode 100644 index 00000000..aca0139c --- /dev/null +++ b/es/template/CSidebarNavTitle.js @@ -0,0 +1,26 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CSidebarNavTitle + +var CSidebarNavTitle = function CSidebarNavTitle(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); //render + + + var classes = classNames('c-sidebar-nav-title', className); + return /*#__PURE__*/React.createElement("li", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CSidebarNavTitle.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +export default CSidebarNavTitle; \ No newline at end of file diff --git a/es/template/CSubheader.js b/es/template/CSubheader.js new file mode 100644 index 00000000..eac6179f --- /dev/null +++ b/es/template/CSubheader.js @@ -0,0 +1,32 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CSubheader + +var CSubheader = function CSubheader(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames('c-subheader', className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CSubheader.propTypes = { + tag: tagPropType, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CSubheader.defaultProps = { + tag: 'div' +}; +export default CSubheader; \ No newline at end of file diff --git a/es/template/_DynamicSidebar.js b/es/template/_DynamicSidebar.js new file mode 100644 index 00000000..365265d7 --- /dev/null +++ b/es/template/_DynamicSidebar.js @@ -0,0 +1,145 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useState, useRef, useMemo, useEffect } from "react"; +import classNames from "classnames"; + +var DynamicSidebar = function DynamicSidebar(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + breakpoint = props.breakpoint, + show = props.show, + fixed = props.fixed, + unfoldable = props.unfoldable, + minimize = props.minimize, + size = props.size, + hideOnMobileClick = props.hideOnMobileClick, + aside = props.aside, + colorScheme = props.colorScheme, + overlaid = props.overlaid, + dropdownMode = props.dropdownMode, + onShowChange = props.onShowChange, + onMinimizeChange = props.onMinimizeChange, + Context = props.Context, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "innerRef", "breakpoint", "show", "fixed", "unfoldable", "minimize", "size", "hideOnMobileClick", "aside", "colorScheme", "overlaid", "dropdownMode", "onShowChange", "onMinimizeChange", "Context"]); + + var key = useState(Math.random().toString(36).substr(2))[0]; + + var _useState = useState(show), + isOpen = _useState[0], + setIsOpen = _useState[1]; + + var _useState2 = useState(), + openDropdown = _useState2[0], + setOpenDropdown = _useState2[1]; + + var node = useRef({}).current; + + var reference = function reference(r) { + node.current = r; + innerRef && innerRef(r); + }; + + var _useState3 = useState(minimize), + minimized = _useState3[0], + setIsMinimized = _useState3[1]; + + useMemo(function () { + setIsMinimized(minimize); + }, [minimize]); + + var toggleMinimize = function toggleMinimize() { + setIsMinimized(!minimized); + onMinimizeChange && onMinimizeChange(minimized); + }; + + useMemo(function () { + setIsOpen(show); + }, [show]); + useEffect(function () { + isOpen === true ? createBackdrop() : removeBackdrop(); + return function () { + return removeBackdrop(); + }; + }, [isOpen]); //methods + + var sidebarCloseListener = function sidebarCloseListener(e) { + if (document.getElementById(key + "backdrop") && !node.current.contains(e.target)) { + closeSidebar(); + } + }; + + var onKeydown = function onKeydown(e) { + e.key.includes("Esc") && isAutoclosable() && closeSidebar(); + }; + + var createBackdrop = function createBackdrop() { + var backdrop = document.createElement("div"); + + if (overlaid) { + document.addEventListener("click", sidebarCloseListener); + } else { + backdrop.addEventListener("click", closeSidebar); + } + + document.addEventListener("keydown", onKeydown); + backdrop.className = "c-sidebar-backdrop c-show"; + backdrop.id = key + "backdrop"; + document.body.appendChild(backdrop); + }; + + var removeBackdrop = function removeBackdrop() { + var backdrop = document.getElementById(key + "backdrop"); + + if (backdrop) { + document.removeEventListener("click", sidebarCloseListener); + backdrop.removeEventListener("click", closeSidebar); + document.removeEventListener("keydown", onKeydown); + document.body.removeChild(backdrop); + } + }; + + var closeSidebar = function closeSidebar() { + if (typeof onShowChange === "function") { + onShowChange(overlaid ? false : "responsive"); + } else { + setIsOpen(overlaid ? false : "responsive"); + } + }; + + var isOnMobile = function isOnMobile() { + return Boolean(window.getComputedStyle(node.current).getPropertyValue("--is-mobile")); + }; + + var isAutoclosable = function isAutoclosable() { + return isOnMobile() || overlaid; + }; + + var onSidebarClick = function onSidebarClick(e) { + var sidebarItemClicked = String(e.target.className).includes("c-sidebar-nav-link"); + + if (sidebarItemClicked && hideOnMobileClick && isAutoclosable()) { + closeSidebar(); + } + }; // render + + + var haveResponsiveClass = breakpoint && isOpen === "responsive"; + var classes = classNames("c-sidebar", colorScheme && "c-sidebar-" + colorScheme, isOpen === true && "c-sidebar-show", haveResponsiveClass && "c-sidebar-" + breakpoint + "-show", fixed && !overlaid && "c-sidebar-fixed", aside && "c-sidebar-right", minimized && !unfoldable && "c-sidebar-minimized", minimized && unfoldable && "c-sidebar-unfoldable", overlaid && "c-sidebar-overlaid", size && "c-sidebar-" + size, className); + return /*#__PURE__*/React.createElement(Context.Provider, { + value: { + dropdownMode: dropdownMode, + scrollbarExist: !minimized || unfoldable, + toggleMinimize: toggleMinimize, + openDropdown: openDropdown, + setOpenDropdown: setOpenDropdown + } + }, /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: reference, + onClick: onSidebarClick + }), children)); +}; + +export default DynamicSidebar; \ No newline at end of file diff --git a/es/template/scrollbar.css b/es/template/scrollbar.css new file mode 100644 index 00000000..f5374cad --- /dev/null +++ b/es/template/scrollbar.css @@ -0,0 +1,18 @@ +/* rtl fix */ +.ps__rtl .ps__rail-y { + left: 0px !important; + right: unset !important; +} +*[dir="rtl"] .ps__rail-y { + left: 0px !important; + right: unset !important; +} + +.ps__rtl .ps__thumb-y { + left: 2px; + right: unset; +} +*[dir="rtl"] .ps__thumb-y { + left: 2px; + right: unset; +} diff --git a/es/toast/CToast.css b/es/toast/CToast.css new file mode 100644 index 00000000..8482f40c --- /dev/null +++ b/es/toast/CToast.css @@ -0,0 +1,6 @@ +.toast-fade { + transition: opacity .5s; +} +.toast-fade-slow { + transition: opacity 2s; +} diff --git a/es/toast/CToast.js b/es/toast/CToast.js new file mode 100644 index 00000000..94f705d5 --- /dev/null +++ b/es/toast/CToast.js @@ -0,0 +1,129 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useState, useRef, useEffect } from "react"; +import PropTypes from "prop-types"; +import classNames from "classnames"; +import CFade from "../fade/CFade"; +import { omitByKeys } from "@coreui/utils/src"; +import { CFadeProps } from "../utils/helper.js"; +/*import './CToast.css'*/ + +export var Context = /*#__PURE__*/React.createContext({}); //component - CoreUI / CToast + +var CToast = function CToast(props) { + var _classNames; + + var className = props.className, + children = props.children, + innerRef = props.innerRef, + show = props.show, + autohide = props.autohide, + fade = props.fade, + color = props.color, + onStateChange = props.onStateChange, + attributes = _objectWithoutPropertiesLoose(props, ["className", "children", "innerRef", "show", "autohide", "fade", "color", "onStateChange"]); + + var _useState = useState(show), + state = _useState[0], + setState = _useState[1]; + + var timeout = useRef(); + useEffect(function () { + setState(show); + }, [show]); //triggered on mount and destroy + + useEffect(function () { + return function () { + return clearTimeout(timeout.current); + }; + }, []); + useEffect(function () { + if (state === true && autohide) { + setAutohide(); + } + + onStateChange && onStateChange(state); + }, [state]); + + var setAutohide = function setAutohide() { + clearTimeout(timeout.current); + timeout.current = setTimeout(function () { + startAutohide(); + }, autohide); + }; + + var onMouseOver = function onMouseOver() { + if (state !== "closing") { + state !== true && setState(true); + clearTimeout(timeout.current); + } + }; + + var onMouseOut = function onMouseOut() { + if (autohide && state !== "closing") { + setAutohide(); + } + }; + + var startAutohide = function startAutohide() { + if (!fade) { + return setState(false); + } + + setState("hiding"); + clearTimeout(timeout.current); + timeout.current = setTimeout(function () { + setState(false); + }, 2000); + }; + + var close = function close() { + if (!fade) { + return setState(false); + } + + setState("closing"); + clearTimeout(timeout.current); + timeout.current = setTimeout(function () { + setState(false); + }, 500); + }; // render + + + var classes = classNames((_classNames = { + toast: true + }, _classNames["toast-" + color] = !!color, _classNames), className); + var fadeClasses = classNames(fade && (state === "hiding" ? "toast-fade-slow" : "toast-fade")); + var attrs = omitByKeys(attributes, CFadeProps); + return /*#__PURE__*/React.createElement(Context.Provider, { + value: { + close: close + } + }, state && /*#__PURE__*/React.createElement(CFade, _extends({ + className: classes, + role: "alert", + "aria-live": "assertive", + "aria-atomic": "true", + in: state === true, + onMouseOver: onMouseOver, + onMouseOut: onMouseOut, + baseClass: fadeClasses, + innerRef: innerRef + }, attrs), children)); +}; + +CToast.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + children: PropTypes.node, + // + innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + show: PropTypes.bool, + autohide: PropTypes.oneOfType([PropTypes.number, PropTypes.bool]), + fade: PropTypes.bool, + color: PropTypes.string, + onStateChange: PropTypes.func +}; +CToast.defaultProps = { + fade: true +}; +export default CToast; \ No newline at end of file diff --git a/es/toast/CToastBody.js b/es/toast/CToastBody.js new file mode 100644 index 00000000..308f3724 --- /dev/null +++ b/es/toast/CToastBody.js @@ -0,0 +1,26 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CToastBody + +var CToastBody = function CToastBody(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef"]); //render + + + var classes = classNames('toast-body', className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CToastBody.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]) +}; +export default CToastBody; \ No newline at end of file diff --git a/es/toast/CToastHeader.js b/es/toast/CToastHeader.js new file mode 100644 index 00000000..614d6d1e --- /dev/null +++ b/es/toast/CToastHeader.js @@ -0,0 +1,41 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React, { useContext } from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import CButtonClose from '../button/CButtonClose'; +import { Context } from './CToast'; //component - CoreUI / CToastHeader + +var CToastHeader = function CToastHeader(props) { + var className = props.className, + children = props.children, + innerRef = props.innerRef, + closeButton = props.closeButton, + attributes = _objectWithoutPropertiesLoose(props, ["className", "children", "innerRef", "closeButton"]); + + var _useContext = useContext(Context), + close = _useContext.close; //render + + + var classes = classNames('toast-header', className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + }), children, closeButton && /*#__PURE__*/React.createElement(CButtonClose, { + className: "mfs-auto", + onClick: close + })); +}; + +CToastHeader.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + children: PropTypes.node, + // + innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + closeButton: PropTypes.bool +}; +CToastHeader.defaultProps = { + closeButton: true +}; +export default CToastHeader; \ No newline at end of file diff --git a/es/toast/CToaster.js b/es/toast/CToaster.js new file mode 100644 index 00000000..630b0f59 --- /dev/null +++ b/es/toast/CToaster.js @@ -0,0 +1,32 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CToaster + +var CToaster = function CToaster(props) { + var className = props.className, + innerRef = props.innerRef, + position = props.position, + attributes = _objectWithoutPropertiesLoose(props, ["className", "innerRef", "position"]); // inherit closeButton, autohide, fade?? + // render + + + var classes = classNames('toaster', position && position !== 'static' && 'toaster-' + position, className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CToaster.propTypes = { + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + position: PropTypes.oneOf(['', 'static', 'top-right', 'top-left', 'top-center', 'top-full', 'bottom-right', 'bottom-left', 'bottom-center', 'bottom-full']) +}; +CToaster.defaultProps = { + position: 'top-right' +}; +export default CToaster; \ No newline at end of file diff --git a/es/toggler/CToggler.js b/es/toggler/CToggler.js new file mode 100644 index 00000000..892c71d7 --- /dev/null +++ b/es/toggler/CToggler.js @@ -0,0 +1,46 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from '../utils/helper.js'; //component - CoreUI / CToggler + +var CToggler = function CToggler(props) { + var Tag = props.tag, + children = props.children, + className = props.className, + innerRef = props.innerRef, + inHeader = props.inHeader, + inNavbar = props.inNavbar, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "children", "className", "innerRef", "inHeader", "inNavbar"]); + + var typeAttr = Tag === 'button' ? { + type: 'button' + } : null; + var type = inNavbar ? 'navbar' : inHeader ? 'c-header' : null; + var togglerClass = type ? type + "-toggler" : ''; + var iconClass = type ? togglerClass + "-icon" : ''; //render + + var classes = classNames(togglerClass, className); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, typeAttr, attributes, { + ref: innerRef + }), children || /*#__PURE__*/React.createElement("span", { + className: iconClass + })); +}; + +CToggler.propTypes = { + tag: tagPropType, + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), + inHeader: PropTypes.bool, + inNavbar: PropTypes.bool +}; +CToggler.defaultProps = { + tag: 'button' +}; +export default CToggler; \ No newline at end of file diff --git a/es/tooltip/CPopover.css b/es/tooltip/CPopover.css new file mode 100644 index 00000000..99ffc6c6 --- /dev/null +++ b/es/tooltip/CPopover.css @@ -0,0 +1,11 @@ +.tippy-box[data-theme~='cpopover'] { + background:white; + color: inherit; + border: 1px solid rgba(0, 0, 21, 0.2); + } + .tippy-box[data-theme~='cpopover'] > .tippy-content { + padding: 0; + } + .tippy-box[data-theme~='cpopover'] > .tippy-arrow::before { + color: white; + } diff --git a/es/tooltip/CPopover.js b/es/tooltip/CPopover.js new file mode 100644 index 00000000..fa55f6a5 --- /dev/null +++ b/es/tooltip/CPopover.js @@ -0,0 +1,46 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React, { useCallback } from 'react'; +import PropTypes from 'prop-types'; +import CTooltip from './CTooltip.js'; +import { renderToString } from 'react-dom/server'; //component - CoreUI / CPopover + +var template = "

H

C
"; + +var generateContent = function generateContent(content, header) { + return template.replace('H', renderToString(header)).replace('C', renderToString(content)); +}; + +var CPopover = function CPopover(props) { + var header = props.header, + children = props.children, + content = props.content, + config = _objectWithoutPropertiesLoose(props, ["header", "children", "content"]); + + var computedContent = useCallback(generateContent(content, header), [content, header]); + + var advancedOptions = _objectSpread(_objectSpread({}, config ? config.advancedOptions || {} : {}), {}, { + theme: 'cpopover' + }); + + var computedConfig = _objectSpread(_objectSpread({}, config), {}, { + advancedOptions: advancedOptions + }); + + return /*#__PURE__*/React.createElement(CTooltip, _extends({ + content: computedContent + }, computedConfig), children); +}; + +CPopover.propTypes = { + children: PropTypes.node, + content: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), + header: PropTypes.oneOfType([PropTypes.string, PropTypes.node]) +}; +export default CPopover; \ No newline at end of file diff --git a/es/tooltip/CTooltip.js b/es/tooltip/CTooltip.js new file mode 100644 index 00000000..7fdad535 --- /dev/null +++ b/es/tooltip/CTooltip.js @@ -0,0 +1,67 @@ +import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +import React, { useState, useEffect, useRef, useCallback } from "react"; +import PropTypes from "prop-types"; +import tippy from "tippy.js"; +/*import 'tippy.js/dist/tippy.css'*/ + +import { renderToString } from "react-dom/server"; //component - CoreUI / CTooltip + +var CTooltip = function CTooltip(props) { + var children = props.children, + content = props.content, + interactive = props.interactive, + placement = props.placement, + trigger = props.trigger, + advancedOptions = props.advancedOptions; + var computedContent = useCallback(function () { + return typeof content === "string" ? content : renderToString(content); + }, [content]); + + var config = _objectSpread({ + allowHTML: true, + content: computedContent, + interactive: interactive, + placement: placement, + trigger: trigger + }, advancedOptions); + + var key = useState(Math.random().toString(36).substr(2))[0]; + var instance = useRef(); + useEffect(function () { + if (instance.current) { + instance.current.setProps(config); + } + }); + useEffect(function () { + var node = document.querySelector("[data-tooltip=\"" + key + "\"]"); + instance.current = tippy(node, config); + return function () { + return instance.current.destroy(); + }; + }, [key]); + return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.cloneElement(children, { + "data-tooltip": key + })); +}; + +CTooltip.propTypes = { + children: PropTypes.node, + content: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), + interactive: PropTypes.bool, + placement: PropTypes.oneOf(["", "top-end", "top", "top-start", "bottom-end", "bottom", "bottom-start", "right-start", "right", "right-end", "left-start", "left", "left-end"]), + trigger: PropTypes.string, + advancedOptions: PropTypes.object +}; +CTooltip.defaultProps = { + content: "", + interactive: false, + placement: "top", + trigger: "mouseenter focus", + advancedOptions: {} +}; +export default CTooltip; \ No newline at end of file diff --git a/es/utils/CBrand.js b/es/utils/CBrand.js new file mode 100644 index 00000000..7b51efe8 --- /dev/null +++ b/es/utils/CBrand.js @@ -0,0 +1,36 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { tagPropType } from './helper.js'; +import CLink from '../link/CLink'; //component - CoreUI / CBrand + +var CBrand = function CBrand(props) { + var _ref; + + var tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutPropertiesLoose(props, ["tag", "className", "innerRef"]); //render + + + var classes = classNames(className); + var Tag = attributes.to || attributes.href ? CLink : tag; + var ref = (_ref = {}, _ref["" + (typeof Tag === 'string' ? 'ref' : 'innerRef')] = innerRef, _ref); + return /*#__PURE__*/React.createElement(Tag, _extends({ + className: classes + }, attributes, ref)); +}; + +CBrand.propTypes = { + tag: tagPropType, + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]) +}; +CBrand.defaultProps = { + tag: 'div' +}; +export default CBrand; \ No newline at end of file diff --git a/es/utils/helper.js b/es/utils/helper.js new file mode 100644 index 00000000..857bf994 --- /dev/null +++ b/es/utils/helper.js @@ -0,0 +1,35 @@ +import PropTypes from 'prop-types'; // Duplicated Transition.propType keys to ensure that Reactstrap builds +// for distribution properly exclude these keys for nested child HTML attributes +// since `react-transition-group` removes propTypes in production builds. + +export var TransitionPropTypeKeys = ['in', 'mountOnEnter', 'unmountOnExit', 'appear', 'enter', 'exit', 'timeout', 'onEnter', 'onEntering', 'onEntered', 'onExit', 'onExiting', 'onExited']; +export var CFadeProps = [].concat(TransitionPropTypeKeys, ['baseClass', 'baseClassActive', 'tag']); +export var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); +export var targetPropType = PropTypes.oneOfType([PropTypes.string, PropTypes.func, DOMElement, PropTypes.shape({ + current: PropTypes.any +})]); +export var tagPropType = PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.shape({ + $$typeof: PropTypes.symbol, + render: PropTypes.func +}), PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.shape({ + $$typeof: PropTypes.symbol, + render: PropTypes.func +})]))]); +export function DOMElement(props, propName, componentName) { + if (!(props[propName] instanceof Element)) { + return new Error('Invalid prop `' + propName + '` supplied to `' + componentName + '`. Expected prop to be an instance of Element. Validation failed.'); + } +} +export function deprecated(propType, explanation) { + return function validate(props, propName, componentName) { + if (props[propName] !== null && typeof props[propName] !== 'undefined') { + console.error("\"" + propName + "\" property of \"" + componentName + "\" has been deprecated.\n" + explanation); + } + + for (var _len = arguments.length, rest = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + rest[_key - 3] = arguments[_key]; + } + + return propType.apply(void 0, [props, propName, componentName].concat(rest)); + }; +} \ No newline at end of file diff --git a/es/widgets/CWidgetBrand.js b/es/widgets/CWidgetBrand.js new file mode 100644 index 00000000..968a5056 --- /dev/null +++ b/es/widgets/CWidgetBrand.js @@ -0,0 +1,57 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CWidgetBrand + +var CWidgetBrand = function CWidgetBrand(props) { + var children = props.children, + className = props.className, + color = props.color, + rightHeader = props.rightHeader, + rightFooter = props.rightFooter, + leftHeader = props.leftHeader, + leftFooter = props.leftFooter, + addHeaderClasses = props.addHeaderClasses, + bodySlot = props.bodySlot, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "color", "rightHeader", "rightFooter", "leftHeader", "leftFooter", "addHeaderClasses", "bodySlot"]); // render + + + var headerClasses = classNames('card-header content-center text-white p-0', color && "bg-" + color, addHeaderClasses); + return /*#__PURE__*/React.createElement("div", _extends({ + className: "card " + className + }, attributes), /*#__PURE__*/React.createElement("div", { + className: headerClasses + }, children), bodySlot || /*#__PURE__*/React.createElement("div", { + className: "card-body row text-center" + }, /*#__PURE__*/React.createElement("div", { + className: "col" + }, rightHeader && /*#__PURE__*/React.createElement("div", { + className: "text-value-lg" + }, rightHeader), rightFooter && /*#__PURE__*/React.createElement("div", { + className: "text-uppercase text-muted small" + }, rightFooter)), /*#__PURE__*/React.createElement("div", { + className: "c-vr" + }), /*#__PURE__*/React.createElement("div", { + className: "col" + }, leftHeader && /*#__PURE__*/React.createElement("div", { + className: "text-value-lg" + }, leftHeader), leftFooter && /*#__PURE__*/React.createElement("div", { + className: "text-uppercase text-muted small" + }, leftFooter)))); +}; + +CWidgetBrand.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + color: PropTypes.string, + rightHeader: PropTypes.string, + rightFooter: PropTypes.string, + leftHeader: PropTypes.string, + leftFooter: PropTypes.string, + addHeaderClasses: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + bodySlot: PropTypes.node +}; +export default CWidgetBrand; \ No newline at end of file diff --git a/es/widgets/CWidgetDropdown.js b/es/widgets/CWidgetDropdown.js new file mode 100644 index 00000000..66669575 --- /dev/null +++ b/es/widgets/CWidgetDropdown.js @@ -0,0 +1,36 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CWidgetDropdown + +var CWidgetDropdown = function CWidgetDropdown(props) { + var children = props.children, + className = props.className, + header = props.header, + color = props.color, + footerSlot = props.footerSlot, + text = props.text, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "header", "color", "footerSlot", "text"]); + + var classes = classNames('card text-white', color && "bg-" + color, className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes), /*#__PURE__*/React.createElement("div", { + className: "card-body pb-0 d-flex justify-content-between" + }, /*#__PURE__*/React.createElement("div", null, header && /*#__PURE__*/React.createElement("div", { + className: "text-value-lg" + }, header), text && /*#__PURE__*/React.createElement("div", null, text)), children), footerSlot); +}; + +CWidgetDropdown.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + header: PropTypes.string, + color: PropTypes.string, + footerSlot: PropTypes.node, + text: PropTypes.string +}; +export default CWidgetDropdown; \ No newline at end of file diff --git a/es/widgets/CWidgetIcon.js b/es/widgets/CWidgetIcon.js new file mode 100644 index 00000000..8ea5999e --- /dev/null +++ b/es/widgets/CWidgetIcon.js @@ -0,0 +1,45 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CWidgetIcon + +var CWidgetIcon = function CWidgetIcon(props) { + var className = props.className, + children = props.children, + header = props.header, + text = props.text, + iconPadding = props.iconPadding, + color = props.color, + footerSlot = props.footerSlot, + attributes = _objectWithoutPropertiesLoose(props, ["className", "children", "header", "text", "iconPadding", "color", "footerSlot"]); + + var classes = classNames('card', color, className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes), /*#__PURE__*/React.createElement("div", { + className: "card-body d-flex align-items-center " + (iconPadding ? 'p-3' : 'p-0') + }, /*#__PURE__*/React.createElement("div", { + className: "mr-3 text-white bg-" + color + " " + (iconPadding ? 'p-3' : 'p-4') + }, children), /*#__PURE__*/React.createElement("div", null, header && /*#__PURE__*/React.createElement("div", { + className: "text-value text-" + color + }, header), text && /*#__PURE__*/React.createElement("div", { + className: "text-muted text-uppercase font-weight-bold small" + }, text))), footerSlot); +}; + +CWidgetIcon.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + header: PropTypes.string, + text: PropTypes.string, + iconPadding: PropTypes.bool, + color: PropTypes.string, + footerSlot: PropTypes.node +}; +CWidgetIcon.defaultProps = { + iconPadding: true +}; +export default CWidgetIcon; \ No newline at end of file diff --git a/es/widgets/CWidgetProgress.js b/es/widgets/CWidgetProgress.js new file mode 100644 index 00000000..e303a244 --- /dev/null +++ b/es/widgets/CWidgetProgress.js @@ -0,0 +1,50 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import CProgress from '../progress/CProgress'; //component - CoreUI / CWidgetProgress + +var CWidgetProgress = function CWidgetProgress(props) { + var children = props.children, + className = props.className, + header = props.header, + text = props.text, + footer = props.footer, + color = props.color, + value = props.value, + inverse = props.inverse, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "header", "text", "footer", "color", "value", "inverse"]); + + var classes = classNames('card', inverse ? [color && "bg-" + color, 'text-white'] : '', className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes), /*#__PURE__*/React.createElement("div", { + className: "card-body" + }, header && /*#__PURE__*/React.createElement("div", { + className: "h4 m-0" + }, header), text && /*#__PURE__*/React.createElement("div", null, text), children || /*#__PURE__*/React.createElement(CProgress, { + color: !inverse ? color : '', + value: value, + className: "progress-xs my-3 mb-0 " + (inverse ? 'progress-white' : '') + }), footer && /*#__PURE__*/React.createElement("small", { + className: "text-muted" + }, footer))); +}; + +CWidgetProgress.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + header: PropTypes.string, + text: PropTypes.string, + footer: PropTypes.string, + color: PropTypes.string, + value: PropTypes.number, + inverse: PropTypes.bool +}; +CWidgetProgress.defaultProps = { + value: 25 +}; +export default CWidgetProgress; \ No newline at end of file diff --git a/es/widgets/CWidgetProgressIcon.js b/es/widgets/CWidgetProgressIcon.js new file mode 100644 index 00000000..61033929 --- /dev/null +++ b/es/widgets/CWidgetProgressIcon.js @@ -0,0 +1,52 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import CProgress from '../progress/CProgress'; //component - CoreUI / CWidgetProgressIcon + +var CWidgetProgressIcon = function CWidgetProgressIcon(props) { + var children = props.children, + className = props.className, + header = props.header, + text = props.text, + value = props.value, + color = props.color, + inverse = props.inverse, + progressSlot = props.progressSlot, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "header", "text", "value", "color", "inverse", "progressSlot"]); + + var classes = classNames('card', inverse ? [color && "bg-" + color, 'text-white'] : '', className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes), /*#__PURE__*/React.createElement("div", { + className: "card-body" + }, children && /*#__PURE__*/React.createElement("div", { + className: "h1 text-muted text-right mb-4" + }, children), header && /*#__PURE__*/React.createElement("div", { + className: "h4 m-0" + }, header), text && /*#__PURE__*/React.createElement("small", { + className: "text-muted text-uppercase font-weight-bold" + }, text), progressSlot || /*#__PURE__*/React.createElement(CProgress, { + color: !inverse ? color : '', + value: value, + className: "progress-xs my-3 mb-0 " + (inverse ? 'progress-white' : '') + }))); +}; + +CWidgetProgressIcon.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + header: PropTypes.string, + text: PropTypes.string, + color: PropTypes.string, + value: PropTypes.number, + inverse: PropTypes.bool, + progressSlot: PropTypes.node +}; +CWidgetProgressIcon.defaultProps = { + value: 25 +}; +export default CWidgetProgressIcon; \ No newline at end of file diff --git a/es/widgets/CWidgetSimple.js b/es/widgets/CWidgetSimple.js new file mode 100644 index 00000000..fcd90ca0 --- /dev/null +++ b/es/widgets/CWidgetSimple.js @@ -0,0 +1,34 @@ +import _extends from "@babel/runtime/helpers/esm/extends"; +import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; //component - CoreUI / CWidgetSimple + +var CWidgetSimple = function CWidgetSimple(props) { + var children = props.children, + className = props.className, + header = props.header, + text = props.text, + attributes = _objectWithoutPropertiesLoose(props, ["children", "className", "header", "text"]); + + var classes = classNames('card', className); + return /*#__PURE__*/React.createElement("div", _extends({ + className: classes + }, attributes), /*#__PURE__*/React.createElement("div", { + className: "card-body text-center" + }, header && /*#__PURE__*/React.createElement("div", { + className: "text-muted small text-uppercase font-weight-bold" + }, header), text && /*#__PURE__*/React.createElement("div", { + className: "h2 py-3" + }, text), children)); +}; + +CWidgetSimple.propTypes = { + children: PropTypes.node, + className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]), + // + innerRef: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), + header: PropTypes.string, + text: PropTypes.string +}; +export default CWidgetSimple; \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index 2498120d..00000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,104 +0,0 @@ -import eslint from '@eslint/js' -import tsParser from '@typescript-eslint/parser' -import eslintPluginUnicorn from 'eslint-plugin-unicorn' -import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended' -import eslintPluginReact from 'eslint-plugin-react' -import eslintPluginReactHooks from 'eslint-plugin-react-hooks' -import globals from 'globals' -import typescriptEslint from 'typescript-eslint' - -export default typescriptEslint.config( - { ignores: ['**/*.d.ts', '**/coverage', '**/dist', 'eslint.config.mjs'] }, - { - extends: [ - eslint.configs.recommended, - ...typescriptEslint.configs.recommended, - eslintPluginUnicorn.configs['flat/recommended'], - eslintPluginReact.configs.flat.recommended, - eslintPluginReact.configs.flat['jsx-runtime'], - ], - plugins: { - 'react-hooks': eslintPluginReactHooks, - }, - files: ['packages/**/src/**/*.{js,ts,tsx}'], - languageOptions: { - globals: { - ...globals.browser, - ...globals.node, - }, - parser: tsParser, - ecmaVersion: 'latest', - sourceType: 'module', - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - }, - }, - settings: { - react: { - pragma: 'React', - version: 'detect', - }, - }, - rules: { - ...eslintPluginReactHooks.configs.recommended.rules, - 'no-console': 'off', - 'no-debugger': 'off', - 'unicorn/filename-case': 'off', - 'unicorn/no-array-for-each': 'off', - 'unicorn/no-null': 'off', - 'unicorn/prefer-dom-node-append': 'off', - 'unicorn/prefer-export-from': 'off', - 'unicorn/prefer-query-selector': 'off', - 'unicorn/prevent-abbreviations': 'off', - 'vue/require-default-prop': 'off', - }, - }, - { - files: ['**/*.mjs'], - languageOptions: { - globals: { - ...Object.fromEntries(Object.entries(globals.browser).map(([key]) => [key, 'off'])), - ...globals.node, - }, - - ecmaVersion: 5, - sourceType: 'module', - }, - }, - { - files: ['**/__tests__/*.{j,t}s?(x)', '**/tests/unit/**/*.spec.{j,t}s?(x)'], - languageOptions: { - globals: { - ...globals.jest, - }, - }, - }, - { - files: ['packages/docs/build/**'], - languageOptions: { - globals: { - ...Object.fromEntries(Object.entries(globals.browser).map(([key]) => [key, 'off'])), - ...globals.node, - }, - - ecmaVersion: 5, - sourceType: 'commonjs', - }, - rules: { - '@typescript-eslint/no-var-requires': 'off', - 'no-console': 'off', - 'unicorn/prefer-module': 'off', - 'unicorn/prefer-top-level-await': 'off', - }, - }, - { - files: ['packages/docs/**'], - rules: { - '@typescript-eslint/no-var-requires': 'off', - 'unicorn/prefer-module': 'off', - }, - }, - eslintPluginPrettierRecommended, -) diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..13ec3945 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,22 @@ +const path = require('path'); + +module.exports = { + rootDir: path.resolve(__dirname, './'), + moduleFileExtensions: ['js', 'json', 'jsx'], + transform: { + '.*\\.js$': '/node_modules/babel-jest', + '.*\\.jsx$': '/node_modules/babel-jest' + }, + moduleNameMapper: { + "\\.(css|less)$": "/src/styleMock.js" + }, + transformIgnorePatterns: [ + "node_modules/(?!(@coreui|tippy.js|perfect-scrollbar)/)" + ], + coverageDirectory: '/coverage', + collectCoverageFrom: [ + 'src/**/*.{js,jsx}', + '!src/index.umd.js', + '!**/node_modules/**' + ] +}; \ No newline at end of file diff --git a/lerna.json b/lerna.json deleted file mode 100644 index d86538ff..00000000 --- a/lerna.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "npmClient": "yarn", - "packages": ["packages/*"], - "version": "5.7.1", - "$schema": "node_modules/lerna/schemas/lerna-schema.json" -} diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 00000000..48363d7c --- /dev/null +++ b/lib/index.js @@ -0,0 +1,13976 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var React = require('react'); +var ReactDOM = require('react-dom'); +var server = require('react-dom/server'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var React__default = /*#__PURE__*/_interopDefaultLegacy(React); +var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM); + +function _extends$1() { + _extends$1 = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends$1.apply(this, arguments); +} + +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; +} + +function _iterableToArrayLimit(arr, i) { + if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + + return arr2; +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); +} + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +function _objectWithoutPropertiesLoose$1(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; +} + +function _objectWithoutProperties(source, excluded) { + if (source == null) return {}; + var target = _objectWithoutPropertiesLoose$1(source, excluded); + var key, i; + + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } + } + + return target; +} + +function createCommonjsModule(fn) { + var module = { exports: {} }; + return fn(module, module.exports), module.exports; +} + +/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b? +Symbol.for("react.suspense_list"):60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119; +function z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}var AsyncMode=l;var ConcurrentMode=m;var ContextConsumer=k;var ContextProvider=h;var Element$1=c;var ForwardRef=n;var Fragment=e;var Lazy=t;var Memo=r;var Portal=d; +var Profiler=g;var StrictMode=f;var Suspense=p;var isAsyncMode=function(a){return A(a)||z(a)===l};var isConcurrentMode=A;var isContextConsumer=function(a){return z(a)===k};var isContextProvider=function(a){return z(a)===h};var isElement$2=function(a){return "object"===typeof a&&null!==a&&a.$$typeof===c};var isForwardRef=function(a){return z(a)===n};var isFragment=function(a){return z(a)===e};var isLazy=function(a){return z(a)===t}; +var isMemo=function(a){return z(a)===r};var isPortal=function(a){return z(a)===d};var isProfiler=function(a){return z(a)===g};var isStrictMode=function(a){return z(a)===f};var isSuspense=function(a){return z(a)===p}; +var isValidElementType=function(a){return "string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};var typeOf=z; + +var reactIs_production_min = { + AsyncMode: AsyncMode, + ConcurrentMode: ConcurrentMode, + ContextConsumer: ContextConsumer, + ContextProvider: ContextProvider, + Element: Element$1, + ForwardRef: ForwardRef, + Fragment: Fragment, + Lazy: Lazy, + Memo: Memo, + Portal: Portal, + Profiler: Profiler, + StrictMode: StrictMode, + Suspense: Suspense, + isAsyncMode: isAsyncMode, + isConcurrentMode: isConcurrentMode, + isContextConsumer: isContextConsumer, + isContextProvider: isContextProvider, + isElement: isElement$2, + isForwardRef: isForwardRef, + isFragment: isFragment, + isLazy: isLazy, + isMemo: isMemo, + isPortal: isPortal, + isProfiler: isProfiler, + isStrictMode: isStrictMode, + isSuspense: isSuspense, + isValidElementType: isValidElementType, + typeOf: typeOf +}; + +/** @license React v16.13.1 + * react-is.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var reactIs_development = createCommonjsModule(function (module, exports) { + + + +if (process.env.NODE_ENV !== "production") { + (function() { + +// The Symbol used to tag the ReactElement-like types. If there is no native Symbol +// nor polyfill, then a plain number is used for performance. +var hasSymbol = typeof Symbol === 'function' && Symbol.for; +var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; +var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; +var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; +var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; +var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; +var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; +var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary +// (unstable) APIs that have been removed. Can we remove the symbols? + +var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; +var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; +var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; +var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; +var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8; +var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; +var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; +var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9; +var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5; +var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6; +var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7; + +function isValidElementType(type) { + return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. + type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE); +} + +function typeOf(object) { + if (typeof object === 'object' && object !== null) { + var $$typeof = object.$$typeof; + + switch ($$typeof) { + case REACT_ELEMENT_TYPE: + var type = object.type; + + switch (type) { + case REACT_ASYNC_MODE_TYPE: + case REACT_CONCURRENT_MODE_TYPE: + case REACT_FRAGMENT_TYPE: + case REACT_PROFILER_TYPE: + case REACT_STRICT_MODE_TYPE: + case REACT_SUSPENSE_TYPE: + return type; + + default: + var $$typeofType = type && type.$$typeof; + + switch ($$typeofType) { + case REACT_CONTEXT_TYPE: + case REACT_FORWARD_REF_TYPE: + case REACT_LAZY_TYPE: + case REACT_MEMO_TYPE: + case REACT_PROVIDER_TYPE: + return $$typeofType; + + default: + return $$typeof; + } + + } + + case REACT_PORTAL_TYPE: + return $$typeof; + } + } + + return undefined; +} // AsyncMode is deprecated along with isAsyncMode + +var AsyncMode = REACT_ASYNC_MODE_TYPE; +var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; +var ContextConsumer = REACT_CONTEXT_TYPE; +var ContextProvider = REACT_PROVIDER_TYPE; +var Element = REACT_ELEMENT_TYPE; +var ForwardRef = REACT_FORWARD_REF_TYPE; +var Fragment = REACT_FRAGMENT_TYPE; +var Lazy = REACT_LAZY_TYPE; +var Memo = REACT_MEMO_TYPE; +var Portal = REACT_PORTAL_TYPE; +var Profiler = REACT_PROFILER_TYPE; +var StrictMode = REACT_STRICT_MODE_TYPE; +var Suspense = REACT_SUSPENSE_TYPE; +var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated + +function isAsyncMode(object) { + { + if (!hasWarnedAboutDeprecatedIsAsyncMode) { + hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint + + console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); + } + } + + return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; +} +function isConcurrentMode(object) { + return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; +} +function isContextConsumer(object) { + return typeOf(object) === REACT_CONTEXT_TYPE; +} +function isContextProvider(object) { + return typeOf(object) === REACT_PROVIDER_TYPE; +} +function isElement(object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; +} +function isForwardRef(object) { + return typeOf(object) === REACT_FORWARD_REF_TYPE; +} +function isFragment(object) { + return typeOf(object) === REACT_FRAGMENT_TYPE; +} +function isLazy(object) { + return typeOf(object) === REACT_LAZY_TYPE; +} +function isMemo(object) { + return typeOf(object) === REACT_MEMO_TYPE; +} +function isPortal(object) { + return typeOf(object) === REACT_PORTAL_TYPE; +} +function isProfiler(object) { + return typeOf(object) === REACT_PROFILER_TYPE; +} +function isStrictMode(object) { + return typeOf(object) === REACT_STRICT_MODE_TYPE; +} +function isSuspense(object) { + return typeOf(object) === REACT_SUSPENSE_TYPE; +} + +exports.AsyncMode = AsyncMode; +exports.ConcurrentMode = ConcurrentMode; +exports.ContextConsumer = ContextConsumer; +exports.ContextProvider = ContextProvider; +exports.Element = Element; +exports.ForwardRef = ForwardRef; +exports.Fragment = Fragment; +exports.Lazy = Lazy; +exports.Memo = Memo; +exports.Portal = Portal; +exports.Profiler = Profiler; +exports.StrictMode = StrictMode; +exports.Suspense = Suspense; +exports.isAsyncMode = isAsyncMode; +exports.isConcurrentMode = isConcurrentMode; +exports.isContextConsumer = isContextConsumer; +exports.isContextProvider = isContextProvider; +exports.isElement = isElement; +exports.isForwardRef = isForwardRef; +exports.isFragment = isFragment; +exports.isLazy = isLazy; +exports.isMemo = isMemo; +exports.isPortal = isPortal; +exports.isProfiler = isProfiler; +exports.isStrictMode = isStrictMode; +exports.isSuspense = isSuspense; +exports.isValidElementType = isValidElementType; +exports.typeOf = typeOf; + })(); +} +}); + +var reactIs = createCommonjsModule(function (module) { + +if (process.env.NODE_ENV === 'production') { + module.exports = reactIs_production_min; +} else { + module.exports = reactIs_development; +} +}); + +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty$1 = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +var objectAssign = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty$1.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var ReactPropTypesSecret$1 = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; + +var ReactPropTypesSecret_1 = ReactPropTypesSecret$1; + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var printWarning$1 = function() {}; + +if (process.env.NODE_ENV !== 'production') { + var ReactPropTypesSecret = ReactPropTypesSecret_1; + var loggedTypeFailures = {}; + var has$1 = Function.call.bind(Object.prototype.hasOwnProperty); + + printWarning$1 = function(text) { + var message = 'Warning: ' + text; + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; +} + +/** + * Assert that the values match with the type specs. + * Error messages are memorized and will only be shown once. + * + * @param {object} typeSpecs Map of name to a ReactPropType + * @param {object} values Runtime values that need to be type-checked + * @param {string} location e.g. "prop", "context", "child context" + * @param {string} componentName Name of the component for error messages. + * @param {?Function} getStack Returns the component stack. + * @private + */ +function checkPropTypes(typeSpecs, values, location, componentName, getStack) { + if (process.env.NODE_ENV !== 'production') { + for (var typeSpecName in typeSpecs) { + if (has$1(typeSpecs, typeSpecName)) { + var error; + // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + var err = Error( + (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + ); + err.name = 'Invariant Violation'; + throw err; + } + error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret); + } catch (ex) { + error = ex; + } + if (error && !(error instanceof Error)) { + printWarning$1( + (componentName || 'React class') + ': type specification of ' + + location + ' `' + typeSpecName + '` is invalid; the type checker ' + + 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + + 'You may have forgotten to pass an argument to the type checker ' + + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + + 'shape all require an argument).' + ); + } + if (error instanceof Error && !(error.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error.message] = true; + + var stack = getStack ? getStack() : ''; + + printWarning$1( + 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '') + ); + } + } + } + } +} + +/** + * Resets warning cache when testing. + * + * @private + */ +checkPropTypes.resetWarningCache = function() { + if (process.env.NODE_ENV !== 'production') { + loggedTypeFailures = {}; + } +}; + +var checkPropTypes_1 = checkPropTypes; + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + + + + + +var has = Function.call.bind(Object.prototype.hasOwnProperty); +var printWarning = function() {}; + +if (process.env.NODE_ENV !== 'production') { + printWarning = function(text) { + var message = 'Warning: ' + text; + if (typeof console !== 'undefined') { + console.error(message); + } + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; +} + +function emptyFunctionThatReturnsNull() { + return null; +} + +var factoryWithTypeCheckers = function(isValidElement, throwOnDirectAccess) { + /* global Symbol */ + var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; + var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. + + /** + * Returns the iterator method function contained on the iterable object. + * + * Be sure to invoke the function with the iterable as context: + * + * var iteratorFn = getIteratorFn(myIterable); + * if (iteratorFn) { + * var iterator = iteratorFn.call(myIterable); + * ... + * } + * + * @param {?object} maybeIterable + * @return {?function} + */ + function getIteratorFn(maybeIterable) { + var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); + if (typeof iteratorFn === 'function') { + return iteratorFn; + } + } + + /** + * Collection of methods that allow declaration and validation of props that are + * supplied to React components. Example usage: + * + * var Props = require('ReactPropTypes'); + * var MyArticle = React.createClass({ + * propTypes: { + * // An optional string prop named "description". + * description: Props.string, + * + * // A required enum prop named "category". + * category: Props.oneOf(['News','Photos']).isRequired, + * + * // A prop named "dialog" that requires an instance of Dialog. + * dialog: Props.instanceOf(Dialog).isRequired + * }, + * render: function() { ... } + * }); + * + * A more formal specification of how these methods are used: + * + * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) + * decl := ReactPropTypes.{type}(.isRequired)? + * + * Each and every declaration produces a function with the same signature. This + * allows the creation of custom validation functions. For example: + * + * var MyLink = React.createClass({ + * propTypes: { + * // An optional string or URI prop named "href". + * href: function(props, propName, componentName) { + * var propValue = props[propName]; + * if (propValue != null && typeof propValue !== 'string' && + * !(propValue instanceof URI)) { + * return new Error( + * 'Expected a string or an URI for ' + propName + ' in ' + + * componentName + * ); + * } + * } + * }, + * render: function() {...} + * }); + * + * @internal + */ + + var ANONYMOUS = '<>'; + + // Important! + // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. + var ReactPropTypes = { + array: createPrimitiveTypeChecker('array'), + bool: createPrimitiveTypeChecker('boolean'), + func: createPrimitiveTypeChecker('function'), + number: createPrimitiveTypeChecker('number'), + object: createPrimitiveTypeChecker('object'), + string: createPrimitiveTypeChecker('string'), + symbol: createPrimitiveTypeChecker('symbol'), + + any: createAnyTypeChecker(), + arrayOf: createArrayOfTypeChecker, + element: createElementTypeChecker(), + elementType: createElementTypeTypeChecker(), + instanceOf: createInstanceTypeChecker, + node: createNodeChecker(), + objectOf: createObjectOfTypeChecker, + oneOf: createEnumTypeChecker, + oneOfType: createUnionTypeChecker, + shape: createShapeTypeChecker, + exact: createStrictShapeTypeChecker, + }; + + /** + * inlined Object.is polyfill to avoid requiring consumers ship their own + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is + */ + /*eslint-disable no-self-compare*/ + function is(x, y) { + // SameValue algorithm + if (x === y) { + // Steps 1-5, 7-10 + // Steps 6.b-6.e: +0 != -0 + return x !== 0 || 1 / x === 1 / y; + } else { + // Step 6.a: NaN == NaN + return x !== x && y !== y; + } + } + /*eslint-enable no-self-compare*/ + + /** + * We use an Error-like object for backward compatibility as people may call + * PropTypes directly and inspect their output. However, we don't use real + * Errors anymore. We don't inspect their stack anyway, and creating them + * is prohibitively expensive if they are created too often, such as what + * happens in oneOfType() for any type before the one that matched. + */ + function PropTypeError(message) { + this.message = message; + this.stack = ''; + } + // Make `instanceof Error` still work for returned errors. + PropTypeError.prototype = Error.prototype; + + function createChainableTypeChecker(validate) { + if (process.env.NODE_ENV !== 'production') { + var manualPropTypeCallCache = {}; + var manualPropTypeWarningCount = 0; + } + function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { + componentName = componentName || ANONYMOUS; + propFullName = propFullName || propName; + + if (secret !== ReactPropTypesSecret_1) { + if (throwOnDirectAccess) { + // New behavior only for users of `prop-types` package + var err = new Error( + 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + + 'Use `PropTypes.checkPropTypes()` to call them. ' + + 'Read more at http://fb.me/use-check-prop-types' + ); + err.name = 'Invariant Violation'; + throw err; + } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') { + // Old behavior for people using React.PropTypes + var cacheKey = componentName + ':' + propName; + if ( + !manualPropTypeCallCache[cacheKey] && + // Avoid spamming the console because they are often not actionable except for lib authors + manualPropTypeWarningCount < 3 + ) { + printWarning( + 'You are manually calling a React.PropTypes validation ' + + 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + + 'and will throw in the standalone `prop-types` package. ' + + 'You may be seeing this warning due to a third-party PropTypes ' + + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.' + ); + manualPropTypeCallCache[cacheKey] = true; + manualPropTypeWarningCount++; + } + } + } + if (props[propName] == null) { + if (isRequired) { + if (props[propName] === null) { + return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); + } + return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); + } + return null; + } else { + return validate(props, propName, componentName, location, propFullName); + } + } + + var chainedCheckType = checkType.bind(null, false); + chainedCheckType.isRequired = checkType.bind(null, true); + + return chainedCheckType; + } + + function createPrimitiveTypeChecker(expectedType) { + function validate(props, propName, componentName, location, propFullName, secret) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== expectedType) { + // `propValue` being instance of, say, date/regexp, pass the 'object' + // check, but we can offer a more precise error message here rather than + // 'of type `object`'. + var preciseType = getPreciseType(propValue); + + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createAnyTypeChecker() { + return createChainableTypeChecker(emptyFunctionThatReturnsNull); + } + + function createArrayOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + if (typeof typeChecker !== 'function') { + return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); + } + var propValue = props[propName]; + if (!Array.isArray(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); + } + for (var i = 0; i < propValue.length; i++) { + var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret_1); + if (error instanceof Error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createElementTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + if (!isValidElement(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createElementTypeTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + if (!reactIs.isValidElementType(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createInstanceTypeChecker(expectedClass) { + function validate(props, propName, componentName, location, propFullName) { + if (!(props[propName] instanceof expectedClass)) { + var expectedClassName = expectedClass.name || ANONYMOUS; + var actualClassName = getClassName(props[propName]); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createEnumTypeChecker(expectedValues) { + if (!Array.isArray(expectedValues)) { + if (process.env.NODE_ENV !== 'production') { + if (arguments.length > 1) { + printWarning( + 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + + 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).' + ); + } else { + printWarning('Invalid argument supplied to oneOf, expected an array.'); + } + } + return emptyFunctionThatReturnsNull; + } + + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + for (var i = 0; i < expectedValues.length; i++) { + if (is(propValue, expectedValues[i])) { + return null; + } + } + + var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { + var type = getPreciseType(value); + if (type === 'symbol') { + return String(value); + } + return value; + }); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); + } + return createChainableTypeChecker(validate); + } + + function createObjectOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + if (typeof typeChecker !== 'function') { + return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); + } + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); + } + for (var key in propValue) { + if (has(propValue, key)) { + var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1); + if (error instanceof Error) { + return error; + } + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createUnionTypeChecker(arrayOfTypeCheckers) { + if (!Array.isArray(arrayOfTypeCheckers)) { + process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0; + return emptyFunctionThatReturnsNull; + } + + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + if (typeof checker !== 'function') { + printWarning( + 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + + 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.' + ); + return emptyFunctionThatReturnsNull; + } + } + + function validate(props, propName, componentName, location, propFullName) { + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret_1) == null) { + return null; + } + } + + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); + } + return createChainableTypeChecker(validate); + } + + function createNodeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!isNode(props[propName])) { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + for (var key in shapeTypes) { + var checker = shapeTypes[key]; + if (!checker) { + continue; + } + var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1); + if (error) { + return error; + } + } + return null; + } + return createChainableTypeChecker(validate); + } + + function createStrictShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + // We need to check all keys in case some are required but missing from + // props. + var allKeys = objectAssign({}, props[propName], shapeTypes); + for (var key in allKeys) { + var checker = shapeTypes[key]; + if (!checker) { + return new PropTypeError( + 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + + '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + + '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ') + ); + } + var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1); + if (error) { + return error; + } + } + return null; + } + + return createChainableTypeChecker(validate); + } + + function isNode(propValue) { + switch (typeof propValue) { + case 'number': + case 'string': + case 'undefined': + return true; + case 'boolean': + return !propValue; + case 'object': + if (Array.isArray(propValue)) { + return propValue.every(isNode); + } + if (propValue === null || isValidElement(propValue)) { + return true; + } + + var iteratorFn = getIteratorFn(propValue); + if (iteratorFn) { + var iterator = iteratorFn.call(propValue); + var step; + if (iteratorFn !== propValue.entries) { + while (!(step = iterator.next()).done) { + if (!isNode(step.value)) { + return false; + } + } + } else { + // Iterator will provide entry [k,v] tuples rather than values. + while (!(step = iterator.next()).done) { + var entry = step.value; + if (entry) { + if (!isNode(entry[1])) { + return false; + } + } + } + } + } else { + return false; + } + + return true; + default: + return false; + } + } + + function isSymbol(propType, propValue) { + // Native Symbol. + if (propType === 'symbol') { + return true; + } + + // falsy value can't be a Symbol + if (!propValue) { + return false; + } + + // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' + if (propValue['@@toStringTag'] === 'Symbol') { + return true; + } + + // Fallback for non-spec compliant Symbols which are polyfilled. + if (typeof Symbol === 'function' && propValue instanceof Symbol) { + return true; + } + + return false; + } + + // Equivalent of `typeof` but with special handling for array and regexp. + function getPropType(propValue) { + var propType = typeof propValue; + if (Array.isArray(propValue)) { + return 'array'; + } + if (propValue instanceof RegExp) { + // Old webkits (at least until Android 4.0) return 'function' rather than + // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ + // passes PropTypes.object. + return 'object'; + } + if (isSymbol(propType, propValue)) { + return 'symbol'; + } + return propType; + } + + // This handles more types than `getPropType`. Only used for error messages. + // See `createPrimitiveTypeChecker`. + function getPreciseType(propValue) { + if (typeof propValue === 'undefined' || propValue === null) { + return '' + propValue; + } + var propType = getPropType(propValue); + if (propType === 'object') { + if (propValue instanceof Date) { + return 'date'; + } else if (propValue instanceof RegExp) { + return 'regexp'; + } + } + return propType; + } + + // Returns a string that is postfixed to a warning about an invalid type. + // For example, "undefined" or "of type array" + function getPostfixForTypeWarning(value) { + var type = getPreciseType(value); + switch (type) { + case 'array': + case 'object': + return 'an ' + type; + case 'boolean': + case 'date': + case 'regexp': + return 'a ' + type; + default: + return type; + } + } + + // Returns class name of the object, if any. + function getClassName(propValue) { + if (!propValue.constructor || !propValue.constructor.name) { + return ANONYMOUS; + } + return propValue.constructor.name; + } + + ReactPropTypes.checkPropTypes = checkPropTypes_1; + ReactPropTypes.resetWarningCache = checkPropTypes_1.resetWarningCache; + ReactPropTypes.PropTypes = ReactPropTypes; + + return ReactPropTypes; +}; + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + + +function emptyFunction() {} +function emptyFunctionWithReset() {} +emptyFunctionWithReset.resetWarningCache = emptyFunction; + +var factoryWithThrowingShims = function() { + function shim(props, propName, componentName, location, propFullName, secret) { + if (secret === ReactPropTypesSecret_1) { + // It is still safe when called from React. + return; + } + var err = new Error( + 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + + 'Use PropTypes.checkPropTypes() to call them. ' + + 'Read more at http://fb.me/use-check-prop-types' + ); + err.name = 'Invariant Violation'; + throw err; + } shim.isRequired = shim; + function getShim() { + return shim; + } // Important! + // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`. + var ReactPropTypes = { + array: shim, + bool: shim, + func: shim, + number: shim, + object: shim, + string: shim, + symbol: shim, + + any: shim, + arrayOf: getShim, + element: shim, + elementType: shim, + instanceOf: getShim, + node: shim, + objectOf: getShim, + oneOf: getShim, + oneOfType: getShim, + shape: getShim, + exact: getShim, + + checkPropTypes: emptyFunctionWithReset, + resetWarningCache: emptyFunction + }; + + ReactPropTypes.PropTypes = ReactPropTypes; + + return ReactPropTypes; +}; + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var propTypes = createCommonjsModule(function (module) { +if (process.env.NODE_ENV !== 'production') { + var ReactIs = reactIs; + + // By explicitly using `prop-types` you are opting into new development behavior. + // http://fb.me/prop-types-in-prod + var throwOnDirectAccess = true; + module.exports = factoryWithTypeCheckers(ReactIs.isElement, throwOnDirectAccess); +} else { + // By explicitly using `prop-types` you are opting into new production behavior. + // http://fb.me/prop-types-in-prod + module.exports = factoryWithThrowingShims(); +} +}); + +/*! + Copyright (c) 2017 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ + +var classnames = createCommonjsModule(function (module) { +/* global define */ + +(function () { + + var hasOwn = {}.hasOwnProperty; + + function classNames () { + var classes = []; + + for (var i = 0; i < arguments.length; i++) { + var arg = arguments[i]; + if (!arg) continue; + + var argType = typeof arg; + + if (argType === 'string' || argType === 'number') { + classes.push(arg); + } else if (Array.isArray(arg) && arg.length) { + var inner = classNames.apply(null, arg); + if (inner) { + classes.push(inner); + } + } else if (argType === 'object') { + for (var key in arg) { + if (hasOwn.call(arg, key) && arg[key]) { + classes.push(key); + } + } + } + } + + return classes.join(' '); + } + + if (module.exports) { + classNames.default = classNames; + module.exports = classNames; + } else { + window.classNames = classNames; + } +}()); +}); + +function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); +} + +const omitByKeys = (originalObject, keys) => { + var newObj = {}; + var objKeys = Object.keys(originalObject); + for (var i = 0; i < objKeys.length; i++) { + !keys.includes(objKeys[i]) && (newObj[objKeys[i]] = originalObject[objKeys[i]]); + } + return newObj +}; + +const pickByKeys = (originalObject, keys) => { + var newObj = {}; + for (var i = 0; i < keys.length; i++) { + newObj[keys[i]] = originalObject[keys[i]]; + } + return newObj +}; + +// for distribution properly exclude these keys for nested child HTML attributes +// since `react-transition-group` removes propTypes in production builds. + +var TransitionPropTypeKeys = ['in', 'mountOnEnter', 'unmountOnExit', 'appear', 'enter', 'exit', 'timeout', 'onEnter', 'onEntering', 'onEntered', 'onExit', 'onExiting', 'onExited']; +var CFadeProps = [].concat(TransitionPropTypeKeys, ['baseClass', 'baseClassActive', 'tag']); +propTypes.oneOfType([propTypes.string, propTypes.func, DOMElement, propTypes.shape({ + current: propTypes.any +})]); +var tagPropType = propTypes.oneOfType([propTypes.func, propTypes.string, propTypes.shape({ + $$typeof: propTypes.symbol, + render: propTypes.func +}), propTypes.arrayOf(propTypes.oneOfType([propTypes.func, propTypes.string, propTypes.shape({ + $$typeof: propTypes.symbol, + render: propTypes.func +})]))]); +function DOMElement(props, propName, componentName) { + if (!(props[propName] instanceof Element)) { + return new Error('Invalid prop `' + propName + '` supplied to `' + componentName + '`. Expected prop to be an instance of Element. Validation failed.'); + } +} + +function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); +} + +function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + _setPrototypeOf(subClass, superClass); +} + +var config = { + disabled: false +}; + +var timeoutsShape = process.env.NODE_ENV !== 'production' ? propTypes.oneOfType([propTypes.number, propTypes.shape({ + enter: propTypes.number, + exit: propTypes.number, + appear: propTypes.number +}).isRequired]) : null; +process.env.NODE_ENV !== 'production' ? propTypes.oneOfType([propTypes.string, propTypes.shape({ + enter: propTypes.string, + exit: propTypes.string, + active: propTypes.string +}), propTypes.shape({ + enter: propTypes.string, + enterDone: propTypes.string, + enterActive: propTypes.string, + exit: propTypes.string, + exitDone: propTypes.string, + exitActive: propTypes.string +})]) : null; + +var TransitionGroupContext = React__default['default'].createContext(null); + +var UNMOUNTED = 'unmounted'; +var EXITED = 'exited'; +var ENTERING = 'entering'; +var ENTERED = 'entered'; +var EXITING = 'exiting'; +/** + * The Transition component lets you describe a transition from one component + * state to another _over time_ with a simple declarative API. Most commonly + * it's used to animate the mounting and unmounting of a component, but can also + * be used to describe in-place transition states as well. + * + * --- + * + * **Note**: `Transition` is a platform-agnostic base component. If you're using + * transitions in CSS, you'll probably want to use + * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition) + * instead. It inherits all the features of `Transition`, but contains + * additional features necessary to play nice with CSS transitions (hence the + * name of the component). + * + * --- + * + * By default the `Transition` component does not alter the behavior of the + * component it renders, it only tracks "enter" and "exit" states for the + * components. It's up to you to give meaning and effect to those states. For + * example we can add styles to a component when it enters or exits: + * + * ```jsx + * import { Transition } from 'react-transition-group'; + * + * const duration = 300; + * + * const defaultStyle = { + * transition: `opacity ${duration}ms ease-in-out`, + * opacity: 0, + * } + * + * const transitionStyles = { + * entering: { opacity: 1 }, + * entered: { opacity: 1 }, + * exiting: { opacity: 0 }, + * exited: { opacity: 0 }, + * }; + * + * const Fade = ({ in: inProp }) => ( + * + * {state => ( + *
+ * I'm a fade Transition! + *
+ * )} + *
+ * ); + * ``` + * + * There are 4 main states a Transition can be in: + * - `'entering'` + * - `'entered'` + * - `'exiting'` + * - `'exited'` + * + * Transition state is toggled via the `in` prop. When `true` the component + * begins the "Enter" stage. During this stage, the component will shift from + * its current transition state, to `'entering'` for the duration of the + * transition and then to the `'entered'` stage once it's complete. Let's take + * the following example (we'll use the + * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook): + * + * ```jsx + * function App() { + * const [inProp, setInProp] = useState(false); + * return ( + *
+ * + * {state => ( + * // ... + * )} + * + * + *
+ * ); + * } + * ``` + * + * When the button is clicked the component will shift to the `'entering'` state + * and stay there for 500ms (the value of `timeout`) before it finally switches + * to `'entered'`. + * + * When `in` is `false` the same thing happens except the state moves from + * `'exiting'` to `'exited'`. + */ + +var Transition = /*#__PURE__*/function (_React$Component) { + _inheritsLoose(Transition, _React$Component); + + function Transition(props, context) { + var _this; + + _this = _React$Component.call(this, props, context) || this; + var parentGroup = context; // In the context of a TransitionGroup all enters are really appears + + var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear; + var initialStatus; + _this.appearStatus = null; + + if (props.in) { + if (appear) { + initialStatus = EXITED; + _this.appearStatus = ENTERING; + } else { + initialStatus = ENTERED; + } + } else { + if (props.unmountOnExit || props.mountOnEnter) { + initialStatus = UNMOUNTED; + } else { + initialStatus = EXITED; + } + } + + _this.state = { + status: initialStatus + }; + _this.nextCallback = null; + return _this; + } + + Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) { + var nextIn = _ref.in; + + if (nextIn && prevState.status === UNMOUNTED) { + return { + status: EXITED + }; + } + + return null; + } // getSnapshotBeforeUpdate(prevProps) { + // let nextStatus = null + // if (prevProps !== this.props) { + // const { status } = this.state + // if (this.props.in) { + // if (status !== ENTERING && status !== ENTERED) { + // nextStatus = ENTERING + // } + // } else { + // if (status === ENTERING || status === ENTERED) { + // nextStatus = EXITING + // } + // } + // } + // return { nextStatus } + // } + ; + + var _proto = Transition.prototype; + + _proto.componentDidMount = function componentDidMount() { + this.updateStatus(true, this.appearStatus); + }; + + _proto.componentDidUpdate = function componentDidUpdate(prevProps) { + var nextStatus = null; + + if (prevProps !== this.props) { + var status = this.state.status; + + if (this.props.in) { + if (status !== ENTERING && status !== ENTERED) { + nextStatus = ENTERING; + } + } else { + if (status === ENTERING || status === ENTERED) { + nextStatus = EXITING; + } + } + } + + this.updateStatus(false, nextStatus); + }; + + _proto.componentWillUnmount = function componentWillUnmount() { + this.cancelNextCallback(); + }; + + _proto.getTimeouts = function getTimeouts() { + var timeout = this.props.timeout; + var exit, enter, appear; + exit = enter = appear = timeout; + + if (timeout != null && typeof timeout !== 'number') { + exit = timeout.exit; + enter = timeout.enter; // TODO: remove fallback for next major + + appear = timeout.appear !== undefined ? timeout.appear : enter; + } + + return { + exit: exit, + enter: enter, + appear: appear + }; + }; + + _proto.updateStatus = function updateStatus(mounting, nextStatus) { + if (mounting === void 0) { + mounting = false; + } + + if (nextStatus !== null) { + // nextStatus will always be ENTERING or EXITING. + this.cancelNextCallback(); + + if (nextStatus === ENTERING) { + this.performEnter(mounting); + } else { + this.performExit(); + } + } else if (this.props.unmountOnExit && this.state.status === EXITED) { + this.setState({ + status: UNMOUNTED + }); + } + }; + + _proto.performEnter = function performEnter(mounting) { + var _this2 = this; + + var enter = this.props.enter; + var appearing = this.context ? this.context.isMounting : mounting; + + var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM__default['default'].findDOMNode(this), appearing], + maybeNode = _ref2[0], + maybeAppearing = _ref2[1]; + + var timeouts = this.getTimeouts(); + var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED + // if we are mounting and running this it means appear _must_ be set + + if (!mounting && !enter || config.disabled) { + this.safeSetState({ + status: ENTERED + }, function () { + _this2.props.onEntered(maybeNode); + }); + return; + } + + this.props.onEnter(maybeNode, maybeAppearing); + this.safeSetState({ + status: ENTERING + }, function () { + _this2.props.onEntering(maybeNode, maybeAppearing); + + _this2.onTransitionEnd(enterTimeout, function () { + _this2.safeSetState({ + status: ENTERED + }, function () { + _this2.props.onEntered(maybeNode, maybeAppearing); + }); + }); + }); + }; + + _proto.performExit = function performExit() { + var _this3 = this; + + var exit = this.props.exit; + var timeouts = this.getTimeouts(); + var maybeNode = this.props.nodeRef ? undefined : ReactDOM__default['default'].findDOMNode(this); // no exit animation skip right to EXITED + + if (!exit || config.disabled) { + this.safeSetState({ + status: EXITED + }, function () { + _this3.props.onExited(maybeNode); + }); + return; + } + + this.props.onExit(maybeNode); + this.safeSetState({ + status: EXITING + }, function () { + _this3.props.onExiting(maybeNode); + + _this3.onTransitionEnd(timeouts.exit, function () { + _this3.safeSetState({ + status: EXITED + }, function () { + _this3.props.onExited(maybeNode); + }); + }); + }); + }; + + _proto.cancelNextCallback = function cancelNextCallback() { + if (this.nextCallback !== null) { + this.nextCallback.cancel(); + this.nextCallback = null; + } + }; + + _proto.safeSetState = function safeSetState(nextState, callback) { + // This shouldn't be necessary, but there are weird race conditions with + // setState callbacks and unmounting in testing, so always make sure that + // we can cancel any pending setState callbacks after we unmount. + callback = this.setNextCallback(callback); + this.setState(nextState, callback); + }; + + _proto.setNextCallback = function setNextCallback(callback) { + var _this4 = this; + + var active = true; + + this.nextCallback = function (event) { + if (active) { + active = false; + _this4.nextCallback = null; + callback(event); + } + }; + + this.nextCallback.cancel = function () { + active = false; + }; + + return this.nextCallback; + }; + + _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) { + this.setNextCallback(handler); + var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM__default['default'].findDOMNode(this); + var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener; + + if (!node || doesNotHaveTimeoutOrListener) { + setTimeout(this.nextCallback, 0); + return; + } + + if (this.props.addEndListener) { + var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback], + maybeNode = _ref3[0], + maybeNextCallback = _ref3[1]; + + this.props.addEndListener(maybeNode, maybeNextCallback); + } + + if (timeout != null) { + setTimeout(this.nextCallback, timeout); + } + }; + + _proto.render = function render() { + var status = this.state.status; + + if (status === UNMOUNTED) { + return null; + } + + var _this$props = this.props, + children = _this$props.children; + _this$props.in; + _this$props.mountOnEnter; + _this$props.unmountOnExit; + _this$props.appear; + _this$props.enter; + _this$props.exit; + _this$props.timeout; + _this$props.addEndListener; + _this$props.onEnter; + _this$props.onEntering; + _this$props.onEntered; + _this$props.onExit; + _this$props.onExiting; + _this$props.onExited; + _this$props.nodeRef; + var childProps = _objectWithoutPropertiesLoose$1(_this$props, ["children", "in", "mountOnEnter", "unmountOnExit", "appear", "enter", "exit", "timeout", "addEndListener", "onEnter", "onEntering", "onEntered", "onExit", "onExiting", "onExited", "nodeRef"]); + + return ( + /*#__PURE__*/ + // allows for nested Transitions + React__default['default'].createElement(TransitionGroupContext.Provider, { + value: null + }, typeof children === 'function' ? children(status, childProps) : React__default['default'].cloneElement(React__default['default'].Children.only(children), childProps)) + ); + }; + + return Transition; +}(React__default['default'].Component); + +Transition.contextType = TransitionGroupContext; +Transition.propTypes = process.env.NODE_ENV !== "production" ? { + /** + * A React reference to DOM element that need to transition: + * https://stackoverflow.com/a/51127130/4671932 + * + * - When `nodeRef` prop is used, `node` is not passed to callback functions + * (e.g. `onEnter`) because user already has direct access to the node. + * - When changing `key` prop of `Transition` in a `TransitionGroup` a new + * `nodeRef` need to be provided to `Transition` with changed `key` prop + * (see + * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)). + */ + nodeRef: propTypes.shape({ + current: typeof Element === 'undefined' ? propTypes.any : propTypes.instanceOf(Element) + }), + + /** + * A `function` child can be used instead of a React element. This function is + * called with the current transition status (`'entering'`, `'entered'`, + * `'exiting'`, `'exited'`), which can be used to apply context + * specific props to a component. + * + * ```jsx + * + * {state => ( + * + * )} + * + * ``` + */ + children: propTypes.oneOfType([propTypes.func.isRequired, propTypes.element.isRequired]).isRequired, + + /** + * Show the component; triggers the enter or exit states + */ + in: propTypes.bool, + + /** + * By default the child component is mounted immediately along with + * the parent `Transition` component. If you want to "lazy mount" the component on the + * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay + * mounted, even on "exited", unless you also specify `unmountOnExit`. + */ + mountOnEnter: propTypes.bool, + + /** + * By default the child component stays mounted after it reaches the `'exited'` state. + * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting. + */ + unmountOnExit: propTypes.bool, + + /** + * By default the child component does not perform the enter transition when + * it first mounts, regardless of the value of `in`. If you want this + * behavior, set both `appear` and `in` to `true`. + * + * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop + * > only adds an additional enter transition. However, in the + * > `` component that first enter transition does result in + * > additional `.appear-*` classes, that way you can choose to style it + * > differently. + */ + appear: propTypes.bool, + + /** + * Enable or disable enter transitions. + */ + enter: propTypes.bool, + + /** + * Enable or disable exit transitions. + */ + exit: propTypes.bool, + + /** + * The duration of the transition, in milliseconds. + * Required unless `addEndListener` is provided. + * + * You may specify a single timeout for all transitions: + * + * ```jsx + * timeout={500} + * ``` + * + * or individually: + * + * ```jsx + * timeout={{ + * appear: 500, + * enter: 300, + * exit: 500, + * }} + * ``` + * + * - `appear` defaults to the value of `enter` + * - `enter` defaults to `0` + * - `exit` defaults to `0` + * + * @type {number | { enter?: number, exit?: number, appear?: number }} + */ + timeout: function timeout(props) { + var pt = timeoutsShape; + if (!props.addEndListener) pt = pt.isRequired; + + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + return pt.apply(void 0, [props].concat(args)); + }, + + /** + * Add a custom transition end trigger. Called with the transitioning + * DOM node and a `done` callback. Allows for more fine grained transition end + * logic. Timeouts are still used as a fallback if provided. + * + * **Note**: when `nodeRef` prop is passed, `node` is not passed. + * + * ```jsx + * addEndListener={(node, done) => { + * // use the css transitionend event to mark the finish of a transition + * node.addEventListener('transitionend', done, false); + * }} + * ``` + */ + addEndListener: propTypes.func, + + /** + * Callback fired before the "entering" status is applied. An extra parameter + * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount + * + * **Note**: when `nodeRef` prop is passed, `node` is not passed. + * + * @type Function(node: HtmlElement, isAppearing: bool) -> void + */ + onEnter: propTypes.func, + + /** + * Callback fired after the "entering" status is applied. An extra parameter + * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount + * + * **Note**: when `nodeRef` prop is passed, `node` is not passed. + * + * @type Function(node: HtmlElement, isAppearing: bool) + */ + onEntering: propTypes.func, + + /** + * Callback fired after the "entered" status is applied. An extra parameter + * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount + * + * **Note**: when `nodeRef` prop is passed, `node` is not passed. + * + * @type Function(node: HtmlElement, isAppearing: bool) -> void + */ + onEntered: propTypes.func, + + /** + * Callback fired before the "exiting" status is applied. + * + * **Note**: when `nodeRef` prop is passed, `node` is not passed. + * + * @type Function(node: HtmlElement) -> void + */ + onExit: propTypes.func, + + /** + * Callback fired after the "exiting" status is applied. + * + * **Note**: when `nodeRef` prop is passed, `node` is not passed. + * + * @type Function(node: HtmlElement) -> void + */ + onExiting: propTypes.func, + + /** + * Callback fired after the "exited" status is applied. + * + * **Note**: when `nodeRef` prop is passed, `node` is not passed + * + * @type Function(node: HtmlElement) -> void + */ + onExited: propTypes.func +} : {}; // Name the function so it is clearer in the documentation + +function noop() {} + +Transition.defaultProps = { + in: false, + mountOnEnter: false, + unmountOnExit: false, + appear: false, + enter: true, + exit: true, + onEnter: noop, + onEntering: noop, + onEntered: noop, + onExit: noop, + onExiting: noop, + onExited: noop +}; +Transition.UNMOUNTED = UNMOUNTED; +Transition.EXITED = EXITED; +Transition.ENTERING = ENTERING; +Transition.ENTERED = ENTERED; +Transition.EXITING = EXITING; + +var CFade = function CFade(props) { + var Tag = props.tag, + className = props.className, + children = props.children, + innerRef = props.innerRef, + baseClass = props.baseClass, + baseClassActive = props.baseClassActive, + rest = _objectWithoutProperties(props, ["tag", "className", "children", "innerRef", "baseClass", "baseClassActive"]); //render + + + var transitionProps = pickByKeys(rest, TransitionPropTypeKeys); + var childProps = omitByKeys(rest, TransitionPropTypeKeys); + var ref = _typeof(innerRef) === 'object' ? innerRef : React.useRef(); + typeof innerRef === 'function' && innerRef(ref); + return /*#__PURE__*/React__default['default'].createElement(Transition, _extends$1({}, transitionProps, { + nodeRef: ref + }), function (status) { + var isActive = status === 'entered'; + var classes = classnames(className, baseClass, isActive && baseClassActive); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, childProps, { + ref: ref + }), children); + }); +}; + +CFade.propTypes = { + tag: tagPropType, + children: propTypes.oneOfType([propTypes.arrayOf(propTypes.node), propTypes.node]), + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + baseClass: propTypes.string, + baseClassActive: propTypes.string +}; +CFade.defaultProps = { + tag: 'div', + // + baseClass: 'fade', + baseClassActive: 'show', + timeout: 150, + appear: true, + enter: true, + exit: true, + in: true +}; + +var CButtonClose = function CButtonClose(props) { + var children = props.children, + className = props.className, + buttonClass = props.buttonClass, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["children", "className", "buttonClass", "innerRef"]); //render + + + var classes = classnames(buttonClass, className); + return /*#__PURE__*/React__default['default'].createElement("button", _extends$1({ + className: classes, + "aria-label": "Close" + }, attributes, { + ref: innerRef + }), children || String.fromCharCode(215)); +}; + +CButtonClose.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + buttonClass: propTypes.string, + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CButtonClose.defaultProps = { + buttonClass: 'close' +}; + +var CAlert = function CAlert(props) { + var _classNames; + + var children = props.children, + className = props.className, + innerRef = props.innerRef, + onShowChange = props.onShowChange, + closeButton = props.closeButton, + color = props.color, + fade = props.fade, + show = props.show, + attributes = _objectWithoutProperties(props, ["children", "className", "innerRef", "onShowChange", "closeButton", "color", "fade", "show"]); //render + + + var classes = classnames(className, 'alert', (_classNames = {}, _defineProperty(_classNames, "alert-".concat(color), color), _defineProperty(_classNames, 'alert-dismissible', closeButton), _classNames)); + var alertTransition = { + baseClass: fade ? CFade.baseClass : '', + timeout: fade ? CFade.timeout : 0, + unmountOnExit: true + }; + + var _useState = React.useState(show), + _useState2 = _slicedToArray(_useState, 2), + isOpen = _useState2[0], + setIsOpen = _useState2[1]; + + React.useEffect(function () { + setIsOpen(show); + }, [show]); + var timeout = React.useRef(); + React.useEffect(function () { + onShowChange && onShowChange(isOpen); + clearTimeout(timeout.current); + + if (typeof isOpen === 'number' && isOpen > 0) { + timeout.current = setTimeout(function () { + setIsOpen(isOpen - 1); + }, 1000); + } + + return function () { + return clearTimeout(timeout.current); + }; + }, [isOpen]); + var attrs = omitByKeys(attributes, CFadeProps); + return /*#__PURE__*/React__default['default'].createElement(CFade, _extends$1({}, alertTransition, { + className: classes, + in: Boolean(isOpen), + role: "alert" + }, attrs, { + innerRef: innerRef + }), children, closeButton && /*#__PURE__*/React__default['default'].createElement(CButtonClose, { + onClick: function onClick() { + return setIsOpen(false); + } + })); +}; + +CAlert.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.object, propTypes.array]), + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + onShowChange: propTypes.func, + closeButton: propTypes.bool, + color: propTypes.string, + fade: propTypes.bool, + show: propTypes.oneOfType([propTypes.bool, propTypes.number]) +}; +CAlert.defaultProps = { + show: true, + fade: true +}; + +var _typeof_1 = createCommonjsModule(function (module) { +function _typeof(obj) { + "@babel/helpers - typeof"; + + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + module.exports = _typeof = function _typeof(obj) { + return typeof obj; + }; + } else { + module.exports = _typeof = function _typeof(obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); +} + +module.exports = _typeof; +}); + +function _getRequireWildcardCache$2() { + if (typeof WeakMap !== "function") return null; + var cache = new WeakMap(); + + _getRequireWildcardCache$2 = function _getRequireWildcardCache() { + return cache; + }; + + return cache; +} + +function _interopRequireWildcard$2(obj) { + if (obj && obj.__esModule) { + return obj; + } + + if (obj === null || _typeof_1(obj) !== "object" && typeof obj !== "function") { + return { + "default": obj + }; + } + + var cache = _getRequireWildcardCache$2(); + + if (cache && cache.has(obj)) { + return cache.get(obj); + } + + var newObj = {}; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + + newObj["default"] = obj; + + if (cache) { + cache.set(obj, newObj); + } + + return newObj; +} + +var interopRequireWildcard = _interopRequireWildcard$2; + +function _interopRequireDefault$2(obj) { + return obj && obj.__esModule ? obj : { + "default": obj + }; +} + +var interopRequireDefault = _interopRequireDefault$2; + +var normalizeTrailingSlash = createCommonjsModule(function (module, exports) { +exports.__esModule=true;exports.removePathTrailingSlash=removePathTrailingSlash;exports.normalizePathTrailingSlash=void 0;/** + * Removes the trailing slash of a path if there is one. Preserves the root path `/`. + */function removePathTrailingSlash(path){return path.endsWith('/')&&path!=='/'?path.slice(0,-1):path;}/** + * Normalizes the trailing slash of a path according to the `trailingSlash` option + * in `next.config.js`. + */const normalizePathTrailingSlash=process.env.__NEXT_TRAILING_SLASH?path=>{if(/\.[^/]+\/?$/.test(path)){return removePathTrailingSlash(path);}else if(path.endsWith('/')){return path;}else {return path+'/';}}:removePathTrailingSlash;exports.normalizePathTrailingSlash=normalizePathTrailingSlash; +//# sourceMappingURL=normalize-trailing-slash.js.map +}); + +var _default$4=getAssetPathFromRoute;// Translates a logical route into its pages asset path (relative from a common prefix) +// "asset path" being its javascript file, data file, prerendered html,... +function getAssetPathFromRoute(route,ext=''){const path=route==='/'?'/index':/^\/index(\/|$)/.test(route)?`/index${route}`:`${route}`;return path+ext;} + + +var getAssetPathFromRoute_1 = /*#__PURE__*/Object.defineProperty({ + default: _default$4 +}, '__esModule', {value: true}); + +var requestIdleCallback_1 = createCommonjsModule(function (module, exports) { +exports.__esModule=true;exports.cancelIdleCallback=exports.requestIdleCallback=void 0;const requestIdleCallback=typeof self!=='undefined'&&self.requestIdleCallback||function(cb){let start=Date.now();return setTimeout(function(){cb({didTimeout:false,timeRemaining:function(){return Math.max(0,50-(Date.now()-start));}});},1);};exports.requestIdleCallback=requestIdleCallback;const cancelIdleCallback=typeof self!=='undefined'&&self.cancelIdleCallback||function(id){return clearTimeout(id);};exports.cancelIdleCallback=cancelIdleCallback; +//# sourceMappingURL=request-idle-callback.js.map +}); + +var routeLoader = createCommonjsModule(function (module, exports) { +exports.__esModule=true;exports.markAssetError=markAssetError;exports.isAssetError=isAssetError;exports.getClientBuildManifest=getClientBuildManifest;exports.default=void 0;var _getAssetPathFromRoute=interopRequireDefault(getAssetPathFromRoute_1);// 3.8s was arbitrarily chosen as it's what https://web.dev/interactive +// considers as "Good" time-to-interactive. We must assume something went +// wrong beyond this point, and then fall-back to a full page transition to +// show the user something of value. +const MS_MAX_IDLE_DELAY=3800;function withFuture(key,map,generator){let entry=map.get(key);if(entry){if('future'in entry){return entry.future;}return Promise.resolve(entry);}let resolver;const prom=new Promise(resolve=>{resolver=resolve;});map.set(key,entry={resolve:resolver,future:prom});return generator?// eslint-disable-next-line no-sequences +generator().then(value=>(resolver(value),value)):prom;}function hasPrefetch(link){try{link=document.createElement('link');return(// detect IE11 since it supports prefetch but isn't detected +// with relList.support +!!window.MSInputMethodContext&&!!document.documentMode||link.relList.supports('prefetch'));}catch(_unused){return false;}}const canPrefetch=hasPrefetch();function prefetchViaDom(href,as,link){return new Promise((res,rej)=>{if(document.querySelector(`link[rel="prefetch"][href^="${href}"]`)){return res();}link=document.createElement('link');// The order of property assignment here is intentional: +if(as)link.as=as;link.rel=`prefetch`;link.crossOrigin=process.env.__NEXT_CROSS_ORIGIN;link.onload=res;link.onerror=rej;// `href` should always be last: +link.href=href;document.head.appendChild(link);});}const ASSET_LOAD_ERROR=Symbol('ASSET_LOAD_ERROR');// TODO: unexport +function markAssetError(err){return Object.defineProperty(err,ASSET_LOAD_ERROR,{});}function isAssetError(err){return err&&ASSET_LOAD_ERROR in err;}function appendScript(src,script){return new Promise((resolve,reject)=>{script=document.createElement('script');// The order of property assignment here is intentional. +// 1. Setup success/failure hooks in case the browser synchronously +// executes when `src` is set. +script.onload=resolve;script.onerror=()=>reject(markAssetError(new Error(`Failed to load script: ${src}`)));// 2. Configure the cross-origin attribute before setting `src` in case the +// browser begins to fetch. +script.crossOrigin=process.env.__NEXT_CROSS_ORIGIN;// 3. Finally, set the source and inject into the DOM in case the child +// must be appended for fetching to start. +script.src=src;document.body.appendChild(script);});}// Resolve a promise that times out after given amount of milliseconds. +function resolvePromiseWithTimeout(p,ms,err){return new Promise((resolve,reject)=>{let cancelled=false;p.then(r=>{// Resolved, cancel the timeout +cancelled=true;resolve(r);}).catch(reject);(0, requestIdleCallback_1.requestIdleCallback)(()=>setTimeout(()=>{if(!cancelled){reject(err);}},ms));});}// TODO: stop exporting or cache the failure +// It'd be best to stop exporting this. It's an implementation detail. We're +// only exporting it for backwards compatibilty with the `page-loader`. +// Only cache this response as a last resort if we cannot eliminate all other +// code branches that use the Build Manifest Callback and push them through +// the Route Loader interface. +function getClientBuildManifest(){if(self.__BUILD_MANIFEST){return Promise.resolve(self.__BUILD_MANIFEST);}const onBuildManifest=new Promise(resolve=>{// Mandatory because this is not concurrent safe: +const cb=self.__BUILD_MANIFEST_CB;self.__BUILD_MANIFEST_CB=()=>{resolve(self.__BUILD_MANIFEST);cb&&cb();};});return resolvePromiseWithTimeout(onBuildManifest,MS_MAX_IDLE_DELAY,markAssetError(new Error('Failed to load client build manifest')));}function getFilesForRoute(assetPrefix,route){if(process.env.NODE_ENV==='development'){return Promise.resolve({scripts:[assetPrefix+'/_next/static/chunks/pages'+encodeURI((0, _getAssetPathFromRoute.default)(route,'.js'))],// Styles are handled by `style-loader` in development: +css:[]});}return getClientBuildManifest().then(manifest=>{if(!(route in manifest)){throw markAssetError(new Error(`Failed to lookup route: ${route}`));}const allFiles=manifest[route].map(entry=>assetPrefix+'/_next/'+encodeURI(entry));return {scripts:allFiles.filter(v=>v.endsWith('.js')),css:allFiles.filter(v=>v.endsWith('.css'))};});}function createRouteLoader(assetPrefix){const entrypoints=new Map();const loadedScripts=new Map();const styleSheets=new Map();const routes=new Map();function maybeExecuteScript(src){let prom=loadedScripts.get(src);if(prom){return prom;}// Skip executing script if it's already in the DOM: +if(document.querySelector(`script[src^="${src}"]`)){return Promise.resolve();}loadedScripts.set(src,prom=appendScript(src));return prom;}function fetchStyleSheet(href){let prom=styleSheets.get(href);if(prom){return prom;}styleSheets.set(href,prom=fetch(href).then(res=>{if(!res.ok){throw new Error(`Failed to load stylesheet: ${href}`);}return res.text().then(text=>({href:href,content:text}));}).catch(err=>{throw markAssetError(err);}));return prom;}return {whenEntrypoint(route){return withFuture(route,entrypoints);},onEntrypoint(route,execute){Promise.resolve(execute).then(fn=>fn()).then(exports=>({component:exports&&exports.default||exports,exports:exports}),err=>({error:err})).then(input=>{const old=entrypoints.get(route);entrypoints.set(route,input);if(old&&'resolve'in old)old.resolve(input);});},loadRoute(route){return withFuture(route,routes,async()=>{try{const{scripts,css}=await getFilesForRoute(assetPrefix,route);const[,styles]=await Promise.all([entrypoints.has(route)?[]:Promise.all(scripts.map(maybeExecuteScript)),Promise.all(css.map(fetchStyleSheet))]);const entrypoint=await resolvePromiseWithTimeout(this.whenEntrypoint(route),MS_MAX_IDLE_DELAY,markAssetError(new Error(`Route did not complete loading: ${route}`)));const res=Object.assign({styles},entrypoint);return 'error'in entrypoint?entrypoint:res;}catch(err){return {error:err};}});},prefetch(route){// https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118 +// License: Apache 2.0 +let cn;if(cn=navigator.connection){// Don't prefetch if using 2G or if Save-Data is enabled. +if(cn.saveData||/2g/.test(cn.effectiveType))return Promise.resolve();}return getFilesForRoute(assetPrefix,route).then(output=>Promise.all(canPrefetch?output.scripts.map(script=>prefetchViaDom(script,'script')):[])).then(()=>{(0, requestIdleCallback_1.requestIdleCallback)(()=>this.loadRoute(route));}).catch(// swallow prefetch errors +()=>{});}};}var _default=createRouteLoader;exports.default=_default; +//# sourceMappingURL=route-loader.js.map +}); + +var normalizePathSep_1=normalizePathSep;var denormalizePagePath_2=denormalizePagePath;function normalizePathSep(path){return path.replace(/\\/g,'/');}function denormalizePagePath(page){page=normalizePathSep(page);if(page.startsWith('/index/')){page=page.slice(6);}else if(page==='/index'){page='/';}return page;} + + +var denormalizePagePath_1 = /*#__PURE__*/Object.defineProperty({ + normalizePathSep: normalizePathSep_1, + denormalizePagePath: denormalizePagePath_2 +}, '__esModule', {value: true}); + +var normalizeLocalePath_2=normalizeLocalePath;function normalizeLocalePath(pathname,locales){let detectedLocale;// first item will be empty string from splitting at first char +const pathnameParts=pathname.split('/');(locales||[]).some(locale=>{if(pathnameParts[1].toLowerCase()===locale.toLowerCase()){detectedLocale=locale;pathnameParts.splice(1,1);pathname=pathnameParts.join('/')||'/';return true;}return false;});return {pathname,detectedLocale};} + + +var normalizeLocalePath_1 = /*#__PURE__*/Object.defineProperty({ + normalizeLocalePath: normalizeLocalePath_2 +}, '__esModule', {value: true}); + +var _default$3=mitt;/* +MIT License + +Copyright (c) Jason Miller (https://jasonformat.com/) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ // This file is based on https://github.com/developit/mitt/blob/v1.1.3/src/index.js +// It's been edited for the needs of this script +// See the LICENSE at the top of the file +function mitt(){const all=Object.create(null);return {on(type,handler){(all[type]||(all[type]=[])).push(handler);},off(type,handler){if(all[type]){all[type].splice(all[type].indexOf(handler)>>>0,1);}},emit(type,...evts){// eslint-disable-next-line array-callback-return +(all[type]||[]).slice().map(handler=>{handler(...evts);});}};} + + +var mitt_1 = /*#__PURE__*/Object.defineProperty({ + default: _default$3 +}, '__esModule', {value: true}); + +var searchParamsToUrlQuery_1=searchParamsToUrlQuery;var urlQueryToSearchParams_1=urlQueryToSearchParams;var assign_1=assign;function searchParamsToUrlQuery(searchParams){const query={};searchParams.forEach((value,key)=>{if(typeof query[key]==='undefined'){query[key]=value;}else if(Array.isArray(query[key])){query[key].push(value);}else {query[key]=[query[key],value];}});return query;}function stringifyUrlQueryParam(param){if(typeof param==='string'||typeof param==='number'&&!isNaN(param)||typeof param==='boolean'){return String(param);}else {return '';}}function urlQueryToSearchParams(urlQuery){const result=new URLSearchParams();Object.entries(urlQuery).forEach(([key,value])=>{if(Array.isArray(value)){value.forEach(item=>result.append(key,stringifyUrlQueryParam(item)));}else {result.set(key,stringifyUrlQueryParam(value));}});return result;}function assign(target,...searchParamsList){searchParamsList.forEach(searchParams=>{Array.from(searchParams.keys()).forEach(key=>target.delete(key));searchParams.forEach((value,key)=>target.append(key,value));});return target;} + + +var querystring$1 = /*#__PURE__*/Object.defineProperty({ + searchParamsToUrlQuery: searchParamsToUrlQuery_1, + urlQueryToSearchParams: urlQueryToSearchParams_1, + assign: assign_1 +}, '__esModule', {value: true}); + +var formatUrl_2=formatUrl;var querystring=_interopRequireWildcard$1(querystring$1);function _getRequireWildcardCache$1(){if(typeof WeakMap!=="function")return null;var cache=new WeakMap();_getRequireWildcardCache$1=function(){return cache;};return cache;}function _interopRequireWildcard$1(obj){if(obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return {default:obj};}var cache=_getRequireWildcardCache$1();if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else {newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}// Format function modified from nodejs +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +const slashedProtocols=/https?|ftp|gopher|file/;function formatUrl(urlObj){let{auth,hostname}=urlObj;let protocol=urlObj.protocol||'';let pathname=urlObj.pathname||'';let hash=urlObj.hash||'';let query=urlObj.query||'';let host=false;auth=auth?encodeURIComponent(auth).replace(/%3A/i,':')+'@':'';if(urlObj.host){host=auth+urlObj.host;}else if(hostname){host=auth+(~hostname.indexOf(':')?`[${hostname}]`:hostname);if(urlObj.port){host+=':'+urlObj.port;}}if(query&&typeof query==='object'){query=String(querystring.urlQueryToSearchParams(query));}let search=urlObj.search||query&&`?${query}`||'';if(protocol&&protocol.substr(-1)!==':')protocol+=':';if(urlObj.slashes||(!protocol||slashedProtocols.test(protocol))&&host!==false){host='//'+(host||'');if(pathname&&pathname[0]!=='/')pathname='/'+pathname;}else if(!host){host='';}if(hash&&hash[0]!=='#')hash='#'+hash;if(search&&search[0]!=='?')search='?'+search;pathname=pathname.replace(/[?#]/g,encodeURIComponent);search=search.replace('#','%23');return `${protocol}${host}${pathname}${search}${hash}`;} + + +var formatUrl_1 = /*#__PURE__*/Object.defineProperty({ + formatUrl: formatUrl_2 +}, '__esModule', {value: true}); + +var utils = createCommonjsModule(function (module, exports) { +exports.__esModule=true;exports.execOnce=execOnce;exports.getLocationOrigin=getLocationOrigin;exports.getURL=getURL;exports.getDisplayName=getDisplayName;exports.isResSent=isResSent;exports.loadGetInitialProps=loadGetInitialProps;exports.formatWithValidation=formatWithValidation;exports.ST=exports.SP=exports.urlObjectKeys=void 0;/** + * Utils + */function execOnce(fn){let used=false;let result;return (...args)=>{if(!used){used=true;result=fn(...args);}return result;};}function getLocationOrigin(){const{protocol,hostname,port}=window.location;return `${protocol}//${hostname}${port?':'+port:''}`;}function getURL(){const{href}=window.location;const origin=getLocationOrigin();return href.substring(origin.length);}function getDisplayName(Component){return typeof Component==='string'?Component:Component.displayName||Component.name||'Unknown';}function isResSent(res){return res.finished||res.headersSent;}async function loadGetInitialProps(App,ctx){if(process.env.NODE_ENV!=='production'){var _App$prototype;if((_App$prototype=App.prototype)!=null&&_App$prototype.getInitialProps){const message=`"${getDisplayName(App)}.getInitialProps()" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`;throw new Error(message);}}// when called from _app `ctx` is nested in `ctx` +const res=ctx.res||ctx.ctx&&ctx.ctx.res;if(!App.getInitialProps){if(ctx.ctx&&ctx.Component){// @ts-ignore pageProps default +return {pageProps:await loadGetInitialProps(ctx.Component,ctx.ctx)};}return {};}const props=await App.getInitialProps(ctx);if(res&&isResSent(res)){return props;}if(!props){const message=`"${getDisplayName(App)}.getInitialProps()" should resolve to an object. But found "${props}" instead.`;throw new Error(message);}if(process.env.NODE_ENV!=='production'){if(Object.keys(props).length===0&&!ctx.ctx){console.warn(`${getDisplayName(App)} returned an empty object from \`getInitialProps\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`);}}return props;}const urlObjectKeys=['auth','hash','host','hostname','href','path','pathname','port','protocol','query','search','slashes'];exports.urlObjectKeys=urlObjectKeys;function formatWithValidation(url){if(process.env.NODE_ENV==='development'){if(url!==null&&typeof url==='object'){Object.keys(url).forEach(key=>{if(urlObjectKeys.indexOf(key)===-1){console.warn(`Unknown key passed via urlObject into url.format: ${key}`);}});}}return (0, formatUrl_1.formatUrl)(url);}const SP=typeof performance!=='undefined';exports.SP=SP;const ST=SP&&typeof performance.mark==='function'&&typeof performance.measure==='function';exports.ST=ST; +//# sourceMappingURL=utils.js.map +}); + +var isDynamicRoute_1=isDynamicRoute;// Identify /[param]/ in route string +const TEST_ROUTE=/\/\[[^/]+?\](?=\/|$)/;function isDynamicRoute(route){return TEST_ROUTE.test(route);} + + +var isDynamic = /*#__PURE__*/Object.defineProperty({ + isDynamicRoute: isDynamicRoute_1 +}, '__esModule', {value: true}); + +var parseRelativeUrl_2=parseRelativeUrl;/** + * Parses path-relative urls (e.g. `/hello/world?foo=bar`). If url isn't path-relative + * (e.g. `./hello`) then at least base must be. + * Absolute urls are rejected with one exception, in the browser, absolute urls that are on + * the current origin will be parsed as relative + */function parseRelativeUrl(url,base){const globalBase=new URL(typeof window==='undefined'?'http://n':(0, utils.getLocationOrigin)());const resolvedBase=base?new URL(base,globalBase):globalBase;const{pathname,searchParams,search,hash,href,origin}=new URL(url,resolvedBase);if(origin!==globalBase.origin){throw new Error(`invariant: invalid relative URL, router received ${url}`);}return {pathname,query:(0, querystring$1.searchParamsToUrlQuery)(searchParams),search,hash,href:href.slice(globalBase.origin.length)};} + + +var parseRelativeUrl_1 = /*#__PURE__*/Object.defineProperty({ + parseRelativeUrl: parseRelativeUrl_2 +}, '__esModule', {value: true}); + +/** + * Tokenize input string. + */ +function lexer$1(str) { + var tokens = []; + var i = 0; + while (i < str.length) { + var char = str[i]; + if (char === "*" || char === "+" || char === "?") { + tokens.push({ type: "MODIFIER", index: i, value: str[i++] }); + continue; + } + if (char === "\\") { + tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] }); + continue; + } + if (char === "{") { + tokens.push({ type: "OPEN", index: i, value: str[i++] }); + continue; + } + if (char === "}") { + tokens.push({ type: "CLOSE", index: i, value: str[i++] }); + continue; + } + if (char === ":") { + var name = ""; + var j = i + 1; + while (j < str.length) { + var code = str.charCodeAt(j); + if ( + // `0-9` + (code >= 48 && code <= 57) || + // `A-Z` + (code >= 65 && code <= 90) || + // `a-z` + (code >= 97 && code <= 122) || + // `_` + code === 95) { + name += str[j++]; + continue; + } + break; + } + if (!name) + throw new TypeError("Missing parameter name at " + i); + tokens.push({ type: "NAME", index: i, value: name }); + i = j; + continue; + } + if (char === "(") { + var count = 1; + var pattern = ""; + var j = i + 1; + if (str[j] === "?") { + throw new TypeError("Pattern cannot start with \"?\" at " + j); + } + while (j < str.length) { + if (str[j] === "\\") { + pattern += str[j++] + str[j++]; + continue; + } + if (str[j] === ")") { + count--; + if (count === 0) { + j++; + break; + } + } + else if (str[j] === "(") { + count++; + if (str[j + 1] !== "?") { + throw new TypeError("Capturing groups are not allowed at " + j); + } + } + pattern += str[j++]; + } + if (count) + throw new TypeError("Unbalanced pattern at " + i); + if (!pattern) + throw new TypeError("Missing pattern at " + i); + tokens.push({ type: "PATTERN", index: i, value: pattern }); + i = j; + continue; + } + tokens.push({ type: "CHAR", index: i, value: str[i++] }); + } + tokens.push({ type: "END", index: i, value: "" }); + return tokens; +} +/** + * Parse a string for the raw tokens. + */ +function parse$1(str, options) { + if (options === void 0) { options = {}; } + var tokens = lexer$1(str); + var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; + var defaultPattern = "[^" + escapeString$1(options.delimiter || "/#?") + "]+?"; + var result = []; + var key = 0; + var i = 0; + var path = ""; + var tryConsume = function (type) { + if (i < tokens.length && tokens[i].type === type) + return tokens[i++].value; + }; + var mustConsume = function (type) { + var value = tryConsume(type); + if (value !== undefined) + return value; + var _a = tokens[i], nextType = _a.type, index = _a.index; + throw new TypeError("Unexpected " + nextType + " at " + index + ", expected " + type); + }; + var consumeText = function () { + var result = ""; + var value; + // tslint:disable-next-line + while ((value = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR"))) { + result += value; + } + return result; + }; + while (i < tokens.length) { + var char = tryConsume("CHAR"); + var name = tryConsume("NAME"); + var pattern = tryConsume("PATTERN"); + if (name || pattern) { + var prefix = char || ""; + if (prefixes.indexOf(prefix) === -1) { + path += prefix; + prefix = ""; + } + if (path) { + result.push(path); + path = ""; + } + result.push({ + name: name || key++, + prefix: prefix, + suffix: "", + pattern: pattern || defaultPattern, + modifier: tryConsume("MODIFIER") || "" + }); + continue; + } + var value = char || tryConsume("ESCAPED_CHAR"); + if (value) { + path += value; + continue; + } + if (path) { + result.push(path); + path = ""; + } + var open = tryConsume("OPEN"); + if (open) { + var prefix = consumeText(); + var name_1 = tryConsume("NAME") || ""; + var pattern_1 = tryConsume("PATTERN") || ""; + var suffix = consumeText(); + mustConsume("CLOSE"); + result.push({ + name: name_1 || (pattern_1 ? key++ : ""), + pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, + prefix: prefix, + suffix: suffix, + modifier: tryConsume("MODIFIER") || "" + }); + continue; + } + mustConsume("END"); + } + return result; +} +var parse_1 = parse$1; +/** + * Compile a string to a template function for the path. + */ +function compile(str, options) { + return tokensToFunction(parse$1(str, options), options); +} +var compile_1 = compile; +/** + * Expose a method for transforming tokens into the path function. + */ +function tokensToFunction(tokens, options) { + if (options === void 0) { options = {}; } + var reFlags = flags$1(options); + var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b; + // Compile all the tokens into regexps. + var matches = tokens.map(function (token) { + if (typeof token === "object") { + return new RegExp("^(?:" + token.pattern + ")$", reFlags); + } + }); + return function (data) { + var path = ""; + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + if (typeof token === "string") { + path += token; + continue; + } + var value = data ? data[token.name] : undefined; + var optional = token.modifier === "?" || token.modifier === "*"; + var repeat = token.modifier === "*" || token.modifier === "+"; + if (Array.isArray(value)) { + if (!repeat) { + throw new TypeError("Expected \"" + token.name + "\" to not repeat, but got an array"); + } + if (value.length === 0) { + if (optional) + continue; + throw new TypeError("Expected \"" + token.name + "\" to not be empty"); + } + for (var j = 0; j < value.length; j++) { + var segment = encode(value[j], token); + if (validate && !matches[i].test(segment)) { + throw new TypeError("Expected all \"" + token.name + "\" to match \"" + token.pattern + "\", but got \"" + segment + "\""); + } + path += token.prefix + segment + token.suffix; + } + continue; + } + if (typeof value === "string" || typeof value === "number") { + var segment = encode(String(value), token); + if (validate && !matches[i].test(segment)) { + throw new TypeError("Expected \"" + token.name + "\" to match \"" + token.pattern + "\", but got \"" + segment + "\""); + } + path += token.prefix + segment + token.suffix; + continue; + } + if (optional) + continue; + var typeOfMessage = repeat ? "an array" : "a string"; + throw new TypeError("Expected \"" + token.name + "\" to be " + typeOfMessage); + } + return path; + }; +} +var tokensToFunction_1 = tokensToFunction; +/** + * Create path match function from `path-to-regexp` spec. + */ +function match(str, options) { + var keys = []; + var re = pathToRegexp$1(str, keys, options); + return regexpToFunction(re, keys, options); +} +var match_1 = match; +/** + * Create a path match function from `path-to-regexp` output. + */ +function regexpToFunction(re, keys, options) { + if (options === void 0) { options = {}; } + var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a; + return function (pathname) { + var m = re.exec(pathname); + if (!m) + return false; + var path = m[0], index = m.index; + var params = Object.create(null); + var _loop_1 = function (i) { + // tslint:disable-next-line + if (m[i] === undefined) + return "continue"; + var key = keys[i - 1]; + if (key.modifier === "*" || key.modifier === "+") { + params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) { + return decode(value, key); + }); + } + else { + params[key.name] = decode(m[i], key); + } + }; + for (var i = 1; i < m.length; i++) { + _loop_1(i); + } + return { path: path, index: index, params: params }; + }; +} +var regexpToFunction_1 = regexpToFunction; +/** + * Escape a regular expression string. + */ +function escapeString$1(str) { + return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); +} +/** + * Get the flags for a regexp from the options. + */ +function flags$1(options) { + return options && options.sensitive ? "" : "i"; +} +/** + * Pull out keys from a regexp. + */ +function regexpToRegexp$1(path, keys) { + if (!keys) + return path; + // Use a negative lookahead to match only capturing groups. + var groups = path.source.match(/\((?!\?)/g); + if (groups) { + for (var i = 0; i < groups.length; i++) { + keys.push({ + name: i, + prefix: "", + suffix: "", + modifier: "", + pattern: "" + }); + } + } + return path; +} +/** + * Transform an array into a regexp. + */ +function arrayToRegexp$1(paths, keys, options) { + var parts = paths.map(function (path) { return pathToRegexp$1(path, keys, options).source; }); + return new RegExp("(?:" + parts.join("|") + ")", flags$1(options)); +} +/** + * Create a path regexp from string input. + */ +function stringToRegexp$1(path, keys, options) { + return tokensToRegexp$1(parse$1(path, options), keys, options); +} +/** + * Expose a function for taking tokens and returning a RegExp. + */ +function tokensToRegexp$1(tokens, keys, options) { + if (options === void 0) { options = {}; } + var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d; + var endsWith = "[" + escapeString$1(options.endsWith || "") + "]|$"; + var delimiter = "[" + escapeString$1(options.delimiter || "/#?") + "]"; + var route = start ? "^" : ""; + // Iterate over the tokens and create our regexp string. + for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { + var token = tokens_1[_i]; + if (typeof token === "string") { + route += escapeString$1(encode(token)); + } + else { + var prefix = escapeString$1(encode(token.prefix)); + var suffix = escapeString$1(encode(token.suffix)); + if (token.pattern) { + if (keys) + keys.push(token); + if (prefix || suffix) { + if (token.modifier === "+" || token.modifier === "*") { + var mod = token.modifier === "*" ? "?" : ""; + route += "(?:" + prefix + "((?:" + token.pattern + ")(?:" + suffix + prefix + "(?:" + token.pattern + "))*)" + suffix + ")" + mod; + } + else { + route += "(?:" + prefix + "(" + token.pattern + ")" + suffix + ")" + token.modifier; + } + } + else { + route += "(" + token.pattern + ")" + token.modifier; + } + } + else { + route += "(?:" + prefix + suffix + ")" + token.modifier; + } + } + } + if (end) { + if (!strict) + route += delimiter + "?"; + route += !options.endsWith ? "$" : "(?=" + endsWith + ")"; + } + else { + var endToken = tokens[tokens.length - 1]; + var isEndDelimited = typeof endToken === "string" + ? delimiter.indexOf(endToken[endToken.length - 1]) > -1 + : // tslint:disable-next-line + endToken === undefined; + if (!strict) { + route += "(?:" + delimiter + "(?=" + endsWith + "))?"; + } + if (!isEndDelimited) { + route += "(?=" + delimiter + "|" + endsWith + ")"; + } + } + return new RegExp(route, flags$1(options)); +} +var tokensToRegexp_1 = tokensToRegexp$1; +/** + * Normalize the given path string, returning a regular expression. + * + * An empty array can be passed in for the keys, which will hold the + * placeholder key descriptions. For example, using `/user/:id`, `keys` will + * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + */ +function pathToRegexp$1(path, keys, options) { + if (path instanceof RegExp) + return regexpToRegexp$1(path, keys); + if (Array.isArray(path)) + return arrayToRegexp$1(path, keys, options); + return stringToRegexp$1(path, keys, options); +} +var pathToRegexp_2 = pathToRegexp$1; + + +var pathToRegexp_1 = /*#__PURE__*/Object.defineProperty({ + parse: parse_1, + compile: compile_1, + tokensToFunction: tokensToFunction_1, + match: match_1, + regexpToFunction: regexpToFunction_1, + tokensToRegexp: tokensToRegexp_1, + pathToRegexp: pathToRegexp_2 +}, '__esModule', {value: true}); + +var pathMatch = createCommonjsModule(function (module, exports) { +exports.__esModule=true;exports.pathToRegexp=exports.default=exports.customRouteMatcherOptions=exports.matcherOptions=void 0;var pathToRegexp=_interopRequireWildcard(pathToRegexp_1);exports.pathToRegexp=pathToRegexp;function _getRequireWildcardCache(){if(typeof WeakMap!=="function")return null;var cache=new WeakMap();_getRequireWildcardCache=function(){return cache;};return cache;}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return {default:obj};}var cache=_getRequireWildcardCache();if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else {newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}const matcherOptions={sensitive:false,delimiter:'/'};exports.matcherOptions=matcherOptions;const customRouteMatcherOptions={...matcherOptions,strict:true};exports.customRouteMatcherOptions=customRouteMatcherOptions;var _default=(customRoute=false)=>{return path=>{const keys=[];const matcherRegex=pathToRegexp.pathToRegexp(path,keys,customRoute?customRouteMatcherOptions:matcherOptions);const matcher=pathToRegexp.regexpToFunction(matcherRegex,keys);return (pathname,params)=>{const res=pathname==null?false:matcher(pathname);if(!res){return false;}if(customRoute){for(const key of keys){// unnamed params should be removed as they +// are not allowed to be used in the destination +if(typeof key.name==='number'){delete res.params[key.name];}}}return {...params,...res.params};};};};exports.default=_default; +//# sourceMappingURL=path-match.js.map +}); + +var prepareDestination_1 = createCommonjsModule(function (module, exports) { +exports.__esModule=true;exports.matchHas=matchHas;exports.compileNonPath=compileNonPath;exports.default=prepareDestination;exports.getSafeParamName=void 0;var pathToRegexp=_interopRequireWildcard(pathToRegexp_1);function _getRequireWildcardCache(){if(typeof WeakMap!=="function")return null;var cache=new WeakMap();_getRequireWildcardCache=function(){return cache;};return cache;}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return {default:obj};}var cache=_getRequireWildcardCache();if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else {newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}// ensure only a-zA-Z are used for param names for proper interpolating +// with path-to-regexp +const getSafeParamName=paramName=>{let newParamName='';for(let i=0;i64&&charCode<91||// A-Z +charCode>96&&charCode<123// a-z +){newParamName+=paramName[i];}}return newParamName;};exports.getSafeParamName=getSafeParamName;function matchHas(req,has,query){const params={};const allMatch=has.every(hasItem=>{let value;let key=hasItem.key;switch(hasItem.type){case'header':{key=key.toLowerCase();value=req.headers[key];break;}case'cookie':{value=req.cookies[hasItem.key];break;}case'query':{value=query[key];break;}case'host':{const{host}=(req==null?void 0:req.headers)||{};// remove port from host if present +const hostname=host==null?void 0:host.split(':')[0].toLowerCase();value=hostname;break;}}if(!hasItem.value&&value){params[getSafeParamName(key)]=value;return true;}else if(value){const matcher=new RegExp(`^${hasItem.value}$`);const matches=value.match(matcher);if(matches){if(matches.groups){Object.keys(matches.groups).forEach(groupKey=>{const safeKey=getSafeParamName(groupKey);if(safeKey&&matches.groups[groupKey]){params[safeKey]=matches.groups[groupKey];}});}else {params[getSafeParamName(key||'host')]=matches[0];}return true;}}return false;});if(allMatch){return params;}return false;}function compileNonPath(value,params){if(!value.includes(':')){return value;}for(const key of Object.keys(params)){if(value.includes(`:${key}`)){value=value.replace(new RegExp(`:${key}\\*`,'g'),`:${key}--ESCAPED_PARAM_ASTERISKS`).replace(new RegExp(`:${key}\\?`,'g'),`:${key}--ESCAPED_PARAM_QUESTION`).replace(new RegExp(`:${key}\\+`,'g'),`:${key}--ESCAPED_PARAM_PLUS`).replace(new RegExp(`:${key}(?!\\w)`,'g'),`--ESCAPED_PARAM_COLON${key}`);}}value=value.replace(/(:|\*|\?|\+|\(|\)|\{|\})/g,'\\$1').replace(/--ESCAPED_PARAM_PLUS/g,'+').replace(/--ESCAPED_PARAM_COLON/g,':').replace(/--ESCAPED_PARAM_QUESTION/g,'?').replace(/--ESCAPED_PARAM_ASTERISKS/g,'*');// the value needs to start with a forward-slash to be compiled +// correctly +return pathToRegexp.compile(`/${value}`,{validate:false})(params).substr(1);}function prepareDestination(destination,params,query,appendParamsToQuery){let parsedDestination={};// clone query so we don't modify the original +query=Object.assign({},query);const hadLocale=query.__nextLocale;delete query.__nextLocale;delete query.__nextDefaultLocale;if(destination.startsWith('/')){parsedDestination=(0, parseRelativeUrl_1.parseRelativeUrl)(destination);}else {const{pathname,searchParams,hash,hostname,port,protocol,search,href}=new URL(destination);parsedDestination={pathname,query:(0, querystring$1.searchParamsToUrlQuery)(searchParams),hash,protocol,hostname,port,search,href};}const destQuery=parsedDestination.query;const destPath=`${parsedDestination.pathname}${parsedDestination.hash||''}`;const destPathParamKeys=[];pathToRegexp.pathToRegexp(destPath,destPathParamKeys);const destPathParams=destPathParamKeys.map(key=>key.name);let destinationCompiler=pathToRegexp.compile(destPath,// we don't validate while compiling the destination since we should +// have already validated before we got to this point and validating +// breaks compiling destinations with named pattern params from the source +// e.g. /something:hello(.*) -> /another/:hello is broken with validation +// since compile validation is meant for reversing and not for inserting +// params from a separate path-regex into another +{validate:false});let newUrl;// update any params in query values +for(const[key,strOrArray]of Object.entries(destQuery)){let value=Array.isArray(strOrArray)?strOrArray[0]:strOrArray;if(value){// the value needs to start with a forward-slash to be compiled +// correctly +value=compileNonPath(value,params);}destQuery[key]=value;}// add path params to query if it's not a redirect and not +// already defined in destination query or path +let paramKeys=Object.keys(params);// remove internal param for i18n +if(hadLocale){paramKeys=paramKeys.filter(name=>name!=='nextInternalLocale');}if(appendParamsToQuery&&!paramKeys.some(key=>destPathParams.includes(key))){for(const key of paramKeys){if(!(key in destQuery)){destQuery[key]=params[key];}}}try{newUrl=destinationCompiler(params);const[pathname,hash]=newUrl.split('#');parsedDestination.pathname=pathname;parsedDestination.hash=`${hash?'#':''}${hash||''}`;delete parsedDestination.search;}catch(err){if(err.message.match(/Expected .*? to not repeat, but got an array/)){throw new Error(`To use a multi-match in the destination you must add \`*\` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match`);}throw err;}// Query merge order lowest priority to highest +// 1. initial URL query values +// 2. path segment values +// 3. destination specified query values +parsedDestination.query={...query,...parsedDestination.query};return {newUrl,parsedDestination};} +//# sourceMappingURL=prepare-destination.js.map +}); + +var _default$2=resolveRewrites;var _pathMatch=_interopRequireDefault$1(pathMatch);var _prepareDestination=_interopRequireWildcard(prepareDestination_1);function _getRequireWildcardCache(){if(typeof WeakMap!=="function")return null;var cache=new WeakMap();_getRequireWildcardCache=function(){return cache;};return cache;}function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return {default:obj};}var cache=_getRequireWildcardCache();if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else {newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}function _interopRequireDefault$1(obj){return obj&&obj.__esModule?obj:{default:obj};}const customRouteMatcher=(0, _pathMatch.default)(true);function resolveRewrites(asPath,pages,rewrites,query,resolveHref,locales){let matchedPage=false;let parsedAs=(0, parseRelativeUrl_1.parseRelativeUrl)(asPath);let fsPathname=(0, normalizeTrailingSlash.removePathTrailingSlash)((0, normalizeLocalePath_1.normalizeLocalePath)((0, router$2.delBasePath)(parsedAs.pathname),locales).pathname);let resolvedHref;const handleRewrite=rewrite=>{const matcher=customRouteMatcher(rewrite.source);let params=matcher(parsedAs.pathname);if(rewrite.has&¶ms){const hasParams=(0, _prepareDestination.matchHas)({headers:{host:document.location.hostname},cookies:Object.fromEntries(document.cookie.split('; ').map(item=>{const[key,...value]=item.split('=');return [key,value.join('=')];}))},rewrite.has,parsedAs.query);if(hasParams){Object.assign(params,hasParams);}else {params=false;}}if(params){if(!rewrite.destination){// this is a proxied rewrite which isn't handled on the client +return true;}const destRes=(0, _prepareDestination.default)(rewrite.destination,params,query,true);parsedAs=destRes.parsedDestination;asPath=destRes.newUrl;Object.assign(query,destRes.parsedDestination.query);fsPathname=(0, normalizeTrailingSlash.removePathTrailingSlash)((0, normalizeLocalePath_1.normalizeLocalePath)((0, router$2.delBasePath)(asPath),locales).pathname);if(pages.includes(fsPathname)){// check if we now match a page as this means we are done +// resolving the rewrites +matchedPage=true;resolvedHref=fsPathname;return true;}// check if we match a dynamic-route, if so we break the rewrites chain +resolvedHref=resolveHref(fsPathname);if(resolvedHref!==asPath&&pages.includes(resolvedHref)){matchedPage=true;return true;}}};let finished=false;for(let i=0;i{const routeMatch=re.exec(pathname);if(!routeMatch){return false;}const decode=param=>{try{return decodeURIComponent(param);}catch(_){const err=new Error('failed to decode param');err.code='DECODE_FAILED';throw err;}};const params={};Object.keys(groups).forEach(slugName=>{const g=groups[slugName];const m=routeMatch[g.pos];if(m!==undefined){params[slugName]=~m.indexOf('/')?m.split('/').map(entry=>decode(entry)):g.repeat?[decode(m)]:decode(m);}});return params;};} + + +var routeMatcher = /*#__PURE__*/Object.defineProperty({ + getRouteMatcher: getRouteMatcher_1 +}, '__esModule', {value: true}); + +var getRouteRegex_1=getRouteRegex;// this isn't importing the escape-string-regex module +// to reduce bytes +function escapeRegex(str){return str.replace(/[|\\{}()[\]^$+*?.-]/g,'\\$&');}function parseParameter(param){const optional=param.startsWith('[')&¶m.endsWith(']');if(optional){param=param.slice(1,-1);}const repeat=param.startsWith('...');if(repeat){param=param.slice(3);}return {key:param,repeat,optional};}function getRouteRegex(normalizedRoute){const segments=(normalizedRoute.replace(/\/$/,'')||'/').slice(1).split('/');const groups={};let groupIndex=1;const parameterizedRoute=segments.map(segment=>{if(segment.startsWith('[')&&segment.endsWith(']')){const{key,optional,repeat}=parseParameter(segment.slice(1,-1));groups[key]={pos:groupIndex++,repeat,optional};return repeat?optional?'(?:/(.+?))?':'/(.+?)':'/([^/]+?)';}else {return `/${escapeRegex(segment)}`;}}).join('');// dead code eliminate for browser since it's only needed +// while generating routes-manifest +if(typeof window==='undefined'){let routeKeyCharCode=97;let routeKeyCharLength=1;// builds a minimal routeKey using only a-z and minimal number of characters +const getSafeRouteKey=()=>{let routeKey='';for(let i=0;i122){routeKeyCharLength++;routeKeyCharCode=97;}}return routeKey;};const routeKeys={};let namedParameterizedRoute=segments.map(segment=>{if(segment.startsWith('[')&&segment.endsWith(']')){const{key,optional,repeat}=parseParameter(segment.slice(1,-1));// replace any non-word characters since they can break +// the named regex +let cleanedKey=key.replace(/\W/g,'');let invalidKey=false;// check if the key is still invalid and fallback to using a known +// safe key +if(cleanedKey.length===0||cleanedKey.length>30){invalidKey=true;}if(!isNaN(parseInt(cleanedKey.substr(0,1)))){invalidKey=true;}if(invalidKey){cleanedKey=getSafeRouteKey();}routeKeys[cleanedKey]=key;return repeat?optional?`(?:/(?<${cleanedKey}>.+?))?`:`/(?<${cleanedKey}>.+?)`:`/(?<${cleanedKey}>[^/]+?)`;}else {return `/${escapeRegex(segment)}`;}}).join('');return {re:new RegExp(`^${parameterizedRoute}(?:/)?$`),groups,routeKeys,namedRegex:`^${namedParameterizedRoute}(?:/)?$`};}return {re:new RegExp(`^${parameterizedRoute}(?:/)?$`),groups};} + + +var routeRegex = /*#__PURE__*/Object.defineProperty({ + getRouteRegex: getRouteRegex_1 +}, '__esModule', {value: true}); + +var detectDomainLocale_2=detectDomainLocale;function detectDomainLocale(domainItems,hostname,detectedLocale){let domainItem;if(domainItems){if(detectedLocale){detectedLocale=detectedLocale.toLowerCase();}for(const item of domainItems){var _item$domain,_item$locales;// remove port if present +const domainHostname=(_item$domain=item.domain)==null?void 0:_item$domain.split(':')[0].toLowerCase();if(hostname===domainHostname||detectedLocale===item.defaultLocale.toLowerCase()||(_item$locales=item.locales)!=null&&_item$locales.some(locale=>locale.toLowerCase()===detectedLocale)){domainItem=item;break;}}}return domainItem;} + + +var detectDomainLocale_1 = /*#__PURE__*/Object.defineProperty({ + detectDomainLocale: detectDomainLocale_2 +}, '__esModule', {value: true}); + +var router$2 = createCommonjsModule(function (module, exports) { +exports.__esModule=true;exports.getDomainLocale=getDomainLocale;exports.addLocale=addLocale;exports.delLocale=delLocale;exports.hasBasePath=hasBasePath;exports.addBasePath=addBasePath;exports.delBasePath=delBasePath;exports.isLocalURL=isLocalURL;exports.interpolateAs=interpolateAs;exports.resolveHref=resolveHref;exports.default=void 0;var _mitt=_interopRequireDefault(mitt_1);var _resolveRewrites=_interopRequireDefault(resolveRewrites_1);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/* global __NEXT_DATA__ */ // tslint:disable:no-console +let detectDomainLocale;if(process.env.__NEXT_I18N_SUPPORT){detectDomainLocale=detectDomainLocale_1.detectDomainLocale;}const basePath=process.env.__NEXT_ROUTER_BASEPATH||'';function buildCancellationError(){return Object.assign(new Error('Route Cancelled'),{cancelled:true});}function addPathPrefix(path,prefix){return prefix&&path.startsWith('/')?path==='/'?(0, normalizeTrailingSlash.normalizePathTrailingSlash)(prefix):`${prefix}${pathNoQueryHash(path)==='/'?path.substring(1):path}`:path;}function getDomainLocale(path,locale,locales,domainLocales){if(process.env.__NEXT_I18N_SUPPORT){locale=locale||(0, normalizeLocalePath_1.normalizeLocalePath)(path,locales).detectedLocale;const detectedDomain=detectDomainLocale(domainLocales,undefined,locale);if(detectedDomain){return `http${detectedDomain.http?'':'s'}://${detectedDomain.domain}${basePath||''}${locale===detectedDomain.defaultLocale?'':`/${locale}`}${path}`;}return false;}return false;}function addLocale(path,locale,defaultLocale){if(process.env.__NEXT_I18N_SUPPORT){return locale&&locale!==defaultLocale&&!path.startsWith('/'+locale+'/')&&path!=='/'+locale?addPathPrefix(path,'/'+locale):path;}return path;}function delLocale(path,locale){if(process.env.__NEXT_I18N_SUPPORT){return locale&&(path.startsWith('/'+locale+'/')||path==='/'+locale)?path.substr(locale.length+1)||'/':path;}return path;}function pathNoQueryHash(path){const queryIndex=path.indexOf('?');const hashIndex=path.indexOf('#');if(queryIndex>-1||hashIndex>-1){path=path.substring(0,queryIndex>-1?queryIndex:hashIndex);}return path;}function hasBasePath(path){path=pathNoQueryHash(path);return path===basePath||path.startsWith(basePath+'/');}function addBasePath(path){// we only add the basepath on relative urls +return addPathPrefix(path,basePath);}function delBasePath(path){path=path.slice(basePath.length);if(!path.startsWith('/'))path=`/${path}`;return path;}/** + * Detects whether a given url is routable by the Next.js router (browser only). + */function isLocalURL(url){// prevent a hydration mismatch on href for url with anchor refs +if(url.startsWith('/')||url.startsWith('#'))return true;try{// absolute urls can be local if they are on the same origin +const locationOrigin=(0,utils.getLocationOrigin)();const resolved=new URL(url,locationOrigin);return resolved.origin===locationOrigin&&hasBasePath(resolved.pathname);}catch(_){return false;}}function interpolateAs(route,asPathname,query){let interpolatedRoute='';const dynamicRegex=(0, routeRegex.getRouteRegex)(route);const dynamicGroups=dynamicRegex.groups;const dynamicMatches=// Try to match the dynamic route against the asPath +(asPathname!==route?(0, routeMatcher.getRouteMatcher)(dynamicRegex)(asPathname):'')||// Fall back to reading the values from the href +// TODO: should this take priority; also need to change in the router. +query;interpolatedRoute=route;const params=Object.keys(dynamicGroups);if(!params.every(param=>{let value=dynamicMatches[param]||'';const{repeat,optional}=dynamicGroups[param];// support single-level catch-all +// TODO: more robust handling for user-error (passing `/`) +let replaced=`[${repeat?'...':''}${param}]`;if(optional){replaced=`${!value?'/':''}[${replaced}]`;}if(repeat&&!Array.isArray(value))value=[value];return (optional||param in dynamicMatches)&&(// Interpolate group into data URL if present +interpolatedRoute=interpolatedRoute.replace(replaced,repeat?value.map(// these values should be fully encoded instead of just +// path delimiter escaped since they are being inserted +// into the URL and we expect URL encoded segments +// when parsing dynamic route params +segment=>encodeURIComponent(segment)).join('/'):encodeURIComponent(value))||'/');})){interpolatedRoute='';// did not satisfy all requirements +// n.b. We ignore this error because we handle warning for this case in +// development in the `` component directly. +}return {params,result:interpolatedRoute};}function omitParmsFromQuery(query,params){const filteredQuery={};Object.keys(query).forEach(key=>{if(!params.includes(key)){filteredQuery[key]=query[key];}});return filteredQuery;}/** + * Resolves a given hyperlink with a certain router state (basePath not included). + * Preserves absolute urls. + */function resolveHref(currentPath,href,resolveAs){// we use a dummy base url for relative urls +const base=new URL(currentPath,'http://n');const urlAsString=typeof href==='string'?href:(0, utils.formatWithValidation)(href);// Return because it cannot be routed by the Next.js router +if(!isLocalURL(urlAsString)){return resolveAs?[urlAsString]:urlAsString;}try{const finalUrl=new URL(urlAsString,base);finalUrl.pathname=(0,normalizeTrailingSlash.normalizePathTrailingSlash)(finalUrl.pathname);let interpolatedAs='';if((0,isDynamic.isDynamicRoute)(finalUrl.pathname)&&finalUrl.searchParams&&resolveAs){const query=(0,querystring$1.searchParamsToUrlQuery)(finalUrl.searchParams);const{result,params}=interpolateAs(finalUrl.pathname,finalUrl.pathname,query);if(result){interpolatedAs=(0,utils.formatWithValidation)({pathname:result,hash:finalUrl.hash,query:omitParmsFromQuery(query,params)});}}// if the origin didn't change, it means we received a relative href +const resolvedHref=finalUrl.origin===base.origin?finalUrl.href.slice(finalUrl.origin.length):finalUrl.href;return resolveAs?[resolvedHref,interpolatedAs||resolvedHref]:resolvedHref;}catch(_){return resolveAs?[urlAsString]:urlAsString;}}function stripOrigin(url){const origin=(0, utils.getLocationOrigin)();return url.startsWith(origin)?url.substring(origin.length):url;}function prepareUrlAs(router,url,as){// If url and as provided as an object representation, +// we'll format them into the string version here. +let[resolvedHref,resolvedAs]=resolveHref(router.pathname,url,true);const origin=(0, utils.getLocationOrigin)();const hrefHadOrigin=resolvedHref.startsWith(origin);const asHadOrigin=resolvedAs&&resolvedAs.startsWith(origin);resolvedHref=stripOrigin(resolvedHref);resolvedAs=resolvedAs?stripOrigin(resolvedAs):resolvedAs;const preparedUrl=hrefHadOrigin?resolvedHref:addBasePath(resolvedHref);const preparedAs=as?stripOrigin(resolveHref(router.pathname,as)):resolvedAs||resolvedHref;return {url:preparedUrl,as:asHadOrigin?preparedAs:addBasePath(preparedAs)};}function resolveDynamicRoute(pathname,pages){const cleanPathname=(0, normalizeTrailingSlash.removePathTrailingSlash)((0, denormalizePagePath_1.denormalizePagePath)(pathname));if(cleanPathname==='/404'||cleanPathname==='/_error'){return pathname;}// handle resolving href for dynamic routes +if(!pages.includes(cleanPathname)){// eslint-disable-next-line array-callback-return +pages.some(page=>{if((0, isDynamic.isDynamicRoute)(page)&&(0, routeRegex.getRouteRegex)(page).re.test(cleanPathname)){pathname=page;return true;}});}return (0, normalizeTrailingSlash.removePathTrailingSlash)(pathname);}const manualScrollRestoration=process.env.__NEXT_SCROLL_RESTORATION&&typeof window!=='undefined'&&'scrollRestoration'in window.history&&!!function(){try{let v='__next';// eslint-disable-next-line no-sequences +return sessionStorage.setItem(v,v),sessionStorage.removeItem(v),true;}catch(n){}}();const SSG_DATA_NOT_FOUND=Symbol('SSG_DATA_NOT_FOUND');function fetchRetry(url,attempts){return fetch(url,{// Cookies are required to be present for Next.js' SSG "Preview Mode". +// Cookies may also be required for `getServerSideProps`. +// +// > `fetch` won’t send cookies, unless you set the credentials init +// > option. +// https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch +// +// > For maximum browser compatibility when it comes to sending & +// > receiving cookies, always supply the `credentials: 'same-origin'` +// > option instead of relying on the default. +// https://github.com/github/fetch#caveats +credentials:'same-origin'}).then(res=>{if(!res.ok){if(attempts>1&&res.status>=500){return fetchRetry(url,attempts-1);}if(res.status===404){return res.json().then(data=>{if(data.notFound){return {notFound:SSG_DATA_NOT_FOUND};}throw new Error(`Failed to load static props`);});}throw new Error(`Failed to load static props`);}return res.json();});}function fetchNextData(dataHref,isServerRender){return fetchRetry(dataHref,isServerRender?3:1).catch(err=>{// We should only trigger a server-side transition if this was caused +// on a client-side transition. Otherwise, we'd get into an infinite +// loop. +if(!isServerRender){(0, routeLoader.markAssetError)(err);}throw err;});}class Router{/** + * Map of all components loaded in `Router` + */ // Static Data Cache +// In-flight Server Data Requests, for deduping +constructor(_pathname,_query,_as,{initialProps,pageLoader,App,wrapApp,Component,err,subscription,isFallback,locale,locales,defaultLocale,domainLocales,isPreview}){this.route=void 0;this.pathname=void 0;this.query=void 0;this.asPath=void 0;this.basePath=void 0;this.components=void 0;this.sdc={};this.sdr={};this.sub=void 0;this.clc=void 0;this.pageLoader=void 0;this._bps=void 0;this.events=void 0;this._wrapApp=void 0;this.isSsr=void 0;this.isFallback=void 0;this._inFlightRoute=void 0;this._shallow=void 0;this.locale=void 0;this.locales=void 0;this.defaultLocale=void 0;this.domainLocales=void 0;this.isReady=void 0;this.isPreview=void 0;this.isLocaleDomain=void 0;this._idx=0;this.onPopState=e=>{const state=e.state;if(!state){// We get state as undefined for two reasons. +// 1. With older safari (< 8) and older chrome (< 34) +// 2. When the URL changed with # +// +// In the both cases, we don't need to proceed and change the route. +// (as it's already changed) +// But we can simply replace the state with the new changes. +// Actually, for (1) we don't need to nothing. But it's hard to detect that event. +// So, doing the following for (1) does no harm. +const{pathname,query}=this;this.changeState('replaceState',(0, utils.formatWithValidation)({pathname:addBasePath(pathname),query}),(0, utils.getURL)());return;}if(!state.__N){return;}let forcedScroll;const{url,as,options,idx}=state;if(process.env.__NEXT_SCROLL_RESTORATION){if(manualScrollRestoration){if(this._idx!==idx){// Snapshot current scroll position: +try{sessionStorage.setItem('__next_scroll_'+this._idx,JSON.stringify({x:self.pageXOffset,y:self.pageYOffset}));}catch(_unused){}// Restore old scroll position: +try{const v=sessionStorage.getItem('__next_scroll_'+idx);forcedScroll=JSON.parse(v);}catch(_unused2){forcedScroll={x:0,y:0};}}}}this._idx=idx;const{pathname}=(0, parseRelativeUrl_1.parseRelativeUrl)(url);// Make sure we don't re-render on initial load, +// can be caused by navigating back from an external site +if(this.isSsr&&as===this.asPath&&pathname===this.pathname){return;}// If the downstream application returns falsy, return. +// They will then be responsible for handling the event. +if(this._bps&&!this._bps(state)){return;}this.change('replaceState',url,as,Object.assign({},options,{shallow:options.shallow&&this._shallow,locale:options.locale||this.defaultLocale}),forcedScroll);};// represents the current component key +this.route=(0, normalizeTrailingSlash.removePathTrailingSlash)(_pathname);// set up the component cache (by route keys) +this.components={};// We should not keep the cache, if there's an error +// Otherwise, this cause issues when when going back and +// come again to the errored page. +if(_pathname!=='/_error'){this.components[this.route]={Component,initial:true,props:initialProps,err,__N_SSG:initialProps&&initialProps.__N_SSG,__N_SSP:initialProps&&initialProps.__N_SSP};}this.components['/_app']={Component:App,styleSheets:[/* /_app does not need its stylesheets managed */]};// Backwards compat for Router.router.events +// TODO: Should be remove the following major version as it was never documented +this.events=Router.events;this.pageLoader=pageLoader;this.pathname=_pathname;this.query=_query;// if auto prerendered and dynamic route wait to update asPath +// until after mount to prevent hydration mismatch +const autoExportDynamic=(0, isDynamic.isDynamicRoute)(_pathname)&&self.__NEXT_DATA__.autoExport;this.asPath=autoExportDynamic?_pathname:_as;this.basePath=basePath;this.sub=subscription;this.clc=null;this._wrapApp=wrapApp;// make sure to ignore extra popState in safari on navigating +// back from external site +this.isSsr=true;this.isFallback=isFallback;this.isReady=!!(self.__NEXT_DATA__.gssp||self.__NEXT_DATA__.gip||!autoExportDynamic&&!self.location.search);this.isPreview=!!isPreview;this.isLocaleDomain=false;if(process.env.__NEXT_I18N_SUPPORT){this.locale=locale;this.locales=locales;this.defaultLocale=defaultLocale;this.domainLocales=domainLocales;this.isLocaleDomain=!!detectDomainLocale(domainLocales,self.location.hostname);}if(typeof window!=='undefined'){// make sure "as" doesn't start with double slashes or else it can +// throw an error as it's considered invalid +if(_as.substr(0,2)!=='//'){// in order for `e.state` to work on the `onpopstate` event +// we have to register the initial route upon initialization +this.changeState('replaceState',(0, utils.formatWithValidation)({pathname:addBasePath(_pathname),query:_query}),(0, utils.getURL)(),{locale});}window.addEventListener('popstate',this.onPopState);// enable custom scroll restoration handling when available +// otherwise fallback to browser's default handling +if(process.env.__NEXT_SCROLL_RESTORATION){if(manualScrollRestoration){window.history.scrollRestoration='manual';}}}}reload(){window.location.reload();}/** + * Go back in history + */back(){window.history.back();}/** + * Performs a `pushState` with arguments + * @param url of the route + * @param as masks `url` for the browser + * @param options object you can define `shallow` and other options + */push(url,as,options={}){if(process.env.__NEXT_SCROLL_RESTORATION){// TODO: remove in the future when we update history before route change +// is complete, as the popstate event should handle this capture. +if(manualScrollRestoration){try{// Snapshot scroll position right before navigating to a new page: +sessionStorage.setItem('__next_scroll_'+this._idx,JSON.stringify({x:self.pageXOffset,y:self.pageYOffset}));}catch(_unused3){}}}({url,as}=prepareUrlAs(this,url,as));return this.change('pushState',url,as,options);}/** + * Performs a `replaceState` with arguments + * @param url of the route + * @param as masks `url` for the browser + * @param options object you can define `shallow` and other options + */replace(url,as,options={}){({url,as}=prepareUrlAs(this,url,as));return this.change('replaceState',url,as,options);}async change(method,url,as,options,forcedScroll){var _options$scroll;if(!isLocalURL(url)){window.location.href=url;return false;}// for static pages with query params in the URL we delay +// marking the router ready until after the query is updated +if(options._h){this.isReady=true;}// Default to scroll reset behavior unless explicitly specified to be +// `false`! This makes the behavior between using `Router#push` and a +// `` consistent. +options.scroll=!!((_options$scroll=options.scroll)!=null?_options$scroll:true);let localeChange=options.locale!==this.locale;if(process.env.__NEXT_I18N_SUPPORT){this.locale=options.locale===false?this.defaultLocale:options.locale||this.locale;if(typeof options.locale==='undefined'){options.locale=this.locale;}const parsedAs=(0, parseRelativeUrl_1.parseRelativeUrl)(hasBasePath(as)?delBasePath(as):as);const localePathResult=(0, normalizeLocalePath_1.normalizeLocalePath)(parsedAs.pathname,this.locales);if(localePathResult.detectedLocale){this.locale=localePathResult.detectedLocale;parsedAs.pathname=addBasePath(parsedAs.pathname);as=(0, utils.formatWithValidation)(parsedAs);url=addBasePath((0, normalizeLocalePath_1.normalizeLocalePath)(hasBasePath(url)?delBasePath(url):url,this.locales).pathname);}let didNavigate=false;// we need to wrap this in the env check again since regenerator runtime +// moves this on its own due to the return +if(process.env.__NEXT_I18N_SUPPORT){var _this$locales;// if the locale isn't configured hard navigate to show 404 page +if(!((_this$locales=this.locales)!=null&&_this$locales.includes(this.locale))){parsedAs.pathname=addLocale(parsedAs.pathname,this.locale);window.location.href=(0, utils.formatWithValidation)(parsedAs);// this was previously a return but was removed in favor +// of better dead code elimination with regenerator runtime +didNavigate=true;}}const detectedDomain=detectDomainLocale(this.domainLocales,undefined,this.locale);// we need to wrap this in the env check again since regenerator runtime +// moves this on its own due to the return +if(process.env.__NEXT_I18N_SUPPORT){// if we are navigating to a domain locale ensure we redirect to the +// correct domain +if(!didNavigate&&detectedDomain&&this.isLocaleDomain&&self.location.hostname!==detectedDomain.domain){const asNoBasePath=delBasePath(as);window.location.href=`http${detectedDomain.http?'':'s'}://${detectedDomain.domain}${addBasePath(`${this.locale===detectedDomain.defaultLocale?'':`/${this.locale}`}${asNoBasePath==='/'?'':asNoBasePath}`||'/')}`;// this was previously a return but was removed in favor +// of better dead code elimination with regenerator runtime +didNavigate=true;}}if(didNavigate){return new Promise(()=>{});}}if(!options._h){this.isSsr=false;}// marking route changes as a navigation start entry +if(utils.ST){performance.mark('routeChange');}const{shallow=false}=options;const routeProps={shallow};if(this._inFlightRoute){this.abortComponentLoad(this._inFlightRoute,routeProps);}as=addBasePath(addLocale(hasBasePath(as)?delBasePath(as):as,options.locale,this.defaultLocale));const cleanedAs=delLocale(hasBasePath(as)?delBasePath(as):as,this.locale);this._inFlightRoute=as;// If the url change is only related to a hash change +// We should not proceed. We should only change the state. +// WARNING: `_h` is an internal option for handing Next.js client-side +// hydration. Your app should _never_ use this property. It may change at +// any time without notice. +if(!options._h&&this.onlyAHashChange(cleanedAs)){this.asPath=cleanedAs;Router.events.emit('hashChangeStart',as,routeProps);// TODO: do we need the resolved href when only a hash change? +this.changeState(method,url,as,options);this.scrollToHash(cleanedAs);this.notify(this.components[this.route],null);Router.events.emit('hashChangeComplete',as,routeProps);return true;}let parsed=(0, parseRelativeUrl_1.parseRelativeUrl)(url);let{pathname,query}=parsed;// The build manifest needs to be loaded before auto-static dynamic pages +// get their query parameters to allow ensuring they can be parsed properly +// when rewritten to +let pages,rewrites;try{pages=await this.pageLoader.getPageList();({__rewrites:rewrites}=await(0,routeLoader.getClientBuildManifest)());}catch(err){// If we fail to resolve the page list or client-build manifest, we must +// do a server-side transition: +window.location.href=as;return false;}// If asked to change the current URL we should reload the current page +// (not location.reload() but reload getInitialProps and other Next.js stuffs) +// We also need to set the method = replaceState always +// as this should not go into the history (That's how browsers work) +// We should compare the new asPath to the current asPath, not the url +if(!this.urlIsNew(cleanedAs)&&!localeChange){method='replaceState';}// we need to resolve the as value using rewrites for dynamic SSG +// pages to allow building the data URL correctly +let resolvedAs=as;// url and as should always be prefixed with basePath by this +// point by either next/link or router.push/replace so strip the +// basePath from the pathname to match the pages dir 1-to-1 +pathname=pathname?(0, normalizeTrailingSlash.removePathTrailingSlash)(delBasePath(pathname)):pathname;if(pathname!=='/_error'){if(process.env.__NEXT_HAS_REWRITES&&as.startsWith('/')){const rewritesResult=(0, _resolveRewrites.default)(addBasePath(addLocale(delBasePath(as),this.locale)),pages,rewrites,query,p=>resolveDynamicRoute(p,pages),this.locales);resolvedAs=rewritesResult.asPath;if(rewritesResult.matchedPage&&rewritesResult.resolvedHref){// if this directly matches a page we need to update the href to +// allow the correct page chunk to be loaded +pathname=rewritesResult.resolvedHref;parsed.pathname=pathname;url=(0, utils.formatWithValidation)(parsed);}}else {parsed.pathname=resolveDynamicRoute(pathname,pages);if(parsed.pathname!==pathname){pathname=parsed.pathname;url=(0, utils.formatWithValidation)(parsed);}}}const route=(0, normalizeTrailingSlash.removePathTrailingSlash)(pathname);if(!isLocalURL(as)){if(process.env.NODE_ENV!=='production'){throw new Error(`Invalid href: "${url}" and as: "${as}", received relative href and external as`+`\nSee more info: https://nextjs.org/docs/messages/invalid-relative-url-external-as`);}window.location.href=as;return false;}resolvedAs=delLocale(delBasePath(resolvedAs),this.locale);if((0, isDynamic.isDynamicRoute)(route)){const parsedAs=(0, parseRelativeUrl_1.parseRelativeUrl)(resolvedAs);const asPathname=parsedAs.pathname;const routeRegex$1=(0, routeRegex.getRouteRegex)(route);const routeMatch=(0, routeMatcher.getRouteMatcher)(routeRegex$1)(asPathname);const shouldInterpolate=route===asPathname;const interpolatedAs=shouldInterpolate?interpolateAs(route,asPathname,query):{};if(!routeMatch||shouldInterpolate&&!interpolatedAs.result){const missingParams=Object.keys(routeRegex$1.groups).filter(param=>!query[param]);if(missingParams.length>0){if(process.env.NODE_ENV!=='production'){console.warn(`${shouldInterpolate?`Interpolating href`:`Mismatching \`as\` and \`href\``} failed to manually provide `+`the params: ${missingParams.join(', ')} in the \`href\`'s \`query\``);}throw new Error((shouldInterpolate?`The provided \`href\` (${url}) value is missing query values (${missingParams.join(', ')}) to be interpolated properly. `:`The provided \`as\` value (${asPathname}) is incompatible with the \`href\` value (${route}). `)+`Read more: https://nextjs.org/docs/messages/${shouldInterpolate?'href-interpolation-failed':'incompatible-href-as'}`);}}else if(shouldInterpolate){as=(0, utils.formatWithValidation)(Object.assign({},parsedAs,{pathname:interpolatedAs.result,query:omitParmsFromQuery(query,interpolatedAs.params)}));}else {// Merge params into `query`, overwriting any specified in search +Object.assign(query,routeMatch);}}Router.events.emit('routeChangeStart',as,routeProps);try{var _self$__NEXT_DATA__$p,_self$__NEXT_DATA__$p2;let routeInfo=await this.getRouteInfo(route,pathname,query,as,resolvedAs,routeProps);let{error,props,__N_SSG,__N_SSP}=routeInfo;// handle redirect on client-transition +if((__N_SSG||__N_SSP)&&props){if(props.pageProps&&props.pageProps.__N_REDIRECT){const destination=props.pageProps.__N_REDIRECT;// check if destination is internal (resolves to a page) and attempt +// client-navigation if it is falling back to hard navigation if +// it's not +if(destination.startsWith('/')){const parsedHref=(0,parseRelativeUrl_1.parseRelativeUrl)(destination);parsedHref.pathname=resolveDynamicRoute(parsedHref.pathname,pages);if(pages.includes(parsedHref.pathname)){const{url:newUrl,as:newAs}=prepareUrlAs(this,destination,destination);return this.change(method,newUrl,newAs,options);}}window.location.href=destination;return new Promise(()=>{});}this.isPreview=!!props.__N_PREVIEW;// handle SSG data 404 +if(props.notFound===SSG_DATA_NOT_FOUND){let notFoundRoute;try{await this.fetchComponent('/404');notFoundRoute='/404';}catch(_){notFoundRoute='/_error';}routeInfo=await this.getRouteInfo(notFoundRoute,notFoundRoute,query,as,resolvedAs,{shallow:false});}}Router.events.emit('beforeHistoryChange',as,routeProps);this.changeState(method,url,as,options);if(process.env.NODE_ENV!=='production'){const appComp=this.components['/_app'].Component;window.next.isPrerendered=appComp.getInitialProps===appComp.origGetInitialProps&&!routeInfo.Component.getInitialProps;}// shallow routing is only allowed for same page URL changes. +const isValidShallowRoute=options.shallow&&this.route===route;if(options._h&&pathname==='/_error'&&((_self$__NEXT_DATA__$p=self.__NEXT_DATA__.props)==null?void 0:(_self$__NEXT_DATA__$p2=_self$__NEXT_DATA__$p.pageProps)==null?void 0:_self$__NEXT_DATA__$p2.statusCode)===500&&props!=null&&props.pageProps){// ensure statusCode is still correct for static 500 page +// when updating query information +props.pageProps.statusCode=500;}await this.set(route,pathname,query,cleanedAs,routeInfo,forcedScroll||(isValidShallowRoute||!options.scroll?null:{x:0,y:0})).catch(e=>{if(e.cancelled)error=error||e;else throw e;});if(error){Router.events.emit('routeChangeError',error,cleanedAs,routeProps);throw error;}if(process.env.__NEXT_I18N_SUPPORT){if(this.locale){document.documentElement.lang=this.locale;}}Router.events.emit('routeChangeComplete',as,routeProps);return true;}catch(err){if(err.cancelled){return false;}throw err;}}changeState(method,url,as,options={}){if(process.env.NODE_ENV!=='production'){if(typeof window.history==='undefined'){console.error(`Warning: window.history is not available.`);return;}if(typeof window.history[method]==='undefined'){console.error(`Warning: window.history.${method} is not available`);return;}}if(method!=='pushState'||(0, utils.getURL)()!==as){this._shallow=options.shallow;window.history[method]({url,as,options,__N:true,idx:this._idx=method!=='pushState'?this._idx:this._idx+1},// Most browsers currently ignores this parameter, although they may use it in the future. +// Passing the empty string here should be safe against future changes to the method. +// https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState +'',as);}}async handleRouteInfoError(err,pathname,query,as,routeProps,loadErrorFail){if(err.cancelled){// bubble up cancellation errors +throw err;}if((0, routeLoader.isAssetError)(err)||loadErrorFail){Router.events.emit('routeChangeError',err,as,routeProps);// If we can't load the page it could be one of following reasons +// 1. Page doesn't exists +// 2. Page does exist in a different zone +// 3. Internal error while loading the page +// So, doing a hard reload is the proper way to deal with this. +window.location.href=as;// Changing the URL doesn't block executing the current code path. +// So let's throw a cancellation error stop the routing logic. +throw buildCancellationError();}try{let Component;let styleSheets;let props;if(typeof Component==='undefined'||typeof styleSheets==='undefined'){;({page:Component,styleSheets}=await this.fetchComponent('/_error'));}const routeInfo={props,Component,styleSheets,err,error:err};if(!routeInfo.props){try{routeInfo.props=await this.getInitialProps(Component,{err,pathname,query});}catch(gipErr){console.error('Error in error page `getInitialProps`: ',gipErr);routeInfo.props={};}}return routeInfo;}catch(routeInfoErr){return this.handleRouteInfoError(routeInfoErr,pathname,query,as,routeProps,true);}}async getRouteInfo(route,pathname,query,as,resolvedAs,routeProps){try{const existingRouteInfo=this.components[route];if(routeProps.shallow&&existingRouteInfo&&this.route===route){return existingRouteInfo;}const cachedRouteInfo=existingRouteInfo&&'initial'in existingRouteInfo?undefined:existingRouteInfo;const routeInfo=cachedRouteInfo?cachedRouteInfo:await this.fetchComponent(route).then(res=>({Component:res.page,styleSheets:res.styleSheets,__N_SSG:res.mod.__N_SSG,__N_SSP:res.mod.__N_SSP}));const{Component,__N_SSG,__N_SSP}=routeInfo;if(process.env.NODE_ENV!=='production'){const{isValidElementType}=reactIs;if(!isValidElementType(Component)){throw new Error(`The default export is not a React Component in page: "${pathname}"`);}}let dataHref;if(__N_SSG||__N_SSP){dataHref=this.pageLoader.getDataHref((0,utils.formatWithValidation)({pathname,query}),resolvedAs,__N_SSG,this.locale);}const props=await this._getData(()=>__N_SSG?this._getStaticData(dataHref):__N_SSP?this._getServerData(dataHref):this.getInitialProps(Component,// we provide AppTree later so this needs to be `any` +{pathname,query,asPath:as}));routeInfo.props=props;this.components[route]=routeInfo;return routeInfo;}catch(err){return this.handleRouteInfoError(err,pathname,query,as,routeProps);}}set(route,pathname,query,as,data,resetScroll){this.isFallback=false;this.route=route;this.pathname=pathname;this.query=query;this.asPath=as;return this.notify(data,resetScroll);}/** + * Callback to execute before replacing router state + * @param cb callback to be executed + */beforePopState(cb){this._bps=cb;}onlyAHashChange(as){if(!this.asPath)return false;const[oldUrlNoHash,oldHash]=this.asPath.split('#');const[newUrlNoHash,newHash]=as.split('#');// Makes sure we scroll to the provided hash if the url/hash are the same +if(newHash&&oldUrlNoHash===newUrlNoHash&&oldHash===newHash){return true;}// If the urls are change, there's more than a hash change +if(oldUrlNoHash!==newUrlNoHash){return false;}// If the hash has changed, then it's a hash only change. +// This check is necessary to handle both the enter and +// leave hash === '' cases. The identity case falls through +// and is treated as a next reload. +return oldHash!==newHash;}scrollToHash(as){const[,hash]=as.split('#');// Scroll to top if the hash is just `#` with no value or `#top` +// To mirror browsers +if(hash===''||hash==='top'){window.scrollTo(0,0);return;}// First we check if the element by id is found +const idEl=document.getElementById(hash);if(idEl){idEl.scrollIntoView();return;}// If there's no element with the id, we check the `name` property +// To mirror browsers +const nameEl=document.getElementsByName(hash)[0];if(nameEl){nameEl.scrollIntoView();}}urlIsNew(asPath){return this.asPath!==asPath;}/** + * Prefetch page code, you may wait for the data during page rendering. + * This feature only works in production! + * @param url the href of prefetched page + * @param asPath the as path of the prefetched page + */async prefetch(url,asPath=url,options={}){let parsed=(0, parseRelativeUrl_1.parseRelativeUrl)(url);let{pathname}=parsed;if(process.env.__NEXT_I18N_SUPPORT){if(options.locale===false){pathname=(0, normalizeLocalePath_1.normalizeLocalePath)(pathname,this.locales).pathname;parsed.pathname=pathname;url=(0, utils.formatWithValidation)(parsed);let parsedAs=(0, parseRelativeUrl_1.parseRelativeUrl)(asPath);const localePathResult=(0, normalizeLocalePath_1.normalizeLocalePath)(parsedAs.pathname,this.locales);parsedAs.pathname=localePathResult.pathname;options.locale=localePathResult.detectedLocale||this.defaultLocale;asPath=(0, utils.formatWithValidation)(parsedAs);}}const pages=await this.pageLoader.getPageList();let resolvedAs=asPath;if(process.env.__NEXT_HAS_REWRITES&&asPath.startsWith('/')){let rewrites;({__rewrites:rewrites}=await(0, routeLoader.getClientBuildManifest)());const rewritesResult=(0, _resolveRewrites.default)(addBasePath(addLocale(asPath,this.locale)),pages,rewrites,parsed.query,p=>resolveDynamicRoute(p,pages),this.locales);resolvedAs=delLocale(delBasePath(rewritesResult.asPath),this.locale);if(rewritesResult.matchedPage&&rewritesResult.resolvedHref){// if this directly matches a page we need to update the href to +// allow the correct page chunk to be loaded +pathname=rewritesResult.resolvedHref;parsed.pathname=pathname;url=(0, utils.formatWithValidation)(parsed);}}else {parsed.pathname=resolveDynamicRoute(parsed.pathname,pages);if(parsed.pathname!==pathname){pathname=parsed.pathname;url=(0, utils.formatWithValidation)(parsed);}}const route=(0, normalizeTrailingSlash.removePathTrailingSlash)(pathname);// Prefetch is not supported in development mode because it would trigger on-demand-entries +if(process.env.NODE_ENV!=='production'){return;}await Promise.all([this.pageLoader._isSsg(route).then(isSsg=>{return isSsg?this._getStaticData(this.pageLoader.getDataHref(url,resolvedAs,true,typeof options.locale!=='undefined'?options.locale:this.locale)):false;}),this.pageLoader[options.priority?'loadPage':'prefetch'](route)]);}async fetchComponent(route){let cancelled=false;const cancel=this.clc=()=>{cancelled=true;};const componentResult=await this.pageLoader.loadPage(route);if(cancelled){const error=new Error(`Abort fetching component for route: "${route}"`);error.cancelled=true;throw error;}if(cancel===this.clc){this.clc=null;}return componentResult;}_getData(fn){let cancelled=false;const cancel=()=>{cancelled=true;};this.clc=cancel;return fn().then(data=>{if(cancel===this.clc){this.clc=null;}if(cancelled){const err=new Error('Loading initial props cancelled');err.cancelled=true;throw err;}return data;});}_getStaticData(dataHref){const{href:cacheKey}=new URL(dataHref,window.location.href);if(process.env.NODE_ENV==='production'&&!this.isPreview&&this.sdc[cacheKey]){return Promise.resolve(this.sdc[cacheKey]);}return fetchNextData(dataHref,this.isSsr).then(data=>{this.sdc[cacheKey]=data;return data;});}_getServerData(dataHref){const{href:resourceKey}=new URL(dataHref,window.location.href);if(this.sdr[resourceKey]){return this.sdr[resourceKey];}return this.sdr[resourceKey]=fetchNextData(dataHref,this.isSsr).then(data=>{delete this.sdr[resourceKey];return data;}).catch(err=>{delete this.sdr[resourceKey];throw err;});}getInitialProps(Component,ctx){const{Component:App}=this.components['/_app'];const AppTree=this._wrapApp(App);ctx.AppTree=AppTree;return (0, utils.loadGetInitialProps)(App,{AppTree,Component,router:this,ctx});}abortComponentLoad(as,routeProps){if(this.clc){Router.events.emit('routeChangeError',buildCancellationError(),as,routeProps);this.clc();this.clc=null;}}notify(data,resetScroll){return this.sub(data,this.components['/_app'].Component,resetScroll);}}exports.default=Router;Router.events=(0, _mitt.default)(); +//# sourceMappingURL=router.js.map +}); + +var routerContext = createCommonjsModule(function (module, exports) { +exports.__esModule=true;exports.RouterContext=void 0;var _react=_interopRequireDefault(React__default['default']);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}const RouterContext=/*#__PURE__*/_react.default.createContext(null);exports.RouterContext=RouterContext;if(process.env.NODE_ENV!=='production'){RouterContext.displayName='RouterContext';} +//# sourceMappingURL=router-context.js.map +}); + +var _default$1=withRouter;var _react$1=interopRequireDefault(React__default['default']);function withRouter(ComposedComponent){function WithRouterWrapper(props){return/*#__PURE__*/_react$1.default.createElement(ComposedComponent,Object.assign({router:(0, router$1.useRouter)()},props));}WithRouterWrapper.getInitialProps=ComposedComponent.getInitialProps// This is needed to allow checking for custom getInitialProps in _app +;WithRouterWrapper.origGetInitialProps=ComposedComponent.origGetInitialProps;if(process.env.NODE_ENV!=='production'){const name=ComposedComponent.displayName||ComposedComponent.name||'Unknown';WithRouterWrapper.displayName=`withRouter(${name})`;}return WithRouterWrapper;} + + +var withRouter_1 = /*#__PURE__*/Object.defineProperty({ + default: _default$1 +}, '__esModule', {value: true}); + +var router$1 = createCommonjsModule(function (module, exports) { +exports.__esModule=true;exports.useRouter=useRouter;exports.makePublicRouterInstance=makePublicRouterInstance;exports.createRouter=exports.withRouter=exports.default=void 0;var _react=interopRequireDefault(React__default['default']);var _router2=interopRequireWildcard(router$2);exports.Router=_router2.default;exports.NextRouter=_router2.NextRouter;var _withRouter=interopRequireDefault(withRouter_1);exports.withRouter=_withRouter.default;/* global window */const singletonRouter={router:null,// holds the actual router instance +readyCallbacks:[],ready(cb){if(this.router)return cb();if(typeof window!=='undefined'){this.readyCallbacks.push(cb);}}};// Create public properties and methods of the router in the singletonRouter +const urlPropertyFields=['pathname','route','query','asPath','components','isFallback','basePath','locale','locales','defaultLocale','isReady','isPreview','isLocaleDomain'];const routerEvents=['routeChangeStart','beforeHistoryChange','routeChangeComplete','routeChangeError','hashChangeStart','hashChangeComplete'];const coreMethodFields=['push','replace','reload','back','prefetch','beforePopState'];// Events is a static property on the router, the router doesn't have to be initialized to use it +Object.defineProperty(singletonRouter,'events',{get(){return _router2.default.events;}});urlPropertyFields.forEach(field=>{// Here we need to use Object.defineProperty because, we need to return +// the property assigned to the actual router +// The value might get changed as we change routes and this is the +// proper way to access it +Object.defineProperty(singletonRouter,field,{get(){const router=getRouter();return router[field];}});});coreMethodFields.forEach(field=>{// We don't really know the types here, so we add them later instead +singletonRouter[field]=(...args)=>{const router=getRouter();return router[field](...args);};});routerEvents.forEach(event=>{singletonRouter.ready(()=>{_router2.default.events.on(event,(...args)=>{const eventField=`on${event.charAt(0).toUpperCase()}${event.substring(1)}`;const _singletonRouter=singletonRouter;if(_singletonRouter[eventField]){try{_singletonRouter[eventField](...args);}catch(err){console.error(`Error when running the Router event: ${eventField}`);console.error(`${err.message}\n${err.stack}`);}}});});});function getRouter(){if(!singletonRouter.router){const message='No router instance found.\n'+'You should only use "next/router" inside the client side of your app.\n';throw new Error(message);}return singletonRouter.router;}// Export the singletonRouter and this is the public API. +var _default=singletonRouter;// Reexport the withRoute HOC +exports.default=_default;function useRouter(){return _react.default.useContext(routerContext.RouterContext);}// INTERNAL APIS +// ------------- +// (do not use following exports inside the app) +// Create a router and assign it as the singleton instance. +// This is used in client side when we are initilizing the app. +// This should **not** use inside the server. +const createRouter=(...args)=>{singletonRouter.router=new _router2.default(...args);singletonRouter.readyCallbacks.forEach(cb=>cb());singletonRouter.readyCallbacks=[];return singletonRouter.router;};// This function is used to create the `withRouter` router instance +exports.createRouter=createRouter;function makePublicRouterInstance(router){const _router=router;const instance={};for(const property of urlPropertyFields){if(typeof _router[property]==='object'){instance[property]=Object.assign(Array.isArray(_router[property])?[]:{},_router[property]);// makes sure query is not stateful +continue;}instance[property]=_router[property];}// Events is a static property on the router, the router doesn't have to be initialized to use it +instance.events=_router2.default.events;coreMethodFields.forEach(field=>{instance[field]=(...args)=>{return _router[field](...args);};});return instance;} +//# sourceMappingURL=router.js.map +}); + +var router = router$1; + +var useIntersection_2=useIntersection;const hasIntersectionObserver=typeof IntersectionObserver!=='undefined';function useIntersection({rootMargin,disabled}){const isDisabled=disabled||!hasIntersectionObserver;const unobserve=(0, React__default['default'].useRef)();const[visible,setVisible]=(0, React__default['default'].useState)(false);const setRef=(0, React__default['default'].useCallback)(el=>{if(unobserve.current){unobserve.current();unobserve.current=undefined;}if(isDisabled||visible)return;if(el&&el.tagName){unobserve.current=observe(el,isVisible=>isVisible&&setVisible(isVisible),{rootMargin});}},[isDisabled,rootMargin,visible]);(0, React__default['default'].useEffect)(()=>{if(!hasIntersectionObserver){if(!visible){const idleCallback=(0, requestIdleCallback_1.requestIdleCallback)(()=>setVisible(true));return ()=>(0, requestIdleCallback_1.cancelIdleCallback)(idleCallback);}}},[visible]);return [setRef,visible];}function observe(element,callback,options){const{id,observer,elements}=createObserver(options);elements.set(element,callback);observer.observe(element);return function unobserve(){elements.delete(element);observer.unobserve(element);// Destroy observer when there's nothing left to watch: +if(elements.size===0){observer.disconnect();observers.delete(id);}};}const observers=new Map();function createObserver(options){const id=options.rootMargin||'';let instance=observers.get(id);if(instance){return instance;}const elements=new Map();const observer=new IntersectionObserver(entries=>{entries.forEach(entry=>{const callback=elements.get(entry.target);const isVisible=entry.isIntersecting||entry.intersectionRatio>0;if(callback&&isVisible){callback(isVisible);}});},options);observers.set(id,instance={id,observer,elements});return instance;} + + +var useIntersection_1 = /*#__PURE__*/Object.defineProperty({ + useIntersection: useIntersection_2 +}, '__esModule', {value: true}); + +var link$1 = createCommonjsModule(function (module, exports) { +exports.__esModule=true;exports.default=void 0;var _react=interopRequireWildcard(React__default['default']);const prefetched={};function prefetch(router,href,as,options){if(typeof window==='undefined'||!router)return;if(!(0, router$2.isLocalURL)(href))return;// Prefetch the JSON page if asked (only in the client) +// We need to handle a prefetch error here since we may be +// loading with priority which can reject but we don't +// want to force navigation since this is only a prefetch +router.prefetch(href,as,options).catch(err=>{if(process.env.NODE_ENV!=='production'){// rethrow to show invalid URL errors +throw err;}});const curLocale=options&&typeof options.locale!=='undefined'?options.locale:router&&router.locale;// Join on an invalid URI character +prefetched[href+'%'+as+(curLocale?'%'+curLocale:'')]=true;}function isModifiedEvent(event){const{target}=event.currentTarget;return target&&target!=='_self'||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey||// triggers resource download +event.nativeEvent&&event.nativeEvent.which===2;}function linkClicked(e,router,href,as,replace,shallow,scroll,locale){const{nodeName}=e.currentTarget;if(nodeName==='A'&&(isModifiedEvent(e)||!(0, router$2.isLocalURL)(href))){// ignore click for browser’s default behavior +return;}e.preventDefault();// avoid scroll for urls with anchor refs +if(scroll==null){scroll=as.indexOf('#')<0;}// replace state instead of push if prop is present +router[replace?'replace':'push'](href,as,{shallow,locale,scroll});}function Link(props){if(process.env.NODE_ENV!=='production'){function createPropError(args){return new Error(`Failed prop type: The prop \`${args.key}\` expects a ${args.expected} in \`\`, but got \`${args.actual}\` instead.`+(typeof window!=='undefined'?"\nOpen your browser's console to view the Component stack trace.":''));}// TypeScript trick for type-guarding: +const requiredPropsGuard={href:true};const requiredProps=Object.keys(requiredPropsGuard);requiredProps.forEach(key=>{if(key==='href'){if(props[key]==null||typeof props[key]!=='string'&&typeof props[key]!=='object'){throw createPropError({key,expected:'`string` or `object`',actual:props[key]===null?'null':typeof props[key]});}}});// TypeScript trick for type-guarding: +const optionalPropsGuard={as:true,replace:true,scroll:true,shallow:true,passHref:true,prefetch:true,locale:true};const optionalProps=Object.keys(optionalPropsGuard);optionalProps.forEach(key=>{const valType=typeof props[key];if(key==='as'){if(props[key]&&valType!=='string'&&valType!=='object'){throw createPropError({key,expected:'`string` or `object`',actual:valType});}}else if(key==='locale'){if(props[key]&&valType!=='string'){throw createPropError({key,expected:'`string`',actual:valType});}}else if(key==='replace'||key==='scroll'||key==='shallow'||key==='passHref'||key==='prefetch'){if(props[key]!=null&&valType!=='boolean'){throw createPropError({key,expected:'`boolean`',actual:valType});}}else;});// This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes +// eslint-disable-next-line react-hooks/rules-of-hooks +const hasWarned=_react.default.useRef(false);if(props.prefetch&&!hasWarned.current){hasWarned.current=true;console.warn('Next.js auto-prefetches automatically based on viewport. The prefetch attribute is no longer needed. More: https://nextjs.org/docs/messages/prefetch-true-deprecated');}}const p=props.prefetch!==false;const router=(0, router$1.useRouter)();const pathname=router&&router.pathname||'/';const{href,as}=_react.default.useMemo(()=>{const[resolvedHref,resolvedAs]=(0, router$2.resolveHref)(pathname,props.href,true);return {href:resolvedHref,as:props.as?(0, router$2.resolveHref)(pathname,props.as):resolvedAs||resolvedHref};},[pathname,props.href,props.as]);let{children,replace,shallow,scroll,locale}=props;// Deprecated. Warning shown by propType check. If the children provided is a string (example) we wrap it in an tag +if(typeof children==='string'){children=/*#__PURE__*/_react.default.createElement("a",null,children);}// This will return the first child, if multiple are provided it will throw an error +const child=_react.Children.only(children);const childRef=child&&typeof child==='object'&&child.ref;const[setIntersectionRef,isVisible]=(0, useIntersection_1.useIntersection)({rootMargin:'200px'});const setRef=_react.default.useCallback(el=>{setIntersectionRef(el);if(childRef){if(typeof childRef==='function')childRef(el);else if(typeof childRef==='object'){childRef.current=el;}}},[childRef,setIntersectionRef]);(0, _react.useEffect)(()=>{const shouldPrefetch=isVisible&&p&&(0, router$2.isLocalURL)(href);const curLocale=typeof locale!=='undefined'?locale:router&&router.locale;const isPrefetched=prefetched[href+'%'+as+(curLocale?'%'+curLocale:'')];if(shouldPrefetch&&!isPrefetched){prefetch(router,href,as,{locale:curLocale});}},[as,href,isVisible,locale,p,router]);const childProps={ref:setRef,onClick:e=>{if(child.props&&typeof child.props.onClick==='function'){child.props.onClick(e);}if(!e.defaultPrevented){linkClicked(e,router,href,as,replace,shallow,scroll,locale);}}};childProps.onMouseEnter=e=>{if(!(0, router$2.isLocalURL)(href))return;if(child.props&&typeof child.props.onMouseEnter==='function'){child.props.onMouseEnter(e);}prefetch(router,href,as,{priority:true});};// If child is an tag and doesn't have a href attribute, or if the 'passHref' property is +// defined, we specify the current 'href', so that repetition is not needed by the user +if(props.passHref||child.type==='a'&&!('href'in child.props)){const curLocale=typeof locale!=='undefined'?locale:router&&router.locale;// we only render domain locales if we are currently on a domain locale +// so that locale links are still visitable in development/preview envs +const localeDomain=router&&router.isLocaleDomain&&(0, router$2.getDomainLocale)(as,curLocale,router&&router.locales,router&&router.domainLocales);childProps.href=localeDomain||(0, router$2.addBasePath)((0, router$2.addLocale)(as,curLocale,router&&router.defaultLocale));}return/*#__PURE__*/_react.default.cloneElement(child,childProps);}var _default=Link;exports.default=_default; +//# sourceMappingURL=link.js.map +}); + +var link = link$1; + +var ActiveLink = function ActiveLink(_ref) { + var children = _ref.children, + className = _ref.className, + _ref$activeClassName = _ref.activeClassName, + activeClassName = _ref$activeClassName === void 0 ? "active" : _ref$activeClassName, + _ref$disabled = _ref.disabled, + disabled = _ref$disabled === void 0 ? false : _ref$disabled, + props = _objectWithoutProperties(_ref, ["children", "className", "activeClassName", "disabled"]); + + var _useRouter = router.useRouter(), + asPath = _useRouter.asPath; // pages/index.js will be matched via props.href + // pages/about.js will be matched via props.href + // pages/[slug].js will be matched via props.as + + + var cname = (asPath === props.href || asPath === props.as) && !disabled ? [className, activeClassName].join(" ") : className; + return disabled ? /*#__PURE__*/React__default['default'].createElement("span", { + className: cname + }, children) : /*#__PURE__*/React__default['default'].createElement(link, props, /*#__PURE__*/React__default['default'].createElement("a", { + className: cname + }, children)); +}; + +ActiveLink.propTypes = { + activeClassName: propTypes.string +}; + +var CLink = function CLink(props) { + var className = props.className, + innerRef = props.innerRef; + props.active; + var _props$activeClassNam = props.activeClassName, + activeClassName = _props$activeClassNam === void 0 ? "active" : _props$activeClassNam, + href = props.href, + onClick = props.onClick, + disabled = props.disabled, + rest = _objectWithoutProperties(props, ["className", "innerRef", "active", "activeClassName", "href", "onClick", "disabled"]); + + var to = rest ? rest.to : null; + + var click = function click(e) { + if (!href && !to || href === "#") { + e.preventDefault(); + } + + !disabled && onClick && onClick(e); + }; // render + + + return to ? /*#__PURE__*/React__default['default'].createElement(ActiveLink, _extends$1({}, rest, { + className: className, + activeClassName: activeClassName, + disabled: disabled, + href: to, + ref: innerRef + })) : /*#__PURE__*/React__default['default'].createElement("a", _extends$1({ + href: href || "#", + className: className, + rel: rest.target === "_blank" ? "noopener norefferer" : null + }, rest, { + onClick: click, + ref: innerRef + })); +}; + +CLink.propTypes = { + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + active: propTypes.bool, + href: propTypes.string, + onClick: propTypes.func, + disabled: propTypes.bool, + // ...NavLink.propTypes, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + to: propTypes.oneOfType([propTypes.object, propTypes.string, propTypes.func]) +}; // CLink.sortAttributes = (attributesToSort) => { + +var CBadge = function CBadge(props) { + var _classNames; + + var tag = props.tag, + className = props.className, + innerRef = props.innerRef, + color = props.color, + shape = props.shape, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "color", "shape"]); // render + + + var classes = classnames(className, 'badge', (_classNames = {}, _defineProperty(_classNames, "badge-".concat(color), color), _defineProperty(_classNames, "badge-".concat(shape), shape), _classNames)); + var Tag = attributes.to || attributes.href ? CLink : tag; + + var ref = _defineProperty({}, "".concat(typeof Tag === 'string' ? 'ref' : 'innerRef'), innerRef); + + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, ref)); +}; + +CBadge.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + color: propTypes.string, + shape: propTypes.oneOf(['', 'pill']) +}; +CBadge.defaultProps = { + tag: 'span' +}; + +var CButton = function CButton(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + onClick = props.onClick, + disabled = props.disabled, + active = props.active, + block = props.block, + color = props.color, + size = props.size, + pressed = props.pressed, + shape = props.shape, + variant = props.variant, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "onClick", "disabled", "active", "block", "color", "size", "pressed", "shape", "variant"]); + + var click = function click(e) { + return !disabled && onClick && onClick(e); + }; + + var isLink = attributes.to || attributes.href; //render + + var classes = classnames(className, 'btn', variant || color ? "btn".concat(variant ? '-' + variant : '', "-").concat(color) : false, size ? "btn-".concat(size) : false, block ? 'btn-block' : false, shape ? "btn-".concat(shape) : false, pressed ? 'btn-pressed' : false, { + 'active': active && !isLink, + 'disabled': disabled && !isLink + }); + + if (isLink) { + return /*#__PURE__*/React__default['default'].createElement(CLink, _extends$1({}, attributes, { + active: active, + disabled: disabled, + className: classes, + onClick: click, + innerRef: innerRef + })); + } else { + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes, + type: "button", + disabled: disabled + }, attributes, { + onClick: click, + ref: innerRef + })); + } +}; + +CButton.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + active: propTypes.bool, + block: propTypes.bool, + shape: propTypes.string, + variant: propTypes.oneOf(['', 'ghost', 'outline']), + color: propTypes.string, + disabled: propTypes.bool, + onClick: propTypes.func, + size: propTypes.string, + pressed: propTypes.bool +}; +CButton.defaultProps = { + tag: 'button' +}; //export + +var CButtonGroup = function CButtonGroup(props) { + var className = props.className, + innerRef = props.innerRef, + size = props.size, + vertical = props.vertical, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "size", "vertical"]); //render + + + var classes = classnames(className, size ? 'btn-group-' + size : false, vertical ? 'btn-group-vertical' : 'btn-group'); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes, + role: "group" + }, attributes, { + ref: innerRef + })); +}; + +CButtonGroup.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + size: propTypes.oneOf(['', 'sm', 'lg']), + vertical: propTypes.bool +}; + +var CButtonToolbar = function CButtonToolbar(props) { + var className = props.className, + innerRef = props.innerRef, + justify = props.justify, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "justify"]); //render + + + var classes = classnames(className, 'btn-toolbar', _defineProperty({}, "justify-content-".concat(justify), justify)); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes, + role: "toolbar", + "aria-label": "toolbar" + }, attributes, { + ref: innerRef + })); +}; + +CButtonToolbar.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + role: propTypes.string, + justify: propTypes.oneOf(['', 'start', 'end', 'between', 'center']) +}; + +var CBreadcrumb = function CBreadcrumb(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["className", "innerRef"]); + + var classes = classnames(className, 'breadcrumb'); //render + + return /*#__PURE__*/React__default['default'].createElement("ol", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CBreadcrumb.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; + +var CBreadcrumbItem = function CBreadcrumbItem(props) { + var className = props.className, + innerRef = props.innerRef, + active = props.active, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "active"]); //render + + + var classes = classnames(className, active ? 'active' : false, 'breadcrumb-item'); + return /*#__PURE__*/React__default['default'].createElement("li", _extends$1({ + className: classes, + role: "presentation", + "aria-current": active ? 'page' : undefined + }, attributes, { + ref: innerRef + })); +}; + +CBreadcrumbItem.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + active: propTypes.bool +}; + +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); +} + +function _toArray(arr) { + return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); +} + +/** + * Tokenize input string. + */ +function lexer(str) { + var tokens = []; + var i = 0; + while (i < str.length) { + var char = str[i]; + if (char === "*" || char === "+" || char === "?") { + tokens.push({ type: "MODIFIER", index: i, value: str[i++] }); + continue; + } + if (char === "\\") { + tokens.push({ type: "ESCAPED_CHAR", index: i++, value: str[i++] }); + continue; + } + if (char === "{") { + tokens.push({ type: "OPEN", index: i, value: str[i++] }); + continue; + } + if (char === "}") { + tokens.push({ type: "CLOSE", index: i, value: str[i++] }); + continue; + } + if (char === ":") { + var name = ""; + var j = i + 1; + while (j < str.length) { + var code = str.charCodeAt(j); + if ( + // `0-9` + (code >= 48 && code <= 57) || + // `A-Z` + (code >= 65 && code <= 90) || + // `a-z` + (code >= 97 && code <= 122) || + // `_` + code === 95) { + name += str[j++]; + continue; + } + break; + } + if (!name) + throw new TypeError("Missing parameter name at " + i); + tokens.push({ type: "NAME", index: i, value: name }); + i = j; + continue; + } + if (char === "(") { + var count = 1; + var pattern = ""; + var j = i + 1; + if (str[j] === "?") { + throw new TypeError("Pattern cannot start with \"?\" at " + j); + } + while (j < str.length) { + if (str[j] === "\\") { + pattern += str[j++] + str[j++]; + continue; + } + if (str[j] === ")") { + count--; + if (count === 0) { + j++; + break; + } + } + else if (str[j] === "(") { + count++; + if (str[j + 1] !== "?") { + throw new TypeError("Capturing groups are not allowed at " + j); + } + } + pattern += str[j++]; + } + if (count) + throw new TypeError("Unbalanced pattern at " + i); + if (!pattern) + throw new TypeError("Missing pattern at " + i); + tokens.push({ type: "PATTERN", index: i, value: pattern }); + i = j; + continue; + } + tokens.push({ type: "CHAR", index: i, value: str[i++] }); + } + tokens.push({ type: "END", index: i, value: "" }); + return tokens; +} +/** + * Parse a string for the raw tokens. + */ +function parse(str, options) { + if (options === void 0) { options = {}; } + var tokens = lexer(str); + var _a = options.prefixes, prefixes = _a === void 0 ? "./" : _a; + var defaultPattern = "[^" + escapeString(options.delimiter || "/#?") + "]+?"; + var result = []; + var key = 0; + var i = 0; + var path = ""; + var tryConsume = function (type) { + if (i < tokens.length && tokens[i].type === type) + return tokens[i++].value; + }; + var mustConsume = function (type) { + var value = tryConsume(type); + if (value !== undefined) + return value; + var _a = tokens[i], nextType = _a.type, index = _a.index; + throw new TypeError("Unexpected " + nextType + " at " + index + ", expected " + type); + }; + var consumeText = function () { + var result = ""; + var value; + // tslint:disable-next-line + while ((value = tryConsume("CHAR") || tryConsume("ESCAPED_CHAR"))) { + result += value; + } + return result; + }; + while (i < tokens.length) { + var char = tryConsume("CHAR"); + var name = tryConsume("NAME"); + var pattern = tryConsume("PATTERN"); + if (name || pattern) { + var prefix = char || ""; + if (prefixes.indexOf(prefix) === -1) { + path += prefix; + prefix = ""; + } + if (path) { + result.push(path); + path = ""; + } + result.push({ + name: name || key++, + prefix: prefix, + suffix: "", + pattern: pattern || defaultPattern, + modifier: tryConsume("MODIFIER") || "" + }); + continue; + } + var value = char || tryConsume("ESCAPED_CHAR"); + if (value) { + path += value; + continue; + } + if (path) { + result.push(path); + path = ""; + } + var open = tryConsume("OPEN"); + if (open) { + var prefix = consumeText(); + var name_1 = tryConsume("NAME") || ""; + var pattern_1 = tryConsume("PATTERN") || ""; + var suffix = consumeText(); + mustConsume("CLOSE"); + result.push({ + name: name_1 || (pattern_1 ? key++ : ""), + pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1, + prefix: prefix, + suffix: suffix, + modifier: tryConsume("MODIFIER") || "" + }); + continue; + } + mustConsume("END"); + } + return result; +} +/** + * Escape a regular expression string. + */ +function escapeString(str) { + return str.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); +} +/** + * Get the flags for a regexp from the options. + */ +function flags(options) { + return options && options.sensitive ? "" : "i"; +} +/** + * Pull out keys from a regexp. + */ +function regexpToRegexp(path, keys) { + if (!keys) + return path; + var groupsRegex = /\((?:\?<(.*?)>)?(?!\?)/g; + var index = 0; + var execResult = groupsRegex.exec(path.source); + while (execResult) { + keys.push({ + // Use parenthesized substring match if available, index otherwise + name: execResult[1] || index++, + prefix: "", + suffix: "", + modifier: "", + pattern: "" + }); + execResult = groupsRegex.exec(path.source); + } + return path; +} +/** + * Transform an array into a regexp. + */ +function arrayToRegexp(paths, keys, options) { + var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; }); + return new RegExp("(?:" + parts.join("|") + ")", flags(options)); +} +/** + * Create a path regexp from string input. + */ +function stringToRegexp(path, keys, options) { + return tokensToRegexp(parse(path, options), keys, options); +} +/** + * Expose a function for taking tokens and returning a RegExp. + */ +function tokensToRegexp(tokens, keys, options) { + if (options === void 0) { options = {}; } + var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d; + var endsWith = "[" + escapeString(options.endsWith || "") + "]|$"; + var delimiter = "[" + escapeString(options.delimiter || "/#?") + "]"; + var route = start ? "^" : ""; + // Iterate over the tokens and create our regexp string. + for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) { + var token = tokens_1[_i]; + if (typeof token === "string") { + route += escapeString(encode(token)); + } + else { + var prefix = escapeString(encode(token.prefix)); + var suffix = escapeString(encode(token.suffix)); + if (token.pattern) { + if (keys) + keys.push(token); + if (prefix || suffix) { + if (token.modifier === "+" || token.modifier === "*") { + var mod = token.modifier === "*" ? "?" : ""; + route += "(?:" + prefix + "((?:" + token.pattern + ")(?:" + suffix + prefix + "(?:" + token.pattern + "))*)" + suffix + ")" + mod; + } + else { + route += "(?:" + prefix + "(" + token.pattern + ")" + suffix + ")" + token.modifier; + } + } + else { + route += "(" + token.pattern + ")" + token.modifier; + } + } + else { + route += "(?:" + prefix + suffix + ")" + token.modifier; + } + } + } + if (end) { + if (!strict) + route += delimiter + "?"; + route += !options.endsWith ? "$" : "(?=" + endsWith + ")"; + } + else { + var endToken = tokens[tokens.length - 1]; + var isEndDelimited = typeof endToken === "string" + ? delimiter.indexOf(endToken[endToken.length - 1]) > -1 + : // tslint:disable-next-line + endToken === undefined; + if (!strict) { + route += "(?:" + delimiter + "(?=" + endsWith + "))?"; + } + if (!isEndDelimited) { + route += "(?=" + delimiter + "|" + endsWith + ")"; + } + } + return new RegExp(route, flags(options)); +} +/** + * Normalize the given path string, returning a regular expression. + * + * An empty array can be passed in for the keys, which will hold the + * placeholder key descriptions. For example, using `/user/:id`, `keys` will + * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`. + */ +function pathToRegexp(path, keys, options) { + if (path instanceof RegExp) + return regexpToRegexp(path, keys); + if (Array.isArray(path)) + return arrayToRegexp(path, keys, options); + return stringToRegexp(path, keys, options); +} + +var cache = {}; +var cacheLimit = 10000; +var cacheCount = 0; + +function compilePath(path, options) { + var cacheKey = "".concat(options.end).concat(options.strict).concat(options.sensitive); + var pathCache = cache[cacheKey] || (cache[cacheKey] = {}); + if (pathCache[path]) return pathCache[path]; + var keys = []; + var regexp = pathToRegexp(path, keys, options); + var result = { + regexp: regexp, + keys: keys + }; + + if (cacheCount < cacheLimit) { + pathCache[path] = result; + cacheCount++; + } + + return result; +} +/** + * Public API for matching a URL pathname to a path. + */ + + +function matchPath(pathname) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + if (typeof options === "string" || Array.isArray(options)) { + options = { + path: options + }; + } + + var _options = options, + path = _options.path, + _options$exact = _options.exact, + exact = _options$exact === void 0 ? false : _options$exact, + _options$strict = _options.strict, + strict = _options$strict === void 0 ? false : _options$strict, + _options$sensitive = _options.sensitive, + sensitive = _options$sensitive === void 0 ? false : _options$sensitive; + var paths = [].concat(path); + return paths.reduce(function (matched, path) { + if (!path && path !== "") return null; + if (matched) return matched; + + var _compilePath = compilePath(path, { + end: exact, + strict: strict, + sensitive: sensitive + }), + regexp = _compilePath.regexp, + keys = _compilePath.keys; + + var match = regexp.exec(pathname); + if (!match) return null; + + var _match = _toArray(match), + url = _match[0], + values = _match.slice(1); + + var isExact = pathname === url; + if (exact && !isExact) return null; + return { + path: path, + // the path used to match + url: path === "/" && url === "" ? "/" : url, + // the matched portion of the URL + isExact: isExact, + // whether or not we matched exactly + params: keys.reduce(function (memo, key, index) { + memo[key.name] = values[index]; + return memo; + }, {}) + }; + }, null); +} + +function ownKeys$d(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$d(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$d(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$d(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +var getPaths = function getPaths(pathname) { + var paths = ["/"]; + if (pathname === "/") return paths; + pathname.split("/").reduce(function (prev, curr) { + var currPath = "".concat(prev, "/").concat(curr); + paths.push(currPath); + return currPath; + }); + return paths; +}; + +var CBreadcrumbRouteItem = function CBreadcrumbRouteItem(_ref, fullCurrPath) { + var name = _ref.name, + currPath = _ref.currPath; + + if (currPath === fullCurrPath) { + return /*#__PURE__*/React__default['default'].createElement(CBreadcrumbItem, { + key: currPath, + active: true + }, name); + } else { + return /*#__PURE__*/React__default['default'].createElement(CBreadcrumbItem, { + key: currPath + }, /*#__PURE__*/React__default['default'].createElement(link, { + href: currPath + }, name)); + } +}; + +var CBreadcrumbRouter = function CBreadcrumbRouter(props) { + var className = props.className, + innerRef = props.innerRef, + routes = props.routes, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "routes"]); + + var items = null; + + if (routes) { + // const currPath = useLocation().pathname + var currPath = window.location.pathname; + var paths = getPaths(currPath); + var currRoutes = paths.map(function (currPath) { + var route = routes.find(function (route) { + return matchPath(currPath, { + path: route.path, + exact: route.exact + }); + }); + return _objectSpread$d(_objectSpread$d({}, route), {}, { + currPath: currPath + }); + }).filter(function (route) { + return route && route.name; + }); + items = currRoutes.map(function (route) { + return CBreadcrumbRouteItem(route, currPath); + }); + } //render + + + var classes = classnames(className); + return /*#__PURE__*/React__default['default'].createElement(CBreadcrumb, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + }), items); +}; + +CBreadcrumbRouter.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + routes: propTypes.array +}; + +var CCallout = function CCallout(props) { + var className = props.className, + innerRef = props.innerRef, + color = props.color, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "color"]); //render + + + var classes = classnames('c-callout', color ? 'c-callout-' + color : null, className); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCallout.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + color: propTypes.string +}; + +function ownKeys$c(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$c(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$c(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$c(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +var CCard = function CCard(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + color = props.color, + textColor = props.textColor, + borderColor = props.borderColor, + align = props.align, + accentColor = props.accentColor, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "color", "textColor", "borderColor", "align", "accentColor"]); //render + + + var classes = classnames(className, 'card', align ? "text-".concat(align) : false, textColor ? "text-".concat(textColor) : false, color ? "bg-".concat(color) : false, borderColor ? "border-".concat(borderColor) : false, accentColor ? "card-accent-".concat(accentColor) : false); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +var sharedPropTypes = { + align: propTypes.oneOf(['', 'left', 'center', 'right']), + color: propTypes.string, + borderColor: propTypes.string, + textColor: propTypes.string +}; +CCard.propTypes = _objectSpread$c({ + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + accentColor: propTypes.string +}, sharedPropTypes); +CCard.defaultProps = { + tag: 'div' +}; + +function ownKeys$b(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$b(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$b(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$b(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +var CCardBody = function CCardBody(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + color = props.color, + textColor = props.textColor, + borderColor = props.borderColor, + align = props.align, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "color", "textColor", "borderColor", "align"]); //render + + + var classes = classnames(className, 'card-body', align ? "text-".concat(align) : false, textColor ? "text-".concat(textColor) : false, color ? "bg-".concat(color) : false, borderColor ? "border-".concat(borderColor) : false); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCardBody.propTypes = _objectSpread$b({ + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}, sharedPropTypes); +CCardBody.defaultProps = { + tag: 'div' +}; + +function ownKeys$a(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$a(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$a(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$a(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +var CCardHeader = function CCardHeader(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + color = props.color, + textColor = props.textColor, + borderColor = props.borderColor, + align = props.align, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "color", "textColor", "borderColor", "align"]); //render + + + var classes = classnames(className, 'card-header', align ? "text-".concat(align) : false, textColor ? "text-".concat(textColor) : false, color ? "bg-".concat(color) : false, borderColor ? "border-".concat(borderColor) : false); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCardHeader.propTypes = _objectSpread$a({ + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}, sharedPropTypes); +CCardHeader.defaultProps = { + tag: 'header' +}; + +function ownKeys$9(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$9(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$9(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$9(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +var CCardFooter = function CCardFooter(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + color = props.color, + textColor = props.textColor, + borderColor = props.borderColor, + align = props.align, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "color", "textColor", "borderColor", "align"]); //render + + + var classes = classnames(className, 'card-footer', align ? "text-".concat(align) : false, textColor ? "text-".concat(textColor) : false, color ? "bg-".concat(color) : false, borderColor ? "border-".concat(borderColor) : false); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCardFooter.propTypes = _objectSpread$9({ + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}, sharedPropTypes); +CCardFooter.defaultProps = { + tag: 'footer' +}; + +var CCardGroup = function CCardGroup(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + deck = props.deck, + columns = props.columns, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "deck", "columns"]); //render + + + var classes = classnames("card-".concat(columns ? 'columns' : deck ? 'deck' : 'group'), className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCardGroup.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + deck: propTypes.bool, + columns: propTypes.bool +}; +CCardGroup.defaultProps = { + tag: 'div' +}; + +var CImg = function CImg(props) { + var className = props.className, + innerRef = props.innerRef, + fluid = props.fluid, + block = props.block, + thumbnail = props.thumbnail, + shape = props.shape, + align = props.align, + src = props.src, + width = props.width, + height = props.height, + placeholderColor = props.placeholderColor, + fluidGrow = props.fluidGrow, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "fluid", "block", "thumbnail", "shape", "align", "src", "width", "height", "placeholderColor", "fluidGrow"]); + + var alignClass = align === 'center' ? 'mx-auto' : align === 'right' ? 'float-right' : align === 'left' ? 'float-left' : ''; // render + + var classes = classnames(className, alignClass, thumbnail && 'img-thumbnail', fluid || fluidGrow && 'img-fluid', fluidGrow && 'w-100', block && 'd-block', shape); + return src ? /*#__PURE__*/React__default['default'].createElement("img", _extends$1({ + className: classes, + src: src, + width: width, + height: height + }, attributes, { + ref: innerRef + })) : /*#__PURE__*/React__default['default'].createElement("svg", _extends$1({ + className: classes, + width: width, + height: height, + style: { + 'backgroundColor': placeholderColor + } + }, attributes, { + ref: innerRef + })); +}; + +CImg.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + src: propTypes.string, + width: propTypes.oneOfType([propTypes.number, propTypes.string]), + height: propTypes.oneOfType([propTypes.number, propTypes.string]), + block: propTypes.bool, + fluid: propTypes.bool, + fluidGrow: propTypes.bool, + shape: propTypes.string, + //oneOf(['', 'rounded']), + thumbnail: propTypes.bool, + align: propTypes.oneOf(['', 'left', 'right', 'center']), + placeholderColor: propTypes.string +}; +CImg.defaultProps = { + placeholderColor: 'transparent' +}; + +var CCardImg = function CCardImg(props) { + var variant = props.variant, + rest = _objectWithoutProperties(props, ["variant"]); + + var classSuffix = variant !== 'full' ? "-".concat(variant) : ''; + return /*#__PURE__*/React__default['default'].createElement(CImg, _extends$1({}, rest, { + className: ["card-img".concat(classSuffix), rest.className] + })); +}; + +CCardImg.propTypes = { + variant: propTypes.oneOf(['', 'top', 'bottom', 'full']) +}; +CCardImg.defaultProps = { + variant: 'full' +}; + +var CCardImgOverlay = function CCardImgOverlay(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames(className, 'card-img-overlay'); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CCardImgOverlay.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CCardImgOverlay.defaultProps = { + tag: 'div' +}; + +var CCardLink = function CCardLink(props) { + return /*#__PURE__*/React__default['default'].createElement(CLink, _extends$1({}, props, { + className: ['card-link', props.className] + })); +}; + +var CCardTitle = function CCardTitle(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames(className, 'card-title'); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CCardTitle.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CCardTitle.defaultProps = { + tag: 'h4' +}; + +var CCardSubtitle = function CCardSubtitle(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames(className, 'card-subtitle'); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CCardSubtitle.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CCardSubtitle.defaultProps = { + tag: 'h6' +}; + +var CCardText = function CCardText(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames(className, 'card-text'); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CCardText.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CCardText.defaultProps = { + tag: 'p' +}; + +var Context$7 = /*#__PURE__*/React__default['default'].createContext({}); //component - CoreUI / CCarousel + +var CCarousel = function CCarousel(props) { + var className = props.className, + innerRef = props.innerRef, + autoSlide = props.autoSlide, + activeIndex = props.activeIndex, + animate = props.animate, + onSlideChange = props.onSlideChange, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "autoSlide", "activeIndex", "animate", "onSlideChange"]); + + var _useState = React.useState([null, activeIndex]), + _useState2 = _slicedToArray(_useState, 2), + state = _useState2[0], + setState = _useState2[1]; + + var _useState3 = React.useState(null), + _useState4 = _slicedToArray(_useState3, 2), + itemNumber = _useState4[0], + setItemNumber = _useState4[1]; + + var _useState5 = React.useState(), + _useState6 = _slicedToArray(_useState5, 2), + animating = _useState6[0], + setAnimating = _useState6[1]; + + React.useEffect(function () { + setState([state[1], activeIndex]); + }, [activeIndex]); + var timeout = React.useRef(); + + var setNext = function setNext() { + reset(); + + if (autoSlide) { + timeout.current = setTimeout(function () { + return nextItem(); + }, autoSlide); + } + }; + + var reset = function reset() { + return clearTimeout(timeout.current); + }; + + var nextItem = function nextItem() { + setState([state[1], itemNumber === state[1] + 1 ? 0 : state[1] + 1, 'next']); + }; + + React.useEffect(function () { + onSlideChange && onSlideChange(state[1]); + setNext(); + return function () { + return reset(); + }; + }, [state]); + var classes = classnames('carousel', className); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes, + onMouseEnter: reset, + onMouseLeave: setNext + }, attributes, { + ref: innerRef + }), /*#__PURE__*/React__default['default'].createElement(Context$7.Provider, { + value: { + state: state, + setState: setState, + animate: animate, + itemNumber: itemNumber, + setItemNumber: setItemNumber, + animating: animating, + setAnimating: setAnimating + } + }, props.children)); +}; + +CCarousel.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + children: propTypes.array, + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + activeIndex: propTypes.number, + autoSlide: propTypes.number, + animate: propTypes.bool, + onSlideChange: propTypes.func +}; +CCarousel.defaultProps = { + activeIndex: 0 +}; + +var getIndex$2 = function getIndex(el) { + return Array.from(el.parentNode.children).indexOf(el); +}; + +var getDirection = function getDirection(state) { + if (state[2]) { + return state[2] === 'next' ? 'right' : 'left'; + } else { + return state[1] > state[0] ? 'right' : 'left'; + } +}; + +var CCarouselItem = function CCarouselItem(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["children", "className", "innerRef"]); + + var _useContext = React.useContext(Context$7), + animate = _useContext.animate, + state = _useContext.state, + itemNumber = _useContext.itemNumber, + setItemNumber = _useContext.setItemNumber, + animating = _useContext.animating, + setAnimating = _useContext.setAnimating; + + var ref = _typeof(innerRef) === 'object' ? innerRef : React.useRef(); + typeof innerRef === 'function' && innerRef(ref); + + var _useState = React.useState(), + _useState2 = _slicedToArray(_useState, 2), + isIn = _useState2[0], + setIsIn = _useState2[1]; + + React.useEffect(function () { + if (!itemNumber) { + setItemNumber(ref.current.parentNode.children.length); + } + + setIsIn(state[1] === getIndex$2(ref.current)); + }, [state]); + + var onEnter = function onEnter() { + setAnimating(false); + }; + + var onEntering = function onEntering() { + /* eslint-disable no-unused-vars */ + ref.current.offsetHeight; + setAnimating(true); + /* eslint-enable no-unused-vars */ + }; + + var onExit = function onExit() { + setAnimating(false); + }; + + var onExiting = function onExiting() { + setAnimating(true); + }; + + var onExited = function onExited() { + setAnimating(false); + }; // const nodeRef = React.useRef() + //render + + + if (!animate || state[0] === null) { + var itemClasses = classnames('carousel-item', isIn && 'active', className); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: itemClasses, + ref: ref + }, attributes), children); + } + + return /*#__PURE__*/React__default['default'].createElement(Transition, { + timeout: 600, + in: isIn, + onEnter: onEnter, + onEntering: onEntering, + onExit: onExit, + onExiting: onExiting, + onExited: onExited, + nodeRef: ref + }, function (status) { + var direction = getDirection(state); + var isActive = status === 'entered' || status === 'exiting'; + var directionClassName = (status === 'entering' || status === 'exiting') && animating && (direction === 'right' ? 'carousel-item-left' : 'carousel-item-right'); + var orderClassName = status === 'entering' && (direction === 'right' ? 'carousel-item-next' : 'carousel-item-prev'); + var itemClasses = classnames('carousel-item', isActive && 'active', directionClassName, orderClassName, className); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: itemClasses, + ref: ref + }, attributes), children); + }); +}; + +CCarouselItem.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; + +var CCarouselControl = function CCarouselControl(props) { + var className = props.className, + children = props.children, + innerRef = props.innerRef, + direction = props.direction, + attributes = _objectWithoutProperties(props, ["className", "children", "innerRef", "direction"]); + + var _useContext = React.useContext(Context$7), + state = _useContext.state, + setState = _useContext.setState, + itemNumber = _useContext.itemNumber, + animating = _useContext.animating; + + var onClick = function onClick() { + if (animating) { + return; + } + + var newIdx; + + if (direction === 'next') { + newIdx = itemNumber === state[1] + 1 ? 0 : state[1] + 1; + } else { + newIdx = state[1] === 0 ? itemNumber - 1 : state[1] - 1; + } + + setState([state[1], newIdx, direction]); + }; //render + + + var anchorClasses = classnames("carousel-control-".concat(direction), className); + return /*#__PURE__*/React__default['default'].createElement("a", _extends$1({ + className: anchorClasses + }, attributes, { + onClick: onClick, + ref: innerRef + }), children || /*#__PURE__*/React__default['default'].createElement("span", { + className: "carousel-control-".concat(direction, "-icon"), + "aria-label": direction + })); +}; + +CCarouselControl.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + children: propTypes.node, + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + direction: propTypes.oneOf(['prev', 'next']).isRequired +}; + +var CCarouselIndicators = function CCarouselIndicators(props) { + var className = props.className, + innerRef = props.innerRef, + indicatorsClass = props.indicatorsClass, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "indicatorsClass"]); + + var _useContext = React.useContext(Context$7), + itemNumber = _useContext.itemNumber, + state = _useContext.state, + setState = _useContext.setState, + animating = _useContext.animating; //render + + + var listClasses = classnames(indicatorsClass, className); + var indicators = Array.from({ + length: itemNumber + }, function (_, i) { + return i; + }).map(function (key) { + return /*#__PURE__*/React__default['default'].createElement("li", { + key: "indicator".concat(key), + onClick: function onClick() { + !animating && key !== state[1] && setState([state[1], key]); + }, + className: state[1] === key ? 'active' : '' + }); + }); + return /*#__PURE__*/React__default['default'].createElement("ol", _extends$1({ + className: listClasses + }, attributes, { + ref: innerRef + }), indicators); +}; + +CCarouselIndicators.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + indicatorsClass: propTypes.string +}; +CCarouselIndicators.defaultProps = { + indicatorsClass: 'carousel-indicators' +}; + +var CCarouselCaption = function CCarouselCaption(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["className", "innerRef"]); //render + + + var classes = classnames('carousel-caption', className); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCarouselCaption.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; + +var CCarouselInner = function CCarouselInner(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["className", "innerRef"]); //render + + + var classes = classnames('carousel-inner', className); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CCarouselInner.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; + +function ownKeys$8(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$8(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +var getTransitionClass$1 = function getTransitionClass(s) { + return s === 'entering' ? 'collapsing' : s === 'entered' ? 'collapse show' : s === 'exiting' ? 'collapsing' : 'collapse'; +}; //component - CoreUI / CCollapse + + +var CCollapse = function CCollapse(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + show = props.show, + navbar = props.navbar, + attributes = _objectWithoutProperties(props, ["children", "className", "innerRef", "show", "navbar"]); + + var _useState = React.useState(), + _useState2 = _slicedToArray(_useState, 2), + height = _useState2[0], + setHeight = _useState2[1]; + + var ref = _typeof(innerRef) === 'object' ? innerRef : React.useRef(); + typeof innerRef === 'function' && innerRef(ref); + + var onEntering = function onEntering() { + setHeight(ref.current.scrollHeight); + }; + + var onEntered = function onEntered() { + setHeight(null); + }; + + var onExit = function onExit() { + setHeight(ref.current.scrollHeight); + }; + + var onExiting = function onExiting() { + ref.current.offsetHeight; // eslint-disable-line no-unused-vars + + setHeight(0); + }; + + var onExited = function onExited() { + setHeight(null); + }; //render + + + return /*#__PURE__*/React__default['default'].createElement(Transition, { + in: show, + timeout: 350, + appear: false, + enter: true, + exit: true, + onEntering: onEntering, + onEntered: onEntered, + onExit: onExit, + onExiting: onExiting, + onExited: onExited, + nodeRef: ref + }, function (status) { + var collapseClass = getTransitionClass$1(status); + var classes = classnames(className, collapseClass, navbar && 'navbar-collapse'); + var style = height === null ? null : { + height: height + }; + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({}, attributes, { + style: _objectSpread$8(_objectSpread$8({}, attributes.style), style), + className: classes, + ref: ref + }), children); + }); +}; + +CCollapse.propTypes = { + children: propTypes.oneOfType([propTypes.arrayOf(propTypes.node), propTypes.node]), + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + show: propTypes.bool, + navbar: propTypes.bool +}; + +var CCreateElement = function CCreateElement(_ref) { + var items = _ref.items, + _ref$components = _ref.components, + components = _ref$components === void 0 ? {} : _ref$components; + + var renderItem = function renderItem(item, i) { + var _tag = item._tag, + _children = item._children, + rest = _objectWithoutProperties(item, ["_tag", "_children"]); + + var Tag = components[_tag] || _tag; + var children = _children ? _children.map(function (child, i) { + return _typeof(child) === 'object' ? renderItem(child, i) : child; + }) : ''; + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + key: Tag + i + }, rest), children); + }; + + var generatedItems = React.useMemo(function () { + return items && items.map(function (item, i) { + return renderItem(item, i); + }); + }, [JSON.stringify(items)]); + return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, generatedItems); +}; + +CCreateElement.propTypes = { + items: propTypes.array.isRequired, + components: propTypes.object +}; + +var Context$6 = /*#__PURE__*/React__default['default'].createContext({}); //component - CoreUI / CDropdown + +var CDropdown = function CDropdown(props) { + var className = props.className, + tag = props.tag, + innerRef = props.innerRef, + inNav = props.inNav, + attributes = _objectWithoutProperties(props, ["className", "tag", "innerRef", "inNav"]); + + var _useState = React.useState(), + _useState2 = _slicedToArray(_useState, 2), + reference = _useState2[0], + setReference = _useState2[1]; + + var _useState3 = React.useState(), + _useState4 = _slicedToArray(_useState3, 2), + isOpen = _useState4[0], + setIsOpen = _useState4[1]; + + var _useState5 = React.useState(), + _useState6 = _slicedToArray(_useState5, 2), + split = _useState6[0], + setSplit = _useState6[1]; + + var _useState7 = React.useState(''), + _useState8 = _slicedToArray(_useState7, 2), + placement = _useState8[0], + setPlacement = _useState8[1]; + + var carretClass = placement.includes('top') ? 'dropup' : placement.includes('right') ? 'dropright' : placement.includes('left') ? 'dropleft' : 'dropdown'; + var Tag = tag || (inNav ? 'li' : 'div'); + var classes = classnames(className, carretClass, { + 'nav-item': inNav, + 'btn-group': split, + 'show': isOpen + }); + return /*#__PURE__*/React__default['default'].createElement(Context$6.Provider, { + value: { + isOpen: isOpen, + setIsOpen: setIsOpen, + reference: reference, + setReference: setReference, + inNav: inNav, + setSplit: setSplit, + setPlacement: setPlacement + } + }, /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + }))); +}; + +CDropdown.propTypes = { + tag: tagPropType, + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + inNav: propTypes.bool +}; + +var CDropdownItem = function CDropdownItem(props) { + var tag = props.tag, + className = props.className, + innerRef = props.innerRef, + onClick = props.onClick, + color = props.color, + divider = props.divider, + header = props.header, + active = props.active, + disabled = props.disabled, + rest = _objectWithoutProperties(props, ["tag", "className", "innerRef", "onClick", "color", "divider", "header", "active", "disabled"]); + + var _useContext = React.useContext(Context$6), + setIsOpen = _useContext.setIsOpen; + + var isItem = !(header || divider); + + var click = function click(e) { + if (disabled) { + return; + } + + onClick && onClick(e); + isItem && setIsOpen(false); + }; //render + + + var tabIndex = isItem && !disabled ? null : -1; + var role = tabIndex === null ? 'menuitem' : undefined; + var Tag = tag || (!isItem ? 'div' : CLink); + + var ref = _defineProperty({}, "".concat(typeof Tag === 'string' ? 'ref' : 'innerRef'), innerRef); + + var classes = classnames(className, 'dropdown-' + (header ? 'header' : divider ? 'divider' : 'item'), { + active: active + }, color && 'bg-' + color, disabled && Tag !== CLink && 'disabled'); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes, + tabIndex: tabIndex, + role: role, + disabled: disabled + }, rest, { + onClick: click + }, ref)); +}; + +CDropdownItem.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + color: propTypes.string, + divider: propTypes.bool, + header: propTypes.bool, + disabled: propTypes.bool, + onClick: propTypes.func, + active: propTypes.bool +}; + +var CDropdownDivider = function CDropdownDivider(props) { + return /*#__PURE__*/React__default['default'].createElement(CDropdownItem, _extends$1({}, props, { + divider: true + })); +}; + +var CDropdownHeader = function CDropdownHeader(props) { + return /*#__PURE__*/React__default['default'].createElement(CDropdownItem, _extends$1({}, props, { + header: true + })); +}; + +var top = 'top'; +var bottom = 'bottom'; +var right = 'right'; +var left = 'left'; +var auto = 'auto'; +var basePlacements = [top, bottom, right, left]; +var start = 'start'; +var end = 'end'; +var clippingParents = 'clippingParents'; +var viewport = 'viewport'; +var popper = 'popper'; +var reference = 'reference'; +var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { + return acc.concat([placement + "-" + start, placement + "-" + end]); +}, []); +var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { + return acc.concat([placement, placement + "-" + start, placement + "-" + end]); +}, []); // modifiers that need to read the DOM + +var beforeRead = 'beforeRead'; +var read = 'read'; +var afterRead = 'afterRead'; // pure-logic modifiers + +var beforeMain = 'beforeMain'; +var main = 'main'; +var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) + +var beforeWrite = 'beforeWrite'; +var write = 'write'; +var afterWrite = 'afterWrite'; +var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; + +function getNodeName(element) { + return element ? (element.nodeName || '').toLowerCase() : null; +} + +function getWindow(node) { + if (node == null) { + return window; + } + + if (node.toString() !== '[object Window]') { + var ownerDocument = node.ownerDocument; + return ownerDocument ? ownerDocument.defaultView || window : window; + } + + return node; +} + +function isElement$1(node) { + var OwnElement = getWindow(node).Element; + return node instanceof OwnElement || node instanceof Element; +} + +function isHTMLElement(node) { + var OwnElement = getWindow(node).HTMLElement; + return node instanceof OwnElement || node instanceof HTMLElement; +} + +function isShadowRoot(node) { + // IE 11 has no ShadowRoot + if (typeof ShadowRoot === 'undefined') { + return false; + } + + var OwnElement = getWindow(node).ShadowRoot; + return node instanceof OwnElement || node instanceof ShadowRoot; +} + +// and applies them to the HTMLElements such as popper and arrow + +function applyStyles(_ref) { + var state = _ref.state; + Object.keys(state.elements).forEach(function (name) { + var style = state.styles[name] || {}; + var attributes = state.attributes[name] || {}; + var element = state.elements[name]; // arrow is optional + virtual elements + + if (!isHTMLElement(element) || !getNodeName(element)) { + return; + } // Flow doesn't support to extend this property, but it's the most + // effective way to apply styles to an HTMLElement + // $FlowFixMe[cannot-write] + + + Object.assign(element.style, style); + Object.keys(attributes).forEach(function (name) { + var value = attributes[name]; + + if (value === false) { + element.removeAttribute(name); + } else { + element.setAttribute(name, value === true ? '' : value); + } + }); + }); +} + +function effect$2(_ref2) { + var state = _ref2.state; + var initialStyles = { + popper: { + position: state.options.strategy, + left: '0', + top: '0', + margin: '0' + }, + arrow: { + position: 'absolute' + }, + reference: {} + }; + Object.assign(state.elements.popper.style, initialStyles.popper); + state.styles = initialStyles; + + if (state.elements.arrow) { + Object.assign(state.elements.arrow.style, initialStyles.arrow); + } + + return function () { + Object.keys(state.elements).forEach(function (name) { + var element = state.elements[name]; + var attributes = state.attributes[name] || {}; + var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them + + var style = styleProperties.reduce(function (style, property) { + style[property] = ''; + return style; + }, {}); // arrow is optional + virtual elements + + if (!isHTMLElement(element) || !getNodeName(element)) { + return; + } + + Object.assign(element.style, style); + Object.keys(attributes).forEach(function (attribute) { + element.removeAttribute(attribute); + }); + }); + }; +} // eslint-disable-next-line import/no-unused-modules + + +var applyStyles$1 = { + name: 'applyStyles', + enabled: true, + phase: 'write', + fn: applyStyles, + effect: effect$2, + requires: ['computeStyles'] +}; + +function getBasePlacement$1(placement) { + return placement.split('-')[0]; +} + +function getBoundingClientRect(element) { + var rect = element.getBoundingClientRect(); + return { + width: rect.width, + height: rect.height, + top: rect.top, + right: rect.right, + bottom: rect.bottom, + left: rect.left, + x: rect.left, + y: rect.top + }; +} + +// means it doesn't take into account transforms. + +function getLayoutRect(element) { + var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed. + // Fixes https://github.com/popperjs/popper-core/issues/1223 + + var width = element.offsetWidth; + var height = element.offsetHeight; + + if (Math.abs(clientRect.width - width) <= 1) { + width = clientRect.width; + } + + if (Math.abs(clientRect.height - height) <= 1) { + height = clientRect.height; + } + + return { + x: element.offsetLeft, + y: element.offsetTop, + width: width, + height: height + }; +} + +function contains(parent, child) { + var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method + + if (parent.contains(child)) { + return true; + } // then fallback to custom implementation with Shadow DOM support + else if (rootNode && isShadowRoot(rootNode)) { + var next = child; + + do { + if (next && parent.isSameNode(next)) { + return true; + } // $FlowFixMe[prop-missing]: need a better way to handle this... + + + next = next.parentNode || next.host; + } while (next); + } // Give up, the result is false + + + return false; +} + +function getComputedStyle$1(element) { + return getWindow(element).getComputedStyle(element); +} + +function isTableElement(element) { + return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0; +} + +function getDocumentElement(element) { + // $FlowFixMe[incompatible-return]: assume body is always available + return ((isElement$1(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] + element.document) || window.document).documentElement; +} + +function getParentNode(element) { + if (getNodeName(element) === 'html') { + return element; + } + + return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle + // $FlowFixMe[incompatible-return] + // $FlowFixMe[prop-missing] + element.assignedSlot || // step into the shadow DOM of the parent of a slotted node + element.parentNode || ( // DOM Element detected + isShadowRoot(element) ? element.host : null) || // ShadowRoot detected + // $FlowFixMe[incompatible-call]: HTMLElement is a Node + getDocumentElement(element) // fallback + + ); +} + +function getTrueOffsetParent(element) { + if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837 + getComputedStyle$1(element).position === 'fixed') { + return null; + } + + return element.offsetParent; +} // `.offsetParent` reports `null` for fixed elements, while absolute elements +// return the containing block + + +function getContainingBlock(element) { + var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1; + var isIE = navigator.userAgent.indexOf('Trident') !== -1; + + if (isIE && isHTMLElement(element)) { + // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport + var elementCss = getComputedStyle$1(element); + + if (elementCss.position === 'fixed') { + return null; + } + } + + var currentNode = getParentNode(element); + + while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) { + var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that + // create a containing block. + // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block + + if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') { + return currentNode; + } else { + currentNode = currentNode.parentNode; + } + } + + return null; +} // Gets the closest ancestor positioned element. Handles some edge cases, +// such as table ancestors and cross browser bugs. + + +function getOffsetParent(element) { + var window = getWindow(element); + var offsetParent = getTrueOffsetParent(element); + + while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') { + offsetParent = getTrueOffsetParent(offsetParent); + } + + if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) { + return window; + } + + return offsetParent || getContainingBlock(element) || window; +} + +function getMainAxisFromPlacement(placement) { + return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; +} + +var max = Math.max; +var min = Math.min; +var round = Math.round; + +function within(min$1, value, max$1) { + return max(min$1, min(value, max$1)); +} + +function getFreshSideObject() { + return { + top: 0, + right: 0, + bottom: 0, + left: 0 + }; +} + +function mergePaddingObject(paddingObject) { + return Object.assign({}, getFreshSideObject(), paddingObject); +} + +function expandToHashMap(value, keys) { + return keys.reduce(function (hashMap, key) { + hashMap[key] = value; + return hashMap; + }, {}); +} + +var toPaddingObject = function toPaddingObject(padding, state) { + padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { + placement: state.placement + })) : padding; + return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); +}; + +function arrow(_ref) { + var _state$modifiersData$; + + var state = _ref.state, + name = _ref.name, + options = _ref.options; + var arrowElement = state.elements.arrow; + var popperOffsets = state.modifiersData.popperOffsets; + var basePlacement = getBasePlacement$1(state.placement); + var axis = getMainAxisFromPlacement(basePlacement); + var isVertical = [left, right].indexOf(basePlacement) >= 0; + var len = isVertical ? 'height' : 'width'; + + if (!arrowElement || !popperOffsets) { + return; + } + + var paddingObject = toPaddingObject(options.padding, state); + var arrowRect = getLayoutRect(arrowElement); + var minProp = axis === 'y' ? top : left; + var maxProp = axis === 'y' ? bottom : right; + var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; + var startDiff = popperOffsets[axis] - state.rects.reference[axis]; + var arrowOffsetParent = getOffsetParent(arrowElement); + var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; + var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is + // outside of the popper bounds + + var min = paddingObject[minProp]; + var max = clientSize - arrowRect[len] - paddingObject[maxProp]; + var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; + var offset = within(min, center, max); // Prevents breaking syntax highlighting... + + var axisProp = axis; + state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); +} + +function effect$1(_ref2) { + var state = _ref2.state, + options = _ref2.options; + var _options$element = options.element, + arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; + + if (arrowElement == null) { + return; + } // CSS selector + + + if (typeof arrowElement === 'string') { + arrowElement = state.elements.popper.querySelector(arrowElement); + + if (!arrowElement) { + return; + } + } + + if (process.env.NODE_ENV !== "production") { + if (!isHTMLElement(arrowElement)) { + console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' ')); + } + } + + if (!contains(state.elements.popper, arrowElement)) { + if (process.env.NODE_ENV !== "production") { + console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' ')); + } + + return; + } + + state.elements.arrow = arrowElement; +} // eslint-disable-next-line import/no-unused-modules + + +var arrow$1 = { + name: 'arrow', + enabled: true, + phase: 'main', + fn: arrow, + effect: effect$1, + requires: ['popperOffsets'], + requiresIfExists: ['preventOverflow'] +}; + +var unsetSides = { + top: 'auto', + right: 'auto', + bottom: 'auto', + left: 'auto' +}; // Round the offsets to the nearest suitable subpixel based on the DPR. +// Zooming can change the DPR, but it seems to report a value that will +// cleanly divide the values into the appropriate subpixels. + +function roundOffsetsByDPR(_ref) { + var x = _ref.x, + y = _ref.y; + var win = window; + var dpr = win.devicePixelRatio || 1; + return { + x: round(round(x * dpr) / dpr) || 0, + y: round(round(y * dpr) / dpr) || 0 + }; +} + +function mapToStyles(_ref2) { + var _Object$assign2; + + var popper = _ref2.popper, + popperRect = _ref2.popperRect, + placement = _ref2.placement, + offsets = _ref2.offsets, + position = _ref2.position, + gpuAcceleration = _ref2.gpuAcceleration, + adaptive = _ref2.adaptive, + roundOffsets = _ref2.roundOffsets; + + var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets, + _ref3$x = _ref3.x, + x = _ref3$x === void 0 ? 0 : _ref3$x, + _ref3$y = _ref3.y, + y = _ref3$y === void 0 ? 0 : _ref3$y; + + var hasX = offsets.hasOwnProperty('x'); + var hasY = offsets.hasOwnProperty('y'); + var sideX = left; + var sideY = top; + var win = window; + + if (adaptive) { + var offsetParent = getOffsetParent(popper); + var heightProp = 'clientHeight'; + var widthProp = 'clientWidth'; + + if (offsetParent === getWindow(popper)) { + offsetParent = getDocumentElement(popper); + + if (getComputedStyle$1(offsetParent).position !== 'static') { + heightProp = 'scrollHeight'; + widthProp = 'scrollWidth'; + } + } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it + + + offsetParent = offsetParent; + + if (placement === top) { + sideY = bottom; // $FlowFixMe[prop-missing] + + y -= offsetParent[heightProp] - popperRect.height; + y *= gpuAcceleration ? 1 : -1; + } + + if (placement === left) { + sideX = right; // $FlowFixMe[prop-missing] + + x -= offsetParent[widthProp] - popperRect.width; + x *= gpuAcceleration ? 1 : -1; + } + } + + var commonStyles = Object.assign({ + position: position + }, adaptive && unsetSides); + + if (gpuAcceleration) { + var _Object$assign; + + return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); + } + + return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); +} + +function computeStyles(_ref4) { + var state = _ref4.state, + options = _ref4.options; + var _options$gpuAccelerat = options.gpuAcceleration, + gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, + _options$adaptive = options.adaptive, + adaptive = _options$adaptive === void 0 ? true : _options$adaptive, + _options$roundOffsets = options.roundOffsets, + roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; + + if (process.env.NODE_ENV !== "production") { + var transitionProperty = getComputedStyle$1(state.elements.popper).transitionProperty || ''; + + if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) { + return transitionProperty.indexOf(property) >= 0; + })) { + console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' ')); + } + } + + var commonStyles = { + placement: getBasePlacement$1(state.placement), + popper: state.elements.popper, + popperRect: state.rects.popper, + gpuAcceleration: gpuAcceleration + }; + + if (state.modifiersData.popperOffsets != null) { + state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.popperOffsets, + position: state.options.strategy, + adaptive: adaptive, + roundOffsets: roundOffsets + }))); + } + + if (state.modifiersData.arrow != null) { + state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.arrow, + position: 'absolute', + adaptive: false, + roundOffsets: roundOffsets + }))); + } + + state.attributes.popper = Object.assign({}, state.attributes.popper, { + 'data-popper-placement': state.placement + }); +} // eslint-disable-next-line import/no-unused-modules + + +var computeStyles$1 = { + name: 'computeStyles', + enabled: true, + phase: 'beforeWrite', + fn: computeStyles, + data: {} +}; + +var passive = { + passive: true +}; + +function effect(_ref) { + var state = _ref.state, + instance = _ref.instance, + options = _ref.options; + var _options$scroll = options.scroll, + scroll = _options$scroll === void 0 ? true : _options$scroll, + _options$resize = options.resize, + resize = _options$resize === void 0 ? true : _options$resize; + var window = getWindow(state.elements.popper); + var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); + + if (scroll) { + scrollParents.forEach(function (scrollParent) { + scrollParent.addEventListener('scroll', instance.update, passive); + }); + } + + if (resize) { + window.addEventListener('resize', instance.update, passive); + } + + return function () { + if (scroll) { + scrollParents.forEach(function (scrollParent) { + scrollParent.removeEventListener('scroll', instance.update, passive); + }); + } + + if (resize) { + window.removeEventListener('resize', instance.update, passive); + } + }; +} // eslint-disable-next-line import/no-unused-modules + + +var eventListeners = { + name: 'eventListeners', + enabled: true, + phase: 'write', + fn: function fn() {}, + effect: effect, + data: {} +}; + +var hash$1 = { + left: 'right', + right: 'left', + bottom: 'top', + top: 'bottom' +}; +function getOppositePlacement(placement) { + return placement.replace(/left|right|bottom|top/g, function (matched) { + return hash$1[matched]; + }); +} + +var hash = { + start: 'end', + end: 'start' +}; +function getOppositeVariationPlacement(placement) { + return placement.replace(/start|end/g, function (matched) { + return hash[matched]; + }); +} + +function getWindowScroll(node) { + var win = getWindow(node); + var scrollLeft = win.pageXOffset; + var scrollTop = win.pageYOffset; + return { + scrollLeft: scrollLeft, + scrollTop: scrollTop + }; +} + +function getWindowScrollBarX(element) { + // If has a CSS width greater than the viewport, then this will be + // incorrect for RTL. + // Popper 1 is broken in this case and never had a bug report so let's assume + // it's not an issue. I don't think anyone ever specifies width on + // anyway. + // Browsers where the left scrollbar doesn't cause an issue report `0` for + // this (e.g. Edge 2019, IE11, Safari) + return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; +} + +function getViewportRect(element) { + var win = getWindow(element); + var html = getDocumentElement(element); + var visualViewport = win.visualViewport; + var width = html.clientWidth; + var height = html.clientHeight; + var x = 0; + var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper + // can be obscured underneath it. + // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even + // if it isn't open, so if this isn't available, the popper will be detected + // to overflow the bottom of the screen too early. + + if (visualViewport) { + width = visualViewport.width; + height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently) + // In Chrome, it returns a value very close to 0 (+/-) but contains rounding + // errors due to floating point numbers, so we need to check precision. + // Safari returns a number <= 0, usually < -1 when pinch-zoomed + // Feature detection fails in mobile emulation mode in Chrome. + // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) < + // 0.001 + // Fallback here: "Not Safari" userAgent + + if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) { + x = visualViewport.offsetLeft; + y = visualViewport.offsetTop; + } + } + + return { + width: width, + height: height, + x: x + getWindowScrollBarX(element), + y: y + }; +} + +// of the `` and `` rect bounds if horizontally scrollable + +function getDocumentRect(element) { + var _element$ownerDocumen; + + var html = getDocumentElement(element); + var winScroll = getWindowScroll(element); + var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; + var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); + var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); + var x = -winScroll.scrollLeft + getWindowScrollBarX(element); + var y = -winScroll.scrollTop; + + if (getComputedStyle$1(body || html).direction === 'rtl') { + x += max(html.clientWidth, body ? body.clientWidth : 0) - width; + } + + return { + width: width, + height: height, + x: x, + y: y + }; +} + +function isScrollParent(element) { + // Firefox wants us to check `-x` and `-y` variations as well + var _getComputedStyle = getComputedStyle$1(element), + overflow = _getComputedStyle.overflow, + overflowX = _getComputedStyle.overflowX, + overflowY = _getComputedStyle.overflowY; + + return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); +} + +function getScrollParent(node) { + if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) { + // $FlowFixMe[incompatible-return]: assume body is always available + return node.ownerDocument.body; + } + + if (isHTMLElement(node) && isScrollParent(node)) { + return node; + } + + return getScrollParent(getParentNode(node)); +} + +/* +given a DOM element, return the list of all scroll parents, up the list of ancesors +until we get to the top window object. This list is what we attach scroll listeners +to, because if any of these parent elements scroll, we'll need to re-calculate the +reference element's position. +*/ + +function listScrollParents(element, list) { + var _element$ownerDocumen; + + if (list === void 0) { + list = []; + } + + var scrollParent = getScrollParent(element); + var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); + var win = getWindow(scrollParent); + var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; + var updatedList = list.concat(target); + return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here + updatedList.concat(listScrollParents(getParentNode(target))); +} + +function rectToClientRect(rect) { + return Object.assign({}, rect, { + left: rect.x, + top: rect.y, + right: rect.x + rect.width, + bottom: rect.y + rect.height + }); +} + +function getInnerBoundingClientRect(element) { + var rect = getBoundingClientRect(element); + rect.top = rect.top + element.clientTop; + rect.left = rect.left + element.clientLeft; + rect.bottom = rect.top + element.clientHeight; + rect.right = rect.left + element.clientWidth; + rect.width = element.clientWidth; + rect.height = element.clientHeight; + rect.x = rect.left; + rect.y = rect.top; + return rect; +} + +function getClientRectFromMixedType(element, clippingParent) { + return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element))); +} // A "clipping parent" is an overflowable container with the characteristic of +// clipping (or hiding) overflowing elements with a position different from +// `initial` + + +function getClippingParents(element) { + var clippingParents = listScrollParents(getParentNode(element)); + var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0; + var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; + + if (!isElement$1(clipperElement)) { + return []; + } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 + + + return clippingParents.filter(function (clippingParent) { + return isElement$1(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body'; + }); +} // Gets the maximum area that the element is visible in due to any number of +// clipping parents + + +function getClippingRect(element, boundary, rootBoundary) { + var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); + var clippingParents = [].concat(mainClippingParents, [rootBoundary]); + var firstClippingParent = clippingParents[0]; + var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { + var rect = getClientRectFromMixedType(element, clippingParent); + accRect.top = max(rect.top, accRect.top); + accRect.right = min(rect.right, accRect.right); + accRect.bottom = min(rect.bottom, accRect.bottom); + accRect.left = max(rect.left, accRect.left); + return accRect; + }, getClientRectFromMixedType(element, firstClippingParent)); + clippingRect.width = clippingRect.right - clippingRect.left; + clippingRect.height = clippingRect.bottom - clippingRect.top; + clippingRect.x = clippingRect.left; + clippingRect.y = clippingRect.top; + return clippingRect; +} + +function getVariation(placement) { + return placement.split('-')[1]; +} + +function computeOffsets(_ref) { + var reference = _ref.reference, + element = _ref.element, + placement = _ref.placement; + var basePlacement = placement ? getBasePlacement$1(placement) : null; + var variation = placement ? getVariation(placement) : null; + var commonX = reference.x + reference.width / 2 - element.width / 2; + var commonY = reference.y + reference.height / 2 - element.height / 2; + var offsets; + + switch (basePlacement) { + case top: + offsets = { + x: commonX, + y: reference.y - element.height + }; + break; + + case bottom: + offsets = { + x: commonX, + y: reference.y + reference.height + }; + break; + + case right: + offsets = { + x: reference.x + reference.width, + y: commonY + }; + break; + + case left: + offsets = { + x: reference.x - element.width, + y: commonY + }; + break; + + default: + offsets = { + x: reference.x, + y: reference.y + }; + } + + var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; + + if (mainAxis != null) { + var len = mainAxis === 'y' ? 'height' : 'width'; + + switch (variation) { + case start: + offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); + break; + + case end: + offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); + break; + } + } + + return offsets; +} + +function detectOverflow(state, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + _options$placement = _options.placement, + placement = _options$placement === void 0 ? state.placement : _options$placement, + _options$boundary = _options.boundary, + boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, + _options$rootBoundary = _options.rootBoundary, + rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, + _options$elementConte = _options.elementContext, + elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, + _options$altBoundary = _options.altBoundary, + altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, + _options$padding = _options.padding, + padding = _options$padding === void 0 ? 0 : _options$padding; + var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); + var altContext = elementContext === popper ? reference : popper; + var referenceElement = state.elements.reference; + var popperRect = state.rects.popper; + var element = state.elements[altBoundary ? altContext : elementContext]; + var clippingClientRect = getClippingRect(isElement$1(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary); + var referenceClientRect = getBoundingClientRect(referenceElement); + var popperOffsets = computeOffsets({ + reference: referenceClientRect, + element: popperRect, + strategy: 'absolute', + placement: placement + }); + var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets)); + var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect + // 0 or negative = within the clipping rect + + var overflowOffsets = { + top: clippingClientRect.top - elementClientRect.top + paddingObject.top, + bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, + left: clippingClientRect.left - elementClientRect.left + paddingObject.left, + right: elementClientRect.right - clippingClientRect.right + paddingObject.right + }; + var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element + + if (elementContext === popper && offsetData) { + var offset = offsetData[placement]; + Object.keys(overflowOffsets).forEach(function (key) { + var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; + var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x'; + overflowOffsets[key] += offset[axis] * multiply; + }); + } + + return overflowOffsets; +} + +function computeAutoPlacement(state, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + placement = _options.placement, + boundary = _options.boundary, + rootBoundary = _options.rootBoundary, + padding = _options.padding, + flipVariations = _options.flipVariations, + _options$allowedAutoP = _options.allowedAutoPlacements, + allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; + var variation = getVariation(placement); + var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) { + return getVariation(placement) === variation; + }) : basePlacements; + var allowedPlacements = placements$1.filter(function (placement) { + return allowedAutoPlacements.indexOf(placement) >= 0; + }); + + if (allowedPlacements.length === 0) { + allowedPlacements = placements$1; + + if (process.env.NODE_ENV !== "production") { + console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' ')); + } + } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... + + + var overflows = allowedPlacements.reduce(function (acc, placement) { + acc[placement] = detectOverflow(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding + })[getBasePlacement$1(placement)]; + return acc; + }, {}); + return Object.keys(overflows).sort(function (a, b) { + return overflows[a] - overflows[b]; + }); +} + +function getExpandedFallbackPlacements(placement) { + if (getBasePlacement$1(placement) === auto) { + return []; + } + + var oppositePlacement = getOppositePlacement(placement); + return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; +} + +function flip(_ref) { + var state = _ref.state, + options = _ref.options, + name = _ref.name; + + if (state.modifiersData[name]._skip) { + return; + } + + var _options$mainAxis = options.mainAxis, + checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, + _options$altAxis = options.altAxis, + checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, + specifiedFallbackPlacements = options.fallbackPlacements, + padding = options.padding, + boundary = options.boundary, + rootBoundary = options.rootBoundary, + altBoundary = options.altBoundary, + _options$flipVariatio = options.flipVariations, + flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, + allowedAutoPlacements = options.allowedAutoPlacements; + var preferredPlacement = state.options.placement; + var basePlacement = getBasePlacement$1(preferredPlacement); + var isBasePlacement = basePlacement === preferredPlacement; + var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); + var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { + return acc.concat(getBasePlacement$1(placement) === auto ? computeAutoPlacement(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding, + flipVariations: flipVariations, + allowedAutoPlacements: allowedAutoPlacements + }) : placement); + }, []); + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var checksMap = new Map(); + var makeFallbackChecks = true; + var firstFittingPlacement = placements[0]; + + for (var i = 0; i < placements.length; i++) { + var placement = placements[i]; + + var _basePlacement = getBasePlacement$1(placement); + + var isStartVariation = getVariation(placement) === start; + var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; + var len = isVertical ? 'width' : 'height'; + var overflow = detectOverflow(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + altBoundary: altBoundary, + padding: padding + }); + var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; + + if (referenceRect[len] > popperRect[len]) { + mainVariationSide = getOppositePlacement(mainVariationSide); + } + + var altVariationSide = getOppositePlacement(mainVariationSide); + var checks = []; + + if (checkMainAxis) { + checks.push(overflow[_basePlacement] <= 0); + } + + if (checkAltAxis) { + checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); + } + + if (checks.every(function (check) { + return check; + })) { + firstFittingPlacement = placement; + makeFallbackChecks = false; + break; + } + + checksMap.set(placement, checks); + } + + if (makeFallbackChecks) { + // `2` may be desired in some cases – research later + var numberOfChecks = flipVariations ? 3 : 1; + + var _loop = function _loop(_i) { + var fittingPlacement = placements.find(function (placement) { + var checks = checksMap.get(placement); + + if (checks) { + return checks.slice(0, _i).every(function (check) { + return check; + }); + } + }); + + if (fittingPlacement) { + firstFittingPlacement = fittingPlacement; + return "break"; + } + }; + + for (var _i = numberOfChecks; _i > 0; _i--) { + var _ret = _loop(_i); + + if (_ret === "break") break; + } + } + + if (state.placement !== firstFittingPlacement) { + state.modifiersData[name]._skip = true; + state.placement = firstFittingPlacement; + state.reset = true; + } +} // eslint-disable-next-line import/no-unused-modules + + +var flip$1 = { + name: 'flip', + enabled: true, + phase: 'main', + fn: flip, + requiresIfExists: ['offset'], + data: { + _skip: false + } +}; + +function getSideOffsets(overflow, rect, preventedOffsets) { + if (preventedOffsets === void 0) { + preventedOffsets = { + x: 0, + y: 0 + }; + } + + return { + top: overflow.top - rect.height - preventedOffsets.y, + right: overflow.right - rect.width + preventedOffsets.x, + bottom: overflow.bottom - rect.height + preventedOffsets.y, + left: overflow.left - rect.width - preventedOffsets.x + }; +} + +function isAnySideFullyClipped(overflow) { + return [top, right, bottom, left].some(function (side) { + return overflow[side] >= 0; + }); +} + +function hide(_ref) { + var state = _ref.state, + name = _ref.name; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var preventedOffsets = state.modifiersData.preventOverflow; + var referenceOverflow = detectOverflow(state, { + elementContext: 'reference' + }); + var popperAltOverflow = detectOverflow(state, { + altBoundary: true + }); + var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); + var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); + var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); + var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); + state.modifiersData[name] = { + referenceClippingOffsets: referenceClippingOffsets, + popperEscapeOffsets: popperEscapeOffsets, + isReferenceHidden: isReferenceHidden, + hasPopperEscaped: hasPopperEscaped + }; + state.attributes.popper = Object.assign({}, state.attributes.popper, { + 'data-popper-reference-hidden': isReferenceHidden, + 'data-popper-escaped': hasPopperEscaped + }); +} // eslint-disable-next-line import/no-unused-modules + + +var hide$1 = { + name: 'hide', + enabled: true, + phase: 'main', + requiresIfExists: ['preventOverflow'], + fn: hide +}; + +function distanceAndSkiddingToXY(placement, rects, offset) { + var basePlacement = getBasePlacement$1(placement); + var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; + + var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { + placement: placement + })) : offset, + skidding = _ref[0], + distance = _ref[1]; + + skidding = skidding || 0; + distance = (distance || 0) * invertDistance; + return [left, right].indexOf(basePlacement) >= 0 ? { + x: distance, + y: skidding + } : { + x: skidding, + y: distance + }; +} + +function offset(_ref2) { + var state = _ref2.state, + options = _ref2.options, + name = _ref2.name; + var _options$offset = options.offset, + offset = _options$offset === void 0 ? [0, 0] : _options$offset; + var data = placements.reduce(function (acc, placement) { + acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); + return acc; + }, {}); + var _data$state$placement = data[state.placement], + x = _data$state$placement.x, + y = _data$state$placement.y; + + if (state.modifiersData.popperOffsets != null) { + state.modifiersData.popperOffsets.x += x; + state.modifiersData.popperOffsets.y += y; + } + + state.modifiersData[name] = data; +} // eslint-disable-next-line import/no-unused-modules + + +var offset$1 = { + name: 'offset', + enabled: true, + phase: 'main', + requires: ['popperOffsets'], + fn: offset +}; + +function popperOffsets(_ref) { + var state = _ref.state, + name = _ref.name; + // Offsets are the actual position the popper needs to have to be + // properly positioned near its reference element + // This is the most basic placement, and will be adjusted by + // the modifiers in the next step + state.modifiersData[name] = computeOffsets({ + reference: state.rects.reference, + element: state.rects.popper, + strategy: 'absolute', + placement: state.placement + }); +} // eslint-disable-next-line import/no-unused-modules + + +var popperOffsets$1 = { + name: 'popperOffsets', + enabled: true, + phase: 'read', + fn: popperOffsets, + data: {} +}; + +function getAltAxis(axis) { + return axis === 'x' ? 'y' : 'x'; +} + +function preventOverflow(_ref) { + var state = _ref.state, + options = _ref.options, + name = _ref.name; + var _options$mainAxis = options.mainAxis, + checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, + _options$altAxis = options.altAxis, + checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, + boundary = options.boundary, + rootBoundary = options.rootBoundary, + altBoundary = options.altBoundary, + padding = options.padding, + _options$tether = options.tether, + tether = _options$tether === void 0 ? true : _options$tether, + _options$tetherOffset = options.tetherOffset, + tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; + var overflow = detectOverflow(state, { + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding, + altBoundary: altBoundary + }); + var basePlacement = getBasePlacement$1(state.placement); + var variation = getVariation(state.placement); + var isBasePlacement = !variation; + var mainAxis = getMainAxisFromPlacement(basePlacement); + var altAxis = getAltAxis(mainAxis); + var popperOffsets = state.modifiersData.popperOffsets; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { + placement: state.placement + })) : tetherOffset; + var data = { + x: 0, + y: 0 + }; + + if (!popperOffsets) { + return; + } + + if (checkMainAxis || checkAltAxis) { + var mainSide = mainAxis === 'y' ? top : left; + var altSide = mainAxis === 'y' ? bottom : right; + var len = mainAxis === 'y' ? 'height' : 'width'; + var offset = popperOffsets[mainAxis]; + var min$1 = popperOffsets[mainAxis] + overflow[mainSide]; + var max$1 = popperOffsets[mainAxis] - overflow[altSide]; + var additive = tether ? -popperRect[len] / 2 : 0; + var minLen = variation === start ? referenceRect[len] : popperRect[len]; + var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go + // outside the reference bounds + + var arrowElement = state.elements.arrow; + var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { + width: 0, + height: 0 + }; + var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject(); + var arrowPaddingMin = arrowPaddingObject[mainSide]; + var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want + // to include its full size in the calculation. If the reference is small + // and near the edge of a boundary, the popper can overflow even if the + // reference is not overflowing as well (e.g. virtual elements with no + // width or height) + + var arrowLen = within(0, referenceRect[len], arrowRect[len]); + var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue; + var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue; + var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); + var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; + var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0; + var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset; + var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue; + + if (checkMainAxis) { + var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1); + popperOffsets[mainAxis] = preventedOffset; + data[mainAxis] = preventedOffset - offset; + } + + if (checkAltAxis) { + var _mainSide = mainAxis === 'x' ? top : left; + + var _altSide = mainAxis === 'x' ? bottom : right; + + var _offset = popperOffsets[altAxis]; + + var _min = _offset + overflow[_mainSide]; + + var _max = _offset - overflow[_altSide]; + + var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max); + + popperOffsets[altAxis] = _preventedOffset; + data[altAxis] = _preventedOffset - _offset; + } + } + + state.modifiersData[name] = data; +} // eslint-disable-next-line import/no-unused-modules + + +var preventOverflow$1 = { + name: 'preventOverflow', + enabled: true, + phase: 'main', + fn: preventOverflow, + requiresIfExists: ['offset'] +}; + +function getHTMLElementScroll(element) { + return { + scrollLeft: element.scrollLeft, + scrollTop: element.scrollTop + }; +} + +function getNodeScroll(node) { + if (node === getWindow(node) || !isHTMLElement(node)) { + return getWindowScroll(node); + } else { + return getHTMLElementScroll(node); + } +} + +// Composite means it takes into account transforms as well as layout. + +function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { + if (isFixed === void 0) { + isFixed = false; + } + + var documentElement = getDocumentElement(offsetParent); + var rect = getBoundingClientRect(elementOrVirtualElement); + var isOffsetParentAnElement = isHTMLElement(offsetParent); + var scroll = { + scrollLeft: 0, + scrollTop: 0 + }; + var offsets = { + x: 0, + y: 0 + }; + + if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { + if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 + isScrollParent(documentElement)) { + scroll = getNodeScroll(offsetParent); + } + + if (isHTMLElement(offsetParent)) { + offsets = getBoundingClientRect(offsetParent); + offsets.x += offsetParent.clientLeft; + offsets.y += offsetParent.clientTop; + } else if (documentElement) { + offsets.x = getWindowScrollBarX(documentElement); + } + } + + return { + x: rect.left + scroll.scrollLeft - offsets.x, + y: rect.top + scroll.scrollTop - offsets.y, + width: rect.width, + height: rect.height + }; +} + +function order(modifiers) { + var map = new Map(); + var visited = new Set(); + var result = []; + modifiers.forEach(function (modifier) { + map.set(modifier.name, modifier); + }); // On visiting object, check for its dependencies and visit them recursively + + function sort(modifier) { + visited.add(modifier.name); + var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); + requires.forEach(function (dep) { + if (!visited.has(dep)) { + var depModifier = map.get(dep); + + if (depModifier) { + sort(depModifier); + } + } + }); + result.push(modifier); + } + + modifiers.forEach(function (modifier) { + if (!visited.has(modifier.name)) { + // check for visited object + sort(modifier); + } + }); + return result; +} + +function orderModifiers(modifiers) { + // order based on dependencies + var orderedModifiers = order(modifiers); // order based on phase + + return modifierPhases.reduce(function (acc, phase) { + return acc.concat(orderedModifiers.filter(function (modifier) { + return modifier.phase === phase; + })); + }, []); +} + +function debounce$1(fn) { + var pending; + return function () { + if (!pending) { + pending = new Promise(function (resolve) { + Promise.resolve().then(function () { + pending = undefined; + resolve(fn()); + }); + }); + } + + return pending; + }; +} + +function format(str) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + return [].concat(args).reduce(function (p, c) { + return p.replace(/%s/, c); + }, str); +} + +var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; +var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; +var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options']; +function validateModifiers(modifiers) { + modifiers.forEach(function (modifier) { + Object.keys(modifier).forEach(function (key) { + switch (key) { + case 'name': + if (typeof modifier.name !== 'string') { + console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\"")); + } + + break; + + case 'enabled': + if (typeof modifier.enabled !== 'boolean') { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\"")); + } + + case 'phase': + if (modifierPhases.indexOf(modifier.phase) < 0) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(', '), "\"" + String(modifier.phase) + "\"")); + } + + break; + + case 'fn': + if (typeof modifier.fn !== 'function') { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\"")); + } + + break; + + case 'effect': + if (typeof modifier.effect !== 'function') { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\"")); + } + + break; + + case 'requires': + if (!Array.isArray(modifier.requires)) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\"")); + } + + break; + + case 'requiresIfExists': + if (!Array.isArray(modifier.requiresIfExists)) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\"")); + } + + break; + + case 'options': + case 'data': + break; + + default: + console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) { + return "\"" + s + "\""; + }).join(', ') + "; but \"" + key + "\" was provided."); + } + + modifier.requires && modifier.requires.forEach(function (requirement) { + if (modifiers.find(function (mod) { + return mod.name === requirement; + }) == null) { + console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); + } + }); + }); + }); +} + +function uniqueBy(arr, fn) { + var identifiers = new Set(); + return arr.filter(function (item) { + var identifier = fn(item); + + if (!identifiers.has(identifier)) { + identifiers.add(identifier); + return true; + } + }); +} + +function mergeByName(modifiers) { + var merged = modifiers.reduce(function (merged, current) { + var existing = merged[current.name]; + merged[current.name] = existing ? Object.assign({}, existing, current, { + options: Object.assign({}, existing.options, current.options), + data: Object.assign({}, existing.data, current.data) + }) : current; + return merged; + }, {}); // IE11 does not support Object.values + + return Object.keys(merged).map(function (key) { + return merged[key]; + }); +} + +var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.'; +var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.'; +var DEFAULT_OPTIONS = { + placement: 'bottom', + modifiers: [], + strategy: 'absolute' +}; + +function areValidElements() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return !args.some(function (element) { + return !(element && typeof element.getBoundingClientRect === 'function'); + }); +} + +function popperGenerator(generatorOptions) { + if (generatorOptions === void 0) { + generatorOptions = {}; + } + + var _generatorOptions = generatorOptions, + _generatorOptions$def = _generatorOptions.defaultModifiers, + defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, + _generatorOptions$def2 = _generatorOptions.defaultOptions, + defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; + return function createPopper(reference, popper, options) { + if (options === void 0) { + options = defaultOptions; + } + + var state = { + placement: 'bottom', + orderedModifiers: [], + options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), + modifiersData: {}, + elements: { + reference: reference, + popper: popper + }, + attributes: {}, + styles: {} + }; + var effectCleanupFns = []; + var isDestroyed = false; + var instance = { + state: state, + setOptions: function setOptions(options) { + cleanupModifierEffects(); + state.options = Object.assign({}, defaultOptions, state.options, options); + state.scrollParents = { + reference: isElement$1(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [], + popper: listScrollParents(popper) + }; // Orders the modifiers based on their dependencies and `phase` + // properties + + var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers + + state.orderedModifiers = orderedModifiers.filter(function (m) { + return m.enabled; + }); // Validate the provided modifiers so that the consumer will get warned + // if one of the modifiers is invalid for any reason + + if (process.env.NODE_ENV !== "production") { + var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) { + var name = _ref.name; + return name; + }); + validateModifiers(modifiers); + + if (getBasePlacement$1(state.options.placement) === auto) { + var flipModifier = state.orderedModifiers.find(function (_ref2) { + var name = _ref2.name; + return name === 'flip'; + }); + + if (!flipModifier) { + console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' ')); + } + } + + var _getComputedStyle = getComputedStyle$1(popper), + marginTop = _getComputedStyle.marginTop, + marginRight = _getComputedStyle.marginRight, + marginBottom = _getComputedStyle.marginBottom, + marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can + // cause bugs with positioning, so we'll warn the consumer + + + if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) { + return parseFloat(margin); + })) { + console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' ')); + } + } + + runModifierEffects(); + return instance.update(); + }, + // Sync update – it will always be executed, even if not necessary. This + // is useful for low frequency updates where sync behavior simplifies the + // logic. + // For high frequency updates (e.g. `resize` and `scroll` events), always + // prefer the async Popper#update method + forceUpdate: function forceUpdate() { + if (isDestroyed) { + return; + } + + var _state$elements = state.elements, + reference = _state$elements.reference, + popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements + // anymore + + if (!areValidElements(reference, popper)) { + if (process.env.NODE_ENV !== "production") { + console.error(INVALID_ELEMENT_ERROR); + } + + return; + } // Store the reference and popper rects to be read by modifiers + + + state.rects = { + reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'), + popper: getLayoutRect(popper) + }; // Modifiers have the ability to reset the current update cycle. The + // most common use case for this is the `flip` modifier changing the + // placement, which then needs to re-run all the modifiers, because the + // logic was previously ran for the previous placement and is therefore + // stale/incorrect + + state.reset = false; + state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier + // is filled with the initial data specified by the modifier. This means + // it doesn't persist and is fresh on each update. + // To ensure persistent data, use `${name}#persistent` + + state.orderedModifiers.forEach(function (modifier) { + return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); + }); + var __debug_loops__ = 0; + + for (var index = 0; index < state.orderedModifiers.length; index++) { + if (process.env.NODE_ENV !== "production") { + __debug_loops__ += 1; + + if (__debug_loops__ > 100) { + console.error(INFINITE_LOOP_ERROR); + break; + } + } + + if (state.reset === true) { + state.reset = false; + index = -1; + continue; + } + + var _state$orderedModifie = state.orderedModifiers[index], + fn = _state$orderedModifie.fn, + _state$orderedModifie2 = _state$orderedModifie.options, + _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, + name = _state$orderedModifie.name; + + if (typeof fn === 'function') { + state = fn({ + state: state, + options: _options, + name: name, + instance: instance + }) || state; + } + } + }, + // Async and optimistically optimized update – it will not be executed if + // not necessary (debounced to run at most once-per-tick) + update: debounce$1(function () { + return new Promise(function (resolve) { + instance.forceUpdate(); + resolve(state); + }); + }), + destroy: function destroy() { + cleanupModifierEffects(); + isDestroyed = true; + } + }; + + if (!areValidElements(reference, popper)) { + if (process.env.NODE_ENV !== "production") { + console.error(INVALID_ELEMENT_ERROR); + } + + return instance; + } + + instance.setOptions(options).then(function (state) { + if (!isDestroyed && options.onFirstUpdate) { + options.onFirstUpdate(state); + } + }); // Modifiers have the ability to execute arbitrary code before the first + // update cycle runs. They will be executed in the same order as the update + // cycle. This is useful when a modifier adds some persistent data that + // other modifiers need to use, but the modifier is run after the dependent + // one. + + function runModifierEffects() { + state.orderedModifiers.forEach(function (_ref3) { + var name = _ref3.name, + _ref3$options = _ref3.options, + options = _ref3$options === void 0 ? {} : _ref3$options, + effect = _ref3.effect; + + if (typeof effect === 'function') { + var cleanupFn = effect({ + state: state, + name: name, + instance: instance, + options: options + }); + + var noopFn = function noopFn() {}; + + effectCleanupFns.push(cleanupFn || noopFn); + } + }); + } + + function cleanupModifierEffects() { + effectCleanupFns.forEach(function (fn) { + return fn(); + }); + effectCleanupFns = []; + } + + return instance; + }; +} + +var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1]; +var createPopper = /*#__PURE__*/popperGenerator({ + defaultModifiers: defaultModifiers +}); // eslint-disable-next-line import/no-unused-modules + +var CDropdownMenu = function CDropdownMenu(props) { + var className = props.className, + show = props.show, + placement = props.placement, + modifiers = props.modifiers, + innerRef = props.innerRef, + rest = _objectWithoutProperties(props, ["className", "show", "placement", "modifiers", "innerRef"]); + + var _useContext = React.useContext(Context$6), + reference = _useContext.reference, + isOpen = _useContext.isOpen, + setIsOpen = _useContext.setIsOpen, + setPlacement = _useContext.setPlacement; + + var _useState = React.useState(null), + _useState2 = _slicedToArray(_useState, 2), + popperElement = _useState2[0], + setPopperElement = _useState2[1]; + + var _useState3 = React.useState(null), + _useState4 = _slicedToArray(_useState3, 2), + popper = _useState4[0], + setPopper = _useState4[1]; + + innerRef && innerRef(popperElement); + React.useEffect(function () { + setIsOpen(show); + setPlacement(placement); + }, [show, placement]); + var classes = classnames(className, "dropdown-menu", "m-0", { + show: isOpen + }); + React.useEffect(function () { + if (!reference) { + return; + } + + setPopper(createPopper(reference, popperElement, { + placement: placement, + modifiers: modifiers || [] + })); + return function () { + if (popper) { + popper.destroy(); + } + }; + }, [isOpen]); + + var checkClose = function checkClose(e) { + if ([reference, popperElement].every(function (el) { + return !el.contains(e.target); + })) { + setIsOpen(false); + } + }; + + var onKeypress = function onKeypress(e) { + return e.keyCode == "27" && setIsOpen(false); + }; + + React.useEffect(function () { + if (isOpen) { + document.addEventListener("click", checkClose); + document.addEventListener("keydown", onKeypress); + } + + return function () { + document.removeEventListener("click", checkClose); + document.removeEventListener("keydown", onKeypress); + }; + }, [isOpen]); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes, + ref: setPopperElement, + role: "menu", + "aria-hidden": !isOpen + }, rest)); +}; + +CDropdownMenu.propTypes = { + children: propTypes.node.isRequired, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + modifiers: propTypes.array, + show: propTypes.bool, + placement: propTypes.oneOf(["", "top-end", "top", "top-start", "bottom-end", "bottom", "bottom-start", "right-start", "right", "right-end", "left-start", "left", "left-end"]) +}; +CDropdownMenu.defaultProps = { + placement: "bottom-start" +}; + +var CDropdownToggle = function CDropdownToggle(props) { + var _togglerAttrs; + + var className = props.className, + innerRef = props.innerRef, + onClick = props.onClick, + caret = props.caret, + split = props.split, + tag = props.tag, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "onClick", "caret", "split", "tag"]); + + var _useContext = React.useContext(Context$6), + reference = _useContext.reference, + setReference = _useContext.setReference, + isOpen = _useContext.isOpen, + setIsOpen = _useContext.setIsOpen, + inNav = _useContext.inNav, + setSplit = _useContext.setSplit; + + innerRef && innerRef(reference); + React.useEffect(function () { + setSplit(split); + }); + + var click = function click(e) { + if (props.disabled) { + return; + } + + onClick && onClick(e); + setIsOpen(!isOpen); + }; + + var Tag = tag || (inNav ? CLink : CButton); + var classes = classnames(className, { + 'dropdown-toggle': caret && !split, + 'nav-link': inNav + }); + var togglerAttrs = (_togglerAttrs = { + onClick: click, + 'aria-expanded': isOpen ? 'true' : 'false', + 'aria-haspopup': 'true', + 'aria-label': 'Dropdown toggle' + }, _defineProperty(_togglerAttrs, "".concat(tag && typeof tag === 'string' ? 'ref' : 'innerRef'), setReference), _defineProperty(_togglerAttrs, 'role', Tag === CButton ? null : 'button'), _togglerAttrs); + + if (split) { + return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(CButton, attributes, props.children), /*#__PURE__*/React__default['default'].createElement(CButton, _extends$1({ + className: "dropdown-toggle dropdown-toggle-split" + }, togglerAttrs, attributes), '')); + } else { + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, togglerAttrs, attributes)); + } +}; + +CDropdownToggle.propTypes = { + tag: tagPropType, + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + caret: propTypes.bool, + onClick: propTypes.func, + split: propTypes.bool, + disabled: propTypes.bool +}; +CDropdownToggle.defaultProps = { + caret: true +}; + +var CSpinner = function CSpinner(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + grow = props.grow, + size = props.size, + color = props.color, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "grow", "size", "color"]); //render + + + var type = grow ? 'grow' : 'border'; + var classes = classnames("spinner-".concat(type), size && "spinner-".concat(type, "-").concat(size), color && "text-".concat(color), className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes, + "aria-hidden": "false", + "aria-label": "Loading", + role: "status" + }, attributes, { + ref: innerRef + })); +}; + +CSpinner.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + grow: propTypes.bool, + size: propTypes.string, + color: propTypes.string +}; +CSpinner.defaultProps = { + tag: 'div' +}; + +function ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$7(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +var CElementCover = function CElementCover(props) { + var className = props.className, + children = props.children, + innerRef = props.innerRef, + boundaries = props.boundaries, + opacity = props.opacity, + attributes = _objectWithoutProperties(props, ["className", "children", "innerRef", "boundaries", "opacity"]); + + var _useState = React.useState({}), + _useState2 = _slicedToArray(_useState, 2), + customBoundaries = _useState2[0], + setCustomBoundaries = _useState2[1]; + + var ref = /*#__PURE__*/React.createRef(null); + innerRef && innerRef(ref); + + var getCustomBoundaries = function getCustomBoundaries() { + if (!ref || !ref.current || !boundaries) { + return {}; + } + + var parent = ref.current.parentElement; + var parentCoords = parent.getBoundingClientRect(); + var customBoundaries = {}; + boundaries.forEach(function (_ref) { + var sides = _ref.sides, + query = _ref.query; + var element = parent.querySelector(query); + + if (!element || !sides) { + return; + } + + var coords = element.getBoundingClientRect(); + sides.forEach(function (side) { + var sideMargin = Math.abs(coords[side] - parentCoords[side]); + customBoundaries[side] = sideMargin + 'px'; + }); + }); + return customBoundaries; + }; + + React.useEffect(function () { + setCustomBoundaries(getCustomBoundaries()); + }, [JSON.stringify(getCustomBoundaries())]); //render + + var classes = classnames(className); + + var containerCoords = _objectSpread$7({ + top: 0, + left: 0, + right: 0, + bottom: 0 + }, customBoundaries); + + var coverStyles = _objectSpread$7(_objectSpread$7({}, containerCoords), {}, { + position: 'absolute', + backgroundColor: "rgb(255,255,255,".concat(opacity, ")") + }); + + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes, + style: coverStyles + }, attributes, { + ref: ref + }), children || /*#__PURE__*/React__default['default'].createElement("div", { + style: { + position: 'absolute', + top: '50%', + left: '50%', + transform: 'translateX(-50%) translateY(-50%)' + } + }, /*#__PURE__*/React__default['default'].createElement(CSpinner, { + grow: true, + size: "lg", + color: "primary" + }))); +}; + +CElementCover.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + boundaries: propTypes.array, + opacity: propTypes.number +}; +CElementCover.defaultProps = { + opacity: 0.4 +}; + +var CEmbed = function CEmbed(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + ratio = props.ratio, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "ratio"]); //render + + + var classes = classnames(className, 'embed-responsive', "embed-responsive-".concat(ratio)); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CEmbed.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + ratio: propTypes.oneOf(['21by9', '16by9', '4by3', '1by1']) +}; +CEmbed.defaultProps = { + tag: 'div', + ratio: '16by9' +}; + +var CEmbedItem = function CEmbedItem(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames(className, 'embed-responsive-item'); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CEmbedItem.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + type: propTypes.oneOf(['iframe', 'embed', 'video', 'object', 'img']) +}; +CEmbedItem.defaultProps = { + tag: 'iframe' +}; + +var CForm = function CForm(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + inline = props.inline, + wasValidated = props.wasValidated, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "inline", "wasValidated"]); //render + + + var classes = classnames(className, inline ? 'form-inline' : false, wasValidated ? 'was-validated' : false); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CForm.propTypes = { + tag: tagPropType, + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + inline: propTypes.bool, + wasValidated: propTypes.bool +}; +CForm.defaultProps = { + tag: 'form' +}; + +var CFormFeedback = function CFormFeedback(props) { + var className = props.className, + innerRef = props.innerRef, + valid = props.valid, + tooltip = props.tooltip, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "valid", "tooltip"]); //render + + + var validMode = tooltip ? 'tooltip' : 'feedback'; + var classes = classnames(valid ? "valid-".concat(validMode) : "invalid-".concat(validMode), className); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CFormFeedback.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + valid: propTypes.bool, + tooltip: propTypes.bool +}; +var CValidFeedback = function CValidFeedback(props) { + return /*#__PURE__*/React__default['default'].createElement(CFormFeedback, _extends$1({}, props, { + valid: true + })); +}; +var CInvalidFeedback = function CInvalidFeedback(props) { + return /*#__PURE__*/React__default['default'].createElement(CFormFeedback, _extends$1({}, props, { + valid: false + })); +}; + +var stringOrNumberProp = propTypes.oneOfType([propTypes.number, propTypes.string]); +var columnProps = propTypes.oneOfType([propTypes.bool, propTypes.number, propTypes.string, propTypes.shape({ + size: propTypes.oneOfType([propTypes.bool, propTypes.number, propTypes.string]), + order: stringOrNumberProp, + offset: stringOrNumberProp +})]); + +var getColumnSizeClass = function getColumnSizeClass(isXs, colWidth, colSize) { + if (colSize === true || colSize === '') { + return isXs ? 'col' : "col-".concat(colWidth); + } else if (colSize === 'auto') { + return isXs ? 'col-auto' : "col-".concat(colWidth, "-auto"); + } + + return isXs ? "col-".concat(colSize) : "col-".concat(colWidth, "-").concat(colSize); +}; //component - CoreUI / CCol + + +var CCol = function CCol(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + widths = props.widths, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "widths"]); //render + + + var colClasses = []; + widths.forEach(function (colWidth, i) { + var columnProp = props[colWidth]; + delete attributes[colWidth]; + + if (!columnProp && columnProp !== '') { + return; + } + + var isXs = !i; + + if (_typeof(columnProp) === 'object') { + var _classNames; + + var colSizeInterfix = isXs ? '-' : "-".concat(colWidth, "-"); + var colClass = getColumnSizeClass(isXs, colWidth, columnProp.size); + colClasses.push(classnames((_classNames = {}, _defineProperty(_classNames, colClass, columnProp.size || columnProp.size === ''), _defineProperty(_classNames, "order".concat(colSizeInterfix).concat(columnProp.order), columnProp.order || columnProp.order === 0), _defineProperty(_classNames, "offset".concat(colSizeInterfix).concat(columnProp.offset), columnProp.offset || columnProp.offset === 0), _classNames))); + } else { + var _colClass = getColumnSizeClass(isXs, colWidth, columnProp); + + colClasses.push(_colClass); + } + }); + + if (!colClasses.length) { + colClasses.push('col'); + } + + var classes = classnames(className, colClasses); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CCol.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + xs: columnProps, + sm: columnProps, + md: columnProps, + lg: columnProps, + xl: columnProps, + xxl: columnProps, + widths: propTypes.array +}; +CCol.defaultProps = { + tag: 'div', + widths: ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'] +}; + +var CLabel = function CLabel(props) { + var tag = props.tag, + className = props.className, + innerRef = props.innerRef, + hidden = props.hidden, + variant = props.variant, + col = props.col, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "hidden", "variant", "col"]); // render + + + var classes = classnames(hidden && 'sr-only', variant === 'custom-checkbox' && 'custom-control-label', variant === 'checkbox' && 'form-check-label', variant === 'custom-file' && 'custom-file-label', col && 'col-form-label', col && typeof col === 'string' && "col-form-label-".concat(col), className); + var Tag = col ? CCol : tag; + var addLabelTag = col && { + tag: tag + }; + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, addLabelTag, attributes, { + ref: innerRef + })); +}; + +CLabel.propTypes = { + tag: tagPropType, + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + hidden: propTypes.bool, + variant: propTypes.oneOf(['custom-file', 'checkbox', 'custom-checkbox']), + col: propTypes.oneOfType([propTypes.string, propTypes.bool]) +}; +CLabel.defaultProps = { + tag: 'label' +}; + +var CFormGroup = function CFormGroup(props) { + var className = props.className, + innerRef = props.innerRef, + row = props.row, + disabled = props.disabled, + variant = props.variant, + inline = props.inline, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "row", "disabled", "variant", "inline"]); //render + + + var checkClass = variant && variant.includes('custom') ? 'custom-control' : 'form-check'; + var classes = classnames(row && 'row', !variant && 'form-group', variant && checkClass, variant === 'custom-radio' && 'custom-radio', variant === 'custom-checkbox' && 'custom-checkbox', variant && inline && "".concat(checkClass, "-inline"), variant && disabled && 'disabled', className); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CFormGroup.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + row: propTypes.bool, + variant: propTypes.oneOf(['checkbox', 'custom-checkbox', 'custom-radio']), + inline: propTypes.bool, + disabled: propTypes.bool +}; + +var CFormText = function CFormText(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + color = props.color, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "color"]); //render + + + var classes = classnames('form-text', color && "text-".concat(color), className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CFormText.propTypes = { + tag: tagPropType, + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + color: propTypes.string +}; +CFormText.defaultProps = { + tag: 'small', + color: 'muted' +}; + +function ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$6(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +var commonPropTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + valid: propTypes.bool, + invalid: propTypes.bool +}; + +var CInput = function CInput(props) { + var className = props.className, + innerRef = props.innerRef, + type = props.type, + valid = props.valid, + invalid = props.invalid, + plaintext = props.plaintext, + size = props.size, + sizeHtml = props.sizeHtml, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "type", "valid", "invalid", "plaintext", "size", "sizeHtml"]); // render + + + var classes = classnames(plaintext ? 'form-control-plaintext' : 'form-control', size && "form-control-".concat(size), invalid && 'is-invalid', valid && 'is-valid', className); + return /*#__PURE__*/React__default['default'].createElement("input", _extends$1({ + className: classes, + type: type + }, attributes, { + size: sizeHtml, + ref: innerRef + })); +}; + +CInput.propTypes = _objectSpread$6(_objectSpread$6({}, commonPropTypes), {}, { + plaintext: propTypes.bool, + type: propTypes.string, + size: propTypes.string, + sizeHtml: propTypes.oneOfType([propTypes.string, propTypes.number]) +}); +CInput.defaultProps = { + type: 'text' +}; + +var CTextarea = function CTextarea(props) { + var className = props.className, + innerRef = props.innerRef, + valid = props.valid, + invalid = props.invalid, + plaintext = props.plaintext, + size = props.size, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "valid", "invalid", "plaintext", "size"]); // render + + + var classes = classnames(plaintext ? 'form-control-plaintext' : 'form-control', size && "form-control-".concat(size), invalid && 'is-invalid', valid && 'is-valid', className); + return /*#__PURE__*/React__default['default'].createElement("textarea", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CTextarea.propTypes = _objectSpread$6(_objectSpread$6({}, commonPropTypes), {}, { + plaintext: propTypes.bool, + size: propTypes.string +}); + +var CInputFile = function CInputFile(props) { + var className = props.className, + innerRef = props.innerRef, + valid = props.valid, + invalid = props.invalid, + custom = props.custom, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "valid", "invalid", "custom"]); // render + + + var classes = classnames(custom ? 'custom-file-input' : 'form-control-file', invalid && 'is-invalid', valid && 'is-valid', className); + return /*#__PURE__*/React__default['default'].createElement("input", _extends$1({ + className: classes + }, attributes, { + type: "file", + ref: innerRef + })); +}; + +CInputFile.propTypes = _objectSpread$6(_objectSpread$6({}, commonPropTypes), {}, { + custom: propTypes.bool +}); + +var CInputCheckbox = function CInputCheckbox(props) { + var className = props.className, + innerRef = props.innerRef, + valid = props.valid, + invalid = props.invalid, + custom = props.custom, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "valid", "invalid", "custom"]); // render + + + var classes = classnames(custom ? 'custom-control-input' : 'form-check-input', invalid && 'is-invalid', valid && 'is-valid', className); + return /*#__PURE__*/React__default['default'].createElement("input", _extends$1({ + className: classes, + type: "checkbox" + }, attributes, { + ref: innerRef + })); +}; + +CInputCheckbox.propTypes = _objectSpread$6(_objectSpread$6({}, commonPropTypes), {}, { + custom: propTypes.bool +}); + +var CInputRadio = function CInputRadio(props) { + return /*#__PURE__*/React__default['default'].createElement(CInputCheckbox, _extends$1({}, props, { + type: "radio" + })); +}; + +var CSelect = function CSelect(props) { + var className = props.className, + innerRef = props.innerRef, + valid = props.valid, + invalid = props.invalid, + size = props.size, + sizeHtml = props.sizeHtml, + custom = props.custom, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "valid", "invalid", "size", "sizeHtml", "custom"]); // render + + + var baseClass = custom ? 'custom-select' : 'form-control'; + var classes = classnames(baseClass, size && "".concat(baseClass, "-").concat(size), invalid && 'is-invalid', valid && 'is-valid', className); + return /*#__PURE__*/React__default['default'].createElement("select", _extends$1({ + className: classes + }, attributes, { + size: sizeHtml, + ref: innerRef + })); +}; + +CSelect.propTypes = _objectSpread$6(_objectSpread$6({}, commonPropTypes), {}, { + size: propTypes.string, + sizeHtml: propTypes.oneOfType([propTypes.string, propTypes.number]) +}); + +var CInputGroup = function CInputGroup(props) { + var className = props.className, + innerRef = props.innerRef, + size = props.size, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "size"]); //render + + + var classes = classnames('input-group', size && "input-group-".concat(size), className); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CInputGroup.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + size: propTypes.string +}; + +var CInputGroupAddon = function CInputGroupAddon(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + prepend = props.prepend, + attributes = _objectWithoutProperties(props, ["children", "className", "innerRef", "prepend"]); //render + + + var classes = classnames('input-group-' + (prepend ? 'prepend' : 'append'), className); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + }), children); +}; + +CInputGroupAddon.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + prepend: propTypes.bool +}; +var CInputGroupAppend = function CInputGroupAppend(props) { + return /*#__PURE__*/React__default['default'].createElement(CInputGroupAddon, _extends$1({}, props, { + prepend: false + })); +}; +var CInputGroupPrepend = function CInputGroupPrepend(props) { + return /*#__PURE__*/React__default['default'].createElement(CInputGroupAddon, _extends$1({}, props, { + prepend: true + })); +}; + +var CInputGroupText = function CInputGroupText(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames('input-group-text', className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CInputGroupText.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CInputGroupText.defaultProps = { + tag: 'div' +}; + +var CRow = function CRow(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + gutters = props.gutters, + form = props.form, + alignHorizontal = props.alignHorizontal, + alignVertical = props.alignVertical, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "gutters", "form", "alignHorizontal", "alignVertical"]); //render + + + var classes = classnames(className, !gutters ? 'no-gutters' : null, alignHorizontal ? "justify-content-".concat(alignHorizontal) : null, alignVertical ? "align-".concat(alignVertical) : null, form ? 'form-row' : 'row'); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CRow.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + gutters: propTypes.bool, + form: propTypes.bool, + alignHorizontal: propTypes.string, + alignVertical: propTypes.string +}; +CRow.defaultProps = { + tag: 'div', + gutters: true +}; + +var CContainer = function CContainer(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + fluid = props.fluid, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "fluid"]); //render + + + var classes = classnames(className, fluid ? 'container-fluid' : 'container'); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CContainer.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + fluid: propTypes.bool +}; +CContainer.defaultProps = { + tag: 'div' +}; + +var CJumbotron = function CJumbotron(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + fluid = props.fluid, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "fluid"]); //render + + + var classes = classnames(className, 'jumbotron', fluid ? 'jumbotron-fluid' : false); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({}, attributes, { + className: classes, + ref: innerRef + })); +}; + +CJumbotron.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + fluid: propTypes.bool +}; +CJumbotron.defaultProps = { + tag: 'div' +}; + +var CListGroup = function CListGroup(props) { + var _classNames; + + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + horizontal = props.horizontal, + flush = props.flush, + accent = props.accent, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "horizontal", "flush", "accent"]); // render + + + var classes = classnames(className, 'list-group', (_classNames = {}, _defineProperty(_classNames, "list-group-horizontal-".concat(horizontal), horizontal), _defineProperty(_classNames, 'list-group-flush', flush), _defineProperty(_classNames, 'list-group-accent', accent), _classNames)); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes, + role: "list-items" + }, attributes, { + ref: innerRef + })); +}; + +CListGroup.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + flush: propTypes.bool, + horizontal: propTypes.string, + accent: propTypes.bool +}; +CListGroup.defaultProps = { + tag: 'ul' +}; + +var CListGroupItem = function CListGroupItem(props) { + var _classNames; + + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + active = props.active, + disabled = props.disabled, + action = props.action, + color = props.color, + accent = props.accent, + rest = _objectWithoutProperties(props, ["tag", "className", "innerRef", "active", "disabled", "action", "color", "accent"]); //render + + + var classes = classnames(className, 'list-group-item', (_classNames = { + 'list-group-item-action': action || rest.href || rest.to || Tag == 'button', + active: active, + disabled: disabled + }, _defineProperty(_classNames, "list-group-item-".concat(color), color), _defineProperty(_classNames, "list-group-item-accent-".concat(accent), accent), _classNames)); + + if (props.href || props.to) { + return /*#__PURE__*/React__default['default'].createElement(CLink, _extends$1({}, rest, { + className: classes, + innerRef: innerRef + })); + } else { + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({}, rest, { + className: classes, + ref: innerRef + })); + } +}; + +CListGroupItem.propTypes = { + tag: tagPropType, + className: propTypes.any, + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + active: propTypes.bool, + disabled: propTypes.bool, + color: propTypes.string, + accent: propTypes.string, + action: propTypes.bool +}; +CListGroupItem.defaultProps = { + tag: 'li' +}; + +var CMedia = function CMedia(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["className", "innerRef"]); //render + + + var classes = classnames('media', className); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CMedia.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; + +var CMediaBody = function CMediaBody(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["className", "innerRef"]); //render + + + var classes = classnames('media-body', className); + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CMediaBody.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; + +var Context$5 = /*#__PURE__*/React__default['default'].createContext({}); + +var getTransitionClass = function getTransitionClass(s) { + return s === 'entering' ? 'd-block' : s === 'entered' ? 'show d-block' : s === 'exiting' ? 'd-block' : ''; +}; //animation fixes introduced thanks to Sirlordt +//component - CoreUI / CModal + + +var CModal = function CModal(props) { + var innerRef = props.innerRef, + show = props.show, + centered = props.centered, + size = props.size, + color = props.color, + borderColor = props.borderColor, + fade = props.fade, + backdrop = props.backdrop, + closeOnBackdrop = props.closeOnBackdrop, + onOpened = props.onOpened, + onClosed = props.onClosed, + addContentClass = props.addContentClass, + onClose = props.onClose, + className = props.className, + scrollable = props.scrollable, + attributes = _objectWithoutProperties(props, ["innerRef", "show", "centered", "size", "color", "borderColor", "fade", "backdrop", "closeOnBackdrop", "onOpened", "onClosed", "addContentClass", "onClose", "className", "scrollable"]); + + var _useState = React.useState(false), + _useState2 = _slicedToArray(_useState, 2), + isOpen = _useState2[0], + setIsOpen = _useState2[1]; + + var _useState3 = React.useState(false), + _useState4 = _slicedToArray(_useState3, 2), + modalTrigger = _useState4[0], + setModalTrigger = _useState4[1]; + + var modalClick = function modalClick(e) { + return e.target.dataset.modal && closeOnBackdrop && close(); + }; + + React.useEffect(function () { + setIsOpen(show); + }, [show]); + + var onKeypress = function onKeypress(e) { + return e.keyCode == '27' && close(); + }; + + React.useEffect(function () { + isOpen && document.addEventListener('keydown', onKeypress); + return function () { + return document.removeEventListener('keydown', onKeypress); + }; + }, [isOpen]); + + var close = function close() { + onClose && onClose(); + setIsOpen(false); + }; + + var onEntered = function onEntered() { + setModalTrigger(document.querySelector(':focus')); + nodeRef.current.focus(); + onOpened && onOpened(); + }; + + var onExited = function onExited() { + modalTrigger && modalTrigger.focus(); + onClosed && onClosed(); + }; + + var modalClasses = classnames('modal overflow-auto fade', _defineProperty({}, "modal-".concat(color), color), className); + var dialogClasses = classnames('modal-dialog', _defineProperty({ + 'modal-dialog-scrollable': scrollable, + 'modal-dialog-centered': centered + }, "modal-".concat(size), size)); + var contentClasses = classnames('modal-content', _defineProperty({}, "border-".concat(borderColor), borderColor), addContentClass); + var backdropClasses = classnames({ + 'modal-backdrop': true, + 'fade': fade, + 'show': isOpen || fade + }); + var nodeRef = React.useRef(null); + return /*#__PURE__*/React__default['default'].createElement("div", { + onClick: modalClick + }, /*#__PURE__*/React__default['default'].createElement(Transition, { + in: Boolean(isOpen), + onEntered: onEntered, + onExited: onExited, + timeout: fade ? 150 : 0, + nodeRef: nodeRef + }, function (status) { + var transitionClass = getTransitionClass(status); + var classes = classnames(modalClasses, transitionClass); + return /*#__PURE__*/React__default['default'].createElement("div", { + tabIndex: "-1", + role: "dialog", + className: classes, + "data-modal": true, + ref: nodeRef + }, /*#__PURE__*/React__default['default'].createElement("div", { + className: dialogClasses, + role: "document" + }, /*#__PURE__*/React__default['default'].createElement("div", _extends$1({}, attributes, { + className: contentClasses, + ref: innerRef + }), /*#__PURE__*/React__default['default'].createElement(Context$5.Provider, { + value: { + close: close + } + }, props.children)))); + }), backdrop && isOpen && /*#__PURE__*/React__default['default'].createElement("div", { + className: backdropClasses + })); +}; + +CModal.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + show: propTypes.bool, + centered: propTypes.bool, + size: propTypes.oneOf(['', 'sm', 'lg', 'xl']), + backdrop: propTypes.bool, + color: propTypes.string, + borderColor: propTypes.string, + onOpened: propTypes.func, + onClosed: propTypes.func, + fade: propTypes.bool, + closeOnBackdrop: propTypes.bool, + onClose: propTypes.func, + addContentClass: propTypes.string, + scrollable: propTypes.bool +}; +CModal.defaultProps = { + backdrop: true, + fade: true, + closeOnBackdrop: true +}; + +var CModalBody = function CModalBody(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames(className, 'modal-body'); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CModalBody.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CModalBody.defaultProps = { + tag: 'div' +}; + +var CModalHeader = function CModalHeader(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + closeButton = props.closeButton, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "closeButton"]); + + var _useContext = React.useContext(Context$5), + close = _useContext.close; //render + + + var classes = classnames(className, 'modal-header'); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + }), props.children, closeButton && /*#__PURE__*/React__default['default'].createElement(CButtonClose, { + onClick: close + })); +}; + +CModalHeader.propTypes = { + tag: tagPropType, + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + closeButton: propTypes.bool +}; +CModalHeader.defaultProps = { + tag: 'header' +}; + +var CModalFooter = function CModalFooter(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames(className, 'modal-footer'); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CModalFooter.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CModalFooter.defaultProps = { + tag: 'footer' +}; + +var CModalTitle = function CModalTitle(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames('modal-title', className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CModalTitle.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CModalTitle.defaultProps = { + tag: 'h5' +}; + +var CNav = function CNav(props) { + var _classNames; + + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + variant = props.variant, + vertical = props.vertical, + justified = props.justified, + fill = props.fill, + inCard = props.inCard, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "variant", "vertical", "justified", "fill", "inCard"]); + + var verticalClass = "flex".concat(vertical === true ? '' : "-".concat(vertical), "-column"); //render + + var classes = classnames('nav', vertical && verticalClass, (_classNames = {}, _defineProperty(_classNames, "nav-".concat(variant), variant), _defineProperty(_classNames, 'nav-justified', justified), _defineProperty(_classNames, 'nav-fill', fill), _defineProperty(_classNames, "card-header-".concat(variant), inCard && variant), _classNames), className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CNav.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + variant: propTypes.oneOf(['', 'tabs', 'pills']), + vertical: propTypes.oneOfType([propTypes.bool, propTypes.string]), + justified: propTypes.bool, + fill: propTypes.bool, + inCard: propTypes.bool +}; +CNav.defaultProps = { + tag: 'ul' +}; + +var CNavItem = function CNavItem(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames('nav-item', className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CNavItem.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CNavItem.defaultProps = { + tag: 'li' +}; + +var Context$4 = /*#__PURE__*/React__default['default'].createContext(); + +var CTabs = function CTabs(props) { + var children = props.children, + activeTab = props.activeTab, + onActiveTabChange = props.onActiveTabChange; + + var _useState = React.useState(0), + _useState2 = _slicedToArray(_useState, 2), + active = _useState2[0], + setActive = _useState2[1]; + + React.useEffect(function () { + activeTab !== undefined && setActive(activeTab); + }, [activeTab]); + + var setActiveTab = function setActiveTab(tab) { + onActiveTabChange && onActiveTabChange(tab); + setActive(tab); + }; + + return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(Context$4.Provider, { + value: { + active: active, + setActiveTab: setActiveTab + } + }, children)); +}; + +CTabs.propTypes = { + children: propTypes.node, + activeTab: propTypes.oneOfType([propTypes.string, propTypes.number]), + onActiveTabChange: propTypes.func +}; + +var getIndex$1 = function getIndex(el) { + return Array.from(el.parentNode.children).indexOf(el); +}; + +var getState$1 = function getState(_ref) { + var el = _ref.current; + var hasSiblings = el.parentElement.childNodes.length > 1; + return el.dataset.tab || getIndex$1(hasSiblings ? el : el.parentElement); +}; + +var CNavLink = function CNavLink(props) { + var innerRef = props.innerRef, + className = props.className, + onClick = props.onClick, + rest = _objectWithoutProperties(props, ["innerRef", "className", "onClick"]); + + var tabState = React.useContext(Context$4); + var actTab = (tabState || {}).active; + var ref = /*#__PURE__*/React.createRef(); + innerRef && innerRef(ref); + + var _useState = React.useState(), + _useState2 = _slicedToArray(_useState, 2), + active = _useState2[0], + setActive = _useState2[1]; + + React.useEffect(function () { + typeof actTab !== 'undefined' && setActive(getState$1(ref) === actTab); + }, [actTab]); + + var click = function click(e) { + onClick && onClick(e); + tabState && tabState.setActiveTab(getState$1(ref)); + }; + + return /*#__PURE__*/React__default['default'].createElement(CLink, _extends$1({ + active: active + }, rest, { + innerRef: ref, + onClick: click, + className: ['nav-link', className] + })); +}; + +CNavLink.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.func, propTypes.object]), + onClick: propTypes.func +}; + +var CBrand = function CBrand(props) { + var tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames(className); + var Tag = attributes.to || attributes.href ? CLink : tag; + + var ref = _defineProperty({}, "".concat(typeof Tag === 'string' ? 'ref' : 'innerRef'), innerRef); + + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, ref)); +}; + +CBrand.propTypes = { + tag: tagPropType, + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CBrand.defaultProps = { + tag: 'div' +}; + +var CNavbarBrand = function CNavbarBrand(props) { + return /*#__PURE__*/React__default['default'].createElement(CBrand, _extends$1({}, props, { + className: ['navbar-brand', props.className] + })); +}; + +var CNavbar = function CNavbar(props) { + var _classNames; + + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + expandable = props.expandable, + light = props.light, + fixed = props.fixed, + sticky = props.sticky, + color = props.color, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "expandable", "light", "fixed", "sticky", "color"]); //render + + + var classes = classnames('navbar', className, light ? 'navbar-light' : 'navbar-dark', (_classNames = {}, _defineProperty(_classNames, "navbar-expand".concat(expandable === true ? '' : "-".concat(expandable)), expandable), _defineProperty(_classNames, "bg-".concat(color), color), _defineProperty(_classNames, "fixed-".concat(fixed), fixed), _defineProperty(_classNames, 'sticky-top', sticky), _classNames)); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CNavbar.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + light: propTypes.bool, + color: propTypes.string, + fixed: propTypes.oneOf(['', 'top', 'bottom']), + sticky: propTypes.bool, + expandable: propTypes.oneOfType([propTypes.bool, propTypes.string]) +}; +CNavbar.defaultProps = { + tag: 'nav' +}; + +var CNavbarNav = function CNavbarNav(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames('navbar-nav', className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CNavbarNav.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CNavbarNav.defaultProps = { + tag: 'ul' +}; + +var CNavbarText = function CNavbarText(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames('navbar-text', className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CNavbarText.propTypes = { + tag: tagPropType, + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CNavbarText.defaultProps = { + tag: 'div' +}; + +var CPagination = function CPagination(props) { + var className = props.className, + innerRef = props.innerRef, + addListClass = props.addListClass, + activePage = props.activePage, + size = props.size, + firstButton = props.firstButton, + previousButton = props.previousButton, + nextButton = props.nextButton, + lastButton = props.lastButton, + dots = props.dots, + arrows = props.arrows, + doubleArrows = props.doubleArrows, + limit = props.limit, + pages = props.pages, + align = props.align, + onActivePageChange = props.onActivePageChange, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "addListClass", "activePage", "size", "firstButton", "previousButton", "nextButton", "lastButton", "dots", "arrows", "doubleArrows", "limit", "pages", "align", "onActivePageChange"]); + + React.useEffect(function () { + pages < activePage && onActivePageChange(pages, true); + }, [pages]); //render + + var listClasses = classnames('pagination', size && 'pagination-' + size, 'justify-content-' + align, addListClass); + var backArrowsClasses = classnames('page-item', activePage === 1 && 'disabled'); + var nextArrowsClasses = classnames('page-item', activePage === pages && 'disabled'); + + var showDots = function () { + return dots && limit > 4 && limit < pages; + }(); + + var maxPrevItems = function () { + return Math.floor((limit - 1) / 2); + }(); + + var maxNextItems = function () { + return Math.ceil((limit - 1) / 2); + }(); + + var beforeDots = function () { + return showDots && activePage > maxPrevItems + 1; + }(); + + var afterDots = function () { + return showDots && activePage < pages - maxNextItems; + }(); + + var computedLimit = function () { + return limit - afterDots - beforeDots; + }(); + + var range = function () { + return activePage + maxNextItems; + }(); + + var lastItem = function () { + return range >= pages ? pages : range - afterDots; + }(); + + var itemsAmount = function () { + return pages < computedLimit ? pages : computedLimit; + }(); + + var items = function () { + if (activePage - maxPrevItems <= 1) { + return Array.from({ + length: itemsAmount + }, function (v, i) { + return i + 1; + }); + } else { + return Array.from({ + length: itemsAmount + }, function (v, i) { + return lastItem - i; + }).reverse(); + } + }(); + + var setPage = function setPage(number) { + if (number !== activePage) { + onActivePageChange(number); + } + }; + + return /*#__PURE__*/React__default['default'].createElement("nav", _extends$1({ + className: className, + "aria-label": "pagination" + }, attributes, { + ref: innerRef + }), /*#__PURE__*/React__default['default'].createElement("ul", { + className: listClasses + }, doubleArrows && /*#__PURE__*/React__default['default'].createElement("li", { + className: backArrowsClasses + }, /*#__PURE__*/React__default['default'].createElement(CLink, { + className: "page-link", + onClick: function onClick() { + return setPage(1); + }, + "aria-label": "Go to first page", + "aria-disabled": activePage === 1, + disabled: activePage === 1 + }, firstButton)), arrows && /*#__PURE__*/React__default['default'].createElement("li", { + className: backArrowsClasses + }, /*#__PURE__*/React__default['default'].createElement(CLink, { + className: "page-link", + onClick: function onClick() { + return setPage(activePage - 1); + }, + "aria-label": "Go to previous page", + "aria-disabled": activePage === 1, + disabled: activePage === 1 + }, previousButton)), beforeDots && /*#__PURE__*/React__default['default'].createElement("li", { + role: "separator", + className: "page-item disabled" + }, /*#__PURE__*/React__default['default'].createElement("span", { + className: "page-link" + }, "\u2026")), items.map(function (i) { + return /*#__PURE__*/React__default['default'].createElement("li", { + className: "".concat(activePage === i ? 'active' : '', " page-item"), + key: i + }, /*#__PURE__*/React__default['default'].createElement(CLink, { + className: "page-link", + onClick: function onClick(e) { + return setPage(i); + }, + "aria-label": activePage === i ? "Current page ".concat(i) : "Go to page ".concat(i) + }, i)); + }), afterDots && /*#__PURE__*/React__default['default'].createElement("li", { + role: "separator", + className: "page-item disabled" + }, /*#__PURE__*/React__default['default'].createElement("span", { + className: "page-link" + }, "\u2026")), arrows && /*#__PURE__*/React__default['default'].createElement("li", { + className: nextArrowsClasses + }, /*#__PURE__*/React__default['default'].createElement(CLink, { + className: "page-link", + onClick: function onClick() { + return setPage(activePage + 1); + }, + "aria-label": "Go to next page", + "aria-disabled": activePage === pages, + disabled: activePage === pages + }, nextButton)), doubleArrows && /*#__PURE__*/React__default['default'].createElement("li", { + className: nextArrowsClasses + }, /*#__PURE__*/React__default['default'].createElement(CLink, { + className: "page-link", + onClick: function onClick() { + return setPage(pages); + }, + "aria-label": "Go to last page", + "aria-disabled": activePage === pages, + disabled: activePage === pages + }, lastButton)))); +}; + +CPagination.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + activePage: propTypes.number, + dots: propTypes.bool, + arrows: propTypes.bool, + doubleArrows: propTypes.bool, + firstButton: propTypes.oneOfType([propTypes.node, propTypes.string]), + previousButton: propTypes.oneOfType([propTypes.node, propTypes.string]), + nextButton: propTypes.oneOfType([propTypes.node, propTypes.string]), + lastButton: propTypes.oneOfType([propTypes.node, propTypes.string]), + size: propTypes.oneOf(['', 'sm', 'lg']), + align: propTypes.oneOf(['start', 'center', 'end']), + addListClass: propTypes.string, + limit: propTypes.number, + pages: propTypes.number, + onActivePageChange: propTypes.func.isRequired +}; +CPagination.defaultProps = { + activePage: 1, + dots: true, + arrows: true, + doubleArrows: true, + limit: 5, + firstButton: /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, "\xAB"), + previousButton: /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, "\u2039"), + nextButton: /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, "\u203A"), + lastButton: /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, "\xBB"), + align: 'start', + pages: 10 +}; + +function ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$5(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +var CProgressBar = function CProgressBar(directProps) { + var _useContext = React.useContext(Context$3), + inheritedProps = _useContext.inheritedProps; + + var props = _objectSpread$5(_objectSpread$5({}, inheritedProps), directProps); + + var children = props.children, + className = props.className, + innerRef = props.innerRef, + color = props.color, + striped = props.striped, + animated = props.animated, + precision = props.precision, + showPercentage = props.showPercentage, + showValue = props.showValue, + max = props.max, + value = props.value, + attributes = _objectWithoutProperties(props, ["children", "className", "innerRef", "color", "striped", "animated", "precision", "showPercentage", "showValue", "max", "value"]); // render + + + var progressBarClasses = classnames('progress-bar', animated && 'progress-bar-animated', (striped || animated) && 'progress-bar-striped', color && "bg-".concat(color), className); + var valLabel = Number(value).toFixed(precision); + var percentLabel = Number(value / max * 100).toFixed(precision) + '%'; + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: progressBarClasses, + style: { + width: "".concat(value / max * 100, "%") + }, + role: "progressbar", + "aria-valuenow": value, + "aria-valuemin": "0", + "aria-valuemax": max + }, attributes, { + ref: innerRef + }), showPercentage ? percentLabel : showValue ? valLabel : children); +}; + +CProgressBar.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + value: propTypes.number, + max: propTypes.number, + animated: propTypes.bool, + striped: propTypes.bool, + color: propTypes.string, + precision: propTypes.number, + showPercentage: propTypes.bool, + showValue: propTypes.bool +}; + +var Context$3 = /*#__PURE__*/React__default['default'].createContext({}); //component - CoreUI / CProgress + +var CProgress = function CProgress(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + size = props.size, + color = props.color, + striped = props.striped, + animated = props.animated, + precision = props.precision, + showPercentage = props.showPercentage, + showValue = props.showValue, + max = props.max, + value = props.value, + attributes = _objectWithoutProperties(props, ["children", "className", "innerRef", "size", "color", "striped", "animated", "precision", "showPercentage", "showValue", "max", "value"]); + + var inheritedProps = { + color: color, + striped: striped, + animated: animated, + precision: precision, + showPercentage: showPercentage, + showValue: showValue, + max: max, + value: value + }; + var progressClasses = classnames('progress', size && 'progress-' + size, className); // render + + return /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: progressClasses + }, attributes, { + ref: innerRef + }), /*#__PURE__*/React__default['default'].createElement(Context$3.Provider, { + value: { + inheritedProps: inheritedProps + } + }, children || /*#__PURE__*/React__default['default'].createElement(CProgressBar, null))); +}; + +CProgress.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + size: propTypes.string, + value: propTypes.oneOfType([propTypes.string, propTypes.number]), + max: propTypes.oneOfType([propTypes.string, propTypes.number]), + animated: propTypes.bool, + striped: propTypes.bool, + color: propTypes.string, + precision: propTypes.number, + showPercentage: propTypes.bool, + showValue: propTypes.bool +}; +CProgress.defaultProps = { + value: 0, + max: 100, + precision: 0 +}; + +var CSwitch = function CSwitch(props) { + var className = props.className, + innerRef = props.innerRef, + size = props.size, + color = props.color, + labelOn = props.labelOn, + labelOff = props.labelOff, + variant = props.variant, + shape = props.shape, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "size", "color", "labelOn", "labelOff", "variant", "shape"]); //render + + + var classes = classnames('c-switch form-check-label', (labelOn || labelOff) && 'c-switch-label', size && "c-switch-".concat(size), shape && "c-switch-".concat(shape), color && "c-switch".concat(variant ? "-".concat(variant) : '', "-").concat(color), className); + var inputClasses = classnames('c-switch-input', 'c-form-check-input'); + return /*#__PURE__*/React__default['default'].createElement("label", { + className: classes + }, /*#__PURE__*/React__default['default'].createElement("input", _extends$1({ + className: inputClasses, + type: "checkbox" + }, attributes, { + ref: innerRef + })), /*#__PURE__*/React__default['default'].createElement("span", { + className: "c-switch-slider", + "data-checked": labelOn, + "data-unchecked": labelOff + })); +}; + +CSwitch.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + size: propTypes.oneOf(['', 'lg', 'sm']), + shape: propTypes.oneOf(['', 'pill', 'square']), + variant: propTypes.oneOf(['', '3d', 'opposite', 'outline']), + color: propTypes.string, + labelOn: propTypes.string, + labelOff: propTypes.string +}; + +function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } + +function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } + +var warned = {}; + +var colog = function colog(msg, icon) { + if (!warned[icon] && process && process.env && process.env.NODE_ENV === "development") { + warned[icon] = true; + console.error(msg); + } +}; + +var toCamelCase = function toCamelCase(str) { + return str.replace(/([-_][a-z0-9])/gi, function ($1) { + return $1.toUpperCase(); + }).replace(/-/gi, ""); +}; //component - CoreUI / CIcon + + +var CIcon = function CIcon(props) { + var className = props.className, + name = props.name, + content = props.content, + customClasses = props.customClasses, + size = props.size, + src = props.src, + title = props.title, + use = props.use, + attributes = _objectWithoutPropertiesLoose(props, ["className", "name", "content", "customClasses", "size", "src", "title", "use"]); + + var _useState = React.useState(0), + change = _useState[0], + setChange = _useState[1]; + + React.useMemo(function () { + return setChange(change + 1); + }, [name, JSON.stringify[content]]); + var iconName = React.useMemo(function () { + var iconNameIsKebabCase = name && name.includes("-"); + return iconNameIsKebabCase ? toCamelCase(name) : name; + }, [change]); + var titleCode = title ? "" + title + "" : ""; + var code = React.useMemo(function () { + if (content) { + return content; + } else if (name && React__default['default'].icons) { + return React__default['default'].icons[iconName] ? React__default['default'].icons[iconName] : colog("CIcon component: icon name '" + iconName + "' does not exist in React.icons object. " + "To use icons by 'name' prop you need to make them available globally " + "by adding them to React.icons object. CIcon component docs: https://coreui.io/react/docs/components/CIcon \n", iconName); + } + }, [change]); + var iconCode = React.useMemo(function () { + return Array.isArray(code) ? code[1] || code[0] : code; + }, [change]); + + var scale = function () { + return Array.isArray(code) && code.length > 1 ? code[0] : "64 64"; + }(); + + var viewBox = function () { + return attributes.viewBox || "0 0 " + scale; + }(); + + var computedSize = function () { + var addCustom = !size && (attributes.width || attributes.height); + return size === "custom" || addCustom ? "custom-size" : size; + }(); //render + + + var computedClasses = classnames("c-icon", computedSize && "c-icon-" + computedSize, className); + var classes = customClasses || computedClasses; + return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, !src && !use && /*#__PURE__*/React__default['default'].createElement("svg", _extends({}, attributes, { + xmlns: "http://www.w3.org/2000/svg", + viewBox: viewBox, + className: classes, + role: "img", + dangerouslySetInnerHTML: { + __html: titleCode + iconCode + } + })), src && !use && /*#__PURE__*/React__default['default'].createElement("img", _extends({}, attributes, { + className: className, + src: src, + role: "img" + })), !src && use && /*#__PURE__*/React__default['default'].createElement("svg", _extends({}, attributes, { + xmlns: "http://www.w3.org/2000/svg", + className: classes, + role: "img" + }), /*#__PURE__*/React__default['default'].createElement("use", { + href: use + }))); +}; + +CIcon.propTypes = process.env.NODE_ENV !== "production" ? { + className: propTypes.string, + name: propTypes.string, + content: propTypes.oneOfType([propTypes.string, propTypes.array]), + size: propTypes.oneOf(["custom", "custom-size", "sm", "lg", "xl", "2xl", "3xl", "4xl", "5xl", "6xl", "7xl", "8xl", "9xl"]), + customClasses: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + src: propTypes.string, + title: propTypes.string, + use: propTypes.string +} : {}; + +const cilArrowTop = ["512 512",""]; + +const cilBan = ["512 512",""]; + +const cilFilterX = ["512 512",""]; + +function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$4(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } +/*import style from './CDataTable.module.css'*/ + +/*import './CDataTable.css'*/ +//component - CoreUI / CTable + +var CDataTable = function CDataTable(props) { + var _ref3; + + var innerRef = props.innerRef, + overTableSlot = props.overTableSlot, + columnHeaderSlot = props.columnHeaderSlot, + sortingIconSlot = props.sortingIconSlot, + columnFilterSlot = props.columnFilterSlot, + noItemsViewSlot = props.noItemsViewSlot, + noItemsView = props.noItemsView, + captionSlot = props.captionSlot, + footerSlot = props.footerSlot, + underTableSlot = props.underTableSlot, + theadTopSlot = props.theadTopSlot, + loadingSlot = props.loadingSlot, + scopedSlots = props.scopedSlots, + loading = props.loading, + fields = props.fields, + pagination = props.pagination, + activePage = props.activePage, + itemsPerPage = props.itemsPerPage, + items = props.items, + sorter = props.sorter, + header = props.header, + clickableRows = props.clickableRows, + columnFilter = props.columnFilter, + tableFilterValue = props.tableFilterValue, + tableFilter = props.tableFilter, + cleaner = props.cleaner, + addTableClasses = props.addTableClasses, + size = props.size, + dark = props.dark, + striped = props.striped, + hover = props.hover, + border = props.border, + outlined = props.outlined, + responsive = props.responsive, + footer = props.footer, + itemsPerPageSelect = props.itemsPerPageSelect, + sorterValue = props.sorterValue, + columnFilterValue = props.columnFilterValue, + onRowClick = props.onRowClick, + onSorterValueChange = props.onSorterValueChange, + onPaginationChange = props.onPaginationChange, + onColumnFilterChange = props.onColumnFilterChange, + onPagesChange = props.onPagesChange, + onTableFilterChange = props.onTableFilterChange, + onPageChange = props.onPageChange, + onFilteredItemsChange = props.onFilteredItemsChange; + var compData = React.useRef({ + firstRun: true, + columnFiltered: 0, + changeItems: 0 + }).current; // + + var _useState = React.useState(itemsPerPage), + _useState2 = _slicedToArray(_useState, 2), + perPageItems = _useState2[0], + setPerPageItems = _useState2[1]; + + var _useState3 = React.useState(sorterValue || {}), + _useState4 = _slicedToArray(_useState3, 2), + sorterState = _useState4[0], + setSorterState = _useState4[1]; + + var _useState5 = React.useState(tableFilterValue), + _useState6 = _slicedToArray(_useState5, 2), + tableFilterState = _useState6[0], + setTableFilterState = _useState6[1]; + + var _useState7 = React.useState(columnFilterValue || {}), + _useState8 = _slicedToArray(_useState7, 2), + columnFilterState = _useState8[0], + setColumnFilterState = _useState8[1]; + + var _useState9 = React.useState(activePage || 1), + _useState10 = _slicedToArray(_useState9, 2), + page = _useState10[0], + setPage = _useState10[1]; + + var _useState11 = React.useState(items || []), + _useState12 = _slicedToArray(_useState11, 2), + passedItems = _useState12[0], + setPassedItems = _useState12[1]; // functions + + + var cellClass = function cellClass(item, colName, index) { + var classes = []; + + if (item._cellClasses && item._cellClasses[colName]) { + classes.push(item._cellClasses[colName]); + } + + if (fields && fields[index]._classes) { + classes.push(fields[index]._classes); + } + + return classes; + }; + + var pretifyName = function pretifyName(name) { + return name.replace(/[-_.]/g, " ").replace(/ +/g, " ").replace(/([a-z0-9])([A-Z])/g, "$1 $2").split(" ").map(function (word) { + return word.charAt(0).toUpperCase() + word.slice(1); + }).join(" "); + }; + + var headerClass = function headerClass(i) { + return fields && fields[i]._classes && fields[i]._classes; + }; + + var isSortable = function isSortable(i) { + var isDataColumn = itemsDataColumns.includes(rawColumnNames[i]); + return sorter && (!fields || fields[i].sorter !== false) && isDataColumn; + }; + + var headerStyles = function headerStyles(index) { + var style = { + verticalAlign: "middle", + overflow: "hidden" + }; + + if (isSortable(index)) { + style.cursor = "pointer"; + } + + if (fields && fields[index] && fields[index]._style) { + return _objectSpread$4(_objectSpread$4({}, style), fields[index]._style); + } + + return style; + }; + + var getIconState = function getIconState(index) { + var direction = sorterState.asc ? "asc" : "desc"; + return rawColumnNames[index] === sorterState.column ? direction : 0; + }; + + var iconClasses = function iconClasses(index) { + var state = getIconState(index); + return ["position-absolute", style["icon-transition"], style["arrow-position"], !state && style["transparent"], state === "desc" && style["rotate-icon"]]; + }; + + var rowClicked = function rowClicked(item, index, e) { + var detailsClick = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + onRowClick && onRowClick(item, index, getClickedColumnName(e, detailsClick), e); + }; + + var changeSort = function changeSort(column, index) { + if (!isSortable(index)) { + return; + } //if column changed or sort was descending change asc to true + + + var state = sorterState; + var columnRepeated = state.column === column; + + if (!sorter || !sorter.resetable) { + state.column = column; + } else { + state.column = columnRepeated && state.asc === false ? null : column; + } + + state.asc = !(columnRepeated && state.asc); + setSorterState(_objectSpread$4({}, state)); + }; + + React.useEffect(function () { + onSorterValueChange && onSorterValueChange(sorterState); + }, [JSON.stringify(sorterState)]); + + var paginationChange = function paginationChange(e) { + onPaginationChange && onPaginationChange(Number(e.target.value)); + !itemsPerPageSelect.external && setPerPageItems(Number(e.target.value)); + }; + + var columnFilterEvent = function columnFilterEvent(colName, value, type) { + var isLazy = columnFilter && columnFilter.lazy === true; + + if (isLazy && type === "input" || !isLazy && type === "change") { + return; + } + + var newState = _objectSpread$4(_objectSpread$4({}, columnFilterState), {}, _defineProperty({}, "".concat(colName), value)); + + setColumnFilterState(newState); + }; + + React.useEffect(function () { + onColumnFilterChange && onColumnFilterChange(columnFilterState); + }, [JSON.stringify(columnFilterState)]); + + var tableFilterChange = function tableFilterChange(value, type) { + var isLazy = tableFilter && tableFilter.lazy === true; + + if (isLazy && type === "input" || !isLazy && type === "change") { + return; + } + + setTableFilterState(value); + }; + + React.useEffect(function () { + onTableFilterChange && onTableFilterChange(tableFilterState); + }, [tableFilterState]); + + var getClickedColumnName = function getClickedColumnName(e, detailsClick) { + if (detailsClick) { + return "details"; + } else { + var children = Array.from(e.target.closest("tr").children); + var clickedCell = children.filter(function (child) { + return child.contains(e.target); + })[0]; + return rawColumnNames[children.indexOf(clickedCell)]; + } + }; + + var clean = function clean() { + setTableFilterState(""); + setColumnFilterState({}); + setSorterState({ + column: "", + asc: true + }); + }; // computed + + + var genCols = Object.keys(passedItems[0] || {}).filter(function (el) { + return el.charAt(0) !== "_"; + }); + var rawColumnNames = fields ? fields.map(function (el) { + return el.key || el; + }) : genCols; + var itemsDataColumns = rawColumnNames.filter(function (name) { + return genCols.includes(name); + }); + React.useMemo(function () { + compData.columnFiltered++; + }, [JSON.stringify(columnFilter), JSON.stringify(columnFilterState), itemsDataColumns.join(""), compData.changeItems]); + var columnFiltered = React.useMemo(function () { + var items = passedItems; + + if (columnFilter && columnFilter.external) { + return items; + } + + Object.entries(columnFilterState).forEach(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + + var columnFilter = String(value).toLowerCase(); + + if (columnFilter && itemsDataColumns.includes(key)) { + items = items.filter(function (item) { + return String(item[key]).toLowerCase().includes(columnFilter); + }); + } + }); + return items; + }, [compData.columnFiltered]); + var tableFiltered = React.useMemo(function () { + var items = columnFiltered; + + if (!tableFilterState || tableFilter && tableFilter.external) { + return items; + } + + var filter = tableFilterState.toLowerCase(); + + var valueContainFilter = function valueContainFilter(val) { + return String(val).toLowerCase().includes(filter); + }; + + items = items.filter(function (item) { + return !!itemsDataColumns.find(function (key) { + return valueContainFilter(item[key]); + }); + }); + return items; + }, [compData.columnFiltered, tableFilterState, JSON.stringify(tableFilter)]); + var sortedItems = React.useMemo(function () { + var col = sorterState.column; + + if (!col || !itemsDataColumns.includes(col) || sorter && sorter.external) { + return tableFiltered; + } //if values in column are to be sorted by numeric value they all have to be type number + + + var flip = sorterState.asc ? 1 : -1; + var sorted = tableFiltered.slice().sort(function (item, item2) { + var value = item[col]; + var value2 = item2[col]; + var a = typeof value === "number" ? value : String(value).toLowerCase(); + var b = typeof value2 === "number" ? value2 : String(value2).toLowerCase(); + return a > b ? 1 * flip : b > a ? -1 * flip : 0; + }); + return sorted; + }, [JSON.stringify(tableFiltered), JSON.stringify(sorterState), JSON.stringify(sorter)]); + React.useEffect(function () { + !compData.firstRun && onFilteredItemsChange && onFilteredItemsChange(sortedItems); + }, [JSON.stringify(sortedItems)]); + var tableClasses = ["table", (_ref3 = {}, _defineProperty(_ref3, "table-".concat(size), size), _defineProperty(_ref3, "table-dark", dark), _defineProperty(_ref3, "table-striped", striped), _defineProperty(_ref3, "table-hover", hover), _defineProperty(_ref3, "table-bordered", border), _defineProperty(_ref3, "border", outlined), _ref3), addTableClasses]; + var columnNames = React.useMemo(function () { + if (fields) { + return fields.map(function (f) { + return f.label !== undefined ? f.label : pretifyName(f.key || f); + }); + } + + return rawColumnNames.map(function (el) { + return pretifyName(el); + }); + }, [fields, rawColumnNames]); + var sortingIconStyles = sorter && "position-relative pr-4"; + var colspan = rawColumnNames.length; + var totalPages = Math.ceil(sortedItems.length / perPageItems) || 1; + React.useMemo(function () { + !compData.firstRun && onPagesChange && onPagesChange(totalPages); + }, [totalPages]); + var computedPage = React.useMemo(function () { + var compPage = pagination ? page : activePage; + !compData.firstRun && onPageChange && onPageChange(compPage); + return compPage; + }, [page, activePage, pagination]); + var firstItemIndex = (computedPage - 1) * perPageItems || 0; + var paginatedItems = sortedItems.slice(firstItemIndex, firstItemIndex + perPageItems); + var currentItems = computedPage ? paginatedItems : sortedItems; + var tableFilterData = { + label: tableFilter && tableFilter.label || "Filter:", + placeholder: tableFilter && tableFilter.placeholder || "type string..." + }; + var paginationSelect = { + label: itemsPerPageSelect && itemsPerPageSelect.label || "Items per page:", + values: itemsPerPageSelect && itemsPerPageSelect.values || [5, 10, 20, 50] + }; + + var noItemsText = function () { + var customValues = noItemsView || {}; + + if (passedItems.length) { + return customValues.noResults || "No filtering results"; + } + + return customValues.noItems || "No items"; + }(); + + var isFiltered = tableFilterState || sorterState.column || Object.values(columnFilterState).join(""); + var cleanerProps = { + content: cilFilterX, + className: "mfs-2 ".concat(isFiltered ? "text-danger" : "transparent"), + role: isFiltered ? "button" : null, + tabIndex: isFiltered ? 0 : null + }; // watch + + React.useMemo(function () { + return setPerPageItems(itemsPerPage); + }, [itemsPerPage]); + React.useMemo(function () { + return setSorterState(_objectSpread$4({}, sorterValue)); + }, [sorterValue]); + React.useMemo(function () { + return setTableFilterState(tableFilterValue); + }, [tableFilterValue]); + React.useMemo(function () { + return setColumnFilterState(_objectSpread$4({}, columnFilterValue)); + }, [columnFilterValue]); //items + + React.useMemo(function () { + if (items && !compData.firstRun && (items.length !== passedItems.length || JSON.stringify(items) !== JSON.stringify(passedItems))) { + setPassedItems(items); + compData.changeItems++; + } + }); // render + + compData.firstRun = false; + var paginationProps = _typeof(pagination) === "object" ? pagination : null; + var headerContent = /*#__PURE__*/React__default['default'].createElement("tr", null, columnNames.map(function (name, index) { + return /*#__PURE__*/React__default['default'].createElement("th", { + onClick: function onClick() { + changeSort(rawColumnNames[index], index); + }, + className: classnames([headerClass(index), sortingIconStyles]), + style: headerStyles(index), + key: index + }, columnHeaderSlot["".concat(rawColumnNames[index])] || /*#__PURE__*/React__default['default'].createElement("div", { + className: "d-inline" + }, name), isSortable(index) && (sortingIconSlot && sortingIconSlot(getIconState(index), iconClasses(index)) || /*#__PURE__*/React__default['default'].createElement(CIcon, { + customClasses: classnames(iconClasses(index)), + width: 18, + content: cilArrowTop + }))); + })); + return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement("div", { + ref: innerRef + }, (itemsPerPageSelect || tableFilter || cleaner) && /*#__PURE__*/React__default['default'].createElement("div", { + className: "row my-2 mx-0" + }, (tableFilter || cleaner) && /*#__PURE__*/React__default['default'].createElement("div", { + className: "col-sm-6 form-inline p-0 c-datatable-filter" + }, tableFilter && /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement("label", { + className: "mfe-2" + }, tableFilterData.label), /*#__PURE__*/React__default['default'].createElement("input", { + className: "form-control", + type: "text", + placeholder: tableFilterData.placeholder, + onInput: function onInput(e) { + tableFilterChange(e.target.value, "input"); + }, + onChange: function onChange(e) { + tableFilterChange(e.target.value, "change"); + }, + value: tableFilterState || "", + "aria-label": "table filter input" + })), cleaner && (typeof cleaner === "function" ? cleaner(clean, isFiltered, cleanerProps) : /*#__PURE__*/React__default['default'].createElement(CIcon, _extends$1({}, cleanerProps, { + onClick: clean, + onKeyUp: function onKeyUp(event) { + if (event.key === "Enter") clean(); + } + })))), itemsPerPageSelect && /*#__PURE__*/React__default['default'].createElement("div", { + className: "col-sm-6 p-0 ".concat(tableFilter || cleaner ? "" : "offset-sm-6") + }, /*#__PURE__*/React__default['default'].createElement("div", { + className: "form-inline justify-content-sm-end c-datatable-items-per-page" + }, /*#__PURE__*/React__default['default'].createElement("label", { + className: "mfe-2" + }, paginationSelect.label), /*#__PURE__*/React__default['default'].createElement("select", { + className: "form-control", + onChange: paginationChange, + "aria-label": "changes number of visible items", + value: perPageItems + }, paginationSelect.values.map(function (number, key) { + return /*#__PURE__*/React__default['default'].createElement("option", { + val: number, + key: key + }, number); + })))))), overTableSlot, /*#__PURE__*/React__default['default'].createElement("div", { + className: "position-relative ".concat(responsive && "table-responsive") + }, /*#__PURE__*/React__default['default'].createElement("table", { + className: classnames(tableClasses) + }, /*#__PURE__*/React__default['default'].createElement("thead", null, theadTopSlot, header && headerContent, columnFilter && /*#__PURE__*/React__default['default'].createElement("tr", { + className: "table-sm" + }, rawColumnNames.map(function (colName, index) { + return /*#__PURE__*/React__default['default'].createElement("th", { + className: classnames(headerClass(index)), + key: index + }, columnFilterSlot["".concat(rawColumnNames[index])] || (!fields || fields[index].filter !== false) && /*#__PURE__*/React__default['default'].createElement("input", { + className: "form-control form-control-sm", + onInput: function onInput(e) { + columnFilterEvent(colName, e.target.value, "input"); + }, + onChange: function onChange(e) { + columnFilterEvent(colName, e.target.value, "change"); + }, + value: columnFilterState[colName] || "", + "aria-label": "column name: '".concat(colName, "' filter input") + })); + }))), /*#__PURE__*/React__default['default'].createElement("tbody", { + style: clickableRows && { + cursor: "pointer" + } + }, currentItems.map(function (item, itemIndex) { + return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, { + key: itemIndex + }, /*#__PURE__*/React__default['default'].createElement("tr", { + className: classnames(item._classes), + tabIndex: clickableRows && 0, + onClick: function onClick(e) { + rowClicked(item, itemIndex + firstItemIndex, e); + } + }, rawColumnNames.map(function (colName, index) { + return scopedSlots[colName] && /*#__PURE__*/React__default['default'].cloneElement(scopedSlots[colName](item, itemIndex + firstItemIndex), { + key: index + }) || /*#__PURE__*/React__default['default'].createElement("td", { + className: classnames(cellClass(item, colName, index)), + key: index + }, String(item[colName])); + })), scopedSlots.details && /*#__PURE__*/React__default['default'].createElement("tr", { + onClick: function onClick(e) { + rowClicked(item, itemIndex + firstItemIndex, e, true); + }, + className: "p-0", + style: { + border: "none !important" + }, + key: "details" + itemIndex + }, /*#__PURE__*/React__default['default'].createElement("td", { + colSpan: colspan, + className: "p-0", + style: { + border: "none !important" + } + }, scopedSlots.details(item, itemIndex + firstItemIndex)))); + }), !currentItems.length && /*#__PURE__*/React__default['default'].createElement("tr", null, /*#__PURE__*/React__default['default'].createElement("td", { + colSpan: colspan + }, noItemsViewSlot || /*#__PURE__*/React__default['default'].createElement("div", { + className: "text-center my-5" + }, /*#__PURE__*/React__default['default'].createElement("h2", null, noItemsText + " ", /*#__PURE__*/React__default['default'].createElement(CIcon, { + width: "30", + name: "cilBan", + content: cilBan, + className: "text-danger mb-2" + })))))), footer && currentItems.length > 0 && /*#__PURE__*/React__default['default'].createElement("tfoot", null, headerContent), footerSlot, captionSlot), loading && (loadingSlot || /*#__PURE__*/React__default['default'].createElement(CElementCover, { + boundaries: [{ + sides: ["top"], + query: "td" + }, { + sides: ["bottom"], + query: "tbody" + }] + }))), underTableSlot, pagination && /*#__PURE__*/React__default['default'].createElement(CPagination, _extends$1({ + style: { + display: totalPages > 1 ? "inline" : "none" + }, + onActivePageChange: function onActivePageChange(page) { + setPage(page); + }, + pages: totalPages, + activePage: page + }, paginationProps))); +}; + +CDataTable.propTypes = { + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + overTableSlot: propTypes.node, + columnHeaderSlot: propTypes.object, + sortingIconSlot: propTypes.func, + columnFilterSlot: propTypes.object, + noItemsViewSlot: propTypes.node, + noItemsView: propTypes.object, + captionSlot: propTypes.node, + footerSlot: propTypes.node, + underTableSlot: propTypes.node, + scopedSlots: propTypes.object, + theadTopSlot: propTypes.node, + loadingSlot: propTypes.node, + loading: propTypes.bool, + fields: propTypes.array, + pagination: propTypes.oneOfType([propTypes.bool, propTypes.object]), + activePage: propTypes.number, + itemsPerPage: propTypes.number, + items: propTypes.array, + sorter: propTypes.oneOfType([propTypes.bool, propTypes.object]), + clickableRows: propTypes.bool, + columnFilter: propTypes.oneOfType([propTypes.bool, propTypes.object]), + tableFilterValue: propTypes.string, + tableFilter: propTypes.oneOfType([propTypes.bool, propTypes.object]), + cleaner: propTypes.oneOfType([propTypes.bool, propTypes.func]), + addTableClasses: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + size: propTypes.string, + dark: propTypes.bool, + striped: propTypes.bool, + hover: propTypes.bool, + border: propTypes.bool, + outlined: propTypes.bool, + responsive: propTypes.bool, + footer: propTypes.bool, + itemsPerPageSelect: propTypes.oneOfType([propTypes.bool, propTypes.object]), + sorterValue: propTypes.object, + columnFilterValue: propTypes.object, + header: propTypes.bool, + onRowClick: propTypes.func, + onSorterValueChange: propTypes.func, + onPaginationChange: propTypes.func, + onColumnFilterChange: propTypes.func, + onPagesChange: propTypes.func, + onTableFilterChange: propTypes.func, + onPageChange: propTypes.func, + onFilteredItemsChange: propTypes.func +}; +CDataTable.defaultProps = { + itemsPerPage: 10, + responsive: true, + columnHeaderSlot: {}, + columnFilterSlot: {}, + scopedSlots: {}, + sorterValue: {}, + header: true +}; + +var Context$2 = /*#__PURE__*/React__default['default'].createContext(); + +var CTabContent = function CTabContent(props) { + var className = props.className, + innerRef = props.innerRef, + fade = props.fade, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "fade"]); // render + + + var classes = classnames('tab-content', className); + return /*#__PURE__*/React__default['default'].createElement(Context$2.Provider, { + value: fade + }, /*#__PURE__*/React__default['default'].createElement("div", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + }))); +}; + +CTabContent.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + fade: propTypes.bool +}; +CTabContent.defaultProps = { + fade: true +}; + +var getIndex = function getIndex(el) { + return Array.from(el.parentNode.children).indexOf(el); +}; + +var getState = function getState(r) { + return r.current.dataset.tab || getIndex(r.current); +}; + +var CTabPane = function CTabPane(props) { + var className = props.className, + innerRef = props.innerRef, + active = props.active, + attributes = _objectWithoutProperties(props, ["className", "innerRef", "active"]); + + var _ref = React.useContext(Context$4) || {}, + activeTab = _ref.active, + setActiveTab = _ref.setActiveTab; + + var fade = React.useContext(Context$2); + var ref = _typeof(innerRef) === 'object' ? innerRef : React.useRef(); + typeof innerRef === 'function' && innerRef(ref); + + var _useState = React.useState(), + _useState2 = _slicedToArray(_useState, 2), + isActive = _useState2[0], + setIsActive = _useState2[1]; + + React.useEffect(function () { + setIsActive(activeTab === getState(ref)); + }, [activeTab]); + React.useEffect(function () { + if (active !== undefined) { + setActiveTab ? setActiveTab(active && getState(ref)) : setIsActive(active); + } + }, [active]); //render + + var classes = classnames('tab-pane', { + 'active': isActive + }, className); + var attrs = omitByKeys(attributes, CFadeProps); + return /*#__PURE__*/React__default['default'].createElement(CFade, _extends$1({ + in: isActive, + baseClass: fade ? 'fade' : '', + className: classes + }, attrs, { + innerRef: ref + })); +}; + +CTabPane.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + innerRef: propTypes.oneOfType([propTypes.func, propTypes.object]), + active: propTypes.bool +}; + +var CFooter = function CFooter(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + fixed = props.fixed, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "fixed"]); //render + + + var classes = classnames('c-footer', fixed ? 'c-footer-fixed' : null, className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CFooter.propTypes = { + tag: propTypes.oneOfType([propTypes.func, propTypes.string]), + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + fixed: propTypes.bool +}; +CFooter.defaultProps = { + tag: 'footer', + fixed: false +}; + +var CHeader = function CHeader(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + fixed = props.fixed, + colorScheme = props.colorScheme, + withSubheader = props.withSubheader, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef", "fixed", "colorScheme", "withSubheader"]); // render + + + var classes = classnames(className, 'c-header', colorScheme ? 'c-header-' + colorScheme : null, fixed ? 'c-header-fixed' : null, withSubheader ? 'c-header-with-subheader' : null); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CHeader.propTypes = { + tag: propTypes.oneOfType([propTypes.func, propTypes.string]), + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + children: propTypes.node, + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + fixed: propTypes.bool, + withSubheader: propTypes.bool, + colorScheme: propTypes.string +}; +CHeader.defaultProps = { + tag: 'header', + fixed: true, + colorScheme: 'light' +}; + +var CHeaderNav = function CHeaderNav(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["className", "innerRef"]); //render + + + var classes = classnames(className, 'c-header-nav'); + return /*#__PURE__*/React__default['default'].createElement("ul", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CHeaderNav.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; + +var CHeaderNavItem = function CHeaderNavItem(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["className", "innerRef"]); //render + + + var classes = classnames(className, 'c-header-nav-item'); + return /*#__PURE__*/React__default['default'].createElement("li", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CHeaderNavItem.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; + +var CHeaderNavLink = function CHeaderNavLink(props) { + var className = props.className, + innerRef = props.innerRef, + rest = _objectWithoutProperties(props, ["className", "innerRef"]); //render + + + var classes = classnames(className, 'c-header-nav-link'); + return /*#__PURE__*/React__default['default'].createElement(CLink, _extends$1({ + className: classes + }, rest, { + innerRef: innerRef + })); +}; + +CHeaderNavLink.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; + +var CHeaderBrand = function CHeaderBrand(props) { + return /*#__PURE__*/React__default['default'].createElement(CBrand, _extends$1({}, props, { + className: ['c-header-brand', props.className] + })); +}; + +var CSubheader = function CSubheader(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames('c-subheader', className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CSubheader.propTypes = { + tag: tagPropType, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CSubheader.defaultProps = { + tag: 'div' +}; + +/** @license React vundefined + * use-subscription.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var useSubscription$1=function(a){var c=a.getCurrentValue,d=a.subscribe,b=React__default['default'].useState(function(){return {getCurrentValue:c,subscribe:d,value:c()}});a=b[0];var f=b[1];b=a.value;if(a.getCurrentValue!==c||a.subscribe!==d)b=c(),f({getCurrentValue:c,subscribe:d,value:b});React__default['default'].useDebugValue(b);React__default['default'].useEffect(function(){function b(){if(!a){var b=c();f(function(a){return a.getCurrentValue!==c||a.subscribe!==d||a.value===b?a:objectAssign({},a,{value:b})});}}var a=!1,h=d(b);b();return function(){a=!0;h();}},[c,d]);return b}; + +var useSubscription_production_min = { + useSubscription: useSubscription$1 +}; + +/** @license React vundefined + * use-subscription.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var useSubscription_development = createCommonjsModule(function (module, exports) { + +if (process.env.NODE_ENV !== "production") { + (function() { + +var _assign = objectAssign; +var react = React__default['default']; + +// +// In order to avoid removing and re-adding subscriptions each time this hook is called, +// the parameters passed to this hook should be memoized in some way– +// either by wrapping the entire params object with useMemo() +// or by wrapping the individual callbacks with useCallback(). + +function useSubscription(_ref) { + var getCurrentValue = _ref.getCurrentValue, + subscribe = _ref.subscribe; + + // Read the current value from our subscription. + // When this value changes, we'll schedule an update with React. + // It's important to also store the hook params so that we can check for staleness. + // (See the comment in checkForUpdates() below for more info.) + var _useState = react.useState(function () { + return { + getCurrentValue: getCurrentValue, + subscribe: subscribe, + value: getCurrentValue() + }; + }), + state = _useState[0], + setState = _useState[1]; + + var valueToReturn = state.value; // If parameters have changed since our last render, schedule an update with its current value. + + if (state.getCurrentValue !== getCurrentValue || state.subscribe !== subscribe) { + // If the subscription has been updated, we'll schedule another update with React. + // React will process this update immediately, so the old subscription value won't be committed. + // It is still nice to avoid returning a mismatched value though, so let's override the return value. + valueToReturn = getCurrentValue(); + setState({ + getCurrentValue: getCurrentValue, + subscribe: subscribe, + value: valueToReturn + }); + } // Display the current value for this hook in React DevTools. + + + react.useDebugValue(valueToReturn); // It is important not to subscribe while rendering because this can lead to memory leaks. + // (Learn more at reactjs.org/docs/strict-mode.html#detecting-unexpected-side-effects) + // Instead, we wait until the commit phase to attach our handler. + // + // We intentionally use a passive effect (useEffect) rather than a synchronous one (useLayoutEffect) + // so that we don't stretch the commit phase. + // This also has an added benefit when multiple components are subscribed to the same source: + // It allows each of the event handlers to safely schedule work without potentially removing an another handler. + // (Learn more at https://codesandbox.io/s/k0yvr5970o) + + react.useEffect(function () { + var didUnsubscribe = false; + + var checkForUpdates = function () { + // It's possible that this callback will be invoked even after being unsubscribed, + // if it's removed as a result of a subscription event/update. + // In this case, React will log a DEV warning about an update from an unmounted component. + // We can avoid triggering that warning with this check. + if (didUnsubscribe) { + return; + } // We use a state updater function to avoid scheduling work for a stale source. + // However it's important to eagerly read the currently value, + // so that all scheduled work shares the same value (in the event of multiple subscriptions). + // This avoids visual "tearing" when a mutation happens during a (concurrent) render. + + + var value = getCurrentValue(); + setState(function (prevState) { + // Ignore values from stale sources! + // Since we subscribe an unsubscribe in a passive effect, + // it's possible that this callback will be invoked for a stale (previous) subscription. + // This check avoids scheduling an update for that stale subscription. + if (prevState.getCurrentValue !== getCurrentValue || prevState.subscribe !== subscribe) { + return prevState; + } // Some subscriptions will auto-invoke the handler, even if the value hasn't changed. + // If the value hasn't changed, no update is needed. + // Return state as-is so React can bail out and avoid an unnecessary render. + + + if (prevState.value === value) { + return prevState; + } + + return _assign({}, prevState, { + value: value + }); + }); + }; + + var unsubscribe = subscribe(checkForUpdates); // Because we're subscribing in a passive effect, + // it's possible that an update has occurred between render and our effect handler. + // Check for this and schedule an update if work has occurred. + + checkForUpdates(); + return function () { + didUnsubscribe = true; + unsubscribe(); + }; + }, [getCurrentValue, subscribe]); // Return the current value for our caller to use while rendering. + + return valueToReturn; +} + +exports.useSubscription = useSubscription; + })(); +} +}); + +var useSubscription = createCommonjsModule(function (module) { + +if (process.env.NODE_ENV === 'production') { + module.exports = useSubscription_production_min; +} else { + module.exports = useSubscription_development; +} +}); + +var loadableContext = createCommonjsModule(function (module, exports) { +exports.__esModule=true;exports.LoadableContext=void 0;var _react=_interopRequireDefault(React__default['default']);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}const LoadableContext=/*#__PURE__*/_react.default.createContext(null);exports.LoadableContext=LoadableContext;if(process.env.NODE_ENV!=='production'){LoadableContext.displayName='LoadableContext';} +//# sourceMappingURL=loadable-context.js.map +}); + +var loadable = createCommonjsModule(function (module, exports) { +exports.__esModule=true;exports.default=void 0;var _react=_interopRequireDefault(React__default['default']);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}/** +@copyright (c) 2017-present James Kyle + MIT License + Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE +*/ // https://github.com/jamiebuilds/react-loadable/blob/v5.5.0/src/index.js +// Modified to be compatible with webpack 4 / Next.js +const ALL_INITIALIZERS=[];const READY_INITIALIZERS=[];let initialized=false;function load(loader){let promise=loader();let state={loading:true,loaded:null,error:null};state.promise=promise.then(loaded=>{state.loading=false;state.loaded=loaded;return loaded;}).catch(err=>{state.loading=false;state.error=err;throw err;});return state;}function loadMap(obj){let state={loading:false,loaded:{},error:null};let promises=[];try{Object.keys(obj).forEach(key=>{let result=load(obj[key]);if(!result.loading){state.loaded[key]=result.loaded;state.error=result.error;}else {state.loading=true;}promises.push(result.promise);result.promise.then(res=>{state.loaded[key]=res;}).catch(err=>{state.error=err;});});}catch(err){state.error=err;}state.promise=Promise.all(promises).then(res=>{state.loading=false;return res;}).catch(err=>{state.loading=false;throw err;});return state;}function resolve(obj){return obj&&obj.__esModule?obj.default:obj;}function render(loaded,props){return/*#__PURE__*/_react.default.createElement(resolve(loaded),props);}function createLoadableComponent(loadFn,options){let opts=Object.assign({loader:null,loading:null,delay:200,timeout:null,render:render,webpack:null,modules:null},options);let subscription=null;function init(){if(!subscription){const sub=new LoadableSubscription(loadFn,opts);subscription={getCurrentValue:sub.getCurrentValue.bind(sub),subscribe:sub.subscribe.bind(sub),retry:sub.retry.bind(sub),promise:sub.promise.bind(sub)};}return subscription.promise();}// Server only +if(typeof window==='undefined'){ALL_INITIALIZERS.push(init);}// Client only +if(!initialized&&typeof window!=='undefined'&&typeof opts.webpack==='function'){const moduleIds=opts.webpack();READY_INITIALIZERS.push(ids=>{for(const moduleId of moduleIds){if(ids.indexOf(moduleId)!==-1){return init();}}});}const LoadableComponent=(props,ref)=>{init();const context=_react.default.useContext(loadableContext.LoadableContext);const state=(0, useSubscription.useSubscription)(subscription);_react.default.useImperativeHandle(ref,()=>({retry:subscription.retry}),[]);if(context&&Array.isArray(opts.modules)){opts.modules.forEach(moduleName=>{context(moduleName);});}return _react.default.useMemo(()=>{if(state.loading||state.error){return/*#__PURE__*/_react.default.createElement(opts.loading,{isLoading:state.loading,pastDelay:state.pastDelay,timedOut:state.timedOut,error:state.error,retry:subscription.retry});}else if(state.loaded){return opts.render(state.loaded,props);}else {return null;}},[props,state]);};LoadableComponent.preload=()=>init();LoadableComponent.displayName='LoadableComponent';return/*#__PURE__*/_react.default.forwardRef(LoadableComponent);}class LoadableSubscription{constructor(loadFn,opts){this._loadFn=loadFn;this._opts=opts;this._callbacks=new Set();this._delay=null;this._timeout=null;this.retry();}promise(){return this._res.promise;}retry(){this._clearTimeouts();this._res=this._loadFn(this._opts.loader);this._state={pastDelay:false,timedOut:false};const{_res:res,_opts:opts}=this;if(res.loading){if(typeof opts.delay==='number'){if(opts.delay===0){this._state.pastDelay=true;}else {this._delay=setTimeout(()=>{this._update({pastDelay:true});},opts.delay);}}if(typeof opts.timeout==='number'){this._timeout=setTimeout(()=>{this._update({timedOut:true});},opts.timeout);}}this._res.promise.then(()=>{this._update({});this._clearTimeouts();}).catch(_err=>{this._update({});this._clearTimeouts();});this._update({});}_update(partial){this._state={...this._state,error:this._res.error,loaded:this._res.loaded,loading:this._res.loading,...partial};this._callbacks.forEach(callback=>callback());}_clearTimeouts(){clearTimeout(this._delay);clearTimeout(this._timeout);}getCurrentValue(){return this._state;}subscribe(callback){this._callbacks.add(callback);return ()=>{this._callbacks.delete(callback);};}}function Loadable(opts){return createLoadableComponent(load,opts);}function LoadableMap(opts){if(typeof opts.render!=='function'){throw new Error('LoadableMap requires a `render(loaded, props)` function');}return createLoadableComponent(loadMap,opts);}Loadable.Map=LoadableMap;function flushInitializers(initializers,ids){let promises=[];while(initializers.length){let init=initializers.pop();promises.push(init(ids));}return Promise.all(promises).then(()=>{if(initializers.length){return flushInitializers(initializers,ids);}});}Loadable.preloadAll=()=>{return new Promise((resolveInitializers,reject)=>{flushInitializers(ALL_INITIALIZERS).then(resolveInitializers,reject);});};Loadable.preloadReady=(ids=[])=>{return new Promise(resolvePreload=>{const res=()=>{initialized=true;return resolvePreload();};// We always will resolve, errors should be handled within loading UIs. +flushInitializers(READY_INITIALIZERS,ids).then(res,res);});};if(typeof window!=='undefined'){window.__NEXT_PRELOADREADY=Loadable.preloadReady;}var _default=Loadable;exports.default=_default; +//# sourceMappingURL=loadable.js.map +}); + +var noSSR_1=noSSR;var _default=dynamic$1;var _react=_interopRequireDefault(React__default['default']);var _loadable=_interopRequireDefault(loadable);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}const isServerSide=typeof window==='undefined';function noSSR(LoadableInitializer,loadableOptions){// Removing webpack and modules means react-loadable won't try preloading +delete loadableOptions.webpack;delete loadableOptions.modules;// This check is necessary to prevent react-loadable from initializing on the server +if(!isServerSide){return LoadableInitializer(loadableOptions);}const Loading=loadableOptions.loading;// This will only be rendered on the server side +return ()=>/*#__PURE__*/_react.default.createElement(Loading,{error:null,isLoading:true,pastDelay:false,timedOut:false});}// function dynamic

(options: O): +function dynamic$1(dynamicOptions,options){let loadableFn=_loadable.default;let loadableOptions={// A loading component is not required, so we default it +loading:({error,isLoading,pastDelay})=>{if(!pastDelay)return null;if(process.env.NODE_ENV==='development'){if(isLoading){return null;}if(error){return/*#__PURE__*/_react.default.createElement("p",null,error.message,/*#__PURE__*/_react.default.createElement("br",null),error.stack);}}return null;}};// Support for direct import(), eg: dynamic(import('../hello-world')) +// Note that this is only kept for the edge case where someone is passing in a promise as first argument +// The react-loadable babel plugin will turn dynamic(import('../hello-world')) into dynamic(() => import('../hello-world')) +// To make sure we don't execute the import without rendering first +if(dynamicOptions instanceof Promise){loadableOptions.loader=()=>dynamicOptions;// Support for having import as a function, eg: dynamic(() => import('../hello-world')) +}else if(typeof dynamicOptions==='function'){loadableOptions.loader=dynamicOptions;// Support for having first argument being options, eg: dynamic({loader: import('../hello-world')}) +}else if(typeof dynamicOptions==='object'){loadableOptions={...loadableOptions,...dynamicOptions};}// Support for passing options, eg: dynamic(import('../hello-world'), {loading: () =>

Loading something

}) +loadableOptions={...loadableOptions,...options};if(typeof dynamicOptions==='object'&&!(dynamicOptions instanceof Promise)){// show deprecation warning for `modules` key in development +if(process.env.NODE_ENV!=='production'){if(dynamicOptions.modules){console.warn('The modules option for next/dynamic has been deprecated. See here for more info https://nextjs.org/docs/messages/next-dynamic-modules');}}// Support for `render` when using a mapping, eg: `dynamic({ modules: () => {return {HelloWorld: import('../hello-world')}, render(props, loaded) {} } }) +if(dynamicOptions.render){loadableOptions.render=(loaded,props)=>dynamicOptions.render(props,loaded);}// Support for `modules` when using a mapping, eg: `dynamic({ modules: () => {return {HelloWorld: import('../hello-world')}, render(props, loaded) {} } }) +if(dynamicOptions.modules){loadableFn=_loadable.default.Map;const loadModules={};const modules=dynamicOptions.modules();Object.keys(modules).forEach(key=>{const value=modules[key];if(typeof value.then==='function'){loadModules[key]=()=>value.then(mod=>mod.default||mod);return;}loadModules[key]=value;});loadableOptions.loader=loadModules;}}// coming from build/babel/plugins/react-loadable-plugin.js +if(loadableOptions.loadableGenerated){loadableOptions={...loadableOptions,...loadableOptions.loadableGenerated};delete loadableOptions.loadableGenerated;}// support for disabling server side rendering, eg: dynamic(import('../hello-world'), {ssr: false}) +if(typeof loadableOptions.ssr==='boolean'){if(!loadableOptions.ssr){delete loadableOptions.ssr;return noSSR(loadableFn,loadableOptions);}delete loadableOptions.ssr;}return loadableFn(loadableOptions);} + + +var dynamic_1 = /*#__PURE__*/Object.defineProperty({ + noSSR: noSSR_1, + default: _default +}, '__esModule', {value: true}); + +var dynamic = dynamic_1.default; + +var Context$1 = /*#__PURE__*/React__default['default'].createContext({}); +var DynamicSidebar$1 = dynamic(function () { + return Promise.resolve().then(function () { return _DynamicSidebar; }); +}, { + ssr: false +}); //component - CoreUI / CSidebar + +var CSidebar = function CSidebar(props) { + return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(DynamicSidebar$1, _extends$1({}, props, { + Context: Context$1 + }))); +}; + +CSidebar.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + fixed: propTypes.bool, + unfoldable: propTypes.bool, + overlaid: propTypes.bool, + breakpoint: propTypes.oneOf([false, "", "sm", "md", "lg", "xl", "xxl"]), + minimize: propTypes.bool, + show: propTypes.oneOf(["", true, false, "responsive"]), + size: propTypes.oneOf(["", "sm", "lg", "xl"]), + hideOnMobileClick: propTypes.bool, + aside: propTypes.bool, + colorScheme: propTypes.string, + dropdownMode: propTypes.oneOf(["", "openActive", "close", "closeInactive", "noAction"]), + onShowChange: propTypes.func, + onMinimizeChange: propTypes.func +}; +CSidebar.defaultProps = { + fixed: true, + breakpoint: "lg", + show: "responsive", + hideOnMobileClick: true, + colorScheme: "dark" +}; + +var CSidebarBrand = function CSidebarBrand(props) { + return /*#__PURE__*/React__default['default'].createElement(CBrand, _extends$1({}, props, { + className: ['c-sidebar-brand', props.className] + })); +}; + +var CSidebarNavDivider = function CSidebarNavDivider(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["className", "innerRef"]); //render + + + var classes = classnames('c-sidebar-nav-divider', className); + return /*#__PURE__*/React__default['default'].createElement("li", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CSidebarNavDivider.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; + +var CSidebarNavTitle = function CSidebarNavTitle(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["className", "innerRef"]); //render + + + var classes = classnames('c-sidebar-nav-title', className); + return /*#__PURE__*/React__default['default'].createElement("li", _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CSidebarNavTitle.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; + +function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$3(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } +var DropdownContext = /*#__PURE__*/React__default['default'].createContext({}); +var iconProps = function iconProps(icon) { + if (_typeof(icon) === "object") { + var key = icon.size ? "className" : "customClasses"; + return _objectSpread$3(_objectSpread$3({}, icon), {}, _defineProperty({}, "".concat(key), icon.customClasses || "c-sidebar-nav-icon ".concat(icon.className))); + } else { + return { + customClasses: "c-sidebar-nav-icon", + name: icon + }; + } +}; //component - CoreUI / CSidebarNavDropdown + +var CSidebarNavDropdown = function CSidebarNavDropdown(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + icon = props.icon, + fontIcon = props.fontIcon, + name = props.name, + show = props.show, + route = props.route, + attributes = _objectWithoutProperties(props, ["children", "className", "innerRef", "icon", "fontIcon", "name", "show", "route"]); + + var ref = /*#__PURE__*/React.createRef(); + innerRef && innerRef(ref); + + var _useContext = React.useContext(Context$1), + dropdownMode = _useContext.dropdownMode, + openDropdown = _useContext.openDropdown, + setOpenDropdown = _useContext.setOpenDropdown; + + var _useState = React.useState(show), + _useState2 = _slicedToArray(_useState, 2), + isOpen = _useState2[0], + setIsOpen = _useState2[1]; + + React.useEffect(function () { + setIsOpen(show); + }, [show]); + React.useEffect(function () { + !dropdownMode && (!openDropdown || !ref.current.contains(openDropdown)) && setIsOpen(false); + }, [openDropdown]); + + var toggle = function toggle() { + !dropdownMode && setOpenDropdown(isOpen ? ref.current.parentNode.closest(".c-sidebar-nav-dropdown") : ref.current); + setIsOpen(!isOpen); + }; + + var path = ""; + + try { + // path = useLocation().pathname + path = window.location.pathname; + } catch (e) { + console.warn(e); + } + + React.useEffect(function () { + if (dropdownMode === "close") { + setIsOpen(false); + } else if (dropdownMode === "closeInactive" && route) { + setIsOpen(path.includes(route)); + } else if ((!dropdownMode || dropdownMode !== "noAction") && !isOpen && route) { + setIsOpen(path.includes(route)); + } + }, [path]); //render + + var classes = classnames("c-sidebar-nav-dropdown", isOpen && "c-show", className); + var iconClasses = classnames("c-sidebar-nav-icon", fontIcon); + return /*#__PURE__*/React__default['default'].createElement("li", _extends$1({ + className: classes + }, attributes, { + ref: ref + }), /*#__PURE__*/React__default['default'].createElement("a", { + className: "c-sidebar-nav-dropdown-toggle", + tabIndex: "0", + onClick: toggle, + "aria-label": "menu dropdown" + }, icon && ( /*#__PURE__*/React.isValidElement(icon) ? icon : /*#__PURE__*/React__default['default'].createElement(CIcon, iconProps(icon))), fontIcon && /*#__PURE__*/React__default['default'].createElement("i", { + className: iconClasses + }), name), /*#__PURE__*/React__default['default'].createElement("ul", { + className: "c-sidebar-nav-dropdown-items" + }, /*#__PURE__*/React__default['default'].createElement(DropdownContext.Provider, { + value: { + isOpen: isOpen + } + }, children))); +}; + +CSidebarNavDropdown.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + children: propTypes.node, + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]), + name: propTypes.oneOfType([propTypes.string, propTypes.object]), + icon: propTypes.oneOfType([propTypes.object, propTypes.string]), + fontIcon: propTypes.string, + show: propTypes.bool, + route: propTypes.string +}; + +function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$2(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +var CSidebarNavItem = function CSidebarNavItem(props) { + var children = props.children, + className = props.className, + innerRef = props.innerRef, + name = props.name, + icon = props.icon, + fontIcon = props.fontIcon, + badge = props.badge, + addLinkClass = props.addLinkClass, + label = props.label, + color = props.color, + rest = _objectWithoutProperties(props, ["children", "className", "innerRef", "name", "icon", "fontIcon", "badge", "addLinkClass", "label", "color"]); + + var _useContext = React.useContext(DropdownContext), + isOpen = _useContext.isOpen; + + var classes = classnames("c-sidebar-nav-item", className); + var linkClasses = classnames(label ? "c-sidebar-nav-label" : "c-sidebar-nav-link", color && "c-sidebar-nav-link-".concat(color), addLinkClass); + var routerLinkProps = rest.to && { + exact: true, + activeClassName: "c-active" + }; + return /*#__PURE__*/React__default['default'].createElement("li", { + className: classes, + ref: innerRef + }, children || /*#__PURE__*/React__default['default'].createElement(CLink, _extends$1({ + className: linkClasses + }, routerLinkProps, rest, { + tabIndex: isOpen === false ? -1 : 0 + }), icon && ( /*#__PURE__*/React.isValidElement(icon) ? icon : /*#__PURE__*/React__default['default'].createElement(CIcon, iconProps(icon))), fontIcon && /*#__PURE__*/React__default['default'].createElement("i", { + className: "c-sidebar-nav-icon ".concat(fontIcon) + }), name, badge && /*#__PURE__*/React__default['default'].createElement(CBadge, _objectSpread$2(_objectSpread$2({}, badge), {}, { + text: null + }), badge.text))); +}; + +CSidebarNavItem.propTypes = { + children: propTypes.node, + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + innerRef: propTypes.oneOfType([propTypes.func, propTypes.object]), + icon: propTypes.oneOfType([propTypes.string, propTypes.object]), + fontIcon: propTypes.string, + badge: propTypes.object, + addLinkClass: propTypes.string, + label: propTypes.bool, + name: propTypes.oneOfType([propTypes.string, propTypes.object]), + color: propTypes.string +}; + +var CSidebarFooter = function CSidebarFooter(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); // render + + + var classes = classnames('c-sidebar-footer', className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CSidebarFooter.propTypes = { + tag: propTypes.oneOfType([propTypes.func, propTypes.string]), + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CSidebarFooter.defaultProps = { + tag: 'div' +}; + +var CSidebarForm = function CSidebarForm(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames('c-sidebar-form', className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CSidebarForm.propTypes = { + tag: propTypes.oneOfType([propTypes.func, propTypes.string]), + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CSidebarForm.defaultProps = { + tag: 'div' +}; + +var CSidebarHeader = function CSidebarHeader(props) { + var Tag = props.tag, + className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["tag", "className", "innerRef"]); //render + + + var classes = classnames('c-sidebar-header', className); + return /*#__PURE__*/React__default['default'].createElement(Tag, _extends$1({ + className: classes + }, attributes, { + ref: innerRef + })); +}; + +CSidebarHeader.propTypes = { + tag: propTypes.oneOfType([propTypes.func, propTypes.string]), + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; +CSidebarHeader.defaultProps = { + tag: 'div' +}; + +var CSidebarMinimizer = function CSidebarMinimizer(props) { + var className = props.className, + innerRef = props.innerRef, + attributes = _objectWithoutProperties(props, ["className", "innerRef"]); + + var _useContext = React.useContext(Context$1), + toggleMinimize = _useContext.toggleMinimize; //render + + + var classes = classnames('c-sidebar-minimizer', className); + return /*#__PURE__*/React__default['default'].createElement("button", _extends$1({ + className: classes, + type: "button" + }, attributes, { + onClick: toggleMinimize, + ref: innerRef + })); +}; + +CSidebarMinimizer.propTypes = { + className: propTypes.oneOfType([propTypes.string, propTypes.array, propTypes.object]), + // + innerRef: propTypes.oneOfType([propTypes.object, propTypes.func]) +}; + +/*! + * perfect-scrollbar v1.5.0 + * Copyright 2020 Hyunje Jun, MDBootstrap and Contributors + * Licensed under MIT + */ + +function get(element) { + return getComputedStyle(element); +} + +function set(element, obj) { + for (var key in obj) { + var val = obj[key]; + if (typeof val === 'number') { + val = val + "px"; + } + element.style[key] = val; + } + return element; +} + +function div$1(className) { + var div = document.createElement('div'); + div.className = className; + return div; +} + +var elMatches = + typeof Element !== 'undefined' && + (Element.prototype.matches || + Element.prototype.webkitMatchesSelector || + Element.prototype.mozMatchesSelector || + Element.prototype.msMatchesSelector); + +function matches(element, query) { + if (!elMatches) { + throw new Error('No element matching method supported'); + } + + return elMatches.call(element, query); +} + +function remove(element) { + if (element.remove) { + element.remove(); + } else { + if (element.parentNode) { + element.parentNode.removeChild(element); + } + } +} + +function queryChildren(element, selector) { + return Array.prototype.filter.call(element.children, function (child) { return matches(child, selector); } + ); +} + +var cls = { + main: 'ps', + rtl: 'ps__rtl', + element: { + thumb: function (x) { return ("ps__thumb-" + x); }, + rail: function (x) { return ("ps__rail-" + x); }, + consuming: 'ps__child--consume', + }, + state: { + focus: 'ps--focus', + clicking: 'ps--clicking', + active: function (x) { return ("ps--active-" + x); }, + scrolling: function (x) { return ("ps--scrolling-" + x); }, + }, +}; + +/* + * Helper methods + */ +var scrollingClassTimeout = { x: null, y: null }; + +function addScrollingClass(i, x) { + var classList = i.element.classList; + var className = cls.state.scrolling(x); + + if (classList.contains(className)) { + clearTimeout(scrollingClassTimeout[x]); + } else { + classList.add(className); + } +} + +function removeScrollingClass(i, x) { + scrollingClassTimeout[x] = setTimeout( + function () { return i.isAlive && i.element.classList.remove(cls.state.scrolling(x)); }, + i.settings.scrollingThreshold + ); +} + +function setScrollingClassInstantly(i, x) { + addScrollingClass(i, x); + removeScrollingClass(i, x); +} + +var EventElement = function EventElement(element) { + this.element = element; + this.handlers = {}; +}; + +var prototypeAccessors = { isEmpty: { configurable: true } }; + +EventElement.prototype.bind = function bind (eventName, handler) { + if (typeof this.handlers[eventName] === 'undefined') { + this.handlers[eventName] = []; + } + this.handlers[eventName].push(handler); + this.element.addEventListener(eventName, handler, false); +}; + +EventElement.prototype.unbind = function unbind (eventName, target) { + var this$1 = this; + + this.handlers[eventName] = this.handlers[eventName].filter(function (handler) { + if (target && handler !== target) { + return true; + } + this$1.element.removeEventListener(eventName, handler, false); + return false; + }); +}; + +EventElement.prototype.unbindAll = function unbindAll () { + for (var name in this.handlers) { + this.unbind(name); + } +}; + +prototypeAccessors.isEmpty.get = function () { + var this$1 = this; + + return Object.keys(this.handlers).every( + function (key) { return this$1.handlers[key].length === 0; } + ); +}; + +Object.defineProperties( EventElement.prototype, prototypeAccessors ); + +var EventManager = function EventManager() { + this.eventElements = []; +}; + +EventManager.prototype.eventElement = function eventElement (element) { + var ee = this.eventElements.filter(function (ee) { return ee.element === element; })[0]; + if (!ee) { + ee = new EventElement(element); + this.eventElements.push(ee); + } + return ee; +}; + +EventManager.prototype.bind = function bind (element, eventName, handler) { + this.eventElement(element).bind(eventName, handler); +}; + +EventManager.prototype.unbind = function unbind (element, eventName, handler) { + var ee = this.eventElement(element); + ee.unbind(eventName, handler); + + if (ee.isEmpty) { + // remove + this.eventElements.splice(this.eventElements.indexOf(ee), 1); + } +}; + +EventManager.prototype.unbindAll = function unbindAll () { + this.eventElements.forEach(function (e) { return e.unbindAll(); }); + this.eventElements = []; +}; + +EventManager.prototype.once = function once (element, eventName, handler) { + var ee = this.eventElement(element); + var onceHandler = function (evt) { + ee.unbind(eventName, onceHandler); + handler(evt); + }; + ee.bind(eventName, onceHandler); +}; + +function createEvent(name) { + if (typeof window.CustomEvent === 'function') { + return new CustomEvent(name); + } else { + var evt = document.createEvent('CustomEvent'); + evt.initCustomEvent(name, false, false, undefined); + return evt; + } +} + +function processScrollDiff( + i, + axis, + diff, + useScrollingClass, + forceFireReachEvent +) { + if ( useScrollingClass === void 0 ) useScrollingClass = true; + if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false; + + var fields; + if (axis === 'top') { + fields = [ + 'contentHeight', + 'containerHeight', + 'scrollTop', + 'y', + 'up', + 'down' ]; + } else if (axis === 'left') { + fields = [ + 'contentWidth', + 'containerWidth', + 'scrollLeft', + 'x', + 'left', + 'right' ]; + } else { + throw new Error('A proper axis should be provided'); + } + + processScrollDiff$1(i, diff, fields, useScrollingClass, forceFireReachEvent); +} + +function processScrollDiff$1( + i, + diff, + ref, + useScrollingClass, + forceFireReachEvent +) { + var contentHeight = ref[0]; + var containerHeight = ref[1]; + var scrollTop = ref[2]; + var y = ref[3]; + var up = ref[4]; + var down = ref[5]; + if ( useScrollingClass === void 0 ) useScrollingClass = true; + if ( forceFireReachEvent === void 0 ) forceFireReachEvent = false; + + var element = i.element; + + // reset reach + i.reach[y] = null; + + // 1 for subpixel rounding + if (element[scrollTop] < 1) { + i.reach[y] = 'start'; + } + + // 1 for subpixel rounding + if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) { + i.reach[y] = 'end'; + } + + if (diff) { + element.dispatchEvent(createEvent(("ps-scroll-" + y))); + + if (diff < 0) { + element.dispatchEvent(createEvent(("ps-scroll-" + up))); + } else if (diff > 0) { + element.dispatchEvent(createEvent(("ps-scroll-" + down))); + } + + if (useScrollingClass) { + setScrollingClassInstantly(i, y); + } + } + + if (i.reach[y] && (diff || forceFireReachEvent)) { + element.dispatchEvent(createEvent(("ps-" + y + "-reach-" + (i.reach[y])))); + } +} + +function toInt(x) { + return parseInt(x, 10) || 0; +} + +function isEditable(el) { + return ( + matches(el, 'input,[contenteditable]') || + matches(el, 'select,[contenteditable]') || + matches(el, 'textarea,[contenteditable]') || + matches(el, 'button,[contenteditable]') + ); +} + +function outerWidth(element) { + var styles = get(element); + return ( + toInt(styles.width) + + toInt(styles.paddingLeft) + + toInt(styles.paddingRight) + + toInt(styles.borderLeftWidth) + + toInt(styles.borderRightWidth) + ); +} + +var env = { + isWebKit: + typeof document !== 'undefined' && + 'WebkitAppearance' in document.documentElement.style, + supportsTouch: + typeof window !== 'undefined' && + ('ontouchstart' in window || + ('maxTouchPoints' in window.navigator && + window.navigator.maxTouchPoints > 0) || + (window.DocumentTouch && document instanceof window.DocumentTouch)), + supportsIePointer: + typeof navigator !== 'undefined' && navigator.msMaxTouchPoints, + isChrome: + typeof navigator !== 'undefined' && + /Chrome/i.test(navigator && navigator.userAgent), +}; + +function updateGeometry(i) { + var element = i.element; + var roundedScrollTop = Math.floor(element.scrollTop); + var rect = element.getBoundingClientRect(); + + i.containerWidth = Math.ceil(rect.width); + i.containerHeight = Math.ceil(rect.height); + i.contentWidth = element.scrollWidth; + i.contentHeight = element.scrollHeight; + + if (!element.contains(i.scrollbarXRail)) { + // clean up and append + queryChildren(element, cls.element.rail('x')).forEach(function (el) { return remove(el); } + ); + element.appendChild(i.scrollbarXRail); + } + if (!element.contains(i.scrollbarYRail)) { + // clean up and append + queryChildren(element, cls.element.rail('y')).forEach(function (el) { return remove(el); } + ); + element.appendChild(i.scrollbarYRail); + } + + if ( + !i.settings.suppressScrollX && + i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth + ) { + i.scrollbarXActive = true; + i.railXWidth = i.containerWidth - i.railXMarginWidth; + i.railXRatio = i.containerWidth / i.railXWidth; + i.scrollbarXWidth = getThumbSize( + i, + toInt((i.railXWidth * i.containerWidth) / i.contentWidth) + ); + i.scrollbarXLeft = toInt( + ((i.negativeScrollAdjustment + element.scrollLeft) * + (i.railXWidth - i.scrollbarXWidth)) / + (i.contentWidth - i.containerWidth) + ); + } else { + i.scrollbarXActive = false; + } + + if ( + !i.settings.suppressScrollY && + i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight + ) { + i.scrollbarYActive = true; + i.railYHeight = i.containerHeight - i.railYMarginHeight; + i.railYRatio = i.containerHeight / i.railYHeight; + i.scrollbarYHeight = getThumbSize( + i, + toInt((i.railYHeight * i.containerHeight) / i.contentHeight) + ); + i.scrollbarYTop = toInt( + (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) / + (i.contentHeight - i.containerHeight) + ); + } else { + i.scrollbarYActive = false; + } + + if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) { + i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth; + } + if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) { + i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight; + } + + updateCss(element, i); + + if (i.scrollbarXActive) { + element.classList.add(cls.state.active('x')); + } else { + element.classList.remove(cls.state.active('x')); + i.scrollbarXWidth = 0; + i.scrollbarXLeft = 0; + element.scrollLeft = i.isRtl === true ? i.contentWidth : 0; + } + if (i.scrollbarYActive) { + element.classList.add(cls.state.active('y')); + } else { + element.classList.remove(cls.state.active('y')); + i.scrollbarYHeight = 0; + i.scrollbarYTop = 0; + element.scrollTop = 0; + } +} + +function getThumbSize(i, thumbSize) { + if (i.settings.minScrollbarLength) { + thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength); + } + if (i.settings.maxScrollbarLength) { + thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength); + } + return thumbSize; +} + +function updateCss(element, i) { + var xRailOffset = { width: i.railXWidth }; + var roundedScrollTop = Math.floor(element.scrollTop); + + if (i.isRtl) { + xRailOffset.left = + i.negativeScrollAdjustment + + element.scrollLeft + + i.containerWidth - + i.contentWidth; + } else { + xRailOffset.left = element.scrollLeft; + } + if (i.isScrollbarXUsingBottom) { + xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop; + } else { + xRailOffset.top = i.scrollbarXTop + roundedScrollTop; + } + set(i.scrollbarXRail, xRailOffset); + + var yRailOffset = { top: roundedScrollTop, height: i.railYHeight }; + if (i.isScrollbarYUsingRight) { + if (i.isRtl) { + yRailOffset.right = + i.contentWidth - + (i.negativeScrollAdjustment + element.scrollLeft) - + i.scrollbarYRight - + i.scrollbarYOuterWidth - + 9; + } else { + yRailOffset.right = i.scrollbarYRight - element.scrollLeft; + } + } else { + if (i.isRtl) { + yRailOffset.left = + i.negativeScrollAdjustment + + element.scrollLeft + + i.containerWidth * 2 - + i.contentWidth - + i.scrollbarYLeft - + i.scrollbarYOuterWidth; + } else { + yRailOffset.left = i.scrollbarYLeft + element.scrollLeft; + } + } + set(i.scrollbarYRail, yRailOffset); + + set(i.scrollbarX, { + left: i.scrollbarXLeft, + width: i.scrollbarXWidth - i.railBorderXWidth, + }); + set(i.scrollbarY, { + top: i.scrollbarYTop, + height: i.scrollbarYHeight - i.railBorderYWidth, + }); +} + +function clickRail(i) { + i.element; + + i.event.bind(i.scrollbarY, 'mousedown', function (e) { return e.stopPropagation(); }); + i.event.bind(i.scrollbarYRail, 'mousedown', function (e) { + var positionTop = + e.pageY - + window.pageYOffset - + i.scrollbarYRail.getBoundingClientRect().top; + var direction = positionTop > i.scrollbarYTop ? 1 : -1; + + i.element.scrollTop += direction * i.containerHeight; + updateGeometry(i); + + e.stopPropagation(); + }); + + i.event.bind(i.scrollbarX, 'mousedown', function (e) { return e.stopPropagation(); }); + i.event.bind(i.scrollbarXRail, 'mousedown', function (e) { + var positionLeft = + e.pageX - + window.pageXOffset - + i.scrollbarXRail.getBoundingClientRect().left; + var direction = positionLeft > i.scrollbarXLeft ? 1 : -1; + + i.element.scrollLeft += direction * i.containerWidth; + updateGeometry(i); + + e.stopPropagation(); + }); +} + +function dragThumb(i) { + bindMouseScrollHandler(i, [ + 'containerWidth', + 'contentWidth', + 'pageX', + 'railXWidth', + 'scrollbarX', + 'scrollbarXWidth', + 'scrollLeft', + 'x', + 'scrollbarXRail' ]); + bindMouseScrollHandler(i, [ + 'containerHeight', + 'contentHeight', + 'pageY', + 'railYHeight', + 'scrollbarY', + 'scrollbarYHeight', + 'scrollTop', + 'y', + 'scrollbarYRail' ]); +} + +function bindMouseScrollHandler( + i, + ref +) { + var containerHeight = ref[0]; + var contentHeight = ref[1]; + var pageY = ref[2]; + var railYHeight = ref[3]; + var scrollbarY = ref[4]; + var scrollbarYHeight = ref[5]; + var scrollTop = ref[6]; + var y = ref[7]; + var scrollbarYRail = ref[8]; + + var element = i.element; + + var startingScrollTop = null; + var startingMousePageY = null; + var scrollBy = null; + + function mouseMoveHandler(e) { + if (e.touches && e.touches[0]) { + e[pageY] = e.touches[0].pageY; + } + element[scrollTop] = + startingScrollTop + scrollBy * (e[pageY] - startingMousePageY); + addScrollingClass(i, y); + updateGeometry(i); + + e.stopPropagation(); + e.preventDefault(); + } + + function mouseUpHandler() { + removeScrollingClass(i, y); + i[scrollbarYRail].classList.remove(cls.state.clicking); + i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler); + } + + function bindMoves(e, touchMode) { + startingScrollTop = element[scrollTop]; + if (touchMode && e.touches) { + e[pageY] = e.touches[0].pageY; + } + startingMousePageY = e[pageY]; + scrollBy = + (i[contentHeight] - i[containerHeight]) / + (i[railYHeight] - i[scrollbarYHeight]); + if (!touchMode) { + i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler); + i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler); + e.preventDefault(); + } else { + i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler); + } + + i[scrollbarYRail].classList.add(cls.state.clicking); + + e.stopPropagation(); + } + + i.event.bind(i[scrollbarY], 'mousedown', function (e) { + bindMoves(e); + }); + i.event.bind(i[scrollbarY], 'touchstart', function (e) { + bindMoves(e, true); + }); +} + +function keyboard(i) { + var element = i.element; + + var elementHovered = function () { return matches(element, ':hover'); }; + var scrollbarFocused = function () { return matches(i.scrollbarX, ':focus') || matches(i.scrollbarY, ':focus'); }; + + function shouldPreventDefault(deltaX, deltaY) { + var scrollTop = Math.floor(element.scrollTop); + if (deltaX === 0) { + if (!i.scrollbarYActive) { + return false; + } + if ( + (scrollTop === 0 && deltaY > 0) || + (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0) + ) { + return !i.settings.wheelPropagation; + } + } + + var scrollLeft = element.scrollLeft; + if (deltaY === 0) { + if (!i.scrollbarXActive) { + return false; + } + if ( + (scrollLeft === 0 && deltaX < 0) || + (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0) + ) { + return !i.settings.wheelPropagation; + } + } + return true; + } + + i.event.bind(i.ownerDocument, 'keydown', function (e) { + if ( + (e.isDefaultPrevented && e.isDefaultPrevented()) || + e.defaultPrevented + ) { + return; + } + + if (!elementHovered() && !scrollbarFocused()) { + return; + } + + var activeElement = document.activeElement + ? document.activeElement + : i.ownerDocument.activeElement; + if (activeElement) { + if (activeElement.tagName === 'IFRAME') { + activeElement = activeElement.contentDocument.activeElement; + } else { + // go deeper if element is a webcomponent + while (activeElement.shadowRoot) { + activeElement = activeElement.shadowRoot.activeElement; + } + } + if (isEditable(activeElement)) { + return; + } + } + + var deltaX = 0; + var deltaY = 0; + + switch (e.which) { + case 37: // left + if (e.metaKey) { + deltaX = -i.contentWidth; + } else if (e.altKey) { + deltaX = -i.containerWidth; + } else { + deltaX = -30; + } + break; + case 38: // up + if (e.metaKey) { + deltaY = i.contentHeight; + } else if (e.altKey) { + deltaY = i.containerHeight; + } else { + deltaY = 30; + } + break; + case 39: // right + if (e.metaKey) { + deltaX = i.contentWidth; + } else if (e.altKey) { + deltaX = i.containerWidth; + } else { + deltaX = 30; + } + break; + case 40: // down + if (e.metaKey) { + deltaY = -i.contentHeight; + } else if (e.altKey) { + deltaY = -i.containerHeight; + } else { + deltaY = -30; + } + break; + case 32: // space bar + if (e.shiftKey) { + deltaY = i.containerHeight; + } else { + deltaY = -i.containerHeight; + } + break; + case 33: // page up + deltaY = i.containerHeight; + break; + case 34: // page down + deltaY = -i.containerHeight; + break; + case 36: // home + deltaY = i.contentHeight; + break; + case 35: // end + deltaY = -i.contentHeight; + break; + default: + return; + } + + if (i.settings.suppressScrollX && deltaX !== 0) { + return; + } + if (i.settings.suppressScrollY && deltaY !== 0) { + return; + } + + element.scrollTop -= deltaY; + element.scrollLeft += deltaX; + updateGeometry(i); + + if (shouldPreventDefault(deltaX, deltaY)) { + e.preventDefault(); + } + }); +} + +function wheel(i) { + var element = i.element; + + function shouldPreventDefault(deltaX, deltaY) { + var roundedScrollTop = Math.floor(element.scrollTop); + var isTop = element.scrollTop === 0; + var isBottom = + roundedScrollTop + element.offsetHeight === element.scrollHeight; + var isLeft = element.scrollLeft === 0; + var isRight = + element.scrollLeft + element.offsetWidth === element.scrollWidth; + + var hitsBound; + + // pick axis with primary direction + if (Math.abs(deltaY) > Math.abs(deltaX)) { + hitsBound = isTop || isBottom; + } else { + hitsBound = isLeft || isRight; + } + + return hitsBound ? !i.settings.wheelPropagation : true; + } + + function getDeltaFromEvent(e) { + var deltaX = e.deltaX; + var deltaY = -1 * e.deltaY; + + if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') { + // OS X Safari + deltaX = (-1 * e.wheelDeltaX) / 6; + deltaY = e.wheelDeltaY / 6; + } + + if (e.deltaMode && e.deltaMode === 1) { + // Firefox in deltaMode 1: Line scrolling + deltaX *= 10; + deltaY *= 10; + } + + if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) { + // IE in some mouse drivers + deltaX = 0; + deltaY = e.wheelDelta; + } + + if (e.shiftKey) { + // reverse axis with shift key + return [-deltaY, -deltaX]; + } + return [deltaX, deltaY]; + } + + function shouldBeConsumedByChild(target, deltaX, deltaY) { + // FIXME: this is a workaround for