diff --git a/.circleci/config.yml b/.circleci/config.yml index 5078fea86..f859baad2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -48,7 +48,7 @@ jobs: - run: name: NPM Package command: | - cd dist && npm pack + cd dist && npm pack # Save the dist folder for use in future jobs. - persist_to_workspace: root: . @@ -65,29 +65,32 @@ jobs: steps: - checkout - attach_workspace: - at: . + at: . - codecov/upload: - file: './components/coverage/clover.xml' - token: 5e6faafe-eaf0-4d71-a931-22f279d3e446 + file: './components/coverage/clover.xml' + token: 5e6faafe-eaf0-4d71-a931-22f279d3e446 - # Builds the Storybook app using @brightlayer-ui/react-components persisted in /dist folder. - build_storybook: + # Builds the Showcase app using @brightlayer-ui/react-components persisted in /dist folder. + build_showcase: docker: - image: cimg/node:14.19.0-browsers environment: - MASTER_BRANCH: master - - DEV_BRANCH: dev steps: - checkout - attach_workspace: - at: . + at: . + - run: + name: Initialize Submodule + command: | + git submodule init && git submodule update - restore_cache: keys: - - v2-dependencies-react-{{ checksum "demos/storybook/yarn.lock" }} + - v2-dependencies-react-{{ checksum "demos/showcase/yarn.lock" }} - run: name: Install Dependencies command: | - cd demos/storybook + cd demos/showcase yarn install --frozen-lockfile # Install the packed version of @brightlayer-ui/react-components @@ -96,89 +99,86 @@ jobs: - save_cache: name: Save Cache paths: - - demos/storybook/node_modules - key: v2-dependencies-react-{{ checksum "demos/storybook/yarn.lock" }} - - run: - name: Prettier Check - command: | - cd demos/storybook - yarn prettier:check - - run: - name: Lint - command: | - cd demos/storybook - yarn lint + - demos/showcase/node_modules + key: v2-dependencies-react-{{ checksum "demos/showcase/yarn.lock" }} + # This will be prettier checked on the demo repository + # - run: + # name: Prettier Check + # command: | + # cd demos/showcase + # yarn prettier:check - run: - name: Build Storybook + name: Build Showcase command: | - cd demos/storybook - - # master and dev branches should configure Google Analytics IDs before the build. - if [ $CIRCLE_BRANCH == $MASTER_BRANCH ]; then - STORYBOOK_GA_ID=$MASTER_GA - fi - if [ $CIRCLE_BRANCH == $DEV_BRANCH ]; then - STORYBOOK_GA_ID=$DEV_GA - fi - - yarn build-storybook - cd storybook-static - touch .nojekyll - - persist_to_workspace: - root: . - paths: - - demos/storybook/storybook-static + cd demos/showcase + yarn build - run: command: cat /sys/fs/cgroup/memory/memory.max_usage_in_bytes when: always - # Builds the Showcase app using @brightlayer-ui/react-components persisted in /dist folder. - build_showcase: + # Builds the React Dev app using @brightlayer-ui/react-components persisted in /dist folder. + build_reactdev: docker: - image: cimg/node:14.19.0-browsers environment: - MASTER_BRANCH: master + - DEV_BRANCH: dev steps: - checkout - attach_workspace: - at: . - - run: - name: Initialize Submodule - command: | - git submodule init && git submodule update + at: . - restore_cache: keys: - - v2-dependencies-react-{{ checksum "demos/showcase/yarn.lock" }} + - v2-dependencies-react-{{ checksum "docs/yarn.lock" }} - run: name: Install Dependencies command: | - cd demos/showcase + cd docs yarn install --frozen-lockfile # Install the packed version of @brightlayer-ui/react-components - PACKAGED_VERSION=`node -p "require('../../dist/package.json').version"` - yarn add ../../dist/brightlayer-ui-react-components-$PACKAGED_VERSION.tgz + PACKAGED_VERSION=`node -p "require('../dist/package.json').version"` + yarn add ../dist/brightlayer-ui-react-components-$PACKAGED_VERSION.tgz - save_cache: name: Save Cache paths: - - demos/showcase/node_modules - key: v2-dependencies-react-{{ checksum "demos/showcase/yarn.lock" }} - # This will be prettier checked on the demo repository - # - run: - # name: Prettier Check - # command: | - # cd demos/showcase - # yarn prettier:check + - docs/node_modules + key: v2-dependencies-react-{{ checksum "docs/yarn.lock" }} - run: - name: Build Showcase + name: Prettier Check command: | - cd demos/showcase + cd docs + yarn prettier:check + - run: + name: Lint + command: | + cd docs + yarn lint + - run: + name: Build React Dev + command: | + cd docs + + if [ $CIRCLE_BRANCH == $MASTER_BRANCH ]; then + export PUBLIC_URL=/react + export REACT_APP_BRANCH=master + yarn ga:master + else + export PUBLIC_URL=/react-dev + export REACT_APP_BRANCH=dev + yarn ga:dev + fi + yarn build - run: command: cat /sys/fs/cgroup/memory/memory.max_usage_in_bytes when: always + - persist_to_workspace: + root: . + paths: + - docs/build - deploy_storybook: + deploy_reactdev: docker: - image: cimg/node:14.19.0-browsers environment: @@ -193,12 +193,12 @@ jobs: - attach_workspace: at: . - run: - name: Deploy Storybook + name: Deploy Dev Doc command: | git config --global user.email "$GH_EMAIL" git config --global user.name "$GH_NAME" - cd demos/storybook + cd docs if [ $CIRCLE_BRANCH == $MASTER_BRANCH ]; then git clone $MASTER_TARGET out @@ -210,41 +210,41 @@ jobs: git rm -rf . cd .. - cp -a storybook-static/. out/. + cp -a build/. out/. cd out git add -A git commit -m "Automated deployment to GitHub Pages: ${CIRCLE_SHA1}" --allow-empty git push publish: - docker: - - image: cimg/node:14.19.0-browsers - steps: - - checkout - - attach_workspace: - at: . - - run: - name: Authenticate with registry - command: | - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc - echo "//registry.yarnpkg.com/:_authToken=$NPM_TOKEN" >> ~/.npmrc - - run: - name: Publish @brightlayer-ui/react-components - command: | - yarn publish:package -b $CIRCLE_BRANCH + docker: + - image: cimg/node:14.19.0-browsers + steps: + - checkout + - attach_workspace: + at: . + - run: + name: Authenticate with registry + command: | + echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc + echo "//registry.yarnpkg.com/:_authToken=$NPM_TOKEN" >> ~/.npmrc + - run: + name: Publish @brightlayer-ui/react-components + command: | + yarn publish:package -b $CIRCLE_BRANCH tag: - docker: - - image: cimg/node:14.19.0-browsers - steps: - - checkout - - attach_workspace: - at: . - - gh/setup - - run: - name: Tag @brightlayer-ui/react-components - command: | - yarn tag:package -b $CIRCLE_BRANCH -s -blui-react-components + docker: + - image: cimg/node:14.19.0-browsers + steps: + - checkout + - attach_workspace: + at: . + - gh/setup + - run: + name: Tag @brightlayer-ui/react-components + command: | + yarn tag:package -b $CIRCLE_BRANCH -s -blui-react-components workflows: version: 2 @@ -252,24 +252,28 @@ workflows: jobs: - build_library # - build_showcase: - # requires: - # - build_library + # requires: + # - build_library # - build_storybook: # requires: # - build_library - # - deploy_storybook: - # requires: - # - build_storybook - # filters: - # branches: - # only: - # - master - # - dev + - deploy_reactdev: + requires: + - build_reactdev + filters: + branches: + only: + - master + - dev + - build_reactdev: + requires: + - build_library - publish: requires: - build_library + - build_reactdev filters: - branches: + branches: only: - master - dev @@ -279,11 +283,11 @@ workflows: filters: branches: only: - - master + - master - coverage_report: - requires: - - build_library - filters: - branches: - only: - - master + requires: + - build_library + filters: + branches: + only: + - master diff --git a/.firebaserc b/.firebaserc new file mode 100644 index 000000000..29ec05e77 --- /dev/null +++ b/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "blui-react-docs" + } +} \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..372c9c622 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,31 @@ +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "weekly" + day: "wednesday" + open-pull-requests-limit: 1 + target-branch: "dev" + labels: + - "external-dependency" + + - package-ecosystem: "npm" + directory: "/components" + schedule: + interval: "weekly" + day: "wednesday" + open-pull-requests-limit: 1 + target-branch: "dev" + labels: + - "external-dependency" + + - package-ecosystem: "npm" + directory: "/docs" + schedule: + interval: "weekly" + day: "wednesday" + open-pull-requests-limit: 1 + target-branch: "dev" + labels: + - "external-dependency" \ No newline at end of file diff --git a/.github/pr-labeler.yml b/.github/pr-labeler.yml new file mode 100644 index 000000000..0af500b0d --- /dev/null +++ b/.github/pr-labeler.yml @@ -0,0 +1,2 @@ +master: ['hotfix/*', 'release/*', 'dev/*', 'dev*'] +external-dependency: ['combined/*', 'combined-dependabots/*'] \ No newline at end of file diff --git a/.github/workflows/combine-prs.yml b/.github/workflows/combine-prs.yml new file mode 100644 index 000000000..41b68e286 --- /dev/null +++ b/.github/workflows/combine-prs.yml @@ -0,0 +1,139 @@ +name: 'Combine Dependabot PRs' + +# Controls when the action will run - in this case triggered manually +on: + workflow_dispatch: + inputs: + branchPrefix: + description: 'Branch prefix to find combinable PRs based on' + required: true + default: 'dependabot' + mustBeGreen: + description: 'Only combine PRs that are green (status is success)' + required: true + default: true + combineBranchName: + description: 'Name of the branch to combine PRs into' + required: true + default: 'combined-dependabots' + ignoreLabel: + description: 'Exclude PRs with this label' + required: true + default: 'nocombine' + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "combine-prs" + combine-prs: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + - uses: actions/github-script@v3 + id: fetch-branch-names + name: Fetch branch names + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const pulls = await github.paginate('GET /repos/:owner/:repo/pulls', { + owner: context.repo.owner, + repo: context.repo.repo + }); + branches = []; + prs = []; + base_branch = null; + for (const pull of pulls) { + const branch = pull['head']['ref']; + console.log('Pull for branch: ' + branch); + if (branch.startsWith('${{ github.event.inputs.branchPrefix }}')) { + console.log('Branch matched: ' + branch); + statusOK = true; + if(${{ github.event.inputs.mustBeGreen }}) { + console.log('Checking green status: ' + branch); + const statuses = await github.paginate('GET /repos/{owner}/{repo}/commits/{ref}/status', { + owner: context.repo.owner, + repo: context.repo.repo, + ref: branch + }); + if(statuses.length > 0) { + const latest_status = statuses[0]['state']; + console.log('Validating status: ' + latest_status); + if(latest_status != 'success') { + console.log('Discarding ' + branch + ' with status ' + latest_status); + statusOK = false; + } + } + } + console.log('Checking labels: ' + branch); + const labels = pull['labels']; + for(const label of labels) { + const labelName = label['name']; + console.log('Checking label: ' + labelName); + if(labelName == '${{ github.event.inputs.ignoreLabel }}') { + console.log('Discarding ' + branch + ' with label ' + labelName); + statusOK = false; + } + } + if (statusOK) { + console.log('Adding branch to array: ' + branch); + branches.push(branch); + prs.push('#' + pull['number'] + ' ' + pull['title']); + base_branch = pull['base']['ref']; + } + } + } + if (branches.length == 0) { + core.setFailed('No PRs/branches matched criteria'); + return; + } + core.setOutput('base-branch', base_branch); + core.setOutput('prs-string', prs.join('\n')); + + combined = branches.join(' ') + console.log('Combined: ' + combined); + return combined + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2.3.3 + with: + fetch-depth: 0 + # Creates a branch with other PR branches merged together + - name: Created combined branch + env: + BASE_BRANCH: ${{ steps.fetch-branch-names.outputs.base-branch }} + BRANCHES_TO_COMBINE: ${{ steps.fetch-branch-names.outputs.result }} + COMBINE_BRANCH_NAME: ${{ github.event.inputs.combineBranchName }} + run: | + echo "$BRANCHES_TO_COMBINE" + sourcebranches="${BRANCHES_TO_COMBINE%\"}" + sourcebranches="${sourcebranches#\"}" + + basebranch="${BASE_BRANCH%\"}" + basebranch="${basebranch#\"}" + + git config pull.rebase false + git config user.name github-actions + git config user.email github-actions@github.com + + git branch $COMBINE_BRANCH_NAME $basebranch + git checkout $COMBINE_BRANCH_NAME + git pull origin $sourcebranches --no-edit + git push origin $COMBINE_BRANCH_NAME + # Creates a PR with the new combined branch + - uses: actions/github-script@v3 + name: Create Combined Pull Request + env: + PRS_STRING: ${{ steps.fetch-branch-names.outputs.prs-string }} + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const prString = process.env.PRS_STRING; + const body = 'This PR was created by the BLUI Combine PRs action by combining the following PRs:\n' + prString; + await github.pulls.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: 'Bundle dependabot dependency updates', + head: '${{ github.event.inputs.combineBranchName }}', + base: '${{ steps.fetch-branch-names.outputs.base-branch }}', + body: body + }); diff --git a/.github/workflows/firebase-hosting-pull-request.yml b/.github/workflows/firebase-hosting-pull-request.yml new file mode 100644 index 000000000..8aef8d063 --- /dev/null +++ b/.github/workflows/firebase-hosting-pull-request.yml @@ -0,0 +1,18 @@ +# This file was auto-generated by the Firebase CLI +# https://github.com/firebase/firebase-tools + +name: Deploy to Firebase Hosting on PR +'on': pull_request +jobs: + build_and_preview: + if: '${{ github.event.pull_request.head.repo.full_name == github.repository }}' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: cd components && yarn && cd ../docs && yarn && cd .. && yarn link:components && cd docs && yarn ga:dev && yarn build + - uses: emclaug2/action-hosting-deploy@main + with: + repoToken: '${{ secrets.GITHUB_TOKEN }}' + firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_BLUI_REACT_DOCS }}' + expires: 2d + projectId: blui-react-docs diff --git a/.github/workflows/pr-comment.yml b/.github/workflows/pr-comment.yml new file mode 100644 index 000000000..12a926d45 --- /dev/null +++ b/.github/workflows/pr-comment.yml @@ -0,0 +1,19 @@ +name: 'Comment on PR' +on: + pull_request: + branches: + - master + +jobs: + example_comment_pr: + runs-on: ubuntu-latest + name: comment PR if needed + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Comment PR + uses: thollander/actions-comment-pull-request@v1 + with: + message: 'Thank you for the master pull request. 👍 Please be sure this pull request is for the master branch. The master branch is used for items that are ready for publishing. + The dev branch is our working branch for all issues and enhancements. Please read our [Contributing Guidelines](https://github.com/brightlayer-ui/.github/blob/dev/CONTRIBUTING.md) for more information.' + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index ba7124ffd..75c3e1b3e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ package-lock.json # production dist storybook-static +docs/build # testing /components/coverage diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..4df1918a9 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +**/**/dist/* +dist/ +demos/storybook \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index a7530d41b..4f4f8f05d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## v6.1.1 (November 1, 2022) + +### Fixed + +- `hideContentOnCollapse` prop of `` not hiding footer content ([#484](https://github.com/brightlayer-ui/react-component-library/issues/484)). +- Temporary drawer rendering, due to incorrectly passing open prop ([#486](https://github.com/brightlayer-ui/react-component-library/issues/486)). +- `activeItemFontColor`, `activeItemIconColor` prop of `` not updating `font color` and `icon color` of active rail item. ([#486](https://github.com/brightlayer-ui/react-component-library/issues/486)). +- `condensed` prop of `` not appling height and width `56X56` to all rail items. ([#541](https://github.com/brightlayer-ui/react-component-library/issues/541)). +- Styling of `nonClickableIcon` in `` not applying properly ([#562](https://github.com/brightlayer-ui/react-component-library/issues/562)). +- `animationDuration` not being applied properly to `` component. +- DOM Nesting warnings when passing custom content to `title` or `description` of ``. + ## v6.1.0 (June 24, 2022) ### Changed diff --git a/README.md b/README.md index e2ed12255..dd4e99c10 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ This is a library of re-usable React components for use in Brightlayer UI applications. For the most part, these components are meant to simplify building your application by providing drop-in components that implement common use cases in Brightlayer UI and eliminate the need for multiple teams to build their own components for these. -Refer to the [Component Library](https://brightlayer-ui-components.github.io/react/?path=/story/channel-value--with-value) API documentation site for a list of available components or see the repository [documentation](https://github.com/brightlayer-ui/react-component-library/tree/master/docs) for each individual component. +Refer to the [Component Library](https://brightlayer-ui-components.github.io/react) API documentation site for a list of available components or see the repository [documentation](https://github.com/brightlayer-ui/react-component-library/tree/master/docs) for each individual component. ## Installation diff --git a/VALIDATION.md b/VALIDATION.md index 5c398b472..0266d3cc8 100644 --- a/VALIDATION.md +++ b/VALIDATION.md @@ -3,11 +3,13 @@ ### Manual Steps #### Showcase + 1. Beta package integrates into showcase without errors. 2. BLUI Data Display page renders correctly; checking ChannelValue, EmptyState, Hero, InfoListItem, ThreeLiner, and UserMenu. -4. BLUI Surfaces page renders correctly; checking Collapsible Appbar, Toolbar Menu, and Scorecard. +3. BLUI Surfaces page renders correctly; checking Collapsible Appbar, Toolbar Menu, and Scorecard. #### Sandbox + 1. Verify the AppBar component renders correctly in the sandbox environment, using available knobs. 2. Verify the ChannelValue component renders correctly in the sandbox environment, using available knobs. 3. Verify the Drawer component renders correctly in the sandbox environment, using available knobs. @@ -23,4 +25,5 @@ 13. Verify the UserMenu component renders correctly in the sandbox environment, using available knobs. ### Unit Test Count -59 \ No newline at end of file + +59 diff --git a/components/LICENSES.json b/components/LICENSES.json index 220625913..5f39ebbe4 100644 --- a/components/LICENSES.json +++ b/components/LICENSES.json @@ -1,17 +1,23 @@ { - "@brightlayer-ui/colors@3.0.1": { + "@brightlayer-ui/colors@3.1.1": { "licenses": "BSD-3-Clause", "repository": "https://github.com/brightlayer-ui/colors", "licenseUrl": "https://github.com/brightlayer-ui/colors/raw/master/LICENSE", "parents": "@brightlayer-ui/react-components" }, + "@emotion/css@11.9.0": { + "licenses": "MIT", + "repository": "https://github.com/emotion-js/emotion/tree/main/packages/css", + "licenseUrl": "https://github.com/emotion-js/emotion/tree/main/packages/css/raw/master/LICENSE", + "parents": "@brightlayer-ui/react-components" + }, "@seznam/compose-react-refs@1.0.6": { "licenses": "ISC", "repository": "https://github.com/seznam/compose-react-refs", "licenseUrl": "https://github.com/seznam/compose-react-refs/raw/master/LICENSE", "parents": "@brightlayer-ui/react-components" }, - "color@4.2.1": { + "color@4.2.3": { "licenses": "MIT", "repository": "https://github.com/Qix-/color", "licenseUrl": "https://github.com/Qix-/color/raw/master/LICENSE", diff --git a/components/package.json b/components/package.json index 0d1f13309..2ce182b31 100644 --- a/components/package.json +++ b/components/package.json @@ -1,11 +1,10 @@ { "name": "@brightlayer-ui/react-components", - "version": "6.1.0", + "version": "6.1.1", "description": "React components for Brightlayer UI applications", "scripts": { "test": "jest src", "build": "tsc --p tsconfig.lib.json", - "watch:storybook": "tsc --p tsconfig.lib.json --watch --outdir ../demos/storybook/node_modules/@brightlayer-ui/react-components", "lint": "eslint \"src/**/**.{tsx,ts}\"", "lint:fix": "eslint \"src/**/**.{tsx,ts}\" --fix", "prettier": "prettier \"src/**/**.{ts,tsx,js,jsx,json,css,scss,html}\" --write", @@ -27,6 +26,7 @@ "@mui/icons-material": "^5.3.1", "@mui/material": "^5.4.1", "@mui/styles": "^5.4.1", + "@types/node": "^16.11.63", "@types/color": "^3.0.1", "@types/enzyme": "^3.10.4", "@types/enzyme-adapter-react-16": "^1.0.5", diff --git a/components/src/core/AppBar/AppBar.tsx b/components/src/core/AppBar/AppBar.tsx index b14a7e949..9dd27fa2a 100644 --- a/components/src/core/AppBar/AppBar.tsx +++ b/components/src/core/AppBar/AppBar.tsx @@ -26,7 +26,7 @@ const useUtilityClasses = (ownerState: AppBarProps): Record prop !== 'backgroundImage', + shouldForwardProp: (prop) => !['backgroundImage', 'animationDuration'].includes(prop.toString()), })>(({ animationDuration, backgroundImage, theme }) => ({ overflow: 'hidden', transition: theme.transitions.create(['height'], { @@ -302,6 +302,7 @@ const AppBarRender: React.ForwardRefRenderFunction = (prop })} position={'sticky'} backgroundImage={backgroundImage} + animationDuration={durationProp} > {getBackgroundImage()} {props.children} @@ -310,7 +311,7 @@ const AppBarRender: React.ForwardRefRenderFunction = (prop }; /** - * [Appbar](https://brightlayer-ui-components.github.io/react/?path=/info/components-app-bar--get-read-me-story) component + * [Appbar](https://brightlayer-ui-components.github.io/react/components/app-bar) component * * An extension of the default AppBar from Material UI that can be resized / collapsed as the page is scrolled. */ diff --git a/components/src/core/ChannelValue/ChannelValue.tsx b/components/src/core/ChannelValue/ChannelValue.tsx index 0cdf93781..6fedcf659 100644 --- a/components/src/core/ChannelValue/ChannelValue.tsx +++ b/components/src/core/ChannelValue/ChannelValue.tsx @@ -185,7 +185,7 @@ const ChannelValueRender: React.ForwardRefRenderFunction prop !== 'backgroundColor' && prop !== 'sideBorder' && prop !== 'open', + shouldForwardProp: (prop) => prop !== 'backgroundColor' && prop !== 'sideBorder', })>(({ backgroundColor, sideBorder, open, theme }) => ({ minHeight: '100%', backgroundColor: backgroundColor || 'transparent', @@ -352,7 +352,7 @@ const DrawerRenderer: React.ForwardRefRenderFunction = (pr ); }; /** - * [Drawer](https://brightlayer-ui-components.github.io/react/?path=/info/components-drawer--get-read-me-story) component + * [Drawer](https://brightlayer-ui-components.github.io/react/components/drawer) component * * The `` component is a wrapper around the [Material UI Drawer](https://material-ui.com/api/drawer/) that adds specific Brightlayer UI functionality and styling. It is used to organize content (typically navigation links) in a collapsible side panel. * diff --git a/components/src/core/Drawer/DrawerBody.tsx b/components/src/core/Drawer/DrawerBody.tsx index 1ffe9e390..15bfe6b5d 100644 --- a/components/src/core/Drawer/DrawerBody.tsx +++ b/components/src/core/Drawer/DrawerBody.tsx @@ -122,7 +122,7 @@ const DrawerBodyRender: React.ForwardRefRenderFunction }; /** - * [DrawerBody](https://brightlayer-ui-components.github.io/react/?path=/info/components-drawer--get-read-me-story) component + * [DrawerBody](https://brightlayer-ui-components.github.io/react/components/drawer-body) component * * The `` is a wrapper for the main content of the Drawer. The typical use case is to display `` elements, but custom elements (e.g., for spacing) are accepted as well. */ diff --git a/components/src/core/Drawer/DrawerFooter/DrawerFooter.tsx b/components/src/core/Drawer/DrawerFooter/DrawerFooter.tsx index b54f71e45..cc5aa6070 100644 --- a/components/src/core/Drawer/DrawerFooter/DrawerFooter.tsx +++ b/components/src/core/Drawer/DrawerFooter/DrawerFooter.tsx @@ -48,7 +48,7 @@ const Root = styled(Box, { })>(({ backgroundColor }) => ({ width: '100%', backgroundColor: backgroundColor, - [`& .${drawerFooterClasses.hidden}`]: { + [`&.${drawerFooterClasses.hidden}`]: { visibility: 'hidden', }, })); @@ -95,7 +95,7 @@ const DrawerFooterRender: React.ForwardRefRenderFunction` is an optional section that renders at the bottom of the ``. It can be used to add any custom content (as children). */ diff --git a/components/src/core/Drawer/DrawerHeader/DrawerHeader.tsx b/components/src/core/Drawer/DrawerHeader/DrawerHeader.tsx index 7cebb9624..dadc30d55 100644 --- a/components/src/core/Drawer/DrawerHeader/DrawerHeader.tsx +++ b/components/src/core/Drawer/DrawerHeader/DrawerHeader.tsx @@ -93,7 +93,7 @@ const Root = styled(Toolbar, { marginLeft: theme.spacing(0.5), minWidth: 'calc(3.5rem + 16px)', justifyContent: 'center', - '&$nonClickable': { + [`&.${drawerHeaderClasses.nonClickable}`]: { marginLeft: 0, }, }, @@ -265,7 +265,7 @@ const DrawerHeaderRender: React.ForwardRefRenderFunction` contains the content at the top of the ``. By default, it renders multiple lines of text in the Brightlayer UI style. If you supply a `titleContent`, you can render your own custom content in the title area. */ diff --git a/components/src/core/Drawer/DrawerNavGroup/DrawerNavGroup.tsx b/components/src/core/Drawer/DrawerNavGroup/DrawerNavGroup.tsx index 2c523bdf0..b318be751 100644 --- a/components/src/core/Drawer/DrawerNavGroup/DrawerNavGroup.tsx +++ b/components/src/core/Drawer/DrawerNavGroup/DrawerNavGroup.tsx @@ -362,7 +362,7 @@ const DrawerNavGroupRender: React.ForwardRefRenderFunction` is used inside of the `` to organize links/content. Each group consists of an (optional) group title and a series of navigation items. Most visual props are inherited from the `` but can be overridden at the NavGroup level if desired. */ diff --git a/components/src/core/Drawer/DrawerNavItem/DrawerNavItem.tsx b/components/src/core/Drawer/DrawerNavItem/DrawerNavItem.tsx index ed9340470..24df6b75e 100644 --- a/components/src/core/Drawer/DrawerNavItem/DrawerNavItem.tsx +++ b/components/src/core/Drawer/DrawerNavItem/DrawerNavItem.tsx @@ -91,7 +91,7 @@ export type DrawerNavItemProps = SharedStyleProps & title: string; /** Sets whether to disable the tooltip on hover for the condensed `rail` variant */ disableRailTooltip?: boolean; - /** Used to override [InfoListItem](https://brightlayer-ui-components.github.io/react/?path=/info/components-info-list-item--get-read-me-story) default props */ + /** Used to override [InfoListItem](https://brightlayer-ui-components.github.io/react/components/info-list-item) default props */ InfoListItemProps?: Partial; /** Optional sx props to apply style overrides */ sx?: SxProps; @@ -573,7 +573,7 @@ const DrawerNavItemRender: React.ForwardRefRenderFunction` is an individual line item in the ``. These can be generated for you by using the `items` prop of the `` and passing in an array of objects with the following API. You can also create these line items by directly passing them as children to the ``. Each `` also supports the ability to nest items (using its own `items` prop or children). When using the rail variant of the ``, you should use `` instead. */ diff --git a/components/src/core/Drawer/DrawerRailItem/DrawerRailItem.tsx b/components/src/core/Drawer/DrawerRailItem/DrawerRailItem.tsx index 1df47c352..e637c4442 100644 --- a/components/src/core/Drawer/DrawerRailItem/DrawerRailItem.tsx +++ b/components/src/core/Drawer/DrawerRailItem/DrawerRailItem.tsx @@ -103,7 +103,7 @@ const Root = styled(ButtonBase, { Pick< DrawerRailItemProps, 'statusColor' | 'backgroundColor' | 'onClick' | 'activeItemIconColor' | 'activeItemFontColor' | 'condensed' - > & { hasAction: boolean; itemActive: boolean } + > & { condensed: boolean; hasAction: boolean; itemActive: boolean } >( ({ statusColor, @@ -138,12 +138,12 @@ const Root = styled(ButtonBase, { backgroundColor: onClick ? theme.palette.action.hover : undefined, }, ...(itemActive && { - '& $icon': { + [`& .${drawerRailItemClasses.icon}`]: { color: activeItemIconColor || (theme.palette.mode === 'light' ? theme.palette.primary.main : lightenedPrimary), }, - '& $title': { + [`& .${drawerRailItemClasses.title}`]: { color: activeItemFontColor || (theme.palette.mode === 'light' ? theme.palette.primary.main : lightenedPrimary), @@ -328,6 +328,7 @@ const DrawerRailItemRender: React.ForwardRefRenderFunction` is a simplified version of the `` that renders the `icon` and `title` only. When using the `condensed` version of the ``, the `title` will also be hidden. The `` cannot be nested. */ diff --git a/components/src/core/Drawer/DrawerSubheader.tsx b/components/src/core/Drawer/DrawerSubheader.tsx index 24a10c30e..9054ec846 100644 --- a/components/src/core/Drawer/DrawerSubheader.tsx +++ b/components/src/core/Drawer/DrawerSubheader.tsx @@ -36,7 +36,7 @@ const DrawerSubheaderRender: React.ForwardRefRenderFunction` is an optional section that renders below the header and above the body of the ``. It can be used to support custom content (passed as children), such as filtering options or to display additional information. */ diff --git a/components/src/core/DrawerLayout/DrawerLayout.tsx b/components/src/core/DrawerLayout/DrawerLayout.tsx index a78321f17..aae6ebc02 100644 --- a/components/src/core/DrawerLayout/DrawerLayout.tsx +++ b/components/src/core/DrawerLayout/DrawerLayout.tsx @@ -110,7 +110,7 @@ const DrawerLayoutRender: React.ForwardRefRenderFunction` component is used to provide the appropriate resizing behavior for your main application content when used in conjunction with a Brightlayer UI ``. It accepts a `` as a prop, and the main page content is passed in through child elements. */ diff --git a/components/src/core/EmptyState/EmptyState.tsx b/components/src/core/EmptyState/EmptyState.tsx index fafc29fa6..1b7b9bccd 100755 --- a/components/src/core/EmptyState/EmptyState.tsx +++ b/components/src/core/EmptyState/EmptyState.tsx @@ -87,24 +87,32 @@ const EmptyStateRender: React.ForwardRefRenderFunction {...otherProps} > {icon && {icon}} - - {title} - - {description && ( - - {description} - - )} + {title && + (typeof title === 'string' ? ( + + {title} + + ) : ( + title + ))} + {description && + (typeof description === 'string' ? ( + + {description} + + ) : ( + description + ))} {actions && {actions}} ); }; /** - * [EmptyState](https://brightlayer-ui-components.github.io/react/?path=/info/components-empty-state--get-read-me-story) component + * [EmptyState](https://brightlayer-ui-components.github.io/react/components/empty-state) component * * The `` component is an element that can be used as a placeholder when no data is present (such as an empty list, or a placeholder page for future content). This is only used when no data is available, rather than during loading (see [empty states pattern](https://brightlayer-ui.github.io/patterns/empty-states)). */ diff --git a/components/src/core/Hero/Hero.tsx b/components/src/core/Hero/Hero.tsx index a162e5546..f8182c69d 100644 --- a/components/src/core/Hero/Hero.tsx +++ b/components/src/core/Hero/Hero.tsx @@ -142,7 +142,7 @@ const HeroRender: React.ForwardRefRenderFunction = (props: H ); }; /** - * [Hero](https://brightlayer-ui-components.github.io/react/?path=/info/components-hero--get-read-me-story) component + * [Hero](https://brightlayer-ui-components.github.io/react/components/hero) component * * The `` component displays a particular icon, value/units, and a label. The icon property will accept any valid component - this will typically be a Material icon, [Brightlayer UI icon](https://github.com/brightlayer-ui/icons), or [Progress Icon](https://github.com/brightlayer-ui/icons/tree/master/progress). It will also accept Text/Emoji values. */ diff --git a/components/src/core/HeroBanner/HeroBanner.tsx b/components/src/core/HeroBanner/HeroBanner.tsx index d5d7b81b4..b9021630d 100644 --- a/components/src/core/HeroBanner/HeroBanner.tsx +++ b/components/src/core/HeroBanner/HeroBanner.tsx @@ -55,7 +55,7 @@ const HeroBannerRender: React.ForwardRefRenderFunction ); }; /** - * [HeroBanner](https://brightlayer-ui-components.github.io/react/?path=/info/components-hero--get-read-me-story) component + * [HeroBanner](https://brightlayer-ui-components.github.io/react/components/hero) component * * The `` component is a simple wrapper component that is used to contain ``s. It creates the flex container and sets up the spacing rules to display them. It accepts up to four `` components as its children. */ diff --git a/components/src/core/InfoListItem/InfoListItem.tsx b/components/src/core/InfoListItem/InfoListItem.tsx index 620577fa3..7810e17a3 100644 --- a/components/src/core/InfoListItem/InfoListItem.tsx +++ b/components/src/core/InfoListItem/InfoListItem.tsx @@ -325,7 +325,7 @@ const InfoListItemRender: React.ForwardRefRenderFunction` is intended to be used in [``](https://material-ui.com/api/list/) views. It positions a title as well as optional subtitle(s), icon, and status stripe. */ diff --git a/components/src/core/InfoListItem/InfoListItemStyledComponents.tsx b/components/src/core/InfoListItem/InfoListItemStyledComponents.tsx index f185b3835..52662a5ff 100644 --- a/components/src/core/InfoListItem/InfoListItemStyledComponents.tsx +++ b/components/src/core/InfoListItem/InfoListItemStyledComponents.tsx @@ -31,6 +31,13 @@ export const Root = styled(ListItem, { const isWrapEnabled = (): boolean => wrapSubtitle || wrapTitle || wrapInfo; const getHeight = (): string => (dense ? `3.25rem` : `4.5rem`); + let isCssColor = true; + try { + color(backgroundColor); + } catch (e) { + isCssColor = false; + } + return { cursor: onClick ? 'pointer' : 'inherit', backgroundColor: backgroundColor || 'inherit', @@ -38,7 +45,7 @@ export const Root = styled(ListItem, { height: !isWrapEnabled() ? getHeight() : 'auto', '&:hover': { backgroundColor: onClick - ? backgroundColor && backgroundColor !== 'inherit' && backgroundColor !== 'transparent' + ? backgroundColor && backgroundColor !== 'inherit' && backgroundColor !== 'transparent' && isCssColor ? color(backgroundColor).darken(0.08).string() : theme.palette.action.hover : undefined, diff --git a/components/src/core/ListItemTag/ListItemTag.tsx b/components/src/core/ListItemTag/ListItemTag.tsx index a7f5a8093..93181b26c 100644 --- a/components/src/core/ListItemTag/ListItemTag.tsx +++ b/components/src/core/ListItemTag/ListItemTag.tsx @@ -96,7 +96,7 @@ const ListItemTagRender: React.ForwardRefRenderFunction` is a text item with a colored background and rounded corners that is used to tag lists. */ diff --git a/components/src/core/ScoreCard/ScoreCard.tsx b/components/src/core/ScoreCard/ScoreCard.tsx index 20c8bc84a..69ee50d39 100644 --- a/components/src/core/ScoreCard/ScoreCard.tsx +++ b/components/src/core/ScoreCard/ScoreCard.tsx @@ -345,7 +345,7 @@ const ScoreCardRender: React.ForwardRefRenderFunction = ); }; /** - * [ScoreCard](https://brightlayer-ui-components.github.io/react/?path=/info/components-score-card--get-read-me-story) component + * [ScoreCard](https://brightlayer-ui-components.github.io/react/components/score-card) component * * Card component that calls attention to particular values. */ diff --git a/components/src/core/ThreeLiner/ThreeLiner.tsx b/components/src/core/ThreeLiner/ThreeLiner.tsx index 1ff946d8b..674f925c5 100644 --- a/components/src/core/ThreeLiner/ThreeLiner.tsx +++ b/components/src/core/ThreeLiner/ThreeLiner.tsx @@ -117,7 +117,7 @@ const ThreeLinerRenderer: React.ForwardRefRenderFunction = ( ); }; /** - * [UserMenu](https://brightlayer-ui-components.github.io/react/?path=/info/components-user-menu--get-read-me-story) component + * [UserMenu](https://brightlayer-ui-components.github.io/react/components/user-menu) component * * The `` is an Avatar that opens a Menu when clicked. It is typically used in the top-right corner of an application and indicates who is logged in. By default, the Menu will responsively transition to a bottom sheet for mobile views (if passing in a custom menu, you will be responsible for handling any responsiveness on your content). Setting the `useBottomSheetAt` prop to zero will disable the responsiveness. */ diff --git a/components/src/core/Utility/Spacer.tsx b/components/src/core/Utility/Spacer.tsx index 8e00ef628..98a4f87f3 100644 --- a/components/src/core/Utility/Spacer.tsx +++ b/components/src/core/Utility/Spacer.tsx @@ -60,7 +60,7 @@ const SpacerRender: React.ForwardRefRenderFunction = (prop ); }; /** - * [Spacer](https://brightlayer-ui-components.github.io/react/?path=/info/components-spacer--get-read-me-story) component + * [Spacer](https://brightlayer-ui-components.github.io/react/components/spacer) component * * An invisible utility component that acts as a spacer element in various layouts. It works with flexbox sizing or fixed sizing. */ diff --git a/components/yarn.lock b/components/yarn.lock index 9ad3fc266..154cec9d1 100644 --- a/components/yarn.lock +++ b/components/yarn.lock @@ -82,7 +82,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": +"@babel/helper-module-imports@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== @@ -108,6 +108,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== +"@babel/helper-plugin-utils@^7.18.6": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" + integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== + "@babel/helper-simple-access@^7.17.7": version "7.18.2" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" @@ -190,12 +195,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.12.13": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz#834035b45061983a491f60096f61a2e7c5674a47" - integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog== +"@babel/plugin-syntax-jsx@^7.17.12": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -253,10 +258,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.17.12" -"@babel/runtime@^7.13.10", "@babel/runtime@^7.17.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7": - version "7.18.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4" - integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== +"@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.4.tgz#a42f814502ee467d55b38dd1c256f53a7b885c78" + integrity sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA== dependencies: regenerator-runtime "^0.13.4" @@ -313,9 +318,9 @@ "@brightlayer-ui/types" "^2.0.0" "@brightlayer-ui/eslint-config@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@brightlayer-ui/eslint-config/-/eslint-config-3.0.0.tgz#d2bf9967a2b24f6403cec2d9d1bb797b35b1c3d3" - integrity sha512-8gpRirMd+4eEiunHZcSEQz2RK9mL+VR2T8Qc/B3O1P/Glhzw+VXXbh+OPsPT3bpVzObAw+r4E21CnjzZcEd1sg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/@brightlayer-ui/eslint-config/-/eslint-config-3.0.1.tgz#a2c0332366375a0ed33d98a4c366f40c0d1e907b" + integrity sha512-Oysfov3klmqidenOo8+ZFwfxEmyBDpKaB58pi/4dy5aJLMb4vDUfatf2rFrKmYJI9BOAXoIrBuSA+MKYCIp3AQ== dependencies: "@typescript-eslint/parser" "^5.9.0" eslint-config-prettier ">= 8.0.0" @@ -346,33 +351,33 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@emotion/babel-plugin@^11.7.1": - version "11.9.2" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz#723b6d394c89fb2ef782229d92ba95a740576e95" - integrity sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw== +"@emotion/babel-plugin@^11.10.0", "@emotion/babel-plugin@^11.7.1": + version "11.10.2" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz#879db80ba622b3f6076917a1e6f648b1c7d008c7" + integrity sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/runtime" "^7.13.10" - "@emotion/hash" "^0.8.0" - "@emotion/memoize" "^0.7.5" - "@emotion/serialize" "^1.0.2" - babel-plugin-macros "^2.6.1" + "@babel/helper-module-imports" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.17.12" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/serialize" "^1.1.0" + babel-plugin-macros "^3.1.0" convert-source-map "^1.5.0" escape-string-regexp "^4.0.0" find-root "^1.1.0" source-map "^0.5.7" stylis "4.0.13" -"@emotion/cache@^11.7.1": - version "11.7.1" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.7.1.tgz#08d080e396a42e0037848214e8aa7bf879065539" - integrity sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A== +"@emotion/cache@^11.10.0", "@emotion/cache@^11.7.1": + version "11.10.3" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.3.tgz#c4f67904fad10c945fea5165c3a5a0583c164b87" + integrity sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ== dependencies: - "@emotion/memoize" "^0.7.4" - "@emotion/sheet" "^1.1.0" - "@emotion/utils" "^1.0.0" - "@emotion/weak-memoize" "^0.2.5" + "@emotion/memoize" "^0.8.0" + "@emotion/sheet" "^1.2.0" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" stylis "4.0.13" "@emotion/css@^11.9.0": @@ -386,10 +391,10 @@ "@emotion/sheet" "^1.0.3" "@emotion/utils" "^1.0.0" -"@emotion/hash@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== +"@emotion/hash@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" + integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== "@emotion/is-prop-valid@^1.1.2": version "1.1.2" @@ -398,40 +403,51 @@ dependencies: "@emotion/memoize" "^0.7.4" -"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5": +"@emotion/memoize@^0.7.4": version "0.7.5" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50" integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== +"@emotion/memoize@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" + integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== + "@emotion/react@^11.7.1": - version "11.9.0" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.9.0.tgz#b6d42b1db3bd7511e7a7c4151dc8bc82e14593b8" - integrity sha512-lBVSF5d0ceKtfKCDQJveNAtkC7ayxpVlgOohLgXqRwqWr9bOf4TZAFFyIcNngnV6xK6X4x2ZeXq7vliHkoVkxQ== - dependencies: - "@babel/runtime" "^7.13.10" - "@emotion/babel-plugin" "^11.7.1" - "@emotion/cache" "^11.7.1" - "@emotion/serialize" "^1.0.3" - "@emotion/utils" "^1.1.0" - "@emotion/weak-memoize" "^0.2.5" + version "11.10.4" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.4.tgz#9dc6bccbda5d70ff68fdb204746c0e8b13a79199" + integrity sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.10.0" + "@emotion/cache" "^11.10.0" + "@emotion/serialize" "^1.1.0" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@^1.0.2", "@emotion/serialize@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.3.tgz#99e2060c26c6292469fb30db41f4690e1c8fea63" - integrity sha512-2mSSvgLfyV3q+iVh3YWgNlUc2a9ZlDU7DjuP5MjK3AXRR0dYigCrP99aeFtaB2L/hjfEZdSThn5dsZ0ufqbvsA== +"@emotion/serialize@^1.0.2", "@emotion/serialize@^1.0.3", "@emotion/serialize@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.0.tgz#b1f97b1011b09346a40e9796c37a3397b4ea8ea8" + integrity sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA== dependencies: - "@emotion/hash" "^0.8.0" - "@emotion/memoize" "^0.7.4" - "@emotion/unitless" "^0.7.5" - "@emotion/utils" "^1.0.0" + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/unitless" "^0.8.0" + "@emotion/utils" "^1.2.0" csstype "^3.0.2" -"@emotion/sheet@^1.0.3", "@emotion/sheet@^1.1.0": +"@emotion/sheet@^1.0.3": version "1.1.0" resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.0.tgz#56d99c41f0a1cda2726a05aa6a20afd4c63e58d2" integrity sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g== +"@emotion/sheet@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.0.tgz#771b1987855839e214fc1741bde43089397f7be5" + integrity sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w== + "@emotion/styled@^11.6.0": version "11.8.1" resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.8.1.tgz#856f6f63aceef0eb783985fa2322e2bf66d04e17" @@ -443,29 +459,34 @@ "@emotion/serialize" "^1.0.2" "@emotion/utils" "^1.1.0" -"@emotion/unitless@^0.7.5": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" - integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== +"@emotion/unitless@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" + integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== -"@emotion/utils@^1.0.0", "@emotion/utils@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf" - integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ== +"@emotion/use-insertion-effect-with-fallbacks@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df" + integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A== + +"@emotion/utils@^1.0.0", "@emotion/utils@^1.1.0", "@emotion/utils@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" + integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== -"@emotion/weak-memoize@^0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" - integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@emotion/weak-memoize@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" + integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== -"@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== +"@eslint/eslintrc@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.2.tgz#58b69582f3b7271d8fa67fe5251767a5b38ea356" + integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.3.2" + espree "^9.4.0" globals "^13.15.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -483,15 +504,25 @@ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== +"@humanwhocodes/config-array@^0.10.5": + version "0.10.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.7.tgz#6d53769fd0c222767e6452e8ebda825c22e9f0dc" + integrity sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" @@ -785,13 +816,13 @@ react-is "^17.0.2" react-transition-group "^4.4.2" -"@mui/private-theming@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.8.0.tgz#7d927e7e12616dc10b0dcbe665df2c00ed859796" - integrity sha512-MjRAneTmCKLR9u2S4jtjLUe6gpHxlbb4g2bqpDJ2PdwlvwsWIUzbc/gVB4dvccljXeWxr5G2M/Co2blXisvFIw== +"@mui/private-theming@^5.10.6", "@mui/private-theming@^5.8.0": + version "5.10.6" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.10.6.tgz#2c6bb2a4b7034cd402a099bd0349f217584e7b25" + integrity sha512-I/W0QyTLRdEx6py3lKAquKO/rNF/7j+nIOM/xCyI9kU0fcotVTcTY08mKMsS6vrzdWpi6pAkD0wP0KwWy5R5VA== dependencies: - "@babel/runtime" "^7.17.2" - "@mui/utils" "^5.8.0" + "@babel/runtime" "^7.19.0" + "@mui/utils" "^5.10.6" prop-types "^15.8.1" "@mui/styled-engine@^5.8.0": @@ -804,26 +835,26 @@ prop-types "^15.8.1" "@mui/styles@^5.4.1": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.8.0.tgz#43ac26adaf30e911c97b71d60c536d55398d4993" - integrity sha512-kssqBWhCFo7AMiu93QziR8qxq3z8bJm2qCYdmNadE5NvEla7Xwu3twNJUWnCEoeDeoFMk/2H0ACMOdrasI9ANw== - dependencies: - "@babel/runtime" "^7.17.2" - "@emotion/hash" "^0.8.0" - "@mui/private-theming" "^5.8.0" - "@mui/types" "^7.1.3" - "@mui/utils" "^5.8.0" - clsx "^1.1.1" - csstype "^3.0.11" + version "5.10.7" + resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.10.7.tgz#73807e93cda7aa15682a19b8246d6f5b570ffde2" + integrity sha512-veBd1ldZL3OEl2+V1J+zSfGPKzag8tONqLVITnvt31PVejztzrwDDllUG+Mo86tF5709zsfFo6Va7qK4+MK05g== + dependencies: + "@babel/runtime" "^7.19.0" + "@emotion/hash" "^0.9.0" + "@mui/private-theming" "^5.10.6" + "@mui/types" "^7.2.0" + "@mui/utils" "^5.10.6" + clsx "^1.2.1" + csstype "^3.1.1" hoist-non-react-statics "^3.3.2" - jss "^10.8.2" - jss-plugin-camel-case "^10.8.2" - jss-plugin-default-unit "^10.8.2" - jss-plugin-global "^10.8.2" - jss-plugin-nested "^10.8.2" - jss-plugin-props-sort "^10.8.2" - jss-plugin-rule-value-function "^10.8.2" - jss-plugin-vendor-prefixer "^10.8.2" + jss "^10.9.2" + jss-plugin-camel-case "^10.9.2" + jss-plugin-default-unit "^10.9.2" + jss-plugin-global "^10.9.2" + jss-plugin-nested "^10.9.2" + jss-plugin-props-sort "^10.9.2" + jss-plugin-rule-value-function "^10.9.2" + jss-plugin-vendor-prefixer "^10.9.2" prop-types "^15.8.1" "@mui/system@^5.8.2": @@ -840,21 +871,21 @@ csstype "^3.1.0" prop-types "^15.8.1" -"@mui/types@^7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.1.3.tgz#d7636f3046110bcccc63e6acfd100e2ad9ca712a" - integrity sha512-DDF0UhMBo4Uezlk+6QxrlDbchF79XG6Zs0zIewlR4c0Dt6GKVFfUtzPtHCH1tTbcSlq/L2bGEdiaoHBJ9Y1gSA== +"@mui/types@^7.1.3", "@mui/types@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.0.tgz#91380c2d42420f51f404120f7a9270eadd6f5c23" + integrity sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA== -"@mui/utils@^5.8.0": - version "5.8.0" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.8.0.tgz#4b1d19cbcf70773283375e763b7b3552b84cb58f" - integrity sha512-7LgUtCvz78676iC0wpTH7HizMdCrTphhBmRWimIMFrp5Ph6JbDFVuKS1CwYnWWxRyYKL0QzXrDL0lptAU90EXg== +"@mui/utils@^5.10.6", "@mui/utils@^5.8.0": + version "5.10.6" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.10.6.tgz#98d432d2b05544c46efe356cf095cea3a37c2e59" + integrity sha512-g0Qs8xN/MW2M3fLL8197h5J2VB9U+49fLlnKKqC6zy/yus5cZwdT+Gwec+wUMxgwQoxMDn+J8oDWAn28kEOR/Q== dependencies: - "@babel/runtime" "^7.17.2" + "@babel/runtime" "^7.19.0" "@types/prop-types" "^15.7.5" "@types/react-is" "^16.7.1 || ^17.0.0" prop-types "^15.8.1" - react-is "^17.0.2" + react-is "^18.2.0" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1209,6 +1240,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.40.tgz#76ee88ae03650de8064a6cf75b8d95f9f4a16090" integrity sha512-UXdBxNGqTMtm7hCwh9HtncFVLrXoqA3oJW30j6XWp5BH/wu3mVeaxo7cq5benFdBw34HB3XDT2TRPI7rXZ+mDg== +"@types/node@^16.11.63": + version "16.11.63" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.63.tgz#af57f6d2c3fb17a571230d527003dd734a9109b2" + integrity sha512-3OxnrEQLBz8EIIaHpg3CibmTAEGkDBcHY4fL5cnBwg2vd2yvHrUDGWxK+MlYPeXWWIoJJW79dGtU+oeBr6166Q== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -1418,11 +1454,16 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.7.1: +acorn@^8.2.4: version "8.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== +acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -1643,14 +1684,14 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@^2.6.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" - integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== dependencies: - "@babel/runtime" "^7.7.2" - cosmiconfig "^6.0.0" - resolve "^1.12.0" + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" @@ -1949,10 +1990,10 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -clsx@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" - integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== +clsx@^1.1.1, clsx@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== cmd-shim@^5.0.0: version "5.0.0" @@ -2066,16 +2107,16 @@ convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, dependencies: safe-buffer "~5.1.1" -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== +cosmiconfig@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== dependencies: "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" + import-fresh "^3.2.1" parse-json "^5.0.0" path-type "^4.0.0" - yaml "^1.7.2" + yaml "^1.10.0" cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" @@ -2127,10 +2168,10 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@^3.0.11, csstype@^3.0.2, csstype@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" - integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== +csstype@^3.0.2, csstype@^3.1.0, csstype@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== data-urls@^2.0.0: version "2.0.0" @@ -2546,12 +2587,14 @@ eslint-visitor-keys@^3.3.0: integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.15.0: - version "8.17.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.17.0.tgz#1cfc4b6b6912f77d24b874ca1506b0fe09328c21" - integrity sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw== - dependencies: - "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.9.2" + version "8.24.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.24.0.tgz#489516c927a5da11b3979dbfb2679394523383c8" + integrity sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ== + dependencies: + "@eslint/eslintrc" "^1.3.2" + "@humanwhocodes/config-array" "^0.10.5" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + "@humanwhocodes/module-importer" "^1.0.1" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -2561,18 +2604,21 @@ eslint@^8.15.0: eslint-scope "^7.1.1" eslint-utils "^3.0.0" eslint-visitor-keys "^3.3.0" - espree "^9.3.2" + espree "^9.4.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" + find-up "^5.0.0" glob-parent "^6.0.1" globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" + js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" @@ -2584,14 +2630,13 @@ eslint@^8.15.0: strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== +espree@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" + integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== dependencies: - acorn "^8.7.1" + acorn "^8.8.0" acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" @@ -2731,6 +2776,14 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -2912,6 +2965,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.2.10, graceful-fs@^4.2.6, graceful-fs@^4.2.9: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -3081,7 +3139,7 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -3206,6 +3264,13 @@ is-core-module@^2.2.0, is-core-module@^2.8.1: dependencies: has "^1.0.3" +is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -3782,6 +3847,11 @@ jest@^27.0.0: import-local "^3.0.2" jest-cli "^27.5.1" +js-sdsl@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.5.tgz#1ff1645e6b4d1b028cd3f862db88c9d887f26e2a" + integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -3870,70 +3940,70 @@ jsonparse@^1.3.1: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -jss-plugin-camel-case@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz#4921b568b38d893f39736ee8c4c5f1c64670aaf7" - integrity sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww== +jss-plugin-camel-case@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.2.tgz#76dddfa32f9e62d17daa4e3504991fd0933b89e1" + integrity sha512-wgBPlL3WS0WDJ1lPJcgjux/SHnDuu7opmgQKSraKs4z8dCCyYMx9IDPFKBXQ8Q5dVYij1FFV0WdxyhuOOAXuTg== dependencies: "@babel/runtime" "^7.3.1" hyphenate-style-name "^1.0.3" - jss "10.9.0" + jss "10.9.2" -jss-plugin-default-unit@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz#bb23a48f075bc0ce852b4b4d3f7582bc002df991" - integrity sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w== +jss-plugin-default-unit@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.2.tgz#3e7f4a1506b18d8fe231554fd982439feb2a9c53" + integrity sha512-pYg0QX3bBEFtTnmeSI3l7ad1vtHU42YEEpgW7pmIh+9pkWNWb5dwS/4onSfAaI0kq+dOZHzz4dWe+8vWnanoSg== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.9.2" -jss-plugin-global@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz#fc07a0086ac97aca174e37edb480b69277f3931f" - integrity sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ== +jss-plugin-global@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.2.tgz#e7f2ad4a5e8e674fb703b04b57a570b8c3e5c2c2" + integrity sha512-GcX0aE8Ef6AtlasVrafg1DItlL/tWHoC4cGir4r3gegbWwF5ZOBYhx04gurPvWHC8F873aEGqge7C17xpwmp2g== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.9.2" -jss-plugin-nested@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz#cc1c7d63ad542c3ccc6e2c66c8328c6b6b00f4b3" - integrity sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA== +jss-plugin-nested@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.2.tgz#3aa2502816089ecf3981e1a07c49b276d67dca63" + integrity sha512-VgiOWIC6bvgDaAL97XCxGD0BxOKM0K0zeB/ECyNaVF6FqvdGB9KBBWRdy2STYAss4VVA7i5TbxFZN+WSX1kfQA== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.9.2" tiny-warning "^1.0.2" -jss-plugin-props-sort@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz#30e9567ef9479043feb6e5e59db09b4de687c47d" - integrity sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw== +jss-plugin-props-sort@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.2.tgz#645f6c8f179309667b3e6212f66b59a32fb3f01f" + integrity sha512-AP1AyUTbi2szylgr+O0OB7gkIxEGzySLITZ2GpsaoX72YMCGI2jYAc+WUhPfvUnZYiauF4zTnN4V4TGuvFjJlw== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.9.2" -jss-plugin-rule-value-function@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz#379fd2732c0746fe45168011fe25544c1a295d67" - integrity sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg== +jss-plugin-rule-value-function@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.2.tgz#9afe07596e477123cbf11120776be6a64494541f" + integrity sha512-vf5ms8zvLFMub6swbNxvzsurHfUZ5Shy5aJB2gIpY6WNA3uLinEcxYyraQXItRHi5ivXGqYciFDRM2ZoVoRZ4Q== dependencies: "@babel/runtime" "^7.3.1" - jss "10.9.0" + jss "10.9.2" tiny-warning "^1.0.2" -jss-plugin-vendor-prefixer@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz#aa9df98abfb3f75f7ed59a3ec50a5452461a206a" - integrity sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA== +jss-plugin-vendor-prefixer@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.2.tgz#410a0f3b9f8dbbfba58f4d329134df4849aa1237" + integrity sha512-SxcEoH+Rttf9fEv6KkiPzLdXRmI6waOTcMkbbEFgdZLDYNIP9UKNHFy6thhbRKqv0XMQZdrEsbDyV464zE/dUA== dependencies: "@babel/runtime" "^7.3.1" css-vendor "^2.0.8" - jss "10.9.0" + jss "10.9.2" -jss@10.9.0, jss@^10.8.2: - version "10.9.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.0.tgz#7583ee2cdc904a83c872ba695d1baab4b59c141b" - integrity sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw== +jss@10.9.2, jss@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.2.tgz#9379be1f195ef98011dfd31f9448251bd61b95a9" + integrity sha512-b8G6rWpYLR4teTUbGd4I4EsnWjg7MN0Q5bSsjKhVkJVjhQDy2KzkbD2AW3TuT0RYZVmZZHKIrXDn6kjU14qkUg== dependencies: "@babel/runtime" "^7.3.1" csstype "^3.0.2" @@ -4107,6 +4177,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.escape@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" @@ -4763,6 +4840,13 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -4770,6 +4854,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -5047,6 +5138,11 @@ react-is@^17.0.0, react-is@^17.0.1, react-is@^17.0.2: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + react-shallow-renderer@^16.13.1: version "16.15.0" resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" @@ -5086,9 +5182,9 @@ react-transition-group@^4.4.2: prop-types "^15.6.2" react@^18.0.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890" - integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ== + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" @@ -5192,7 +5288,16 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.12.0, resolve@^1.20.0: +resolve@^1.19.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^1.20.0: version "1.22.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== @@ -5793,11 +5898,6 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - v8-to-istanbul@^8.1.0: version "8.1.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" @@ -5973,7 +6073,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.7.2: +yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== @@ -5995,3 +6095,8 @@ yargs@^16.2.0: string-width "^4.2.0" y18n "^5.0.5" yargs-parser "^20.2.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/demos/storybook/stories/channel-value/with-full-config.tsx b/demos/storybook/stories/channel-value/with-full-config.tsx index 603719147..4748c1323 100644 --- a/demos/storybook/stories/channel-value/with-full-config.tsx +++ b/demos/storybook/stories/channel-value/with-full-config.tsx @@ -14,9 +14,7 @@ export const withFullConfig = (): StoryFnReactReturnType => { const iconColor = color('icon.htmlColor', Colors.red[500]); const icon = boolean('Show Icon', true) ? ( - ) : ( - undefined - ); + ) : undefined; const fontSize = number('fontSize', 30); const prefix = boolean('prefix', false); const unitSpace = select('unitSpace', ['show', 'hide', 'auto'], 'auto'); diff --git a/demos/storybook/yarn.lock b/demos/storybook/yarn.lock index 5eb4e52f8..37fc48dd3 100644 --- a/demos/storybook/yarn.lock +++ b/demos/storybook/yarn.lock @@ -3642,9 +3642,9 @@ async-limiter@~1.0.0: integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" @@ -9438,12 +9438,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -"lodash@>=3.5 <5", lodash@^4.0.1, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.5: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -lodash@^4.0.0, lodash@^4.17.21, lodash@~4.17.10: +"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.0.1, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@~4.17.10: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== diff --git a/docs/.eslintrc.js b/docs/.eslintrc.js new file mode 100644 index 000000000..7659184ef --- /dev/null +++ b/docs/.eslintrc.js @@ -0,0 +1,10 @@ +module.exports = { + parser: '@typescript-eslint/parser', + extends: ['@brightlayer-ui/eslint-config/ts'], + parserOptions: { + project: './tsconfig.json', + }, + env: { + browser: true, + }, +}; diff --git a/docs/Drawer.md b/docs/Drawer.md deleted file mode 100644 index e5b8e56b5..000000000 --- a/docs/Drawer.md +++ /dev/null @@ -1,566 +0,0 @@ -# Drawer - -The `` component is a wrapper around the [Material UI Drawer](https://material-ui.com/api/drawer/) that adds specific Brightlayer UI functionality and styling. It is used to organize content (typically navigation links) in a collapsible side panel. The Brightlayer UI Drawer includes helper components for ``, ``, ``, ``, ``, ``, ``, and `` to help organize the content. - -
- Nested Drawer -
- -## Drawer - -The `` component is the parent container, which manages the overall state of the drawer and renders the child components. - -
- Drawer Anatomy -
- -### Drawer Usage - -```tsx -import { Drawer, DrawerHeader, DrawerSubheader, DrawerBody, DrawerNavGroup, DrawerFooter } from '@brightlayer-ui/react-components'; - -// Constructing the drawer using the items object - - - - - - - - - - -// Constructing the drawer declaratively - - - - - - - - - - - - - - - -// a responsive Drawer using the variant prop -import useMediaQuery from '@mui/material/useMediaQuery'; -import { useTheme } from '@mui/material/styles'; -const theme = useTheme(); -const xsDown = useMediaQuery(theme.breakpoints.down('xs')); - - - -``` - -### Drawer API - -
- -| Prop Name | Description | Type | Required | Default | -| ------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------ | -------- | ----------------- | -| activeItem | itemID for the 'active' item | `string` | no | | -| classes | Style overrides | `DrawerClasses` | no | | -| condensed | Show condensed nav items without labels (`rail` variant only) | `boolean` | no | `false` | -| noLayout | Set to true if used without a `` | `boolean` | no | `false` | -| onItemSelect | A callback function to execute whenever an item is clicked | `(id: string) => void` | no | | -| open | Controls the open/closed state of the drawer | `boolean` | yes | | -| openOnHover | Automatically open the drawer on hover when closed (persistent variant only) | `boolean` | no | `true` | -| openOnHoverDelay | Delay (ms) before triggering open on hover (persistent variant only) | `number` | no | `500` | -| sideBorder | Whether to use a side border for the drawer instead of a shadow | `boolean` | no | `false` | -| variant | The variant to use (see below) | `'permanent'` \| `'persistent'` \| `'temporary'` \| `'rail'` | no | `persistent` | -| width | Sets the width of the drawer when open | `number` \| `string` | no | `22.5rem (360px)` | -| [...sharedProps](#shared-props) | Props that can be set at any level in the drawer hierarchy | - | - | | - -
- -Any other props will be provided to the root element [**Material UI Drawer**](https://material-ui.com/api/drawer/). - -The `Drawer` has four `variant`s: - -- **Permanent**: Always open, even when `open` is set to false. -- **Persistent**: When `open` is set to false, the `` collapses itself as a navigation rail, and hover will make it expand temporarily; when `open` is set to true, it behaves like a permanent ``. -- **Temporary**: When `open` is set to false, the `` is hidden; when `open` is set to true, it slides in. -- **Rail**: An always collapsed version of the `` that only displays an icons and titles. - -> **Note on using multiple drawers**: If your application uses multiple ``s, each `` will automatically adjust based on the state of the nearest ``. If you are using a `` without a ``, you should set the `noLayout` property to true on the `` to prevent inadvertently affecting the styles of any ``s. - -### Style Overrides - -You can override the default styles used by Brightlayer UI by: - -- using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet - -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). - -| Name | Global CSS Class | Description | -| ---------- | ---------------------- | -------------------------------------------------------------- | -| root | .BluiDrawer-root | Styles applied to the root element | -| content | .BluiDrawer-content | Styles applied to the drawer content container | -| expanded | .Mui-expanded | Styles applied to the root element when the drawer is expanded | -| paper | .BluiDrawer-paper | MUI Drawer style override for the underlying paper element | -| sideBorder | .BluiDrawer-sideBorder | Styles applied when sideBorder is set to true | - -## Drawer Header - -The `` contains the content at the top of the ``. By default, it renders multiple lines of text in the Brightlayer UI style. If you supply a `titleContent`, you can render your own custom content in the title area. - -
- Drawer Header Anatomy -
- -### Drawer Header API - -
- -| Prop Name | Description | Type | Required | Default | -| ----------------- | ---------------------------------------------- | --------------------- | -------- | ---------------------------- | -| backgroundColor | The color used for the background | `string` | no | `theme.palette.primary.main` | -| backgroundImage | An image to display in the header | `string` | no | | -| backgroundOpacity | The opacity of the background image | `number` | no | `0.3` | -| classes | Style overrides | `DrawerHeaderClasses` | no | | -| divider | Optional divider which appears beneath header | `boolean` | no | `false` | -| fontColor | The color of the text elements | `string` | no | dynamic based on background | -| icon | A component to render for the icon | `ReactNode` | no | | -| onIconClick | A function to execute when the icon is clicked | `function` | no | `() => {}` | -| subtitle | The text to show on the second line | `string` | no | | -| title | The text to show on the first line | `string` | no | | -| titleContent | Custom content for header title area | `ReactNode` | no | | - -
- -Any other props will be provided to the root element [**Material UI Toolbar**](https://material-ui.com/api/toolbar/). - -### Style Overrides - -You can override the default styles used by Brightlayer UI by: - -- using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet - -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). - -| Name | Global CSS Class | Description | -| ---------------- | ---------------------------------- | ------------------------------------------------ | -| root | .BluiDrawerHeader-root | Styles applied to the root element | -| background | .BluiDrawerHeader-background | Styles applied to the header background | -| content | .BluiDrawerHeader-content | Styles applied to the content container | -| navigation | .BluiDrawerHeader-navigation | Styles applied to the icon element | -| nonClickableIcon | .BluiDrawerHeader-nonClickableIcon | Styles applied to the non-clickable icon element | -| railIcon | .BluiDrawerHeader-railIcon | Styles applied to the icon when using rail style | -| subtitle | .BluiDrawerHeader-subtitle | Styles applied to the subtitle element | -| title | .BluiDrawerHeader-title | Styles applied to the title element | - -## Drawer Subheader - -The `` is an optional section that renders below the header and above the body of the ``. It can be used to support custom content (passed as children), such as filtering options or to display additional information. - -### Drawer Subheader Usage - -```tsx -import DrawerSubheader from '@brightlayer-ui/react-components/core/Drawer'; -... - -
Custom Subheader Content
-
-``` - -### Drawer Subheader API - -
- -| Prop Name | Description | Type | Required | Default | -| --------------------- | -------------------------------------------------- | --------- | -------- | ------- | -| divider | Optional divider which appears below the Subheader | `boolean` | no | `true` | -| hideContentOnCollapse | Hide subheader contents when drawer is closed | `boolean` | no | `true` | - -
- -Any other props supplied will be provided to the root element (`div`). - -## Drawer Body - -The `` is a wrapper for the main content of the Drawer. The typical use case is to display `` elements, but custom elements (e.g., for spacing) are accepted as well. - -### Drawer Body Usage - -```tsx -import DrawerBody from '@brightlayer-ui/react-components/core/Drawer'; -... - - - - -``` - -### Drawer Body API - -
- -| Prop Name | Description | Type | Required | Default | -| ------------------------------- | ---------------------------------------------------------- | ------------------- | -------- | ------- | -| classes | Style overrides | `DrawerBodyClasses` | no | | -| [...sharedProps](#shared-props) | Props that can be set at any level in the drawer hierarchy | - | - | | - -
- -Any other props supplied will be provided to the root element (`div`). - -#### Classes - -You can override the classes used by Brightlayer UI by passing a `classes` prop. The `` supports the following keys: - -| Name | Description | -| ---- | ---------------------------------- | -| root | Styles applied to the root element | - -## Drawer Nav Group - -A `` is used inside of the `` to organize links/content. Each group consists of an (optional) group title and a series of navigation items. Most visual props are inherited from the `` but can be overridden at the NavGroup level if desired. - -The `items` property supports nested items to generate collapsible sections in the menu. This can be used to create an arbitrary tree depth, but we do not recommend going more than two levels deep in a navigation Drawer. You can also build the navigation links declaratively by passing either `` or `` children to the ``. - -
- Drawer Nav Group Anatomy -
- -### Drawer Nav Group API - -
- -| Prop Name | Description | Type | Required | Default | -| ------------------------------- | ---------------------------------------------------------- | ----------------------- | -------- | --------------------------- | -| classes | Style overrides | `DrawerNavGroupClasses` | no | | -| items | List of items to render | `NavItem[]` | yes | | -| title | Text to display in the group header | `string` | no | | -| titleColor | Color used for the title text | `string` | no | varies for light/dark theme | -| titleContent | Custom element, substitute for title | `ReactNode` | no | | -| titleDivider | Divider for the title | `boolean` | no | true | -| [...sharedProps](#shared-props) | Props that can be set at any level in the drawer hierarchy | - | - | | - -
- -Any other props will be provided to the root element [**Material UI List**](https://material-ui.com/api/list/). - -### Style Overrides - -You can override the default styles used by Brightlayer UI by: - -- using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet - -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). - -| Name | Global CSS Class | Description | -| --------- | ----------------------------- | -------------------------------------------- | -| root | .BluiDrawerNavGroup-root | Styles applied to the root element | -| title | .BluiDrawerNavGroup-title | Styles applied to the title text element | -| subheader | .BluiDrawerNavGroup-subheader | Styles applied to the List subheader element | - -## Drawer Footer - -The `` is an optional section that renders at the bottom of the ``. It can be used to add any custom content (as children). - -### Usage - -```tsx -import DrawerFooter from '@brightlayer-ui/react-components/core/Drawer'; -... - -
Custom Footer goes here
-
-``` - -### Drawer Footer API - -
- -| Prop Name | Description | Type | Required | Default | -| --------------------- | ------------------------------------------- | --------- | -------- | ------- | -| backgroundColor | The color used for the background | `string` | no | | -| divider | Optional divider which appears above footer | `boolean` | no | `true` | -| hideContentOnCollapse | Hide footer contents when drawer is closed | `boolean` | no | `true` | - -
- -Any other props supplied will be provided to the root element (`div`). - -#### Classes - -You can override the classes used by Brightlayer UI by passing a `classes` prop. The `` supports the following keys: - -| Name | Description | -| ------ | ------------------------------------ | -| root | Styles applied to the root element | -| hidden | Styles applied to the hidden element | - -## Drawer Nav Item - -The `` is an individual line item in the ``. These can be generated for you by using the `items` prop of the `` and passing in an array of objects with the following API. You can also create these line items by directly passing them as children to the ``. Each `` also supports the ability to nest items (using its own `items` prop or children). When using the rail variant of the ``, you should use `` instead (see below). - -
- Nav Item Anatomy -
- -### Drawer Nav Item API - -
- -| Prop Name | Description | Type | Required | Default | -| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | -------- | ------- | -| classes | Style overrides | `DrawerNavItemClasses` | no | | -| depth\* | The nested depth of the item | `number` | no | 0 | -| hidden | Sets whether to hide the nav item | `boolean` | no | | -| hidePadding | Remove left padding if no icon is used | `boolean` | no | false | -| icon | A component to render for the left icon | `JSX.Element` | no | | -| isInActiveTree\* | Sets whether the item is a parent of the currently active item (managed automatically) | `boolean` | no | | -| itemID | A unique identifier of the NavItem. Item will have 'active' style when this matches activeItem | `string` | yes | | -| items | The items nested under this item | `NestedNavItem[]` | no | | -| notifyActiveParent\* | Callback function to the parent element to update active hierarchy styles | `(ids: string[]) => void` | no | | -| onClick | A function to execute when clicked | `function` | no | | -| rightComponent | An icon/component to display to the right | `ReactNode` | no | | -| statusColor | Status stripe and icon color | `string` | no | | -| subtitle | The text to show on the second line | `string` | no | | -| title | The text to show on the first line | `string` | yes | | -| disableRailTooltip | Sets whether to disable the tooltip on hover for the condensed `rail` variant | `boolean` | no | | -| InfoListItemProps | Used to override [InfoListItem](https://brightlayer-ui-components.github.io/react/?path=/info/components-info-list-item--get-read-me-story) default props | `InfoListItemProps` | no | | -| [...sharedProps](#shared-props) | Props that can be set at any level in the drawer hierarchy | - | - | | - -
- -> \*These props are managed automatically when using the `` inside of a ``. - -### Style Overrides - -You can override the default styles used by Brightlayer UI by: - -- using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet - -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). - -| Name | Global CSS Class | Description | -| --------------- | ------------------------------------- | ----------------------------------------------------------------- | -| root | .BluiDrawerNavItem-root | Styles applied to the root element | -| active | .BluiDrawerNavItem-active\* | Styles applied to the root element if the item is the active item | -| chevron | .BluiDrawerNavItem-chevron | Styles applied to the chevron element | -| expandIcon | .BluiDrawerNavItem-expandIcon | Styles applied to the expandIcon element | -| nestedListGroup | .BluiDrawerNavItem-nestedListGroup | Styles applied to wrapper surrounded nested children | -| nestedTitle | .BluiDrawerNavItem-nestedTitle | Styles applied to the title if the item is a nested item | -| title | .BluiDrawerNavItem-title | Styles applied to the title text | -| titleActive | .BluiDrawerNavItem-titleActive | Styles applied to the title text if the item is the active item | -| ripple | .BluiDrawerNavItem-ripple | Styles applied to the ripple | - -> \* These classes can not be overridden via the `sx` prop. - -### Tips - -You can render the `` as a link by setting the `component` prop in the `InfoListItemProps` to a [`Link`](https://reactrouter.com/web/api/Link) component from `react-router-dom` (recommended), or the native HTML anchor tag `'a'`. This allows you to perform helpful actions such as opening a link in a new browser tab via right-click. - -```tsx - -import { Link } from 'react-router-dom'; -// Using items prop - - -// Declaratively - -``` - -## Drawer Rail Item - -When using the `rail` variant of the ``, you should use `` instead of ``. The `` is a simplified version of the `` that renders the `icon` and `title` only. When using the `condensed` version of the ``, the `title` will also be hidden. The `` cannot be nested. - -
- Rail Anatomy -
- -### Drawer Rail Item API - -
- -| Prop Name | Description | Type | Required | Default | -| ------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------- | -------- | ------- | -| classes | Style overrides | `DrawerRailItemClasses` | no | | -| condensed\* | Show condensed nav items without labels (`rail` variant only) | `boolean` | no | `false` | -| hidden | Sets whether to hide the rail item | `boolean` | no | | -| icon | A component to render for the left icon | `JSX.Element` | yes | | -| itemID | An unique identifier of the NavItem. Item will have 'active' style when this matches activeItem | `string` | yes | | -| onClick | A function to execute when clicked | `function` | no | | -| statusColor | Status stripe and icon color | `string` | no | | -| title | The text to show on the first line | `string` | no | | -| ButtonBaseProps | Used to override [ButtonBase](https://material-ui.com/api/button-base/) default props | `InfoListItemProps` | no | | -| disableRailTooltip | Sets whether to disable the tooltip on hover | `boolean` | no | | -| [...sharedProps](#shared-props) | Props that can be set at any level in the drawer hierarchy | - | - | | - -
- -> \*These props are managed automatically when using the `` inside of a ``. - -### Style Overrides - -You can override the default styles used by Brightlayer UI by: - -- using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet - -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). - -| Name | Global CSS Class | Description | -| ------------- | --------------------------------- | --------------------------------------------------------------- | -| root | .BluiDrawerRailItem-root | Styles applied to the root element | -| active | .BluiDrawerRailItem-active | Styles applied to the active element | -| condensed | .BluiDrawerRailItem-condensed | Styles applied to the root element when condensed is true | -| divider | .BluiDrawerRailItem-divider | Styles applied to the divider element | -| icon | .BluiDrawerRailItem-icon | Styles applied to the icon wrapper | -| statusStripe | .BluiDrawerRailItem-statusStripe | Styles applied to the status stripe | -| title | .BluiDrawerRailItem-title | Styles applied to the title text | -| titleActive | .BluiDrawerRailItem-titleActive | Styles applied to the title text if the item is the active item | -| ripple | .BluiDrawerRailItem-ripple | Styles applied to the ripple | -| cursorPointer | .BluiDrawerRailItem-cursorPointer | Styles applied to the root element when cursor is pointer | -| itemActive | .BluiDrawerRailItem-itemActive | Styles applied to the active item | - -```tsx -import { DrawerRailItem } from '@brightlayer-ui/react-components'; -import Menu from '@mui/icons-material/Menu'; -... - } - sx={{ backgroundColor: 'red' }} -/> -``` - -### Tips - -You can render the `` as a link by setting the `component` prop in the `ButtonBaseProps` to a [`Link`](https://reactrouter.com/web/api/Link) component from `react-router-dom` (recommended), or the native HTML anchor tag `'a'`. This allows you to perform helpful actions such as opening a link in a new browser tab via right-click. - -```tsx - -import { Link } from 'react-router-dom'; -// Using items prop - - -// Declaratively - -``` - -## Shared Props - -The following props can be set at any level in the drawer hierarchy (``, ``, ``, ``, or ``). If they are set on a parent, they will be used for all children. For more customization, you can set these props on individual children and they will override any value set on the parent. - -
- -| Name | Description | Type | Required | Default | -| ------------------------- | --------------------------------------------------------- | --------- | -------- | --------------------------- | -| activeItemBackgroundColor | Background color for the 'active' item | `string` | no | varies for light/dark theme | -| activeItemFontColor | Font color for the 'active' item | `string` | no | varies for light/dark theme | -| activeItemIconColor | Icon color for the 'active' item | `string` | no | varies for light/dark theme | -| backgroundColor | Color used for the background of the element | `string` | no | | -| divider | Whether to show a line between all items | `boolean` | no | false | -| itemFontColor | The color used for the item text | `string` | no | varies for light/dark theme | -| itemIconColor | The color used for the icon | `string` | no | varies for light/dark theme | -| ripple | Whether to apply material ripple effect to items on click | `boolean` | no | true | - -
- -The following are additional shared props that will apply when using a non-rail variant of the ``. They will have no effect on ``s. - -
- -| Prop Name | Description | Type | Required | Default | -| ----------------------------- | ----------------------------------------------------------------------------- | ----------------------- | -------- | ------------------------------------------------------------ | -| activeItemBackgroundShape | shape of the active item background highlight | `'round'` \| `'square'` | no | square | -| chevron | Whether to have chevrons for all menu items | `boolean` | no | | -| chevronColor | Color override for the chevron icon | `string` | no | | -| collapseIcon | Icon used to collapse drawer | `JSX.Element` | no | `expandIcon` rotated 180 degrees | -| expandIcon | Icon used to expand drawer | `JSX.Element` | no | `` at top-level, `` otherwise | -| hidePadding | Whether to hide the paddings reserved for menu item icons | `boolean` | no | | -| disableActiveItemParentStyles | If true, NavItems will not have a bold title when a child NavItem is selected | `boolean` | no | `false` | -| nestedBackgroundColor | background color for nested menu items | `string` | no | theme.palette.type === 'light' ? white[200] : darkBlack[100] | -| nestedDivider | Whether to show a line between nested menu items | `boolean` | no | false | - -
- -# Drawer Layout - -The `` component is used to provide the appropriate resizing behavior for your main application content when used in conjunction with a Brightlayer UI ``. It accepts a `` as a prop, and the main page content is passed in through child elements. - -
- DrawerLayout with labels -
- -## Drawer Layout Usage - -```tsx -import { Drawer, DrawerLayout } from '@brightlayer-ui/react-components'; -... -}> - <> - /* Page content goes here */ - - -``` - -### Drawer Layout API - -
- -| Prop Name | Description | Type | Required | Default | -| --------- | ------------------------------- | ------------------------------------ | -------- | ------- | -| classes | Style overrides | `DrawerLayoutClasses` | no | | -| drawer | Drawer component to be embedded | `ReactElement` | yes | | - -
- -Any other props supplied will be provided to the root element (`div`). - -> **Note on Scrolling**: When using client-side routing in your application, you may notice that the window scroll position does not reset when navigating to new routes. To address this issue, you will need to manually update the scroll position when new pages are loaded. If you are using React Router they have [several examples](https://reacttraining.com/react-router/web/guides/scroll-restoration) on how to implement this in your application. - -### Style Overrides - -You can override the default styles used by Brightlayer UI by: - -- using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet - -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). - -| Name | Global CSS Class | Description | -| -------- | ----------------------------- | -------------------------------------------------------------- | -| root | .BluiDrawerLayout-root | Styles applied to the root element | -| content | .BluiDrawerLayout-content | Styles applied to the body content container | -| drawer | .BluiDrawerLayout-drawer | Styles applied to the drawer container | -| expanded | .Mui-expanded | Styles applied to the root element when the drawer is expanded | diff --git a/docs/Hero.md b/docs/Hero.md deleted file mode 100644 index 1ec17eed2..000000000 --- a/docs/Hero.md +++ /dev/null @@ -1,102 +0,0 @@ -# Hero - -The Brightlayer UI `` components are used to call attention to particular values that are of the most importance to the user. These are typically displayed in a banner. - -
-Hero Banner -
- -The `` component displays a particular icon, value/units, and a label. The icon property will accept any valid component - this will typically be a Material icon, [Brightlayer UI icon](https://github.com/brightlayer-ui/icons), or [Progress Icon](https://github.com/brightlayer-ui/icons/tree/master/progress). It will also accept Text/Emoji values. - -The value section of the Hero utilizes a [``](./ChannelValue.md) component. To display a single simple value, the information can be passed using ChannelValueProps which will allow you to specify any props on the underlying `` component. For more complex values (such as a duration that displays hours and minutes), you can pass in `` components as children and they will be displayed inline. - -## Hero Usage - -
- Hero Anatomy -
- -```tsx -import { Hero } from '@brightlayer-ui/react-components'; - -// Simple usage passing props -} - label={'Label'} - ChannelValueProps={{ value: 99, units: '%' }} -/> -// Complex example with multiple values as children -} - label={'Label'} -> - - - -``` - -## Hero API - -
- -| Prop Name | Description | Type | Required | Default | -| ------------------- | ------------------------------------------ | -------------------- | -------- | ------------- | -| ChannelValueProps | Props passed through to ChannelValue child | `ChannelValueProps` | no | | -| classes | Style overrides | `HeroClasses` | no | | -| icon | The primary icon | `ReactNode` | yes | | -| iconBackgroundColor | The color used behind the primary icon | `string` | no | 'transparent' | -| iconSize | The size of the primary icon (min 10px) | `number` \| `string` | no | 36 | -| label | The text shown below the `ChannelValue` | `string` | yes | | - -
- -Any other props supplied will be provided to the root element (`div`). - -### Style Overrides - -You can override the default styles used by Brightlayer UI by: - -- using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet - -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). - -| Name | Global CSS Class | Description | -| ------ | ---------------- | ----------------------------------- | -| root | .BluiHero-root | Styles applied to the root element | -| icon | .BluiHero-icon | Styles applied to the icon element | -| label | .BluiHero-label | Styles applied to the label element | -| values | .BluiHero-values | Styles applied to the value element | - -# Hero Banner - -The `` component is a simple wrapper component that is used to contain ``s. It creates the flex container and sets up the spacing rules to display them. It accepts up to four `` components as its children. - -## Hero Banner Usage - -```tsx -import HeroBanner from '@brightlayer-ui/react-components/core/HeroBanner'; -import Hero from '@brightlayer-ui/react-components/core/Hero'; -... - - - - - - -``` - -## Hero Banner API - -
- -| Prop Name | Description | Type | Required | Default | -| --------- | ---------------------------------- | ------------------- | -------- | ------- | -| classes | Style overrides | `HeroBannerClasses` | no | | -| divider | Whether to show the line separator | `boolean` | no | false | -| limit | Max number of children to display | `number` | no | 4 | - -
- -Any other props supplied will be provided to the root element (`div`). diff --git a/docs/ListItemTag.md b/docs/ListItemTag.md deleted file mode 100644 index 9306f064b..000000000 --- a/docs/ListItemTag.md +++ /dev/null @@ -1,41 +0,0 @@ -# List Item Tag - -`` is a text item with a colored background and rounded corners that is used to tag lists. - -List Item Tag - -## Usage - -```tsx -import { ListItemTag } from '@brightlayer-ui/react-components'; - -; -``` - -## API - -
- -| Prop Name | Description | Type | Required | Default | -| --------------- | ----------------------------- | -------- | -------- | --------------------------- | -| label | The label text | `string` | yes | | -| fontColor | Color of the label | `string` | no | varies for light/dark theme | -| backgroundColor | Color of the label background | `string` | no | varies for light/dark theme | - -
- -Any other props will be provided to the root element [**Material UI Typography**](https://material-ui.com/api/typography/). - -### Style Overrides - -You can override the default styles used by Brightlayer UI by: - -- using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet - -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). - -| Name | Global CSS Class | Description | -| ---- | --------------------- | ---------------------------------- | -| root | .BluiListItemTag-root | Styles applied to the root element | diff --git a/docs/README.md b/docs/README.md index b6d250d4b..0c83cde2c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,14 +1,70 @@ -# React Components - -We currently have the following components available for React applications: - -- [Channel Value](https://github.com/brightlayer-ui/react-component-library/blob/dev/docs/ChannelValue.md) -- [Drawer](https://github.com/brightlayer-ui/react-component-library/blob/dev/docs/Drawer.md) -- [Drawer Layout](https://github.com/brightlayer-ui/react-component-library/blob/dev/docs/DrawerLayout.md) -- [Empty State](https://github.com/brightlayer-ui/react-component-library/blob/dev/docs/EmptyState.md) -- [Hero & Hero Banner](https://github.com/brightlayer-ui/react-component-library/blob/dev/docs/Hero.md) -- [Info List Item](https://github.com/brightlayer-ui/react-component-library/blob/dev/docs/InfoListItem.md) -- [List Item Tag](https://github.com/brightlayer-ui/react-component-library/blob/dev/docs/ListItemTag.md) -- [Score Card](https://github.com/brightlayer-ui/react-component-library/blob/dev/docs/ScoreCard.md) -- [Spacer](https://github.com/brightlayer-ui/react-component-library/blob/dev/docs/Spacer.md) -- [User Menu](https://github.com/brightlayer-ui/react-component-library/blob/dev/docs/UserMenu.md) +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.\ +You will also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) + +### Analyzing the Bundle Size + +This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) + +### Making a Progressive Web App + +This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) + +### Advanced Configuration + +This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) + +### Deployment + +This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) + +### `npm run build` fails to minify + +This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/docs/Spacer.md b/docs/Spacer.md deleted file mode 100644 index e9355e9ca..000000000 --- a/docs/Spacer.md +++ /dev/null @@ -1,48 +0,0 @@ -# Spacer - -An invisible utility component that acts as a spacer element in various layouts. It works with flexbox sizing or fixed sizing. - -
- Spacer used in Drawer Body
-
- -## Usage - -```tsx -import { Spacer } from '@brightlayer-ui/react-components'; -... -
- {/* Left Content */} - - {/* Right Content */} -
-``` - -## API - -
- -| Prop Name | Description | Type | Required | Default | Examples | -| --------- | --------------------------------------- | -------------------- | -------- | ------- | ------------------------- | -| classes | Classes object to override styles | `SpacerClasses` | no | | {root: 'customRootClass'} | -| flex | Flex grow/shrink value for flex layouts | `number` | no | 1 | | -| height | Height (in px) for static layouts | `number` \| `string` | no | | | -| width | Width (in px) for static layouts | `number` \| `string` | no | | | - -
- -Any other props supplied will be provided to the root element (`div`). - -### Style Overrides - -You can override the default styles used by Brightlayer UI by: - -- using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet - -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). - -| Name | Global CSS Class | Description | -| ---- | ---------------- | ---------------------------------- | -| root | .BluiSpacer-root | Styles applied to the root element | diff --git a/docs/craco.config.js b/docs/craco.config.js new file mode 100644 index 000000000..96950c118 --- /dev/null +++ b/docs/craco.config.js @@ -0,0 +1,23 @@ +const { addAfterLoader, loaderByName } = require('@craco/craco'); + +const remarkGfm = require('remark-gfm'); + +module.exports = { + webpack: { + configure(webpackConfig) { + addAfterLoader(webpackConfig, loaderByName('babel-loader'), { + test: /\.mdx?$/, + + loader: '@mdx-js/loader', + + options: { + providerImportSource: '@mdx-js/react', + + remarkPlugins: [remarkGfm], + }, + }); + + return webpackConfig; + }, + }, +}; diff --git a/docs/googleAnalytics/ga.dev.js b/docs/googleAnalytics/ga.dev.js new file mode 100644 index 000000000..ac1506659 --- /dev/null +++ b/docs/googleAnalytics/ga.dev.js @@ -0,0 +1 @@ +export const gaID = 'UA-139646200-4'; diff --git a/docs/googleAnalytics/ga.master.js b/docs/googleAnalytics/ga.master.js new file mode 100644 index 000000000..77e769552 --- /dev/null +++ b/docs/googleAnalytics/ga.master.js @@ -0,0 +1 @@ +export const gaID = 'UA-139646200-3'; diff --git a/docs/images/ToolbarMenuAnatomy.png b/docs/images/ToolbarMenuAnatomy.png deleted file mode 100644 index 00e15dcf4..000000000 Binary files a/docs/images/ToolbarMenuAnatomy.png and /dev/null differ diff --git a/docs/images/channelValue.png b/docs/images/channelValue.png deleted file mode 100644 index 70d0d0ae6..000000000 Binary files a/docs/images/channelValue.png and /dev/null differ diff --git a/docs/images/emptyStateAnatomy.png b/docs/images/emptyStateAnatomy.png deleted file mode 100644 index dfca6a64b..000000000 Binary files a/docs/images/emptyStateAnatomy.png and /dev/null differ diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 000000000..a7443c9de --- /dev/null +++ b/docs/package.json @@ -0,0 +1,107 @@ +{ + "name": "react-dev-docs", + "version": "0.1.0", + "private": true, + "dependencies": { + "@brightlayer-ui/colors": "^3.1.1", + "@brightlayer-ui/icons": "^1.11.0", + "@brightlayer-ui/icons-mui": "^3.0.0", + "@brightlayer-ui/react-components": "^6.1.0", + "@brightlayer-ui/react-themes": "^7.0.0", + "@craco/craco": "^6.4.3", + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@fontsource/roboto": "^4.5.8", + "@fontsource/roboto-mono": "^4.5.8", + "@mdx-js/loader": "^2.1.3", + "@mdx-js/mdx": "^2.1.5", + "@mdx-js/react": "^2.1.3", + "@mui/icons-material": "^5.8.3", + "@mui/material": "^5.8.3", + "@mui/styles": "^5.8.3", + "@reduxjs/toolkit": "^1.8.2", + "@types/prismjs": "^1.26.0", + "lodash.debounce": "^4.0.8", + "prismjs": "^1.28.0", + "react": "^18.1.0", + "react-app-polyfill": "^3.0.0", + "react-app-rewired": "^2.2.1", + "react-dom": "^18.1.0", + "react-ga": "^3.3.1", + "react-redux": "^7.2.0", + "react-router": "^6.3.0", + "react-router-dom": "^6.3.0", + "react-scripts": "5.0.1", + "redux": "^4.2.0", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "craco start", + "build": "craco build", + "test": "craco test", + "eject": "craco eject", + "webpack-dev-server": "webpack-dev-server", + "dev": "webpack-dev-server --mode=development", + "prod": "webpack --mode=production", + "prettier": "prettier \"src/**/**/*.{ts,tsx,js,jsx,json,css,scss,html,mdx,md}\" --write", + "prettier:check": "prettier \"src/**/**/*.{ts,tsx,js,jsx,json,css,scss,html,mdx,md}\" --check", + "lint": "eslint \"**/**/*.{ts,tsx}\"", + "lint:fix": "eslint \"**/**/*.{ts,tsx}\" --fix", + "ga:master": "cp -r ./googleAnalytics/ga.master.js ./src/ga.js", + "ga:dev": "cp -r ./googleAnalytics/ga.dev.js ./src/ga.js" + }, + "prettier": "@brightlayer-ui/prettier-config", + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@brightlayer-ui/eslint-config": "^3.0.1", + "@brightlayer-ui/prettier-config": "^1.0.3", + "@emotion/css": "^11.9.0", + "@testing-library/jest-dom": "^5.16.4", + "@testing-library/react": "^13.3.0", + "@testing-library/user-event": "^14.2.0", + "@types/color": "^3.0.3", + "@types/jest": "^27.5.2", + "@types/lodash.debounce": "^4.0.7", + "@types/mdx": "^2.0.2", + "@types/node": "^17.0.41", + "@types/react": "^18.0.12", + "@types/react-dom": "^18.0.5", + "@types/react-router-dom": "^5.3.3", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.40.0", + "color": "^4.2.3", + "eslint": "^8.22.0", + "eslint-config-prettier": "^8.5.0", + "eslint-config-react-app": "^7.0.1", + "eslint-plugin-react": "^7.30.1", + "html-webpack-plugin": "^5.5.0", + "path": "^0.12.7", + "prettier": "^2.7.1", + "react-device-detect": "^2.2.2", + "remark-gfm": "^1.0.0", + "typescript": "^4.7.3", + "webpack": "^5.74.0", + "webpack-cli": "^4.10.0", + "webpack-dev-server": "^4.9.2" + }, + "resolutions": { + "autoprefixer": "10.4.5" + } +} diff --git a/docs/public/404.html b/docs/public/404.html new file mode 100644 index 000000000..28e0395fd --- /dev/null +++ b/docs/public/404.html @@ -0,0 +1,45 @@ + + + + + Single Page Apps for GitHub Pages + + + + diff --git a/docs/public/favicon.png b/docs/public/favicon.png new file mode 100644 index 000000000..11fa0bb60 Binary files /dev/null and b/docs/public/favicon.png differ diff --git a/docs/public/index.html b/docs/public/index.html new file mode 100644 index 000000000..c6b274cba --- /dev/null +++ b/docs/public/index.html @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + Brightlayer UI React Docs + + + +
+ + diff --git a/docs/public/logo192.png b/docs/public/logo192.png new file mode 100644 index 000000000..fc44b0a37 Binary files /dev/null and b/docs/public/logo192.png differ diff --git a/docs/public/logo512.png b/docs/public/logo512.png new file mode 100644 index 000000000..a4e47a654 Binary files /dev/null and b/docs/public/logo512.png differ diff --git a/docs/public/manifest.json b/docs/public/manifest.json new file mode 100644 index 000000000..ec5ff26b8 --- /dev/null +++ b/docs/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#007bc1", + "background_color": "#eef0f0" +} diff --git a/docs/src/App.test.tsx b/docs/src/App.test.tsx new file mode 100644 index 000000000..828e97a45 --- /dev/null +++ b/docs/src/App.test.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { ThemeProvider, Theme, createTheme, StyledEngineProvider } from '@mui/material/styles'; +import * as BLUIThemes from '@brightlayer-ui/react-themes'; +import { ComponentPreviewPage } from './pages/componentPreviewPage'; +import { DrawerContext } from './contexts/drawerContextProvider'; + +declare module '@mui/styles/defaultTheme' { + // eslint-disable-next-line + interface DefaultTheme extends Theme {} +} + +test('renders welcome text', () => { + render( + + + + + + + + ); + const bluiText = screen.getByText(/App Bar/i); + expect(bluiText).toBeInTheDocument(); +}); diff --git a/docs/src/App.tsx b/docs/src/App.tsx new file mode 100644 index 000000000..483a90e67 --- /dev/null +++ b/docs/src/App.tsx @@ -0,0 +1,23 @@ +import React, { useState } from 'react'; +import { DrawerContext } from './contexts/drawerContextProvider'; +import { NavigationDrawer } from './router/drawer'; +import { MainRouter } from './router/main'; +import { DrawerLayout } from '@brightlayer-ui/react-components'; +import { Routes } from 'react-router-dom'; + +export const App = (): JSX.Element => { + const [drawerOpen, setDrawerOpen] = useState(false); + + return ( + + } style={{ height: '100%' }}> + {MainRouter} + + + ); +}; diff --git a/docs/src/__configuration__/markdown.css b/docs/src/__configuration__/markdown.css new file mode 100644 index 000000000..10abe189b --- /dev/null +++ b/docs/src/__configuration__/markdown.css @@ -0,0 +1,28 @@ +.markdownH1:first-child { + margin-top: 32px; +} +.markdownH1:first-child .MuiSvgIcon-root { + display: none; +} +.markdownH1:not(:first-child) { + margin-top: 96px; +} + +.headline:not(:first-child) .headline-text .MuiSvgIcon-root { + opacity: 0; +} +.headline:not(:first-child) .headline-text:hover .MuiSvgIcon-root { + opacity: 0.25; +} +.headline:not(:first-child) .MuiIconButton-root:hover .MuiSvgIcon-root { + opacity: 1; +} +.headline:not(:first-child) .MuiIconButton-root:active .MuiSvgIcon-root { + opacity: 0.5; +} + +@media (hover: none) { + .headline:not(:first-child) .headline-text .MuiSvgIcon-root { + opacity: 0.25; + } +} diff --git a/docs/src/__configuration__/markdownMapping.tsx b/docs/src/__configuration__/markdownMapping.tsx new file mode 100644 index 000000000..5127cb0ef --- /dev/null +++ b/docs/src/__configuration__/markdownMapping.tsx @@ -0,0 +1,232 @@ +import React, { HTMLAttributes } from 'react'; +import { Typography, TypographyProps, SvgIconProps, Box, TableProps } from '@mui/material'; +import { Link, LinkProps } from 'react-router-dom'; +import { getHash } from '../shared'; +import * as Colors from '@brightlayer-ui/colors'; +import { useTheme, Theme } from '@mui/material/styles'; +import { cx } from '@emotion/css'; + +import './markdown.css'; +import { BoxProps } from '@mui/system'; + +export const ExternalLink = (tProps: TypographyProps<'a'>): JSX.Element => { + const theme = useTheme(); + return ( + + ); +}; + +export const InternalLink = (props: LinkProps): JSX.Element => { + const theme = useTheme(); + return ( + + ); +}; + +type HeadlineType = HTMLAttributes & { + hash: string; + TypographyProps: TypographyProps; + SvgIconProps?: SvgIconProps; +}; + +const Headline: React.FC = ({ + hash, + className, + TypographyProps: otherTypographyProps, + ...otherDivProps +}) => ( + + + + {otherTypographyProps.children} + + +); + +export const componentsMap = { + h1: (props: TypographyProps): JSX.Element => ( + + ), + h2: (props: TypographyProps): JSX.Element => ( + + ), + h3: (props: TypographyProps): JSX.Element => ( + + ), + h4: (props: TypographyProps): JSX.Element => ( + + ), + h5: (props: TypographyProps): JSX.Element => ( + + ), + h6: (props: TypographyProps): JSX.Element => ( + + ), + a: (props: React.LinkHTMLAttributes): JSX.Element => { + let tProps; + if (props.href && (props.href.match(/^http/gi) || props.href.match(/^mailto/gi))) { + tProps = props as TypographyProps<'a'>; + return ; + } + tProps = props as LinkProps; + //@ts-ignore + return ; + }, + p: (props: TypographyProps): JSX.Element => ( + + ), + ul: (props: BoxProps): JSX.Element => , + li: (props: TypographyProps<'li'>): JSX.Element => ( + + ), + blockquote: (props: TypographyProps<'blockquote'>): JSX.Element => ( + + ), + pre: (props: TypographyProps<'pre'>): JSX.Element => ( + + theme.palette.mode === 'light' ? theme.palette.background.default : Colors.darkBlack[300], + }} + {...props} + /> + ), + code: (props: TypographyProps<'code'>): JSX.Element => ( + + ), + inlineCode: (props: TypographyProps<'code'>): JSX.Element => ( + + theme.palette.mode === 'light' ? theme.palette.background.default : Colors.darkBlack[300], + fontFamily: 'Roboto Mono, Monospaced', + border: (theme: Theme) => + theme.palette.mode === 'light' ? undefined : `${theme.palette.divider} 1px solid`, + }} + {...props} + /> + ), + table: (props: TableProps): JSX.Element => ( + `1px solid ${theme.palette.divider}`, + }, + a: { + fontSize: '0.875rem', + }, + tr: { + border: 'unset', + borderLeft: 0, + borderRight: 0, + borderBottom: (theme: Theme) => `1px solid ${theme.palette.divider}`, + }, + th: { + border: 'unset', + borderLeft: 0, + borderRight: 0, + p: '1rem', + fontSize: '0.875rem', + borderBottom: (theme: Theme) => `1px solid ${theme.palette.divider}`, + }, + 'tr:last-of-type': { + borderBottom: 0, + }, + thead: { + backgroundColor: Colors.white[100], + }, + 'tbody tr:nth-of-type(odd)': { + backgroundColor: Colors.white[50], + }, + 'tbody tr:nth-of-type(even)': { + backgroundColor: Colors.white[100], + }, + td: { + fontSize: '0.875rem', + p: '1rem', + }, + }} + > + + + ), +}; diff --git a/docs/src/__configuration__/navigationMenu/navigation.tsx b/docs/src/__configuration__/navigationMenu/navigation.tsx new file mode 100644 index 000000000..be85d5385 --- /dev/null +++ b/docs/src/__configuration__/navigationMenu/navigation.tsx @@ -0,0 +1,515 @@ +import React from 'react'; +import { ComponentPreviewPage } from '../../pages'; + +// API Docs markdown +import DrawerNavGroupAPIDocs from '../../componentDocs/DrawerNavGroup/markdown/DrawerNavGroupAPIDocs.mdx'; +import DrawerAPIDocs from '../../componentDocs/Drawer/markdown/DrawerAPIDocs.mdx'; +import DrawerHeaderAPIDocs from '../../componentDocs/DrawerHeader/markdown/DrawerHeaderAPIDocs.mdx'; +import DrawerFooterAPIDocs from '../../componentDocs/DrawerFooter/markdown/DrawerFooterAPIDocs.mdx'; +import DrawerBodyAPIDocs from '../../componentDocs/DrawerBody/markdown/DrawerBodyAPIDocs.mdx'; +import DrawerRailItemAPIDocs from '../../componentDocs/DrawerRailItem/markdown/DrawerRailItemAPIDocs.mdx'; +import DrawerNavItemAPIDocs from '../../componentDocs/DrawerNavItem/markdown/DrawerNavItemAPIDocs.mdx'; +import DrawerLayoutAPIDocs from '../../componentDocs/DrawerLayout/markdown/DrawerLayoutAPIDocs.mdx'; +import DrawerSubheaderAPIDocs from '../../componentDocs/DrawerSubheader/markdown/DrawerSubheaderAPIDocs.mdx'; +import ChannelValueAPIDocs from '../../componentDocs/ChannelValue/markdown/ChannelValueAPIDocs.mdx'; +import EmptyStateAPIDocs from '../../componentDocs/EmptyState/markdown/EmptyStateAPIDocs.mdx'; +import HeroAPIDocs from '../../componentDocs/Hero/markdown/HeroAPIDocs.mdx'; +import InfoListItemAPIDocs from '../../componentDocs/InfoListItem/markdown/InfoListItemAPIDocs.mdx'; +import AppBarAPIDocs from '../../componentDocs/AppBar/markdown/AppBarAPIDocs.mdx'; +import ListItemTagAPIDocs from '../../componentDocs/ListItemTag/markdown/ListItemTagAPIDocs.mdx'; +import UserMenuAPIDocs from '../../componentDocs/UserMenu/markdown/UserMenuAPIDocs.mdx'; +import ThreeLinerAPIDocs from '../../componentDocs/ThreeLiner/markdown/ThreeLinerAPIDocs.mdx'; +import SpacerAPIDocs from '../../componentDocs/Spacer/markdown/SpacerAPIDocs.mdx'; +import ScoreCardAPIDocs from '../../componentDocs/ScoreCard/markdown/ScoreCardAPIDocs.mdx'; +import ToolbarMenuAPIDocs from '../../componentDocs/ToolbarMenu/markdown/ToolbarMenuAPIDocs.mdx'; + +// Examples markdown +import DrawerNavItemExamples from '../../componentDocs/DrawerNavItem/markdown/DrawerNavItemExamples.mdx'; +import DrawerFooterExamples from '../../componentDocs/DrawerFooter/markdown/DrawerFooterExamples.mdx'; +import DrawerBodyExamples from '../../componentDocs/DrawerBody/markdown/DrawerBodyExamples.mdx'; +import DrawerNavGroupExamples from '../../componentDocs/DrawerNavGroup/markdown/DrawerNavGroupExamples.mdx'; +import DrawerExamples from '../../componentDocs/Drawer/markdown/DrawerExamples.mdx'; +import DrawerHeaderExamples from '../../componentDocs/DrawerHeader/markdown/DrawerHeaderExamples.mdx'; +import DrawerSubheaderExamples from '../../componentDocs/DrawerSubheader/markdown/DrawerSubheaderExamples.mdx'; +import EmptyStateExamples from '../../componentDocs/EmptyState/markdown/EmptyStateExamples.mdx'; +import HeroExamples from '../../componentDocs/Hero/markdown/HeroExamples.mdx'; +import ListItemTagExamples from '../../componentDocs/ListItemTag/markdown/ListItemTagExamples.mdx'; +import InfoListItemExamples from '../../componentDocs/InfoListItem/markdown/InfoListItemExamples.mdx'; +import DrawerLayoutExamples from '../../componentDocs/DrawerLayout/markdown/DrawerLayoutExamples.mdx'; +import AppBarExamples from '../../componentDocs/AppBar/markdown/AppBarExamples.mdx'; +import UserMenuExamples from '../../componentDocs/UserMenu/markdown/UserMenuExamples.mdx'; +import ChannelValueExamples from '../../componentDocs/ChannelValue/markdown/ChannelValueExamples.mdx'; +import ToolbarMenuExamples from '../../componentDocs/ToolbarMenu/markdown/ToolbarMenuExamples.mdx'; +import ScoreCardExamples from '../../componentDocs/ScoreCard/markdown/ScoreCardExamples.mdx'; +import SpacerExamples from '../../componentDocs/Spacer/markdown/SpacerExamples.mdx'; +import ThreeLinerExamples from '../../componentDocs/ThreeLiner/markdown/ThreeLinerExamples.mdx'; +import DrawerRailItemExamples from '../../componentDocs/DrawerRailItem/markdown/DrawerRailItemExamples.mdx'; + +// Playground components +import { AppBarPlaygroundComponent } from '../../componentDocs/AppBar/playground/PlaygroundPage'; +import { ChannelValuePlaygroundComponent } from '../../componentDocs/ChannelValue/playground'; +import { DrawerPlaygroundComponent } from '../../componentDocs/Drawer/playground'; +import { DrawerHeaderPlaygroundComponent } from '../../componentDocs/DrawerHeader/playground'; +import { DrawerSubheaderPlaygroundComponent } from '../../componentDocs/DrawerSubheader/playground'; +import { DrawerFooterPlaygroundComponent } from '../../componentDocs/DrawerFooter/playground'; +import { DrawerNavGroupPlaygroundComponent } from '../../componentDocs/DrawerNavGroup/playground'; +import { DrawerNavItemPlaygroundComponent } from '../../componentDocs/DrawerNavItem/playground'; +import { DrawerRailItemPlaygroundComponent } from '../../componentDocs/DrawerRailItem/playground'; +import { EmptyStatePlaygroundComponent } from '../../componentDocs/EmptyState/playground'; +import { HeroPlaygroundComponent } from '../../componentDocs/Hero/playground'; +import { InfoListItemPlaygroundComponent } from '../../componentDocs/InfoListItem/playground'; +import { ListItemTagPlaygroundComponent } from '../../componentDocs/ListItemTag/playground'; +import { ScoreCardPlaygroundComponent } from '../../componentDocs/ScoreCard/playground'; +import { ThreeLinerPlaygroundComponent } from '../../componentDocs/ThreeLiner/playground'; +import { ToolbarMenuPlaygroundComponent } from '../../componentDocs/ToolbarMenu/playground'; +import { UserMenuPlaygroundComponent } from '../../componentDocs/UserMenu/playground'; +import { Outlet, RouteProps } from 'react-router'; + +export type RouteConfig = Omit & { + title: string; + icon?: JSX.Element; + pages?: RouteConfig[]; + children?: RouteConfig[]; +}; + +export const pageDefinitions: RouteConfig[] = [ + { + title: 'Components', + path: '/components/', + element: , + pages: [ + { + title: 'App Bar', + path: 'app-bar/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'Channel Value', + path: 'channel-value/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'Drawer', + path: '', + pages: [ + { + title: 'Drawer Layout', + path: 'drawer-layout/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + ], + }, + { + title: 'Drawer', + path: 'drawer/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'Drawer Header', + path: 'drawer-header/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'Drawer Subheader', + path: 'drawer-subheader/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + + { + title: 'Drawer Body', + path: 'drawer-body/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + ], + }, + { + title: 'Drawer Nav Group', + path: 'drawer-nav-group/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'Drawer Nav Item', + path: 'drawer-nav-item/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'Drawer Rail Item', + path: 'drawer-rail-item/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'Drawer Footer', + path: 'drawer-footer/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + ], + }, + { + title: 'Empty State', + path: 'empty-state/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'Hero', + path: 'hero/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'Info List Item', + path: 'info-list-item/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'List Item Tag', + path: 'list-item-tag/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'Score Card', + path: 'score-card/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'Spacer', + path: 'spacer/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + ], + }, + { + title: 'Three Liner', + path: 'three-liner/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'Toolbar Menu', + path: 'toolbar-menu/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + { + title: 'User Menu', + path: 'user-menu/', + element: , + children: [ + { + title: 'examples', + path: 'examples', + element: , + }, + { + title: 'API Docs', + path: 'api-docs', + element: , + }, + { + title: 'playground', + path: 'playground', + element: , + }, + ], + }, + ], + }, +]; diff --git a/docs/src/__types__/index.ts b/docs/src/__types__/index.ts new file mode 100644 index 000000000..7eba9e4c2 --- /dev/null +++ b/docs/src/__types__/index.ts @@ -0,0 +1,40 @@ +export type RangeDataTypes = { + min: number; + max: number; + step: number; +}; + +export type PayloadType = { + propName: string; + propValue: boolean | number | string | string[] | []; + componentName: string; + groupType: string; +}; + +export type PropsType = { + propName: string; + inputType: 'boolean' | 'colorPicker' | 'select' | 'string' | 'number'; + inputValue: boolean | number | string | string[] | []; + defaultValue?: boolean | number | string | string[] | []; + options?: string[] | []; + propType: string; + helperText: string; + required: boolean; + rangeData?: RangeDataTypes; + disabled?: boolean; + label?: string; +}; + +export type OtherComponentPropsType = { + childComponentName: string; + childComponentProps: PropsType[]; +}; + +export type ComponentType = { + componentName?: string; + id?: string; + props?: PropsType[]; + sharedProps?: PropsType[]; + otherComponentProps?: OtherComponentPropsType; + otherProps?: PropsType[]; +}; diff --git a/docs/src/assets/EatonLogoLight.png b/docs/src/assets/EatonLogoLight.png new file mode 100644 index 000000000..89435af0b Binary files /dev/null and b/docs/src/assets/EatonLogoLight.png differ diff --git a/docs/src/assets/cubes_tile.png b/docs/src/assets/cubes_tile.png new file mode 100644 index 000000000..2edb443cd Binary files /dev/null and b/docs/src/assets/cubes_tile.png differ diff --git a/docs/src/assets/react_logo.svg b/docs/src/assets/react_logo.svg new file mode 100644 index 000000000..223f971ef --- /dev/null +++ b/docs/src/assets/react_logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/src/componentDocs/AppBar/examples/AppBar.tsx b/docs/src/componentDocs/AppBar/examples/AppBar.tsx new file mode 100644 index 000000000..200fc1bb2 --- /dev/null +++ b/docs/src/componentDocs/AppBar/examples/AppBar.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { AppBarExample } from './AppBarExample'; + +const codeSnippet = ` + + Content + + + {getBodyFiller()} + + +`; + +export const AppBar = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/AppBar/examples/AppBarExample.tsx b/docs/src/componentDocs/AppBar/examples/AppBarExample.tsx new file mode 100644 index 000000000..c71131e5c --- /dev/null +++ b/docs/src/componentDocs/AppBar/examples/AppBarExample.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { Box, Toolbar, Typography } from '@mui/material'; +import { AppBar } from '@brightlayer-ui/react-components'; +import { getBodyFiller, ExampleShowcase } from '../../../shared'; + +export const AppBarExample = (): JSX.Element => ( + + + + + + Content + + + + + {getBodyFiller()} + + + +); diff --git a/docs/src/componentDocs/AppBar/examples/AppBarWithAdditionalContent.tsx b/docs/src/componentDocs/AppBar/examples/AppBarWithAdditionalContent.tsx new file mode 100644 index 000000000..6f7acdcbe --- /dev/null +++ b/docs/src/componentDocs/AppBar/examples/AppBarWithAdditionalContent.tsx @@ -0,0 +1,51 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { AppBarWithAdditionalContentExample } from './AppBarWithAdditionalContentExample'; + +const codeSnippet = ` + + + + + + + + + + + + + + + + + + + + + + {getBodyFiller()} + + +`; + +export const AppBarWithAdditionalContent = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/AppBar/examples/AppBarWithAdditionalContentExample.tsx b/docs/src/componentDocs/AppBar/examples/AppBarWithAdditionalContentExample.tsx new file mode 100644 index 000000000..67051f3f8 --- /dev/null +++ b/docs/src/componentDocs/AppBar/examples/AppBarWithAdditionalContentExample.tsx @@ -0,0 +1,87 @@ +import React from 'react'; +import { Box, IconButton, Toolbar } from '@mui/material'; +import { AppBar, Spacer, ThreeLiner } from '@brightlayer-ui/react-components'; +import { getBodyFiller, ExampleShowcase } from '../../../shared'; +import { Download, Menu, MoreVert, Search } from '@mui/icons-material'; +import BackgroundImage from '../images/farm.jpg'; + +export const AppBarWithAdditionalContentExample = (): JSX.Element => ( + + + + + + + + + + + + + + + + + + + + + + + + {getBodyFiller()} + + + +); diff --git a/docs/src/componentDocs/AppBar/examples/CollapsedAppBar.tsx b/docs/src/componentDocs/AppBar/examples/CollapsedAppBar.tsx new file mode 100644 index 000000000..3832c43ca --- /dev/null +++ b/docs/src/componentDocs/AppBar/examples/CollapsedAppBar.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { CollapsedAppBarExample } from './CollapsedAppBarExample'; + +const codeSnippet = ` + + Content + + + {getBodyFiller()} + + +`; + +export const CollapsedAppBar = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/AppBar/examples/CollapsedAppBarExample.tsx b/docs/src/componentDocs/AppBar/examples/CollapsedAppBarExample.tsx new file mode 100644 index 000000000..b60246938 --- /dev/null +++ b/docs/src/componentDocs/AppBar/examples/CollapsedAppBarExample.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { Box, Toolbar, Typography } from '@mui/material'; +import { AppBar } from '@brightlayer-ui/react-components'; +import { getBodyFiller, ExampleShowcase } from '../../../shared'; + +export const CollapsedAppBarExample = (): JSX.Element => ( + + + + Content + + + + {getBodyFiller()} + + +); diff --git a/docs/src/componentDocs/AppBar/examples/ExpandedAppBar.tsx b/docs/src/componentDocs/AppBar/examples/ExpandedAppBar.tsx new file mode 100644 index 000000000..b2821efda --- /dev/null +++ b/docs/src/componentDocs/AppBar/examples/ExpandedAppBar.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ExpandedAppBarExample } from './ExpandedAppBarExample'; + +const codeSnippet = ` + + Content + + + {getBodyFiller()} + + +`; + +export const ExpandedAppBar = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/AppBar/examples/ExpandedAppBarExample.tsx b/docs/src/componentDocs/AppBar/examples/ExpandedAppBarExample.tsx new file mode 100644 index 000000000..4be5e7a8c --- /dev/null +++ b/docs/src/componentDocs/AppBar/examples/ExpandedAppBarExample.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { Box, Toolbar, Typography } from '@mui/material'; +import { AppBar } from '@brightlayer-ui/react-components'; +import { getBodyFiller, ExampleShowcase } from '../../../shared'; + +export const ExpandedAppBarExample = (): JSX.Element => ( + + + + Content + + + + {getBodyFiller()} + + +); diff --git a/docs/src/componentDocs/AppBar/examples/index.tsx b/docs/src/componentDocs/AppBar/examples/index.tsx new file mode 100644 index 000000000..f06004b98 --- /dev/null +++ b/docs/src/componentDocs/AppBar/examples/index.tsx @@ -0,0 +1,4 @@ +export * from './AppBar'; +export * from './AppBarWithAdditionalContent'; +export * from './CollapsedAppBar'; +export * from './ExpandedAppBar'; diff --git a/docs/images/appBar.gif b/docs/src/componentDocs/AppBar/images/appBar.gif similarity index 100% rename from docs/images/appBar.gif rename to docs/src/componentDocs/AppBar/images/appBar.gif diff --git a/docs/images/appBar.png b/docs/src/componentDocs/AppBar/images/appBar.png similarity index 100% rename from docs/images/appBar.png rename to docs/src/componentDocs/AppBar/images/appBar.png diff --git a/docs/images/appBarAnatomy1.png b/docs/src/componentDocs/AppBar/images/appBarAnatomy1.png similarity index 100% rename from docs/images/appBarAnatomy1.png rename to docs/src/componentDocs/AppBar/images/appBarAnatomy1.png diff --git a/docs/images/appBarAnatomy2.png b/docs/src/componentDocs/AppBar/images/appBarAnatomy2.png similarity index 100% rename from docs/images/appBarAnatomy2.png rename to docs/src/componentDocs/AppBar/images/appBarAnatomy2.png diff --git a/docs/images/appBarCollapsed.png b/docs/src/componentDocs/AppBar/images/appBarCollapsed.png similarity index 100% rename from docs/images/appBarCollapsed.png rename to docs/src/componentDocs/AppBar/images/appBarCollapsed.png diff --git a/docs/src/componentDocs/AppBar/images/farm.jpg b/docs/src/componentDocs/AppBar/images/farm.jpg new file mode 100644 index 000000000..9ae975bbd Binary files /dev/null and b/docs/src/componentDocs/AppBar/images/farm.jpg differ diff --git a/docs/AppBar.md b/docs/src/componentDocs/AppBar/markdown/AppBarAPIDocs.mdx similarity index 60% rename from docs/AppBar.md rename to docs/src/componentDocs/AppBar/markdown/AppBarAPIDocs.mdx index 9ae80627b..87e22f3e5 100644 --- a/docs/AppBar.md +++ b/docs/src/componentDocs/AppBar/markdown/AppBarAPIDocs.mdx @@ -1,10 +1,69 @@ +import Box from '@mui/material/Box'; +import AppBar from '../images/appBar.gif'; +import AppBarAnatomy1 from '../images/appBarAnatomy1.png'; +import AppBarAnatomy2 from '../images/appBarAnatomy2.png'; +import { DOCS_BRANCH } from '../../../shared/constants'; + # App Bar The `` component is an extension of the default AppBar from Material UI that can be resized / collapsed as the page is scrolled. -
- Appbar -
+ + + + + + + + + + + + + + It supports three variants: @@ -12,49 +71,12 @@ It supports three variants: - Collapsed: Stays permanently fixed at the `collapsedHeight` (like a standard AppBar). - Expanded: Stays permanently fixed at the `expandedHeight`. -## Usage - -
- Appbar Anatomy - Appbar Anatomy -
- -```tsx -import { AppBar, ThreeLiner } from '@brightlayer-ui/react-components'; -... -// Default: AppBar will resize between expandedHeight and collapsed height when the window is scrolled past the scrollThreshold - - {/* Contents */} - - -// AppBar will stay fixed at the collapsedHeight size - - {/* Contents */} - - -// AppBar will stay fixed at the expandedHeight size - - {/* Contents */} - - -// AppBar with ThreeLiner component - - - - - -``` - -## API - -
+## App Bar API + + | Prop Name | Description | Type | Required | Default | -| ----------------- | ------------------------------------------------ | ----------------------------------------- | -------- | ------------- | +| :---------------- | :----------------------------------------------- | :---------------------------------------- | :------- | :------------ | | animationDuration | Length of the collapse / expand animation (ms) | `number` | no | theme default | | backgroundImage | Image to use as the app bar background | `string` | no | | | classes | Style Overrides | `AppBarClasses` | no | | @@ -64,24 +86,29 @@ import { AppBar, ThreeLiner } from '@brightlayer-ui/react-components'; | scrollThreshold | Distance to scroll before collapsing the app bar | `number` | no | 136 | | variant | Behavior of the App Bar | `'expanded'` \| `'collapsed'` \| `'snap'` | no | 'snap' | -
+
-Any other props supplied will be provided to the root element ([`AppBar`](https://material-ui.com/api/app-bar/)). +Any other props supplied will be provided to the root element ([`AppBar`](https://mui.com/api/app-bar/)). ### Style Overrides You can override the default styles used by Brightlayer UI by: - using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + | Name | Global CSS Class | Description | -| ------------------ | ------------------------------ | ---------------------------------------------------- | +| :----------------- | :----------------------------- | :--------------------------------------------------- | | root | .BluiAppBar-root | Styles applied to the root element | | background | .BluiAppBar-background | Styles applied to the background image | | expanded | .Mui-expanded | Styles applied to the root element when expanded | | collapsed | .BluiAppBar-collapsed | Styles applied to the root element when collapsed | | expandedBackground | .BluiAppBar-expandedBackground | Styles applied to the background image when expanded | + + diff --git a/docs/src/componentDocs/AppBar/markdown/AppBarExamples.mdx b/docs/src/componentDocs/AppBar/markdown/AppBarExamples.mdx new file mode 100644 index 000000000..13df56f67 --- /dev/null +++ b/docs/src/componentDocs/AppBar/markdown/AppBarExamples.mdx @@ -0,0 +1,25 @@ +import { AppBar, CollapsedAppBar, ExpandedAppBar, AppBarWithAdditionalContent } from '../examples'; + +## Collapsible App Bar + +An `` is an extension of the [MUI App Bar](https://mui.com/material-ui/api/app-bar/) that can expand and collapse as you scroll the page. + + + +## Permanently Collapsed + +Setting the variant to `'collapsed'` will lock the App Bar at its collapsed size and it will behave like a default MUI App Bar. + + + +## Permanently Expanded + +Setting the variant to `'expanded'` will lock the App Bar at its expanded size. + + + +## Adding Additional Content + +You can organize the contents of your App Bar by adding a [Toolbar](https://mui.com/material-ui/api/toolbar/) component, just as you would with a MUI App Bar. + + diff --git a/docs/src/componentDocs/AppBar/playground/AppBarConfig.tsx b/docs/src/componentDocs/AppBar/playground/AppBarConfig.tsx new file mode 100644 index 000000000..ab9c1749e --- /dev/null +++ b/docs/src/componentDocs/AppBar/playground/AppBarConfig.tsx @@ -0,0 +1,84 @@ +import { ComponentType } from '../../../__types__'; + +export const appBarConfig: ComponentType = { + componentName: 'App Bar', + props: [ + { + propName: 'animationDuration', + inputType: 'number', + inputValue: 300, + propType: 'number', + helperText: 'Length of the collapse / expand animation (ms)', + required: false, + rangeData: { + min: 100, + max: 1000, + step: 100, + }, + }, + { + propName: 'backgroundImage', + inputType: 'select', + inputValue: 'undefined', + options: ['undefined', 'Farm'], + propType: 'string', + helperText: 'Image to use as the app bar background', + required: false, + defaultValue: 'undefined', + }, + { + propName: 'collapsedHeight', + inputType: 'number', + inputValue: 64, + propType: 'number | string', + helperText: 'Height of the AppBar when collapsed', + required: false, + rangeData: { + min: 50, + max: 100, + step: 10, + }, + defaultValue: 64, + }, + { + propName: 'expandedHeight', + inputType: 'number', + inputValue: 200, + propType: 'number | string', + helperText: 'Height of the AppBar when expanded', + required: false, + rangeData: { + min: 100, + max: 240, + step: 10, + }, + defaultValue: 200, + }, + { + propName: 'scrollThreshold', + inputType: 'number', + inputValue: 136, + propType: 'number | string', + helperText: 'Distance to scroll before collapsing the app bar', + required: false, + rangeData: { + min: 50, + max: 400, + step: 10, + }, + defaultValue: 136, + }, + { + propName: 'variant', + inputType: 'select', + inputValue: 'snap', + options: ['collapsed', 'expanded', 'snap'], + propType: 'string', + helperText: 'Behavior of the App Bar', + required: false, + defaultValue: 'snap', + }, + ], +}; + +export default appBarConfig; diff --git a/docs/src/componentDocs/AppBar/playground/PlaygroundPage.tsx b/docs/src/componentDocs/AppBar/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..18fabbe89 --- /dev/null +++ b/docs/src/componentDocs/AppBar/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import AppBarPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const AppBarPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/AppBar/playground/PreviewComponent.tsx b/docs/src/componentDocs/AppBar/playground/PreviewComponent.tsx new file mode 100644 index 000000000..a5440dbe4 --- /dev/null +++ b/docs/src/componentDocs/AppBar/playground/PreviewComponent.tsx @@ -0,0 +1,82 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { + createProps, + getBodyFiller, + getImage, + hideDefaultPropsFromSnippet, + removeEmptyLines, +} from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import { AppBar } from '@brightlayer-ui/react-components/core/AppBar'; +import Toolbar from '@mui/material/Toolbar'; +import Box from '@mui/material/Box/Box'; +import Typography from '@mui/material/Typography'; +import useTheme from '@mui/material/styles/useTheme'; +import useMediaQuery from '@mui/material/useMediaQuery'; + +export const PreviewComponent = (): JSX.Element => { + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down('sm')); + const appBarJson = useAppSelector((state: RootState) => state.componentsPropsState.appBarComponent); + + const appBarProps = createProps(appBarJson.props as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any, themeDefaultValue?: string | number): string => + hideDefaultPropsFromSnippet(appBarJson, propName, currentValue, 'props', themeDefaultValue); + + const generateCodeSnippet = (): string => { + const jsx = ` + + Title + +`; + return removeEmptyLines(jsx); + }; + + return ( + + + + Title + + + + {getBodyFiller()} + +
+ } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/AppBar/playground/PropsPlayground.tsx b/docs/src/componentDocs/AppBar/playground/PropsPlayground.tsx new file mode 100644 index 000000000..6fdab63a6 --- /dev/null +++ b/docs/src/componentDocs/AppBar/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const appBarJson = useAppSelector((state: RootState) => state.componentsPropsState.appBarComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/AppBar/playground/index.tsx b/docs/src/componentDocs/AppBar/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/AppBar/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/ChannelValue/examples/ChannelValue.tsx b/docs/src/componentDocs/ChannelValue/examples/ChannelValue.tsx new file mode 100644 index 000000000..b80a483cf --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/examples/ChannelValue.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ChannelValueExample } from './ChannelValueExample'; + +const codeSnippet = ``; + +export const ChannelValue = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ChannelValue/examples/ChannelValueExample.tsx b/docs/src/componentDocs/ChannelValue/examples/ChannelValueExample.tsx new file mode 100644 index 000000000..827ced16d --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/examples/ChannelValueExample.tsx @@ -0,0 +1,9 @@ +import React from 'react'; +import { ChannelValue } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const ChannelValueExample = (): JSX.Element => ( + + + +); diff --git a/docs/src/componentDocs/ChannelValue/examples/ChannelValueUnitsSpacing.tsx b/docs/src/componentDocs/ChannelValue/examples/ChannelValueUnitsSpacing.tsx new file mode 100644 index 000000000..7cecd5255 --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/examples/ChannelValueUnitsSpacing.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ChannelValueUnitsSpacingExample } from './ChannelValueUnitsSpacingExample'; + +const codeSnippet = ` + + + + + + +`; + +export const ChannelValueUnitsSpacing = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ChannelValue/examples/ChannelValueUnitsSpacingExample.tsx b/docs/src/componentDocs/ChannelValue/examples/ChannelValueUnitsSpacingExample.tsx new file mode 100644 index 000000000..275c85aee --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/examples/ChannelValueUnitsSpacingExample.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import { ChannelValue } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const ChannelValueUnitsSpacingExample = (): JSX.Element => ( + + + + + + + + +); diff --git a/docs/src/componentDocs/ChannelValue/examples/ChannelValueWithIcon.tsx b/docs/src/componentDocs/ChannelValue/examples/ChannelValueWithIcon.tsx new file mode 100644 index 000000000..6a78fb16f --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/examples/ChannelValueWithIcon.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ChannelValueWithIconExample } from './ChannelValueWithIconExample'; + +const codeSnippet = `} />`; + +export const ChannelValueWithIcon = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ChannelValue/examples/ChannelValueWithIconExample.tsx b/docs/src/componentDocs/ChannelValue/examples/ChannelValueWithIconExample.tsx new file mode 100644 index 000000000..c688b8750 --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/examples/ChannelValueWithIconExample.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { ChannelValue } from '@brightlayer-ui/react-components'; +import { TrendingUp } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; + +export const ChannelValueWithIconExample = (): JSX.Element => ( + + } /> + +); diff --git a/docs/src/componentDocs/ChannelValue/examples/ChannelValueWithPrefix.tsx b/docs/src/componentDocs/ChannelValue/examples/ChannelValueWithPrefix.tsx new file mode 100644 index 000000000..3a464c6cc --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/examples/ChannelValueWithPrefix.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ChannelValueWithPrefixExample } from './ChannelValueWithPrefixExample'; + +const codeSnippet = `} />`; + +export const ChannelValueWithPrefix = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ChannelValue/examples/ChannelValueWithPrefixExample.tsx b/docs/src/componentDocs/ChannelValue/examples/ChannelValueWithPrefixExample.tsx new file mode 100644 index 000000000..791d8236e --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/examples/ChannelValueWithPrefixExample.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { ChannelValue } from '@brightlayer-ui/react-components'; +import { CheckCircle } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; + +export const ChannelValueWithPrefixExample = (): JSX.Element => ( + + } /> + +); diff --git a/docs/src/componentDocs/ChannelValue/examples/index.tsx b/docs/src/componentDocs/ChannelValue/examples/index.tsx new file mode 100644 index 000000000..73f3e3b07 --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/examples/index.tsx @@ -0,0 +1,2 @@ +export * from './ChannelValue'; +export * from './ChannelValueUnitsSpacing'; diff --git a/docs/src/componentDocs/ChannelValue/images/channelValue.png b/docs/src/componentDocs/ChannelValue/images/channelValue.png new file mode 100644 index 000000000..7838b63d3 Binary files /dev/null and b/docs/src/componentDocs/ChannelValue/images/channelValue.png differ diff --git a/docs/images/channelValueAnatomy.png b/docs/src/componentDocs/ChannelValue/images/channelValueAnatomy.png similarity index 100% rename from docs/images/channelValueAnatomy.png rename to docs/src/componentDocs/ChannelValue/images/channelValueAnatomy.png diff --git a/docs/ChannelValue.md b/docs/src/componentDocs/ChannelValue/markdown/ChannelValueAPIDocs.mdx similarity index 57% rename from docs/ChannelValue.md rename to docs/src/componentDocs/ChannelValue/markdown/ChannelValueAPIDocs.mdx index 4de0f56b7..6ac6bc03c 100644 --- a/docs/ChannelValue.md +++ b/docs/src/componentDocs/ChannelValue/markdown/ChannelValueAPIDocs.mdx @@ -1,28 +1,51 @@ -# Channel Value +import Box from '@mui/material/Box'; +import ChannelValueImage from '../images/channelValue.png'; +import ChannelValueAnatomyImage from '../images/channelValueAnatomy.png'; +import { DOCS_BRANCH } from '../../../shared/constants'; -The `` component is used to display a channel value (and units). This component abstracts the styles used to display the channel and units as well as an optional inline icon. These are used as part of the [``](./Hero.md) component, but can also be used inline (e.g., in a list). +# Channel Value -
- Channel Value in Hero -
- Channel Value in a list item -
+The `` component is used to display a channel value (and units). This component abstracts the styles used to display the channel and units as well as an optional inline icon. These are used as part of the [``](/components/hero/examples) component, but can also be used inline (e.g., in a list). -## Usage + + + -
- Channel Value Anatomy -
+## Channel Value Usage -```tsx -import { ChannelValue } from '@brightlayer-ui/react-components'; -... -} /> -``` + + + -## API +## Channel Value API -
+ | Prop Name | Description | Type | Required | Default | | --------- | ---------------------------------------------- | -------------------------------- | -------- | --------- | @@ -32,22 +55,25 @@ import { ChannelValue } from '@brightlayer-ui/react-components'; | icon | The inline icon to display | `JSX.Element` | no | | | prefix | Show units before the value | `boolean` | no | false | | units | The text to display for the units (light text) | `string` | no | | -| unitSpace | Show/Hide spacing between the value and units | `'auto'` \| `'hide'` \| `'show'` | yes | 'auto' | +| unitSpace | Show/Hide spacing between the value and units | `'auto'` \| `'hide'` \| `'show'` | no | 'auto' | | value | The value (bold text) to display | `string` \| `number` | yes | | -
+
-Any other props supplied will be provided to the root element (`span`). +Any other props supplied will be provided to the root element ([``](https://mui.com/material-ui/api/box/)). ### Style Overrides You can override the default styles used by Brightlayer UI by: - using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + | Name | Global CSS Class | Description | | ----- | ----------------------- | ----------------------------------- | @@ -56,3 +82,5 @@ For more details on styling options check out our [Styling Guide](https://github | text | .BluiChannelValue-text | Styles applied to the text element | | units | .BluiChannelValue-units | Styles applied to the units element | | value | .BluiChannelValue-value | Styles applied to the value element | + + diff --git a/docs/src/componentDocs/ChannelValue/markdown/ChannelValueExamples.mdx b/docs/src/componentDocs/ChannelValue/markdown/ChannelValueExamples.mdx new file mode 100644 index 000000000..606bbe896 --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/markdown/ChannelValueExamples.mdx @@ -0,0 +1,27 @@ +import { ChannelValue, ChannelValueUnitsSpacing } from '../examples'; +import { ChannelValueWithIcon } from '../examples/ChannelValueWithIcon'; +import { ChannelValueWithPrefix } from '../examples/ChannelValueWithPrefix'; + +## Channel Value + +The `` is used to show a particular measurement or parameter. + + + +## Adding an Icon + +You can add an optional icon to show trends or to highlight the category of the value. + + + +## Flipping the Units + +Some measurements may require the units to appear before the value. This can be achieved by using the `prefix` prop. + + + +## Units & Spacing + +Some measurements require a space between the value and units, and some do not. The Channel Value handles this automatically for common units, but you can override this behavior through the `unitSpace` prop. + + diff --git a/docs/src/componentDocs/ChannelValue/playground/ChannelValueConfig.tsx b/docs/src/componentDocs/ChannelValue/playground/ChannelValueConfig.tsx new file mode 100644 index 000000000..0c2e4e480 --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/playground/ChannelValueConfig.tsx @@ -0,0 +1,87 @@ +import { ComponentType } from '../../../__types__'; +import * as Colors from '@brightlayer-ui/colors'; + +export const channelValueConfig: ComponentType = { + componentName: 'Channel Value', + props: [ + { + propName: 'color', + inputType: 'colorPicker', + inputValue: Colors.black[500], + propType: 'string', + helperText: 'The color of the font', + required: false, + }, + { + propName: 'fontSize', + inputType: 'number', + inputValue: 30, + propType: 'number | string', + helperText: 'The size of the font', + required: false, + rangeData: { + min: 10, + max: 50, + step: 10, + }, + }, + { + propName: 'icon', + inputType: 'select', + inputValue: '', + options: ['undefined', '', ''], + propType: 'JSX.Element', + helperText: 'The inline icon to display', + required: false, + defaultValue: 'undefined', + }, + { + propName: 'prefix', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Show units before the value', + required: false, + defaultValue: false, + }, + { + propName: 'units', + inputType: 'string', + inputValue: 'hz', + propType: 'string', + helperText: 'The text to display for the units (light text)', + required: false, + }, + { + propName: 'unitSpace', + inputType: 'select', + inputValue: 'auto', + options: ['auto', 'hide', 'show'], + propType: 'string', + helperText: 'Show/Hide spacing between the value and units', + required: false, + defaultValue: 'auto', + }, + { + propName: 'value', + inputType: 'string', + inputValue: 123, + propType: 'number | string', + helperText: 'The value (bold text) to display', + required: true, + }, + ], + otherProps: [ + { + propName: 'htmlColor', + inputType: 'colorPicker', + inputValue: Colors.red[500], + propType: 'string', + helperText: 'The color apply to primary icon', + required: false, + label: 'Icon Color', + }, + ], +}; + +export default channelValueConfig; diff --git a/docs/src/componentDocs/ChannelValue/playground/PlaygroundPage.tsx b/docs/src/componentDocs/ChannelValue/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..f3e81e61b --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import ChannelValuePlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const ChannelValuePlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/ChannelValue/playground/PreviewComponent.tsx b/docs/src/componentDocs/ChannelValue/playground/PreviewComponent.tsx new file mode 100644 index 000000000..029f2d437 --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/playground/PreviewComponent.tsx @@ -0,0 +1,65 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { + createProps, + getIcon, + getIconWithProp, + hideDefaultPropsFromSnippet, + removeEmptyLines, +} from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import { ChannelValue } from '@brightlayer-ui/react-components/core/ChannelValue'; + +export const PreviewComponent = (): JSX.Element => { + const channelValueJson = useAppSelector((state: RootState) => state.componentsPropsState.channelValueComponent); + + const channelValueProps = createProps(channelValueJson.props as PropsType[]); + const otherProps = createProps(channelValueJson.otherProps as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any): string => + hideDefaultPropsFromSnippet(channelValueJson, propName, currentValue, 'props'); + + const toggleIconProp = (icon: string): string => { + if (icon === 'undefined') { + return toggleDefaultProp('icon', channelValueProps.icon); + } + return `icon={${getIconWithProp( + channelValueProps.icon, + otherProps.htmlColor + ? { fontSize: 'inherit', htmlColor: `${otherProps.htmlColor}` } + : { fontSize: 'inherit' } + )}}`; + }; + + const generateCodeSnippet = (): string => { + const jsx = ``; + return removeEmptyLines(jsx); + }; + + return ( + + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/ChannelValue/playground/PropsPlayground.tsx b/docs/src/componentDocs/ChannelValue/playground/PropsPlayground.tsx new file mode 100644 index 000000000..26cc35284 --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const channelValueJson = useAppSelector((state: RootState) => state.componentsPropsState.channelValueComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/ChannelValue/playground/index.tsx b/docs/src/componentDocs/ChannelValue/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/ChannelValue/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/Drawer/examples/BasicDrawer.tsx b/docs/src/componentDocs/Drawer/examples/BasicDrawer.tsx new file mode 100644 index 000000000..e0919c51a --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/BasicDrawer.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { BasicDrawerExample } from './BasicDrawerExample'; + +const codeSnippet = ` + + + Subheader Content Here + + + + + + + + + + Footer Content Here + + +`; + +export const BasicDrawer = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/Drawer/examples/BasicDrawerExample.tsx b/docs/src/componentDocs/Drawer/examples/BasicDrawerExample.tsx new file mode 100644 index 000000000..ae47c3248 --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/BasicDrawerExample.tsx @@ -0,0 +1,32 @@ +import Box from '@mui/material/Box'; +import { + Drawer, + DrawerBody, + DrawerFooter, + DrawerHeader, + DrawerNavGroup, + DrawerNavItem, + DrawerSubheader, +} from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const BasicDrawerExample = (): JSX.Element => ( + + + + + Subheader Content Here + + + + + + + + + + Footer Content Here + + + +); diff --git a/docs/src/componentDocs/Drawer/examples/ComplexDrawer.tsx b/docs/src/componentDocs/Drawer/examples/ComplexDrawer.tsx new file mode 100644 index 000000000..555da9f02 --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/ComplexDrawer.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ComplexDrawerExample } from './ComplexDrawerExample'; + +const codeSnippet = ` + } title="Brightlayer UI" subtitle="Drawer Component" /> + + + + +`; + +export const ComplexDrawer = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/Drawer/examples/ComplexDrawerExample.tsx b/docs/src/componentDocs/Drawer/examples/ComplexDrawerExample.tsx new file mode 100644 index 000000000..babc0c27b --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/ComplexDrawerExample.tsx @@ -0,0 +1,111 @@ +import React, { useState } from 'react'; +import { Drawer, DrawerBody, DrawerHeader, DrawerNavGroup, DrawerNavItemProps } from '@brightlayer-ui/react-components'; +import * as colors from '@brightlayer-ui/colors'; +import Menu from '@mui/icons-material/Menu'; +import Dashboard from '@mui/icons-material/Dashboard'; +import Toc from '@mui/icons-material/Toc'; +import Devices from '@mui/icons-material/Devices'; +import AirportShuttle from '@mui/icons-material/AirportShuttle'; +import FactCheck from '@mui/icons-material/FactCheck'; +import Accessibility from '@mui/icons-material/Accessibility'; +import Notifications from '@mui/icons-material/Notifications'; +import { ExampleShowcase } from '../../../shared'; +import { MoveToInbox } from '@mui/icons-material'; + +export const ComplexDrawerExample = (): JSX.Element => { + const [selected, setSelected] = useState('1'); + const group1: DrawerNavItemProps[] = [ + { + title: 'Overview', + subtitle: 'Learn more about us', + icon: , + statusColor: colors.green[500], + itemID: '1', + onClick: (): void => setSelected('1'), + items: [ + { + title: 'Monthly Report', + itemID: '2', + hidePadding: false, + }, + { + title: 'Annual Report', + itemID: '3', + hidePadding: false, + }, + ], + }, + { + title: 'Timeline', + icon: , + itemID: '4', + onClick: (): void => setSelected('4'), + }, + { + title: 'Devices', + subtitle: '4 new warnings', + icon: , + statusColor: colors.yellow[500], + itemID: '5', + onClick: (): void => setSelected('5'), + }, + { + title: 'Schedule', + icon: , + itemID: '6', + onClick: (): void => setSelected('6'), + }, + ]; + + const group2: DrawerNavItemProps[] = [ + { + title: 'User Guide', + icon: , + itemID: '7', + onClick: (): void => setSelected('7'), + }, + { + title: 'License Agreement', + subtitle: 'For Eaton employees only', + icon: , + itemID: '8', + onClick: (): void => setSelected('8'), + }, + { + title: 'Accessibility', + icon: , + itemID: '9', + onClick: (): void => setSelected('9'), + items: [ + { + title: 'Color Contrast Guide', + itemID: '10', + hidePadding: false, + }, + { + title: 'Screen Reader', + itemID: '11', + hidePadding: false, + }, + ], + }, + { + title: 'Notifications', + icon: , + itemID: '12', + onClick: (): void => setSelected('12'), + }, + ]; + + return ( + + + } title="Brightlayer UI" subtitle="Drawer Component" /> + + + + + + + ); +}; diff --git a/docs/src/componentDocs/Drawer/examples/PermanentDrawer.tsx b/docs/src/componentDocs/Drawer/examples/PermanentDrawer.tsx new file mode 100644 index 000000000..81ebab206 --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/PermanentDrawer.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { PermanentDrawerExample } from './PermanentDrawerExample'; + +const codeSnippet = ` + + + + + + + + +`; + +export const PermanentDrawer = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/Drawer/examples/PermanentDrawerExample.tsx b/docs/src/componentDocs/Drawer/examples/PermanentDrawerExample.tsx new file mode 100644 index 000000000..45d219495 --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/PermanentDrawerExample.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import { + Drawer, + DrawerBody, + DrawerHeader, + DrawerLayout, + DrawerNavGroup, + DrawerNavItem, +} from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; +import { Box } from '@mui/material'; + +export const PermanentDrawerExample = (): JSX.Element => ( + + + + + + + + + + + + } + sx={{ + '& .BluiDrawerLayout-drawer': { position: 'absolute', height: 250, zIndex: 'auto' }, + '& .BluiDrawerLayout-content': { zIndex: 'auto' }, + }} + > + App Content Here. + + +); diff --git a/docs/src/componentDocs/Drawer/examples/PersistentDrawer.tsx b/docs/src/componentDocs/Drawer/examples/PersistentDrawer.tsx new file mode 100644 index 000000000..b1d4f5fd2 --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/PersistentDrawer.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { PersistentDrawerExample } from './PersistentDrawerExample'; + +const codeSnippet = ` + } onClick={(): void => setOpen(!open)} /> + + + } itemID="1" /> + } itemID="2" /> + } itemID="3" /> + + +`; + +export const PersistentDrawer = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/Drawer/examples/PersistentDrawerExample.tsx b/docs/src/componentDocs/Drawer/examples/PersistentDrawerExample.tsx new file mode 100644 index 000000000..7276442ad --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/PersistentDrawerExample.tsx @@ -0,0 +1,48 @@ +import React, { useState } from 'react'; +import { + Drawer, + DrawerBody, + DrawerNavGroup, + DrawerNavItem, + DrawerHeader, + DrawerLayout, +} from '@brightlayer-ui/react-components'; +import Dashboard from '@mui/icons-material/Dashboard'; +import Notifications from '@mui/icons-material/Notifications'; +import Gavel from '@mui/icons-material/Gavel'; +import Menu from '@mui/icons-material/Menu'; +import { ExampleShowcase } from '../../../shared'; +import { Box } from '@mui/material'; + +export const PersistentDrawerExample = (): JSX.Element => { + const [open, setOpen] = useState(true); + return ( + + + } + onClick={(): void => setOpen(!open)} + sx={{ cursor: 'pointer' }} + /> + + + } itemID="1" /> + } itemID="2" /> + } itemID="3" /> + + + + } + sx={{ + '& .BluiDrawerLayout-drawer': { position: 'absolute', height: 250, zIndex: 'auto' }, + '& .BluiDrawerLayout-content': { zIndex: 'auto' }, + }} + > + App Content Here. + + + ); +}; diff --git a/docs/src/componentDocs/Drawer/examples/RailDrawer.tsx b/docs/src/componentDocs/Drawer/examples/RailDrawer.tsx new file mode 100644 index 000000000..eeab2b37a --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/RailDrawer.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { RailDrawerExample } from './RailDrawerExample'; + +const codeSnippet = ` + + + } itemID="1" divider /> + } + itemID="2" + divider + /> + } itemID="3" divider /> + + +`; + +export const RailDrawer = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/Drawer/examples/RailDrawerExample.tsx b/docs/src/componentDocs/Drawer/examples/RailDrawerExample.tsx new file mode 100644 index 000000000..a5cc2b7ff --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/RailDrawerExample.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Drawer, DrawerBody, DrawerLayout, DrawerNavGroup, DrawerRailItem } from '@brightlayer-ui/react-components'; +import Gavel from '@mui/icons-material/Gavel'; +import { Devices, LocationOn } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; +import { Box } from '@mui/material'; + +export const RailDrawerExample = (): JSX.Element => ( + + + + + } itemID="1" divider /> + } itemID="2" divider /> + } itemID="3" divider /> + + + + } + sx={{ + '& .BluiDrawerLayout-drawer': { position: 'absolute', height: 250, zIndex: 'auto' }, + '& .BluiDrawerLayout-content': { zIndex: 'auto' }, + }} + > + App Content Here. + + +); diff --git a/docs/src/componentDocs/Drawer/examples/TemporaryDrawer.tsx b/docs/src/componentDocs/Drawer/examples/TemporaryDrawer.tsx new file mode 100644 index 000000000..20161d984 --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/TemporaryDrawer.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { TemporaryDrawerExample } from './TemporaryDrawerExample'; + +const codeSnippet = ` + } + onClick={(): void => setOpen(false)} + /> + + + + + + + +`; + +export const TemporaryDrawer = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/Drawer/examples/TemporaryDrawerExample.tsx b/docs/src/componentDocs/Drawer/examples/TemporaryDrawerExample.tsx new file mode 100644 index 000000000..ac40e43b0 --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/TemporaryDrawerExample.tsx @@ -0,0 +1,94 @@ +import React, { useState, useRef } from 'react'; +import { + Drawer, + DrawerBody, + DrawerNavGroup, + DrawerNavItem, + DrawerHeader, + DrawerLayout, +} from '@brightlayer-ui/react-components'; +import { Close } from '@mui/icons-material'; +import Box from '@mui/material/Box'; +import Menu from '@mui/icons-material/Menu'; +import AppBar from '@mui/material/AppBar'; +import { IconButton, Toolbar, Typography } from '@mui/material'; +import { ExampleShowcase } from '../../../shared'; + +export const TemporaryDrawerExample = (): JSX.Element => { + const [open, setOpen] = useState(false); + const containerRef = useRef(null); + + return ( + + + } + onClick={(): void => setOpen(false)} + sx={{ cursor: 'pointer' }} + /> + + + + + + + + + } + sx={{ + position: 'relative', + overflow: 'hidden', + '& .BluiDrawerLayout-drawer': { position: 'absolute', height: 250, zIndex: 'auto', width: '100%' }, + '& .BluiDrawerLayout-content': { zIndex: 'auto' }, + }} + > + + + + setOpen(true)} + > + + + Toolbar + + + App Content Here. + + + + ); +}; diff --git a/docs/src/componentDocs/Drawer/examples/index.tsx b/docs/src/componentDocs/Drawer/examples/index.tsx new file mode 100644 index 000000000..6f6744721 --- /dev/null +++ b/docs/src/componentDocs/Drawer/examples/index.tsx @@ -0,0 +1,6 @@ +export * from './BasicDrawer'; +export * from './ComplexDrawer'; +export * from './PermanentDrawer'; +export * from './PersistentDrawer'; +export * from './RailDrawer'; +export * from './TemporaryDrawer'; diff --git a/docs/images/drawer.png b/docs/src/componentDocs/Drawer/images/drawer.png similarity index 100% rename from docs/images/drawer.png rename to docs/src/componentDocs/Drawer/images/drawer.png diff --git a/docs/images/drawerAnatomy.png b/docs/src/componentDocs/Drawer/images/drawerAnatomy.png similarity index 100% rename from docs/images/drawerAnatomy.png rename to docs/src/componentDocs/Drawer/images/drawerAnatomy.png diff --git a/docs/src/componentDocs/Drawer/markdown/DrawerAPIDocs.mdx b/docs/src/componentDocs/Drawer/markdown/DrawerAPIDocs.mdx new file mode 100644 index 000000000..e950c7502 --- /dev/null +++ b/docs/src/componentDocs/Drawer/markdown/DrawerAPIDocs.mdx @@ -0,0 +1,105 @@ +import Box from '@mui/material/Box'; + +import Drawer from '../images/drawer.png'; +import DrawerAnatomy from '../images/drawerAnatomy.png'; +import SharedProps from '../../../shared/markdown/SharedProps.mdx'; +import { DOCS_BRANCH } from '../../../shared/constants'; + +# Drawer + +The `` component is a wrapper around the [MUI Drawer](https://mui.com/material-ui/api/drawer/) that adds specific Brightlayer UI functionality and styling. It is used to organize content (typically navigation links) in a collapsible side panel. The Brightlayer UI Drawer includes helper components for ``, ``, ``, ``, ``, ``, ``, and `` to help organize the content. + + + + + +## Drawer + +The `` component is the parent container, which manages the overall state of the drawer and renders the child components. + + + + + +### Drawer API + + + +| Prop Name | Description | Type | Required | Default | +| :--------------------------------------------------------- | :--------------------------------------------------------------------------- | :----------------------------------------------------------- | :------- | :---------------- | +| activeItem | itemID for the 'active' item | `string` | no | | +| classes | Style overrides | `DrawerClasses` | no | | +| condensed | Show condensed nav items without labels (`rail` variant only) | `boolean` | no | `false` | +| noLayout | Set to true if used without a `` | `boolean` | no | `false` | +| onItemSelect | A callback function to execute whenever an item is clicked | `(id: string) => void` | no | | +| open | Controls the open/closed state of the drawer | `boolean` | yes | | +| openOnHover | Automatically open the drawer on hover when closed (persistent variant only) | `boolean` | no | `true` | +| openOnHoverDelay | Delay (ms) before triggering open on hover (persistent variant only) | `number` | no | `500` | +| sideBorder | Whether to use a side border for the drawer instead of a shadow | `boolean` | no | `false` | +| variant | The variant to use (see below) | `'permanent'` \| `'persistent'` \| `'temporary'` \| `'rail'` | no | `persistent` | +| width | Sets the width of the drawer when open | `number` \| `string` | no | `22.5rem (360px)` | +| [...sharedProps](/components/drawer/api-docs#shared-props) | Props that can be set at any level in the drawer hierarchy | - | - | | + + + +Any other props will be provided to the root element [**Material UI Drawer**](https://mui.com/material-ui/api/drawer/). + +The `Drawer` has four `variant`s: + +- **Permanent**: Always open, odd when `open` is set to false. +- **Persistent**: When `open` is set to false, the `` collapses itself as a navigation rail, and hover will make it expand temporarily; when `open` is set to true, it behaves like a permanent ``. +- **Temporary**: When `open` is set to false, the `` is hidden; when `open` is set to true, it slides in. +- **Rail**: An always collapsed version of the `` that only displays an icons and titles. + +> **Note on using multiple drawers**: If your application uses multiple ``s, each `` will automatically adjust based on the state of the nearest ``. If you are using a `` without a ``, you should set the `noLayout` property to true on the `` to prevent inadvertently affecting the styles of any `` components. + +### Style Overrides + +You can override the default styles used by Brightlayer UI by: + +- using the `sx` prop +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet + +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + + +| Name | Global CSS Class | Description | +| :--------- | :--------------------- | :------------------------------------------------------------- | +| root | .BluiDrawer-root | Styles applied to the root element | +| content | .BluiDrawer-content | Styles applied to the drawer content container | +| expanded | .Mui-expanded | Styles applied to the root element when the drawer is expanded | +| paper | .BluiDrawer-paper | MUI Drawer style override for the underlying paper element | +| sideBorder | .BluiDrawer-sideBorder | Styles applied when sideBorder is set to true | + + + + diff --git a/docs/src/componentDocs/Drawer/markdown/DrawerExamples.mdx b/docs/src/componentDocs/Drawer/markdown/DrawerExamples.mdx new file mode 100644 index 000000000..cd76ac1db --- /dev/null +++ b/docs/src/componentDocs/Drawer/markdown/DrawerExamples.mdx @@ -0,0 +1,52 @@ +import { + BasicDrawer, + ComplexDrawer, + PermanentDrawer, + PersistentDrawer, + TemporaryDrawer, + RailDrawer, +} from '../examples'; + +## Drawer + +The `` is a navigational element that holds links to different pages in your application. It organizes content using sub-elements for: + +- [Drawer Header](/components/drawer-header/examples) +- [Drawer Subheader](/components/drawer-subheader/examples) +- [Drawer Body](/components/drawer-body/examples) +- [Drawer Nav Group](/components/drawer-nav-group/examples) +- [Drawer Nav Item](/components/drawer-nav-item/examples) +- [Drawer Rail Item](/components/drawer-rail-item/examples) +- [Drawer Footer](/components/drawer-footer/examples) + + + +## Customizing the Drawer + +The Drawer is highly customizable for organizing and styling your items. Navigation items can be declared in a list format to simplify your JSX and make customization easier. + + + +## Permanent Variant + +The `'permanent'` drawer is full-sized and always visible. + + + +## Persistent Variant + +The `'persistent'` drawer can be opened and closed. When opened, it pushes the main application content. + + + +## Temporary Variant + +The `'temporary'` drawer is hidden until it is opened. When open, it appears as an overlay on top of the application content. This is typically used on smaller screens and mobile devices. + + + +## Navigation Rail + +The `'rail'` variant is always opened but takes up less space than a full-sized drawer. + + diff --git a/docs/src/componentDocs/Drawer/playground/DrawerConfig.tsx b/docs/src/componentDocs/Drawer/playground/DrawerConfig.tsx new file mode 100644 index 000000000..e732afa17 --- /dev/null +++ b/docs/src/componentDocs/Drawer/playground/DrawerConfig.tsx @@ -0,0 +1,94 @@ +import { ComponentType } from '../../../__types__'; +import sharedPropsConfig from '../../../shared/data/SharedPropsConfig'; + +export const drawerConfig: ComponentType = { + componentName: 'Drawer', + props: [ + { + propName: 'activeItem', + inputType: 'select', + inputValue: 'Overview', + options: ['Overview', 'Monthly Report', 'Annual Report', 'Timeline', 'Devices', 'Schedule'], + propType: 'string', + helperText: `itemID for the 'active' item`, + required: false, + disabled: true, + }, + { + propName: 'condensed', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Show condensed nav items without labels (rail variant only)', + required: false, + defaultValue: false, + }, + { + propName: 'open', + inputType: 'boolean', + inputValue: true, + propType: 'boolean', + helperText: 'Controls the open/closed state of the drawer', + required: true, + }, + { + propName: 'openOnHover', + inputType: 'boolean', + inputValue: true, + propType: 'boolean', + helperText: 'Automatically open the drawer on hover when closed (persistent variant only)', + required: false, + defaultValue: true, + }, + { + propName: 'openOnHoverDelay', + inputType: 'number', + inputValue: 500, + propType: 'number', + helperText: 'Delay (ms) before triggering open on hover (persistent variant only)', + required: false, + rangeData: { + min: 100, + max: 1000, + step: 100, + }, + defaultValue: 500, + }, + { + propName: 'sideBorder', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Whether to use a side border for the drawer instead of a shadow', + required: false, + defaultValue: false, + }, + { + propName: 'variant', + inputType: 'select', + inputValue: 'permanent', + options: ['persistent', 'permanent', 'temporary', 'rail'], + propType: 'string', + helperText: `The variant to use from options 'persistent', 'permanent', 'temporary', 'rail'`, + required: false, + defaultValue: 'persistent', + }, + { + propName: 'width', + inputType: 'number', + inputValue: 350, + propType: 'number | string', + helperText: 'Sets the width of the drawer when open. Default value is 22.5rem (360px)', + required: false, + rangeData: { + min: 200, + max: 700, + step: 50, + }, + defaultValue: 360, + }, + ], + sharedProps: sharedPropsConfig, +}; + +export default drawerConfig; diff --git a/docs/src/componentDocs/Drawer/playground/PlaygroundPage.tsx b/docs/src/componentDocs/Drawer/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..1a777dc03 --- /dev/null +++ b/docs/src/componentDocs/Drawer/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import DrawerPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const DrawerPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/Drawer/playground/PreviewComponent.tsx b/docs/src/componentDocs/Drawer/playground/PreviewComponent.tsx new file mode 100644 index 000000000..f6e37cee6 --- /dev/null +++ b/docs/src/componentDocs/Drawer/playground/PreviewComponent.tsx @@ -0,0 +1,333 @@ +import React, { useRef } from 'react'; +import { AppBar, Box, IconButton, Toolbar } from '@mui/material'; +import { RootState } from '../../../redux/store'; +import { useAppDispatch, useAppSelector } from '../../../redux/hooks'; +import { Drawer, DrawerBody, DrawerHeader, DrawerNavGroup, NavItem } from '@brightlayer-ui/react-components'; +import { PropsType } from '../../../__types__'; +import * as Colors from '@brightlayer-ui/colors'; +import Typography from '@mui/material/Typography'; +import { Devices, AirportShuttle, Menu, Dashboard, Toc, Close } from '@mui/icons-material'; +import { createProps, getIcon, hideDefaultPropsFromSnippet, removeEmptyLines } from '../../../shared/utilities'; +import { updateComponentProp } from '../../../redux/componentsPropsState'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; + +export const PreviewComponent = (): JSX.Element => { + const drawerJson = useAppSelector((state: RootState) => state.componentsPropsState.drawerComponent); + const dispatch = useAppDispatch(); + const containerRef = useRef(null); + + const updateActiveItem = (activeItem: string): void => { + const newState = { + propName: 'activeItem', + propValue: activeItem, + componentName: drawerJson.componentName as string, + groupType: 'props', + }; + dispatch(updateComponentProp(newState)); + }; + + const updateOpenProp = (open: boolean): void => { + const newState = { + propName: 'open', + propValue: open, + componentName: drawerJson.componentName as string, + groupType: 'props', + }; + dispatch(updateComponentProp(newState)); + }; + + const drawerProps = createProps(drawerJson.props as PropsType[]); + const drawerSharedProps = createProps(drawerJson.sharedProps as PropsType[]); + const variantIsTemporary = drawerProps.variant === 'temporary'; + const variantIsPersistent = drawerProps.variant === 'persistent'; + const variantIsPermanent = drawerProps.variant === 'permanent'; + const variantIsRail = drawerProps.variant === 'rail'; + + const navGroupItems: NavItem[] = [ + { + icon: , + itemID: 'Overview', + title: 'Overview', + onClick: (): void => updateActiveItem('Overview'), + items: [ + { + itemID: 'Monthly Report', + title: 'Monthly Report', + onClick: (): void => updateActiveItem('Monthly Report'), + }, + { + itemID: 'Annual Report', + title: 'Annual Report', + onClick: (): void => updateActiveItem('Annual Report'), + }, + ], + }, + { + icon: , + itemID: 'Timeline', + title: 'Timeline', + onClick: (): void => updateActiveItem('Timeline'), + }, + { + icon: , + title: 'Devices', + itemID: 'Devices', + subtitle: '5 new warnings', + statusColor: Colors.yellow[500], + onClick: (): void => updateActiveItem('Devices'), + }, + { + icon: , + itemID: 'Schedule', + title: 'Schedule', + onClick: (): void => updateActiveItem('Schedule'), + }, + ]; + + const toggleDefaultProp = (propName: string, currentValue: any, groupType?: string): string => + hideDefaultPropsFromSnippet(drawerJson, propName, currentValue, groupType); + + const toggleOpenProp = (open: boolean): string => `updateOpenProp(${open ? `false` : `true`})`; + + const updateHeaderAsPerVariant = (): string => { + if (variantIsTemporary) { + return ` + } + onClick={(): void => ${toggleOpenProp(drawerProps.open)}} + sx={{ cursor: 'pointer' }} + /> + `; + } else if (variantIsPersistent) { + return ` + } + onClick={(): void => ${toggleOpenProp(drawerProps.open)}} + sx={{ cursor: 'pointer' }} + /> + `; + } else if (variantIsPermanent) { + return ` + + `; + } + return ``; + }; + + const generateCodeSnippet = (): string => { + const jsx = ` +${updateHeaderAsPerVariant()} + + , + itemID: "Overview", + title: "Overview", + onClick:(): void => updateActiveItem("Overview"), + items: [ + { + itemID: "Monthly Report", + title: "Monthly Report", + onClick: (): void => updateActiveItem("Monthly Report"), + }, + { + itemID: "Annual Report", + title: "Annual Report", + onClick: (): void => updateActiveItem("Annual Report"), + }, + ], + }, + { + icon: , + itemID: "Timeline", + title: "Timeline", + onClick:(): void => updateActiveItem("Timeline"), + }, + { + icon: , + title: "Devices", + itemID: "Devices", + subtitle: "5 new warnings", + statusColor: Colors.yellow[500], + onClick:(): void => updateActiveItem("Devices"), + }, + { + icon: , + itemID: "Schedule", + title: "Schedule", + onClick:(): void => updateActiveItem("Schedule"), + } + ] + }> + + + +`; + return removeEmptyLines(jsx); + }; + return ( + + + {variantIsTemporary && ( + } + onClick={(): void => updateOpenProp(!drawerProps.open)} + sx={{ cursor: 'pointer' }} + /> + )} + + {variantIsPersistent && ( + } + onClick={(): void => updateOpenProp(!drawerProps.open)} + sx={{ cursor: 'pointer' }} + /> + )} + + {variantIsPermanent && } + + + + + + + {variantIsRail ? ( + App Content Here. + ) : ( + <> + + + updateOpenProp(!drawerProps.open)} + > + + + Toolbar + + + + App Content Here. + + + )} + + + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/Drawer/playground/PropsPlayground.tsx b/docs/src/componentDocs/Drawer/playground/PropsPlayground.tsx new file mode 100644 index 000000000..fcbc710c8 --- /dev/null +++ b/docs/src/componentDocs/Drawer/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const drawerJson = useAppSelector((state: RootState) => state.componentsPropsState.drawerComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/Drawer/playground/index.tsx b/docs/src/componentDocs/Drawer/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/Drawer/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/DrawerBody/examples/BasicDrawerBody.tsx b/docs/src/componentDocs/DrawerBody/examples/BasicDrawerBody.tsx new file mode 100644 index 000000000..9cf2fe8d5 --- /dev/null +++ b/docs/src/componentDocs/DrawerBody/examples/BasicDrawerBody.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { BasicDrawerBodyExample } from './BasicDrawerBodyExample'; + +const codeSnippet = ` + + + + + + + + +`; + +export const BasicDrawerBody = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerBody/examples/BasicDrawerBodyExample.tsx b/docs/src/componentDocs/DrawerBody/examples/BasicDrawerBodyExample.tsx new file mode 100644 index 000000000..8af3505ab --- /dev/null +++ b/docs/src/componentDocs/DrawerBody/examples/BasicDrawerBodyExample.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Drawer, DrawerBody, DrawerNavGroup, DrawerNavItem } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const BasicDrawerBodyExample = (): JSX.Element => ( + + + + + + + + + + + +); diff --git a/docs/src/componentDocs/DrawerBody/markdown/DrawerBodyAPIDocs.mdx b/docs/src/componentDocs/DrawerBody/markdown/DrawerBodyAPIDocs.mdx new file mode 100644 index 000000000..c02365f8d --- /dev/null +++ b/docs/src/componentDocs/DrawerBody/markdown/DrawerBodyAPIDocs.mdx @@ -0,0 +1,33 @@ +import Box from '@mui/material/Box'; +import SharedProps from '../../../shared/markdown/SharedProps.mdx'; + +# Drawer Body + +The `` is a wrapper for the main content of the Drawer. The typical use case is to display `` elements, but custom elements (e.g., for spacing) are accepted as well. + +### Drawer Body API + + + +| Prop Name | Description | Type | Required | Default | +| --------------------------------------------------------------- | ---------------------------------------------------------- | ------------------- | -------- | ------- | +| classes | Style overrides | `DrawerBodyClasses` | no | | +| [...sharedProps](/components/drawer-body/api-docs#shared-props) | Props that can be set at any level in the drawer hierarchy | - | - | | + + + +Any other props supplied will be provided to the root element ([``](https://mui.com/material-ui/api/box/)). + +### Classes + +You can override the classes used by Brightlayer UI by passing a `classes` prop. The `` supports the following keys: + + + +| Name | Description | +| ---- | ---------------------------------- | +| root | Styles applied to the root element | + + + + diff --git a/docs/src/componentDocs/DrawerBody/markdown/DrawerBodyExamples.mdx b/docs/src/componentDocs/DrawerBody/markdown/DrawerBodyExamples.mdx new file mode 100644 index 000000000..de1e8b6ab --- /dev/null +++ b/docs/src/componentDocs/DrawerBody/markdown/DrawerBodyExamples.mdx @@ -0,0 +1,7 @@ +import { BasicDrawerBody } from '../examples/BasicDrawerBody'; + +## Drawer Body + +The `` is a wrapper for the main content of the Drawer. The typical use case is to display [Nav Group](/components/drawer-nav-group/examples) elements, but custom elements (e.g., for spacing) are accepted as well. The Drawer Body is also useful for setting styling properties that you want to appyly to all of the navigation elements. + + diff --git a/docs/src/componentDocs/DrawerFooter/examples/DrawerFooter.tsx b/docs/src/componentDocs/DrawerFooter/examples/DrawerFooter.tsx new file mode 100644 index 000000000..c90939493 --- /dev/null +++ b/docs/src/componentDocs/DrawerFooter/examples/DrawerFooter.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { DrawerFooterExample } from './DrawerFooterExample'; + +const codeSnippet = ` + + + + + + + + + + + v2.4.0 + + + 10:33:05 03/12/22 + + + + + + + Copyright © Eaton + + + All Rights Reserved + + + + + + +`; + +export const DrawerFooter = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerFooter/examples/DrawerFooterExample.tsx b/docs/src/componentDocs/DrawerFooter/examples/DrawerFooterExample.tsx new file mode 100644 index 000000000..2153bb918 --- /dev/null +++ b/docs/src/componentDocs/DrawerFooter/examples/DrawerFooterExample.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import { Box, Typography } from '@mui/material'; +import { Drawer, DrawerBody, DrawerFooter, DrawerNavGroup, DrawerNavItem } from '@brightlayer-ui/react-components'; +import EatonFooterLogoLight from '../images/EatonLogoLight.png'; +import { ExampleShowcase } from '../../../shared'; + +export const DrawerFooterExample = (): JSX.Element => ( + + + + + + + + + + + + + + v2.4.0 + + + 10:33:05 03/12/22 + + + + + + + Copyright © Eaton + + + All Rights Reserved + + + + + + + +); diff --git a/docs/src/componentDocs/DrawerFooter/examples/index.tsx b/docs/src/componentDocs/DrawerFooter/examples/index.tsx new file mode 100644 index 000000000..ff5fbe21b --- /dev/null +++ b/docs/src/componentDocs/DrawerFooter/examples/index.tsx @@ -0,0 +1 @@ +export * from './DrawerFooter'; diff --git a/docs/src/componentDocs/DrawerFooter/images/EatonLogoLight.png b/docs/src/componentDocs/DrawerFooter/images/EatonLogoLight.png new file mode 100644 index 000000000..89435af0b Binary files /dev/null and b/docs/src/componentDocs/DrawerFooter/images/EatonLogoLight.png differ diff --git a/docs/src/componentDocs/DrawerFooter/markdown/DrawerFooterAPIDocs.mdx b/docs/src/componentDocs/DrawerFooter/markdown/DrawerFooterAPIDocs.mdx new file mode 100644 index 000000000..5191d0265 --- /dev/null +++ b/docs/src/componentDocs/DrawerFooter/markdown/DrawerFooterAPIDocs.mdx @@ -0,0 +1,46 @@ +import Box from '@mui/material/Box'; +import { DOCS_BRANCH } from '../../../shared/constants'; + +# Drawer Footer + +The `` is an optional section that renders at the bottom of the ``. It can be used to add any custom content (as children). + +### Drawer Footer API + + + +| Prop Name | Description | Type | Required | Default | +| --------------------- | ------------------------------------------- | --------- | -------- | ------- | +| backgroundColor | The color used for the background | `string` | no | | +| divider | Optional divider which appears above footer | `boolean` | no | `true` | +| hideContentOnCollapse | Hide footer contents when drawer is closed | `boolean` | no | `true` | + + + +Any other props will be provided to the root element [**Material UI Toolbar**](https://mui.com/material-ui/api/toolbar/). + +### Style Overrides + +You can override the default styles used by Brightlayer UI by: + +- using the `sx` prop +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet + +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + + +| Name | Global CSS Class | Description | +| ---------------- | ---------------------------------- | ------------------------------------------------ | +| root | .BluiDrawerHeader-root | Styles applied to the root element | +| background | .BluiDrawerHeader-background | Styles applied to the header background | +| content | .BluiDrawerHeader-content | Styles applied to the content container | +| navigation | .BluiDrawerHeader-navigation | Styles applied to the icon element | +| nonClickableIcon | .BluiDrawerHeader-nonClickableIcon | Styles applied to the non-clickable icon element | +| railIcon | .BluiDrawerHeader-railIcon | Styles applied to the icon when using rail style | +| subtitle | .BluiDrawerHeader-subtitle | Styles applied to the subtitle element | +| title | .BluiDrawerHeader-title | Styles applied to the title element | + + diff --git a/docs/src/componentDocs/DrawerFooter/markdown/DrawerFooterExamples.mdx b/docs/src/componentDocs/DrawerFooter/markdown/DrawerFooterExamples.mdx new file mode 100644 index 000000000..a250803c8 --- /dev/null +++ b/docs/src/componentDocs/DrawerFooter/markdown/DrawerFooterExamples.mdx @@ -0,0 +1,7 @@ +import { DrawerFooter } from '../examples'; + +## Drawer Footer + +A `` appears at the bottom of the drawer and is used to display custom content. + + diff --git a/docs/src/componentDocs/DrawerFooter/playground/DrawerFooterConfig.tsx b/docs/src/componentDocs/DrawerFooter/playground/DrawerFooterConfig.tsx new file mode 100644 index 000000000..99d78d6e4 --- /dev/null +++ b/docs/src/componentDocs/DrawerFooter/playground/DrawerFooterConfig.tsx @@ -0,0 +1,47 @@ +import { ComponentType } from '../../../__types__'; +import * as Colors from '@brightlayer-ui/colors'; + +export const drawerTypes: ComponentType = { + componentName: 'Drawer Footer', + props: [ + { + propName: 'backgroundColor', + inputType: 'colorPicker', + inputValue: Colors.white[50], + propType: 'string', + helperText: 'The color used for the background', + required: false, + }, + { + propName: 'divider', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Optional divider which appears above footer', + required: false, + defaultValue: true, + }, + { + propName: 'hideContentOnCollapse', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Hide footer contents when drawer is closed', + required: false, + defaultValue: true, + }, + ], + otherProps: [ + { + propName: 'open', + inputType: 'boolean', + inputValue: true, + propType: 'boolean', + helperText: 'Controls the open/closed state of the drawer', + required: false, + label: 'Drawer Open', + }, + ], +}; + +export default drawerTypes; diff --git a/docs/src/componentDocs/DrawerFooter/playground/PlaygroundPage.tsx b/docs/src/componentDocs/DrawerFooter/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..80f3c866e --- /dev/null +++ b/docs/src/componentDocs/DrawerFooter/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import DrawerFooterPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const DrawerFooterPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/DrawerFooter/playground/PreviewComponent.tsx b/docs/src/componentDocs/DrawerFooter/playground/PreviewComponent.tsx new file mode 100644 index 000000000..234a5a326 --- /dev/null +++ b/docs/src/componentDocs/DrawerFooter/playground/PreviewComponent.tsx @@ -0,0 +1,79 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { + Drawer, + DrawerBody, + DrawerHeader, + DrawerNavGroup, + DrawerNavItem, + DrawerFooter, +} from '@brightlayer-ui/react-components'; +import { createProps, hideDefaultPropsFromSnippet, removeEmptyLines } from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import Box from '@mui/material/Box'; +import Menu from '@mui/icons-material/Menu'; + +export const PreviewComponent = (): JSX.Element => { + const drawerFooterJson = useAppSelector((state: RootState) => state.componentsPropsState.drawerFooterComponent); + + const drawerFooterProps = createProps(drawerFooterJson.props as PropsType[]); + const drawerFooterOtherProps = createProps(drawerFooterJson.otherProps as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any): string => + hideDefaultPropsFromSnippet(drawerFooterJson, propName, currentValue, 'props'); + + const generateCodeSnippet = (): string => { + const jsx = ` + } + title={"Header Title"} + /> + + + + + + + + + Footer Content Here + + +`; + + return removeEmptyLines(jsx); + }; + return ( + + } title={'Header Title'} /> + + + + + + + + Footer Content Here + +
+ } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/DrawerFooter/playground/PropsPlayground.tsx b/docs/src/componentDocs/DrawerFooter/playground/PropsPlayground.tsx new file mode 100644 index 000000000..60e253d44 --- /dev/null +++ b/docs/src/componentDocs/DrawerFooter/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const drawerFooterJson = useAppSelector((state: RootState) => state.componentsPropsState.drawerFooterComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/DrawerFooter/playground/index.tsx b/docs/src/componentDocs/DrawerFooter/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/DrawerFooter/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/DrawerHeader/examples/DrawerHeader.tsx b/docs/src/componentDocs/DrawerHeader/examples/DrawerHeader.tsx new file mode 100644 index 000000000..e5ed283f3 --- /dev/null +++ b/docs/src/componentDocs/DrawerHeader/examples/DrawerHeader.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { DrawerHeaderExample } from './DrawerHeaderExample'; + +const codeSnippet = ` + + +`; + +export const DrawerHeader = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerHeader/examples/DrawerHeaderExample.tsx b/docs/src/componentDocs/DrawerHeader/examples/DrawerHeaderExample.tsx new file mode 100644 index 000000000..eeaa443eb --- /dev/null +++ b/docs/src/componentDocs/DrawerHeader/examples/DrawerHeaderExample.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import { Drawer, DrawerHeader } from '@brightlayer-ui/react-components'; +import Menu from '@mui/icons-material/Menu'; +import { ExampleShowcase } from '../../../shared'; + +export const DrawerHeaderExample = (): JSX.Element => ( + + + } /> + + +); diff --git a/docs/src/componentDocs/DrawerHeader/examples/DrawerHeaderWithTitleContent.tsx b/docs/src/componentDocs/DrawerHeader/examples/DrawerHeaderWithTitleContent.tsx new file mode 100644 index 000000000..fe48e69a9 --- /dev/null +++ b/docs/src/componentDocs/DrawerHeader/examples/DrawerHeaderWithTitleContent.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { DrawerHeaderWithTitleContentExample } from './DrawerHeaderWithTitleContentExample'; + +const codeSnippet = ` + } + titleContent={ + + + API Documentation + + + + } + /> + +`; + +export const DrawerHeaderWithTitleContent = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerHeader/examples/DrawerHeaderWithTitleContentExample.tsx b/docs/src/componentDocs/DrawerHeader/examples/DrawerHeaderWithTitleContentExample.tsx new file mode 100644 index 000000000..f60e034b1 --- /dev/null +++ b/docs/src/componentDocs/DrawerHeader/examples/DrawerHeaderWithTitleContentExample.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import { Box, Typography } from '@mui/material'; +import { Drawer, DrawerHeader, ListItemTag } from '@brightlayer-ui/react-components'; +import Menu from '@mui/icons-material/Menu'; +import { ExampleShowcase } from '../../../shared'; +import * as colors from '@brightlayer-ui/colors'; +const backgroundImage = require('../../../shared/images/topology_40.png'); + +export const DrawerHeaderWithTitleContentExample = (): JSX.Element => ( + + + } + titleContent={ + + + API Documentation + + + + } + /> + + +); diff --git a/docs/src/componentDocs/DrawerHeader/examples/index.tsx b/docs/src/componentDocs/DrawerHeader/examples/index.tsx new file mode 100644 index 000000000..452d3cd12 --- /dev/null +++ b/docs/src/componentDocs/DrawerHeader/examples/index.tsx @@ -0,0 +1,2 @@ +export * from './DrawerHeader'; +export * from './DrawerHeaderWithTitleContent'; diff --git a/docs/images/drawerHeaderAnatomy.png b/docs/src/componentDocs/DrawerHeader/images/drawerHeaderAnatomy.png similarity index 100% rename from docs/images/drawerHeaderAnatomy.png rename to docs/src/componentDocs/DrawerHeader/images/drawerHeaderAnatomy.png diff --git a/docs/src/componentDocs/DrawerHeader/markdown/DrawerHeaderAPIDocs.mdx b/docs/src/componentDocs/DrawerHeader/markdown/DrawerHeaderAPIDocs.mdx new file mode 100644 index 000000000..26f987bed --- /dev/null +++ b/docs/src/componentDocs/DrawerHeader/markdown/DrawerHeaderAPIDocs.mdx @@ -0,0 +1,72 @@ +import Box from '@mui/material/Box'; +import DrawerHeaderAnatomy from '../images/drawerHeaderAnatomy.png'; +import { DOCS_BRANCH } from '../../../shared/constants'; + +# Drawer Header + +The `` contains the content at the top of the ``. By default, it renders multiple lines of text in the Brightlayer UI style. If you supply a `titleContent`, you can render your own custom content in the title area. + + + + + +### Drawer Header API + + + +| Prop Name | Description | Type | Required | Default | +| ----------------- | ---------------------------------------------- | --------------------- | -------- | ---------------------------- | +| backgroundColor | The color used for the background | `string` | no | `theme.palette.primary.main` | +| backgroundImage | An image to display in the header | `string` | no | | +| backgroundOpacity | The opacity of the background image | `number` | no | `0.3` | +| classes | Style overrides | `DrawerHeaderClasses` | no | | +| divider | Optional divider which appears beneath header | `boolean` | no | `false` | +| fontColor | The color of the text elements | `string` | no | dynamic based on background | +| icon | A component to render for the icon | `ReactNode` | no | | +| onIconClick | A function to execute when the icon is clicked | `function` | no | `() => {}` | +| subtitle | The text to show on the second line | `string` | no | | +| title | The text to show on the first line | `string` | no | | +| titleContent | Custom content for header title area | `ReactNode` | no | | + + + +Any other props will be provided to the root element [**Material UI Toolbar**](https://mui.com/material-ui/api/toolbar/). + +### Style Overrides + +You can override the default styles used by Brightlayer UI by: + +- using the `sx` prop +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet + +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + + +| Name | Global CSS Class | Description | +| ---------------- | ---------------------------------- | ------------------------------------------------ | +| root | .BluiDrawerHeader-root | Styles applied to the root element | +| background | .BluiDrawerHeader-background | Styles applied to the header background | +| content | .BluiDrawerHeader-content | Styles applied to the content container | +| navigation | .BluiDrawerHeader-navigation | Styles applied to the icon element | +| nonClickableIcon | .BluiDrawerHeader-nonClickableIcon | Styles applied to the non-clickable icon element | +| railIcon | .BluiDrawerHeader-railIcon | Styles applied to the icon when using rail style | +| subtitle | .BluiDrawerHeader-subtitle | Styles applied to the subtitle element | +| title | .BluiDrawerHeader-title | Styles applied to the title element | + + diff --git a/docs/src/componentDocs/DrawerHeader/markdown/DrawerHeaderExamples.mdx b/docs/src/componentDocs/DrawerHeader/markdown/DrawerHeaderExamples.mdx new file mode 100644 index 000000000..e38260163 --- /dev/null +++ b/docs/src/componentDocs/DrawerHeader/markdown/DrawerHeaderExamples.mdx @@ -0,0 +1,13 @@ +import { DrawerHeader, DrawerHeaderWithTitleContent } from '../examples'; + +## Drawer Header + +The `` appears at the top of a drawer. It is commonly used to show your application title and holds controls for the drawer. + + + +## Customizing the Title Content + +If you want to display more than just a title and subtitle, you can pass custom content via the `titleContent` prop. + + diff --git a/docs/src/componentDocs/DrawerHeader/playground/DrawerHeaderConfig.tsx b/docs/src/componentDocs/DrawerHeader/playground/DrawerHeaderConfig.tsx new file mode 100644 index 000000000..ff3025d75 --- /dev/null +++ b/docs/src/componentDocs/DrawerHeader/playground/DrawerHeaderConfig.tsx @@ -0,0 +1,85 @@ +import { ComponentType } from '../../../__types__'; +import * as Colors from '@brightlayer-ui/colors'; + +export const drawerTypes: ComponentType = { + componentName: 'Drawer Header', + props: [ + { + propName: 'backgroundColor', + inputType: 'colorPicker', + inputValue: Colors.blue[500], + propType: 'string', + helperText: 'The color used for the background', + required: false, + }, + { + propName: 'backgroundImage', + inputType: 'select', + inputValue: 'undefined', + options: ['undefined', 'Pattern', 'Farm'], + propType: 'string', + helperText: 'An image to display in the header', + required: false, + defaultValue: 'undefined', + }, + { + propName: 'backgroundOpacity', + inputType: 'number', + inputValue: 0.3, + propType: 'number', + helperText: 'The opacity of the background image', + required: false, + defaultValue: 0.3, + rangeData: { + min: 0, + max: 1, + step: 0.1, + }, + }, + { + propName: 'divider', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Optional divider which appears beneath header', + required: false, + defaultValue: false, + }, + { + propName: 'fontColor', + inputType: 'colorPicker', + inputValue: Colors.white[50], + propType: 'string', + helperText: 'The color of the text elements', + required: false, + }, + { + propName: 'icon', + inputType: 'select', + inputValue: '', + options: ['undefined', '', ''], + propType: 'ReactNode', + helperText: 'A component to render for the icon', + required: false, + defaultValue: 'undefined', + }, + { + propName: 'subtitle', + inputType: 'string', + inputValue: 'Organize your menu items here', + propType: 'string', + helperText: 'The text to show on the second line', + required: false, + }, + { + propName: 'title', + inputType: 'string', + inputValue: 'Brightlayer UI Drawer', + propType: 'string', + helperText: 'The text to show on the first line', + required: false, + }, + ], +}; + +export default drawerTypes; diff --git a/docs/src/componentDocs/DrawerHeader/playground/PlaygroundPage.tsx b/docs/src/componentDocs/DrawerHeader/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..3dae8892e --- /dev/null +++ b/docs/src/componentDocs/DrawerHeader/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import DrawerHeaderPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const DrawerHeaderPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/DrawerHeader/playground/PreviewComponent.tsx b/docs/src/componentDocs/DrawerHeader/playground/PreviewComponent.tsx new file mode 100644 index 000000000..81d68263f --- /dev/null +++ b/docs/src/componentDocs/DrawerHeader/playground/PreviewComponent.tsx @@ -0,0 +1,104 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { Drawer, DrawerBody, DrawerHeader, DrawerNavGroup, DrawerNavItem } from '@brightlayer-ui/react-components'; +import { + createProps, + getIcon, + getIconWithProp, + getImage, + hideDefaultPropsFromSnippet, + removeEmptyLines, +} from '../../../shared/utilities'; +import { Accessibility, NotificationsActive, Person, Today } from '@mui/icons-material'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import useTheme from '@mui/material/styles/useTheme'; + +export const PreviewComponent = (): JSX.Element => { + const theme = useTheme(); + const drawerHeaderJson = useAppSelector((state: RootState) => state.componentsPropsState.drawerHeaderComponent); + + const drawerHeaderProps = createProps(drawerHeaderJson.props as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any, themeDefaultValue?: string | number): string => + hideDefaultPropsFromSnippet(drawerHeaderJson, propName, currentValue, 'props', themeDefaultValue); + + const toggleIconProp = (icon: string): string => { + if (icon === 'undefined') { + return toggleDefaultProp('icon', icon); + } + return `icon={${getIconWithProp(icon, {})}}`; + }; + + const generateCodeSnippet = (): string => { + const jsx = ` + + + + + } + itemID={"Identity Management"} + title={"Identity Management"} + /> + } itemID={"Calendar"} title={"Calendar"} /> + } title={"Accessibility"} itemID={"Accessibility"} /> + } + title={"Notifications"} + itemID={"Notifications"} + /> + + +`; + + return removeEmptyLines(jsx); + }; + + return ( + + + + + + } + itemID={'Identity Management'} + title={'Identity Management'} + /> + } itemID={'Calendar'} title={'Calendar'} /> + } title={'Accessibility'} itemID={'Accessibility'} /> + } + title={'Notifications'} + itemID={'Notifications'} + /> + + + + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/DrawerHeader/playground/PropsPlayground.tsx b/docs/src/componentDocs/DrawerHeader/playground/PropsPlayground.tsx new file mode 100644 index 000000000..b643d92c4 --- /dev/null +++ b/docs/src/componentDocs/DrawerHeader/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const drawerHeaderJson = useAppSelector((state: RootState) => state.componentsPropsState.drawerHeaderComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/DrawerHeader/playground/index.tsx b/docs/src/componentDocs/DrawerHeader/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/DrawerHeader/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/DrawerLayout/examples/DrawerLayout.tsx b/docs/src/componentDocs/DrawerLayout/examples/DrawerLayout.tsx new file mode 100644 index 000000000..8c246b5a3 --- /dev/null +++ b/docs/src/componentDocs/DrawerLayout/examples/DrawerLayout.tsx @@ -0,0 +1,38 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { DrawerLayoutExample } from './DrawerLayoutExample'; + +const codeSnippet = ` + } + onClick={(): void => setOpen(!open)} + /> + + + } itemID="1" /> + } itemID="2" /> + } itemID="3" /> + + + + } + > + + App Content Here. + +`; + +export const DrawerLayout = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerLayout/examples/DrawerLayoutExample.tsx b/docs/src/componentDocs/DrawerLayout/examples/DrawerLayoutExample.tsx new file mode 100644 index 000000000..78ce5fa94 --- /dev/null +++ b/docs/src/componentDocs/DrawerLayout/examples/DrawerLayoutExample.tsx @@ -0,0 +1,48 @@ +import React, { useState } from 'react'; +import { + DrawerLayout, + Drawer, + DrawerBody, + DrawerNavGroup, + DrawerNavItem, + DrawerHeader, +} from '@brightlayer-ui/react-components'; +import Box from '@mui/material/Box'; +import Dashboard from '@mui/icons-material/Dashboard'; +import Notifications from '@mui/icons-material/Notifications'; +import Gavel from '@mui/icons-material/Gavel'; +import Menu from '@mui/icons-material/Menu'; +import { ExampleShowcase } from '../../../shared'; + +export const DrawerLayoutExample = (): JSX.Element => { + const [open, setOpen] = useState(true); + return ( + + + } + onClick={(): void => setOpen(!open)} + sx={{ cursor: 'pointer' }} + /> + + + } itemID="1" /> + } itemID="2" /> + } itemID="3" /> + + + + } + sx={{ + '& .BluiDrawerLayout-drawer': { position: 'absolute', height: 250, zIndex: 'auto' }, + '& .BluiDrawerLayout-content': { zIndex: 'auto' }, + }} + > + App Content Here. + + + ); +}; diff --git a/docs/src/componentDocs/DrawerLayout/examples/index.tsx b/docs/src/componentDocs/DrawerLayout/examples/index.tsx new file mode 100644 index 000000000..55f21d9c3 --- /dev/null +++ b/docs/src/componentDocs/DrawerLayout/examples/index.tsx @@ -0,0 +1 @@ +export * from './DrawerLayout'; diff --git a/docs/images/drawerLayout.png b/docs/src/componentDocs/DrawerLayout/images/drawerLayout.png similarity index 100% rename from docs/images/drawerLayout.png rename to docs/src/componentDocs/DrawerLayout/images/drawerLayout.png diff --git a/docs/src/componentDocs/DrawerLayout/markdown/DrawerLayoutAPIDocs.mdx b/docs/src/componentDocs/DrawerLayout/markdown/DrawerLayoutAPIDocs.mdx new file mode 100644 index 000000000..067dc23b7 --- /dev/null +++ b/docs/src/componentDocs/DrawerLayout/markdown/DrawerLayoutAPIDocs.mdx @@ -0,0 +1,62 @@ +import Box from '@mui/material/Box'; +import DrawerLayoutImage from '../images/drawerLayout.png'; +import SharedProps from '../../../shared/markdown/SharedProps.mdx'; +import { DOCS_BRANCH } from '../../../shared/constants'; + +# Drawer Layout + +The `` component is used to provide the appropriate resizing behavior for your main application content when used in conjunction with a Brightlayer UI ``. It accepts a `` as a prop, and the main page content is passed in through child elements. + + + + + +### Drawer Layout API + + + +| Prop Name | Description | Type | Required | Default | +| --------- | ------------------------------- | ------------------------------------ | -------- | ------- | +| classes | Style overrides | `DrawerLayoutClasses` | no | | +| drawer | Drawer component to be embedded | `ReactElement` | yes | | + + + +Any other props supplied will be provided to the root element ([``](https://mui.com/material-ui/api/box/)). + +> **Note on Scrolling**: When using client-side routing in your application, you may notice that the window scroll position does not reset when navigating to new routes. To address this issue, you will need to manually update the scroll position when new pages are loaded. If you are using React Router they have [several examples](https://reacttraining.com/react-router/web/guides/scroll-restoration) on how to implement this in your application. + +### Style Overrides + +You can override the default styles used by Brightlayer UI by: + +- using the `sx` prop +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet + +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + + +| Name | Global CSS Class | Description | +| :------- | :------------------------ | :------------------------------------------------------------- | +| root | .BluiDrawerLayout-root | Styles applied to the root element | +| content | .BluiDrawerLayout-content | Styles applied to the body content container | +| drawer | .BluiDrawerLayout-drawer | Styles applied to the drawer container | +| expanded | .Mui-expanded | Styles applied to the root element when the drawer is expanded | + + diff --git a/docs/src/componentDocs/DrawerLayout/markdown/DrawerLayoutExamples.mdx b/docs/src/componentDocs/DrawerLayout/markdown/DrawerLayoutExamples.mdx new file mode 100644 index 000000000..7070a2fb0 --- /dev/null +++ b/docs/src/componentDocs/DrawerLayout/markdown/DrawerLayoutExamples.mdx @@ -0,0 +1,7 @@ +import { DrawerLayout } from '../examples'; + +## Drawer Layout + +The `` component is used to provide the appropriate resizing behavior for your main application content when used in conjunction with a Brightlayer UI [Drawer](/components/drawer/examples). It accepts a Drawer as a prop, and the main page content is passed in through child elements. + + diff --git a/docs/src/componentDocs/DrawerNavGroup/examples/CustomNavGroupTitleContent.tsx b/docs/src/componentDocs/DrawerNavGroup/examples/CustomNavGroupTitleContent.tsx new file mode 100644 index 000000000..3ed68d6db --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/examples/CustomNavGroupTitleContent.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { CustomNavGroupTitleContentExample } from './CustomNavGroupTitleContentExample'; + +const codeSnippet = ` + + + Nav Group Title Content + +
+ } + > + + + + +
+`; + +export const CustomNavGroupTitleContent = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerNavGroup/examples/CustomNavGroupTitleContentExample.tsx b/docs/src/componentDocs/DrawerNavGroup/examples/CustomNavGroupTitleContentExample.tsx new file mode 100644 index 000000000..827afa9aa --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/examples/CustomNavGroupTitleContentExample.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { Box, Typography } from '@mui/material'; +import { Drawer, DrawerBody, DrawerNavGroup, DrawerNavItem, ListItemTag } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const CustomNavGroupTitleContentExample = (): JSX.Element => ( + + + + + Nav Group Title Content + + + } + > + + + + + + +); diff --git a/docs/src/componentDocs/DrawerNavGroup/examples/DrawerNavGroup.tsx b/docs/src/componentDocs/DrawerNavGroup/examples/DrawerNavGroup.tsx new file mode 100644 index 000000000..8d195536b --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/examples/DrawerNavGroup.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { DrawerNavGroupExample } from './DrawerNavGroupExample'; + +const codeSnippet = ` + + + + + + + + + + + +`; + +export const DrawerNavGroup = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerNavGroup/examples/DrawerNavGroupComposition.tsx b/docs/src/componentDocs/DrawerNavGroup/examples/DrawerNavGroupComposition.tsx new file mode 100644 index 000000000..486d1b615 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/examples/DrawerNavGroupComposition.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { DrawerNavGroupCompositionExample } from './DrawerNavGroupCompositionExample'; + +const codeSnippet = ` + + + + + + + + +`; + +export const DrawerNavGroupComposition = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerNavGroup/examples/DrawerNavGroupCompositionExample.tsx b/docs/src/componentDocs/DrawerNavGroup/examples/DrawerNavGroupCompositionExample.tsx new file mode 100644 index 000000000..2797e1e6d --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/examples/DrawerNavGroupCompositionExample.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { Divider } from '@mui/material'; +import { Drawer, DrawerBody, DrawerNavGroup, DrawerNavItem } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const DrawerNavGroupCompositionExample = (): JSX.Element => ( + + + + + + + + + + + + +); diff --git a/docs/src/componentDocs/DrawerNavGroup/examples/DrawerNavGroupExample.tsx b/docs/src/componentDocs/DrawerNavGroup/examples/DrawerNavGroupExample.tsx new file mode 100644 index 000000000..88fe6081c --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/examples/DrawerNavGroupExample.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Drawer, DrawerBody, DrawerNavGroup, DrawerNavItem } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const DrawerNavGroupExample = (): JSX.Element => ( + + + + + + + + + + + + + + +); diff --git a/docs/src/componentDocs/DrawerNavGroup/examples/SpacingNavGroups.tsx b/docs/src/componentDocs/DrawerNavGroup/examples/SpacingNavGroups.tsx new file mode 100644 index 000000000..282752d9e --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/examples/SpacingNavGroups.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { SpacingNavGroupsExample } from './SpacingNavGroupsExample'; + +const codeSnippet = ` + + + + + + + + + + + + + +`; +export const SpacingNavGroups = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerNavGroup/examples/SpacingNavGroupsExample.tsx b/docs/src/componentDocs/DrawerNavGroup/examples/SpacingNavGroupsExample.tsx new file mode 100644 index 000000000..49c87d615 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/examples/SpacingNavGroupsExample.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { Divider } from '@mui/material'; +import { Drawer, DrawerBody, DrawerNavGroup, DrawerNavItem, Spacer } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const SpacingNavGroupsExample = (): JSX.Element => ( + + + + + + + + + + + + + + + + +); diff --git a/docs/src/componentDocs/DrawerNavGroup/examples/index.tsx b/docs/src/componentDocs/DrawerNavGroup/examples/index.tsx new file mode 100644 index 000000000..6ee5b95d0 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/examples/index.tsx @@ -0,0 +1,4 @@ +export * from './DrawerNavGroup'; +export * from './CustomNavGroupTitleContent'; +export * from './DrawerNavGroupComposition'; +export * from './SpacingNavGroups'; diff --git a/docs/images/drawerNavGroupAnatomy.png b/docs/src/componentDocs/DrawerNavGroup/images/drawerNavGroupAnatomy.png similarity index 100% rename from docs/images/drawerNavGroupAnatomy.png rename to docs/src/componentDocs/DrawerNavGroup/images/drawerNavGroupAnatomy.png diff --git a/docs/src/componentDocs/DrawerNavGroup/markdown/DrawerNavGroupAPIDocs.mdx b/docs/src/componentDocs/DrawerNavGroup/markdown/DrawerNavGroupAPIDocs.mdx new file mode 100644 index 000000000..0321a26bf --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/markdown/DrawerNavGroupAPIDocs.mdx @@ -0,0 +1,69 @@ +import Box from '@mui/material/Box'; +import DrawerNavGroupAnatomy from '../images/drawerNavGroupAnatomy.png'; +import SharedProps from '../../../shared/markdown/SharedProps.mdx'; +import { DOCS_BRANCH } from '../../../shared/constants'; + +# Drawer Nav Group + +A `` is used inside of the `` to organize links/content. Each group consists of an (optional) group title and a series of navigation items. Most visual props are inherited from the `` but can be overridden at the NavGroup level if desired. + +The `items` property supports nested items to generate collapsible sections in the menu. This can be used to create an arbitrary tree depth, but we do not recommend going more than two levels deep in a navigation Drawer. You can also build the navigation links declaratively by passing either `` or `` children to the ``. + + + + + +### Drawer Nav Group API + + + +| Prop Name | Description | Type | Required | Default | +| -------------------------------------------------------------------- | ---------------------------------------------------------- | ----------------------- | -------- | --------------------------- | +| classes | Style overrides | `DrawerNavGroupClasses` | no | | +| items | List of items to render | `NavItem[]` | yes | | +| title | Text to display in the group header | `string` | no | | +| titleColor | Color used for the title text | `string` | no | varies for light/dark theme | +| titleContent | Custom element, substitute for title | `ReactNode` | no | | +| titleDivider | Divider for the title | `boolean` | no | true | +| [...sharedProps](/components/drawer-nav-group/api-docs#shared-props) | Props that can be set at any level in the drawer hierarchy | - | - | | + + + +Any other props will be provided to the root element [**Material UI List**](https://mui.com/api/list/). + +### Style Overrides + +You can override the default styles used by Brightlayer UI by: + +- using the `sx` prop +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet + the Global CSS Class in your main stylesheet + +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + + +| Name | Global CSS Class | Description | +| --------- | ----------------------------- | -------------------------------------------- | +| root | .BluiDrawerNavGroup-root | Styles applied to the root element | +| title | .BluiDrawerNavGroup-title | Styles applied to the title text element | +| subheader | .BluiDrawerNavGroup-subheader | Styles applied to the List subheader element | + + + + diff --git a/docs/src/componentDocs/DrawerNavGroup/markdown/DrawerNavGroupExamples.mdx b/docs/src/componentDocs/DrawerNavGroup/markdown/DrawerNavGroupExamples.mdx new file mode 100644 index 000000000..98415d560 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/markdown/DrawerNavGroupExamples.mdx @@ -0,0 +1,25 @@ +import { DrawerNavGroup, SpacingNavGroups, CustomNavGroupTitleContent, DrawerNavGroupComposition } from '../examples'; + +## Drawer Nav Group + +A `` organizes related navigation items together. You can have as many groups as needed. + + + +## Spacing the Groups + +If you want to add an extra space between your groups, you can use a [Spacer](/components/spacer/examples) component. + + + +## Customizing the Title + +By default, each nav group has a simple string as the title. You can customize this and pass in your own content through the `titleContent` prop. + + + +## Composition vs Configuration + +You can define the [Drawer Nav Items](/components/drawer-nav-item/examples) that you want to appear in each group via composition (simply add them as children) or configuration (define them in the `items` prop). Composition will offer slightly better re-rendering performance when props change, but using the `items` prop is easier to read/maintain, especially if you have a large number of items. + + diff --git a/docs/src/componentDocs/DrawerNavGroup/playground/DrawerNavGroupConfig.tsx b/docs/src/componentDocs/DrawerNavGroup/playground/DrawerNavGroupConfig.tsx new file mode 100644 index 000000000..eca31c04c --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/playground/DrawerNavGroupConfig.tsx @@ -0,0 +1,37 @@ +import { ComponentType } from '../../../__types__'; +import * as Colors from '@brightlayer-ui/colors'; +import sharedPropsConfig from '../../../shared/data/SharedPropsConfig'; + +export const drawerNavGroupConfig: ComponentType = { + componentName: 'Drawer Nav Group', + props: [ + { + propName: 'title', + inputType: 'string', + inputValue: 'Brightlayer UI Drawer', + propType: 'string', + helperText: 'Text to display in the group header', + required: false, + }, + { + propName: 'titleColor', + inputType: 'colorPicker', + inputValue: Colors.black[500], + propType: 'string', + helperText: 'Color used for the title text', + required: false, + }, + { + propName: 'titleDivider', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Divider for the title', + required: false, + defaultValue: true, + }, + ], + sharedProps: sharedPropsConfig, +}; + +export default drawerNavGroupConfig; diff --git a/docs/src/componentDocs/DrawerNavGroup/playground/PlaygroundPage.tsx b/docs/src/componentDocs/DrawerNavGroup/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..14517ad03 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import DrawerNavGroupPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const DrawerNavGroupPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/DrawerNavGroup/playground/PreviewComponent.tsx b/docs/src/componentDocs/DrawerNavGroup/playground/PreviewComponent.tsx new file mode 100644 index 000000000..8b9517dea --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/playground/PreviewComponent.tsx @@ -0,0 +1,188 @@ +import React, { useState } from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { + Drawer, + DrawerBody, + DrawerHeader, + DrawerNavGroup, + DrawerNavItem, +} from '@brightlayer-ui/react-components/core/Drawer'; +import { createProps, getIcon, hideDefaultPropsFromSnippet, removeEmptyLines } from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import { Devices, AirportShuttle, Menu, Dashboard, Toc } from '@mui/icons-material'; + +import * as Colors from '@brightlayer-ui/colors'; + +export const PreviewComponent = (): JSX.Element => { + const drawerNavGroupJson = useAppSelector((state: RootState) => state.componentsPropsState.drawerNavGroupComponent); + const [drawerActiveItem, setDrawerActiveItem] = useState('Overview'); + + const drawerNavGroupProps = createProps(drawerNavGroupJson.props as PropsType[]); + const drawerNavGroupSharedProps = createProps(drawerNavGroupJson.sharedProps as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any, groupType?: string): string => + hideDefaultPropsFromSnippet(drawerNavGroupJson, propName, currentValue, groupType); + + const generateCodeSnippet = (): string => { + const jsx = ` + } + title={"Header Title"} + /> + + + + } + itemID={"Overview"} + title={"Overview"} + onClick={(): void => setDrawerActiveItem("Overview")} + > + setDrawerActiveItem("Monthly Report")} + /> + setDrawerActiveItem("Annual Report")} + /> + + } + itemID={"Timeline"} + title={"Timeline"} + onClick={(): void => setDrawerActiveItem("Timeline")} + /> + } + title={"Devices"} + itemID={"Devices"} + subtitle={"5 new warnings"} + statusColor={Colors.yellow[500]} + onClick={(): void => setDrawerActiveItem("Devices")} + /> + } + itemID={"Schedule"} + title={"Schedule"} + onClick={(): void => setDrawerActiveItem("Schedule")} + /> + + +`; + return removeEmptyLines(jsx); + }; + + return ( + + } title={'Header Title'} /> + + + + } + itemID={'Overview'} + title={'Overview'} + onClick={(): void => setDrawerActiveItem('Overview')} + > + setDrawerActiveItem('Monthly Report')} + /> + setDrawerActiveItem('Annual Report')} + /> + + } + itemID={'Timeline'} + title={'Timeline'} + onClick={(): void => setDrawerActiveItem('Timeline')} + /> + } + title={'Devices'} + itemID={'Devices'} + subtitle={'5 new warnings'} + statusColor={Colors.yellow[500]} + onClick={(): void => setDrawerActiveItem('Devices')} + /> + } + itemID={'Schedule'} + title={'Schedule'} + onClick={(): void => setDrawerActiveItem('Schedule')} + /> + + +
+ } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/DrawerNavGroup/playground/PropsPlayground.tsx b/docs/src/componentDocs/DrawerNavGroup/playground/PropsPlayground.tsx new file mode 100644 index 000000000..06000b436 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const drawerNavGroupJson = useAppSelector((state: RootState) => state.componentsPropsState.drawerNavGroupComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/DrawerNavGroup/playground/index.tsx b/docs/src/componentDocs/DrawerNavGroup/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/DrawerNavGroup/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItem.tsx b/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItem.tsx new file mode 100644 index 000000000..056ec555e --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItem.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { DrawerNavItemExample } from './DrawerNavItemExample'; + +const codeSnippet = ` + + } itemID="1" /> + } itemID="2" /> + } itemID="3" /> + + +`; + +export const DrawerNavItem = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemExample.tsx b/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemExample.tsx new file mode 100644 index 000000000..7e4bcbaab --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemExample.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Drawer, DrawerBody, DrawerNavGroup, DrawerNavItem } from '@brightlayer-ui/react-components'; +import Dashboard from '@mui/icons-material/Dashboard'; +import Notifications from '@mui/icons-material/Notifications'; +import Gavel from '@mui/icons-material/Gavel'; +import { ExampleShowcase } from '../../../shared'; + +export const DrawerNavItemExample = (): JSX.Element => ( + + + + + } itemID="1" /> + } itemID="2" /> + } itemID="3" /> + + + + +); diff --git a/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemNestedItems.tsx b/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemNestedItems.tsx new file mode 100644 index 000000000..281411807 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemNestedItems.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { DrawerNavItemNestedItemsExample } from './DrawerNavItemNestedItemsExample'; + +const codeSnippet = ` + + + + + + + + + +`; + +export const DrawerNavItemNestedItems = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemNestedItemsExample.tsx b/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemNestedItemsExample.tsx new file mode 100644 index 000000000..7fc928c97 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemNestedItemsExample.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Drawer, DrawerBody, DrawerNavGroup, DrawerNavItem } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const DrawerNavItemNestedItemsExample = (): JSX.Element => ( + + + + + + + + + + + + + + +); diff --git a/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemSelectedItems.tsx b/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemSelectedItems.tsx new file mode 100644 index 000000000..4aeb71255 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemSelectedItems.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { DrawerNavItemSelectedItemsExample } from './DrawerNavItemSelectedItemsExample'; + +const codeSnippet = ` + + + { + setSelected('Item 1'); + }} + /> + { + setSelected('Item 2'); + }} + /> + { + setSelected('Item 3'); + }} + /> + + + +`; +export const DrawerNavItemSelectedItems = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemSelectedItemsExample.tsx b/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemSelectedItemsExample.tsx new file mode 100644 index 000000000..1ca226217 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/examples/DrawerNavItemSelectedItemsExample.tsx @@ -0,0 +1,44 @@ +import React, { useState } from 'react'; +import { Drawer, DrawerBody, DrawerNavGroup, DrawerNavItem } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const DrawerNavItemSelectedItemsExample = (): JSX.Element => { + const [selected, setSelected] = useState('Item 2'); + + return ( + + + + + { + setSelected('Item 1'); + }} + /> + { + setSelected('Item 2'); + }} + /> + { + setSelected('Item 3'); + }} + /> + + + + + ); +}; diff --git a/docs/src/componentDocs/DrawerNavItem/examples/index.tsx b/docs/src/componentDocs/DrawerNavItem/examples/index.tsx new file mode 100644 index 000000000..aa7b1baf1 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/examples/index.tsx @@ -0,0 +1,3 @@ +export * from './DrawerNavItem'; +export * from './DrawerNavItemNestedItems'; +export * from './DrawerNavItemSelectedItems'; diff --git a/docs/images/navItemAnatomy.png b/docs/src/componentDocs/DrawerNavItem/images/navItemAnatomy.png similarity index 100% rename from docs/images/navItemAnatomy.png rename to docs/src/componentDocs/DrawerNavItem/images/navItemAnatomy.png diff --git a/docs/src/componentDocs/DrawerNavItem/markdown/DrawerNavItemAPIDocs.mdx b/docs/src/componentDocs/DrawerNavItem/markdown/DrawerNavItemAPIDocs.mdx new file mode 100644 index 000000000..b7443c409 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/markdown/DrawerNavItemAPIDocs.mdx @@ -0,0 +1,61 @@ +import Box from '@mui/material/Box'; +import NavItemAnatomy from '../images/navItemAnatomy.png'; + +import SharedProps from '../../../shared/markdown/SharedProps.mdx'; + +# Drawer Nav Item + +The `` is an individual line item in the ``. These can be generated for you by using the `items` prop of the `` and passing in an array of objects with the following API. You can also create these line items by directly passing them as children to the ``. Each `` also supports the ability to nest items (using its own `items` prop or children). When using the rail variant of the ``, you should use `` instead (see below). + + + + + +### Drawer Nav Item API + + + +| Prop Name | Description | Type | Required | Default | +| ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------- | -------- | ------- | +| classes | Style overrides | `DrawerNavItemClasses` | no | | +| depth\* | The nested depth of the item | `number` | no | 0 | +| hidden | Sets whether to hide the nav item | `boolean` | no | | +| hidePadding | Remove left padding if no icon is used | `boolean` | no | false | +| icon | A component to render for the left icon | `JSX.Element` | no | | +| isInActiveTree\* | Sets whether the item is a parent of the currently active item (managed automatically) | `boolean` | no | | +| itemID | A unique identifier of the NavItem. Item will have 'active' style when this matches activeItem | `string` | yes | | +| items | The items nested under this item | `NestedNavItem[]` | no | | +| notifyActiveParent\* | Callback function to the parent element to update active hierarchy styles | `(ids: string[]) => void` | no | | +| onClick | A function to execute when clicked | `function` | no | | +| rightComponent | An icon/component to display to the right | `ReactNode` | no | | +| statusColor | Status stripe and icon color | `string` | no | | +| subtitle | The text to show on the second line | `string` | no | | +| title | The text to show on the first line | `string` | yes | | +| disableRailTooltip | Sets whether to disable the tooltip on hover for the condensed `rail` variant | `boolean` | no | | +| InfoListItemProps | Used to override [InfoListItem](/components/info-list-item/api-docs) default props | `InfoListItemProps` | no | | +| [...sharedProps](/components/drawer-nav-item/api-docs#shared-props) | Props that can be set at any level in the drawer hierarchy | - | - | | + + + +> \*These props are managed automatically when using the `` inside of a ``. + + + +> \* These classes can not be overridden via the `sx` prop. + +### Tips + +You can render the `` as a link by setting the `component` prop in the `InfoListItemProps` to a [`Link`](https://reactrouter.com/web/api/Link) component from `react-router-dom` (recommended), or the native HTML anchor tag `'a'`. This allows you to perform helpful actions such as opening a link in a new browser tab via right-click. diff --git a/docs/src/componentDocs/DrawerNavItem/markdown/DrawerNavItemExamples.mdx b/docs/src/componentDocs/DrawerNavItem/markdown/DrawerNavItemExamples.mdx new file mode 100644 index 000000000..724aa1142 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/markdown/DrawerNavItemExamples.mdx @@ -0,0 +1,19 @@ +import { DrawerNavItem, DrawerNavItemNestedItems, DrawerNavItemSelectedItems } from '../examples'; + +## Drawer Nav Item + +A `` represents a single list item in the navigation drawer. Nav items can contain any combination of title, subtitle and icon. + + + +## Selecting a Nav Item + +Navigation items can be highlighted with an active state by setting the `activeItem` prop. The shape of the highlight can be either "square" (default) or "round". + + + +## Nesting the Nav Items + +Navigation items can be nested to allow for a multi-level navigation hierarchy. Similar to the [Drawer Nav Group](/components/drawer-nav-group/examples), you can do this by adding additional Nav Items as children or by specifying the nested structure via the `items` prop. Deep nesting can cause performance issues — we recommend limiting yourself to 2-3 levels when possible. + + diff --git a/docs/src/componentDocs/DrawerNavItem/markdown/index.tsx b/docs/src/componentDocs/DrawerNavItem/markdown/index.tsx new file mode 100644 index 000000000..da574214c --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/markdown/index.tsx @@ -0,0 +1,3 @@ +import DrawerNavItemExamples from './DrawerNavItemExamples.mdx'; + +export { DrawerNavItemExamples }; diff --git a/docs/src/componentDocs/DrawerNavItem/playground/DrawerNavItemConfig.tsx b/docs/src/componentDocs/DrawerNavItem/playground/DrawerNavItemConfig.tsx new file mode 100644 index 000000000..1b0ddb547 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/playground/DrawerNavItemConfig.tsx @@ -0,0 +1,54 @@ +import { ComponentType } from '../../../__types__'; +import sharedPropsConfig from '../../../shared/data/SharedPropsConfig'; + +export const drawerNavItemConfig: ComponentType = { + componentName: 'Drawer Nav Item', + props: [ + { + propName: 'hidden', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Sets whether to hide the nav item', + required: false, + defaultValue: false, + }, + { + propName: 'icon', + inputType: 'select', + inputValue: '', + options: ['undefined', '', ''], + propType: 'JSX.Element', + helperText: 'A component to render for the left icon', + required: false, + defaultValue: 'undefined', + }, + { + propName: 'statusColor', + inputType: 'colorPicker', + inputValue: '#ffac00', + propType: 'string', + helperText: 'Status stripe and icon color', + required: false, + }, + { + propName: 'subtitle', + inputType: 'string', + inputValue: 'Subtitle', + propType: 'string', + helperText: 'The text to show on the second line', + required: false, + }, + { + propName: 'title', + inputType: 'string', + inputValue: 'Title', + propType: 'string', + helperText: 'The text to show on the first line', + required: true, + }, + ], + sharedProps: sharedPropsConfig, +}; + +export default drawerNavItemConfig; diff --git a/docs/src/componentDocs/DrawerNavItem/playground/PlaygroundPage.tsx b/docs/src/componentDocs/DrawerNavItem/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..06b98336c --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import DrawerNavItemPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const DrawerNavItemPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/DrawerNavItem/playground/PreviewComponent.tsx b/docs/src/componentDocs/DrawerNavItem/playground/PreviewComponent.tsx new file mode 100644 index 000000000..eefea1a77 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/playground/PreviewComponent.tsx @@ -0,0 +1,135 @@ +import React, { useState } from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { Drawer, DrawerBody, DrawerNavGroup, DrawerNavItem } from '@brightlayer-ui/react-components/core/Drawer'; +import { createProps, getIcon, hideDefaultPropsFromSnippet, removeEmptyLines } from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; + +export const PreviewComponent = (): JSX.Element => { + const drawerNavItemJson = useAppSelector((state: RootState) => state.componentsPropsState.drawerNavItemComponent); + const [activeItem, setActiveItem] = useState('Title'); + + const drawerNavItemProps = createProps(drawerNavItemJson.props as PropsType[]); + const drawerNavItemSharedProps = createProps(drawerNavItemJson.sharedProps as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any, groupType?: string): string => + hideDefaultPropsFromSnippet(drawerNavItemJson, propName, currentValue, groupType); + + const generateCodeSnippet = (): string => { + const jsx = ` + + + setActiveItem("Title")} + > + setActiveItem("Monthly Report")} + /> + setActiveItem("Annual Report")} + /> + + + +`; + return removeEmptyLines(jsx); + }; + + return ( + + + + + + + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/DrawerNavItem/playground/PropsPlayground.tsx b/docs/src/componentDocs/DrawerNavItem/playground/PropsPlayground.tsx new file mode 100644 index 000000000..77e779c08 --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const drawerNavItemJson = useAppSelector((state: RootState) => state.componentsPropsState.drawerNavItemComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/DrawerNavItem/playground/index.tsx b/docs/src/componentDocs/DrawerNavItem/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/DrawerNavItem/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/DrawerRailItem/examples/BasicDrawerRailItem.tsx b/docs/src/componentDocs/DrawerRailItem/examples/BasicDrawerRailItem.tsx new file mode 100644 index 000000000..540df8d83 --- /dev/null +++ b/docs/src/componentDocs/DrawerRailItem/examples/BasicDrawerRailItem.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { BasicDrawerRailItemExample } from './BasicDrawerRailItemExample'; + +const codeSnippet = ` + + + } itemID="1" divider /> + } + itemID="2" + divider + /> + } itemID="3" divider /> + + +`; + +export const BasicDrawerRailItem = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerRailItem/examples/BasicDrawerRailItemExample.tsx b/docs/src/componentDocs/DrawerRailItem/examples/BasicDrawerRailItemExample.tsx new file mode 100644 index 000000000..5465a62a3 --- /dev/null +++ b/docs/src/componentDocs/DrawerRailItem/examples/BasicDrawerRailItemExample.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { Drawer, DrawerBody, DrawerNavGroup, DrawerRailItem } from '@brightlayer-ui/react-components'; +import Gavel from '@mui/icons-material/Gavel'; +import { Devices, LocationOn } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; + +export const BasicDrawerRailItemExample = (): JSX.Element => ( + + + + + } itemID="1" divider /> + } itemID="2" divider /> + } itemID="3" divider /> + + + + +); diff --git a/docs/src/componentDocs/DrawerRailItem/examples/CondensedDrawerRailItem.tsx b/docs/src/componentDocs/DrawerRailItem/examples/CondensedDrawerRailItem.tsx new file mode 100644 index 000000000..c5e3876a9 --- /dev/null +++ b/docs/src/componentDocs/DrawerRailItem/examples/CondensedDrawerRailItem.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { CondensedDrawerRailItemExample } from './CondensedDrawerRailItemExample'; + +const codeSnippet = ` + + + } itemID="1" /> + } itemID="2" /> + } itemID="3" /> + + +`; + +export const CondensedDrawerRailItem = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerRailItem/examples/CondensedDrawerRailItemExample.tsx b/docs/src/componentDocs/DrawerRailItem/examples/CondensedDrawerRailItemExample.tsx new file mode 100644 index 000000000..b21d9260d --- /dev/null +++ b/docs/src/componentDocs/DrawerRailItem/examples/CondensedDrawerRailItemExample.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { Drawer, DrawerBody, DrawerNavGroup, DrawerRailItem } from '@brightlayer-ui/react-components'; +import Gavel from '@mui/icons-material/Gavel'; +import { Devices, LocationOn } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; + +export const CondensedDrawerRailItemExample = (): JSX.Element => ( + + + + + } itemID="1" /> + } itemID="2" /> + } itemID="3" /> + + + + +); diff --git a/docs/src/componentDocs/DrawerRailItem/examples/index.tsx b/docs/src/componentDocs/DrawerRailItem/examples/index.tsx new file mode 100644 index 000000000..06be18af9 --- /dev/null +++ b/docs/src/componentDocs/DrawerRailItem/examples/index.tsx @@ -0,0 +1,2 @@ +export * from './CondensedDrawerRailItem'; +export * from './BasicDrawerRailItem'; diff --git a/docs/images/railAnatomy.png b/docs/src/componentDocs/DrawerRailItem/images/railAnatomy.png similarity index 100% rename from docs/images/railAnatomy.png rename to docs/src/componentDocs/DrawerRailItem/images/railAnatomy.png diff --git a/docs/src/componentDocs/DrawerRailItem/markdown/DrawerRailItemAPIDocs.mdx b/docs/src/componentDocs/DrawerRailItem/markdown/DrawerRailItemAPIDocs.mdx new file mode 100644 index 000000000..ae55e97ab --- /dev/null +++ b/docs/src/componentDocs/DrawerRailItem/markdown/DrawerRailItemAPIDocs.mdx @@ -0,0 +1,82 @@ +import Box from '@mui/material/Box'; + +import RailAnatomy from '../images/railAnatomy.png'; +import SharedProps from '../../../shared/markdown/SharedProps.mdx'; +import { DOCS_BRANCH } from '../../../shared/constants'; + +# Drawer Rail Item + +When using the `rail` variant of the ``, you should use `` instead of ``. The `` is a simplified version of the `` that renders the `icon` and `title` only. When using the `condensed` version of the ``, the `title` will also be hidden. The `` cannot be nested. + + + + + +### Drawer Rail Item API + + + +| Prop Name | Description | Type | Required | Default | +| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------- | -------- | ------- | +| classes | Style overrides | `DrawerRailItemClasses` | no | | +| condensed\* | Show condensed nav items without labels (`rail` variant only) | `boolean` | no | `false` | +| hidden | Sets whether to hide the rail item | `boolean` | no | | +| icon | A component to render for the left icon | `JSX.Element` | yes | | +| itemID | An unique identifier of the NavItem. Item will have 'active' style when this matches activeItem | `string` | yes | | +| onClick | A function to execute when clicked | `function` | no | | +| statusColor | Status stripe color | `string` | no | | +| title | The text to show on the first line | `string` | no | | +| ButtonBaseProps | Used to override [ButtonBase](https://mui.com/material-ui/api/button-base/) default props | `InfoListItemProps` | no | | +| disableRailTooltip | Sets whether to disable the tooltip on hover | `boolean` | no | | +| [...sharedProps](/components/drawer-rail-item/api-docs#shared-props) | Props that can be set at any level in the drawer hierarchy | - | - | | + + + +> \*These props are managed automatically when using the `` inside of a ``. + +### Style Overrides + +You can override the default styles used by Brightlayer UI by: + +- using the `sx` prop +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet + +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + + +| Name | Global CSS Class | Description | +| ------------- | --------------------------------- | --------------------------------------------------------------- | +| root | .BluiDrawerRailItem-root | Styles applied to the root element | +| active | .BluiDrawerRailItem-active | Styles applied to the active element | +| condensed | .BluiDrawerRailItem-condensed | Styles applied to the root element when condensed is true | +| divider | .BluiDrawerRailItem-divider | Styles applied to the divider element | +| icon | .BluiDrawerRailItem-icon | Styles applied to the icon wrapper | +| statusStripe | .BluiDrawerRailItem-statusStripe | Styles applied to the status stripe | +| title | .BluiDrawerRailItem-title | Styles applied to the title text | +| titleActive | .BluiDrawerRailItem-titleActive | Styles applied to the title text if the item is the active item | +| ripple | .BluiDrawerRailItem-ripple | Styles applied to the ripple | +| cursorPointer | .BluiDrawerRailItem-cursorPointer | Styles applied to the root element when cursor is pointer | +| itemActive | .BluiDrawerRailItem-itemActive | Styles applied to the active item | + + + +### Tips + +You can render the `` as a link by setting the `component` prop in the `ButtonBaseProps` to a [`Link`](https://reactrouter.com/web/api/Link) component from `react-router-dom` (recommended), or the native HTML anchor tag `'a'`. This allows you to perform helpful actions such as opening a link in a new browser tab via right-click. + + diff --git a/docs/src/componentDocs/DrawerRailItem/markdown/DrawerRailItemExamples.mdx b/docs/src/componentDocs/DrawerRailItem/markdown/DrawerRailItemExamples.mdx new file mode 100644 index 000000000..b07c71cf7 --- /dev/null +++ b/docs/src/componentDocs/DrawerRailItem/markdown/DrawerRailItemExamples.mdx @@ -0,0 +1,15 @@ +import { BasicDrawerRailItem, CondensedDrawerRailItem } from '../examples'; + +## Drawer Rail Item + +When using the `'rail'` variant of the [Drawer](/components/drawer/examples), navigation items are rendered as `` components instead of [Drawer Nav Items](/components/drawer-nav-item/examples). If you are using the `items` prop to declare navigation items for your drawer, the correct component will be selected automatically. If you are building your Drawer structure using composition, make sure you use the correct nav/rail item component for your chosen variant. + + + +## Condensed Drawer Rail Item + +The Navigation Rail can be made even smaller by setting the `condensed` prop on the Drawer. This will hide the navigation item titles and only show the icons. + +> The `condensed` prop is available on the Rail Item component, but it should always be set at the Drawer level to avoid inconsistent sizing between elements. + + diff --git a/docs/src/componentDocs/DrawerRailItem/playground/DrawerRailItemConfig.tsx b/docs/src/componentDocs/DrawerRailItem/playground/DrawerRailItemConfig.tsx new file mode 100644 index 000000000..586bb4c06 --- /dev/null +++ b/docs/src/componentDocs/DrawerRailItem/playground/DrawerRailItemConfig.tsx @@ -0,0 +1,136 @@ +import { ComponentType } from '../../../__types__'; +import * as Colors from '@brightlayer-ui/colors'; + +export const drawerRailItemConfig: ComponentType = { + componentName: 'Drawer Rail Item', + props: [ + { + propName: 'disableRailTooltip', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Sets whether to disable the tooltip on hover (applies when rail item is condensed)', + required: false, + defaultValue: false, + }, + { + propName: 'hidden', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Sets whether to hide the rail item', + required: false, + defaultValue: false, + }, + { + propName: 'icon', + inputType: 'select', + inputValue: '', + options: ['', ''], + propType: 'JSX.Element', + helperText: 'An icon component to render', + required: true, + defaultValue: '', + }, + { + propName: 'statusColor', + inputType: 'colorPicker', + inputValue: '#ffac00', + propType: 'string', + helperText: 'Status stripe color', + required: false, + }, + { + propName: 'title', + inputType: 'string', + inputValue: 'Title', + propType: 'string', + helperText: 'The label text', + required: true, + }, + ], + sharedProps: [ + { + propName: 'activeItemBackgroundColor', + inputType: 'colorPicker', + inputValue: '', + propType: 'string', + helperText: `Background color for the 'active' item`, + required: false, + }, + { + propName: 'activeItemFontColor', + inputType: 'colorPicker', + inputValue: Colors.blue[500], + propType: 'string', + helperText: `Font color for the 'active' item`, + required: false, + }, + { + propName: 'activeItemIconColor', + inputType: 'colorPicker', + inputValue: Colors.blue[500], + propType: 'string', + helperText: `Icon color for the 'active' item`, + required: false, + }, + { + propName: 'backgroundColor', + inputType: 'colorPicker', + inputValue: Colors.white[50], + propType: 'string', + helperText: 'Color used for the background of the element', + required: false, + }, + { + propName: 'divider', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Whether to show a line between all items', + required: false, + defaultValue: false, + }, + { + propName: 'itemFontColor', + inputType: 'colorPicker', + inputValue: Colors.black[500], + propType: 'string', + helperText: 'The color used for the title text', + required: false, + }, + { + propName: 'itemIconColor', + inputType: 'colorPicker', + inputValue: Colors.black[500], + propType: 'string', + helperText: 'The color used for the icon', + required: false, + }, + { + propName: 'ripple', + inputType: 'boolean', + inputValue: true, + propType: 'boolean', + helperText: 'Whether to apply material ripple effect to items on click', + required: false, + defaultValue: true, + }, + ], + otherComponentProps: { + childComponentName: 'Drawer Props', + childComponentProps: [ + { + propName: 'condensed', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Show condensed nav items without title text', + required: false, + defaultValue: false, + }, + ], + }, +}; + +export default drawerRailItemConfig; diff --git a/docs/src/componentDocs/DrawerRailItem/playground/PlaygroundPage.tsx b/docs/src/componentDocs/DrawerRailItem/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..568324bd3 --- /dev/null +++ b/docs/src/componentDocs/DrawerRailItem/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import DrawerRailItemPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const DrawerRailItemPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/DrawerRailItem/playground/PreviewComponent.tsx b/docs/src/componentDocs/DrawerRailItem/playground/PreviewComponent.tsx new file mode 100644 index 000000000..726a38f2f --- /dev/null +++ b/docs/src/componentDocs/DrawerRailItem/playground/PreviewComponent.tsx @@ -0,0 +1,198 @@ +import React, { useState } from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { createProps, getIcon, hideDefaultPropsFromSnippet, removeEmptyLines } from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import { Drawer, DrawerBody, DrawerNavGroup, DrawerRailItem } from '@brightlayer-ui/react-components'; +import Gavel from '@mui/icons-material/Gavel'; +import LocationOn from '@mui/icons-material/LocationOn'; + +export const PreviewComponent = (): JSX.Element => { + const drawerRailItemJson = useAppSelector((state: RootState) => state.componentsPropsState.drawerRailItemComponent); + const drawerRailItemProps = createProps(drawerRailItemJson.props as PropsType[]); + const drawerRailItemSharedProps = createProps(drawerRailItemJson.sharedProps as PropsType[]); + const drawerProps = createProps(drawerRailItemJson.otherComponentProps?.childComponentProps as PropsType[]); + const [activeItem, setActiveItem] = useState(drawerRailItemProps.title as string); + + const toggleDefaultProp = (propName: string, currentValue: any, groupType?: string): string => + hideDefaultPropsFromSnippet(drawerRailItemJson, propName, currentValue, groupType); + + const generateCodeSnippet = (): string => { + const jsx = ` + + + { + setActiveItem("${drawerRailItemProps.title}"); + }} + /> + } + itemID={'Locations'} + title={'Locations'} + ${toggleDefaultProp('disableRailTooltip', drawerRailItemProps.disableRailTooltip, 'props')} + ${toggleDefaultProp( + 'activeItemBackgroundColor', + drawerRailItemSharedProps.activeItemBackgroundColor, + 'sharedProps' + )} + ${toggleDefaultProp( + 'activeItemFontColor', + drawerRailItemSharedProps.activeItemFontColor, + 'sharedProps' + )} + ${toggleDefaultProp( + 'activeItemIconColor', + drawerRailItemSharedProps.activeItemIconColor, + 'sharedProps' + )} + ${toggleDefaultProp('backgroundColor', drawerRailItemSharedProps.backgroundColor, 'sharedProps')} + ${toggleDefaultProp('divider', drawerRailItemSharedProps.divider, 'sharedProps')} + ${toggleDefaultProp('itemFontColor', drawerRailItemSharedProps.itemFontColor, 'sharedProps')} + ${toggleDefaultProp('itemIconColor', drawerRailItemSharedProps.itemIconColor, 'sharedProps')} + ${toggleDefaultProp('ripple', drawerRailItemSharedProps.ripple, 'sharedProps')} + onClick={(): void => { + setActiveItem("Locations"); + }} + /> + } + itemID={"Legal"} + title={"Legal"} + ${toggleDefaultProp('disableRailTooltip', drawerRailItemProps.disableRailTooltip, 'props')} + ${toggleDefaultProp( + 'activeItemBackgroundColor', + drawerRailItemSharedProps.activeItemBackgroundColor, + 'sharedProps' + )} + ${toggleDefaultProp( + 'activeItemFontColor', + drawerRailItemSharedProps.activeItemFontColor, + 'sharedProps' + )} + ${toggleDefaultProp( + 'activeItemIconColor', + drawerRailItemSharedProps.activeItemIconColor, + 'sharedProps' + )} + ${toggleDefaultProp('backgroundColor', drawerRailItemSharedProps.backgroundColor, 'sharedProps')} + ${toggleDefaultProp('divider', drawerRailItemSharedProps.divider, 'sharedProps')} + ${toggleDefaultProp('itemFontColor', drawerRailItemSharedProps.itemFontColor, 'sharedProps')} + ${toggleDefaultProp('itemIconColor', drawerRailItemSharedProps.itemIconColor, 'sharedProps')} + ${toggleDefaultProp('ripple', drawerRailItemSharedProps.ripple, 'sharedProps')} + onClick={(): void => { + setActiveItem("Legal"); + }} + /> + + +`; + return removeEmptyLines(jsx); + }; + + return ( + + + + + +
+ } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/DrawerRailItem/playground/PropsPlayground.tsx b/docs/src/componentDocs/DrawerRailItem/playground/PropsPlayground.tsx new file mode 100644 index 000000000..4a0339622 --- /dev/null +++ b/docs/src/componentDocs/DrawerRailItem/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const drawerRailItemJson = useAppSelector((state: RootState) => state.componentsPropsState.drawerRailItemComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/DrawerRailItem/playground/index.tsx b/docs/src/componentDocs/DrawerRailItem/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/DrawerRailItem/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/DrawerSubheader/examples/BasicDrawerSubheader.tsx b/docs/src/componentDocs/DrawerSubheader/examples/BasicDrawerSubheader.tsx new file mode 100644 index 000000000..459eebb26 --- /dev/null +++ b/docs/src/componentDocs/DrawerSubheader/examples/BasicDrawerSubheader.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { BasicDrawerSubheaderExample } from './BasicDrawerSubheaderExample'; + +const codeSnippet = ` + + + Custom Content Goes here + + + + + + + + +`; + +export const BasicDrawerSubheader = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerSubheader/examples/BasicDrawerSubheaderExample.tsx b/docs/src/componentDocs/DrawerSubheader/examples/BasicDrawerSubheaderExample.tsx new file mode 100644 index 000000000..eea08c8f6 --- /dev/null +++ b/docs/src/componentDocs/DrawerSubheader/examples/BasicDrawerSubheaderExample.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { + Drawer, + DrawerBody, + DrawerHeader, + DrawerNavGroup, + DrawerNavItem, + DrawerSubheader, +} from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const BasicDrawerSubheaderExample = (): JSX.Element => ( + + + + + Custom Content Goes here + + + + + + + + + +); diff --git a/docs/src/componentDocs/DrawerSubheader/examples/ComplexDrawerSubheader.tsx b/docs/src/componentDocs/DrawerSubheader/examples/ComplexDrawerSubheader.tsx new file mode 100644 index 000000000..fcf4b6562 --- /dev/null +++ b/docs/src/componentDocs/DrawerSubheader/examples/ComplexDrawerSubheader.tsx @@ -0,0 +1,47 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ComplexDrawerSubheaderExample } from './ComplexDrawerSubheaderExample'; + +const codeSnippet = ` + + + + Organization + + + + + + } itemID="1" /> + } itemID="2" /> + } itemID="3" /> + + + +`; + +export const ComplexDrawerSubheader = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/DrawerSubheader/examples/ComplexDrawerSubheaderExample.tsx b/docs/src/componentDocs/DrawerSubheader/examples/ComplexDrawerSubheaderExample.tsx new file mode 100644 index 000000000..6f4431126 --- /dev/null +++ b/docs/src/componentDocs/DrawerSubheader/examples/ComplexDrawerSubheaderExample.tsx @@ -0,0 +1,57 @@ +import React, { useState } from 'react'; +import { Divider, FormControl, InputLabel, MenuItem, Select, Typography } from '@mui/material'; +import { + Drawer, + DrawerBody, + DrawerHeader, + DrawerNavItem, + DrawerSubheader, + DrawerNavGroup, +} from '@brightlayer-ui/react-components'; +import * as colors from '@brightlayer-ui/colors'; +import { Copyright, Dashboard, LocationOn } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; + +export const ComplexDrawerSubheaderExample = (): JSX.Element => { + const [selected, setSelected] = useState('blui'); + return ( + + + + + + Organization + + + + + + } itemID="1" /> + } itemID="2" /> + } itemID="3" /> + + + + + ); +}; diff --git a/docs/src/componentDocs/DrawerSubheader/examples/index.tsx b/docs/src/componentDocs/DrawerSubheader/examples/index.tsx new file mode 100644 index 000000000..2804fe659 --- /dev/null +++ b/docs/src/componentDocs/DrawerSubheader/examples/index.tsx @@ -0,0 +1,2 @@ +export * from './BasicDrawerSubheader'; +export * from './ComplexDrawerSubheader'; diff --git a/docs/src/componentDocs/DrawerSubheader/markdown/DrawerSubheaderAPIDocs.mdx b/docs/src/componentDocs/DrawerSubheader/markdown/DrawerSubheaderAPIDocs.mdx new file mode 100644 index 000000000..86b58e023 --- /dev/null +++ b/docs/src/componentDocs/DrawerSubheader/markdown/DrawerSubheaderAPIDocs.mdx @@ -0,0 +1,28 @@ +import Box from '@mui/material/Box'; + +# Drawer Subheader + +The `` is an optional section that renders below the header and above the body of the ``. It can be used to support custom content (passed as children), such as filtering options or to display additional information. + + + +| Prop Name | Description | Type | Required | Default | +| --------------------- | -------------------------------------------------- | --------- | -------- | ------- | +| divider | Optional divider which appears below the Subheader | `boolean` | no | `true` | +| hideContentOnCollapse | Hide subheader contents when drawer is closed | `boolean` | no | `true` | + + + +Any other props supplied will be provided to the root element ([``](https://mui.com/material-ui/api/box/)). + +### Classes + +You can override the classes used by Brightlayer UI by passing a `classes` prop. The `` supports the following keys: + + + +| Name | Description | +| ---- | ---------------------------------- | +| root | Styles applied to the root element | + + diff --git a/docs/src/componentDocs/DrawerSubheader/markdown/DrawerSubheaderExamples.mdx b/docs/src/componentDocs/DrawerSubheader/markdown/DrawerSubheaderExamples.mdx new file mode 100644 index 000000000..a01f4ec8e --- /dev/null +++ b/docs/src/componentDocs/DrawerSubheader/markdown/DrawerSubheaderExamples.mdx @@ -0,0 +1,14 @@ +import { BasicDrawerSubheader } from '../examples/BasicDrawerSubheader'; +import { ComplexDrawerSubheader } from '../examples/ComplexDrawerSubheader'; + +## Drawer Subheader + +The `` allows you to pass custom content that will appear directly below the drawer header. + + + +## Interactive Subheader + +The subheader will accept any content but is commonly used for dropdowns or content toggles. + + diff --git a/docs/src/componentDocs/DrawerSubheader/playground/DrawerSubheaderConfig.tsx b/docs/src/componentDocs/DrawerSubheader/playground/DrawerSubheaderConfig.tsx new file mode 100644 index 000000000..74df26e68 --- /dev/null +++ b/docs/src/componentDocs/DrawerSubheader/playground/DrawerSubheaderConfig.tsx @@ -0,0 +1,38 @@ +import { ComponentType } from '../../../__types__'; + +export const drawerSubheaderConfig: ComponentType = { + componentName: 'Drawer Subheader', + props: [ + { + propName: 'divider', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Optional divider which appears below the Subheader', + required: false, + defaultValue: true, + }, + { + propName: 'hideContentOnCollapse', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Hide subheader contents when drawer is closed', + required: false, + defaultValue: true, + }, + ], + otherProps: [ + { + propName: 'open', + inputType: 'boolean', + inputValue: true, + propType: 'boolean', + helperText: 'Controls the open/closed state of the drawer', + required: false, + label: 'Drawer Open', + }, + ], +}; + +export default drawerSubheaderConfig; diff --git a/docs/src/componentDocs/DrawerSubheader/playground/PlaygroundPage.tsx b/docs/src/componentDocs/DrawerSubheader/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..5f8e92467 --- /dev/null +++ b/docs/src/componentDocs/DrawerSubheader/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import DrawerSubheaderPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const DrawerSubheaderPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/DrawerSubheader/playground/PreviewComponent.tsx b/docs/src/componentDocs/DrawerSubheader/playground/PreviewComponent.tsx new file mode 100644 index 000000000..7270a065d --- /dev/null +++ b/docs/src/componentDocs/DrawerSubheader/playground/PreviewComponent.tsx @@ -0,0 +1,120 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { + Drawer, + DrawerBody, + DrawerHeader, + DrawerNavGroup, + DrawerNavItem, + DrawerSubheader, +} from '@brightlayer-ui/react-components/core/Drawer'; +import { createProps, hideDefaultPropsFromSnippet, removeEmptyLines } from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import { Accessibility, Menu, NotificationsActive, Person, Today } from '@mui/icons-material'; +import Box from '@mui/material/Box'; + +export const PreviewComponent = (): JSX.Element => { + const drawerSubheaderJson = useAppSelector( + (state: RootState) => state.componentsPropsState.drawerSubheaderComponent + ); + + const drawerSubheaderProps = createProps(drawerSubheaderJson.props as PropsType[]); + const drawerSubheaderOtherProps = createProps(drawerSubheaderJson.otherProps as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any): string => + hideDefaultPropsFromSnippet(drawerSubheaderJson, propName, currentValue, 'props'); + + const generateSubHeaderSnippet = (): string => { + if (drawerSubheaderProps.divider && drawerSubheaderProps.hideContentOnCollapse) { + return ``; + } + return ``; + }; + + const generateCodeSnippet = (): string => { + const jsx = ` + } + title={'Subheader Demo'} + subtitle={'See the DrawerSubheader below'} + /> + ${generateSubHeaderSnippet()} + + Subheader Content Here + + + + + } + itemID={'Identity Management'} + title={'Identity Management'} + /> + } + itemID={'Calendar'} + title={'Calendar'} /> + } + title={'Accessibility'} + itemID={'Accessibility'} /> + } + title={'Notifications'} + itemID={'Notifications'} + /> + + + `; + + return removeEmptyLines(jsx); + }; + + return ( + + } title={'Subheader Demo'} subtitle={'See the DrawerSubheader below'} /> + + + Subheader Content Here + + + + + } + itemID={'Identity Management'} + title={'Identity Management'} + /> + } itemID={'Calendar'} title={'Calendar'} /> + } title={'Accessibility'} itemID={'Accessibility'} /> + } + title={'Notifications'} + itemID={'Notifications'} + /> + + +
+ } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/DrawerSubheader/playground/PropsPlayground.tsx b/docs/src/componentDocs/DrawerSubheader/playground/PropsPlayground.tsx new file mode 100644 index 000000000..0f731ab00 --- /dev/null +++ b/docs/src/componentDocs/DrawerSubheader/playground/PropsPlayground.tsx @@ -0,0 +1,14 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const drawerSubheaderJson = useAppSelector( + (state: RootState) => state.componentsPropsState.drawerSubheaderComponent + ); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/DrawerSubheader/playground/index.tsx b/docs/src/componentDocs/DrawerSubheader/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/DrawerSubheader/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/EmptyState/examples/EmptyStateInCard.tsx b/docs/src/componentDocs/EmptyState/examples/EmptyStateInCard.tsx new file mode 100644 index 000000000..3be91b001 --- /dev/null +++ b/docs/src/componentDocs/EmptyState/examples/EmptyStateInCard.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { EmptyStateInCardExample } from './EmptyStateInCardExample'; + +const codeSnippet = ` + }> + Device Usage + + + } + title={'No Devices Found'} + description={'Enable Location Services via Settings to receive GPS information'} + actions={ + + } + /> + +`; + +export const EmptyStateInCard = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/EmptyState/examples/EmptyStateInCardExample.tsx b/docs/src/componentDocs/EmptyState/examples/EmptyStateInCardExample.tsx new file mode 100644 index 000000000..000f1d306 --- /dev/null +++ b/docs/src/componentDocs/EmptyState/examples/EmptyStateInCardExample.tsx @@ -0,0 +1,41 @@ +import React from 'react'; +import Accordion from '@mui/material/Accordion'; +import AccordionDetails from '@mui/material/AccordionDetails'; +import AccordionSummary from '@mui/material/AccordionSummary'; +import Add from '@mui/icons-material/Add'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import LocationOff from '@mui/icons-material/LocationOff'; +import Typography from '@mui/material/Typography'; +import { EmptyState } from '@brightlayer-ui/react-components/core/EmptyState'; +import { ExampleShowcase } from '../../../shared'; + +export const EmptyStateInCardExample = (): JSX.Element => ( + + + + }> + Device Usage + + + } + title="No Devices Found" + description="Enable Location Services via Settings to receive GPS information" + actions={ + + } + /> + + + + +); diff --git a/docs/src/componentDocs/EmptyState/examples/EmptyStateWithActions.tsx b/docs/src/componentDocs/EmptyState/examples/EmptyStateWithActions.tsx new file mode 100644 index 000000000..4ee7bcf1c --- /dev/null +++ b/docs/src/componentDocs/EmptyState/examples/EmptyStateWithActions.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { EmptyStateWithActionsExample } from './EmptyStateWithActionsExample'; + +const codeSnippet = `} + title={'No Devices'} + description={'Check your network connection or add a new device'} + actions={ + + } +/>`; + +export const EmptyStateWithActions = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/EmptyState/examples/EmptyStateWithActionsExample.tsx b/docs/src/componentDocs/EmptyState/examples/EmptyStateWithActionsExample.tsx new file mode 100644 index 000000000..ad4a6e7ce --- /dev/null +++ b/docs/src/componentDocs/EmptyState/examples/EmptyStateWithActionsExample.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import Button from '@mui/material/Button'; +import Add from '@mui/icons-material/Add'; +import Devices from '@mui/icons-material/Devices'; +import { EmptyState } from '@brightlayer-ui/react-components/core/EmptyState'; +import { ExampleShowcase } from '../../../shared'; + +export const EmptyStateWithActionsExample = (): JSX.Element => ( + + } + title="No Devices" + description="Check your network connection or add a new device" + actions={ + + } + /> + +); diff --git a/docs/src/componentDocs/EmptyState/examples/EmptyStateWithContent.tsx b/docs/src/componentDocs/EmptyState/examples/EmptyStateWithContent.tsx new file mode 100644 index 000000000..604fb17c0 --- /dev/null +++ b/docs/src/componentDocs/EmptyState/examples/EmptyStateWithContent.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { EmptyStateWithContentExample } from './EmptyStateWithContentExample'; + +const codeSnippet = `} + title={Request Permission} + description={You must contact your system admin to view this content.} +/>`; + +export const EmptyStateWithContent = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/EmptyState/examples/EmptyStateWithContentExample.tsx b/docs/src/componentDocs/EmptyState/examples/EmptyStateWithContentExample.tsx new file mode 100644 index 000000000..f88e1154a --- /dev/null +++ b/docs/src/componentDocs/EmptyState/examples/EmptyStateWithContentExample.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import ReportIcon from '@mui/icons-material/Report'; +import { EmptyState } from '@brightlayer-ui/react-components/core/EmptyState'; +import { ExampleShowcase } from '../../../shared'; +import { Link, Typography } from '@mui/material'; + +export const EmptyStateWithContentExample = (): JSX.Element => ( + + } + // @ts-ignore + title={ + + Request Permission + + } + description={ + + You must contact your system admin to view this content. + + } + /> + +); diff --git a/docs/src/componentDocs/EmptyState/examples/EmptyStateWithDescription.tsx b/docs/src/componentDocs/EmptyState/examples/EmptyStateWithDescription.tsx new file mode 100644 index 000000000..4a923e6e6 --- /dev/null +++ b/docs/src/componentDocs/EmptyState/examples/EmptyStateWithDescription.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { EmptyStateWithDescriptionExample } from './EmptyStateWithDescriptionExample'; + +const codeSnippet = `} + title={'Location Services Disabled'} + description={'Enable Location Services via Settings to receive GPS information'} +/>`; + +export const EmptyStateWithDescription = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/EmptyState/examples/EmptyStateWithDescriptionExample.tsx b/docs/src/componentDocs/EmptyState/examples/EmptyStateWithDescriptionExample.tsx new file mode 100644 index 000000000..a2797a6e9 --- /dev/null +++ b/docs/src/componentDocs/EmptyState/examples/EmptyStateWithDescriptionExample.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import LocationOff from '@mui/icons-material/LocationOff'; +import { EmptyState } from '@brightlayer-ui/react-components/core/EmptyState'; +import { ExampleShowcase } from '../../../shared'; + +export const EmptyStateWithDescriptionExample = (): JSX.Element => ( + + } + title="Location Services Disabled" + description="Enable Location Services via Settings to receive GPS information" + /> + +); diff --git a/docs/images/emptyState.png b/docs/src/componentDocs/EmptyState/images/emptyState.png similarity index 100% rename from docs/images/emptyState.png rename to docs/src/componentDocs/EmptyState/images/emptyState.png diff --git a/docs/EmptyState.md b/docs/src/componentDocs/EmptyState/markdown/EmptyStateAPIDocs.mdx similarity index 64% rename from docs/EmptyState.md rename to docs/src/componentDocs/EmptyState/markdown/EmptyStateAPIDocs.mdx index fa1987175..e04aefc6c 100644 --- a/docs/EmptyState.md +++ b/docs/src/componentDocs/EmptyState/markdown/EmptyStateAPIDocs.mdx @@ -1,26 +1,31 @@ +import Box from '@mui/material/Box'; +import EmptyStateImage from '../images/emptyState.png'; +import { DOCS_BRANCH } from '../../../shared/constants'; + # Empty State The `` component is an element that can be used as a placeholder when no data is present (such as an empty list, or a placeholder page for future content). This is only used when no data is available, rather than during loading (see [empty states pattern](https://brightlayer-ui.github.io/patterns/empty-states)). -
- Empty State component with action button -
- -## Usage - -
- Empty State Anatomy -
- -```tsx -import { EmptyState } from '@brightlayer-ui/react-components'; - -} title={'No Alarms Found'} />; -``` - -## API - -
+ + + + +## Empty State API + + | Prop Name | Description | Type | Required | Default | | ----------- | ------------------------------------- | ------------------- | -------- | ------- | @@ -30,19 +35,22 @@ import { EmptyState } from '@brightlayer-ui/react-components'; | description | The secondary text to display | `ReactNode` | no | | | title | The main text to display | `ReactNode` | yes | | -
+ -Any other props supplied will be provided to the root element (`div`). +Any other props supplied will be provided to the root element ([``](https://mui.com/material-ui/api/box/)). ### Style Overrides You can override the default styles used by Brightlayer UI by: - using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + | Name | Global CSS Class | Description | | ----------- | --------------------------- | ---------------------------------- | @@ -51,3 +59,5 @@ For more details on styling options check out our [Styling Guide](https://github | description | .BluiEmptyState-description | Styles applied to the description | | icon | .BluiEmptyState-icon | Styles applied to the icon | | title | .BluiEmptyState-title | Styles applied to the title | + + diff --git a/docs/src/componentDocs/EmptyState/markdown/EmptyStateExamples.mdx b/docs/src/componentDocs/EmptyState/markdown/EmptyStateExamples.mdx new file mode 100644 index 000000000..b9204c4df --- /dev/null +++ b/docs/src/componentDocs/EmptyState/markdown/EmptyStateExamples.mdx @@ -0,0 +1,21 @@ +import { EmptyStateWithDescription } from '../examples/EmptyStateWithDescription'; +import { EmptyStateWithActions } from '../examples/EmptyStateWithActions'; +import { EmptyStateWithContent } from '../examples/EmptyStateWithContent'; + +## Empty State + +An `` is a placeholder element that you can show when there is no data or content is missing. + + + +## Adding an Action + +If you want to provide your users with a call-to-action, you can pass in custom content via the `actions` prop. + + + +## Customizing the Title and Description + +The `title` and `description` props accept ReactNode elements if you need to pass in more than simple strings. + + diff --git a/docs/src/componentDocs/EmptyState/playground/EmptyStateConfig.tsx b/docs/src/componentDocs/EmptyState/playground/EmptyStateConfig.tsx new file mode 100644 index 000000000..25763fc37 --- /dev/null +++ b/docs/src/componentDocs/EmptyState/playground/EmptyStateConfig.tsx @@ -0,0 +1,46 @@ +import { ComponentType } from '../../../__types__'; + +export const emptyStateConfig: ComponentType = { + componentName: 'Empty State', + props: [ + { + propName: 'icon', + inputType: 'select', + inputValue: '', + options: ['', '', ''], + propType: 'ReactNode', + helperText: 'The primary icon', + required: true, + defaultValue: '', + }, + { + propName: 'description', + inputType: 'string', + inputValue: 'Check your network connection', + propType: 'ReactNode', + helperText: 'The secondary text to display', + required: false, + }, + { + propName: 'title', + inputType: 'string', + inputValue: 'No Devices', + propType: 'ReactNode', + helperText: 'The main text to display', + required: true, + }, + ], + otherProps: [ + { + propName: 'showAction', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Whether to show action section or not', + required: false, + label: 'Show Action', + }, + ], +}; + +export default emptyStateConfig; diff --git a/docs/src/componentDocs/EmptyState/playground/PlaygroundPage.tsx b/docs/src/componentDocs/EmptyState/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..252108ec2 --- /dev/null +++ b/docs/src/componentDocs/EmptyState/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import EmptyStatePlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const EmptyStatePlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/EmptyState/playground/PreviewComponent.tsx b/docs/src/componentDocs/EmptyState/playground/PreviewComponent.tsx new file mode 100644 index 000000000..3ca6e0833 --- /dev/null +++ b/docs/src/componentDocs/EmptyState/playground/PreviewComponent.tsx @@ -0,0 +1,65 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { + createProps, + getIcon, + getIconWithProp, + hideDefaultPropsFromSnippet, + removeEmptyLines, +} from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import { EmptyState } from '@brightlayer-ui/react-components/core/EmptyState'; +import Button from '@mui/material/Button'; +import AddIcon from '@mui/icons-material/Add'; + +export const PreviewComponent = (): JSX.Element => { + const emptyStateJson = useAppSelector((state: RootState) => state.componentsPropsState.emptyStateComponent); + + const emptyStateProps = createProps(emptyStateJson.props as PropsType[]); + const emptyStateOtherProps = createProps(emptyStateJson.otherProps as PropsType[]); + + const toggleActionSection = (showAction: boolean): JSX.Element | undefined => + showAction ? ( + + ) : undefined; + + const toggleActionSnippet = (showActionSnippet: boolean): string => + showActionSnippet + ? `actions={ + + }` + : ``; + + const toggleDefaultProp = (propName: string, currentValue: any, groupType?: string): string => + hideDefaultPropsFromSnippet(emptyStateJson, propName, currentValue, groupType); + + const generateCodeSnippet = (): string => { + const jsx = ``; + return removeEmptyLines(jsx); + }; + + return ( + + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/EmptyState/playground/PropsPlayground.tsx b/docs/src/componentDocs/EmptyState/playground/PropsPlayground.tsx new file mode 100644 index 000000000..cc094f502 --- /dev/null +++ b/docs/src/componentDocs/EmptyState/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const emptyStateJson = useAppSelector((state: RootState) => state.componentsPropsState.emptyStateComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/EmptyState/playground/index.tsx b/docs/src/componentDocs/EmptyState/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/EmptyState/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/Hero/examples/HeroBanner.tsx b/docs/src/componentDocs/Hero/examples/HeroBanner.tsx new file mode 100644 index 000000000..d71a5ab83 --- /dev/null +++ b/docs/src/componentDocs/Hero/examples/HeroBanner.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { HeroBannerExample } from './HeroBannerExample'; + +const codeSnippet = ` + } + label="Efficiency" + ChannelValueProps={{ value: '98', units: '%' }} + /> +`; +export const HeroBanner = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/Hero/examples/HeroBannerExample.tsx b/docs/src/componentDocs/Hero/examples/HeroBannerExample.tsx new file mode 100644 index 000000000..143115f8a --- /dev/null +++ b/docs/src/componentDocs/Hero/examples/HeroBannerExample.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Hero } from '@brightlayer-ui/react-components/core/Hero'; +import { HeroBanner } from '@brightlayer-ui/react-components/core/HeroBanner'; +import GradeA from '@brightlayer-ui/icons-mui/GradeA'; +import { ExampleShowcase } from '../../../shared'; + +export const HeroBannerExample = (): JSX.Element => ( + + + } + label="Efficiency" + ChannelValueProps={{ value: '98', units: '%' }} + /> + + +); diff --git a/docs/src/componentDocs/Hero/examples/HeroBannerWithIconSize.tsx b/docs/src/componentDocs/Hero/examples/HeroBannerWithIconSize.tsx new file mode 100644 index 000000000..920b7fff1 --- /dev/null +++ b/docs/src/componentDocs/Hero/examples/HeroBannerWithIconSize.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { HeroBannerWithIconSizeExample } from './HeroBannerWithIconSizeExample'; + +const codeSnippet = `{[36, 48, 72].map((iconSize, index) => ( + + } + iconSize={iconSize} + label={'SVG'} + ChannelValueProps={{ value: iconSize, units: 'px', unitSpace: 'hide' }} + /> + } + iconSize={iconSize} + label={'Mui Icon'} + ChannelValueProps={{ value: iconSize, units: 'px', unitSpace: 'hide' }} + /> + } + iconSize={iconSize} + label={'icon font'} + ChannelValueProps={{ value: iconSize, units: 'px', unitSpace: 'hide' }} + /> + } + iconSize={iconSize} + label={'PNG'} + ChannelValueProps={{ value: iconSize, units: 'px', unitSpace: 'hide' }} + /> + +))}`; + +export const HeroBannerWithIconSize = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/Hero/examples/HeroBannerWithIconSizeExample.tsx b/docs/src/componentDocs/Hero/examples/HeroBannerWithIconSizeExample.tsx new file mode 100644 index 000000000..da7fc186b --- /dev/null +++ b/docs/src/componentDocs/Hero/examples/HeroBannerWithIconSizeExample.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import { Hero } from '@brightlayer-ui/react-components/core/Hero'; +import { HeroBanner } from '@brightlayer-ui/react-components/core/HeroBanner'; +import VoltageCircledOutline from '@brightlayer-ui/icons-mui/VoltageCircledOutline'; +import Schedule from '@mui/icons-material/Schedule'; +import Trex from '../images/trex.png'; +import { ExampleShowcase } from '../../../shared'; + +export const HeroBannerWithIconSizeExample = (): JSX.Element => ( + + + {[36, 48, 72].map((iconSize, index) => ( + + } + iconSize={iconSize} + label="SVG" + ChannelValueProps={{ value: iconSize, units: 'px', unitSpace: 'hide' }} + /> + } + iconSize={iconSize} + label="Mui Icon" + ChannelValueProps={{ value: iconSize, units: 'px', unitSpace: 'hide' }} + /> + } + iconSize={iconSize} + label="icon font" + ChannelValueProps={{ value: iconSize, units: 'px', unitSpace: 'hide' }} + /> + } + iconSize={iconSize} + label="PNG" + ChannelValueProps={{ value: iconSize, units: 'px', unitSpace: 'hide' }} + /> + + ))} + + +); diff --git a/docs/src/componentDocs/Hero/examples/HeroWithChannelValue.tsx b/docs/src/componentDocs/Hero/examples/HeroWithChannelValue.tsx new file mode 100644 index 000000000..a62537e0f --- /dev/null +++ b/docs/src/componentDocs/Hero/examples/HeroWithChannelValue.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { HeroWithChannelValueExample } from './HeroWithChannelValueExample'; + +const codeSnippet = `}> + + +`; + +export const HeroWithChannelValue = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/Hero/examples/HeroWithChannelValueExample.tsx b/docs/src/componentDocs/Hero/examples/HeroWithChannelValueExample.tsx new file mode 100644 index 000000000..040d0ea94 --- /dev/null +++ b/docs/src/componentDocs/Hero/examples/HeroWithChannelValueExample.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import { ChannelValue } from '@brightlayer-ui/react-components/core/ChannelValue'; +import { Hero } from '@brightlayer-ui/react-components/core/Hero'; +import Schedule from '@mui/icons-material/Schedule'; +import { ExampleShowcase } from '../../../shared'; + +export const HeroWithChannelValueExample = (): JSX.Element => ( + + }> + + + + +); diff --git a/docs/src/componentDocs/Hero/examples/HeroWithSecondaryIcon.tsx b/docs/src/componentDocs/Hero/examples/HeroWithSecondaryIcon.tsx new file mode 100644 index 000000000..69764cc72 --- /dev/null +++ b/docs/src/componentDocs/Hero/examples/HeroWithSecondaryIcon.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { HeroWithSecondaryIconExample } from './HeroWithSecondaryIconExample'; + +const codeSnippet = `, + value: 470, + units: 'RPM', + }} + icon={} +/>`; + +export const HeroWithSecondaryIcon = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/Hero/examples/HeroWithSecondaryIconExample.tsx b/docs/src/componentDocs/Hero/examples/HeroWithSecondaryIconExample.tsx new file mode 100644 index 000000000..33d80b9b1 --- /dev/null +++ b/docs/src/componentDocs/Hero/examples/HeroWithSecondaryIconExample.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { Hero } from '@brightlayer-ui/react-components/core/Hero'; +import TrendingUp from '@mui/icons-material/TrendingUp'; +import Fan from '@brightlayer-ui/icons-mui/Fan'; +import { ExampleShowcase } from '../../../shared'; + +export const HeroWithSecondaryIconExample = (): JSX.Element => ( + + , + value: 470, + units: 'RPM', + }} + icon={} + /> + +); diff --git a/docs/images/heroAnatomy.png b/docs/src/componentDocs/Hero/images/heroAnatomy.png similarity index 100% rename from docs/images/heroAnatomy.png rename to docs/src/componentDocs/Hero/images/heroAnatomy.png diff --git a/docs/images/heroes.png b/docs/src/componentDocs/Hero/images/heroes.png similarity index 100% rename from docs/images/heroes.png rename to docs/src/componentDocs/Hero/images/heroes.png diff --git a/docs/src/componentDocs/Hero/images/trex.png b/docs/src/componentDocs/Hero/images/trex.png new file mode 100644 index 000000000..643a559dd Binary files /dev/null and b/docs/src/componentDocs/Hero/images/trex.png differ diff --git a/docs/src/componentDocs/Hero/markdown/HeroAPIDocs.mdx b/docs/src/componentDocs/Hero/markdown/HeroAPIDocs.mdx new file mode 100644 index 000000000..1fc74e326 --- /dev/null +++ b/docs/src/componentDocs/Hero/markdown/HeroAPIDocs.mdx @@ -0,0 +1,105 @@ +import Box from '@mui/material/Box'; +import HeroAnatomy from '../images/heroAnatomy.png'; +import Heroes from '../images/heroes.png'; +import { DOCS_BRANCH } from '../../../shared/constants'; + +# Hero + +The Brightlayer UI `` components are used to call attention to particular values that are of the most importance to the user. These are typically displayed in a banner. + + + + + +The `` component displays a particular icon, value/units, and a label. The icon property will accept any valid component - this will typically be a Material icon, [Brightlayer UI icon](https://github.com/brightlayer-ui/icons), or [Progress Icon](https://github.com/brightlayer-ui/progress-icons). It will also accept Text/Emoji values. + +The value section of the Hero utilizes a [``](/components/channel-value/api-docs) component. To display a single simple value, the information can be passed using ChannelValueProps which will allow you to specify any props on the underlying `` component. For more complex values (such as a duration that displays hours and minutes), you can pass in `` components as children and they will be displayed inline. + +## Hero Usage + + + + + +### Hero API + + + +| Prop Name | Description | Type | Required | Default | +| :------------------ | :----------------------------------------- | :------------------- | :------- | :------------ | +| ChannelValueProps | Props passed through to ChannelValue child | `ChannelValueProps` | no | | +| classes | Style overrides | `HeroClasses` | no | | +| icon | The primary icon | `ReactNode` | yes | | +| iconBackgroundColor | The color used behind the primary icon | `string` | no | 'transparent' | +| iconSize | The size of the primary icon (min 10px) | `number` \| `string` | no | 36 | +| label | The text shown below the `ChannelValue` | `string` | yes | | + + + +Any other props supplied will be provided to the root element ([``](https://mui.com/material-ui/api/box/)). + +### Style Overrides + +You can override the default styles used by Brightlayer UI by: + +- using the `sx` prop +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet + +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + + +| Name | Global CSS Class | Description | +| :----- | :--------------- | :---------------------------------- | +| root | .BluiHero-root | Styles applied to the root element | +| icon | .BluiHero-icon | Styles applied to the icon element | +| label | .BluiHero-label | Styles applied to the label element | +| values | .BluiHero-values | Styles applied to the value element | + + + +# Hero Banner + +The `` component is a simple wrapper component that is used to contain `` components. It creates the flex container and sets up the spacing rules to display them. It accepts up to four `` components as its children. + +### Hero Banner API + + + +| Prop Name | Description | Type | Required | Default | +| :-------- | :--------------------------------- | :------------------ | :------- | :------ | +| classes | Style overrides | `HeroBannerClasses` | no | | +| divider | Whether to show the line separator | `boolean` | no | false | +| limit | Max number of children to display | `number` | no | 4 | + + + +Any other props supplied will be provided to the root element ([``](https://mui.com/material-ui/api/box/)). diff --git a/docs/src/componentDocs/Hero/markdown/HeroExamples.mdx b/docs/src/componentDocs/Hero/markdown/HeroExamples.mdx new file mode 100644 index 000000000..85be451f0 --- /dev/null +++ b/docs/src/componentDocs/Hero/markdown/HeroExamples.mdx @@ -0,0 +1,28 @@ +import { HeroWithChannelValue } from '../examples/HeroWithChannelValue'; +import { HeroWithSecondaryIcon } from '../examples/HeroWithSecondaryIcon'; +import { HeroBanner } from '../examples/HeroBanner'; +import { HeroBannerWithIconSize } from '../examples/HeroBannerWithIconSize'; + +## Hero + +A `` is used to call attention to a particular value or parameter. It adds some additional visual elements onto a [Channel Value](/components/channel-value/examples). When showing multiple heroes, they are typically placed within a Hero Banner to help with layout. + + + +## Showing Multiple Channel Values + +By default, a Hero renders a single Channel Value. If you need to support multiple Channel Values, you can pass them in as children. + + + +## Adding a Channel Value Icon + +If you want to include an inline icon, specify it in the Channel Value `icon` prop. + + + +## Icon Formatting + +The primary icon of a Hero can be provided in a variety of formats and sizes. + + diff --git a/docs/src/componentDocs/Hero/playground/HeroConfig.tsx b/docs/src/componentDocs/Hero/playground/HeroConfig.tsx new file mode 100644 index 000000000..6a52739e7 --- /dev/null +++ b/docs/src/componentDocs/Hero/playground/HeroConfig.tsx @@ -0,0 +1,92 @@ +import { ComponentType } from '../../../__types__'; +import * as Colors from '@brightlayer-ui/colors'; + +export const heroConfig: ComponentType = { + componentName: 'Hero', + props: [ + { + propName: 'icon', + inputType: 'select', + inputValue: '', + options: ['', ''], + propType: 'ReactNode', + helperText: 'The primary icon', + required: true, + }, + { + propName: 'iconBackgroundColor', + inputType: 'colorPicker', + inputValue: Colors.blue[500], + propType: 'string', + helperText: 'The color used behind the primary icon', + required: false, + defaultValue: 'transparent', + }, + { + propName: 'iconSize', + inputType: 'number', + inputValue: 36, + propType: 'number | string', + helperText: 'The size of the primary icon (min 10px)', + required: false, + defaultValue: 36, + rangeData: { + min: 10, + max: 100, + step: 1, + }, + }, + { + propName: 'label', + inputType: 'string', + inputValue: 'Velocity', + propType: 'string', + helperText: 'The text shown below the Channel Value', + required: true, + }, + ], + otherProps: [ + { + propName: 'htmlColor', + inputType: 'colorPicker', + inputValue: Colors.white[50], + propType: 'string', + helperText: 'The color apply to primary icon', + required: false, + label: 'Icon Color', + }, + ], + otherComponentProps: { + childComponentName: 'Channel Value Props', + childComponentProps: [ + { + propName: 'units', + inputType: 'string', + inputValue: 'RPM', + propType: 'string', + helperText: 'The text to display for the units (light text)', + required: false, + }, + { + propName: 'valueIcon', + inputType: 'select', + inputValue: '', + options: ['undefined', ''], + propType: 'JSX.Element', + helperText: 'The inline icon to display', + required: false, + defaultValue: '', + }, + { + propName: 'value', + inputType: 'string', + inputValue: 470, + propType: 'number | string', + helperText: 'The value (bold text) to display', + required: true, + }, + ], + }, +}; + +export default heroConfig; diff --git a/docs/src/componentDocs/Hero/playground/PlaygroundPage.tsx b/docs/src/componentDocs/Hero/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..40bc927d3 --- /dev/null +++ b/docs/src/componentDocs/Hero/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import HeroPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const HeroPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/Hero/playground/PreviewComponent.tsx b/docs/src/componentDocs/Hero/playground/PreviewComponent.tsx new file mode 100644 index 000000000..a0c57abbd --- /dev/null +++ b/docs/src/componentDocs/Hero/playground/PreviewComponent.tsx @@ -0,0 +1,56 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { Hero } from '@brightlayer-ui/react-components/core/Hero'; +import { + createProps, + getIcon, + getIconWithProp, + hideDefaultPropsFromSnippet, + removeEmptyLines, +} from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; + +export const PreviewComponent = (): JSX.Element => { + const heroJson = useAppSelector((state: RootState) => state.componentsPropsState.heroComponent); + + const heroProps = createProps(heroJson.props as PropsType[]); + const heroOtherProps = createProps(heroJson.otherProps as PropsType[]); + const channelValueProps = createProps(heroJson.otherComponentProps?.childComponentProps as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any): string => + hideDefaultPropsFromSnippet(heroJson, propName, currentValue, 'props'); + + const generateCodeSnippet = (): string => { + const jsx = ``; + return removeEmptyLines(jsx); + }; + + return ( + + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/Hero/playground/PropsPlayground.tsx b/docs/src/componentDocs/Hero/playground/PropsPlayground.tsx new file mode 100644 index 000000000..1fa2f95c8 --- /dev/null +++ b/docs/src/componentDocs/Hero/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const heroJson = useAppSelector((state: RootState) => state.componentsPropsState.heroComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/Hero/playground/index.tsx b/docs/src/componentDocs/Hero/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/Hero/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/InfoListItem/examples/DenseInfoListItem.tsx b/docs/src/componentDocs/InfoListItem/examples/DenseInfoListItem.tsx new file mode 100644 index 000000000..3c2221f30 --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/examples/DenseInfoListItem.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { DenseInfoListItemExample } from './DenseInfoListItemExample'; + +const codeSnippet = ` + + +`; + +export const DenseInfoListItem = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/InfoListItem/examples/DenseInfoListItemExample.tsx b/docs/src/componentDocs/InfoListItem/examples/DenseInfoListItemExample.tsx new file mode 100644 index 000000000..982a11112 --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/examples/DenseInfoListItemExample.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { InfoListItem } from '@brightlayer-ui/react-components/core/InfoListItem'; +import { ExampleShowcase } from '../../../shared'; + +export const DenseInfoListItemExample = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/InfoListItem/examples/InfoListItemInList.tsx b/docs/src/componentDocs/InfoListItem/examples/InfoListItemInList.tsx new file mode 100644 index 000000000..f2900ea51 --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/examples/InfoListItemInList.tsx @@ -0,0 +1,50 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { InfoListItemInListExample } from './InfoListItemInListExample'; + +const codeSnippet = ` + } + iconAlign={'center'} + chevron + ripple + onClick={() => {}} + /> + } + chevron + ripple + onClick={() => {}} + /> + } + iconAlign={'center'} + chevron + ripple + onClick={() => {}} + /> +`; + +export const InfoListItemInList = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/InfoListItem/examples/InfoListItemInListExample.tsx b/docs/src/componentDocs/InfoListItem/examples/InfoListItemInListExample.tsx new file mode 100644 index 000000000..a6a30ce42 --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/examples/InfoListItemInListExample.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import { InfoListItem } from '@brightlayer-ui/react-components/core/InfoListItem'; +import Stack from '@mui/material/Stack'; +import * as colors from '@brightlayer-ui/colors'; +import { DeviceActivating } from '@brightlayer-ui/icons-mui'; +import { BatteryChargingFull, CheckCircle } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; + +export const InfoListItemInListExample = (): JSX.Element => ( + + + } + iconAlign="center" + chevron + ripple + onClick={(): void => {}} + /> + } + chevron + ripple + onClick={(): void => {}} + /> + } + iconAlign="center" + chevron + ripple + onClick={(): void => {}} + /> + + +); diff --git a/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithIcon.tsx b/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithIcon.tsx new file mode 100644 index 000000000..73fd22b44 --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithIcon.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { InfoListItemWithIconExample } from './InfoListItemWithIconExample'; + +const codeSnippet = `} +/>`; + +export const InfoListItemWithIcon = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithIconExample.tsx b/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithIconExample.tsx new file mode 100644 index 000000000..5198280e8 --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithIconExample.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { InfoListItem } from '@brightlayer-ui/react-components/core/InfoListItem'; +import { Alarm } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; + +export const InfoListItemWithIconExample = (): JSX.Element => ( + + } + /> + +); diff --git a/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithRightComponent.tsx b/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithRightComponent.tsx new file mode 100644 index 000000000..8e87bca8f --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithRightComponent.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { InfoListItemWithRightComponentExample } from './InfoListItemWithRightComponentExample'; + +const codeSnippet = `} + leftComponent={ + + + 8:32 AM + + 11/21/21 + + } + rightComponent={} +/>`; + +export const InfoListItemWithRightComponent = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithRightComponentExample.tsx b/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithRightComponentExample.tsx new file mode 100644 index 000000000..b5849aa87 --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithRightComponentExample.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { InfoListItem } from '@brightlayer-ui/react-components/core/InfoListItem'; +import * as colors from '@brightlayer-ui/colors'; +import { BatteryChargingFull } from '@mui/icons-material'; +import { ChannelValue } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; +import Box from '@mui/material/Box'; +import Typography from '@mui/material/Typography'; + +export const InfoListItemWithRightComponentExample = (): JSX.Element => ( + + } + leftComponent={ + + + 8:32 AM + + 11/21/21 + + } + rightComponent={} + /> + +); diff --git a/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithStatusColor.tsx b/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithStatusColor.tsx new file mode 100644 index 000000000..c5ed9844c --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithStatusColor.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { InfoListItemWithStatusColorExample } from './InfoListItemWithStatusColorExample'; + +const codeSnippet = `} + avatar + statusColor='#2ca618' +/>`; + +export const InfoListItemWithStatusColor = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithStatusColorExample.tsx b/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithStatusColorExample.tsx new file mode 100644 index 000000000..3623dd8dc --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/examples/InfoListItemWithStatusColorExample.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { InfoListItem } from '@brightlayer-ui/react-components/core/InfoListItem'; +import * as colors from '@brightlayer-ui/colors'; +import { OfflineBolt } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; + +export const InfoListItemWithStatusColorExample = (): JSX.Element => ( + + } + avatar + statusColor={colors.green[700]} + /> + +); diff --git a/docs/images/infoListItem.png b/docs/src/componentDocs/InfoListItem/images/infoListItem.png similarity index 100% rename from docs/images/infoListItem.png rename to docs/src/componentDocs/InfoListItem/images/infoListItem.png diff --git a/docs/InfoListItem.md b/docs/src/componentDocs/InfoListItem/markdown/InfoListItemAPIDocs.mdx similarity index 78% rename from docs/InfoListItem.md rename to docs/src/componentDocs/InfoListItem/markdown/InfoListItemAPIDocs.mdx index c357ac498..8506aedf0 100644 --- a/docs/InfoListItem.md +++ b/docs/src/componentDocs/InfoListItem/markdown/InfoListItemAPIDocs.mdx @@ -1,31 +1,34 @@ -# Info List Item - -The `` is intended to be used in [``](https://material-ui.com/api/list/) views. It positions a title as well as optional subtitle(s), icon, and status stripe. - -Info List Items in a variety of styles +import Box from '@mui/material/Box'; +import InfoListItem from '../images/infoListItem.png'; +import { DOCS_BRANCH } from '../../../shared/constants'; -## Usage - -```tsx -import { InfoListItem } from '@brightlayer-ui/react-components'; -import { GradeA, Leaf, CurrentCircled, VoltageCircled, Temp } from '@brightlayer-ui/icons-mui'; -import * as Colors from '@brightlayer-ui/colors'; -... -} -/> -``` - -## API +# Info List Item -
+The `` is intended to be used in [``](https://mui.com/api/list/) views. It positions a title as well as optional subtitle(s), icon, and status stripe. + + + + + +### Info List Item API + + | Prop Name | Description | Type | Required | Default | -| ------------------- | -------------------------------------------------------------------------------------- | ------------------------------------ | -------- | -------------- | +| :------------------ | :------------------------------------------------------------------------------------- | :----------------------------------- | :------- | :------------- | | avatar | Show colored background for icon | `boolean` | no | false | | backgroundColor | The color used for the background | `string` | no | | | chevron | Add a chevron icon on the right | `boolean` | no | false | @@ -52,22 +55,25 @@ import * as Colors from '@brightlayer-ui/colors'; | wrapSubtitle | Whether to wrap subtitle on overflow | `boolean` | no | false | | wrapTitle | Whether to wrap title on overflow | `boolean` | no | false | -
+
-Any other props will be provided to the root element [**Material UI ListItem**](https://material-ui.com/api/list-item/). +Any other props will be provided to the root element [**Material UI ListItem**](https://mui.com/api/list-item/). ### Style Overrides You can override the default styles used by Brightlayer UI by: - using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + | Name | Global CSS Class | Description | -| ------------------ | ------------------------------------ | --------------------------------------------------- | +| :----------------- | :----------------------------------- | :-------------------------------------------------- | | root | .BluiInfoListItem-root | Styles applied to the root element | | avatar | .BluiInfoListItem-avatar | Styles applied to the Avatar element | | chevron | .BluiInfoListItem-chevron | Styles applied to the chevron element | @@ -82,28 +88,4 @@ For more details on styling options check out our [Styling Guide](https://github | subtitle | .BluiInfoListItem-subtitle | Styles applied to the subtitle element | | title | .BluiInfoListItem-title | Styles applied to the title element | -## Tips - -You can render the `` as a link by using the [``](https://reactrouter.com/web/api/Link) component from `react-router-dom` (recommended), or the native anchor tag ``. This allows you to perform helpful actions such as opening a link in a new browser tab. - -```tsx -import { Link } from 'react-router-dom'; - - -``` - -```tsx - -``` + diff --git a/docs/src/componentDocs/InfoListItem/markdown/InfoListItemExamples.mdx b/docs/src/componentDocs/InfoListItem/markdown/InfoListItemExamples.mdx new file mode 100644 index 000000000..3e7727192 --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/markdown/InfoListItemExamples.mdx @@ -0,0 +1,35 @@ +import { DenseInfoListItem } from '../examples/DenseInfoListItem'; +import { InfoListItemWithIcon } from '../examples/InfoListItemWithIcon'; +import { InfoListItemWithStatusColor } from '../examples/InfoListItemWithStatusColor'; +import { InfoListItemWithRightComponent } from '../examples/InfoListItemWithRightComponent'; +import { InfoListItemInList } from '../examples/InfoListItemInList'; + +## Info List Item + +An `` is a wrapper around the [MUI List Item](https://mui.com/material-ui/api/list-item/) that provides convenient styling and content arrangement options. A basic use case displays a combination of title, subtitle, and icon. + + + +## Showing Lots of List Items + +When showing many list items, you can use the `dense` prop to reduce their vertical padding and fit more list items on the page. + + + +## Indicating Status + +You can apply a status to a list item using the `statusColor` prop. This will apply a colored stripe on the side of the list item and can be paired with the `avatar` prop to add additional highlighting around the icon. + + + +## Adding Additional Content + +If you want to show additional content in the list item, such as a timestamp or action buttons, these can be provided through the `leftComponent` and / or `rightComponent` props. + + + +## Clickable List Items + +If you want your list items to be clickable, add an `onClick` handler (you can also add a ripple effect by setting the `ripple` prop to true). + + diff --git a/docs/src/componentDocs/InfoListItem/playground/InfoListItemConfig.tsx b/docs/src/componentDocs/InfoListItem/playground/InfoListItemConfig.tsx new file mode 100644 index 000000000..638b6bbc3 --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/playground/InfoListItemConfig.tsx @@ -0,0 +1,185 @@ +import { ComponentType } from '../../../__types__'; +import * as Colors from '@brightlayer-ui/colors'; + +export const infoListItemConfig: ComponentType = { + componentName: 'Info List Item', + props: [ + { + propName: 'avatar', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Show colored background for icon', + required: false, + defaultValue: false, + }, + { + propName: 'backgroundColor', + inputType: 'colorPicker', + inputValue: Colors.white[50], + propType: 'string', + helperText: 'The color used for the background ', + required: false, + }, + { + propName: 'chevron', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Add a chevron icon on the right', + required: false, + defaultValue: false, + }, + { + propName: 'chevronColor', + inputType: 'colorPicker', + inputValue: Colors.gray[500], + propType: 'string', + helperText: 'Color override for the chevron icon', + required: false, + }, + { + propName: 'dense', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Smaller height row with less padding', + required: false, + defaultValue: false, + }, + { + propName: 'divider', + inputType: 'select', + inputValue: 'none', + options: ['none', 'full', 'partial'], + propType: 'string', + helperText: 'Show a row separator below the row', + required: false, + defaultValue: 'none', + }, + { + propName: 'fontColor', + inputType: 'colorPicker', + inputValue: Colors.black[500], + propType: 'string', + helperText: 'Main text color', + required: false, + }, + { + propName: 'hidePadding', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Remove left padding if no icon is used', + required: false, + defaultValue: false, + }, + { + propName: 'icon', + inputType: 'select', + inputValue: '', + options: ['undefined', ''], + propType: 'JSX.Element', + helperText: 'A component to render for the icon', + required: false, + defaultValue: 'undefined', + }, + { + propName: 'iconAlign', + inputType: 'select', + inputValue: 'left', + options: ['left', 'center', 'right'], + propType: 'string', + helperText: 'Icon alignment when avatar is set to false', + required: false, + defaultValue: 'left', + }, + { + propName: 'iconColor', + inputType: 'colorPicker', + inputValue: Colors.black[500], + propType: 'string', + helperText: 'The color used for the icon', + required: false, + }, + { + propName: 'info', + inputType: 'string', + inputValue: 'more info...', + propType: 'string | Array', + helperText: 'The text to show on the third line', + required: false, + }, + { + propName: 'ripple', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Whether to apply material ripple effect on click', + required: false, + defaultValue: false, + }, + { + propName: 'statusColor', + inputType: 'colorPicker', + inputValue: Colors.blue[500], + propType: 'string', + helperText: 'Status stripe and icon color', + required: false, + }, + { + propName: 'subtitle', + inputType: 'string', + inputValue: 'with all customizable properties', + propType: 'string | Array', + helperText: 'The text to show on the second line', + required: false, + }, + { + propName: 'title', + inputType: 'string', + inputValue: 'Info List Item', + propType: 'ReactNode', + helperText: 'The text to show on the first line', + required: true, + }, + { + propName: 'wrapInfo', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Whether to wrap info on overflow', + required: false, + defaultValue: false, + }, + { + propName: 'wrapSubtitle', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Whether to wrap subtitle on overflow', + required: false, + defaultValue: false, + }, + { + propName: 'wrapTitle', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Whether to wrap title on overflow', + required: false, + defaultValue: false, + }, + { + propName: 'disabled', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Whether to Disable Info List Item', + required: false, + defaultValue: false, + }, + ], +}; + +export default infoListItemConfig; diff --git a/docs/src/componentDocs/InfoListItem/playground/PlaygroundPage.tsx b/docs/src/componentDocs/InfoListItem/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..77aa4ccf5 --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import InfoListItemPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const InfoListItemPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/InfoListItem/playground/PreviewComponent.tsx b/docs/src/componentDocs/InfoListItem/playground/PreviewComponent.tsx new file mode 100644 index 000000000..3ded385c9 --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/playground/PreviewComponent.tsx @@ -0,0 +1,77 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { InfoListItem } from '@brightlayer-ui/react-components/core/InfoListItem'; +import { createProps, getIcon, hideDefaultPropsFromSnippet, removeEmptyLines } from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; + +export const PreviewComponent = (): JSX.Element => { + const infoListItemJson = useAppSelector((state: RootState) => state.componentsPropsState.infoListItemComponent); + + const infoListItemProps = createProps(infoListItemJson.props as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any, groupType?: string): string => + hideDefaultPropsFromSnippet(infoListItemJson, propName, currentValue, groupType); + + const generateCodeSnippet = (): string => { + const jsx = ` { + console.log("clicked"); + }} +/>`; + return removeEmptyLines(jsx); + }; + + return ( + {}} + /> + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/InfoListItem/playground/PropsPlayground.tsx b/docs/src/componentDocs/InfoListItem/playground/PropsPlayground.tsx new file mode 100644 index 000000000..167b49c70 --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const infoListItemJson = useAppSelector((state: RootState) => state.componentsPropsState.infoListItemComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/InfoListItem/playground/index.tsx b/docs/src/componentDocs/InfoListItem/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/InfoListItem/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/ListItemTag/examples/ListItemTag.tsx b/docs/src/componentDocs/ListItemTag/examples/ListItemTag.tsx new file mode 100644 index 000000000..5f229d98e --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/examples/ListItemTag.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ListItemTagExample } from './ListItemTagExample'; + +const codeSnippet = ` +`; + +export const ListItemTag = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ListItemTag/examples/ListItemTagExample.tsx b/docs/src/componentDocs/ListItemTag/examples/ListItemTagExample.tsx new file mode 100644 index 000000000..28065619e --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/examples/ListItemTagExample.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { ListItemTag } from '@brightlayer-ui/react-components/core/ListItemTag'; +import { ExampleShowcase } from '../../../shared'; + +export const ListItemTagExample = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/ListItemTag/examples/ListItemTagUsingInfoListItem.tsx b/docs/src/componentDocs/ListItemTag/examples/ListItemTagUsingInfoListItem.tsx new file mode 100644 index 000000000..c29509a84 --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/examples/ListItemTagUsingInfoListItem.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ListItemTagUsingInfoListItemExample } from './ListItemTagUsingInfoListItemExample'; + +const codeSnippet = `} + title="Info List Item" + subtitle="with a ListItemTag component to the right" + backgroundColor="white" + iconColor="text.primary" + rightComponent={ + + + + + } +/>`; + +export const ListItemTagUsingInfoListItem = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ListItemTag/examples/ListItemTagUsingInfoListItemExample.tsx b/docs/src/componentDocs/ListItemTag/examples/ListItemTagUsingInfoListItemExample.tsx new file mode 100644 index 000000000..fa08217bd --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/examples/ListItemTagUsingInfoListItemExample.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import { ListItemTag } from '@brightlayer-ui/react-components/core/ListItemTag'; +import { InfoListItem } from '@brightlayer-ui/react-components/core/InfoListItem'; +import Box from '@mui/material/Box'; +import BatteryChargingFull from '@mui/icons-material/BatteryChargingFull'; +import * as Colors from '@brightlayer-ui/colors'; +import { ExampleShowcase } from '../../../shared'; + +export const ListItemTagUsingInfoListItemExample = (): JSX.Element => ( + + } + title="Info List Item" + subtitle="with a ListItemTag component to the right" + backgroundColor="white" + iconColor="text.primary" + rightComponent={ + + + + + } + /> + +); diff --git a/docs/src/componentDocs/ListItemTag/examples/ListItemTagWithVariants.tsx b/docs/src/componentDocs/ListItemTag/examples/ListItemTagWithVariants.tsx new file mode 100644 index 000000000..0bdeb3e19 --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/examples/ListItemTagWithVariants.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ListItemTagWithVariantsExample } from './ListItemTagWithVariantsExample'; + +const codeSnippet = ` + +`; + +export const ListItemTagWithVariants = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ListItemTag/examples/ListItemTagWithVariantsExample.tsx b/docs/src/componentDocs/ListItemTag/examples/ListItemTagWithVariantsExample.tsx new file mode 100644 index 000000000..e8609edd7 --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/examples/ListItemTagWithVariantsExample.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import { ListItemTag } from '@brightlayer-ui/react-components/core/ListItemTag'; +import { ExampleShowcase } from '../../../shared'; +import Stack from '@mui/material/Stack'; + +export const ListItemTagWithVariantsExample = (): JSX.Element => ( + + + + + + + +); diff --git a/docs/src/componentDocs/ListItemTag/examples/index.tsx b/docs/src/componentDocs/ListItemTag/examples/index.tsx new file mode 100644 index 000000000..b7f14af87 --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/examples/index.tsx @@ -0,0 +1,3 @@ +export * from './ListItemTag'; +export * from './ListItemTagUsingInfoListItem'; +export * from './ListItemTagWithVariants'; diff --git a/docs/images/listItemTag.png b/docs/src/componentDocs/ListItemTag/images/listItemTag.png similarity index 100% rename from docs/images/listItemTag.png rename to docs/src/componentDocs/ListItemTag/images/listItemTag.png diff --git a/docs/src/componentDocs/ListItemTag/markdown/ListItemTagAPIDocs.mdx b/docs/src/componentDocs/ListItemTag/markdown/ListItemTagAPIDocs.mdx new file mode 100644 index 000000000..82a4e9388 --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/markdown/ListItemTagAPIDocs.mdx @@ -0,0 +1,54 @@ +import Box from '@mui/material/Box'; +import ListItemTag from '../images/listItemTag.png'; +import { DOCS_BRANCH } from '../../../shared/constants'; + +# List Item Tag + +`` is a text item with a colored background and rounded corners that is used to tag lists. + + + + + +### List Item Tag API + + +| Prop Name | Description | Type | Required | Default | +| :-------------- | :---------------------------- | :------- | :------- | :-------------------------- | +| label | The label text | `string` | yes | | +| fontColor | Color of the label | `string` | no | varies for light/dark theme | +| backgroundColor | Color of the label background | `string` | no | varies for light/dark theme | + + +Any other props will be provided to the root element [**Material UI Typography**](https://mui.com/api/typography/). + +### Style Overrides + +You can override the default styles used by Brightlayer UI by: + +- using the `sx` prop +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet + +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + +| Name | Global CSS Class | Description | +| :--- | :-------------------- | :--------------------------------- | +| root | .BluiListItemTag-root | Styles applied to the root element | + + diff --git a/docs/src/componentDocs/ListItemTag/markdown/ListItemTagExamples.mdx b/docs/src/componentDocs/ListItemTag/markdown/ListItemTagExamples.mdx new file mode 100644 index 000000000..c22f97eb0 --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/markdown/ListItemTagExamples.mdx @@ -0,0 +1,19 @@ +import { ListItemTag, ListItemTagUsingInfoListItem, ListItemTagWithVariants } from '../examples'; + +## List Item Tag + +A `` is a stylized Typography element used for labeling. The text and background colors are customizable via the `fontColor` and `backgroundColor` props. + + + +## Using Variants + +The List Item Tag is an extension of the [MUI Typography](https://mui.com/material-ui/api/typography/) element, so you can also apply different text styles with the `variant` prop. + + + +## Using within an Info List Item + +The List Item Tag commonly appears within an [Info List Item](/components/info-list-item/examples). + + diff --git a/docs/src/componentDocs/ListItemTag/playground/ListItemTagConfig.tsx b/docs/src/componentDocs/ListItemTag/playground/ListItemTagConfig.tsx new file mode 100644 index 000000000..dacdb7bd0 --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/playground/ListItemTagConfig.tsx @@ -0,0 +1,34 @@ +import { ComponentType } from '../../../__types__'; +import * as Colors from '@brightlayer-ui/colors'; + +export const listItemTagConfig: ComponentType = { + componentName: 'List Item Tag', + props: [ + { + propName: 'backgroundColor', + inputType: 'colorPicker', + inputValue: Colors.red[500], + propType: 'string', + helperText: 'Color of the label background', + required: false, + }, + { + propName: 'fontColor', + inputType: 'colorPicker', + inputValue: Colors.white[50], + propType: 'string', + helperText: 'Color of the label', + required: false, + }, + { + propName: 'label', + inputType: 'string', + inputValue: 'active', + propType: 'string', + helperText: 'The label text', + required: true, + }, + ], +}; + +export default listItemTagConfig; diff --git a/docs/src/componentDocs/ListItemTag/playground/PlaygroundPage.tsx b/docs/src/componentDocs/ListItemTag/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..30457a8e7 --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import ListItemTagPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const ListItemTagPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/ListItemTag/playground/PreviewComponent.tsx b/docs/src/componentDocs/ListItemTag/playground/PreviewComponent.tsx new file mode 100644 index 000000000..a885f15ab --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/playground/PreviewComponent.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { createProps, hideDefaultPropsFromSnippet } from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import { ListItemTag } from '@brightlayer-ui/react-components/core/ListItemTag'; + +export const PreviewComponent = (): JSX.Element => { + const listItemTagJson = useAppSelector((state: RootState) => state.componentsPropsState.listItemTagComponent); + const listItemTagProps = createProps(listItemTagJson.props as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any): string => + hideDefaultPropsFromSnippet(listItemTagJson, propName, currentValue, 'props'); + + const generateCodeSnippet = (): string => { + const jsx = ``; + return jsx; + }; + + return ( + + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/ListItemTag/playground/PropsPlayground.tsx b/docs/src/componentDocs/ListItemTag/playground/PropsPlayground.tsx new file mode 100644 index 000000000..5ccc580db --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const listItemTagJson = useAppSelector((state: RootState) => state.componentsPropsState.listItemTagComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/ListItemTag/playground/index.tsx b/docs/src/componentDocs/ListItemTag/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/ListItemTag/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithActions.tsx b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithActions.tsx new file mode 100644 index 000000000..0af5e72fe --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithActions.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ScoreCardWithActionsExample } from './ScoreCardWithActionsExample'; + +const codeSnippet = `, , ]} + actionRow={ + + + + } + badge={ + + } + label="Grade" + iconSize={72} + iconBackgroundColor={colors.white[50]} + ChannelValueProps={{ value: '98', units: '/100', unitSpace: 'hide' }} + /> + + } + badgeOffset={-54} + > + + + + + +`; + +export const ScoreCardWithActions = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithActionsExample.tsx b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithActionsExample.tsx new file mode 100644 index 000000000..48b293b1a --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithActionsExample.tsx @@ -0,0 +1,45 @@ +import React from 'react'; +import { Hero, HeroBanner, InfoListItem, ScoreCard } from '@brightlayer-ui/react-components'; +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import ListItemText from '@mui/material/ListItemText'; +import { MoreVert, Settings, Star } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; +import Box from '@mui/material/Box'; +import { GradeA } from '@brightlayer-ui/icons-mui'; +import * as colors from '@brightlayer-ui/colors'; + +export const ScoreCardWithActionsExample = (): JSX.Element => ( + + + , , ]} + actionRow={ + + + + } + badge={ + + } + label="Grade" + iconSize={72} + iconBackgroundColor={colors.white[50]} + ChannelValueProps={{ value: '98', units: '/100', unitSpace: 'hide' }} + /> + + } + badgeOffset={-54} + > + + + + + + + + +); diff --git a/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithHeaderSubtitle.tsx b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithHeaderSubtitle.tsx new file mode 100644 index 000000000..9a8048c4c --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithHeaderSubtitle.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ScoreCardWithHeaderSubtitleExample } from './ScoreCardWithHeaderSubtitleExample'; + +const codeSnippet = ` + + + + + +`; + +export const ScoreCardWithHeaderSubtitle = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithHeaderSubtitleExample.tsx b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithHeaderSubtitleExample.tsx new file mode 100644 index 000000000..5005bdb0f --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithHeaderSubtitleExample.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { ScoreCard } from '@brightlayer-ui/react-components'; +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import ListItemText from '@mui/material/ListItemText'; +import { ExampleShowcase } from '../../../shared'; +import Box from '@mui/material/Box'; + +export const ScoreCardWithHeaderSubtitleExample = (): JSX.Element => ( + + + + + + + + + + + +); diff --git a/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithHeros.tsx b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithHeros.tsx new file mode 100644 index 000000000..b3d41c998 --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithHeros.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ScoreCardWithHerosExample } from './ScoreCardWithHerosExample'; + +const codeSnippet = ` + } + label="Temperature" + ChannelValueProps={{ value: 98, units: '°F' }} + sx={{ overflow: 'visible' }} + /> + } + label="Humidity" + ChannelValueProps={{ value: 54, units: '%' }} + /> +
+ } + > + + + + + +`; + +export const ScoreCardWithHeros = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithHerosExample.tsx b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithHerosExample.tsx new file mode 100644 index 000000000..b72da7249 --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithHerosExample.tsx @@ -0,0 +1,42 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import { Hero, HeroBanner, ScoreCard } from '@brightlayer-ui/react-components'; +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import ListItemText from '@mui/material/ListItemText'; +import { Moisture, Temp } from '@brightlayer-ui/icons-mui'; +import { ExampleShowcase } from '../../../shared'; + +export const ScoreCardWithHerosExample = (): JSX.Element => ( + + + + } + label="Temperature" + ChannelValueProps={{ value: 98, units: '°F' }} + sx={{ overflow: 'visible' }} + /> + } + label="Humidity" + ChannelValueProps={{ value: 54, units: '%' }} + /> + + } + > + + + + + + + + +); diff --git a/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithScoreBadge.tsx b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithScoreBadge.tsx new file mode 100644 index 000000000..d83176d50 --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithScoreBadge.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ScoreCardWithScoreBadgeExample } from './ScoreCardWithScoreBadgeExample'; + +const codeSnippet = ` + } + label={'Grade'} + iconSize={72} + iconBackgroundColor={colors.white[50]} + ChannelValueProps={{ value: '98', units: '/100', unitSpace: 'hide' }} + /> + + } + badgeOffset={-54} + > + + + + + +`; + +export const ScoreCardWithScoreBadge = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithScoreBadgeExample.tsx b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithScoreBadgeExample.tsx new file mode 100644 index 000000000..8ef549ff0 --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/examples/ScoreCardWithScoreBadgeExample.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import { Hero, HeroBanner, ScoreCard } from '@brightlayer-ui/react-components'; +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import ListItemText from '@mui/material/ListItemText'; +import { GradeA } from '@brightlayer-ui/icons-mui'; +import * as colors from '@brightlayer-ui/colors'; +import { ExampleShowcase } from '../../../shared'; + +export const ScoreCardWithScoreBadgeExample = (): JSX.Element => ( + + + + } + label="Grade" + iconSize={72} + iconBackgroundColor={colors.white[50]} + ChannelValueProps={{ value: '98', units: '/100', unitSpace: 'hide' }} + /> + + } + badgeOffset={-54} + > + + + + + + + + +); diff --git a/docs/images/scoreCard.png b/docs/src/componentDocs/ScoreCard/images/scoreCard.png similarity index 100% rename from docs/images/scoreCard.png rename to docs/src/componentDocs/ScoreCard/images/scoreCard.png diff --git a/docs/images/scoreCardAnatomy.png b/docs/src/componentDocs/ScoreCard/images/scoreCardAnatomy.png similarity index 100% rename from docs/images/scoreCardAnatomy.png rename to docs/src/componentDocs/ScoreCard/images/scoreCardAnatomy.png diff --git a/docs/images/scoreCard_alt.png b/docs/src/componentDocs/ScoreCard/images/scoreCard_alt.png similarity index 100% rename from docs/images/scoreCard_alt.png rename to docs/src/componentDocs/ScoreCard/images/scoreCard_alt.png diff --git a/docs/ScoreCard.md b/docs/src/componentDocs/ScoreCard/markdown/ScoreCardAPIDocs.mdx similarity index 59% rename from docs/ScoreCard.md rename to docs/src/componentDocs/ScoreCard/markdown/ScoreCardAPIDocs.mdx index 563508f10..871a4c38c 100644 --- a/docs/ScoreCard.md +++ b/docs/src/componentDocs/ScoreCard/markdown/ScoreCardAPIDocs.mdx @@ -1,64 +1,46 @@ +import Box from '@mui/material/Box'; +import ScoreCard from '../images/scoreCard.png'; +import ScoreCardAlt from '../images/scoreCard_alt.png'; +import { DOCS_BRANCH } from '../../../shared/constants'; + # Score Card Card component that calls attention to particular values. -
- Score Card with multiple highlighted values
- Score Card with single badge-style value
-
- -## Usage - -
- Score Card with labels on different parts
-
- -```tsx -import { Hero, HeroBanner, ScoreCard } from '@brightlayer-ui/react-components'; -import { List, Card, ListItem, ListItemText, ListItemSecondaryAction } from '@mui/material'; -import * as Colors from '@brightlayer-ui/colors'; -import MoreVert from '@mui/icons-material/MoreVert'; -import { Temp } from '@brightlayer-ui/icons-mui'; - -... - {}} />, - ]} - badge={ - - } - label={'Temperature'} - iconSize={48} - value={98} - units={'°F'} - fontSize={'normal'} - /> - - } - actionRow={ - - - - - - - } + - {/* Card Body Content */} - -``` - -## API - -
+ + + + +### Score Card API + + | Prop Name | Description | Type | Required | Default | -| --------------------- | ------------------------------------------- | ------------------ | -------- | ---------------------------- | +| :-------------------- | :------------------------------------------ | :----------------- | :------- | :--------------------------- | | actionItems | Icons to show to the right of the text | `JSX.Element[]` | no | | | actionLimit | Max number of actionItems in the header | `number` | no | 3 | | actionRow | Component to render for the footer | `JSX.Element` | no | | @@ -72,22 +54,25 @@ import { Temp } from '@brightlayer-ui/icons-mui'; | headerTitle | The primary text | `string` | yes | | | headerSubtitle | The secondary text | `string` | no | | -
+
-Any other props will be provided to the root element [**Material UI Card**](https://material-ui.com/api/card/). +Any other props will be provided to the root element [**Material UI Card**](https://mui.com/api/card/). ### Style Overrides You can override the default styles used by Brightlayer UI by: - using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + | Name | Global CSS Class | Description | -| ---------------- | ------------------------------- | ------------------------------------------------------- | +| :--------------- | :------------------------------ | :------------------------------------------------------ | | root | .BluiScoreCard-root | Styles applied to the root element | | actionItems | .BluiScoreCard-actionItems | Styles applied to the action items container | | badgeWrapper | .BluiScoreCard-badgeWrapper | Styles applied to the badge container | @@ -99,3 +84,5 @@ For more details on styling options check out our [Styling Guide](https://github | headerInfo | .BluiScoreCard-headerInfo | Styles applied to the tertiary text element | | headerTitle | .BluiScoreCard-headerTitle | Styles applied to the title element | | headerSubtitle | .BluiScoreCard-headerSubtitle | Styles applied to the subtitle element | + + diff --git a/docs/src/componentDocs/ScoreCard/markdown/ScoreCardExamples.mdx b/docs/src/componentDocs/ScoreCard/markdown/ScoreCardExamples.mdx new file mode 100644 index 000000000..85870fcbc --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/markdown/ScoreCardExamples.mdx @@ -0,0 +1,28 @@ +import { ScoreCardWithHeaderSubtitle } from '../examples/ScoreCardWithHeaderSubtitle'; +import { ScoreCardWithActions } from '../examples/ScoreCardWithActions'; +import { ScoreCardWithHeros } from '../examples/ScoreCardWithHeros'; +import { ScoreCardWithScoreBadge } from '../examples/ScoreCardWithScoreBadge'; + +## Score Card + +A `` is a card component that calls attention to particular values. It is frequently seen on dashboard interfaces. + + + +## Adding a Badge + +A Score Card reserves space for a `badge` element. This space is commonly used to show [Heroes](/components/hero/examples). + + + +## Adjusting the Badge + +The badge position can be adjusted via the `badgeOffset` prop. + + + +## Adding Actions + +A Score Card can be interactive. Actions can be added in the header through the `actionItems` prop or at the bottom of the card via the `actionRow` prop. + + diff --git a/docs/src/componentDocs/ScoreCard/playground/PlaygroundPage.tsx b/docs/src/componentDocs/ScoreCard/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..61104aebf --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import ScoreCardPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const ScoreCardPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/ScoreCard/playground/PreviewComponent.tsx b/docs/src/componentDocs/ScoreCard/playground/PreviewComponent.tsx new file mode 100644 index 000000000..a70253f06 --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/playground/PreviewComponent.tsx @@ -0,0 +1,199 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { ScoreCard } from '@brightlayer-ui/react-components/core/ScoreCard'; +import { InfoListItem } from '@brightlayer-ui/react-components/core/InfoListItem'; +import { Hero } from '@brightlayer-ui/react-components/core/Hero'; +import { HeroBanner } from '@brightlayer-ui/react-components/core/HeroBanner'; +import Cloud from '@mui/icons-material/Cloud'; +import Favorite from '@mui/icons-material/Favorite'; +import Humidity from '@brightlayer-ui/icons-mui/Moisture'; +import List from '@mui/material/List'; +import ListAlt from '@mui/icons-material/ListAlt'; +import Mail from '@mui/icons-material/Mail'; +import MoreVert from '@mui/icons-material/MoreVert'; +import Notifications from '@mui/icons-material/Notifications'; +import Search from '@mui/icons-material/Search'; +import Temp from '@brightlayer-ui/icons-mui/Temp'; +import { createProps, getImage, hideDefaultPropsFromSnippet, removeEmptyLines } from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; + +import * as Colors from '@brightlayer-ui/colors'; + +export const PreviewComponent = (): JSX.Element => { + const scoreCardJson = useAppSelector((state: RootState) => state.componentsPropsState.scoreCardComponent); + + const scoreCardProps = createProps(scoreCardJson.props as PropsType[]); + const scoreCardOtherProps = createProps(scoreCardJson.otherProps as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any): string => + hideDefaultPropsFromSnippet(scoreCardJson, propName, currentValue, 'props'); + + const actionItems = [ + , + , + , + , + , + , + ]; + + const heroes: JSX.Element[] = [ + } + label={'Temperature'} + iconSize={48} + iconBackgroundColor={Colors.white[50]} + ChannelValueProps={{ value: 98, units: '°F' }} + fontSize={'normal'} + />, + } + label={'Humidity'} + ChannelValueProps={{ value: 54, units: '%' }} + iconSize={48} + iconBackgroundColor={Colors.white[50]} + fontSize={'normal'} + />, + ]; + + const showHeroSection = (noOfHeroes: number): string => { + switch (noOfHeroes) { + case 0: + return ''; + case 1: + return `badge={ + + } + label={"Temperature"} + iconSize={48} + iconBackgroundColor={"${Colors.white[50]}"} + ChannelValueProps={{ value: 98, units: "°F" }} + fontSize={"normal"} + /> + + }`; + case 2: + return `badge={ + + } + label={"Temperature"} + iconSize={48} + iconBackgroundColor={"${Colors.white[50]}"} + ChannelValueProps={{ value: 98, units: "°F" }} + fontSize={"normal"} + /> + } + label={"Humidity"} + ChannelValueProps={{ value: 54, units: "%" }} + iconSize={48} + iconBackgroundColor={"${Colors.white[50]}"} + fontSize={"normal"} + /> + + }`; + default: + return ''; + } + }; + + const generateCodeSnippet = (): string => { + const jsx = `, + , + , + , + , + , + ]} + actionRow={ + + + + } + ${showHeroSection(scoreCardOtherProps.numberofHeroes)} + ${toggleDefaultProp('badgeOffset', scoreCardProps.badgeOffset)} +> + + } + /> + } + /> + } + /> + +`; + return removeEmptyLines(jsx); + }; + + return ( + + + + } + badge={{heroes.slice(0, scoreCardOtherProps.numberofHeroes)}} + badgeOffset={scoreCardProps.badgeOffset} + > + + } /> + } + /> + } /> + + + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/ScoreCard/playground/PropsPlayground.tsx b/docs/src/componentDocs/ScoreCard/playground/PropsPlayground.tsx new file mode 100644 index 000000000..0fec34b98 --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const scoreCardJson = useAppSelector((state: RootState) => state.componentsPropsState.scoreCardComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/ScoreCard/playground/ScoreCardConfig.tsx b/docs/src/componentDocs/ScoreCard/playground/ScoreCardConfig.tsx new file mode 100644 index 000000000..42d1e3c78 --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/playground/ScoreCardConfig.tsx @@ -0,0 +1,106 @@ +import { ComponentType } from '../../../__types__'; +import * as Colors from '@brightlayer-ui/colors'; + +export const scoreCardConfig: ComponentType = { + componentName: 'Score Card', + props: [ + { + propName: 'actionLimit', + inputType: 'number', + inputValue: 3, + propType: 'number', + helperText: 'Max number of actionItems in the header', + required: false, + rangeData: { + min: 1, + max: 6, + step: 1, + }, + defaultValue: 3, + }, + { + propName: 'badgeOffset', + inputType: 'number', + inputValue: -40, + propType: 'number', + helperText: 'Vertical offset for the badge component', + required: false, + rangeData: { + min: -50, + max: 50, + step: 10, + }, + defaultValue: 0, + }, + { + propName: 'headerBackgroundImage', + inputType: 'select', + inputValue: 'undefined', + options: ['undefined', 'Pattern'], + propType: 'string', + helperText: 'An image to display in the header', + required: false, + defaultValue: 'undefined', + }, + { + propName: 'headerColor', + inputType: 'colorPicker', + inputValue: Colors.blue[500], + propType: 'string', + helperText: 'The color of the header', + required: false, + }, + { + propName: 'headerFontColor', + inputType: 'colorPicker', + inputValue: Colors.white[50], + propType: 'string', + helperText: 'The color for text and icons in header', + required: false, + defaultValue: 'white', + }, + { + propName: 'headerInfo', + inputType: 'string', + inputValue: '4 Devices', + propType: 'string', + helperText: 'Tertiary text', + required: false, + }, + { + propName: 'headerTitle', + inputType: 'string', + inputValue: 'Substation 3', + propType: 'string', + helperText: 'The primary text', + required: true, + }, + { + propName: 'headerSubtitle', + inputType: 'string', + inputValue: 'High Humidity Alarm', + propType: 'string', + helperText: 'The secondary text', + required: false, + }, + ], + otherProps: [ + { + propName: 'numberofHeroes', + inputType: 'number', + inputValue: 1, + propType: 'number', + helperText: 'Number of heroes to render as badges', + required: false, + rangeData: { + min: 0, + max: 2, + step: 1, + }, + defaultValue: 1, + label: 'Number of Heroes', + }, + ], +}; + +export default scoreCardConfig; diff --git a/docs/src/componentDocs/ScoreCard/playground/index.tsx b/docs/src/componentDocs/ScoreCard/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/ScoreCard/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/Spacer/examples/SpacerWithFlex.tsx b/docs/src/componentDocs/Spacer/examples/SpacerWithFlex.tsx new file mode 100644 index 000000000..cb8ab47c6 --- /dev/null +++ b/docs/src/componentDocs/Spacer/examples/SpacerWithFlex.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { SpacerWithFlexExample } from './SpacerWithFlexExample'; + +const codeSnippet = ` + 1 + 2 + 3 +`; + +export const SpacerWithFlex = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/Spacer/examples/SpacerWithFlexExample.tsx b/docs/src/componentDocs/Spacer/examples/SpacerWithFlexExample.tsx new file mode 100644 index 000000000..378ac18f0 --- /dev/null +++ b/docs/src/componentDocs/Spacer/examples/SpacerWithFlexExample.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { Spacer } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; +import * as colors from '@brightlayer-ui/colors'; + +export const SpacerWithFlexExample = (): JSX.Element => ( + + + + 1 + + + 2 + + + 3 + + + +); diff --git a/docs/src/componentDocs/Spacer/examples/SpacerWithPixel.tsx b/docs/src/componentDocs/Spacer/examples/SpacerWithPixel.tsx new file mode 100644 index 000000000..37a2ba79c --- /dev/null +++ b/docs/src/componentDocs/Spacer/examples/SpacerWithPixel.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { SpacerWithPixelExample } from './SpacerWithPixelExample'; + +const codeSnippet = ` + + 25 + 75 + 200 + + + 25 + 50 + 75 + +`; + +export const SpacerWithPixel = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/Spacer/examples/SpacerWithPixelExample.tsx b/docs/src/componentDocs/Spacer/examples/SpacerWithPixelExample.tsx new file mode 100644 index 000000000..5943d9ee9 --- /dev/null +++ b/docs/src/componentDocs/Spacer/examples/SpacerWithPixelExample.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { Spacer } from '@brightlayer-ui/react-components'; +import * as colors from '@brightlayer-ui/colors'; +import { ExampleShowcase } from '../../../shared'; + +export const SpacerWithPixelExample = (): JSX.Element => ( + + + + + 25 + + + 75 + + + 200 + + + + + + 25 + + + 50 + + + 75 + + + + +); diff --git a/docs/images/spacer.png b/docs/src/componentDocs/Spacer/images/spacer.png similarity index 100% rename from docs/images/spacer.png rename to docs/src/componentDocs/Spacer/images/spacer.png diff --git a/docs/src/componentDocs/Spacer/markdown/SpacerAPIDocs.mdx b/docs/src/componentDocs/Spacer/markdown/SpacerAPIDocs.mdx new file mode 100644 index 000000000..1595f93cf --- /dev/null +++ b/docs/src/componentDocs/Spacer/markdown/SpacerAPIDocs.mdx @@ -0,0 +1,58 @@ +import Box from '@mui/material/Box'; +import Spacer from '../images/spacer.png'; +import { DOCS_BRANCH } from '../../../shared/constants'; + +# Spacer + +An invisible utility component that acts as a spacer element in various layouts. It works with flexbox sizing or fixed sizing. + + + + + +### Spacer API + + + +| Prop Name | Description | Type | Required | Default | Examples | +| :-------- | :-------------------------------------- | :------------------- | :------- | :------ | :-------------------------- | +| classes | Classes object to override styles | `SpacerClasses` | no | | `{root: 'customRootClass'}` | +| flex | Flex grow/shrink value for flex layouts | `number` | no | 1 | | +| height | Height (in px) for static layouts | `number` \| `string` | no | | | +| width | Width (in px) for static layouts | `number` \| `string` | no | | | + + + +Any other props supplied will be provided to the root element ([``](https://mui.com/material-ui/api/box/)). + +### Style Overrides + +You can override the default styles used by Brightlayer UI by: + +- using the `sx` prop +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet + +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + + +| Name | Global CSS Class | Description | +| :--- | :--------------- | :--------------------------------- | +| root | .BluiSpacer-root | Styles applied to the root element | + + diff --git a/docs/src/componentDocs/Spacer/markdown/SpacerExamples.mdx b/docs/src/componentDocs/Spacer/markdown/SpacerExamples.mdx new file mode 100644 index 000000000..cfb4d996e --- /dev/null +++ b/docs/src/componentDocs/Spacer/markdown/SpacerExamples.mdx @@ -0,0 +1,14 @@ +import { SpacerWithFlex } from '../examples/SpacerWithFlex'; +import { SpacerWithPixel } from '../examples/SpacerWithPixel'; + +## Spacer with Flex + +A `` is a utility component that adds space between elements (such as [Drawer Nav Groups](/components/drawer-nav-group/examples)). The Spacer is typically used in a flex layout. + + + +## Spacer with Pixels + +A Spacer can also be given fixed dimensions instead of flex for static layouts. In order to use fixed dimensions the `flex` prop must be set to zero. + + diff --git a/docs/src/componentDocs/Spacer/playground/PlaygroundPage.tsx b/docs/src/componentDocs/Spacer/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..02efb7e56 --- /dev/null +++ b/docs/src/componentDocs/Spacer/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import SpacerPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const SpacerPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/Spacer/playground/PreviewComponent.tsx b/docs/src/componentDocs/Spacer/playground/PreviewComponent.tsx new file mode 100644 index 000000000..5aee88500 --- /dev/null +++ b/docs/src/componentDocs/Spacer/playground/PreviewComponent.tsx @@ -0,0 +1,187 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { Spacer } from '@brightlayer-ui/react-components/core/Utility/Spacer'; +import { createProps } from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import Box from '@mui/material/Box'; + +import * as Colors from '@brightlayer-ui/colors'; +import Typography from '@mui/material/Typography'; + +export const PreviewComponent = (): JSX.Element => { + const spacerJson = useAppSelector((state: RootState) => state.componentsPropsState.spacerComponent); + + const spacerProps = createProps(spacerJson.props as PropsType[]); + const spacerOtherProps = createProps(spacerJson.otherProps as PropsType[]); + + const showFlexLayoutSnippet = (): string => ` + Horizontal + + + 1 + + + 2 + + + 3 + + + Vertical + + + 1 + + + 2 + + + 3 + + + + `; + + const showStaticLayoutSnippet = (): string => ` + Horizontal + + + 1 + + + 2 + + + 3 + + + Vertical + + + 1 + + + 2 + + + 3 + + + + `; + + const generateCodeSnippet = (): string => { + const jsx = `${spacerOtherProps.useFlex ? showFlexLayoutSnippet() : showStaticLayoutSnippet()}`; + return jsx; + }; + + return ( + + Horizontal Flex Layout + + + 1 + + + 2 + + + 3 + + + Vertical Flex Layout + + + 1 + + + 2 + + + 3 + + +
+ ) : ( + + Horizontal Static Layout + + + 1 + + + 2 + + + 3 + + + Vertical Static Layout + + + 1 + + + 2 + + + 3 + + + + ) + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/Spacer/playground/PropsPlayground.tsx b/docs/src/componentDocs/Spacer/playground/PropsPlayground.tsx new file mode 100644 index 000000000..3a210978b --- /dev/null +++ b/docs/src/componentDocs/Spacer/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const spacerJson = useAppSelector((state: RootState) => state.componentsPropsState.spacerComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/Spacer/playground/SpacerConfig.tsx b/docs/src/componentDocs/Spacer/playground/SpacerConfig.tsx new file mode 100644 index 000000000..c03da5384 --- /dev/null +++ b/docs/src/componentDocs/Spacer/playground/SpacerConfig.tsx @@ -0,0 +1,104 @@ +import { ComponentType } from '../../../__types__'; + +export const spacerConfig: ComponentType = { + componentName: 'Spacer', + props: [ + { + propName: 'flex1', + inputType: 'number', + inputValue: 1, + propType: 'number', + helperText: 'Flex grow/shrink value for flex layouts', + required: false, + rangeData: { + min: 1, + max: 5, + step: 1, + }, + label: 'Item 1 Flex', + }, + { + propName: 'flex2', + inputType: 'number', + inputValue: 1, + propType: 'number', + helperText: 'Flex grow/shrink value for flex layouts', + required: false, + rangeData: { + min: 1, + max: 5, + step: 1, + }, + label: 'Item 2 Flex', + }, + { + propName: 'flex3', + inputType: 'number', + inputValue: 1, + propType: 'number', + helperText: 'Flex grow/shrink value for flex layouts', + required: false, + rangeData: { + min: 1, + max: 5, + step: 1, + }, + label: 'Item 3 Flex', + }, + { + propName: 'size1', + inputType: 'number', + inputValue: 60, + propType: 'number | string', + helperText: 'Set Width / Height (in px) for static layouts', + required: false, + rangeData: { + min: 20, + max: 100, + step: 20, + }, + label: 'Item 1 Size (px)', + }, + { + propName: 'size2', + inputType: 'number', + inputValue: 60, + propType: 'number | string', + helperText: 'Set Width / Height (in px) for static layouts', + required: false, + rangeData: { + min: 20, + max: 100, + step: 20, + }, + label: 'Item 2 Size (px)', + }, + { + propName: 'size3', + inputType: 'number', + inputValue: 60, + propType: 'number | string', + helperText: 'Set Width / Height (in px) for static layouts', + required: false, + rangeData: { + min: 20, + max: 100, + step: 20, + }, + label: 'Item 3 Size (px)', + }, + ], + otherProps: [ + { + propName: 'useFlex', + inputType: 'boolean', + inputValue: true, + propType: 'boolean', + helperText: 'Show spacer with flex layout', + required: false, + label: 'Use Flex Layout', + }, + ], +}; + +export default spacerConfig; diff --git a/docs/src/componentDocs/Spacer/playground/index.tsx b/docs/src/componentDocs/Spacer/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/Spacer/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/ThreeLiner/examples/BasicThreeLiner.tsx b/docs/src/componentDocs/ThreeLiner/examples/BasicThreeLiner.tsx new file mode 100644 index 000000000..a810c0e44 --- /dev/null +++ b/docs/src/componentDocs/ThreeLiner/examples/BasicThreeLiner.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { BasicThreeLinerExample } from './BasicThreeLinerExample'; + +const codeSnippet = ``; + +export const BasicThreeLiner = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ThreeLiner/examples/BasicThreeLinerExample.tsx b/docs/src/componentDocs/ThreeLiner/examples/BasicThreeLinerExample.tsx new file mode 100644 index 000000000..7e384e92d --- /dev/null +++ b/docs/src/componentDocs/ThreeLiner/examples/BasicThreeLinerExample.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import { ThreeLiner } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const BasicThreeLinerExample = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ThreeLiner/examples/ThreeLinerWithCustomContent.tsx b/docs/src/componentDocs/ThreeLiner/examples/ThreeLinerWithCustomContent.tsx new file mode 100644 index 000000000..32a2ed8e8 --- /dev/null +++ b/docs/src/componentDocs/ThreeLiner/examples/ThreeLinerWithCustomContent.tsx @@ -0,0 +1,40 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ThreeLinerWithCustomContentExample } from './ThreeLinerWithCustomContentExample'; + +const codeSnippet = ` + } +/>`; + +export const ThreeLinerWithCustomContent = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ThreeLiner/examples/ThreeLinerWithCustomContentExample.tsx b/docs/src/componentDocs/ThreeLiner/examples/ThreeLinerWithCustomContentExample.tsx new file mode 100644 index 000000000..b6574c576 --- /dev/null +++ b/docs/src/componentDocs/ThreeLiner/examples/ThreeLinerWithCustomContentExample.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import { ThreeLiner, ToolbarMenu } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const ThreeLinerWithCustomContentExample = (): JSX.Element => ( + + + + } + /> + + +); diff --git a/docs/ThreeLiner.md b/docs/src/componentDocs/ThreeLiner/markdown/ThreeLinerAPIDocs.mdx similarity index 65% rename from docs/ThreeLiner.md rename to docs/src/componentDocs/ThreeLiner/markdown/ThreeLinerAPIDocs.mdx index 010b4450d..1980b7693 100644 --- a/docs/ThreeLiner.md +++ b/docs/src/componentDocs/ThreeLiner/markdown/ThreeLinerAPIDocs.mdx @@ -1,34 +1,42 @@ +import Box from '@mui/material/Box'; +import { DOCS_BRANCH } from '../../../shared/constants'; + # Three Liner -The `ThreeLiner` can display up to three lines of stylized text or other custom content. It is most commonly used within the context of a [`AppBar`](./AppBar.md) component where the text can grow / shrink as the App Bar is expanded and collapsed. +The `ThreeLiner` can display up to three lines of stylized text or other custom content. It is most commonly used within the context of a [`AppBar`](/components/app-bar/examples) component where the text can grow / shrink as the App Bar is expanded and collapsed. -## API +### Three Liner API -
+ | Prop Name | Description | Type | Required | Default | -| ----------------- | ------------------------------------------------- | ------------------- | -------- | ------------------------------------- | +| :---------------- | :------------------------------------------------ | :------------------ | :------- | :------------------------------------ | | animationDuration | Time in milliseconds to transition between states | `number` | no | `theme.transitions.duration.standard` | | classes | Style overrides | `ThreeLinerClasses` | no | | | info | Third line content | `ReactNode` | no | | | title | First line content | `ReactNode` | no | | | subtitle | Second line content | `ReactNode` | no | | -
+
### Style Overrides You can override the default styles used by Brightlayer UI by: - using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet + +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

-For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). + | Name | Global CSS Class | Description | -| -------- | ------------------------ | ---------------------------------- | +| :------- | :----------------------- | :--------------------------------- | | root | .BluiThreeLiner-root | Styles applied to the root element | | title | .BluiThreeLiner-title | Styles applied to the first line | | subtitle | .BluiThreeLiner-subtitle | Styles applied to the second line | | info | .BluiThreeLiner-info | Styles applied to the third line | + + diff --git a/docs/src/componentDocs/ThreeLiner/markdown/ThreeLinerExamples.mdx b/docs/src/componentDocs/ThreeLiner/markdown/ThreeLinerExamples.mdx new file mode 100644 index 000000000..570f6cf28 --- /dev/null +++ b/docs/src/componentDocs/ThreeLiner/markdown/ThreeLinerExamples.mdx @@ -0,0 +1,14 @@ +import { BasicThreeLiner } from '../examples/BasicThreeLiner'; +import { ThreeLinerWithCustomContent } from '../examples/ThreeLinerWithCustomContent'; + +## Three Liner + +A `` shows three lines of stylized text. It is commonly used within an [App Bar](/components/app-bar/examples). + + + +## Adding Custom Content + +If you want to display more than simple strings, you can pass custom content for each line. + + diff --git a/docs/src/componentDocs/ThreeLiner/playground/PlaygroundPage.tsx b/docs/src/componentDocs/ThreeLiner/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..6f6932096 --- /dev/null +++ b/docs/src/componentDocs/ThreeLiner/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import ThreeLinerPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const ThreeLinerPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/ThreeLiner/playground/PreviewComponent.tsx b/docs/src/componentDocs/ThreeLiner/playground/PreviewComponent.tsx new file mode 100644 index 000000000..c0c72b13e --- /dev/null +++ b/docs/src/componentDocs/ThreeLiner/playground/PreviewComponent.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { createProps } from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import { ThreeLiner } from '@brightlayer-ui/react-components'; + +export const PreviewComponent = (): JSX.Element => { + const threeLinerJson = useAppSelector((state: RootState) => state.componentsPropsState.threeLinerComponent); + + const threeLinerProps = createProps(threeLinerJson.props as PropsType[]); + + const generateCodeSnippet = (): string => { + const jsx = ``; + return jsx; + }; + + return ( + + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/ThreeLiner/playground/PropsPlayground.tsx b/docs/src/componentDocs/ThreeLiner/playground/PropsPlayground.tsx new file mode 100644 index 000000000..3f24da473 --- /dev/null +++ b/docs/src/componentDocs/ThreeLiner/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const threeLinerJson = useAppSelector((state: RootState) => state.componentsPropsState.threeLinerComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/ThreeLiner/playground/ThreeLinerConfig.tsx b/docs/src/componentDocs/ThreeLiner/playground/ThreeLinerConfig.tsx new file mode 100644 index 000000000..4e9d1c29c --- /dev/null +++ b/docs/src/componentDocs/ThreeLiner/playground/ThreeLinerConfig.tsx @@ -0,0 +1,33 @@ +import { ComponentType } from '../../../__types__'; + +export const threeLinerConfig: ComponentType = { + componentName: 'Three Liner', + props: [ + { + propName: 'info', + inputType: 'string', + inputValue: 'info', + propType: 'string', + helperText: 'Third line content', + required: false, + }, + { + propName: 'subtitle', + inputType: 'string', + inputValue: 'subtitle', + propType: 'string', + helperText: 'Second line content', + required: false, + }, + { + propName: 'title', + inputType: 'string', + inputValue: 'title', + propType: 'string', + helperText: 'First line content', + required: false, + }, + ], +}; + +export default threeLinerConfig; diff --git a/docs/src/componentDocs/ThreeLiner/playground/index.tsx b/docs/src/componentDocs/ThreeLiner/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/ThreeLiner/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/ToolbarMenu/examples/BasicToolbarMenu.tsx b/docs/src/componentDocs/ToolbarMenu/examples/BasicToolbarMenu.tsx new file mode 100644 index 000000000..6590e4edd --- /dev/null +++ b/docs/src/componentDocs/ToolbarMenu/examples/BasicToolbarMenu.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { BasicToolbarMenuExample } from './BasicToolbarMenuExample'; + +const codeSnippet = ``; + +export const BasicToolbarMenu = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ToolbarMenu/examples/BasicToolbarMenuExample.tsx b/docs/src/componentDocs/ToolbarMenu/examples/BasicToolbarMenuExample.tsx new file mode 100644 index 000000000..151f51c22 --- /dev/null +++ b/docs/src/componentDocs/ToolbarMenu/examples/BasicToolbarMenuExample.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import { ToolbarMenu } from '@brightlayer-ui/react-components'; +import { ExampleShowcase } from '../../../shared'; + +export const BasicToolbarMenuExample = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ToolbarMenu/examples/ToolbarMenuWithIcon.tsx b/docs/src/componentDocs/ToolbarMenu/examples/ToolbarMenuWithIcon.tsx new file mode 100644 index 000000000..1babf50c6 --- /dev/null +++ b/docs/src/componentDocs/ToolbarMenu/examples/ToolbarMenuWithIcon.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ToolbarMenuWithIconExample } from './ToolbarMenuWithIconExample'; + +const codeSnippet = `} + menuGroups={[ + { + items: [{ title: 'London' }, { title: 'New York' }, { title: 'New Haven' }], + }, + ]} +/>`; + +export const ToolbarMenuWithIcon = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ToolbarMenu/examples/ToolbarMenuWithIconExample.tsx b/docs/src/componentDocs/ToolbarMenu/examples/ToolbarMenuWithIconExample.tsx new file mode 100644 index 000000000..b114dc93c --- /dev/null +++ b/docs/src/componentDocs/ToolbarMenu/examples/ToolbarMenuWithIconExample.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import { ToolbarMenu } from '@brightlayer-ui/react-components'; +import { Home } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; + +export const ToolbarMenuWithIconExample = (): JSX.Element => ( + + + } + menuGroups={[ + { + items: [{ title: 'London' }, { title: 'New York' }, { title: 'New Haven' }], + }, + ]} + /> + + +); diff --git a/docs/src/componentDocs/ToolbarMenu/examples/ToolbarMenuWithinToolbar.tsx b/docs/src/componentDocs/ToolbarMenu/examples/ToolbarMenuWithinToolbar.tsx new file mode 100644 index 000000000..9f990fda1 --- /dev/null +++ b/docs/src/componentDocs/ToolbarMenu/examples/ToolbarMenuWithinToolbar.tsx @@ -0,0 +1,41 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { ToolbarMenuWithinToolbarExample } from './ToolbarMenuWithinToolbarExample'; + +const codeSnippet = ` + + + + + Alarms} + secondary={ + + } + /> + +`; + +export const ToolbarMenuWithinToolbar = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/ToolbarMenu/examples/ToolbarMenuWithinToolbarExample.tsx b/docs/src/componentDocs/ToolbarMenu/examples/ToolbarMenuWithinToolbarExample.tsx new file mode 100644 index 000000000..f31c90a47 --- /dev/null +++ b/docs/src/componentDocs/ToolbarMenu/examples/ToolbarMenuWithinToolbarExample.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import Toolbar from '@mui/material/Toolbar'; +import IconButton from '@mui/material/IconButton'; +import { Menu } from '@mui/icons-material'; +import { AppBar, ToolbarMenu } from '@brightlayer-ui/react-components'; +import ListItemText from '@mui/material/ListItemText'; +import * as colors from '@brightlayer-ui/colors'; +import { Typography } from '@mui/material'; +import { ExampleShowcase } from '../../../shared'; + +export const ToolbarMenuWithinToolbarExample = (): JSX.Element => ( + + + + + + + + Alarms} + secondary={ + + } + /> + + + + +); diff --git a/docs/src/componentDocs/ToolbarMenu/images/ToolbarMenuAnatomy.png b/docs/src/componentDocs/ToolbarMenu/images/ToolbarMenuAnatomy.png new file mode 100644 index 000000000..46f8adf6c Binary files /dev/null and b/docs/src/componentDocs/ToolbarMenu/images/ToolbarMenuAnatomy.png differ diff --git a/docs/ToolbarMenu.md b/docs/src/componentDocs/ToolbarMenu/markdown/ToolbarMenuAPIDocs.mdx similarity index 66% rename from docs/ToolbarMenu.md rename to docs/src/componentDocs/ToolbarMenu/markdown/ToolbarMenuAPIDocs.mdx index 3cb345b24..eeb73564d 100644 --- a/docs/ToolbarMenu.md +++ b/docs/src/componentDocs/ToolbarMenu/markdown/ToolbarMenuAPIDocs.mdx @@ -1,63 +1,60 @@ +import Box from '@mui/material/Box'; +import ToolbarMenuAnatomy from '../images/ToolbarMenuAnatomy.png'; +import { DOCS_BRANCH } from '../../../shared/constants'; + # Toolbar Menu The `ToolbarMenu` component is used to display a dropdown menu with label, primarily inside of `` or Card Header elements. The Menu can be populated via the `menuGroups` prop, or can be entirely customized by supplying your own `` via the `menu` prop. -## Usage - -
- Toolbar Menu -
- -```tsx -import { ToolbarMenu } from '@brightlayer-ui/react-components'; -... - {}; - }, - { - title: "Menu Item 2"; - onClick: () => {}; - }, - ] - } - ]} -/> -``` - -## API - -
- -| Prop Name | Description | Type | Required | Default | -| ---------- | -------------------------------------------- | --------------------- | -------- | ------- | -| classes | Style Overrides | `ToolbarMenuClasses` | no | | -| icon | The inline icon to display | `JSX.Element` | no | | -| label | Custom content for label text / icon + label | `ReactNode` | yes | | -| menu | Custom content to be displayed in the menu | Material-UI `Menu` | no | | -| menuGroups | Groups of menu items to display | `ToolbarMenuGroups[]` | no | | -| MenuProps | Property overrides for the MUI Menu | `MenuProps` | no | | -| onClose | Function called when the menu is closed | `Function` | no | | -| onOpen | Function called when the menu is opened | `Function` | no | | - -
+ + + + +### Toolbar Menu API + + + +| Prop Name | Description | Type | Required | Default | +| :--------- | :------------------------------------------- | :-------------------------------------- | :------- | :------ | +| classes | Style Overrides | `ToolbarMenuClasses` | no | | +| icon | The inline icon to display | `JSX.Element` | no | | +| label | Custom content for label text / icon + label | `ReactNode` | yes | | +| menu | Custom content to be displayed in the menu | [`MUI Menu`](https://mui.com/api/menu/) | no | | +| menuGroups | Groups of menu items to display | `ToolbarMenuGroups[]` | no | | +| MenuProps | Property overrides for the MUI Menu | `MenuProps` | no | | +| onClose | Function called when the menu is closed | `Function` | no | | +| onOpen | Function called when the menu is opened | `Function` | no | | + + ### Style Overrides You can override the default styles used by Brightlayer UI by: - using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet + +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

-For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). + | Name | Global CSS Class | Description | -| ------------- | ------------------------------------- | ------------------------------------------------------------------------------------ | +| :------------ | :------------------------------------ | :----------------------------------------------------------------------------------- | | root | .BluiToolbarMenu-root | Styles applied to the root element | | dropdownArrow | .BluiToolbarMenu-dropdownArrow | Styles applied to the DropdownArrow icon container | | | .BluiToolbarMenu-rotatedDropdownArrow | Styles applied to the rotated DropdownArrow icon container when the menu is expanded | @@ -66,11 +63,13 @@ For more details on styling options check out our [Styling Guide](https://github | | .BluiToolbarMenu-cursorPointer | Styles applied to the cursorPointer | | | .BluiToolbarMenu-navGroups | Styles applied to the navGroups | + + ### Toolbar Menu Groups Object -The `menuGroups` prop of the `` includes many properties from the [``](https://brightlayer-ui-components.github.io/react/?path=/info/components-drawer--get-read-me-story) array found within a [``](https://brightlayer-ui-components.github.io/react/?path=/info/components-drawer--get-read-me-story). +The `menuGroups` prop of the `` includes many properties from the [``](/components/drawer-nav-group/api-docs) array found within a [``](/components/drawer-body/api-docs). -
+ | Prop Name | Description | Type | Required | Default | | --------- | ----------------------------------- | ------------------- | -------- | ------- | @@ -79,11 +78,11 @@ The `menuGroups` prop of the `` includes many properties from the [ | items | List of navigation items to render | `ToolbarMenuItem[]` | yes | | | title | Text to display in the group header | `string` | no | | -
+
### Toolbar Menu Item Object -
+ | Attribute | Description | Type | Required | Default | | ----------- | ----------------------------------- | ------------- | -------- | ------- | @@ -95,4 +94,4 @@ The `menuGroups` prop of the `` includes many properties from the [ | subtitle | The text to show on the second line | `string` | no | | | title | The text to show on the first line | `string` | yes | | -
+ diff --git a/docs/src/componentDocs/ToolbarMenu/markdown/ToolbarMenuExamples.mdx b/docs/src/componentDocs/ToolbarMenu/markdown/ToolbarMenuExamples.mdx new file mode 100644 index 000000000..f464a1a5b --- /dev/null +++ b/docs/src/componentDocs/ToolbarMenu/markdown/ToolbarMenuExamples.mdx @@ -0,0 +1,21 @@ +import { BasicToolbarMenu } from '../examples/BasicToolbarMenu'; +import { ToolbarMenuWithIcon } from '../examples/ToolbarMenuWithIcon'; +import { ToolbarMenuWithinToolbar } from '../examples/ToolbarMenuWithinToolbar'; + +## Toolbar Menu + +A `` adds a menu to a text element. + + + +## Adding an Icon + +You can add icons to the front of the Toolbar Menu. + + + +## Common Use In Toolbars + +Toolbar Menus are typically used in toolbar subtitles for toggling different views, locations, etc. + + diff --git a/docs/src/componentDocs/ToolbarMenu/playground/PlaygroundPage.tsx b/docs/src/componentDocs/ToolbarMenu/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..dc72972f0 --- /dev/null +++ b/docs/src/componentDocs/ToolbarMenu/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import ToolbarMenuPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const ToolbarMenuPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/ToolbarMenu/playground/PreviewComponent.tsx b/docs/src/componentDocs/ToolbarMenu/playground/PreviewComponent.tsx new file mode 100644 index 000000000..f4cd9ab03 --- /dev/null +++ b/docs/src/componentDocs/ToolbarMenu/playground/PreviewComponent.tsx @@ -0,0 +1,65 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { createProps, getIcon, hideDefaultPropsFromSnippet, removeEmptyLines } from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import { ToolbarMenu } from '@brightlayer-ui/react-components/core/ToolbarMenu'; + +export const PreviewComponent = (): JSX.Element => { + const toolbarMenuJson = useAppSelector((state: RootState) => state.componentsPropsState.toolbarMenuComponent); + + const toolbarMenuProps = createProps(toolbarMenuJson.props as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any): string => + hideDefaultPropsFromSnippet(toolbarMenuJson, propName, currentValue, 'props'); + + const generateCodeSnippet = (): string => { + const jsx = ` { + console.log("clicked 1"); + } }, { title: "Menu Item 2", onClick: (): void => { + console.log("clicked 2"); + } }, { title: "Menu Item 3", onClick: (): void => { + console.log("clicked 3"); + } }], + }, + ]} />`; + return removeEmptyLines(jsx); + }; + const menuGroups = [ + { + items: [ + { + title: 'Menu Item 1', + onClick: (): void => {}, + }, + { + title: 'Menu Item 2', + onClick: (): void => {}, + }, + { + title: 'Menu Item 3', + onClick: (): void => {}, + }, + ], + }, + ]; + + return ( + + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/ToolbarMenu/playground/PropsPlayground.tsx b/docs/src/componentDocs/ToolbarMenu/playground/PropsPlayground.tsx new file mode 100644 index 000000000..5936505db --- /dev/null +++ b/docs/src/componentDocs/ToolbarMenu/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const toolbarMenuJson = useAppSelector((state: RootState) => state.componentsPropsState.toolbarMenuComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/ToolbarMenu/playground/ToolbarMenuConfig.tsx b/docs/src/componentDocs/ToolbarMenu/playground/ToolbarMenuConfig.tsx new file mode 100644 index 000000000..7dd1ab58a --- /dev/null +++ b/docs/src/componentDocs/ToolbarMenu/playground/ToolbarMenuConfig.tsx @@ -0,0 +1,28 @@ +import { ComponentType } from '../../../__types__'; + +export const toolbarMenuConfig: ComponentType = { + componentName: 'Toolbar Menu', + props: [ + { + propName: 'icon', + inputType: 'select', + inputValue: 'undefined', + options: ['undefined', '', ''], + propType: 'JSX.Element', + helperText: 'The inline icon to display', + required: false, + defaultValue: 'undefined', + }, + { + propName: 'label', + inputType: 'string', + inputValue: 'Subtitle', + propType: 'ReactNode', + helperText: 'Custom content for label text / icon + label', + required: true, + defaultValue: true, + }, + ], +}; + +export default toolbarMenuConfig; diff --git a/docs/src/componentDocs/ToolbarMenu/playground/index.tsx b/docs/src/componentDocs/ToolbarMenu/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/ToolbarMenu/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/componentDocs/UserMenu/examples/UserMenu.tsx b/docs/src/componentDocs/UserMenu/examples/UserMenu.tsx new file mode 100644 index 000000000..37d74b9e2 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/examples/UserMenu.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { UserMenuExample } from './UserMenuExample'; + +const codeSnippet = ` + + Toolbar Title + + AV} + menuGroups={[ + { + items: [ + { + title: 'Log Out', + icon: , + }, + ], + }, + ]} + /> + +`; + +export const UserMenu = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/UserMenu/examples/UserMenuAlternativeAvatarFormats.tsx b/docs/src/componentDocs/UserMenu/examples/UserMenuAlternativeAvatarFormats.tsx new file mode 100644 index 000000000..5c4e72170 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/examples/UserMenuAlternativeAvatarFormats.tsx @@ -0,0 +1,46 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { UserMenuAlternativeAvatarFormatsExample } from './UserMenuAlternativeAvatarFormatsExample'; + +const codeSnippet = `} + menuGroups={[ + { + items: [ + { + title: 'Settings', + icon: , + }, + ], + }, + ]} +/> + + + + } + menuGroups={[ + { + items: [ + { + title: 'Settings', + icon: , + }, + ], + }, + ]} +/>`; + +export const UserMenuAlternativeAvatarFormats = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/UserMenu/examples/UserMenuAlternativeAvatarFormatsExample.tsx b/docs/src/componentDocs/UserMenu/examples/UserMenuAlternativeAvatarFormatsExample.tsx new file mode 100644 index 000000000..65e386cc4 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/examples/UserMenuAlternativeAvatarFormatsExample.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import Avatar from '@mui/material/Avatar'; +import { UserMenu } from '@brightlayer-ui/react-components'; +import { Pets, Settings } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; +const tRex = require('../images/trex.png'); + +export const UserMenuAlternativeAvatarFormatsExample = (): JSX.Element => ( + + + } + menuGroups={[ + { + items: [ + { + title: 'Settings', + icon: , + }, + ], + }, + ]} + /> + + + + } + menuGroups={[ + { + items: [ + { + title: 'Settings', + icon: , + }, + ], + }, + ]} + /> + + +); diff --git a/docs/src/componentDocs/UserMenu/examples/UserMenuExample.tsx b/docs/src/componentDocs/UserMenu/examples/UserMenuExample.tsx new file mode 100644 index 000000000..f29af607a --- /dev/null +++ b/docs/src/componentDocs/UserMenu/examples/UserMenuExample.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import Avatar from '@mui/material/Avatar'; +import { Spacer, UserMenu } from '@brightlayer-ui/react-components'; +import { ExitToApp } from '@mui/icons-material'; +import AppBar from '@mui/material/AppBar'; +import Toolbar from '@mui/material/Toolbar'; +import Typography from '@mui/material/Typography'; +import { ExampleShowcase } from '../../../shared'; + +export const UserMenuExample = (): JSX.Element => ( + + + + Toolbar Title + + AV} + menuGroups={[ + { + items: [ + { + title: 'Log Out', + icon: , + }, + ], + }, + ]} + /> + + + +); diff --git a/docs/src/componentDocs/UserMenu/examples/UserMenuWithBottomSheet.tsx b/docs/src/componentDocs/UserMenu/examples/UserMenuWithBottomSheet.tsx new file mode 100644 index 000000000..d7f1e4f94 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/examples/UserMenuWithBottomSheet.tsx @@ -0,0 +1,38 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { UserMenuWithBottomSheetExample } from './UserMenuWithBottomSheetExample'; + +const codeSnippet = `BS} + menuGroups={[ + { + items: [ + { + title: 'Settings', + icon: , + }, + { + title: 'Contact Us', + icon: , + }, + { + title: 'Log Out', + icon: , + }, + ], + }, + ]} + useBottomSheetAt={100000} +/>`; + +export const UserMenuWithBottomSheet = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/UserMenu/examples/UserMenuWithBottomSheetExample.tsx b/docs/src/componentDocs/UserMenu/examples/UserMenuWithBottomSheetExample.tsx new file mode 100644 index 000000000..35042f6b6 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/examples/UserMenuWithBottomSheetExample.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import Avatar from '@mui/material/Avatar'; +import { UserMenu } from '@brightlayer-ui/react-components'; +import { Email, ExitToApp, Settings } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; + +export const UserMenuWithBottomSheetExample = (): JSX.Element => ( + + + BS} + menuGroups={[ + { + items: [ + { + title: 'Settings', + icon: , + }, + + { + title: 'Contact Us', + icon: , + }, + { + title: 'Log Out', + icon: , + }, + ], + }, + ]} + useBottomSheetAt={100000} + /> + + +); diff --git a/docs/src/componentDocs/UserMenu/examples/UserMenuWithCustomHeader.tsx b/docs/src/componentDocs/UserMenu/examples/UserMenuWithCustomHeader.tsx new file mode 100644 index 000000000..41a5a4d02 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/examples/UserMenuWithCustomHeader.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { UserMenuWithCustomHeaderExample } from './UserMenuWithCustomHeaderExample'; + +const codeSnippet = ` setOpen(!open)} + avatar={} + menu={ + setOpen(false)}> + + Welcome, + T-Rex + + + + setOpen(false)}> + My Account + + setOpen(false)}> + Logout + + + } +/>`; + +export const UserMenuWithCustomHeader = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/UserMenu/examples/UserMenuWithCustomHeaderExample.tsx b/docs/src/componentDocs/UserMenu/examples/UserMenuWithCustomHeaderExample.tsx new file mode 100644 index 000000000..fab5e7370 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/examples/UserMenuWithCustomHeaderExample.tsx @@ -0,0 +1,47 @@ +import React, { useState } from 'react'; +import Box from '@mui/material/Box'; +import Avatar from '@mui/material/Avatar'; +import { UserMenu } from '@brightlayer-ui/react-components'; +import { Divider, Menu, MenuItem, Typography } from '@mui/material'; +import { ExampleShowcase } from '../../../shared'; +const tRex = require('../images/trex.png'); + +export const UserMenuWithCustomHeaderExample = (): JSX.Element => { + const [open, setOpen] = useState(false); + + return ( + + + setOpen(!open)} + avatar={} + menu={ + setOpen(false)}> + + Welcome, + + T-Rex + + + + + setOpen(false)}>My Account + setOpen(false)}>Logout + + } + /> + + + ); +}; diff --git a/docs/src/componentDocs/UserMenu/examples/UserMenuWithMenuHeader.tsx b/docs/src/componentDocs/UserMenu/examples/UserMenuWithMenuHeader.tsx new file mode 100644 index 000000000..ba49b0357 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/examples/UserMenuWithMenuHeader.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import { CodeBlock, CodeBlockActionButtonRow } from '../../../shared'; +import { UserMenuWithMenuHeaderExample } from './UserMenuWithMenuHeaderExample'; + +const codeSnippet = `MH} + menuGroups={[ + { + items: [ + { + title: 'Settings', + icon: , + }, + ], + }, + ]} + menuTitle="Sample Title" + menuSubtitle="Sample Subtitle" +/>`; + +export const UserMenuWithMenuHeader = (): JSX.Element => ( + + + + + +); diff --git a/docs/src/componentDocs/UserMenu/examples/UserMenuWithMenuHeaderExample.tsx b/docs/src/componentDocs/UserMenu/examples/UserMenuWithMenuHeaderExample.tsx new file mode 100644 index 000000000..1c93af886 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/examples/UserMenuWithMenuHeaderExample.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import Avatar from '@mui/material/Avatar'; +import { UserMenu } from '@brightlayer-ui/react-components'; +import { Settings } from '@mui/icons-material'; +import { ExampleShowcase } from '../../../shared'; + +export const UserMenuWithMenuHeaderExample = (): JSX.Element => ( + + + MH} + menuGroups={[ + { + items: [ + { + title: 'Settings', + icon: , + }, + ], + }, + ]} + menuTitle="Sample Title" + menuSubtitle="Sample Subtitle" + /> + + +); diff --git a/docs/src/componentDocs/UserMenu/examples/index.tsx b/docs/src/componentDocs/UserMenu/examples/index.tsx new file mode 100644 index 000000000..376922e91 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/examples/index.tsx @@ -0,0 +1,5 @@ +export * from './UserMenu'; +export * from './UserMenuAlternativeAvatarFormats'; +export * from './UserMenuWithBottomSheet'; +export * from './UserMenuWithMenuHeader'; +export * from './UserMenuWithCustomHeader'; diff --git a/docs/src/componentDocs/UserMenu/images/trex.png b/docs/src/componentDocs/UserMenu/images/trex.png new file mode 100644 index 000000000..643a559dd Binary files /dev/null and b/docs/src/componentDocs/UserMenu/images/trex.png differ diff --git a/docs/images/userMenuAnatomy.png b/docs/src/componentDocs/UserMenu/images/userMenuAnatomy.png similarity index 100% rename from docs/images/userMenuAnatomy.png rename to docs/src/componentDocs/UserMenu/images/userMenuAnatomy.png diff --git a/docs/images/userMenuAvatar.png b/docs/src/componentDocs/UserMenu/images/userMenuAvatar.png similarity index 100% rename from docs/images/userMenuAvatar.png rename to docs/src/componentDocs/UserMenu/images/userMenuAvatar.png diff --git a/docs/images/userMenuOpened.png b/docs/src/componentDocs/UserMenu/images/userMenuOpened.png similarity index 100% rename from docs/images/userMenuOpened.png rename to docs/src/componentDocs/UserMenu/images/userMenuOpened.png diff --git a/docs/images/userMenuOpenedMobile.png b/docs/src/componentDocs/UserMenu/images/userMenuOpenedMobile.png similarity index 100% rename from docs/images/userMenuOpenedMobile.png rename to docs/src/componentDocs/UserMenu/images/userMenuOpenedMobile.png diff --git a/docs/UserMenu.md b/docs/src/componentDocs/UserMenu/markdown/UserMenuAPIDocs.mdx similarity index 56% rename from docs/UserMenu.md rename to docs/src/componentDocs/UserMenu/markdown/UserMenuAPIDocs.mdx index d67a269b8..2e97bce75 100644 --- a/docs/UserMenu.md +++ b/docs/src/componentDocs/UserMenu/markdown/UserMenuAPIDocs.mdx @@ -1,91 +1,95 @@ +import Box from '@mui/material/Box'; +import UserMenuAvatar from '../images/userMenuAvatar.png'; +import UserMenuOpened from '../images/userMenuOpened.png'; +import UserMenuOpenedMobile from '../images/userMenuOpenedMobile.png'; +import { DOCS_BRANCH } from '../../../shared/constants'; + # User Menu The `` is an Avatar that opens a Menu when clicked. It is typically used in the top-right corner of an application and indicates who is logged in. By default, the Menu will responsively transition to a bottom sheet for mobile views (if passing in a custom menu, you will be responsible for handling any responsiveness on your content). Setting the `useBottomSheetAt` prop to zero will disable the responsiveness. -
-UserMenu Avatar -
- -
-UserMenu Opened -UserMenu Opened Mobile -
+ + + + + + + + The Menu can be populated via the `menuGroups` prop, or can be entirely customized by supplying your own ``. -## Usage - -
- User Menu Anatomy -
- -```tsx -import { UserMenu } from '@brightlayer-ui/react-components'; -import { Avatar, Menu } from '@mui/material'; -import Email from '@mui/icons-material/Email'; -import Settings from '@mui/icons-material/Settings'; -import Send from '@mui/icons-material/Send'; - -const avatar = ; -... -/* Using menuGroups prop */ -, - }, - { - title: 'Account Settings', - icon: , - }, - { - title: 'Contact Us', - icon: , - }, - ], - }, -]} /> - -/* Using menu prop */ -} /> - -``` - -## API - -
- -| Prop Name | Description | Type | Required | Default | -| ---------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------ | -------- | ----------------------------- | -| avatar | MUI Avatar that displays | `Avatar` | yes | | -| classes | Style overrides | `UserMenuClasses` | no | | -| menu | Custom MUI Menu displayed when Avatar is clicked | Material-UI `Menu` | no | | -| menuGroups | Groups of menu items that display | `UserMenuGroups[]` | no | | -| menuSubtitle | Subtitle shown when menu is open | `string` | no | | -| menuTitle | Title shown when menu is open | `string` | no | | -| MenuProps | Property overrides for the MUI Menu | `MenuProps` | no | | -| onClose | Function called when the menu is closed | `Function` | no | | -| onOpen | Function called when the menu is opened | `Function` | no | | -| useBottomSheetAt | Window pixel width at which the responsive bottom sheet menu is triggered (set to 0 to disable responsive behavior) | `number` | no | `theme.breakpoints.values.sm` | - -
- -Any other props supplied will be provided to the root element (`div`). +### User Menu API + + + +| Prop Name | Description | Type | Required | Default | +| :--------------- | :------------------------------------------------------------------------------------------------------------------ | :-------------------------------------- | :------- | :---------------------------- | +| avatar | MUI Avatar that displays | `Avatar` | yes | | +| classes | Style overrides | `UserMenuClasses` | no | | +| menu | Custom MUI Menu displayed when Avatar is clicked | [`MUI Menu`](https://mui.com/api/menu/) | no | | +| menuGroups | Groups of menu items that display | `UserMenuGroups[]` | no | | +| menuSubtitle | Subtitle shown when menu is open | `string` | no | | +| menuTitle | Title shown when menu is open | `string` | no | | +| MenuProps | Property overrides for the MUI Menu | `MenuProps` | no | | +| onClose | Function called when the menu is closed | `Function` | no | | +| onOpen | Function called when the menu is opened | `Function` | no | | +| useBottomSheetAt | Window pixel width at which the responsive bottom sheet menu is triggered (set to 0 to disable responsive behavior) | `number` | no | `theme.breakpoints.values.sm` | + + + +Any other props supplied will be provided to the root element ([``](https://mui.com/material-ui/api/box/)). ### Style Overrides You can override the default styles used by Brightlayer UI by: - using the `sx` prop -- passing a `classes` prop with keys from the `Name` column below -- using the `Global CSS Class` in your main stylesheet +- passing a `classes` prop with keys from the Name column below +- using the Global CSS Class in your main stylesheet -For more details on styling options check out our [Styling Guide](https://github.com/brightlayer-ui/react-component-library/tree/master/docs#style-guide). +{/* prettier-ignore */} +

For more details on styling options check out our Styling Guide.

+ + | Name | Global CSS Class | Description | -| ----------- | --------------------------- | ----------------------------------------- | +| :---------- | :-------------------------- | :---------------------------------------- | | root | .BluiUserMenu-root | Styles applied to the root element | | bottomSheet | .BluiUserMenu-bottomsheet\* | Styles applied to responsive bottom sheet | | | .BluiUserMenu-avatarRoot | Styles applied to the avatarRoot element | @@ -95,29 +99,31 @@ For more details on styling options check out our [Styling Guide](https://github | | .BluiUserMenu-navigation | Styles applied to the navigation element | | | .BluiUserMenu-navGroups | Styles applied to the navGroups element | + + \* This element lives in a separate container and can't be styled via `sx` nesting rules. ### User Menu Groups Object -The `menuGroups` prop of the `` includes many properties from the [``](https://brightlayer-ui-components.github.io/react/?path=/info/components-drawer--get-read-me-story) array found within a [``](https://brightlayer-ui-components.github.io/react/?path=/info/components-drawer--get-read-me-story). +The `menuGroups` prop of the `` includes many properties from the [``](/components/drawer-nav-group/api-docs) array found within a [``](/components/drawer-body/api-docs). -
+ | Prop Name | Description | Type | Required | Default | -| --------- | ----------------------------------- | ---------------- | -------- | ------- | +| :-------- | :---------------------------------- | :--------------- | :------- | :------ | | fontColor | The color used for the text | `string` | no | | | iconColor | The color used for icons | `string` | no | | | items | List of navigation items to render | `UserMenuItem[]` | yes | | | title | Text to display in the group header | `string` | no | | -
+
### User Menu Item Object -
+ | Attribute | Description | Type | Required | Default | -| ----------- | ----------------------------------- | ------------- | -------- | ------- | +| :---------- | :---------------------------------- | :------------ | :------- | :------ | | chevron | Show chevron icon to the right | `boolean` | no | false | | divider | Show a divider line below the item | `boolean` | no | true | | icon | A component to render for the icon | `JSX.Element` | no | | @@ -126,4 +132,4 @@ The `menuGroups` prop of the `` includes many properties from the [` + diff --git a/docs/src/componentDocs/UserMenu/markdown/UserMenuExamples.mdx b/docs/src/componentDocs/UserMenu/markdown/UserMenuExamples.mdx new file mode 100644 index 000000000..985e3ba59 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/markdown/UserMenuExamples.mdx @@ -0,0 +1,37 @@ +import { + UserMenu, + UserMenuAlternativeAvatarFormats, + UserMenuWithMenuHeader, + UserMenuWithCustomHeader, + UserMenuWithBottomSheet, +} from '../examples'; + +## User Menu + +The `` is a combination of an avatar and a [MUI Menu](https://mui.com/api/menu/) that is used to hold user account-related information and actions. It is typically located in the top corner of your application within a toolbar. + + + +## Alternative Avatar Formats + +The User Menu supports multiple avatar formats (text, icon, image). + + + +## Adding a Menu Header + +You can add a header to the top of the menu by passing `menuTitle` and `menuSubtitle` props. The avatar will also appear in the menu header. + + + +## Customizing the Menu + +If you want to supply your own custom menu, you can pass in your own menu element via the `menu` prop. + + + +## Using a Bottom Sheet + +On larger screens the User Menu opens as a dropdown, but on smaller screens it opens as a bottomsheet. You can customize the point where this transition occurs via the `useBottomSheetAt` prop (default of 600px). + + diff --git a/docs/src/componentDocs/UserMenu/playground/PlaygroundPage.tsx b/docs/src/componentDocs/UserMenu/playground/PlaygroundPage.tsx new file mode 100644 index 000000000..ea2337fa7 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/playground/PlaygroundPage.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Box } from '@mui/material'; +import UserMenuPlayground from './PropsPlayground'; +import { PreviewComponent } from './PreviewComponent'; + +export const UserMenuPlaygroundComponent = (): JSX.Element => ( + + + + +); diff --git a/docs/src/componentDocs/UserMenu/playground/PreviewComponent.tsx b/docs/src/componentDocs/UserMenu/playground/PreviewComponent.tsx new file mode 100644 index 000000000..490fa95aa --- /dev/null +++ b/docs/src/componentDocs/UserMenu/playground/PreviewComponent.tsx @@ -0,0 +1,90 @@ +import React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import { createProps, hideDefaultPropsFromSnippet, removeEmptyLines } from '../../../shared/utilities'; +import { PropsType } from '../../../__types__'; +import PreviewComponentWithCode from '../../../shared/PreviewComponentWithCode'; +import { UserMenu } from '@brightlayer-ui/react-components/core/UserMenu'; +import Avatar from '@mui/material/Avatar'; +import Email from '@mui/icons-material/Email'; +import ExitToApp from '@mui/icons-material/ExitToApp'; +import Settings from '@mui/icons-material/Settings'; +import Trex from '../images/trex.png'; + +export const PreviewComponent = (): JSX.Element => { + const userMenuJson = useAppSelector((state: RootState) => state.componentsPropsState.userMenuComponent); + + const userMenuProps = createProps(userMenuJson.props as PropsType[]); + const userMenuOtherProps = createProps(userMenuJson.otherProps as PropsType[]); + + const toggleDefaultProp = (propName: string, currentValue: any): string => + hideDefaultPropsFromSnippet(userMenuJson, propName, currentValue, 'props'); + + const toggleAvatarSection = (showAvatarImage: boolean): JSX.Element => + showAvatarImage ? : AV; + + const toggleAvatarSnippet = (showAvatarImageSnippet: boolean): string => + showAvatarImageSnippet + ? `avatar={}` + : `avatar={AV}`; + + const generateCodeSnippet = (): string => { + const jsx = `, + }, + { + title: "Contact Us", + icon: , + }, + { + title: "Log Out", + icon: , + }, + ], + }, + ]} +/>`; + return removeEmptyLines(jsx); + }; + + return ( + , + }, + { + title: 'Contact Us', + icon: , + }, + { + title: 'Log Out', + icon: , + }, + ], + }, + ]} + menuTitle={userMenuProps.menuTitle} + menuSubtitle={userMenuProps.menuSubtitle} + useBottomSheetAt={userMenuProps.useBottomSheetAt} + /> + } + code={generateCodeSnippet()} + /> + ); +}; diff --git a/docs/src/componentDocs/UserMenu/playground/PropsPlayground.tsx b/docs/src/componentDocs/UserMenu/playground/PropsPlayground.tsx new file mode 100644 index 000000000..106ca0bf5 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/playground/PropsPlayground.tsx @@ -0,0 +1,12 @@ +import * as React from 'react'; +import { RootState } from '../../../redux/store'; +import { useAppSelector } from '../../../redux/hooks'; +import PlaygroundDrawer from '../../../shared/PlaygroundDrawer'; + +const PropsPlayground = (): JSX.Element => { + const userMenuJson = useAppSelector((state: RootState) => state.componentsPropsState.userMenuComponent); + + return ; +}; + +export default PropsPlayground; diff --git a/docs/src/componentDocs/UserMenu/playground/UserMenuConfig.tsx b/docs/src/componentDocs/UserMenu/playground/UserMenuConfig.tsx new file mode 100644 index 000000000..dbb6111c4 --- /dev/null +++ b/docs/src/componentDocs/UserMenu/playground/UserMenuConfig.tsx @@ -0,0 +1,51 @@ +import { ComponentType } from '../../../__types__'; + +export const userMenuConfig: ComponentType = { + componentName: 'User Menu', + props: [ + { + propName: 'menuSubtitle', + inputType: 'string', + inputValue: 'Menu Subtitle', + propType: 'string', + helperText: 'Subtitle shown when menu is open', + required: false, + }, + { + propName: 'menuTitle', + inputType: 'string', + inputValue: 'Menu Title', + propType: 'string', + helperText: 'Title shown when menu is open', + required: false, + }, + { + propName: 'useBottomSheetAt', + inputType: 'number', + inputValue: 600, + propType: 'number', + helperText: + 'Window pixel width at which the responsive bottom sheet menu is triggered (set to 0 to disable responsive behavior)', + required: false, + defaultValue: 600, + rangeData: { + min: 0, + max: 1000, + step: 50, + }, + }, + ], + otherProps: [ + { + propName: 'showAvatarImage', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Show / hide image for avatar', + required: false, + label: 'Use Image For Avatar', + }, + ], +}; + +export default userMenuConfig; diff --git a/docs/src/componentDocs/UserMenu/playground/index.tsx b/docs/src/componentDocs/UserMenu/playground/index.tsx new file mode 100644 index 000000000..234b17b3c --- /dev/null +++ b/docs/src/componentDocs/UserMenu/playground/index.tsx @@ -0,0 +1,2 @@ +export * from './PlaygroundPage'; +export * from './PreviewComponent'; diff --git a/docs/src/contexts/drawerContextProvider.tsx b/docs/src/contexts/drawerContextProvider.tsx new file mode 100644 index 000000000..b0e934a43 --- /dev/null +++ b/docs/src/contexts/drawerContextProvider.tsx @@ -0,0 +1,16 @@ +import { createContext, useContext } from 'react'; + +type DrawerContextType = { + drawerOpen: boolean; + setDrawerOpen: (open: boolean) => void; +}; + +export const DrawerContext = createContext(null); + +export const useDrawer = (): DrawerContextType => { + const context = useContext(DrawerContext); + if (context === null) { + throw new Error('useDrawer must be used within a DrawerContextProvider'); + } + return context; +}; diff --git a/docs/src/ga.js b/docs/src/ga.js new file mode 100644 index 000000000..5e8618362 --- /dev/null +++ b/docs/src/ga.js @@ -0,0 +1 @@ +export const gaID = 'undefined'; diff --git a/docs/src/index.css b/docs/src/index.css new file mode 100644 index 000000000..e0b9b68b0 --- /dev/null +++ b/docs/src/index.css @@ -0,0 +1,35 @@ +@import 'prismjs/themes/prism-tomorrow.css'; +@import 'prismjs/plugins/line-numbers/prism-line-numbers.css'; +@import 'prismjs/plugins/line-highlight/prism-line-highlight.css'; + +html, +body, +#root { + height: 100%; + margin: 0; + padding: 0; +} +.drawerBodyStyle { + flex: 1 1 auto; +} +.line-highlight { + margin-top: 20px; +} +a, +a:not(.MuiTab-root):visited { + color: #007bc1; + font-weight: 400; +} + +/* HIDE INCREMENT/DECREMENT BUTTONS ON NUMBER INPUTS */ +/* Chrome, Safari, Edge, Opera */ +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +/* Firefox */ +input[type='number'] { + -moz-appearance: textfield; +} diff --git a/docs/src/index.tsx b/docs/src/index.tsx new file mode 100644 index 000000000..4fb88e621 --- /dev/null +++ b/docs/src/index.tsx @@ -0,0 +1,69 @@ +/** + Copyright (c) 2021-present, Eaton + + All rights reserved. + + This code is licensed under the BSD-3 license found in the LICENSE file in the root directory of this source tree and at https://opensource.org/licenses/BSD-3-Clause. + **/ +import 'react-app-polyfill/stable'; +import React from 'react'; +import ReactDOMClient from 'react-dom/client'; +import { Provider } from 'react-redux'; +import { BrowserRouter } from 'react-router-dom'; +import { createTheme, ThemeProvider, StyledEngineProvider } from '@mui/material/styles'; +import CssBaseline from '@mui/material/CssBaseline'; +import * as BLUIThemes from '@brightlayer-ui/react-themes'; +import '@brightlayer-ui/react-themes/open-sans'; +import '@fontsource/roboto'; +import '@fontsource/roboto-mono'; +import { App } from './App'; +import reportWebVitals from './reportWebVitals'; +import './index.css'; +import { store } from './redux/store'; +import { MDXProvider } from '@mdx-js/react'; +import { componentsMap } from './__configuration__/markdownMapping'; +import { GoogleAnalyticsWrapper } from './router/GoogleAnalyticsWrapper'; + +// prismJs +import 'prismjs/components/prism-jsx.js'; +import 'prismjs/plugins/line-numbers/prism-line-numbers.js'; +import 'prismjs/plugins/line-highlight/prism-line-highlight.js'; + +// google analytics +import ReactGA from 'react-ga'; +import { gaID } from './ga.js'; +import { ScrollToTop } from './router/ScrollToTop'; +if (gaID) { + ReactGA.initialize(gaID); +} + +// Brightlayer UI Icon font +require('@brightlayer-ui/icons/iconfont/BrightlayerUIIcons.css'); +const container = document.getElementById('root'); + +if (!container) throw new Error('Root Element was not found in the DOM'); + +const root = ReactDOMClient.createRoot(container); +const basename = process.env.PUBLIC_URL || '/'; + +root.render( + + + + + + + + + + + + + + +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/docs/src/pages/componentPreviewPage.tsx b/docs/src/pages/componentPreviewPage.tsx new file mode 100644 index 000000000..8b903087a --- /dev/null +++ b/docs/src/pages/componentPreviewPage.tsx @@ -0,0 +1,49 @@ +import React, { HTMLAttributes } from 'react'; +import { AppBar, IconButton, Toolbar, Typography, useTheme, useMediaQuery, Box } from '@mui/material'; +import Menu from '@mui/icons-material/Menu'; +import { ComponentPreviewTabs } from '../shared'; +import { toggleDrawer } from '../redux/appState'; +import { useAppDispatch } from '../redux/hooks'; + +export type ComponentPreviewPageProps = HTMLAttributes & { + title: string; +}; +export const ComponentPreviewPage: React.FC = (props): JSX.Element => { + const { title } = props; + const dispatch = useAppDispatch(); + const theme = useTheme(); + const lgUp = useMediaQuery(theme.breakpoints.up('lg')); + + return ( + + + + {lgUp ? null : ( + { + dispatch(toggleDrawer()); + }} + edge={'start'} + sx={{ mr: 3 }} + size="large" + > + + + )} + + {title} + + + + + + ); +}; diff --git a/docs/src/pages/index.tsx b/docs/src/pages/index.tsx new file mode 100644 index 000000000..9559c819f --- /dev/null +++ b/docs/src/pages/index.tsx @@ -0,0 +1 @@ +export * from './componentPreviewPage'; diff --git a/docs/src/react-app-env.d.ts b/docs/src/react-app-env.d.ts new file mode 100644 index 000000000..6431bc5fc --- /dev/null +++ b/docs/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/docs/src/redux/appState.tsx b/docs/src/redux/appState.tsx new file mode 100644 index 000000000..f4106c3ff --- /dev/null +++ b/docs/src/redux/appState.tsx @@ -0,0 +1,28 @@ +import { createSlice } from '@reduxjs/toolkit'; + +type AppState = { + drawerOpen: boolean; +}; + +const initialState: AppState = { + drawerOpen: false, +}; + +export const appStateSlice = createSlice({ + name: 'appState', + initialState: initialState, + reducers: { + closeDrawer: (state) => ({ + ...state, + drawerOpen: false, + }), + toggleDrawer: (state) => ({ + ...state, + drawerOpen: !state.drawerOpen, + }), + }, +}); + +export const { closeDrawer, toggleDrawer } = appStateSlice.actions; + +export default appStateSlice.reducer; diff --git a/docs/src/redux/componentsPropsState.tsx b/docs/src/redux/componentsPropsState.tsx new file mode 100644 index 000000000..8b5572546 --- /dev/null +++ b/docs/src/redux/componentsPropsState.tsx @@ -0,0 +1,112 @@ +import { createSlice, PayloadAction } from '@reduxjs/toolkit'; +import appBarConfig from '../componentDocs/AppBar/playground/AppBarConfig'; +import channelValueConfig from '../componentDocs/ChannelValue/playground/ChannelValueConfig'; +import drawerConfig from '../componentDocs/Drawer/playground/DrawerConfig'; +import drawerHeaderConfig from '../componentDocs/DrawerHeader/playground/DrawerHeaderConfig'; +import drawerSubheaderConfig from '../componentDocs/DrawerSubheader/playground/DrawerSubheaderConfig'; +import drawerFooterConfig from '../componentDocs/DrawerFooter/playground/DrawerFooterConfig'; +import drawerNavGroupConfig from '../componentDocs/DrawerNavGroup/playground/DrawerNavGroupConfig'; +import drawerNavItemConfig from '../componentDocs/DrawerNavItem/playground/DrawerNavItemConfig'; +import drawerRailItemConfig from '../componentDocs/DrawerRailItem/playground/DrawerRailItemConfig'; +import emptyStateConfig from '../componentDocs/EmptyState/playground/EmptyStateConfig'; +import heroConfig from '../componentDocs/Hero/playground/HeroConfig'; +import infoListItemConfig from '../componentDocs/InfoListItem/playground/InfoListItemConfig'; +import listItemTagConfig from '../componentDocs/ListItemTag/playground/ListItemTagConfig'; +import spacerConfig from '../componentDocs/Spacer/playground/SpacerConfig'; +import scoreCardConfig from '../componentDocs/ScoreCard/playground/ScoreCardConfig'; +import threeLinerConfig from '../componentDocs/ThreeLiner/playground/ThreeLinerConfig'; +import toolbarMenuConfig from '../componentDocs/ToolbarMenu/playground/ToolbarMenuConfig'; +import userMenuConfig from '../componentDocs/UserMenu/playground/UserMenuConfig'; +import { getComponentState } from '../shared/utilities'; +import { PayloadType, ComponentType } from '../__types__'; + +type ComponentState = { + appBarComponent: ComponentType; + channelValueComponent: ComponentType; + drawerComponent: ComponentType; + drawerHeaderComponent: ComponentType; + drawerSubheaderComponent: ComponentType; + drawerFooterComponent: ComponentType; + drawerNavGroupComponent: ComponentType; + drawerNavItemComponent: ComponentType; + drawerRailItemComponent: ComponentType; + emptyStateComponent: ComponentType; + heroComponent: ComponentType; + infoListItemComponent: ComponentType; + listItemTagComponent: ComponentType; + spacerComponent: ComponentType; + scoreCardComponent: ComponentType; + threeLinerComponent: ComponentType; + toolbarMenuComponent: ComponentType; + userMenuComponent: ComponentType; +}; + +const initialState: ComponentState = { + appBarComponent: appBarConfig, + channelValueComponent: channelValueConfig, + drawerComponent: drawerConfig, + drawerHeaderComponent: drawerHeaderConfig, + drawerSubheaderComponent: drawerSubheaderConfig, + drawerFooterComponent: drawerFooterConfig, + drawerNavGroupComponent: drawerNavGroupConfig, + drawerNavItemComponent: drawerNavItemConfig, + drawerRailItemComponent: drawerRailItemConfig, + emptyStateComponent: emptyStateConfig, + heroComponent: heroConfig, + infoListItemComponent: infoListItemConfig, + listItemTagComponent: listItemTagConfig, + spacerComponent: spacerConfig, + scoreCardComponent: scoreCardConfig, + threeLinerComponent: threeLinerConfig, + toolbarMenuComponent: toolbarMenuConfig, + userMenuComponent: userMenuConfig, +}; + +export const componentPropsStateSlice = createSlice({ + name: 'componentsPropsState', + initialState: initialState, + reducers: { + updateProp: (state, action: PayloadAction) => { + const newArray = getComponentState(action.payload.componentName, state); + const updatedKnob = newArray?.props?.filter((prop) => prop.propName === action.payload.propName); + if (updatedKnob) { + updatedKnob[0].inputValue = action.payload.propValue; + } + }, + updateSharedProp: (state, action: PayloadAction) => { + const newArray = getComponentState(action.payload.componentName, state); + const updatedKnob = newArray?.sharedProps?.filter((prop) => prop.propName === action.payload.propName); + if (updatedKnob) { + updatedKnob[0].inputValue = action.payload.propValue; + } + }, + updateOtherProp: (state, action: PayloadAction) => { + const newArray = getComponentState(action.payload.componentName, state); + const updatedKnob = newArray?.otherProps?.filter((prop) => prop.propName === action.payload.propName); + if (updatedKnob) { + updatedKnob[0].inputValue = action.payload.propValue; + } + }, + updateOtherComponentProp: (state, action: PayloadAction) => { + const newArray = getComponentState(action.payload.componentName, state); + const updatedKnob = newArray?.otherComponentProps?.childComponentProps?.filter( + (prop) => prop.propName === action.payload.propName + ); + if (updatedKnob) { + updatedKnob[0].inputValue = action.payload.propValue; + } + }, + updateComponentProp: (state, action: PayloadAction) => { + const newArray = getComponentState(action.payload.componentName, state); + const updatedKnob = newArray?.props?.filter((prop) => prop.propName === action.payload.propName); + if (updatedKnob) { + updatedKnob[0].inputValue = action.payload.propValue; + } + }, + }, +}); + +export const { updateProp, updateSharedProp, updateOtherProp, updateComponentProp, updateOtherComponentProp } = + componentPropsStateSlice.actions; + +export default componentPropsStateSlice.reducer; diff --git a/docs/src/redux/hooks.ts b/docs/src/redux/hooks.ts new file mode 100644 index 000000000..313e2dbb1 --- /dev/null +++ b/docs/src/redux/hooks.ts @@ -0,0 +1,5 @@ +import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'; +import type { RootState, AppDispatch } from './store'; + +export const useAppDispatch: () => AppDispatch = useDispatch; +export const useAppSelector: TypedUseSelectorHook = useSelector; diff --git a/docs/src/redux/store.tsx b/docs/src/redux/store.tsx new file mode 100644 index 000000000..734ff4c6e --- /dev/null +++ b/docs/src/redux/store.tsx @@ -0,0 +1,15 @@ +import { configureStore } from '@reduxjs/toolkit'; +import appStateReducer from './appState'; +import componentsPropsStateReducer from './componentsPropsState'; + +export const store = configureStore({ + reducer: { + appState: appStateReducer, + componentsPropsState: componentsPropsStateReducer, + }, +}); + +// Infer the `RootState` and `AppDispatch` types from the store itself +export type RootState = ReturnType; +// Inferred type: {posts: PostsState, comments: CommentsState, users: UsersState} +export type AppDispatch = typeof store.dispatch; diff --git a/docs/src/reportWebVitals.ts b/docs/src/reportWebVitals.ts new file mode 100644 index 000000000..886866863 --- /dev/null +++ b/docs/src/reportWebVitals.ts @@ -0,0 +1,16 @@ +/* eslint-disable */ +import { ReportHandler } from 'web-vitals'; + +const reportWebVitals = (onPerfEntry?: ReportHandler) => { + if (onPerfEntry && onPerfEntry instanceof Function) { + void import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/docs/src/router/GoogleAnalyticsWrapper.tsx b/docs/src/router/GoogleAnalyticsWrapper.tsx new file mode 100644 index 000000000..2bb23354a --- /dev/null +++ b/docs/src/router/GoogleAnalyticsWrapper.tsx @@ -0,0 +1,12 @@ +import React, { useEffect } from 'react'; +import { useLocation } from 'react-router-dom'; +import ReactGA from 'react-ga'; + +export const GoogleAnalyticsWrapper: React.FC = () => { + const location = useLocation(); + useEffect(() => { + ReactGA.pageview(window.location.pathname + window.location.search); + }, [location.pathname, location.search]); + + return null; +}; diff --git a/docs/src/router/ScrollToTop.tsx b/docs/src/router/ScrollToTop.tsx new file mode 100644 index 000000000..04506d3eb --- /dev/null +++ b/docs/src/router/ScrollToTop.tsx @@ -0,0 +1,24 @@ +import { useEffect } from 'react'; +import { useLocation } from 'react-router'; + +export const ScrollToTop = (): any => { + const { pathname, hash } = useLocation(); + useEffect(() => { + // if an anchor link is present, scroll to the anchor link; + // else scroll the page to the top + + if (hash) { + const id = hash.replace('#', ''); + const headline = document.getElementById(id); + if (headline) { + window.scrollTo(0, headline.offsetTop); + } else { + window.scrollTo(0, 0); + } + } else { + window.scrollTo(0, 0); + } + }, [pathname, hash]); + + return null; +}; diff --git a/docs/src/router/drawer.tsx b/docs/src/router/drawer.tsx new file mode 100644 index 000000000..80f02e344 --- /dev/null +++ b/docs/src/router/drawer.tsx @@ -0,0 +1,141 @@ +import React, { useCallback } from 'react'; +import { useMediaQuery, useTheme } from '@mui/material'; +import { useNavigate, useLocation } from 'react-router'; +import { Drawer, DrawerBody, DrawerHeader, DrawerNavGroup, NavItem } from '@brightlayer-ui/react-components'; +import { pageDefinitions, RouteConfig } from '../__configuration__/navigationMenu/navigation'; +import Box from '@mui/material/Box'; +import Chip from '@mui/material/Chip'; +import Typography from '@mui/material/Typography'; +import { DRAWER_WIDTH } from '../shared'; +import AvatarSvg from '../assets/react_logo.svg'; + +import { useAppDispatch, useAppSelector } from '../redux/hooks'; +import { RootState } from '../redux/store'; +import { closeDrawer, toggleDrawer } from '../redux/appState'; + +const backgroundImage = require('../assets/cubes_tile.png'); +const linearGradientOverlayImage = `linear-gradient(to right, rgba(0, 123, 193, 1) 22.4%, rgba(0, 123, 193, 0.2) 100%), url(${backgroundImage})`; + +const tabs = ['examples', 'api-docs', 'playground']; + +const convertNavItems = ( + navData: RouteConfig[], + parentUrl: string, + depth: number, + handleNavigate: (u: string) => void, + dispatch: any +): NavItem[] => { + const convertedItems: NavItem[] = []; + for (let i = 0; i < navData.length; i++) { + const item = navData[i]; + const fullURL = `${parentUrl}${item.path || ''}`; + convertedItems.push({ + title: item.title, + icon: depth === 0 ? item.icon : undefined, + itemID: fullURL.replace(/\/$/, ''), + hidePadding: depth > 0 ? false : true, + onClick: item.element + ? (): void => { + handleNavigate(fullURL); + dispatch(toggleDrawer()); + } + : undefined, + items: item.pages + ? convertNavItems(item.pages, `${parentUrl}${item.path || ''}`, depth + 1, handleNavigate, dispatch) + : undefined, + }); + } + return convertedItems; +}; + +export const NavigationDrawer: React.FC = () => { + const drawerOpen = useAppSelector((state: RootState) => state.appState.drawerOpen); + const theme = useTheme(); + const lgDown = useMediaQuery(theme.breakpoints.down('lg')); + const dispatch = useAppDispatch(); + const location = useLocation(); + const navigate = useNavigate(); + const activeItem = location.pathname.replace(/\/(examples|api-docs|playground)/, ''); + + const handleNavigate = useCallback( + (id: string): void => { + const tabName = tabs.includes(location.pathname.split('/')[4]) + ? location.pathname.split('/')[4] + : location.pathname.split('/')[3]; + navigate(`${id}${tabName || ''}`); + dispatch(toggleDrawer()); + }, + [location.pathname, dispatch, navigate] + ); + + return ( + { + dispatch(closeDrawer()); + }, + }} + > + + Brightlayer User Interface + + + Developer Docs + + } + label={ + + REACT + + } + variant={'filled'} + size={'small'} + /> + +
+ } + /> + + {pageDefinitions.map((navGroup) => ( + + ))} + + + ); +}; diff --git a/docs/src/router/main.tsx b/docs/src/router/main.tsx new file mode 100755 index 000000000..90bef8e41 --- /dev/null +++ b/docs/src/router/main.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { Navigate, Route } from 'react-router-dom'; +import { pageDefinitions, RouteConfig } from '../__configuration__/navigationMenu/navigation'; + +const buildRoutes = (routes: RouteConfig[]): JSX.Element[] => + routes.map((route) => { + const subPages = [...(route.pages || []), ...(route.children || [])]; + return ( + + {buildRoutes(subPages)} + {subPages.length > 0 && ( + <> + } /> + } /> + + )} + + ); + }); + +export const MainRouter = ( + <> + } /> + {buildRoutes(pageDefinitions)} + } /> + +); diff --git a/docs/src/setupTests.ts b/docs/src/setupTests.ts new file mode 100644 index 000000000..8f2609b7b --- /dev/null +++ b/docs/src/setupTests.ts @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/docs/src/shared/CodeBlock.tsx b/docs/src/shared/CodeBlock.tsx new file mode 100644 index 000000000..d40a04716 --- /dev/null +++ b/docs/src/shared/CodeBlock.tsx @@ -0,0 +1,42 @@ +import React, { HTMLAttributes, useEffect } from 'react'; +import Prism from 'prismjs'; +import Box from '@mui/material/Box'; +import * as Colors from '@brightlayer-ui/colors'; + +export type CodeBlockProps = HTMLAttributes & { + code: string; + language: string; + dataLine?: string; +}; + +export const CodeBlock: React.FC = (props): JSX.Element => { + const { code, language, dataLine, ...divProps } = props; + useEffect(() => { + Prism.highlightAll(); + }, [code]); + return ( + +
+                
+                    {code}
+                
+            
+
+ ); +}; diff --git a/docs/src/shared/CodeBlockActionButtonRow.tsx b/docs/src/shared/CodeBlockActionButtonRow.tsx new file mode 100644 index 000000000..fb45abfe8 --- /dev/null +++ b/docs/src/shared/CodeBlockActionButtonRow.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import { CopyToClipboard } from './CopyToClipboardButton'; +import { FullCodeOnGithub } from './FullCodeOnGithubButton'; +import { SxProps } from '@mui/material/styles'; +import { TooltipProps } from '@mui/material/Tooltip'; + +type Position = 'bottom' | 'top' | 'left' | 'right'; + +export type CodeBlockActionButtonRowProps = { + copyText?: string; + title?: string; + url?: string; + sx?: SxProps; + duration?: number; + position?: Position; + copiedTitle?: string; + toolTipProps?: TooltipProps; +}; + +export const CodeBlockActionButtonRow: React.FC = (props): JSX.Element => { + const { title = 'Copy All', copyText = '', url = '', sx } = props; + + return ( + + {copyText !== '' && ( + + )} + {url !== '' && } + + ); +}; diff --git a/docs/src/shared/ComponentPreviewTabs.tsx b/docs/src/shared/ComponentPreviewTabs.tsx new file mode 100644 index 000000000..29de2a5a1 --- /dev/null +++ b/docs/src/shared/ComponentPreviewTabs.tsx @@ -0,0 +1,184 @@ +import * as React from 'react'; +import Tabs from '@mui/material/Tabs'; +import Tab from '@mui/material/Tab'; +import Box from '@mui/material/Box'; +import { Link, Outlet, useLocation, useNavigate } from 'react-router-dom'; +import { SxProps, Theme, useTheme } from '@mui/material/styles'; +import { TabPanel } from '../shared'; +import { PLAYGROUND_DRAWER_WIDTH } from './constants'; + +const hidePlaygroundTabs = ['drawer-layout', 'spacer', 'drawer-body']; + +function a11yProps(index: number): any { + return { + id: `simple-tab-${index}`, + 'aria-controls': `simple-tabpanel-${index}`, + }; +} + +function getTabNumber(location: string): number { + const pathName = location.substring(location.lastIndexOf('/') + 1); + if (!pathName) return 0; + + switch (pathName) { + case 'api-docs': + return 1; + case 'playground': + return 2; + default: + return 0; + } +} + +function togglePlaygroundTab(location: string): boolean { + const tabName = location.split('/').filter((e) => hidePlaygroundTabs.includes(e))[0]; + return hidePlaygroundTabs.includes(tabName); +} + +const tabStyles = { + width: '100%', + color: 'text.primary', + '&.Mui-selected': { + color: 'primary.main', + }, +}; + +const tabPanelContentStyles: SxProps = { + display: 'flex', + flexDirection: 'column', + height: '100%', + minHeight: (theme: Theme) => `calc(100vh - ${theme.spacing(8)})`, + maxWidth: '1080px', + mx: 'auto', +}; + +const outletContainerStyles = { + pb: 6, +}; + +const playgroundContentStyles = { + maxHeight: `calc(100vh - 64px)`, + height: '100%', + display: 'flex', + flex: '1 1 0px', + marginRight: `${PLAYGROUND_DRAWER_WIDTH}px`, +}; + +export const ComponentPreviewTabs = (): JSX.Element => { + const navigate = useNavigate(); + const location = useLocation(); + const [value, setValue] = React.useState(0); + const [hidePlaygroundTab, setHidePlaygroundTab] = React.useState(false); + + const theme = useTheme(); + const handleChange = (event: React.SyntheticEvent, newValue: number): void => { + navigate(`/${newValue === 1 ? 'api-docs' : newValue === 2 ? 'playground' : 'examples'}`); + }; + + React.useEffect(() => { + setValue(getTabNumber(location?.pathname)); + setHidePlaygroundTab(togglePlaygroundTab(location.pathname)); + }, [location]); + + return ( + <> + + + + {!hidePlaygroundTab && ( + + )} + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/docs/src/shared/CopyToClipboardButton.tsx b/docs/src/shared/CopyToClipboardButton.tsx new file mode 100644 index 000000000..df68eae76 --- /dev/null +++ b/docs/src/shared/CopyToClipboardButton.tsx @@ -0,0 +1,69 @@ +import Tooltip, { TooltipProps } from '@mui/material/Tooltip'; +import React, { useState } from 'react'; +import { copyTextToClipboard } from '.'; +import { isMobile } from 'react-device-detect'; +import CopyAllIcon from '@mui/icons-material/CopyAll'; +import Button from '@mui/material/Button'; +import Box from '@mui/material/Box'; +import { Theme, SxProps } from '@mui/material/styles'; + +type Position = 'bottom' | 'top' | 'left' | 'right'; + +type CopyButtonProps = { + sx?: SxProps; +}; + +type CopyToClipboardProps = { + duration?: number; + position?: Position; + title?: string; + copiedTitle?: string; + copyText: string; + toolTipProps?: TooltipProps; + copyButtonProps?: CopyButtonProps; +}; + +export const CopyToClipboard: React.FC = (props) => { + const { + duration = 1000, + position = 'bottom', + title = '', + copiedTitle = 'Copied', + copyText, + toolTipProps, + copyButtonProps, + } = props; + const [isCopied, setIsCopied] = useState(false); + const [showTooltip, setShowTooltip] = useState(false); + + return isMobile ? null : ( + + + + + + ); +}; diff --git a/docs/src/shared/DocTextField.tsx b/docs/src/shared/DocTextField.tsx new file mode 100644 index 000000000..6423fce92 --- /dev/null +++ b/docs/src/shared/DocTextField.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { TextField as MuiTextField, TextFieldProps as MuiTextFieldProps } from '@mui/material'; +import { PropsType } from '../__types__'; + +type TextFieldProps = MuiTextFieldProps & { + propData: PropsType; +}; + +export const DocTextField = (props: TextFieldProps): JSX.Element => { + const { propData, ...textFieldProps } = props; + const isRequiredPropEmpty = propData.required && propData.inputValue === ''; + return ( + + ); +}; diff --git a/docs/src/shared/ExampleShowcase.tsx b/docs/src/shared/ExampleShowcase.tsx new file mode 100644 index 000000000..f4033644e --- /dev/null +++ b/docs/src/shared/ExampleShowcase.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import Box, { BoxProps } from '@mui/material/Box'; +import { Theme, SxProps } from '@mui/material/styles'; +import * as colors from '@brightlayer-ui/colors'; + +export type ExampleShowcaseProps = BoxProps & { + sx?: SxProps; +}; + +export const ExampleShowcase = React.forwardRef( + (props: ExampleShowcaseProps, ref): JSX.Element => ( + + {props.children} + + ) +); diff --git a/docs/src/shared/FullCodeOnGithubButton.tsx b/docs/src/shared/FullCodeOnGithubButton.tsx new file mode 100644 index 000000000..c9e76e87c --- /dev/null +++ b/docs/src/shared/FullCodeOnGithubButton.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import Button from '@mui/material/Button'; +import GitHubIcon from '@mui/icons-material/GitHub'; +import { SxProps, Theme } from '@mui/material/styles'; +import { DOCS_BRANCH } from './constants'; + +type FullCodeOnGithubProps = { + url: string; + sx?: SxProps; +}; + +export const FullCodeOnGithub: React.FC = (props) => ( + +); diff --git a/docs/src/shared/Logo.tsx b/docs/src/shared/Logo.tsx new file mode 100644 index 000000000..837198a1e --- /dev/null +++ b/docs/src/shared/Logo.tsx @@ -0,0 +1,24 @@ +import React from 'react'; + +type BluiSVGProps = { + className?: string; + color?: string; + size?: number; +}; +export const BluiSVG: React.FC = (props) => { + const { color, size, className } = props; + return ( + + + + + ); +}; diff --git a/docs/src/shared/PlaygroundDrawer.tsx b/docs/src/shared/PlaygroundDrawer.tsx new file mode 100644 index 000000000..87f6970a8 --- /dev/null +++ b/docs/src/shared/PlaygroundDrawer.tsx @@ -0,0 +1,274 @@ +import React from 'react'; +import Drawer from '@mui/material/Drawer'; +import { DocTextField, PLAYGROUND_DRAWER_WIDTH } from '../shared'; +import { ComponentType, OtherComponentPropsType, PropsType } from '../__types__'; +import { updateProp, updateSharedProp, updateOtherProp, updateOtherComponentProp } from '../redux/componentsPropsState'; +import { useAppDispatch } from '../redux/hooks'; +import Typography from '@mui/material/Typography'; +import Accordion from '@mui/material/Accordion'; +import AccordionDetails from '@mui/material/AccordionDetails'; +import AccordionSummary from '@mui/material/AccordionSummary'; +import { useTheme } from '@mui/material/styles'; +import createStyles from '@mui/styles/createStyles'; +import makeStyles from '@mui/styles/makeStyles'; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import Box from '@mui/material/Box'; +import Checkbox from '@mui/material/Checkbox/Checkbox'; +import Divider from '@mui/material/Divider'; +import FormControl from '@mui/material/FormControl/FormControl'; +import FormControlLabel from '@mui/material/FormControlLabel/FormControlLabel'; +import FormHelperText from '@mui/material/FormHelperText/FormHelperText'; +import InputLabel from '@mui/material/InputLabel/InputLabel'; +import MenuItem from '@mui/material/MenuItem/MenuItem'; +import Stack from '@mui/material/Stack'; +import Select from '@mui/material/Select/Select'; +import { ColorPicker } from './components/ColorPicker/ColorPicker.component'; +import { NumberPicker } from './components/NumberPicker/NumberPicker.component'; + +const useStyles = makeStyles(() => + createStyles({ + accordionRoot: { + boxShadow: 'none', + '&:before': { + display: 'none', + }, + }, + }) +); + +type Anchor = 'right'; +type DrawerProps = { + drawerData: ComponentType; +}; +const PlaygroundDrawer = (props: DrawerProps): JSX.Element => { + const { drawerData: DrawerData } = props; + const componentName = DrawerData.componentName as string; + const dispatch = useAppDispatch(); + const theme = useTheme(); + const classes = useStyles(theme); + const [state, setState] = React.useState({ + right: true, + }); + const toggleDrawer = (anchor: Anchor, open: boolean) => (event: React.KeyboardEvent | React.MouseEvent) => { + if ( + event.type === 'keydown' && + ((event as React.KeyboardEvent).key === 'Tab' || (event as React.KeyboardEvent).key === 'Shift') + ) { + return; + } + + setState({ ...state, [anchor]: open }); + }; + + const dispatchActions = (groupType: string, newPropState: any): void => { + const groupName = groupType.substring(0, groupType.indexOf('-')); + switch (groupName) { + case 'props': + dispatch(updateProp(newPropState)); + break; + case 'otherProps': + dispatch(updateOtherProp(newPropState)); + break; + case 'sharedProps': + dispatch(updateSharedProp(newPropState)); + break; + case 'otherComponentProps': + dispatch(updateOtherComponentProp(newPropState)); + break; + default: + dispatch(updateProp(newPropState)); + break; + } + }; + + const createNewPropState = ( + name: string, + value: string | boolean | number | number[], + component: string, + groupType: string + ): void => { + const newState = { + propName: name, + propValue: value, + componentName: component, + }; + dispatchActions(groupType, newState); + }; + + const handleChange = ( + propName: string, + propValue: string | boolean | number | number[], + componentTitle: string, + groupType: string + ): void => { + createNewPropState(propName, propValue, componentTitle, groupType); + }; + + const renderSelect = (prop: PropsType, index: string): JSX.Element => ( + + {`${prop.propName}: ${prop.propType}`} + + {prop.helperText} + + ); + + const renderBoolean = (prop: PropsType, index: string): JSX.Element => ( + handleChange(prop.propName, event.target.checked, componentName, index)} + disabled={prop.disabled} + /> + } + sx={{ alignItems: 'flex-start' }} + label={ + + {`${ + prop.label ? prop.label : prop.propName + }`} + + {prop.helperText} + + + } + /> + ); + + const renderSlider = (prop: PropsType, index: string): JSX.Element => ( + { + const value = parseFloat(event.target.value); + handleChange( + prop.propName, + isNaN(value) && prop.propType === 'number | string' ? '' : isNaN(value) ? '' : value, + componentName, + index + ); + }} + /> + ); + + const renderTextField = (prop: PropsType, index: string): JSX.Element => ( + handleChange(prop.propName, String(event.target.value), componentName, index)} + /> + ); + + const renderColorInput = (prop: PropsType, index: string): JSX.Element => ( + handleChange(prop.propName, String(event.target.value), componentName, index)} + /> + ); + + const propBlock = (prop: PropsType, index: string): JSX.Element => ( + + {prop.inputType === 'select' ? renderSelect(prop, index) : undefined} + {prop.inputType === 'boolean' ? renderBoolean(prop, index) : undefined} + {prop.inputType === 'string' ? renderTextField(prop, index) : undefined} + {prop.inputType === 'colorPicker' ? renderColorInput(prop, index) : undefined} + {prop.inputType === 'number' ? renderSlider(prop, index) : undefined} + + ); + + const iterateProps = ( + knobs: PropsType[], + headingTitle: string, + sectionNumber: number, + groupType: string + ): JSX.Element => ( + + }> + + {headingTitle} + + + + + {knobs?.map( + (item: PropsType, index: number): JSX.Element => propBlock(item, `${groupType}-${index}`) + )} + + + + ); + + const displayPropsByGroupType = (data: ComponentType): JSX.Element => { + const requiredProps: PropsType[] = data.props?.filter((prop) => prop.required) as PropsType[]; + const optionalProps: PropsType[] = data.props?.filter((prop) => !prop.required) as PropsType[]; + const otherProps: PropsType[] = data.otherProps as PropsType[]; + const sharedProps: PropsType[] = data.sharedProps as PropsType[]; + const otherComponentProps: OtherComponentPropsType = data.otherComponentProps as OtherComponentPropsType; + let sectionNumber = 0; + return ( + } mb={2}> + {requiredProps?.length > 0 && iterateProps(requiredProps, 'Required Props', sectionNumber++, 'props')} + {optionalProps?.length > 0 && iterateProps(optionalProps, 'Optional Props', sectionNumber++, 'props')} + {otherComponentProps?.childComponentProps?.length > 0 && + iterateProps( + otherComponentProps.childComponentProps, + otherComponentProps.childComponentName, + sectionNumber++, + 'otherComponentProps' + )} + {sharedProps?.length > 0 && iterateProps(sharedProps, 'Shared Props', sectionNumber++, 'sharedProps')} + {otherProps?.length > 0 && iterateProps(otherProps, 'Others', sectionNumber++, 'otherProps')} + + ); + }; + + return ( +
+ + + {displayPropsByGroupType(DrawerData)} + + +
+ ); +}; + +export default PlaygroundDrawer; diff --git a/docs/src/shared/PreviewComponentWithCode.tsx b/docs/src/shared/PreviewComponentWithCode.tsx new file mode 100644 index 000000000..196f107e3 --- /dev/null +++ b/docs/src/shared/PreviewComponentWithCode.tsx @@ -0,0 +1,67 @@ +import React, { HTMLAttributes } from 'react'; +import Box from '@mui/material/Box/Box'; +import { CodeBlock, CopyToClipboard } from '.'; +import * as Colors from '@brightlayer-ui/colors'; + +export type PreviewComponentProps = HTMLAttributes & { + previewContent: JSX.Element; + code: string; +}; + +const PreviewComponentWithCode: React.FC = (props): JSX.Element => { + const { previewContent, code } = props; + const [show, setShow] = React.useState(false); + + return ( + <> + + {previewContent} + + setShow(!show)} + onMouseLeave={(): void => setShow(false)} + > + + + {show && ( + + )} + + + + ); +}; + +export default PreviewComponentWithCode; diff --git a/docs/src/shared/TabPanel.tsx b/docs/src/shared/TabPanel.tsx new file mode 100644 index 000000000..a5e761ef3 --- /dev/null +++ b/docs/src/shared/TabPanel.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; + +type TabPanelProps = { + children?: React.ReactNode; + index: number; + value: number; +}; + +export const TabPanel = (props: TabPanelProps): JSX.Element => { + const { children, value, index, ...other } = props; + + return ( + + ); +}; diff --git a/docs/src/shared/components/ColorPicker/ColorPicker.component.tsx b/docs/src/shared/components/ColorPicker/ColorPicker.component.tsx new file mode 100644 index 000000000..eaeb84c3d --- /dev/null +++ b/docs/src/shared/components/ColorPicker/ColorPicker.component.tsx @@ -0,0 +1,122 @@ +import React, { ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react'; +import { Box, IconButton, Stack, TextField as MuiTextField, TextFieldProps as MuiTextFieldProps } from '@mui/material'; +import InputAdornment from '@mui/material/InputAdornment'; +import { Colorize, QuestionMark } from '@mui/icons-material'; +import { PropsType } from '../../../__types__'; +import Color from 'color'; +import _debounce from 'lodash.debounce'; + +type ColorPickerProps = MuiTextFieldProps & { + propData: PropsType; + allowMUIColors?: boolean; +}; + +const HEX = /^#[0-9a-f]{6}$/i; +const MUI_COLOR = /^(primary|secondary|error|success|warning|info|text)\.(main|dark|light|contrastText)$/; +const MUI_GREY = /^(grey)\.(50|100|200|300|400|500|600|700|800|900|A100|A200|A400|A700)$/; +const MUI_COMMON = /^(common)\.(white|black)$/; +const MUI_TEXT = /^(text)\.(primary|secondary|disabled)$/; +const MUI_DIVIDER = /^divider$/; +const MUI_BACKGROUND = /^(background)\.(paper|default)$/; +const MUI_ACTION = /^(action)\.(active|hover|selected|disabled|disabledBackground|focus)$/; + +const muiRegex = [MUI_COLOR, MUI_GREY, MUI_COMMON, MUI_TEXT, MUI_DIVIDER, MUI_BACKGROUND, MUI_ACTION]; + +const colorIsValid = (color: string, useMui = false): boolean => { + try { + Color(color); + return true; + } catch (e) { + if (useMui) { + for (let i = 0; i < muiRegex.length; i++) { + if (muiRegex[i].test(color)) { + return true; + } + } + } + return false; + } +}; + +export const ColorPicker = (props: ColorPickerProps): JSX.Element => { + const { propData, allowMUIColors = false, ...textFieldProps } = props; + const [color, setColor] = useState(propData.inputValue as string); + + const handleColorChange = useCallback( + (e: ChangeEvent): void => { + textFieldProps.onChange?.(e); + }, + [textFieldProps.onChange] + ); + + const validColor = colorIsValid(color, allowMUIColors) || (!propData.required && color === ''); + + // debounce the color change events to 1 per 300ms + const handleColorChangeDebounced = useMemo(() => _debounce(handleColorChange, 300), [handleColorChange]); + + // cancel the debounce event if we unmount before it executes + useEffect( + () => () => { + handleColorChangeDebounced.cancel(); + }, + [handleColorChangeDebounced] + ); + + return ( + <> + { + setColor(e.target.value); + handleColorChangeDebounced(e as ChangeEvent); + }} + variant={'filled'} + type={'text'} + InputProps={{ + endAdornment: ( + + + + {validColor ? : } + + + { + setColor(e.target.value); + handleColorChangeDebounced(e); + }} + /> + + + ), + }} + value={color} + label={`${propData.label ? propData.label : propData.propName}${ + propData.label ? '' : `:${propData.propType}` + }`} + error={!validColor} + helperText={validColor ? propData.helperText : 'Color value not recognized'} + /> + + ); +}; diff --git a/docs/src/shared/components/NumberPicker/NumberPicker.component.tsx b/docs/src/shared/components/NumberPicker/NumberPicker.component.tsx new file mode 100644 index 000000000..96b2d0f35 --- /dev/null +++ b/docs/src/shared/components/NumberPicker/NumberPicker.component.tsx @@ -0,0 +1,139 @@ +import React, { ChangeEvent, useCallback } from 'react'; +import { + Box, + ClickAwayListener, + Collapse, + IconButton, + Paper, + Slider, + Stack, + TextField as MuiTextField, + TextFieldProps as MuiTextFieldProps, +} from '@mui/material'; +import InputAdornment from '@mui/material/InputAdornment'; +import { ArrowDropDown, ArrowDropUp } from '@mui/icons-material'; +import { PropsType } from '../../../__types__'; + +type NumberPickerProps = MuiTextFieldProps & { + propData: PropsType; +}; + +const floatMath = (value: string | number, step: number): number => { + const valueDecimal = value.toString().indexOf('.') + 1; + const valueDecimalPlaces = value.toString().length - valueDecimal; + const stepDecimal = step.toString().indexOf('.') + 1; + const stepDecimalPlaces = step.toString().length - stepDecimal; + + const floatCorrectionFactor = Math.pow(10, Math.max(valueDecimalPlaces, stepDecimalPlaces)); + // floating point math correction + return ((value as number) * floatCorrectionFactor + step * floatCorrectionFactor) / floatCorrectionFactor; +}; + +export const NumberPicker = (props: NumberPickerProps): JSX.Element => { + const { propData, ...textFieldProps } = props; + const { + step: stepSize = 1, + min = Number.MIN_SAFE_INTEGER, + max = Number.MAX_SAFE_INTEGER, + } = propData?.rangeData || {}; + + // Slider Popover + const [anchorEl, setAnchorEl] = React.useState(null); + const open = Boolean(anchorEl); + const handleOpen = (event: React.MouseEvent): void => { + setAnchorEl(event.currentTarget); + }; + const handleClose = (): void => { + setAnchorEl(null); + }; + + const handleNumberChange = useCallback( + (e: ChangeEvent): void => { + textFieldProps.onChange?.(e); + }, + [textFieldProps.onChange] + ); + + return ( + + { + // only allow numeric values to be typed in + if (e.target.value && !/^\d+(?:[.]\d+)?$/.test(e.target.value)) return; + handleNumberChange(e as ChangeEvent); + }} + inputProps={{ + min: propData?.rangeData?.min, + max: propData?.rangeData?.max, + step: stepSize, + }} + variant={'filled'} + type={'number'} + onClick={handleOpen} + InputProps={{ + endAdornment: ( + // We fake the increment/decrement buttons so we can stop the event propagation (otherwise every increment toggles the slider panel) + + + { + e.stopPropagation(); + const newValue = Math.min( + max, + floatMath(propData.inputValue as number, stepSize) + ); + handleNumberChange({ target: { value: newValue } } as any); + }} + > + + + { + e.stopPropagation(); + const newValue = Math.max( + min, + floatMath(propData.inputValue as number, -1 * stepSize) + ); + handleNumberChange({ target: { value: newValue } } as any); + }} + > + + + + + ), + }} + value={propData.inputValue as number} + label={`${propData.label ? propData.label : propData.propName}: ${propData.propType}`} + helperText={propData.helperText} + /> + + {/* The range slider popover */} + + + + handleNumberChange({ target: { value: value } } as any)} + /> + + + + + ); +}; diff --git a/docs/src/shared/constants.ts b/docs/src/shared/constants.ts new file mode 100644 index 000000000..d35e99192 --- /dev/null +++ b/docs/src/shared/constants.ts @@ -0,0 +1,17 @@ +export const DRAWER_WIDTH = 300; +export const PLAYGROUND_DRAWER_WIDTH = 375; + +export const PADDING = 24; + +export const PAGE_WIDTH = { + WIDE: 1280, // medias, components + REGULAR: 766 + PADDING * 2, // text +}; + +export const REGULAR_WIDTH_STYLE = { + marginLeft: 'auto', + marginRight: 'auto', + maxWidth: PAGE_WIDTH.REGULAR, +}; + +export const DOCS_BRANCH = process.env.REACT_APP_BRANCH || 'master'; // default to master if there is no value diff --git a/docs/src/shared/data/SharedPropsConfig.tsx b/docs/src/shared/data/SharedPropsConfig.tsx new file mode 100644 index 000000000..25729876c --- /dev/null +++ b/docs/src/shared/data/SharedPropsConfig.tsx @@ -0,0 +1,147 @@ +import { PropsType } from '../../__types__'; +import * as Colors from '@brightlayer-ui/colors'; + +export const sharedPropsConfig: PropsType[] = [ + { + propName: 'activeItemBackgroundColor', + inputType: 'colorPicker', + inputValue: Colors.blue[50], + propType: 'string', + helperText: `Background color for the 'active' item`, + required: false, + }, + { + propName: 'activeItemBackgroundShape', + inputType: 'select', + inputValue: 'square', + options: ['round', 'square'], + propType: 'string', + helperText: 'Shape of the active item background highlight', + required: false, + defaultValue: 'square', + }, + { + propName: 'activeItemFontColor', + inputType: 'colorPicker', + inputValue: Colors.blue[500], + propType: 'string', + helperText: `Font color for the 'active' item`, + required: false, + }, + { + propName: 'activeItemIconColor', + inputType: 'colorPicker', + inputValue: Colors.blue[500], + propType: 'string', + helperText: `Icon color for the 'active' item`, + required: false, + }, + { + propName: 'chevron', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Whether to have chevrons for all menu items', + required: false, + defaultValue: false, + }, + { + propName: 'chevronColor', + inputType: 'colorPicker', + inputValue: Colors.gray[500], + propType: 'string', + helperText: 'Color override for the chevron icon', + required: false, + }, + { + propName: 'collapseIcon', + inputType: 'select', + inputValue: 'undefined', + options: ['undefined', '', ''], + propType: 'JSX.Element', + helperText: 'Icon used to collapse drawer', + required: false, + defaultValue: 'undefined', + }, + { + propName: 'disableActiveItemParentStyles', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'If true, NavItems will not have a bold title when a child NavItem is selected', + required: false, + defaultValue: false, + }, + { + propName: 'divider', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Whether to show a line between non-nested items', + required: false, + defaultValue: false, + }, + { + propName: 'expandIcon', + inputType: 'select', + inputValue: 'undefined', + options: ['undefined', '', ''], + propType: 'JSX.Element', + helperText: 'Icon used to expand drawer', + required: false, + defaultValue: 'undefined', + }, + { + propName: 'hidePadding', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Whether to hide the paddings reserved for menu item icons', + required: false, + defaultValue: false, + }, + { + propName: 'itemFontColor', + inputType: 'colorPicker', + inputValue: Colors.black[500], + propType: 'string', + helperText: 'The color used for the item text', + required: false, + }, + { + propName: 'itemIconColor', + inputType: 'colorPicker', + inputValue: Colors.black[500], + propType: 'string', + helperText: 'The color used for the icon', + required: false, + }, + { + propName: 'nestedBackgroundColor', + inputType: 'colorPicker', + inputValue: Colors.white[200], + propType: 'string', + helperText: 'Background color for nested menu items', + required: false, + }, + { + propName: 'nestedDivider', + inputType: 'boolean', + inputValue: false, + propType: 'boolean', + helperText: 'Whether to show a line between nested menu items', + required: false, + defaultValue: false, + }, + { + propName: 'ripple', + inputType: 'boolean', + inputValue: true, + propType: 'boolean', + helperText: 'Whether to apply material ripple effect to items on click', + required: false, + defaultValue: true, + }, +]; + +export default sharedPropsConfig; diff --git a/docs/src/shared/images/farm.jpg b/docs/src/shared/images/farm.jpg new file mode 100644 index 000000000..9ae975bbd Binary files /dev/null and b/docs/src/shared/images/farm.jpg differ diff --git a/docs/src/shared/images/topology_40.png b/docs/src/shared/images/topology_40.png new file mode 100644 index 000000000..e207552f0 Binary files /dev/null and b/docs/src/shared/images/topology_40.png differ diff --git a/docs/src/shared/index.tsx b/docs/src/shared/index.tsx new file mode 100644 index 000000000..e17082c9c --- /dev/null +++ b/docs/src/shared/index.tsx @@ -0,0 +1,12 @@ +export * from './CodeBlock'; +export * from './ComponentPreviewTabs'; +export * from './constants'; +export * from './CopyToClipboardButton'; +export * from './utilities'; +export * from './DocTextField'; +export * from './Logo'; +export * from './PlaygroundDrawer'; +export * from './TabPanel'; +export * from './FullCodeOnGithubButton'; +export * from './CodeBlockActionButtonRow'; +export * from './ExampleShowcase'; diff --git a/docs/src/shared/markdown/SharedProps.mdx b/docs/src/shared/markdown/SharedProps.mdx new file mode 100644 index 000000000..bd765ac6d --- /dev/null +++ b/docs/src/shared/markdown/SharedProps.mdx @@ -0,0 +1,20 @@ +import Box from '@mui/material/Box'; + +## Shared Props + +The following props can be set at any level in the drawer hierarchy ([``](/components/drawer/api-docs), [``](/components/drawer-body/api-docs), [``](/components/drawer-nav-group/api-docs), [``](/components/drawer-nav-item/api-docs), or [``](/components/drawer-rail-item/api-docs)). If they are set on a parent, they will be used for all children. For more customization, you can set these props on individual children and they will override any value set on the parent. + + + +| Name | Description | Type | Required | Default | +| :------------------------ | :-------------------------------------------------------- | :-------- | :------- | :-------------------------- | +| activeItemBackgroundColor | Background color for the 'active' item | `string` | no | varies for light/dark theme | +| activeItemFontColor | Font color for the 'active' item | `string` | no | varies for light/dark theme | +| activeItemIconColor | Icon color for the 'active' item | `string` | no | varies for light/dark theme | +| backgroundColor | Color used for the background of the element | `string` | no | | +| divider | Whether to show a line between non-nested items | `boolean` | no | false | +| itemFontColor | The color used for the item text | `string` | no | varies for light/dark theme | +| itemIconColor | The color used for the icon | `string` | no | varies for light/dark theme | +| ripple | Whether to apply material ripple effect to items on click | `boolean` | no | true | + + diff --git a/docs/StyleOverridesGuide.md b/docs/src/shared/markdown/StyleOverridesGuide.md similarity index 100% rename from docs/StyleOverridesGuide.md rename to docs/src/shared/markdown/StyleOverridesGuide.md diff --git a/docs/src/shared/utilities.tsx b/docs/src/shared/utilities.tsx new file mode 100644 index 000000000..e67cd81cb --- /dev/null +++ b/docs/src/shared/utilities.tsx @@ -0,0 +1,365 @@ +import React from 'react'; +import Add from '@mui/icons-material/Add'; +import AddAPhoto from '@mui/icons-material/AddAPhoto'; +import Device from '@brightlayer-ui/icons-mui/Device'; +import Devices from '@mui/icons-material/Devices'; +import Fan from '@brightlayer-ui/icons-mui/Fan'; +import FanCircled from '@brightlayer-ui/icons-mui/FanCircled'; +import FitnessCenter from '@mui/icons-material/FitnessCenter'; +import Home from '@mui/icons-material/Home'; +import Menu from '@mui/icons-material/Menu'; +import Place from '@mui/icons-material/Place'; +import PinDrop from '@mui/icons-material/PinDrop'; +import Remove from '@mui/icons-material/Remove'; +import RouterIcon from '@mui/icons-material/Router'; +import SensorsOffIcon from '@mui/icons-material/SensorsOff'; +import TrendingUp from '@mui/icons-material/TrendingUp'; +import TrendingDown from '@mui/icons-material/TrendingDown'; +import { RootState } from '../redux/store'; +import { ComponentType, PropsType } from '../__types__'; +import { SvgIconProps } from '@mui/material'; +import Box from '@mui/material/Box'; + +const topologyBgImage = require('../shared/images/topology_40.png'); +const farmBgImage = require('../shared/images/farm.jpg'); + +export const getSnakeCase = (str: string): string => str.replace(/[A-Z]/g, '_$&').toLowerCase().slice(1); + +export const getKebabCase = (str: string): string => str.replace(/[A-Z]/g, '-$&').toLowerCase().slice(1); + +export const snakeToKebabCase = (str: string): string => str.replaceAll('_', '-').toLowerCase(); + +export const unCamelCase = (val: string): string => + val + .replace(/([a-z0-9])([A-Z])/g, '$1 $2') + .replace(/([a-zA-Z])([0-9])/g, '$1 $2') + .replace(/\b([A-Z]+)([A-Z])([a-z])/, '$1 $2$3') + .replace(/^./, (str) => str.toUpperCase()); + +export const titleCase = (val: string): string => + val.replace('-', ' ').replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase()); + +export const snakeToTitleCase = (str: string): string => + str.replaceAll('_', ' ').replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase()); + +export const capitalize = (val: string): string => val.charAt(0).toUpperCase() + val.slice(1); + +// https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript +export function copyTextToClipboard(text: string, onCopied?: () => void): void { + void navigator.clipboard.writeText(text); + if (onCopied) onCopied(); +} + +/** + * Get markdown title hash for markdown doc titles. + * @param str The title string to be hashed + * @returns The hashed string to be used in a URL, all lowercase + */ +export const getHash = (str: string): string => + str + .replace(/ /g, '-') + .replace(/[#?/&]/g, '') + .toLowerCase(); + +export const getIcon = (icon: string, iconProps?: SvgIconProps): JSX.Element | undefined => { + switch (icon) { + case '': + return ; + case '': + return ; + case '': + return React.createElement(Device, iconProps); + case '': + return React.createElement(Devices, iconProps); + case '': + return React.createElement(Fan, iconProps); + case '': + return React.createElement(FanCircled, iconProps); + case '': + return ; + case '': + return ; + case '': + return ; + case '': + return ; + case '': + return ; + case '': + return ; + case '': + return React.createElement(RouterIcon, iconProps); + case '': + return React.createElement(SensorsOffIcon, iconProps); + case '': + return React.createElement(TrendingUp, iconProps); + case '': + return React.createElement(TrendingDown, iconProps); + case 'undefined': + default: + return undefined; + } +}; + +export const createProps = (props: PropsType[]): any => { + const componentProps = props?.reduce( + (acc: any, cur: any) => ({ + ...acc, + [cur.propName]: Array.isArray(cur.inputValue) ? cur.defaultValue : cur.inputValue, + }), + {} + ); + return componentProps; +}; + +export const getComponentState = (componentName: string, state: RootState['componentsPropsState']): ComponentType => { + switch (componentName) { + case 'App Bar': + return state.appBarComponent; + case 'Channel Value': + return state.channelValueComponent; + case 'Drawer Header': + return state.drawerHeaderComponent; + case 'Drawer': + return state.drawerComponent; + case 'Drawer Subheader': + return state.drawerSubheaderComponent; + case 'Drawer Footer': + return state.drawerFooterComponent; + case 'Drawer Nav Group': + return state.drawerNavGroupComponent; + case 'Drawer Nav Item': + return state.drawerNavItemComponent; + case 'Drawer Rail Item': + return state.drawerRailItemComponent; + case 'Empty State': + return state.emptyStateComponent; + case 'Hero': + return state.heroComponent; + case 'Info List Item': + return state.infoListItemComponent; + case 'List Item Tag': + return state.listItemTagComponent; + // case 'Spacer': + // return state.spacerComponent; + case 'Score Card': + return state.scoreCardComponent; + case 'Three Liner': + return state.threeLinerComponent; + case 'Toolbar Menu': + return state.toolbarMenuComponent; + case 'User Menu': + return state.userMenuComponent; + default: + return state.drawerComponent; + } +}; + +export const getImage = (image: string): string => { + switch (image) { + case 'Pattern': + return topologyBgImage; + case 'Farm': + return farmBgImage; + case 'undefined': + return 'undefined'; + default: + return 'undefined'; + } +}; + +const iterateIconProps = (iconProps: any): string => { + let str = ''; + for (const prop in iconProps) { + str = `${str}` + `${prop}="${iconProps[prop]}" `; + } + return str; +}; + +export const getIconWithProp = (icon: string, iconProps: SvgIconProps): string => { + const index = icon.lastIndexOf('/>'); + const result = icon.slice(0, index) + iterateIconProps(iconProps) + icon.slice(index); + return result; +}; + +export const filterPropsAsPerGroupType = ( + state: ComponentType, + propName: string, + groupType?: string +): PropsType | undefined => { + switch (groupType) { + case 'props': + return state.props?.filter((prop) => prop.propName === propName)[0]; + case 'sharedProps': + return state.sharedProps?.filter((prop) => prop.propName === propName)[0]; + case 'otherProps': + return state.otherProps?.filter((prop) => prop.propName === propName)[0]; + default: + return state.props?.filter((prop) => prop.propName === propName)[0]; + } +}; + +export const hideDefaultPropsFromSnippet = ( + state: ComponentType, + propName: string, + currentValue: any, + groupType?: string, + themeDefaultValue?: string | number +): string => { + const knob = filterPropsAsPerGroupType(state, propName, groupType); + if (knob?.defaultValue === currentValue || themeDefaultValue === currentValue) { + return ''; + } + switch (knob?.propType) { + case 'string': + case 'string | Array': + return currentValue === '' ? '' : `${propName}={"${currentValue}"}`; + case 'ReactNode': + if (knob.inputType === 'string') { + return currentValue === '' ? '' : `${propName}={"${currentValue}"}`; + } + return `${propName}={${currentValue}}`; + case 'boolean': + return `${propName}={${currentValue}}`; + case 'number': + case 'number | string': + return currentValue === '' ? '' : `${propName}={${currentValue}}`; + default: + return `${propName}={${currentValue}}`; + } +}; + +export const removeEmptyLines = (code: string): string => code.replace(/^\s*$(?:\r\n?|\n)/gm, ''); + +export const getBodyFiller = (): JSX.Element => ( + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Maecenas iaculis vulputate arcu, quis vulputate mauris + aliquet in. Praesent sollicitudin erat at augue cursus, a scelerisque odio tristique. Aenean quis dui in nisi + condimentum viverra eleifend sed odio. Vestibulum a lacinia leo. Proin congue purus vulputate metus vestibulum + eleifend. Suspendisse sit amet orci magna. Suspendisse eu odio ut purus ultrices ornare id eu dolor. Cras + porttitor semper feugiat. Sed vel ultricies risus, vel dignissim arcu. Vestibulum quis interdum sem. Morbi + bibendum tortor ligula, non pellentesque ante ullamcorper sed. Duis ornare felis eget justo faucibus, id + tristique felis dignissim. Nullam sapien metus, feugiat egestas convallis eu, vehicula et turpis. Phasellus + interdum, justo sit amet maximus pellentesque, eros orci dictum diam, id bibendum risus neque non risus. + +); diff --git a/docs/tsconfig.json b/docs/tsconfig.json new file mode 100644 index 000000000..c0555cbc6 --- /dev/null +++ b/docs/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": ["src"] +} diff --git a/docs/yarn.lock b/docs/yarn.lock new file mode 100644 index 000000000..c6f46dad5 --- /dev/null +++ b/docs/yarn.lock @@ -0,0 +1,11206 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@apideck/better-ajv-errors@^0.3.1": + version "0.3.4" + resolved "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.4.tgz" + integrity sha512-Ic2d8ZT6HJiSikGVQvSklaFyw1OUv4g8sDOxa0PXSlbmN/3gL5IO1WYY9DOwTDqOFmjWoqG1yaaKnPDqYCE9KA== + dependencies: + json-schema "^0.4.0" + jsonpointer "^5.0.0" + leven "^3.1.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10": + version "7.18.5" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz" + integrity sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg== + +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.18.5" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz" + integrity sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.18.2" + "@babel/helper-compilation-targets" "^7.18.2" + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helpers" "^7.18.2" + "@babel/parser" "^7.18.5" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.18.5" + "@babel/types" "^7.18.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/eslint-parser@^7.16.3": + version "7.18.2" + resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.2.tgz" + integrity sha512-oFQYkE8SuH14+uR51JVAmdqwKYXGRjEXx7s+WiagVjqQ+HPE+nnwyF2qlVG8evUsUHmPcA+6YXMEDbIhEyQc5A== + dependencies: + eslint-scope "^5.1.1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" + +"@babel/generator@^7.18.2", "@babel/generator@^7.7.2": + version "7.18.2" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz" + integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== + dependencies: + "@babel/types" "^7.18.2" + "@jridgewell/gen-mapping" "^0.3.0" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.18.2": + version "7.18.2" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz" + integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ== + dependencies: + "@babel/compat-data" "^7.17.10" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz" + integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.17.9" + "@babel/helper-member-expression-to-functions" "^7.17.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + +"@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz" + integrity sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^5.0.1" + +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.2": + version "7.18.2" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz" + integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== + +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9": + version "7.17.9" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz" + integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== + dependencies: + "@babel/template" "^7.16.7" + "@babel/types" "^7.17.0" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-member-expression-to-functions@^7.17.7": + version "7.17.7" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz" + integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== + dependencies: + "@babel/types" "^7.17.0" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz" + integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.17.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.18.0" + "@babel/types" "^7.18.0" + +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz" + integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== + +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helper-replace-supers@^7.16.7", "@babel/helper-replace-supers@^7.18.2": + version "7.18.2" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz" + integrity sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q== + dependencies: + "@babel/helper-environment-visitor" "^7.18.2" + "@babel/helper-member-expression-to-functions" "^7.17.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.18.2" + "@babel/types" "^7.18.2" + +"@babel/helper-simple-access@^7.17.7", "@babel/helper-simple-access@^7.18.2": + version "7.18.2" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz" + integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ== + dependencies: + "@babel/types" "^7.18.2" + +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helpers@^7.18.2": + version "7.18.2" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz" + integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.18.2" + "@babel/types" "^7.18.2" + +"@babel/highlight@^7.16.7": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz" + integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.5": + version "7.18.5" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz" + integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz" + integrity sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz" + integrity sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.17.12" + +"@babel/plugin-proposal-async-generator-functions@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz" + integrity sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz" + integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-proposal-class-static-block@^7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz" + integrity sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-decorators@^7.16.4": + version "7.18.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.2.tgz" + integrity sha512-kbDISufFOxeczi0v4NQP3p5kIeW6izn/6klfWBrIIdGZZe4UpHR+QU03FAoWjGGd9SUXAwbw2pup1kaL4OQsJQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-replace-supers" "^7.18.2" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/plugin-syntax-decorators" "^7.17.12" + charcodes "^0.2.0" + +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz" + integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz" + integrity sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz" + integrity sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz" + integrity sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.16.0", "@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz" + integrity sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw== + dependencies: + "@babel/compat-data" "^7.17.10" + "@babel/helper-compilation-targets" "^7.17.10" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.17.12" + +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz" + integrity sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz" + integrity sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-proposal-private-property-in-object@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz" + integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz" + integrity sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz" + integrity sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz" + integrity sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-syntax-import-assertions@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz" + integrity sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz" + integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.17.12", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz" + integrity sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-arrow-functions@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz" + integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-async-to-generator@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz" + integrity sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-remap-async-to-generator" "^7.16.8" + +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-block-scoping@^7.17.12": + version "7.18.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz" + integrity sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-classes@^7.17.12": + version "7.18.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz" + integrity sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.18.2" + "@babel/helper-function-name" "^7.17.9" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-replace-supers" "^7.18.2" + "@babel/helper-split-export-declaration" "^7.16.7" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz" + integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-destructuring@^7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz" + integrity sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-duplicate-keys@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz" + integrity sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-flow-strip-types@^7.16.0": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.17.12.tgz" + integrity sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-flow" "^7.17.12" + +"@babel/plugin-transform-for-of@^7.18.1": + version "7.18.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz" + integrity sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== + dependencies: + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-literals@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz" + integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-modules-amd@^7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz" + integrity sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA== + dependencies: + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.18.2": + version "7.18.2" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz" + integrity sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-simple-access" "^7.18.2" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.18.0": + version "7.18.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz" + integrity sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q== + dependencies: + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz" + integrity sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA== + dependencies: + "@babel/helper-module-transforms" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz" + integrity sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.17.12" + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-new-target@^7.17.12": + version "7.18.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz" + integrity sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + +"@babel/plugin-transform-parameters@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz" + integrity sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-react-constant-elements@^7.12.1": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.12.tgz" + integrity sha512-maEkX2xs2STuv2Px8QuqxqjhV2LsFobT1elCgyU5704fcyTu9DyD/bJXxD/mrRiVyhpHweOQ00OJ5FKhHq9oEw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz" + integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-react-jsx-development@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz" + integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.16.7" + +"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz" + integrity sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-jsx" "^7.17.12" + "@babel/types" "^7.17.12" + +"@babel/plugin-transform-react-pure-annotations@^7.16.7": + version "7.18.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.0.tgz" + integrity sha512-6+0IK6ouvqDn9bmEG7mEyF/pwlJXVj5lwydybpyyH3D0A7Hftk+NCTdYjnLNZksn261xaOV5ksmp20pQEmc2RQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-regenerator@^7.18.0": + version "7.18.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz" + integrity sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + regenerator-transform "^0.15.0" + +"@babel/plugin-transform-reserved-words@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz" + integrity sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-runtime@^7.16.4": + version "7.18.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz" + integrity sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.17.12" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-spread@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz" + integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-template-literals@^7.18.2": + version "7.18.2" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz" + integrity sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-typeof-symbol@^7.17.12": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz" + integrity sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + +"@babel/plugin-transform-typescript@^7.17.12": + version "7.18.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz" + integrity sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.0" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-syntax-typescript" "^7.17.12" + +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4": + version "7.18.2" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz" + integrity sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q== + dependencies: + "@babel/compat-data" "^7.17.10" + "@babel/helper-compilation-targets" "^7.18.2" + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.17.12" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.17.12" + "@babel/plugin-proposal-async-generator-functions" "^7.17.12" + "@babel/plugin-proposal-class-properties" "^7.17.12" + "@babel/plugin-proposal-class-static-block" "^7.18.0" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.17.12" + "@babel/plugin-proposal-json-strings" "^7.17.12" + "@babel/plugin-proposal-logical-assignment-operators" "^7.17.12" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.17.12" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.18.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.17.12" + "@babel/plugin-proposal-private-methods" "^7.17.12" + "@babel/plugin-proposal-private-property-in-object" "^7.17.12" + "@babel/plugin-proposal-unicode-property-regex" "^7.17.12" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.17.12" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.17.12" + "@babel/plugin-transform-async-to-generator" "^7.17.12" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.17.12" + "@babel/plugin-transform-classes" "^7.17.12" + "@babel/plugin-transform-computed-properties" "^7.17.12" + "@babel/plugin-transform-destructuring" "^7.18.0" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.17.12" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.18.1" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.17.12" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.18.0" + "@babel/plugin-transform-modules-commonjs" "^7.18.2" + "@babel/plugin-transform-modules-systemjs" "^7.18.0" + "@babel/plugin-transform-modules-umd" "^7.18.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.12" + "@babel/plugin-transform-new-target" "^7.17.12" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.17.12" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.18.0" + "@babel/plugin-transform-reserved-words" "^7.17.12" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.17.12" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.18.2" + "@babel/plugin-transform-typeof-symbol" "^7.17.12" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.18.2" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.22.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.17.12.tgz" + integrity sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-react-display-name" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.17.12" + "@babel/plugin-transform-react-jsx-development" "^7.16.7" + "@babel/plugin-transform-react-pure-annotations" "^7.16.7" + +"@babel/preset-typescript@^7.16.0": + version "7.17.12" + resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz" + integrity sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg== + dependencies: + "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.17.12" + +"@babel/runtime-corejs3@^7.10.2": + version "7.18.3" + resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz" + integrity sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q== + dependencies: + core-js-pure "^3.20.2" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.18.3" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz" + integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.16.7", "@babel/template@^7.3.3": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5", "@babel/traverse@^7.7.2": + version "7.18.5" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz" + integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.18.2" + "@babel/helper-environment-visitor" "^7.18.2" + "@babel/helper-function-name" "^7.17.9" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.18.5" + "@babel/types" "^7.18.4" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.4" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz" + integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@brightlayer-ui/colors@^3.0.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@brightlayer-ui/colors/-/colors-3.1.0.tgz" + integrity sha512-BZkrRovZQv4YrpGDagUH7tIera5v+EPjrV/gwUDgnRVT+yKOjz+KB/F3g5DzTxQiA/QDiuxHU/0CumSlxwljmQ== + dependencies: + "@brightlayer-ui/types" "^2.0.0" + +"@brightlayer-ui/colors@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@brightlayer-ui/colors/-/colors-3.1.1.tgz#7bc86498e30172c410ba4c3237149b16a2eed4c6" + integrity sha512-fV10E5JDuVGDQ0gCY3pEfDwUo1+lvDFC5pmOAAGpN7YDramS6ggUpJ/LmYavKAudw7FNcaJnPi7tsQWJjvv/7w== + dependencies: + "@brightlayer-ui/types" "^2.0.0" + +"@brightlayer-ui/eslint-config@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@brightlayer-ui/eslint-config/-/eslint-config-3.0.1.tgz#a2c0332366375a0ed33d98a4c366f40c0d1e907b" + integrity sha512-Oysfov3klmqidenOo8+ZFwfxEmyBDpKaB58pi/4dy5aJLMb4vDUfatf2rFrKmYJI9BOAXoIrBuSA+MKYCIp3AQ== + dependencies: + "@typescript-eslint/parser" "^5.9.0" + eslint-config-prettier ">= 8.0.0" + optionalDependencies: + eslint-plugin-react "^7.28.0" + +"@brightlayer-ui/icons-mui@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@brightlayer-ui/icons-mui/-/icons-mui-3.0.0.tgz" + integrity sha512-w90mdDeXIu6GhxGjdMMIxRjpVZ6w2pwzRSA5tKF/V3lmShAHJPFh5FwMctiOfrc4GBidC617SEeBDkvJBGcJIA== + +"@brightlayer-ui/icons@^1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@brightlayer-ui/icons/-/icons-1.11.0.tgz#412baae591b9c5fc87dda7b3cdd278dc2671d667" + integrity sha512-2pHKJY7Xpao6BQ1ZIRcXxpTFuhSlalOJKw2//D05mNSzIFTZmBCv+6OVtAE45NxbLNIDP/To0/Cykm2mA9I1Vw== + +"@brightlayer-ui/prettier-config@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@brightlayer-ui/prettier-config/-/prettier-config-1.0.3.tgz#e40a7ae7435c6fd5118acbf249080e0aa81e93af" + integrity sha512-EYm3+V7Qd+oYEF+8FadsXAZqXryEHHbGnrV1BMp9selhABjceqUqXPVE4Sn3SKWQdBNJ3En2A3EzgrzRbvRTaw== + +"@brightlayer-ui/react-components@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@brightlayer-ui/react-components/-/react-components-6.1.0.tgz#e9e612623d34b5e688d77cfc806b9effcd1d2ebc" + integrity sha512-8nM2EX52EQG0eFsyJMw33rciz38rxvWepCoEjkL6hUaCAyOAT5anCrQMtOW6h0X6n9VI932U6WFf87bD4OLZGg== + dependencies: + "@brightlayer-ui/colors" "^3.1.1" + "@emotion/css" "^11.9.0" + "@seznam/compose-react-refs" "^1.0.6" + color "^4.2.1" + +"@brightlayer-ui/react-themes@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/@brightlayer-ui/react-themes/-/react-themes-7.0.0.tgz" + integrity sha512-5osYg/eb/6/Ct2BaX50ZMEx/6ob1F6TWXiMZn01sHOpDvjJ+f5W/LaOy6488xVN0J4wRhPBAnCZztzqAFGxYXA== + dependencies: + "@brightlayer-ui/colors" "^3.0.0" + "@fontsource/open-sans" "^4.2.2" + color "^3.1.3" + +"@brightlayer-ui/types@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@brightlayer-ui/types/-/types-2.0.0.tgz" + integrity sha512-DTCVwND6YC9qrkQl7pkFlN6QxDReJHtjuAiFU9HkXJN368vlw+fzHQ5/j4sB1sZl2eNwOgccv5ecl2XrlolOCw== + +"@craco/craco@^6.4.3": + version "6.4.3" + resolved "https://registry.npmjs.org/@craco/craco/-/craco-6.4.3.tgz" + integrity sha512-RzkXYmNzRCGUyG7mM+IUMM+nvrpSfA34352sPSGQN76UivAmCAht3sI4v5JKgzO05oUK9Zwi6abCKD7iKXI8hQ== + dependencies: + cosmiconfig "^7.0.1" + cosmiconfig-typescript-loader "^1.0.0" + cross-spawn "^7.0.0" + lodash "^4.17.15" + semver "^7.3.2" + webpack-merge "^4.2.2" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@csstools/normalize.css@*": + version "12.0.0" + resolved "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz" + integrity sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg== + +"@csstools/postcss-cascade-layers@^1.0.2": + version "1.0.3" + resolved "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.3.tgz" + integrity sha512-fvXP0+dcllGtRKAjA5n5tBr57xWQalKky09hSiXAZ9qqjHn0sDuQV2Jz0Y5zHRQ6iGrAjJZOf2+xQj3yuXfLwA== + dependencies: + "@csstools/selector-specificity" "^2.0.0" + postcss-selector-parser "^6.0.10" + +"@csstools/postcss-color-function@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.0.tgz" + integrity sha512-5D5ND/mZWcQoSfYnSPsXtuiFxhzmhxt6pcjrFLJyldj+p0ZN2vvRpYNX+lahFTtMhAYOa2WmkdGINr0yP0CvGA== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-font-format-keywords@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz" + integrity sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-hwb-function@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.1.tgz" + integrity sha512-AMZwWyHbbNLBsDADWmoXT9A5yl5dsGEBeJSJRUJt8Y9n8Ziu7Wstt4MC8jtPW7xjcLecyfJwtnUTNSmOzcnWeg== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-ic-unit@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.0.tgz" + integrity sha512-i4yps1mBp2ijrx7E96RXrQXQQHm6F4ym1TOD0D69/sjDjZvQ22tqiEvaNw7pFZTUO5b9vWRHzbHzP9+UKuw+bA== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-is-pseudo-class@^2.0.4": + version "2.0.5" + resolved "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.5.tgz" + integrity sha512-Ek+UFI4UP2hB9u0N1cJd6KgSF1rL0J3PT4is0oSStuus8+WzbGGPyJNMOKQ0w/tyPjxiCnOI4RdSMZt3nks64g== + dependencies: + "@csstools/selector-specificity" "^2.0.0" + postcss-selector-parser "^6.0.10" + +"@csstools/postcss-normalize-display-values@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz" + integrity sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-oklab-function@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.0.tgz" + integrity sha512-e/Q5HopQzmnQgqimG9v3w2IG4VRABsBq3itOcn4bnm+j4enTgQZ0nWsaH/m9GV2otWGQ0nwccYL5vmLKyvP1ww== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +"@csstools/postcss-progressive-custom-properties@^1.1.0", "@csstools/postcss-progressive-custom-properties@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz" + integrity sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-stepped-value-functions@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.0.tgz" + integrity sha512-q8c4bs1GumAiRenmFjASBcWSLKrbzHzWl6C2HcaAxAXIiL2rUlUWbqQZUjwVG5tied0rld19j/Mm90K3qI26vw== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-trigonometric-functions@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.1.tgz" + integrity sha512-G78CY/+GePc6dDCTUbwI6TTFQ5fs3N9POHhI6v0QzteGpf6ylARiJUNz9HrRKi4eVYBNXjae1W2766iUEFxHlw== + dependencies: + postcss-value-parser "^4.2.0" + +"@csstools/postcss-unset-value@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.1.tgz" + integrity sha512-f1G1WGDXEU/RN1TWAxBPQgQudtLnLQPyiWdtypkPC+mVYNKFKH/HYXSxH4MVNqwF8M0eDsoiU7HumJHCg/L/jg== + +"@csstools/selector-specificity@^2.0.0": + version "2.0.1" + resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz" + integrity sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA== + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@emotion/babel-plugin@^11.7.1": + version "11.9.2" + resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz" + integrity sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/plugin-syntax-jsx" "^7.12.13" + "@babel/runtime" "^7.13.10" + "@emotion/hash" "^0.8.0" + "@emotion/memoize" "^0.7.5" + "@emotion/serialize" "^1.0.2" + babel-plugin-macros "^2.6.1" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.0.13" + +"@emotion/cache@^11.7.1", "@emotion/cache@^11.9.3": + version "11.9.3" + resolved "https://registry.npmjs.org/@emotion/cache/-/cache-11.9.3.tgz" + integrity sha512-0dgkI/JKlCXa+lEXviaMtGBL0ynpx4osh7rjOXE71q9bIF8G+XhJgvi+wDu0B0IdCVx37BffiwXlN9I3UuzFvg== + dependencies: + "@emotion/memoize" "^0.7.4" + "@emotion/sheet" "^1.1.1" + "@emotion/utils" "^1.0.0" + "@emotion/weak-memoize" "^0.2.5" + stylis "4.0.13" + +"@emotion/css@^11.9.0": + version "11.9.0" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.9.0.tgz#d5aeaca5ed19fc61cbdc9e032ad0b32fa6e366be" + integrity sha512-S9UjCxSrxEHawOLnWw4upTwfYKb0gVQdatHejn3W9kPyXxmKv3HmjVfJ84kDLmdX8jR20OuDQwaJ4Um24qD9vA== + dependencies: + "@emotion/babel-plugin" "^11.7.1" + "@emotion/cache" "^11.7.1" + "@emotion/serialize" "^1.0.3" + "@emotion/sheet" "^1.0.3" + "@emotion/utils" "^1.0.0" + +"@emotion/hash@^0.8.0": + version "0.8.0" + resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== + +"@emotion/is-prop-valid@^1.1.2", "@emotion/is-prop-valid@^1.1.3": + version "1.1.3" + resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.3.tgz" + integrity sha512-RFg04p6C+1uO19uG8N+vqanzKqiM9eeV1LDOG3bmkYmuOj7NbKNlFC/4EZq5gnwAIlcC/jOT24f8Td0iax2SXA== + dependencies: + "@emotion/memoize" "^0.7.4" + +"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5": + version "0.7.5" + resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz" + integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== + +"@emotion/react@^11.9.0": + version "11.9.3" + resolved "https://registry.npmjs.org/@emotion/react/-/react-11.9.3.tgz" + integrity sha512-g9Q1GcTOlzOEjqwuLF/Zd9LC+4FljjPjDfxSM7KmEakm+hsHXk+bYZ2q+/hTJzr0OUNkujo72pXLQvXj6H+GJQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@emotion/babel-plugin" "^11.7.1" + "@emotion/cache" "^11.9.3" + "@emotion/serialize" "^1.0.4" + "@emotion/utils" "^1.1.0" + "@emotion/weak-memoize" "^0.2.5" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.0.2", "@emotion/serialize@^1.0.3", "@emotion/serialize@^1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.4.tgz" + integrity sha512-1JHamSpH8PIfFwAMryO2bNka+y8+KA5yga5Ocf2d7ZEiJjb7xlLW7aknBGZqJLajuLOvJ+72vN+IBSwPlXD1Pg== + dependencies: + "@emotion/hash" "^0.8.0" + "@emotion/memoize" "^0.7.4" + "@emotion/unitless" "^0.7.5" + "@emotion/utils" "^1.0.0" + csstype "^3.0.2" + +"@emotion/sheet@^1.0.3", "@emotion/sheet@^1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.1.tgz" + integrity sha512-J3YPccVRMiTZxYAY0IOq3kd+hUP8idY8Kz6B/Cyo+JuXq52Ek+zbPbSQUrVQp95aJ+lsAW7DPL1P2Z+U1jGkKA== + +"@emotion/styled@^11.8.1": + version "11.9.3" + resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.9.3.tgz" + integrity sha512-o3sBNwbtoVz9v7WB1/Y/AmXl69YHmei2mrVnK7JgyBJ//Rst5yqPZCecEJlMlJrFeWHp+ki/54uN265V2pEcXA== + dependencies: + "@babel/runtime" "^7.13.10" + "@emotion/babel-plugin" "^11.7.1" + "@emotion/is-prop-valid" "^1.1.3" + "@emotion/serialize" "^1.0.4" + "@emotion/utils" "^1.1.0" + +"@emotion/unitless@^0.7.5": + version "0.7.5" + resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + +"@emotion/utils@^1.0.0", "@emotion/utils@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz" + integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ== + +"@emotion/weak-memoize@^0.2.5": + version "0.2.5" + resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz" + integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== + +"@eslint/eslintrc@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz" + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.2" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@fontsource/open-sans@^4.2.2": + version "4.5.10" + resolved "https://registry.npmjs.org/@fontsource/open-sans/-/open-sans-4.5.10.tgz" + integrity sha512-MrtTDfWb1Tu9YxVh2KaKmsKBn6O3KL/lHZS0KRKK58jgqvdwuiDt4QW4udmW4FQf0XOWgnZ+4vKUF80F3SqBAA== + +"@fontsource/roboto-mono@^4.5.8": + version "4.5.8" + resolved "https://registry.yarnpkg.com/@fontsource/roboto-mono/-/roboto-mono-4.5.8.tgz#f3a48195528b10e154c98365671de14e27605bdb" + integrity sha512-AW44UkbQD0w1CT5mzDbsvhGZ6/bb0YmZzoELj6Sx8vcVEzcbYGUdt2Dtl5zqlOuYMWQFY1mniwWyVv+Bm/lVxw== + +"@fontsource/roboto@^4.5.8": + version "4.5.8" + resolved "https://registry.yarnpkg.com/@fontsource/roboto/-/roboto-4.5.8.tgz#56347764786079838faf43f0eeda22dd7328437f" + integrity sha512-CnD7zLItIzt86q4Sj3kZUiLcBk1dSk81qcqgMGaZe7SQ1P8hFNxhMl5AZthK1zrDM5m74VVhaOpuMGIL4gagaA== + +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/config-array@^0.9.2": + version "0.9.5" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz" + integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + +"@jest/console@^28.1.1": + version "28.1.1" + resolved "https://registry.npmjs.org/@jest/console/-/console-28.1.1.tgz" + integrity sha512-0RiUocPVFEm3WRMOStIHbRWllG6iW6E3/gUPnf4lkrVFyXIIDeCe+vlKeYyFOMhB2EPE6FLFCNADSOOQMaqvyA== + dependencies: + "@jest/types" "^28.1.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.1" + jest-util "^28.1.1" + slash "^3.0.0" + +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.8.1" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" + micromatch "^4.0.4" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== + dependencies: + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== + dependencies: + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" + "@types/node" "*" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" + +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.1.0" + +"@jest/schemas@^28.0.2": + version "28.0.2" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz" + integrity sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA== + dependencies: + "@sinclair/typebox" "^0.23.3" + +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.9" + source-map "^0.6.0" + +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== + dependencies: + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-result@^28.1.1": + version "28.1.1" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.1.tgz" + integrity sha512-hPmkugBktqL6rRzwWAtp1JtYT4VHwv8OQ+9lE5Gymj6dHzubI/oJHMUpPOt8NrdVWSrz9S7bHjJUmv2ggFoUNQ== + dependencies: + "@jest/console" "^28.1.1" + "@jest/types" "^28.1.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== + dependencies: + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" + +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^27.5.1" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" + +"@jest/types@^28.1.1": + version "28.1.1" + resolved "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz" + integrity sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw== + dependencies: + "@jest/schemas" "^28.0.2" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0": + version "1.1.1" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz" + integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.7": + version "0.3.13" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz" + integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@mdx-js/loader@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@mdx-js/loader/-/loader-2.1.3.tgz#b89f6e7b02933b1bf8a9cb69f73b43dab1bdb4d1" + integrity sha512-7LtklcfzZC9aWWFREop0ivemhwcp/cke2tICHEhnDyGn+hTg7LIbWCfSos68kJv9w7Z47KYfNcg9/8zBD+8eXA== + dependencies: + "@mdx-js/mdx" "^2.0.0" + source-map "^0.7.0" + +"@mdx-js/mdx@^2.0.0", "@mdx-js/mdx@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-2.1.5.tgz#577937349fd555154382c2f805f5f52834a64903" + integrity sha512-zEG0lt+Bl/r5U6e0TOS7qDbsXICtemfAPquxWFsMbdzrvlWaqMGemLl+sjVpqlyaaiCiGVQBSGdCk0t1qXjkQg== + dependencies: + "@types/estree-jsx" "^1.0.0" + "@types/mdx" "^2.0.0" + estree-util-build-jsx "^2.0.0" + estree-util-is-identifier-name "^2.0.0" + estree-util-to-js "^1.1.0" + estree-walker "^3.0.0" + hast-util-to-estree "^2.0.0" + markdown-extensions "^1.0.0" + periscopic "^3.0.0" + remark-mdx "^2.0.0" + remark-parse "^10.0.0" + remark-rehype "^10.0.0" + unified "^10.0.0" + unist-util-position-from-estree "^1.0.0" + unist-util-stringify-position "^3.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + +"@mdx-js/react@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-2.1.3.tgz#4b28a774295ed1398cf6be1b8ddef69d6a30e78d" + integrity sha512-11n4lTvvRyxq3OYbWJwEYM+7q6PE0GxKbk0AwYIIQmrRkxDeljIsjDQkKOgdr/orgRRbYy5zi+iERdnwe01CHQ== + dependencies: + "@types/mdx" "^2.0.0" + "@types/react" ">=16" + +"@mui/base@5.0.0-alpha.85": + version "5.0.0-alpha.85" + resolved "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.85.tgz" + integrity sha512-ONlQJOmQrxmR+pYF9AqH69FOG4ofwzVzNltwb2xKAQIW3VbsNZahcHIpzhFd70W6EIU+QHzB9TzamSM+Fg/U7w== + dependencies: + "@babel/runtime" "^7.17.2" + "@emotion/is-prop-valid" "^1.1.2" + "@mui/types" "^7.1.4" + "@mui/utils" "^5.8.4" + "@popperjs/core" "^2.11.5" + clsx "^1.1.1" + prop-types "^15.8.1" + react-is "^17.0.2" + +"@mui/icons-material@^5.8.3": + version "5.8.4" + resolved "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.8.4.tgz" + integrity sha512-9Z/vyj2szvEhGWDvb+gG875bOGm8b8rlHBKOD1+nA3PcgC3fV6W1AU6pfOorPeBfH2X4mb9Boe97vHvaSndQvA== + dependencies: + "@babel/runtime" "^7.17.2" + +"@mui/material@^5.8.3": + version "5.8.4" + resolved "https://registry.npmjs.org/@mui/material/-/material-5.8.4.tgz" + integrity sha512-KlOJS1JGhwuhdoF4fulmz41h/YxyMdZSc+ncz+HAah0GKn8ovAs5774f1w0lIasxbtI1Ziunwvmnu9PvvUKdMw== + dependencies: + "@babel/runtime" "^7.17.2" + "@mui/base" "5.0.0-alpha.85" + "@mui/system" "^5.8.4" + "@mui/types" "^7.1.4" + "@mui/utils" "^5.8.4" + "@types/react-transition-group" "^4.4.4" + clsx "^1.1.1" + csstype "^3.1.0" + prop-types "^15.8.1" + react-is "^17.0.2" + react-transition-group "^4.4.2" + +"@mui/private-theming@^5.8.4": + version "5.8.4" + resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.8.4.tgz" + integrity sha512-3Lp0VAEjtQygJ70MWEyHkKvg327O6YoBH6ZNEy6fIsrK6gmRIj+YrlvJ7LQCbowY+qDGnbdMrTBd1hfThlI8lg== + dependencies: + "@babel/runtime" "^7.17.2" + "@mui/utils" "^5.8.4" + prop-types "^15.8.1" + +"@mui/styled-engine@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.8.0.tgz" + integrity sha512-Q3spibB8/EgeMYHc+/o3RRTnAYkSl7ROCLhXJ830W8HZ2/iDiyYp16UcxKPurkXvLhUaILyofPVrP3Su2uKsAw== + dependencies: + "@babel/runtime" "^7.17.2" + "@emotion/cache" "^11.7.1" + prop-types "^15.8.1" + +"@mui/styles@^5.8.3": + version "5.8.4" + resolved "https://registry.npmjs.org/@mui/styles/-/styles-5.8.4.tgz" + integrity sha512-Td7dafJDgpdzObT0z5CH/ihOh22MG2vZ7p2tpnrKaq3We50f8l3T69XeTNcy2OH0TWnXJJuASZS/0uMJmVPfag== + dependencies: + "@babel/runtime" "^7.17.2" + "@emotion/hash" "^0.8.0" + "@mui/private-theming" "^5.8.4" + "@mui/types" "^7.1.4" + "@mui/utils" "^5.8.4" + clsx "^1.1.1" + csstype "^3.1.0" + hoist-non-react-statics "^3.3.2" + jss "^10.8.2" + jss-plugin-camel-case "^10.8.2" + jss-plugin-default-unit "^10.8.2" + jss-plugin-global "^10.8.2" + jss-plugin-nested "^10.8.2" + jss-plugin-props-sort "^10.8.2" + jss-plugin-rule-value-function "^10.8.2" + jss-plugin-vendor-prefixer "^10.8.2" + prop-types "^15.8.1" + +"@mui/system@^5.8.4": + version "5.8.4" + resolved "https://registry.npmjs.org/@mui/system/-/system-5.8.4.tgz" + integrity sha512-eeYZXlOn4p+tYwqqDlci6wW4knJ68aGx5A24YU9ubYZ5o0IwveoNP3LC9sHAMxigk/mUTqL4bpSMJ2HbTn2aQg== + dependencies: + "@babel/runtime" "^7.17.2" + "@mui/private-theming" "^5.8.4" + "@mui/styled-engine" "^5.8.0" + "@mui/types" "^7.1.4" + "@mui/utils" "^5.8.4" + clsx "^1.1.1" + csstype "^3.1.0" + prop-types "^15.8.1" + +"@mui/types@^7.1.4": + version "7.1.4" + resolved "https://registry.npmjs.org/@mui/types/-/types-7.1.4.tgz" + integrity sha512-uveM3byMbthO+6tXZ1n2zm0W3uJCQYtwt/v5zV5I77v2v18u0ITkb8xwhsDD2i3V2Kye7SaNR6FFJ6lMuY/WqQ== + +"@mui/utils@^5.8.4": + version "5.8.4" + resolved "https://registry.npmjs.org/@mui/utils/-/utils-5.8.4.tgz" + integrity sha512-BHYErfrjqqh76KaDAm8wZlhEip1Uj7Cmco65NcsF3BWrAl3FWngACpaPZeEbTgmaEwyWAQEE6LZhsmy43hfyqQ== + dependencies: + "@babel/runtime" "^7.17.2" + "@types/prop-types" "^15.7.5" + "@types/react-is" "^16.7.1 || ^17.0.0" + prop-types "^15.8.1" + react-is "^17.0.2" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pmmmwh/react-refresh-webpack-plugin@^0.5.3": + version "0.5.7" + resolved "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz" + integrity sha512-bcKCAzF0DV2IIROp9ZHkRJa6O4jy7NlnHdWL3GmcUxYWNjLXkK5kfELELwEfSP5hXPfVL/qOGMAROuMQb9GG8Q== + dependencies: + ansi-html-community "^0.0.8" + common-path-prefix "^3.0.0" + core-js-pure "^3.8.1" + error-stack-parser "^2.0.6" + find-up "^5.0.0" + html-entities "^2.1.0" + loader-utils "^2.0.0" + schema-utils "^3.0.0" + source-map "^0.7.3" + +"@popperjs/core@^2.11.5": + version "2.11.5" + resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz" + integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw== + +"@reduxjs/toolkit@^1.8.2": + version "1.8.2" + resolved "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.2.tgz" + integrity sha512-CtPw5TkN1pHRigMFCOS/0qg3b/yfPV5qGCsltVnIz7bx4PKTJlGHYfIxm97qskLknMzuGfjExaYdXJ77QTL0vg== + dependencies: + immer "^9.0.7" + redux "^4.1.2" + redux-thunk "^2.4.1" + reselect "^4.1.5" + +"@rollup/plugin-babel@^5.2.0": + version "5.3.1" + resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-replace@^2.4.1": + version "2.4.2" + resolved "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rushstack/eslint-patch@^1.1.0": + version "1.1.3" + resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz" + integrity sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw== + +"@seznam/compose-react-refs@^1.0.6": + version "1.0.6" + resolved "https://registry.npmjs.org/@seznam/compose-react-refs/-/compose-react-refs-1.0.6.tgz" + integrity sha512-izzOXQfeQLonzrIQb8u6LQ8dk+ymz3WXTIXjvOlTXHq6sbzROg3NWU+9TTAOpEoK9Bth24/6F/XrfHJ5yR5n6Q== + +"@sinclair/typebox@^0.23.3": + version "0.23.5" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz" + integrity sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@surma/rollup-plugin-off-main-thread@^2.2.3": + version "2.2.3" + resolved "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz" + integrity sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ== + dependencies: + ejs "^3.1.6" + json5 "^2.2.0" + magic-string "^0.25.0" + string.prototype.matchall "^4.0.6" + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/webpack@^5.5.0": + version "5.5.0" + resolved "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" + +"@testing-library/dom@^8.5.0": + version "8.13.0" + resolved "https://registry.npmjs.org/@testing-library/dom/-/dom-8.13.0.tgz" + integrity sha512-9VHgfIatKNXQNaZTtLnalIy0jNZzY35a4S3oi08YAt9Hv1VsfZ/DfA45lM8D/UhtHBGJ4/lGwp0PZkVndRkoOQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" + aria-query "^5.0.0" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.4.4" + pretty-format "^27.0.2" + +"@testing-library/jest-dom@^5.16.4": + version "5.16.4" + resolved "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.4.tgz" + integrity sha512-Gy+IoFutbMQcky0k+bqqumXZ1cTGswLsFqmNLzNdSKkU9KGV2u9oXhukCbbJ9/LRPKiqwxEE8VpV/+YZlfkPUA== + dependencies: + "@babel/runtime" "^7.9.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^5.0.0" + chalk "^3.0.0" + css "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.5.6" + lodash "^4.17.15" + redent "^3.0.0" + +"@testing-library/react@^13.3.0": + version "13.3.0" + resolved "https://registry.npmjs.org/@testing-library/react/-/react-13.3.0.tgz" + integrity sha512-DB79aA426+deFgGSjnf5grczDPiL4taK3hFaa+M5q7q20Kcve9eQottOG5kZ74KEr55v0tU2CQormSSDK87zYQ== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^8.5.0" + "@types/react-dom" "^18.0.0" + +"@testing-library/user-event@^14.2.0": + version "14.2.0" + resolved "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.2.0.tgz" + integrity sha512-+hIlG4nJS6ivZrKnOP7OGsDu9Fxmryj9vCl8x0ZINtTJcCHs2zLsYif5GzuRiBF2ck5GZG2aQr7Msg+EHlnYVQ== + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/acorn@^4.0.0": + version "4.0.6" + resolved "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz" + integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== + dependencies: + "@types/estree" "*" + +"@types/aria-query@^4.2.0": + version "4.2.2" + resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz" + integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": + version "7.1.19" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.17.1" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz" + integrity sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA== + dependencies: + "@babel/types" "^7.3.0" + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/color-convert@*": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/color-convert/-/color-convert-2.0.0.tgz#8f5ee6b9e863dcbee5703f5a517ffb13d3ea4e22" + integrity sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ== + dependencies: + "@types/color-name" "*" + +"@types/color-name@*": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/color@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/color/-/color-3.0.3.tgz#e6d8d72b7aaef4bb9fe80847c26c7c786191016d" + integrity sha512-X//qzJ3d3Zj82J9sC/C18ZY5f43utPbAJ6PhYt/M7uG6etcF6MRpKdN880KBy43B0BMzSfeT96MzrsNjFI3GbA== + dependencies: + "@types/color-convert" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/debug@^4.0.0": + version "4.1.7" + resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz" + integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== + dependencies: + "@types/ms" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.3" + resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz" + integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.4.3" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.3.tgz" + integrity sha512-YP1S7YJRMPs+7KZKDb9G63n8YejIwW9BALq7a5j2+H4yl6iOv9CB29edho+cuFRrvmJbbaH2yiVChKLJVysDGw== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/eslint@^7.28.2": + version "7.29.0" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz" + integrity sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree-jsx@^0.0.1": + version "0.0.1" + resolved "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-0.0.1.tgz" + integrity sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A== + dependencies: + "@types/estree" "*" + +"@types/estree-jsx@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.0.tgz#7bfc979ab9f692b492017df42520f7f765e98df1" + integrity sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ== + dependencies: + "@types/estree" "*" + +"@types/estree@*", "@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": + version "4.17.29" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz" + integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.13" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + +"@types/hoist-non-react-statics@^3.3.0": + version "3.3.1" + resolved "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-proxy@^1.17.8": + version "1.17.9" + resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz" + integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@*": + version "28.1.1" + resolved "https://registry.npmjs.org/@types/jest/-/jest-28.1.1.tgz" + integrity sha512-C2p7yqleUKtCkVjlOur9BWVA4HgUQmEj/HWCt5WzZ5mLXrWnyIfl0wGuArc+kBXsy0ZZfLp+7dywB4HtSVYGVA== + dependencies: + jest-matcher-utils "^27.0.0" + pretty-format "^27.0.0" + +"@types/jest@^27.5.2": + version "27.5.2" + resolved "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz" + integrity sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA== + dependencies: + jest-matcher-utils "^27.0.0" + pretty-format "^27.0.0" + +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/lodash.debounce@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@types/lodash.debounce/-/lodash.debounce-4.0.7.tgz#0285879defb7cdb156ae633cecd62d5680eded9f" + integrity sha512-X1T4wMZ+gT000M2/91SYj0d/7JfeNZ9PeeOldSNoE/lunLeQXKvkmIumI29IaKMotU/ln/McOIvgzZcQ/3TrSA== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.186" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.186.tgz#862e5514dd7bd66ada6c70ee5fce844b06c8ee97" + integrity sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw== + +"@types/mdast@^3.0.0": + version "3.0.10" + resolved "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz" + integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== + dependencies: + "@types/unist" "*" + +"@types/mdurl@^1.0.0": + version "1.0.2" + resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + +"@types/mdx@^2.0.0", "@types/mdx@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.2.tgz" + integrity sha512-mJGfgj4aWpiKb8C0nnJJchs1sHBHn0HugkVfqqyQi7Wn6mBRksLeQsPOFvih/Pu8L1vlDzfe/LidhVHBeUk3aQ== + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/ms@*": + version "0.7.31" + resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + +"@types/node@*": + version "18.0.0" + resolved "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz" + integrity sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== + +"@types/node@^17.0.41": + version "17.0.45" + resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prettier@^2.1.5": + version "2.6.3" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz" + integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== + +"@types/prismjs@^1.26.0": + version "1.26.0" + resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.0.tgz#a1c3809b0ad61c62cac6d4e0c56d610c910b7654" + integrity sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ== + +"@types/prop-types@*", "@types/prop-types@^15.7.5": + version "15.7.5" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/q@^1.5.1": + version "1.5.5" + resolved "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz" + integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/react-dom@^18.0.0", "@types/react-dom@^18.0.5": + version "18.0.5" + resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz" + integrity sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA== + dependencies: + "@types/react" "*" + +"@types/react-is@^16.7.1 || ^17.0.0": + version "17.0.3" + resolved "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz" + integrity sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw== + dependencies: + "@types/react" "*" + +"@types/react-redux@^7.1.20": + version "7.1.24" + resolved "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.24.tgz" + integrity sha512-7FkurKcS1k0FHZEtdbbgN8Oc6b+stGSfZYjQGicofJ0j4U0qIn/jaSvnP2pLwZKiai3/17xqqxkkrxTgN8UNbQ== + dependencies: + "@types/hoist-non-react-statics" "^3.3.0" + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + redux "^4.0.0" + +"@types/react-router-dom@^5.3.3": + version "5.3.3" + resolved "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + version "5.1.18" + resolved "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.18.tgz" + integrity sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react-transition-group@^4.4.4": + version "4.4.4" + resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.4.tgz" + integrity sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@>=16", "@types/react@^18.0.12": + version "18.0.14" + resolved "https://registry.npmjs.org/@types/react/-/react-18.0.14.tgz" + integrity sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" + integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.13.10" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/testing-library__jest-dom@^5.9.1": + version "5.14.3" + resolved "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.3.tgz" + integrity sha512-oKZe+Mf4ioWlMuzVBaXQ9WDnEm1+umLx0InILg+yvZVBBDmzV5KfZyLrCvadtWcx8+916jLmHafcmqqffl+iIw== + dependencies: + "@types/jest" "*" + +"@types/trusted-types@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz" + integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== + +"@types/unist@*", "@types/unist@^2.0.0": + version "2.0.6" + resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@types/ws@^8.5.1": + version "8.5.3" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^17.0.8": + version "17.0.10" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz" + integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.35.1": + version "5.38.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.1.tgz#9f05d42fa8fb9f62304cc2f5c2805e03c01c2620" + integrity sha512-ky7EFzPhqz3XlhS7vPOoMDaQnQMn+9o5ICR9CPr/6bw8HrFkzhMSxuA3gRfiJVvs7geYrSeawGJjZoZQKCOglQ== + dependencies: + "@typescript-eslint/scope-manager" "5.38.1" + "@typescript-eslint/type-utils" "5.38.1" + "@typescript-eslint/utils" "5.38.1" + debug "^4.3.4" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/eslint-plugin@^5.5.0": + version "5.28.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.28.0.tgz" + integrity sha512-DXVU6Cg29H2M6EybqSg2A+x8DgO9TCUBRp4QEXQHJceLS7ogVDP0g3Lkg/SZCqcvkAP/RruuQqK0gdlkgmhSUA== + dependencies: + "@typescript-eslint/scope-manager" "5.28.0" + "@typescript-eslint/type-utils" "5.28.0" + "@typescript-eslint/utils" "5.28.0" + debug "^4.3.4" + functional-red-black-tree "^1.0.1" + ignore "^5.2.0" + regexpp "^3.2.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@^5.0.0": + version "5.28.0" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.28.0.tgz" + integrity sha512-pPQ1Ng4qezQijXBBfYlogcOPnMs1q14l8C4fWJJ4PnFla4MA2b2oBfdkf02r1lNak2tpBVNJxvey9oWlPQWc4w== + dependencies: + "@typescript-eslint/utils" "5.28.0" + +"@typescript-eslint/parser@^5.40.0", "@typescript-eslint/parser@^5.5.0", "@typescript-eslint/parser@^5.9.0": + version "5.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.40.0.tgz#432bddc1fe9154945660f67c1ba6d44de5014840" + integrity sha512-Ah5gqyX2ySkiuYeOIDg7ap51/b63QgWZA7w6AHtFrag7aH0lRQPbLzUjk0c9o5/KZ6JRkTTDKShL4AUrQa6/hw== + dependencies: + "@typescript-eslint/scope-manager" "5.40.0" + "@typescript-eslint/types" "5.40.0" + "@typescript-eslint/typescript-estree" "5.40.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.28.0": + version "5.28.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.28.0.tgz" + integrity sha512-LeBLTqF/he1Z+boRhSqnso6YrzcKMTQ8bO/YKEe+6+O/JGof9M0g3IJlIsqfrK/6K03MlFIlycbf1uQR1IjE+w== + dependencies: + "@typescript-eslint/types" "5.28.0" + "@typescript-eslint/visitor-keys" "5.28.0" + +"@typescript-eslint/scope-manager@5.38.1": + version "5.38.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.38.1.tgz#f87b289ef8819b47189351814ad183e8801d5764" + integrity sha512-BfRDq5RidVU3RbqApKmS7RFMtkyWMM50qWnDAkKgQiezRtLKsoyRKIvz1Ok5ilRWeD9IuHvaidaLxvGx/2eqTQ== + dependencies: + "@typescript-eslint/types" "5.38.1" + "@typescript-eslint/visitor-keys" "5.38.1" + +"@typescript-eslint/scope-manager@5.40.0": + version "5.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.40.0.tgz#d6ea782c8e3a2371ba3ea31458dcbdc934668fc4" + integrity sha512-d3nPmjUeZtEWRvyReMI4I1MwPGC63E8pDoHy0BnrYjnJgilBD3hv7XOiETKLY/zTwI7kCnBDf2vWTRUVpYw0Uw== + dependencies: + "@typescript-eslint/types" "5.40.0" + "@typescript-eslint/visitor-keys" "5.40.0" + +"@typescript-eslint/type-utils@5.28.0": + version "5.28.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.28.0.tgz" + integrity sha512-SyKjKh4CXPglueyC6ceAFytjYWMoPHMswPQae236zqe1YbhvCVQyIawesYywGiu98L9DwrxsBN69vGIVxJ4mQQ== + dependencies: + "@typescript-eslint/utils" "5.28.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/type-utils@5.38.1": + version "5.38.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.38.1.tgz#7f038fcfcc4ade4ea76c7c69b2aa25e6b261f4c1" + integrity sha512-UU3j43TM66gYtzo15ivK2ZFoDFKKP0k03MItzLdq0zV92CeGCXRfXlfQX5ILdd4/DSpHkSjIgLLLh1NtkOJOAw== + dependencies: + "@typescript-eslint/typescript-estree" "5.38.1" + "@typescript-eslint/utils" "5.38.1" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.28.0": + version "5.28.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.28.0.tgz" + integrity sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA== + +"@typescript-eslint/types@5.38.1": + version "5.38.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.38.1.tgz#74f9d6dcb8dc7c58c51e9fbc6653ded39e2e225c" + integrity sha512-QTW1iHq1Tffp9lNfbfPm4WJabbvpyaehQ0SrvVK2yfV79SytD9XDVxqiPvdrv2LK7DGSFo91TB2FgWanbJAZXg== + +"@typescript-eslint/types@5.40.0": + version "5.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.40.0.tgz#8de07e118a10b8f63c99e174a3860f75608c822e" + integrity sha512-V1KdQRTXsYpf1Y1fXCeZ+uhjW48Niiw0VGt4V8yzuaDTU8Z1Xl7yQDyQNqyAFcVhpYXIVCEuxSIWTsLDpHgTbw== + +"@typescript-eslint/typescript-estree@5.28.0": + version "5.28.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.28.0.tgz" + integrity sha512-9GX+GfpV+F4hdTtYc6OV9ZkyYilGXPmQpm6AThInpBmKJEyRSIjORJd1G9+bknb7OTFYL+Vd4FBJAO6T78OVqA== + dependencies: + "@typescript-eslint/types" "5.28.0" + "@typescript-eslint/visitor-keys" "5.28.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@5.38.1": + version "5.38.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.1.tgz#657d858d5d6087f96b638ee383ee1cff52605a1e" + integrity sha512-99b5e/Enoe8fKMLdSuwrfH/C0EIbpUWmeEKHmQlGZb8msY33qn1KlkFww0z26o5Omx7EVjzVDCWEfrfCDHfE7g== + dependencies: + "@typescript-eslint/types" "5.38.1" + "@typescript-eslint/visitor-keys" "5.38.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/typescript-estree@5.40.0": + version "5.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.0.tgz#e305e6a5d65226efa5471ee0f12e0ffaab6d3075" + integrity sha512-b0GYlDj8TLTOqwX7EGbw2gL5EXS2CPEWhF9nGJiGmEcmlpNBjyHsTwbqpyIEPVpl6br4UcBOYlcI2FJVtJkYhg== + dependencies: + "@typescript-eslint/types" "5.40.0" + "@typescript-eslint/visitor-keys" "5.40.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.28.0", "@typescript-eslint/utils@^5.13.0": + version "5.28.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.28.0.tgz" + integrity sha512-E60N5L0fjv7iPJV3UGc4EC+A3Lcj4jle9zzR0gW7vXhflO7/J29kwiTGITA2RlrmPokKiZbBy2DgaclCaEUs6g== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.28.0" + "@typescript-eslint/types" "5.28.0" + "@typescript-eslint/typescript-estree" "5.28.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/utils@5.38.1": + version "5.38.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.38.1.tgz#e3ac37d7b33d1362bb5adf4acdbe00372fb813ef" + integrity sha512-oIuUiVxPBsndrN81oP8tXnFa/+EcZ03qLqPDfSZ5xIJVm7A9V0rlkQwwBOAGtrdN70ZKDlKv+l1BeT4eSFxwXA== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.38.1" + "@typescript-eslint/types" "5.38.1" + "@typescript-eslint/typescript-estree" "5.38.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/visitor-keys@5.28.0": + version "5.28.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.28.0.tgz" + integrity sha512-BtfP1vCor8cWacovzzPFOoeW4kBQxzmhxGoOpt0v1SFvG+nJ0cWaVdJk7cky1ArTcFHHKNIxyo2LLr3oNkSuXA== + dependencies: + "@typescript-eslint/types" "5.28.0" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@5.38.1": + version "5.38.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.1.tgz#508071bfc6b96d194c0afe6a65ad47029059edbc" + integrity sha512-bSHr1rRxXt54+j2n4k54p4fj8AHJ49VDWtjpImOpzQj4qjAiOpPni+V1Tyajh19Api1i844F757cur8wH3YvOA== + dependencies: + "@typescript-eslint/types" "5.38.1" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@5.40.0": + version "5.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.0.tgz#dd2d38097f68e0d2e1e06cb9f73c0173aca54b68" + integrity sha512-ijJ+6yig+x9XplEpG2K6FUdJeQGGj/15U3S56W9IqXKJqleuD7zJ2AX/miLezwxpd7ZxDAqO87zWufKg+RPZyQ== + dependencies: + "@typescript-eslint/types" "5.40.0" + eslint-visitor-keys "^3.3.0" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz" + integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== + +"@webpack-cli/info@^1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz" + integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.7.0": + version "1.7.0" + resolved "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz" + integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abab@^2.0.3, abab@^2.0.5: + version "2.0.6" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn-jsx@^5.0.0, acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-node@^1.8.2: + version "1.8.2" + resolved "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^7.0.0, acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^7.0.0, acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.0.0, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +address@^1.0.1, address@^1.1.2: + version "1.2.0" + resolved "https://registry.npmjs.org/address/-/address-1.2.0.tgz" + integrity sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig== + +adjust-sourcemap-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz" + integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A== + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" + +agent-base@6: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: + version "8.11.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +aria-query@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz" + integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-includes@^3.1.4, array-includes@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz" + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.2.5: + version "1.3.0" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz" + integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz" + integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" + +array.prototype.reduce@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz" + integrity sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +astring@^1.8.0: + version "1.8.3" + resolved "https://registry.npmjs.org/astring/-/astring-1.8.3.tgz" + integrity sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A== + +async@^3.2.3: + version "3.2.4" + resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@10.4.5, autoprefixer@^10.4.7: + version "10.4.5" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.5.tgz#662193c744094b53d3637f39be477e07bd904998" + integrity sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw== + dependencies: + browserslist "^4.20.2" + caniuse-lite "^1.0.30001332" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +axe-core@^4.3.5: + version "4.4.2" + resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.4.2.tgz" + integrity sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA== + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +babel-jest@^27.4.2, babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== + dependencies: + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-loader@^8.2.3: + version "8.2.5" + resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz" + integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-macros@^2.6.1: + version "2.8.0" + resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + +babel-plugin-named-asset-import@^0.3.8: + version "0.3.8" + resolved "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz" + integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== + +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.1" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.1" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.2" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" + +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.1" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + +babel-plugin-transform-react-remove-prop-types@^0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz" + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== + dependencies: + babel-plugin-jest-hoist "^27.5.1" + babel-preset-current-node-syntax "^1.0.0" + +babel-preset-react-app@^10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz" + integrity sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg== + dependencies: + "@babel/core" "^7.16.0" + "@babel/plugin-proposal-class-properties" "^7.16.0" + "@babel/plugin-proposal-decorators" "^7.16.4" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" + "@babel/plugin-proposal-numeric-separator" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-private-methods" "^7.16.0" + "@babel/plugin-transform-flow-strip-types" "^7.16.0" + "@babel/plugin-transform-react-display-name" "^7.16.0" + "@babel/plugin-transform-runtime" "^7.16.4" + "@babel/preset-env" "^7.16.4" + "@babel/preset-react" "^7.16.0" + "@babel/preset-typescript" "^7.16.0" + "@babel/runtime" "^7.16.3" + babel-plugin-macros "^3.1.0" + babel-plugin-transform-react-remove-prop-types "^0.4.24" + +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +bfj@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz" + integrity sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw== + dependencies: + bluebird "^3.5.5" + check-types "^11.1.1" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@1.20.0: + version "1.20.0" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.0.13" + resolved "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.13.tgz" + integrity sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA== + dependencies: + array-flatten "^2.1.2" + dns-equal "^1.0.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.20.4: + version "4.20.4" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz" + integrity sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw== + dependencies: + caniuse-lite "^1.0.30001349" + electron-to-chromium "^1.4.147" + escalade "^3.1.1" + node-releases "^2.0.5" + picocolors "^1.0.0" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +builtin-modules@^3.1.0: + version "3.3.0" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0, camelcase@^6.2.1: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001349: + version "1.0.30001355" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001355.tgz" + integrity sha512-Sd6pjJHF27LzCB7pT7qs+kuX2ndurzCzkpJl6Qct7LPSZ9jn0bkOA8mdgMgmqnQAWLVOOGjLpc+66V57eLtb1g== + +caniuse-lite@^1.0.30001332: + version "1.0.30001374" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz#3dab138e3f5485ba2e74bd13eca7fe1037ce6f57" + integrity sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw== + +case-sensitive-paths-webpack-plugin@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz" + integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== + +ccount@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + +chalk@^2.0.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +char-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz" + integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== + +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== + +charcodes@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz" + integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== + +check-types@^11.1.1: + version "11.1.2" + resolved "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz" + integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== + +chokidar@^3.4.2, chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^3.2.0: + version "3.3.2" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz" + integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +clean-css@^5.2.2: + version "5.3.0" + resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz" + integrity sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ== + dependencies: + source-map "~0.6.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clsx@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz" + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0, color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.6.0, color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.1.3: + version "3.2.1" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +color@^4.2.1, color@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +colord@^2.9.1: + version "2.9.2" + resolved "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz" + integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== + +colorette@^2.0.10, colorette@^2.0.14: + version "2.0.19" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +comma-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz" + integrity sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^7.0.0, commander@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== + +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confusing-browser-globals@^1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-js-compat@^3.21.0, core-js-compat@^3.22.1: + version "3.23.1" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.1.tgz" + integrity sha512-KeYrEc8t6FJsKYB2qnDwRHWaC0cJNaqlHfCpMe5q3j/W1nje3moib/txNklddLPCtGb+etcBIyJ8zuMa/LN5/A== + dependencies: + browserslist "^4.20.4" + semver "7.0.0" + +core-js-pure@^3.20.2, core-js-pure@^3.8.1: + version "3.23.1" + resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.1.tgz" + integrity sha512-3qNgf6TqI3U1uhuSYRzJZGfFd4T+YlbyVPl+jgRiKjdZopvG4keZQwWZDAWpu1UH9nCgTpUzIV3GFawC7cJsqg== + +core-js@^3.19.2: + version "3.23.1" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.23.1.tgz" + integrity sha512-wfMYHWi1WQjpgZNC9kAlN4ut04TM9fUTdi7CqIoTVM7yaiOUQTklOzfb+oWH3r9edQcT3F887swuVmxrV+CC8w== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig-typescript-loader@^1.0.0: + version "1.0.9" + resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.9.tgz" + integrity sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g== + dependencies: + cosmiconfig "^7" + ts-node "^10.7.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7, cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-blank-pseudo@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz" + integrity sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ== + dependencies: + postcss-selector-parser "^6.0.9" + +css-declaration-sorter@^6.2.2: + version "6.3.0" + resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz" + integrity sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og== + +css-has-pseudo@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz" + integrity sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw== + dependencies: + postcss-selector-parser "^6.0.9" + +css-loader@^6.5.1: + version "6.7.1" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz" + integrity sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.7" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.5" + +css-minimizer-webpack-plugin@^3.2.0: + version "3.4.1" + resolved "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz" + integrity sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q== + dependencies: + cssnano "^5.0.6" + jest-worker "^27.0.2" + postcss "^8.3.5" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-prefers-color-scheme@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz" + integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-vendor@^2.0.8: + version "2.0.8" + resolved "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz" + integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ== + dependencies: + "@babel/runtime" "^7.8.3" + is-in-browser "^1.0.2" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + +css@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/css/-/css-3.0.0.tgz" + integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== + dependencies: + inherits "^2.0.4" + source-map "^0.6.1" + source-map-resolve "^0.6.0" + +cssdb@^6.6.3: + version "6.6.3" + resolved "https://registry.npmjs.org/cssdb/-/cssdb-6.6.3.tgz" + integrity sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^5.2.11: + version "5.2.11" + resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.11.tgz" + integrity sha512-4PadR1NtuaIK8MvLNuY7MznK4WJteldGlzCiMaaTiOUP+apeiIvUDIXykzUOoqgOOUAHrU64ncdD90NfZR3LSQ== + dependencies: + css-declaration-sorter "^6.2.2" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.0" + postcss-convert-values "^5.1.2" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.5" + postcss-merge-rules "^5.1.2" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.3" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.0" + postcss-normalize-repeat-style "^5.1.0" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.0" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.2" + postcss-reduce-initial "^5.1.0" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.0.6: + version "5.1.11" + resolved "https://registry.npmjs.org/cssnano/-/cssnano-5.1.11.tgz" + integrity sha512-2nx+O6LvewPo5EBtYrKc8762mMkZRk9cMGIOP4UlkmxHm7ObxH+zvsJJ+qLwPkUc4/yumL/qJkavYi9NlodWIQ== + dependencies: + cssnano-preset-default "^5.2.11" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.0.2, csso@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +csstype@^3.0.2, csstype@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz" + integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== + +damerau-levenshtein@^1.0.7: + version "1.0.8" + resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@2.6.9, debug@^2.6.0, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" + integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +dequal@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz" + integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +detect-port-alt@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detective@^5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz" + integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== + dependencies: + acorn-node "^1.8.2" + defined "^1.0.0" + minimist "^1.2.6" + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diff@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.4.0" + resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz" + integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: + version "0.5.14" + resolved "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz" + integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg== + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-helpers@^5.0.1: + version "5.2.1" + resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@1: + version "1.3.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.6: + version "3.1.8" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.4.147: + version "1.4.158" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.158.tgz" + integrity sha512-gppO3/+Y6sP432HtvwvuU8S+YYYLH4PmAYvQwqUtt9HDOmEsBwQfLnK9T8+1NIKwAS1BEygIjTaATC4H5EzvxQ== + +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +enhanced-resolve@^5.10.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" + integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +envinfo@^7.7.3: + version "7.8.1" + resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.6: + version "2.1.4" + resolved "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + +es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5, es-abstract@^1.20.1: + version "1.20.1" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + regexp.prototype.flags "^1.4.3" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +"eslint-config-prettier@>= 8.0.0", eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-config-react-app@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz#73ba3929978001c5c86274c017ea57eb5fa644b4" + integrity sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA== + dependencies: + "@babel/core" "^7.16.0" + "@babel/eslint-parser" "^7.16.3" + "@rushstack/eslint-patch" "^1.1.0" + "@typescript-eslint/eslint-plugin" "^5.5.0" + "@typescript-eslint/parser" "^5.5.0" + babel-preset-react-app "^10.0.1" + confusing-browser-globals "^1.0.11" + eslint-plugin-flowtype "^8.0.3" + eslint-plugin-import "^2.25.3" + eslint-plugin-jest "^25.3.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.27.1" + eslint-plugin-react-hooks "^4.3.0" + eslint-plugin-testing-library "^5.0.1" + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-module-utils@^2.7.3: + version "2.7.3" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz" + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== + dependencies: + debug "^3.2.7" + find-up "^2.1.0" + +eslint-plugin-flowtype@^8.0.3: + version "8.0.3" + resolved "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz" + integrity sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ== + dependencies: + lodash "^4.17.21" + string-natural-compare "^3.0.1" + +eslint-plugin-import@^2.25.3: + version "2.26.0" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jest@^25.3.0: + version "25.7.0" + resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz" + integrity sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ== + dependencies: + "@typescript-eslint/experimental-utils" "^5.0.0" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.5.1" + resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz" + integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g== + dependencies: + "@babel/runtime" "^7.16.3" + aria-query "^4.2.2" + array-includes "^3.1.4" + ast-types-flow "^0.0.7" + axe-core "^4.3.5" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.7" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.2.1" + language-tags "^1.0.5" + minimatch "^3.0.4" + +eslint-plugin-react-hooks@^4.3.0: + version "4.6.0" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.27.1: + version "7.30.0" + resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz" + integrity sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A== + dependencies: + array-includes "^3.1.5" + array.prototype.flatmap "^1.3.0" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.1" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.7" + +eslint-plugin-react@^7.28.0, eslint-plugin-react@^7.30.1: + version "7.30.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22" + integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg== + dependencies: + array-includes "^3.1.5" + array.prototype.flatmap "^1.3.0" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.1" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.7" + +eslint-plugin-testing-library@^5.0.1: + version "5.5.1" + resolved "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.5.1.tgz" + integrity sha512-plLEkkbAKBjPxsLj7x4jNapcHAg2ernkQlKKrN2I8NrQwPISZHyCUNvg5Hv3EDqOQReToQb5bnqXYbkijJPE/g== + dependencies: + "@typescript-eslint/utils" "^5.13.0" + +eslint-scope@5.1.1, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint-webpack-plugin@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz" + integrity sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg== + dependencies: + "@types/eslint" "^7.28.2" + jest-worker "^27.3.1" + micromatch "^4.0.4" + normalize-path "^3.0.0" + schema-utils "^3.1.1" + +eslint@^8.22.0: + version "8.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" + integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== + dependencies: + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.3" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +eslint@^8.3.0: + version "8.17.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.17.0.tgz" + integrity sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw== + dependencies: + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.9.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.2" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^9.3.2: + version "9.3.2" + resolved "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz" + integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== + dependencies: + acorn "^8.7.1" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +espree@^9.3.3: + version "9.3.3" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" + integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-util-attach-comments@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.0.1.tgz" + integrity sha512-1wTBNndwMIsnvnuxjFIaYQz0M7PsCvcgP0YD7/dU8xWh1FuHk+O6pYpT4sLa5THY/CywJvdIdgw4uhozujga/g== + dependencies: + "@types/estree" "^0.0.51" + +estree-util-build-jsx@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.1.0.tgz" + integrity sha512-gsBGfsY6LOJUIDwmMkTOcgCX+3r/LUjRBccgHMSW55PHjhZsV13RmPl/iwpAvW8KcQqoN9P0FEFWTSS2Zc5bGA== + dependencies: + "@types/estree-jsx" "^0.0.1" + estree-util-is-identifier-name "^2.0.0" + estree-walker "^3.0.0" + +estree-util-is-identifier-name@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.1.tgz" + integrity sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ== + +estree-util-to-js@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-1.1.0.tgz#3bd9bb86354063537cc3d81259be2f0d4c3af39f" + integrity sha512-490lbfCcpLk+ofK6HCgqDfYs4KAfq6QVvDw3+Bm1YoKRgiOjKiKYGAVQE1uwh7zVxBgWhqp4FDtp5SqunpUk1A== + dependencies: + "@types/estree-jsx" "^1.0.0" + astring "^1.8.0" + source-map "^0.7.0" + +estree-util-visit@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.1.0.tgz" + integrity sha512-3lXJ4Us9j8TUif9cWcQy81t9p5OLasnDuuhrFiqb+XstmKC1d1LmrQWYsY49/9URcfHE64mPypDBaNK9NwWDPQ== + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/unist" "^2.0.0" + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz" + integrity sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== + dependencies: + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + +express@^4.17.3: + version "4.18.1" + resolved "https://registry.npmjs.org/express/-/express-4.18.1.tgz" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.0" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.10.3" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastest-levenshtein@^1.0.12: + version "1.0.12" + resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz" + integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +filelist@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filesize@^8.0.6: + version "8.0.7" + resolved "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.5" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz" + integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== + +follow-redirects@^1.0.0: + version "1.15.1" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +fork-ts-checker-webpack-plugin@^6.5.0: + version "6.5.2" + resolved "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz" + integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.0, fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1, glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.15.0: + version "13.15.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz" + integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.4, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +harmony-reflect@^1.4.6: + version "1.6.2" + resolved "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz" + integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hast-util-to-estree@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.0.2.tgz" + integrity sha512-UQrZVeBj6A9od0lpFvqHKNSH9zvDrNoyWKbveu1a2oSCXEDUI+3bnd6BoiQLPnLrcXXn/jzJ6y9hmJTTlvf8lQ== + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/hast" "^2.0.0" + "@types/unist" "^2.0.0" + comma-separated-tokens "^2.0.0" + estree-util-attach-comments "^2.0.0" + estree-util-is-identifier-name "^2.0.0" + hast-util-whitespace "^2.0.0" + mdast-util-mdx-expression "^1.0.0" + mdast-util-mdxjs-esm "^1.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^0.3.0" + unist-util-position "^4.0.0" + zwitch "^2.0.0" + +hast-util-whitespace@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz" + integrity sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg== + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +history@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/history/-/history-5.3.0.tgz" + integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== + dependencies: + "@babel/runtime" "^7.7.6" + +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-entities@^2.1.0, html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-webpack-plugin@^5.5.0: + version "5.5.0" + resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz" + integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.6" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz" + integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +hyphenate-style-name@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz" + integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +idb@^6.1.4: + version "6.1.5" + resolved "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz" + integrity sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw== + +identity-obj-proxy@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz" + integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== + dependencies: + harmony-reflect "^1.4.6" + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +immer@^9.0.7: + version "9.0.15" + resolved "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz" + integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ== + +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-core-module@^2.2.0, is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== + +is-in-browser@^1.0.2, is-in-browser@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz" + integrity sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g== + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-reference@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-reference/-/is-reference-3.0.0.tgz" + integrity sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q== + dependencies: + "@types/estree" "*" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz" + integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.4" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz" + integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jake@^10.8.5: + version "10.8.5" + resolved "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" + integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.1" + minimatch "^3.0.4" + +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== + dependencies: + "@jest/types" "^27.5.1" + execa "^5.0.0" + throat "^6.0.1" + +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" + +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== + dependencies: + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + prompts "^2.0.1" + yargs "^16.2.0" + +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== + dependencies: + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^27.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== + dependencies: + detect-newline "^3.0.0" + +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jsdom "^16.6.0" + +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== + dependencies: + "@jest/types" "^27.5.1" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.3.2" + +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + throat "^6.0.1" + +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== + dependencies: + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== + dependencies: + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-message-util@^28.1.1: + version "28.1.1" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz" + integrity sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== + +jest-regex-util@^28.0.0: + version "28.0.2" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== + dependencies: + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" + +jest-resolve@^27.4.2, jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== + dependencies: + "@jest/types" "^27.5.1" + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-pnp-resolver "^1.2.2" + jest-util "^27.5.1" + jest-validate "^27.5.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.8.1" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + source-map-support "^0.5.6" + throat "^6.0.1" + +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.9" + +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== + dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.0.0" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" + natural-compare "^1.4.0" + pretty-format "^27.5.1" + semver "^7.3.2" + +jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== + dependencies: + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-util@^28.1.1: + version "28.1.1" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz" + integrity sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw== + dependencies: + "@jest/types" "^28.1.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== + dependencies: + "@jest/types" "^27.5.1" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^27.5.1" + leven "^3.1.0" + pretty-format "^27.5.1" + +jest-watch-typeahead@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz" + integrity sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw== + dependencies: + ansi-escapes "^4.3.1" + chalk "^4.0.0" + jest-regex-util "^28.0.0" + jest-watcher "^28.0.0" + slash "^4.0.0" + string-length "^5.0.1" + strip-ansi "^7.0.1" + +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== + dependencies: + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^27.5.1" + string-length "^4.0.1" + +jest-watcher@^28.0.0: + version "28.1.1" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.1.tgz" + integrity sha512-RQIpeZ8EIJMxbQrXpJQYIIlubBnB9imEHsxxE41f54ZwcqWLysL/A0ZcdMirf+XsMn3xfphVQVV4EW0/p7i7Ug== + dependencies: + "@jest/test-result" "^28.1.1" + "@jest/types" "^28.1.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.1" + string-length "^4.0.1" + +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest-worker@^27.0.2, jest-worker@^27.3.1, jest-worker@^27.4.5, jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^27.4.3: + version "27.5.1" + resolved "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== + dependencies: + "@jest/core" "^27.5.1" + import-local "^3.0.2" + jest-cli "^27.5.1" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2, json5@^2.2.0, json5@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonpointer@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz" + integrity sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg== + +jss-plugin-camel-case@^10.8.2: + version "10.9.0" + resolved "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.0.tgz" + integrity sha512-UH6uPpnDk413/r/2Olmw4+y54yEF2lRIV8XIZyuYpgPYTITLlPOsq6XB9qeqv+75SQSg3KLocq5jUBXW8qWWww== + dependencies: + "@babel/runtime" "^7.3.1" + hyphenate-style-name "^1.0.3" + jss "10.9.0" + +jss-plugin-default-unit@^10.8.2: + version "10.9.0" + resolved "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.0.tgz" + integrity sha512-7Ju4Q9wJ/MZPsxfu4T84mzdn7pLHWeqoGd/D8O3eDNNJ93Xc8PxnLmV8s8ZPNRYkLdxZqKtm1nPQ0BM4JRlq2w== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + +jss-plugin-global@^10.8.2: + version "10.9.0" + resolved "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.0.tgz" + integrity sha512-4G8PHNJ0x6nwAFsEzcuVDiBlyMsj2y3VjmFAx/uHk/R/gzJV+yRHICjT4MKGGu1cJq2hfowFWCyrr/Gg37FbgQ== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + +jss-plugin-nested@^10.8.2: + version "10.9.0" + resolved "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.0.tgz" + integrity sha512-2UJnDrfCZpMYcpPYR16oZB7VAC6b/1QLsRiAutOt7wJaaqwCBvNsosLEu/fUyKNQNGdvg2PPJFDO5AX7dwxtoA== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + tiny-warning "^1.0.2" + +jss-plugin-props-sort@^10.8.2: + version "10.9.0" + resolved "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.0.tgz" + integrity sha512-7A76HI8bzwqrsMOJTWKx/uD5v+U8piLnp5bvru7g/3ZEQOu1+PjHvv7bFdNO3DwNPC9oM0a//KwIJsIcDCjDzw== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + +jss-plugin-rule-value-function@^10.8.2: + version "10.9.0" + resolved "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.0.tgz" + integrity sha512-IHJv6YrEf8pRzkY207cPmdbBstBaE+z8pazhPShfz0tZSDtRdQua5jjg6NMz3IbTasVx9FdnmptxPqSWL5tyJg== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.0" + tiny-warning "^1.0.2" + +jss-plugin-vendor-prefixer@^10.8.2: + version "10.9.0" + resolved "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.0.tgz" + integrity sha512-MbvsaXP7iiVdYVSEoi+blrW+AYnTDvHTW6I6zqi7JcwXdc6I9Kbm234nEblayhF38EftoenbM+5218pidmC5gA== + dependencies: + "@babel/runtime" "^7.3.1" + css-vendor "^2.0.8" + jss "10.9.0" + +jss@10.9.0, jss@^10.8.2: + version "10.9.0" + resolved "https://registry.npmjs.org/jss/-/jss-10.9.0.tgz" + integrity sha512-YpzpreB6kUunQBbrlArlsMpXYyndt9JATbt95tajx0t4MTJJcCJdd4hdNpHmOIDiUJrF/oX5wtVFrS3uofWfGw== + dependencies: + "@babel/runtime" "^7.3.1" + csstype "^3.0.2" + is-in-browser "^1.1.3" + tiny-warning "^1.0.2" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz" + integrity sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q== + dependencies: + array-includes "^3.1.4" + object.assign "^4.1.2" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +kleur@^4.0.3: + version "4.1.4" + resolved "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz" + integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA== + +klona@^2.0.4, klona@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + +language-subtag-registry@~0.3.2: + version "0.3.21" + resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz" + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + dependencies: + language-subtag-registry "~0.3.2" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lilconfig@^2.0.3, lilconfig@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz" + integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz" + integrity sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ== + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +longest-streak@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== + +longest-streak@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz" + integrity sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg== + +loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lz-string@^1.4.4: + version "1.4.4" + resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz" + integrity sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ== + +magic-string@^0.25.0, magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +markdown-extensions@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz" + integrity sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q== + +markdown-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" + integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== + dependencies: + repeat-string "^1.0.0" + +mdast-util-definitions@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz" + integrity sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + unist-util-visit "^4.0.0" + +mdast-util-find-and-replace@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz#b7db1e873f96f66588c321f1363069abf607d1b5" + integrity sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA== + dependencies: + escape-string-regexp "^4.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +mdast-util-from-markdown@^1.0.0: + version "1.2.0" + resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz" + integrity sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + decode-named-character-reference "^1.0.0" + mdast-util-to-string "^3.1.0" + micromark "^3.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-decode-string "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-stringify-position "^3.0.0" + uvu "^0.5.0" + +mdast-util-gfm-autolink-literal@^0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz#9c4ff399c5ddd2ece40bd3b13e5447d84e385fb7" + integrity sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A== + dependencies: + ccount "^1.0.0" + mdast-util-find-and-replace "^1.1.0" + micromark "^2.11.3" + +mdast-util-gfm-strikethrough@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz#45eea337b7fff0755a291844fbea79996c322890" + integrity sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA== + dependencies: + mdast-util-to-markdown "^0.6.0" + +mdast-util-gfm-table@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz#af05aeadc8e5ee004eeddfb324b2ad8c029b6ecf" + integrity sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ== + dependencies: + markdown-table "^2.0.0" + mdast-util-to-markdown "~0.6.0" + +mdast-util-gfm-task-list-item@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz#70c885e6b9f543ddd7e6b41f9703ee55b084af10" + integrity sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A== + dependencies: + mdast-util-to-markdown "~0.6.0" + +mdast-util-gfm@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz#8ecddafe57d266540f6881f5c57ff19725bd351c" + integrity sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ== + dependencies: + mdast-util-gfm-autolink-literal "^0.1.0" + mdast-util-gfm-strikethrough "^0.2.0" + mdast-util-gfm-table "^0.1.0" + mdast-util-gfm-task-list-item "^0.1.0" + mdast-util-to-markdown "^0.6.1" + +mdast-util-mdx-expression@^1.0.0: + version "1.2.1" + resolved "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.2.1.tgz" + integrity sha512-BtQwyalaq6jRjx0pagtuAwGrmzL1yInrfA4EJv7GOoiPOUbR4gr6h65I+G3WTh1/Cag2Eda4ip400Ch6CFmWiA== + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-from-markdown "^1.0.0" + mdast-util-to-markdown "^1.0.0" + +mdast-util-mdx-jsx@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.0.1.tgz" + integrity sha512-oPC7/smPBf7vxnvIYH5y3fPo2lw1rdrswFfSb4i0GTAXRUQv7JUU/t/hbp07dgGdUFTSDOHm5DNamhNg/s2Hrg== + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + ccount "^2.0.0" + mdast-util-to-markdown "^1.3.0" + parse-entities "^4.0.0" + stringify-entities "^4.0.0" + unist-util-remove-position "^4.0.0" + unist-util-stringify-position "^3.0.0" + vfile-message "^3.0.0" + +mdast-util-mdx@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.0.tgz" + integrity sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw== + dependencies: + mdast-util-mdx-expression "^1.0.0" + mdast-util-mdx-jsx "^2.0.0" + mdast-util-mdxjs-esm "^1.0.0" + +mdast-util-mdxjs-esm@^1.0.0: + version "1.2.0" + resolved "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.2.0.tgz" + integrity sha512-IPpX9GBzAIbIRCjbyeLDpMhACFb0wxTIujuR3YElB8LWbducUdMgRJuqs/Vg8xQ1bIAMm7lw8L+YNtua0xKXRw== + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-from-markdown "^1.0.0" + mdast-util-to-markdown "^1.0.0" + +mdast-util-to-hast@^12.1.0: + version "12.1.1" + resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.1.1.tgz" + integrity sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + "@types/mdurl" "^1.0.0" + mdast-util-definitions "^5.0.0" + mdurl "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + unist-builder "^3.0.0" + unist-util-generated "^2.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + +mdast-util-to-markdown@^0.6.0, mdast-util-to-markdown@^0.6.1, mdast-util-to-markdown@~0.6.0: + version "0.6.5" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe" + integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ== + dependencies: + "@types/unist" "^2.0.0" + longest-streak "^2.0.0" + mdast-util-to-string "^2.0.0" + parse-entities "^2.0.0" + repeat-string "^1.0.0" + zwitch "^1.0.0" + +mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz" + integrity sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + longest-streak "^3.0.0" + mdast-util-to-string "^3.0.0" + micromark-util-decode-string "^1.0.0" + unist-util-visit "^4.0.0" + zwitch "^2.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz" + integrity sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.1.2, memfs@^3.4.3: + version "3.4.4" + resolved "https://registry.npmjs.org/memfs/-/memfs-3.4.4.tgz" + integrity sha512-W4gHNUE++1oSJVn8Y68jPXi+mkx3fXR5ITE/Ubz6EQ3xRpCN5k2CQ4AUR8094Z7211F876TyoBACGsIveqgiGA== + dependencies: + fs-monkey "1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: + version "1.0.6" + resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz" + integrity sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-factory-destination "^1.0.0" + micromark-factory-label "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-factory-title "^1.0.0" + micromark-factory-whitespace "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-html-tag-name "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromark-extension-gfm-autolink-literal@~0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz#53866c1f0c7ef940ae7ca1f72c6faef8fed9f204" + integrity sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw== + dependencies: + micromark "~2.11.3" + +micromark-extension-gfm-strikethrough@~0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz#96cb83356ff87bf31670eefb7ad7bba73e6514d1" + integrity sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm-table@~0.4.0: + version "0.4.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz#4d49f1ce0ca84996c853880b9446698947f1802b" + integrity sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm-tagfilter@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz#d9f26a65adee984c9ccdd7e182220493562841ad" + integrity sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q== + +micromark-extension-gfm-task-list-item@~0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz#d90c755f2533ed55a718129cee11257f136283b8" + integrity sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz#36d1a4c089ca8bdfd978c9bd2bf1a0cb24e2acfe" + integrity sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A== + dependencies: + micromark "~2.11.0" + micromark-extension-gfm-autolink-literal "~0.5.0" + micromark-extension-gfm-strikethrough "~0.6.5" + micromark-extension-gfm-table "~0.4.0" + micromark-extension-gfm-tagfilter "~0.3.0" + micromark-extension-gfm-task-list-item "~0.3.0" + +micromark-extension-mdx-expression@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.3.tgz" + integrity sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA== + dependencies: + micromark-factory-mdx-expression "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-events-to-acorn "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-mdx-jsx@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz" + integrity sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA== + dependencies: + "@types/acorn" "^4.0.0" + estree-util-is-identifier-name "^2.0.0" + micromark-factory-mdx-expression "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + vfile-message "^3.0.0" + +micromark-extension-mdx-md@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz" + integrity sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw== + dependencies: + micromark-util-types "^1.0.0" + +micromark-extension-mdxjs-esm@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz" + integrity sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A== + dependencies: + micromark-core-commonmark "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-events-to-acorn "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-position-from-estree "^1.1.0" + uvu "^0.5.0" + vfile-message "^3.0.0" + +micromark-extension-mdxjs@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz" + integrity sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ== + dependencies: + acorn "^8.0.0" + acorn-jsx "^5.0.0" + micromark-extension-mdx-expression "^1.0.0" + micromark-extension-mdx-jsx "^1.0.0" + micromark-extension-mdx-md "^1.0.0" + micromark-extension-mdxjs-esm "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-destination@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz" + integrity sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-label@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz" + integrity sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-mdx-expression@^1.0.0: + version "1.0.6" + resolved "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.6.tgz" + integrity sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-events-to-acorn "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-position-from-estree "^1.0.0" + uvu "^0.5.0" + vfile-message "^3.0.0" + +micromark-factory-space@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz" + integrity sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-title@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz" + integrity sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-whitespace@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz" + integrity sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-character@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz" + integrity sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-chunked@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz" + integrity sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-classify-character@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz" + integrity sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-combine-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz" + integrity sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-decode-numeric-character-reference@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz" + integrity sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-decode-string@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz" + integrity sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-encode@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz" + integrity sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA== + +micromark-util-events-to-acorn@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.1.0.tgz" + integrity sha512-hB8HzidNt/Us5q2BvqXj8eeEm0U9rRfnZxcA9T65JRUMAY4MbfJRAFm7m9fXMAdSHJiVPmajsp8/rp6/FlHL8A== + dependencies: + "@types/acorn" "^4.0.0" + "@types/estree" "^0.0.51" + estree-util-visit "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + vfile-location "^4.0.0" + vfile-message "^3.0.0" + +micromark-util-html-tag-name@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz" + integrity sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA== + +micromark-util-normalize-identifier@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz" + integrity sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-resolve-all@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz" + integrity sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw== + dependencies: + micromark-util-types "^1.0.0" + +micromark-util-sanitize-uri@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz" + integrity sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-subtokenize@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz" + integrity sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-util-symbol@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz" + integrity sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ== + +micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz" + integrity sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w== + +micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3: + version "2.11.4" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" + +micromark@^3.0.0: + version "3.0.10" + resolved "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz" + integrity sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + micromark-core-commonmark "^1.0.1" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +mini-css-extract-plugin@^2.4.5: + version "2.6.1" + resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz" + integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== + dependencies: + schema-utils "^4.0.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz" + integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object-inspect@^1.12.0, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.fromentries@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz" + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.4" + resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz" + integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ== + dependencies: + array.prototype.reduce "^1.0.4" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.1" + +object.hasown@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz" + integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.19.5" + +object.values@^1.1.0, object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9, open@^8.4.0: + version "8.4.0" + resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-entities@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.0.tgz" + integrity sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ== + dependencies: + "@types/unist" "^2.0.0" + character-entities "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +path@^0.12.7: + version "0.12.7" + resolved "https://registry.npmjs.org/path/-/path-0.12.7.tgz" + integrity sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q== + dependencies: + process "^0.11.1" + util "^0.10.3" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +periscopic@^3.0.0: + version "3.0.4" + resolved "https://registry.npmjs.org/periscopic/-/periscopic-3.0.4.tgz" + integrity sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg== + dependencies: + estree-walker "^3.0.0" + is-reference "^3.0.0" + +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +postcss-attribute-case-insensitive@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.1.tgz" + integrity sha512-wrt2VndqSLJpyBRNz9OmJcgnhI9MaongeWgapdBuUMu2a/KNJ8SENesG4SdiTnQwGO9b1VKbTWYAfCPeokLqZQ== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-browser-comments@^4: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz" + integrity sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg== + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-clamp@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz" + integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-functional-notation@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.3.tgz" + integrity sha512-5fbr6FzFzjwHXKsVnkmEYrJYG8VNNzvD1tAXaPPWR97S6rhKI5uh2yOfV5TAzhDkZoq4h+chxEplFDc8GeyFtw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-hex-alpha@^8.0.3: + version "8.0.4" + resolved "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz" + integrity sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-color-rebeccapurple@^7.0.2: + version "7.1.0" + resolved "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.0.tgz" + integrity sha512-1jtE5AKnZcKq4pjOrltFHcbEM2/IvtbD1OdhZ/wqds18//bh0UmQkffcCkzDJU+/vGodfIsVQeKn+45CJvX9Bw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz" + integrity sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz" + integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g== + dependencies: + browserslist "^4.20.3" + postcss-value-parser "^4.2.0" + +postcss-custom-media@^8.0.1: + version "8.0.2" + resolved "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz" + integrity sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-custom-properties@^12.1.7: + version "12.1.8" + resolved "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz" + integrity sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-custom-selectors@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz" + integrity sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-dir-pseudo-class@^6.0.4: + version "6.0.4" + resolved "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz" + integrity sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw== + dependencies: + postcss-selector-parser "^6.0.9" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-double-position-gradients@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz" + integrity sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +postcss-env-function@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz" + integrity sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-flexbugs-fixes@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz" + integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== + +postcss-focus-visible@^6.0.4: + version "6.0.4" + resolved "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz" + integrity sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw== + dependencies: + postcss-selector-parser "^6.0.9" + +postcss-focus-within@^5.0.4: + version "5.0.4" + resolved "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz" + integrity sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ== + dependencies: + postcss-selector-parser "^6.0.9" + +postcss-font-variant@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz" + integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== + +postcss-gap-properties@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz" + integrity sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ== + +postcss-image-set-function@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz" + integrity sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-import@^14.1.0: + version "14.1.0" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz" + integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-initial@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz" + integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== + +postcss-js@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz" + integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== + dependencies: + camelcase-css "^2.0.1" + +postcss-lab-function@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz" + integrity sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w== + dependencies: + "@csstools/postcss-progressive-custom-properties" "^1.1.0" + postcss-value-parser "^4.2.0" + +postcss-load-config@^3.1.4: + version "3.1.4" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== + dependencies: + lilconfig "^2.0.5" + yaml "^1.10.2" + +postcss-loader@^6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz" + integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.5" + +postcss-logical@^5.0.4: + version "5.0.4" + resolved "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz" + integrity sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g== + +postcss-media-minmax@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz" + integrity sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ== + +postcss-merge-longhand@^5.1.5: + version "5.1.5" + resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.5.tgz" + integrity sha512-NOG1grw9wIO+60arKa2YYsrbgvP6tp+jqc7+ZD5/MalIw234ooH2C6KlR6FEn4yle7GqZoBxSK1mLBE9KPur6w== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.0" + +postcss-merge-rules@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz" + integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.3: + version "5.1.3" + resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz" + integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg== + dependencies: + browserslist "^4.16.6" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-nested@5.0.6: + version "5.0.6" + resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz" + integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA== + dependencies: + postcss-selector-parser "^6.0.6" + +postcss-nesting@^10.1.7: + version "10.1.8" + resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.8.tgz" + integrity sha512-txdb3/idHYsBbNDFo1PFY0ExCgH5nfWi8G5lO49e6iuU42TydbODTzJgF5UuL5bhgeSlnAtDgfFTDG0Cl1zaSQ== + dependencies: + "@csstools/selector-specificity" "^2.0.0" + postcss-selector-parser "^6.0.10" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz" + integrity sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz" + integrity sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz" + integrity sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ== + dependencies: + browserslist "^4.16.6" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize@^10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz" + integrity sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA== + dependencies: + "@csstools/normalize.css" "*" + postcss-browser-comments "^4" + sanitize.css "*" + +postcss-opacity-percentage@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz" + integrity sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w== + +postcss-ordered-values@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.2.tgz" + integrity sha512-wr2avRbW4HS2XE2ZCqpfp4N/tDC6GZKZ+SVP8UBTOVS8QWrc4TD8MYrebJrvVVlGPKszmiSCzue43NDiVtgDmg== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-overflow-shorthand@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz" + integrity sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg== + +postcss-page-break@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz" + integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== + +postcss-place@^7.0.4: + version "7.0.4" + resolved "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz" + integrity sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-preset-env@^7.0.1: + version "7.7.1" + resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.7.1.tgz" + integrity sha512-1sx6+Nl1wMVJzaYLVaz4OAR6JodIN/Z1upmVqLwSPCLT6XyxrEoePgNMHPH08kseLe3z06i9Vfkt/32BYEKDeA== + dependencies: + "@csstools/postcss-cascade-layers" "^1.0.2" + "@csstools/postcss-color-function" "^1.1.0" + "@csstools/postcss-font-format-keywords" "^1.0.0" + "@csstools/postcss-hwb-function" "^1.0.1" + "@csstools/postcss-ic-unit" "^1.0.0" + "@csstools/postcss-is-pseudo-class" "^2.0.4" + "@csstools/postcss-normalize-display-values" "^1.0.0" + "@csstools/postcss-oklab-function" "^1.1.0" + "@csstools/postcss-progressive-custom-properties" "^1.3.0" + "@csstools/postcss-stepped-value-functions" "^1.0.0" + "@csstools/postcss-trigonometric-functions" "^1.0.1" + "@csstools/postcss-unset-value" "^1.0.1" + autoprefixer "^10.4.7" + browserslist "^4.20.3" + css-blank-pseudo "^3.0.3" + css-has-pseudo "^3.0.4" + css-prefers-color-scheme "^6.0.3" + cssdb "^6.6.3" + postcss-attribute-case-insensitive "^5.0.1" + postcss-clamp "^4.1.0" + postcss-color-functional-notation "^4.2.3" + postcss-color-hex-alpha "^8.0.3" + postcss-color-rebeccapurple "^7.0.2" + postcss-custom-media "^8.0.1" + postcss-custom-properties "^12.1.7" + postcss-custom-selectors "^6.0.2" + postcss-dir-pseudo-class "^6.0.4" + postcss-double-position-gradients "^3.1.1" + postcss-env-function "^4.0.6" + postcss-focus-visible "^6.0.4" + postcss-focus-within "^5.0.4" + postcss-font-variant "^5.0.0" + postcss-gap-properties "^3.0.3" + postcss-image-set-function "^4.0.6" + postcss-initial "^4.0.1" + postcss-lab-function "^4.2.0" + postcss-logical "^5.0.4" + postcss-media-minmax "^5.0.0" + postcss-nesting "^10.1.7" + postcss-opacity-percentage "^1.1.2" + postcss-overflow-shorthand "^3.0.3" + postcss-page-break "^3.0.4" + postcss-place "^7.0.4" + postcss-pseudo-class-any-link "^7.1.4" + postcss-replace-overflow-wrap "^4.0.0" + postcss-selector-not "^6.0.0" + postcss-value-parser "^4.2.0" + +postcss-pseudo-class-any-link@^7.1.4: + version "7.1.4" + resolved "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.4.tgz" + integrity sha512-JxRcLXm96u14N3RzFavPIE9cRPuOqLDuzKeBsqi4oRk4vt8n0A7I0plFs/VXTg7U2n7g/XkQi0OwqTO3VWBfEg== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-reduce-initial@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz" + integrity sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-replace-overflow-wrap@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz" + integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== + +postcss-selector-not@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.0.tgz" + integrity sha512-i/HI/VNd3V9e1WOLCwJsf9nePBRXqcGtVibcJ9FsVo0agfDEfsLSlFt94aYjY35wUNcdG0KrvdyjEr7It50wLQ== + dependencies: + postcss-selector-parser "^6.0.10" + +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9: + version "6.0.10" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz" + integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^7.0.35: + version "7.0.39" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + +postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.4, postcss@^8.4.7: + version "8.4.14" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prettier@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: + version "5.6.0" + resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +pretty-format@^28.1.1: + version "28.1.1" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz" + integrity sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw== + dependencies: + "@jest/schemas" "^28.0.2" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +prismjs@^1.28.0: + version "1.28.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.28.0.tgz#0d8f561fa0f7cf6ebca901747828b149147044b6" + integrity sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.1: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +promise@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz" + integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== + dependencies: + asap "~2.0.6" + +prompts@^2.0.1, prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +property-information@^6.0.0: + version "6.1.1" + resolved "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz" + integrity sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +psl@^1.1.33: + version "1.8.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qs@6.10.3: + version "6.10.3" + resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-app-polyfill@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz" + integrity sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w== + dependencies: + core-js "^3.19.2" + object-assign "^4.1.1" + promise "^8.1.0" + raf "^3.4.1" + regenerator-runtime "^0.13.9" + whatwg-fetch "^3.6.2" + +react-app-rewired@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/react-app-rewired/-/react-app-rewired-2.2.1.tgz" + integrity sha512-uFQWTErXeLDrMzOJHKp0h8P1z0LV9HzPGsJ6adOtGlA/B9WfT6Shh4j2tLTTGlXOfiVx6w6iWpp7SOC5pvk+gA== + dependencies: + semver "^5.6.0" + +react-dev-utils@^12.0.1: + version "12.0.1" + resolved "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz" + integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== + dependencies: + "@babel/code-frame" "^7.16.0" + address "^1.1.2" + browserslist "^4.18.1" + chalk "^4.1.2" + cross-spawn "^7.0.3" + detect-port-alt "^1.1.6" + escape-string-regexp "^4.0.0" + filesize "^8.0.6" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.5.0" + global-modules "^2.0.0" + globby "^11.0.4" + gzip-size "^6.0.0" + immer "^9.0.7" + is-root "^2.1.0" + loader-utils "^3.2.0" + open "^8.4.0" + pkg-up "^3.1.0" + prompts "^2.4.2" + react-error-overlay "^6.0.11" + recursive-readdir "^2.2.2" + shell-quote "^1.7.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +react-device-detect@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/react-device-detect/-/react-device-detect-2.2.2.tgz#dbabbce798ec359c83f574c3edb24cf1cca641a5" + integrity sha512-zSN1gIAztUekp5qUT/ybHwQ9fmOqVT1psxpSlTn1pe0CO+fnJHKRLOWWac5nKxOxvOpD/w84hk1I+EydrJp7SA== + dependencies: + ua-parser-js "^1.0.2" + +react-dom@^18.1.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-error-overlay@^6.0.11: + version "6.0.11" + resolved "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== + +react-ga@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-3.3.1.tgz#d8e1f4e05ec55ed6ff944dcb14b99011dfaf9504" + integrity sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ== + +react-is@^16.13.1, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^17.0.1, react-is@^17.0.2: + version "17.0.2" + resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-redux@^7.2.0: + version "7.2.8" + resolved "https://registry.npmjs.org/react-redux/-/react-redux-7.2.8.tgz" + integrity sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw== + dependencies: + "@babel/runtime" "^7.15.4" + "@types/react-redux" "^7.1.20" + hoist-non-react-statics "^3.3.2" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-is "^17.0.2" + +react-refresh@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz" + integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== + +react-router-dom@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz" + integrity sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw== + dependencies: + history "^5.2.0" + react-router "6.3.0" + +react-router@6.3.0, react-router@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz" + integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ== + dependencies: + history "^5.2.0" + +react-scripts@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.1.tgz#6285dbd65a8ba6e49ca8d651ce30645a6d980003" + integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ== + dependencies: + "@babel/core" "^7.16.0" + "@pmmmwh/react-refresh-webpack-plugin" "^0.5.3" + "@svgr/webpack" "^5.5.0" + babel-jest "^27.4.2" + babel-loader "^8.2.3" + babel-plugin-named-asset-import "^0.3.8" + babel-preset-react-app "^10.0.1" + bfj "^7.0.2" + browserslist "^4.18.1" + camelcase "^6.2.1" + case-sensitive-paths-webpack-plugin "^2.4.0" + css-loader "^6.5.1" + css-minimizer-webpack-plugin "^3.2.0" + dotenv "^10.0.0" + dotenv-expand "^5.1.0" + eslint "^8.3.0" + eslint-config-react-app "^7.0.1" + eslint-webpack-plugin "^3.1.1" + file-loader "^6.2.0" + fs-extra "^10.0.0" + html-webpack-plugin "^5.5.0" + identity-obj-proxy "^3.0.0" + jest "^27.4.3" + jest-resolve "^27.4.2" + jest-watch-typeahead "^1.0.0" + mini-css-extract-plugin "^2.4.5" + postcss "^8.4.4" + postcss-flexbugs-fixes "^5.0.2" + postcss-loader "^6.2.1" + postcss-normalize "^10.0.1" + postcss-preset-env "^7.0.1" + prompts "^2.4.2" + react-app-polyfill "^3.0.0" + react-dev-utils "^12.0.1" + react-refresh "^0.11.0" + resolve "^1.20.0" + resolve-url-loader "^4.0.0" + sass-loader "^12.3.0" + semver "^7.3.5" + source-map-loader "^3.0.0" + style-loader "^3.3.1" + tailwindcss "^3.0.2" + terser-webpack-plugin "^5.2.5" + webpack "^5.64.4" + webpack-dev-server "^4.6.0" + webpack-manifest-plugin "^4.0.2" + workbox-webpack-plugin "^6.4.1" + optionalDependencies: + fsevents "^2.3.2" + +react-transition-group@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz" + integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@^18.1.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readable-stream@^2.0.1: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== + dependencies: + resolve "^1.9.0" + +recursive-readdir@^2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +redux-thunk@^2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz" + integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== + +redux@^4.0.0, redux@^4.1.2, redux@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz" + integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== + dependencies: + "@babel/runtime" "^7.9.2" + +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.9: + version "0.13.9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.15.0: + version "0.15.0" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-parser@^2.2.11: + version "2.2.11" + resolved "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + +regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz" + integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +remark-gfm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-1.0.0.tgz#9213643001be3f277da6256464d56fd28c3b3c0d" + integrity sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA== + dependencies: + mdast-util-gfm "^0.1.0" + micromark-extension-gfm "^0.3.0" + +remark-mdx@^2.0.0: + version "2.1.2" + resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.1.2.tgz" + integrity sha512-npQagPdczPAv0xN9F8GSi5hJfAe/z6nBjylyfOfjLOmz086ahWrIjlk4BulRfNhA+asutqWxyuT3DFVsxiTVHA== + dependencies: + mdast-util-mdx "^2.0.0" + micromark-extension-mdxjs "^1.0.0" + +remark-parse@^10.0.0: + version "10.0.1" + resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz" + integrity sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-from-markdown "^1.0.0" + unified "^10.0.0" + +remark-rehype@^10.0.0: + version "10.1.0" + resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz" + integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-to-hast "^12.1.0" + unified "^10.0.0" + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +repeat-string@^1.0.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +reselect@^4.1.5: + version "4.1.6" + resolved "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz" + integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz" + integrity sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA== + dependencies: + adjust-sourcemap-loader "^4.0.0" + convert-source-map "^1.7.0" + loader-utils "^2.0.0" + postcss "^7.0.35" + source-map "0.6.1" + +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + +resolve@^1.1.7, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0: + version "1.22.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^1.9.0: + version "1.22.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.3: + version "2.0.0-next.3" + resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz" + integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-terser@^7.0.0: + version "7.0.2" + resolved "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup@^2.43.1: + version "2.75.6" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.75.6.tgz" + integrity sha512-OEf0TgpC9vU6WGROJIk1JA3LR5vk/yvqlzxqdrE2CzzXnqKXNzbAwlWUXis8RS3ZPe7LAq+YUxsRa0l3r27MLA== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +sade@^1.7.3: + version "1.8.1" + resolved "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize.css@*: + version "13.0.0" + resolved "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz" + integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA== + +sass-loader@^12.3.0: + version "12.6.0" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz" + integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== + dependencies: + klona "^2.0.4" + neo-async "^2.6.2" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz" + integrity sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ== + dependencies: + node-forge "^1" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.7.3" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +source-list-map@^2.0.0, source-list-map@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-js@^1.0.1, source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-loader@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz" + integrity sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA== + dependencies: + abab "^2.0.5" + iconv-lite "^0.6.3" + source-map-js "^1.0.1" + +source-map-resolve@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz" + integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + +source-map-support@^0.5.6, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.7.0, source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +source-map@^0.8.0-beta.0: + version "0.8.0-beta.0" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz" + integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== + dependencies: + whatwg-url "^7.0.0" + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +space-separated-tokens@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz" + integrity sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-length@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz" + integrity sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow== + dependencies: + char-regex "^2.0.0" + strip-ansi "^7.0.1" + +string-natural-compare@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz" + integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.7: + version "4.0.7" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.1" + side-channel "^1.0.4" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-entities@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz" + integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-comments@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz" + integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +style-loader@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz" + integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== + +style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + +stylehacks@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz" + integrity sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q== + dependencies: + browserslist "^4.16.6" + postcss-selector-parser "^6.0.4" + +stylis@4.0.13: + version "4.0.13" + resolved "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz" + integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.2: + version "2.0.4" + resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +svgo@^2.7.0: + version "2.8.0" + resolved "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +tailwindcss@^3.0.2: + version "3.1.3" + resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.3.tgz" + integrity sha512-PRJNYdSIthrb8hjmAyymEyEN8Yo61TMXpzyFUpxULeeyRn3Y3gpvuw6FlRTKrJvK7thSGKRnhT36VovVx4WeMA== + dependencies: + arg "^5.0.2" + chokidar "^3.5.3" + color-name "^1.1.4" + detective "^5.2.1" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.2.11" + glob-parent "^6.0.2" + is-glob "^4.0.3" + lilconfig "^2.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.14" + postcss-import "^14.1.0" + postcss-js "^4.0.0" + postcss-load-config "^3.1.4" + postcss-nested "5.0.6" + postcss-selector-parser "^6.0.10" + postcss-value-parser "^4.2.0" + quick-lru "^5.1.1" + resolve "^1.22.0" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +tempy@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz" + integrity sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw== + dependencies: + is-stream "^2.0.0" + temp-dir "^2.0.0" + type-fest "^0.16.0" + unique-string "^2.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5: + version "5.3.3" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz" + integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.7" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.7.2" + +terser@^5.0.0, terser@^5.10.0, terser@^5.7.2: + version "5.15.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.0.tgz#e16967894eeba6e1091509ec83f0c60e179f2425" + integrity sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +throat@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz" + integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tiny-warning@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +trough@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz" + integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== + +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +ts-node@^10.7.0: + version "10.8.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz" + integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3: + version "2.4.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^4.7.3: + version "4.7.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz" + integrity sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA== + +ua-parser-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.2.tgz#e2976c34dbfb30b15d2c300b2a53eac87c57a775" + integrity sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +unified@^10.0.0: + version "10.1.2" + resolved "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz" + integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== + dependencies: + "@types/unist" "^2.0.0" + bail "^2.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^5.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-builder@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz" + integrity sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-generated@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz" + integrity sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw== + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-is@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz" + integrity sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ== + +unist-util-position-from-estree@^1.0.0, unist-util-position-from-estree@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.1.tgz" + integrity sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-position@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz" + integrity sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-remove-position@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz" + integrity sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-visit "^4.0.0" + +unist-util-stringify-position@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz" + integrity sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit-parents@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz" + integrity sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + +unist-util-visit@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz" + integrity sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.0.0" + +universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz" + integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== + +upath@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@^0.10.3: + version "0.10.4" + resolved "https://registry.npmjs.org/util/-/util-0.10.4.tgz" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uvu@^0.5.0: + version "0.5.4" + resolved "https://registry.npmjs.org/uvu/-/uvu-0.5.4.tgz" + integrity sha512-x1CyUjcP9VKaNPhjeB3FIc/jqgLsz2Q9LFhRzUTu/jnaaHILEGNuE0XckQonl8ISLcwyk9I2EZvWlYsQnwxqvQ== + dependencies: + dequal "^2.0.0" + diff "^5.0.0" + kleur "^4.0.3" + sade "^1.7.3" + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vfile-location@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz" + integrity sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw== + dependencies: + "@types/unist" "^2.0.0" + vfile "^5.0.0" + +vfile-message@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz" + integrity sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^3.0.0" + +vfile@^5.0.0: + version "5.3.4" + resolved "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz" + integrity sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^3.0.0" + vfile-message "^3.0.0" + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7: + version "1.0.8" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-vitals@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz" + integrity sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg== + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-cli@^4.10.0: + version "4.10.0" + resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz" + integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.2.0" + "@webpack-cli/info" "^1.5.0" + "@webpack-cli/serve" "^1.7.0" + colorette "^2.0.14" + commander "^7.0.0" + cross-spawn "^7.0.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + webpack-merge "^5.7.3" + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.6.0, webpack-dev-server@^4.9.2: + version "4.9.2" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.2.tgz" + integrity sha512-H95Ns95dP24ZsEzO6G9iT+PNw4Q7ltll1GfJHV4fKphuHWgKFzGHWi4alTlTnpk1SPPk41X+l2RB7rLfIhnB9Q== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.0.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" + +webpack-manifest-plugin@^4.0.2: + version "4.1.1" + resolved "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz" + integrity sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow== + dependencies: + tapable "^2.0.0" + webpack-sources "^2.2.0" + +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-merge@^5.7.3: + version "5.8.0" + resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-sources@^2.2.0: + version "2.3.1" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz" + integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.64.4, webpack@^5.74.0: + version "5.74.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980" + integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-fetch@^3.6.2: + version "3.6.2" + resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +workbox-background-sync@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.3.tgz" + integrity sha512-0DD/V05FAcek6tWv9XYj2w5T/plxhDSpclIcAGjA/b7t/6PdaRkQ7ZgtAX6Q/L7kV7wZ8uYRJUoH11VjNipMZw== + dependencies: + idb "^6.1.4" + workbox-core "6.5.3" + +workbox-broadcast-update@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.3.tgz" + integrity sha512-4AwCIA5DiDrYhlN+Miv/fp5T3/whNmSL+KqhTwRBTZIL6pvTgE4lVuRzAt1JltmqyMcQ3SEfCdfxczuI4kwFQg== + dependencies: + workbox-core "6.5.3" + +workbox-build@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.3.tgz" + integrity sha512-8JNHHS7u13nhwIYCDea9MNXBNPHXCs5KDZPKI/ZNTr3f4sMGoD7hgFGecbyjX1gw4z6e9bMpMsOEJNyH5htA/w== + dependencies: + "@apideck/better-ajv-errors" "^0.3.1" + "@babel/core" "^7.11.1" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.2" + "@rollup/plugin-babel" "^5.2.0" + "@rollup/plugin-node-resolve" "^11.2.1" + "@rollup/plugin-replace" "^2.4.1" + "@surma/rollup-plugin-off-main-thread" "^2.2.3" + ajv "^8.6.0" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^9.0.1" + glob "^7.1.6" + lodash "^4.17.20" + pretty-bytes "^5.3.0" + rollup "^2.43.1" + rollup-plugin-terser "^7.0.0" + source-map "^0.8.0-beta.0" + stringify-object "^3.3.0" + strip-comments "^2.0.1" + tempy "^0.6.0" + upath "^1.2.0" + workbox-background-sync "6.5.3" + workbox-broadcast-update "6.5.3" + workbox-cacheable-response "6.5.3" + workbox-core "6.5.3" + workbox-expiration "6.5.3" + workbox-google-analytics "6.5.3" + workbox-navigation-preload "6.5.3" + workbox-precaching "6.5.3" + workbox-range-requests "6.5.3" + workbox-recipes "6.5.3" + workbox-routing "6.5.3" + workbox-strategies "6.5.3" + workbox-streams "6.5.3" + workbox-sw "6.5.3" + workbox-window "6.5.3" + +workbox-cacheable-response@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.3.tgz" + integrity sha512-6JE/Zm05hNasHzzAGKDkqqgYtZZL2H06ic2GxuRLStA4S/rHUfm2mnLFFXuHAaGR1XuuYyVCEey1M6H3PdZ7SQ== + dependencies: + workbox-core "6.5.3" + +workbox-core@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.3.tgz" + integrity sha512-Bb9ey5n/M9x+l3fBTlLpHt9ASTzgSGj6vxni7pY72ilB/Pb3XtN+cZ9yueboVhD5+9cNQrC9n/E1fSrqWsUz7Q== + +workbox-expiration@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.3.tgz" + integrity sha512-jzYopYR1zD04ZMdlbn/R2Ik6ixiXbi15c9iX5H8CTi6RPDz7uhvMLZPKEndZTpfgmUk8mdmT9Vx/AhbuCl5Sqw== + dependencies: + idb "^6.1.4" + workbox-core "6.5.3" + +workbox-google-analytics@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.3.tgz" + integrity sha512-3GLCHotz5umoRSb4aNQeTbILETcrTVEozSfLhHSBaegHs1PnqCmN0zbIy2TjTpph2AGXiNwDrWGF0AN+UgDNTw== + dependencies: + workbox-background-sync "6.5.3" + workbox-core "6.5.3" + workbox-routing "6.5.3" + workbox-strategies "6.5.3" + +workbox-navigation-preload@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.3.tgz" + integrity sha512-bK1gDFTc5iu6lH3UQ07QVo+0ovErhRNGvJJO/1ngknT0UQ702nmOUhoN9qE5mhuQSrnK+cqu7O7xeaJ+Rd9Tmg== + dependencies: + workbox-core "6.5.3" + +workbox-precaching@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.3.tgz" + integrity sha512-sjNfgNLSsRX5zcc63H/ar/hCf+T19fRtTqvWh795gdpghWb5xsfEkecXEvZ8biEi1QD7X/ljtHphdaPvXDygMQ== + dependencies: + workbox-core "6.5.3" + workbox-routing "6.5.3" + workbox-strategies "6.5.3" + +workbox-range-requests@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.3.tgz" + integrity sha512-pGCP80Bpn/0Q0MQsfETSfmtXsQcu3M2QCJwSFuJ6cDp8s2XmbUXkzbuQhCUzKR86ZH2Vex/VUjb2UaZBGamijA== + dependencies: + workbox-core "6.5.3" + +workbox-recipes@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.3.tgz" + integrity sha512-IcgiKYmbGiDvvf3PMSEtmwqxwfQ5zwI7OZPio3GWu4PfehA8jI8JHI3KZj+PCfRiUPZhjQHJ3v1HbNs+SiSkig== + dependencies: + workbox-cacheable-response "6.5.3" + workbox-core "6.5.3" + workbox-expiration "6.5.3" + workbox-precaching "6.5.3" + workbox-routing "6.5.3" + workbox-strategies "6.5.3" + +workbox-routing@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.3.tgz" + integrity sha512-DFjxcuRAJjjt4T34RbMm3MCn+xnd36UT/2RfPRfa8VWJGItGJIn7tG+GwVTdHmvE54i/QmVTJepyAGWtoLPTmg== + dependencies: + workbox-core "6.5.3" + +workbox-strategies@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.3.tgz" + integrity sha512-MgmGRrDVXs7rtSCcetZgkSZyMpRGw8HqL2aguszOc3nUmzGZsT238z/NN9ZouCxSzDu3PQ3ZSKmovAacaIhu1w== + dependencies: + workbox-core "6.5.3" + +workbox-streams@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.3.tgz" + integrity sha512-vN4Qi8o+b7zj1FDVNZ+PlmAcy1sBoV7SC956uhqYvZ9Sg1fViSbOpydULOssVJ4tOyKRifH/eoi6h99d+sJ33w== + dependencies: + workbox-core "6.5.3" + workbox-routing "6.5.3" + +workbox-sw@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.3.tgz" + integrity sha512-BQBzm092w+NqdIEF2yhl32dERt9j9MDGUTa2Eaa+o3YKL4Qqw55W9yQC6f44FdAHdAJrJvp0t+HVrfh8AiGj8A== + +workbox-webpack-plugin@^6.4.1: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.3.tgz" + integrity sha512-Es8Xr02Gi6Kc3zaUwR691ZLy61hz3vhhs5GztcklQ7kl5k2qAusPh0s6LF3wEtlpfs9ZDErnmy5SErwoll7jBA== + dependencies: + fast-json-stable-stringify "^2.1.0" + pretty-bytes "^5.4.1" + upath "^1.2.0" + webpack-sources "^1.4.3" + workbox-build "6.5.3" + +workbox-window@6.5.3: + version "6.5.3" + resolved "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.3.tgz" + integrity sha512-GnJbx1kcKXDtoJBVZs/P7ddP0Yt52NNy4nocjBpYPiRhMqTpJCNrSL+fGHZ/i/oP6p/vhE8II0sA6AZGKGnssw== + dependencies: + "@types/trusted-types" "^2.0.2" + workbox-core "6.5.3" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.4.6: + version "7.5.8" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz" + integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw== + +ws@^8.4.2: + version "8.8.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz" + integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== + +zwitch@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz" + integrity sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA== diff --git a/firebase.json b/firebase.json new file mode 100644 index 000000000..2e4b3d4fd --- /dev/null +++ b/firebase.json @@ -0,0 +1,12 @@ +{ + "hosting": { + "public": "docs/build", + "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], + "rewrites": [ + { + "source": "**", + "destination": "/index.html" + } + ] + } +} diff --git a/package.json b/package.json index 3d6ea4a35..592e7bf46 100644 --- a/package.json +++ b/package.json @@ -8,14 +8,14 @@ "test:artifacts": "cd scripts && bash ./buildTest.sh && cd ..", "build": "bash ./scripts/buildComponents.sh", "link:components": "cd scripts && bash ./linkComponents.sh && cd ..", - "install:dependencies": "cd demos/showcase && yarn && cd ../storybook && yarn && cd ../../components && yarn", + "install:dependencies": "cd demos/showcase && yarn && cd ../../docs && yarn && cd ../components && yarn", "start:showcase": "yarn initialize && yarn install:dependencies && yarn link:components && cd demos/showcase && yarn start", - "start:storybook": "yarn install:dependencies && yarn link:components && cd demos/storybook && yarn start", + "start:reactdev": "yarn install:dependencies && yarn link:components && cd docs && yarn start", "start": "yarn start:showcase", - "lint": "cd components && yarn lint && cd ../demos/storybook && yarn lint", - "lint:fix": "cd components && yarn lint:fix && cd ../demos/storybook && yarn lint:fix", - "prettier": "prettier \"**/**.{ts,tsx,js,jsx,json,css,scss,html,md}\" --write && cd components && yarn prettier && cd ../demos/showcase && yarn prettier && cd ../storybook && yarn prettier", - "prettier:check": "prettier \"**/**.{ts,tsx,js,jsx,json,css,scss,html,md}\" --check && cd components && yarn prettier:check && cd ../demos/showcase && yarn prettier:check && cd ../storybook && yarn prettier:check", + "lint": "cd components && yarn lint", + "lint:fix": "cd components && yarn lint:fix", + "prettier": "prettier \"*.{json,css,scss,html,md}\" --write && cd components && yarn prettier && cd ../demos/showcase && yarn prettier && cd ../../docs && yarn prettier", + "prettier:check": "prettier \"*.{json,css,scss,html,md}\" --check && cd components && yarn prettier:check && cd ../demos/showcase && yarn prettier:check && cd ../../docs && yarn prettier", "update:submodule": "git submodule update --remote", "precommit": "yarn initialize && yarn install:dependencies && yarn prettier && yarn lint && yarn test && yarn build && yarn test:artifacts && yarn generate:licenses", "coverage": "yarn test --coverage --watchAll=false", @@ -46,7 +46,7 @@ "@brightlayer-ui/prettier-config": "^1.0.3", "codecov": "^3.8.1", "npm-license-crawler": "^0.2.1", - "prettier": "^2.3.0" + "prettier": "^2.7.1" }, "prettier": "@brightlayer-ui/prettier-config" } diff --git a/scripts/linkComponents.sh b/scripts/linkComponents.sh index 1cd7ab24b..53e664193 100755 --- a/scripts/linkComponents.sh +++ b/scripts/linkComponents.sh @@ -14,7 +14,7 @@ cd ../components yarn build cd .. -echo -en "${BLUE}Creating new folder in node_modules...${NC}" +echo -en "${BLUE}Creating new folder in node_modules of showcase...${NC}" rm -rf "./demos/showcase/node_modules/.cache" rm -rf "./demos/showcase/node_modules/@brightlayer-ui/react-components" mkdir -p "./demos/showcase/node_modules/@brightlayer-ui/react-components" @@ -22,7 +22,7 @@ mkdir -p "./demos/showcase/node_modules/@brightlayer-ui/react-components" # mkdir -p ./demos/storybook/node_modules/@brightlayer-ui/react-components echo -e "${GREEN}Done${NC}" -echo -en "${BLUE}Copying build output into node_modules...${NC}"; +echo -en "${BLUE}Copying build output into node_modules of showcase...${NC}"; cp -r ./components/package.json ./demos/showcase/node_modules/@brightlayer-ui/react-components/package.json cp -r ./dist/. ./demos/showcase/node_modules/@brightlayer-ui/react-components # cp -r ./components/package.json ./demos/storybook/node_modules/@brightlayer-ui/react-components/package.json @@ -38,6 +38,31 @@ if [ ! -s ./demos/showcase/node_modules/@brightlayer-ui/react-components ]; then echo -e "${BRED}Not Linked${NC}" && exit 1; fi; fi + +echo -en "${BLUE}Creating new folder in node_modules of react-dev...${NC}" +rm -rf "./docs/node_modules/.cache" +rm -rf "./docs/node_modules/@brightlayer-ui/react-components" +mkdir -p "./docs/node_modules/@brightlayer-ui/react-components" +# rm -rf ./demos/storybook/node_modules/@brightlayer-ui/react-components +# mkdir -p ./demos/storybook/node_modules/@brightlayer-ui/react-components +echo -e "${GREEN}Done${NC}" + +echo -en "${BLUE}Copying build output into node_modules or react-dev...${NC}"; +cp -r ./components/package.json ./docs/node_modules/@brightlayer-ui/react-components/package.json +cp -r ./dist/. ./docs/node_modules/@brightlayer-ui/react-components +# cp -r ./components/package.json ./demos/storybook/node_modules/@brightlayer-ui/react-components/package.json +# cp -r ./dist/. ./demos/storybook/node_modules/@brightlayer-ui/react-components +echo -e "${GREEN}Done${NC}" + +echo -en "\r\n${BLUE}Linking Components: ${NC}" +if [ ! -f ./docs/node_modules/@brightlayer-ui/react-components/package.json ]; then echo -e "${BRED}Not Linked${NC}" && exit 1; fi +# if [ ! -f ./demos/storybook/node_modules/@brightlayer-ui/react-components/package.json ]; then echo -e "${BRED}Not Linked${NC}" && exit 1; fi +if [ ! -s ./docs/node_modules/@brightlayer-ui/react-components ]; + then + if [ ! -f ./docs/node_modules/@brightlayer-ui/react-components/index.js ]; + then echo -e "${BRED}Not Linked${NC}" && exit 1; + fi; +fi # if [ ! -s ./demos/storybook/node_modules/@brightlayer-ui/react-components ]; # then # if [ ! -f ./demos/storybook/node_modules/@brightlayer-ui/react-components/index.js ]; diff --git a/yarn.lock b/yarn.lock index 106f5e452..27f272b32 100644 --- a/yarn.lock +++ b/yarn.lock @@ -270,9 +270,9 @@ json-parse-helpfulerror@^1.0.2: dependencies: jju "^1.1.0" -"license-checker@git+https://github.com/mwittig/license-checker.git#d546e3f738e14c62e732346fa355162d46700893": +"license-checker@git+https://github.com/mwittig/license-checker#d546e3f738e14c62e732346fa355162d46700893": version "1.0.0" - resolved "git+https://github.com/mwittig/license-checker.git#d546e3f738e14c62e732346fa355162d46700893" + resolved "git+https://github.com/mwittig/license-checker#d546e3f738e14c62e732346fa355162d46700893" dependencies: chalk "~0.5.1" mkdirp "^0.3.5" @@ -386,10 +386,10 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -prettier@^2.3.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" - integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== +prettier@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== punycode@^1.3.2: version "1.4.1"