pax_global_header00006660000000000000000000000064144677136450014533gustar00rootroot0000000000000052 comment=de6477730fd16a07def501c2cb761af9c3f4c247 react-jsonschema-form-5.12.1/000077500000000000000000000000001446771364500160105ustar00rootroot00000000000000react-jsonschema-form-5.12.1/.eslintrc-typescript000066400000000000000000000023521446771364500220420ustar00rootroot00000000000000{ "parser": "@typescript-eslint/parser", "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:react/recommended", "plugin:react-hooks/recommended", "plugin:react/jsx-runtime" ], "rules": { "react/no-deprecated": "warn", "react/prop-types": 0, "react/no-find-dom-node": 0, "react/display-name": 0, "react/jsx-tag-spacing": [ 1, { "beforeSelfClosing": "always" } ], "curly": [ 2 ], "linebreak-style": [ 2, "unix" ], "semi": [ 2, "always" ], "comma-dangle": [ 0 ], "@typescript-eslint/no-unused-vars": [ 2, { "vars": "all", "args": "none", "ignoreRestSiblings": true } ], "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-non-null-assertion": "off", "no-console": [ 0 ], "object-curly-spacing": [ 2, "always" ], "keyword-spacing": [ "error" ], "no-prototype-builtins": "error", "@typescript-eslint/no-empty-function": "warn", "@typescript-eslint/no-var-requires": "warn" }, "env": { "es6": true, "browser": true, "node": true } } react-jsonschema-form-5.12.1/.github/000077500000000000000000000000001446771364500173505ustar00rootroot00000000000000react-jsonschema-form-5.12.1/.github/CODEOWNERS000066400000000000000000000000011446771364500207320ustar00rootroot00000000000000 react-jsonschema-form-5.12.1/.github/FUNDING.yml000066400000000000000000000000471446771364500211660ustar00rootroot00000000000000open_collective: react-jsonschema-form react-jsonschema-form-5.12.1/.github/ISSUE_TEMPLATE/000077500000000000000000000000001446771364500215335ustar00rootroot00000000000000react-jsonschema-form-5.12.1/.github/ISSUE_TEMPLATE/bug_report.yml000066400000000000000000000053051446771364500244310ustar00rootroot00000000000000name: 🐛 Bug description: File a bug/issue title: '' labels: [bug, needs triage] assignees: - rjsf-team/reviewers body: - type: checkboxes attributes: label: Prerequisites options: - label: I have searched the existing issues required: true - label: I understand that providing a [SSCCE](http://sscce.org/) example is tremendously useful to the maintainers. required: true - label: I have read the [documentation](https://rjsf-team.github.io/react-jsonschema-form/docs) required: true - label: Ideally, I'm providing a [sample JSFiddle](https://jsfiddle.net), [Codesandbox.io](https://codesandbox.io) or preferably a [shared playground link](https://rjsf-team.github.io/react-jsonschema-form/) demonstrating the issue. required: false - type: dropdown id: theme attributes: label: What theme are you using? options: - core - antd - bootstrap-4 - chakra-ui - fluent-ui - material-ui - mui - semantic-ui - utils - validator-ajv6 - validator-ajv8 - other validations: required: true - type: input id: version attributes: label: Version description: You can usually get this information in your `package.json` or in the file URL if you're using the unpkg one. value: 5.x validations: required: true - type: textarea attributes: label: Current Behavior description: A concise description of what you're experiencing. validations: required: false - type: textarea attributes: label: Expected Behavior description: A concise description of what you expected to happen. validations: required: false - type: textarea attributes: label: Steps To Reproduce description: Steps to reproduce the behavior. placeholder: | 1. In this environment... 2. With this config... 3. Run '...' 4. See error... validations: required: false - type: textarea attributes: label: Environment description: | examples: - **OS**: Ubuntu 20.04 - **Node**: 13.14.0 - **npm**: 7.6.3 value: | - OS: - Node: - npm: render: markdown validations: required: false - type: textarea attributes: label: Anything else? description: | Links? References? Anything that will give us more context about the issue you are encountering! Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. validations: required: false ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.github/ISSUE_TEMPLATE/feature_request.yml�����������������������������0000664�0000000�0000000�00000002647�14467713645�0025472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������name: 🚀 Feature description: File a Feature title: '<title>' labels: [feature, needs triage] assignees: - rjsf-team/reviewers body: - type: checkboxes attributes: label: Prerequisites options: - label: I have read the [documentation](https://rjsf-team.github.io/react-jsonschema-form/docs) required: true - type: dropdown id: theme attributes: label: What theme are you using? options: - core - antd - bootstrap-4 - chakra-ui - fluent-ui - material-ui - mui - semantic-ui - utils - validator-ajv6 - validator-ajv8 - other validations: required: true - type: textarea attributes: label: Is your feature request related to a problem? Please describe. description: A clear and concise description of what the problem is. placeholder: | Ex. I'm always frustrated when [...] validations: required: false - type: textarea attributes: label: Describe the solution you'd like description: A clear and concise description of what you want to happen. validations: required: false - type: textarea attributes: label: Describe alternatives you've considered description: A clear and concise description of any alternative solutions or features you've considered. validations: required: false �����������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.github/ISSUE_TEMPLATE/question_issue.yml������������������������������0000664�0000000�0000000�00000001476�14467713645�0025345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������name: ❔ Question description: Ask a Question title: '<title>' labels: [question, needs triage] assignees: - rjsf-team/reviewers body: - type: checkboxes attributes: label: Prerequisites options: - label: I have read the [documentation](https://rjsf-team.github.io/react-jsonschema-form/docs) required: true - type: dropdown id: theme attributes: label: What theme are you using? options: - core - antd - bootstrap-4 - chakra-ui - fluent-ui - material-ui - mui - semantic-ui - utils - validator-ajv6 - validator-ajv8 - other validations: required: true - type: textarea attributes: label: What is your question? validations: required: false ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.github/dependabot.yml�������������������������������������������������0000664�0000000�0000000�00000000451�14467713645�0022200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������version: 2 updates: - package-ecosystem: 'pip' directory: '/' schedule: interval: 'monthly' - package-ecosystem: 'npm' directory: '/' schedule: interval: 'monthly' - package-ecosystem: 'github-actions' directory: '/' schedule: interval: 'monthly' �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.github/stale.yml������������������������������������������������������0000664�0000000�0000000�00000001577�14467713645�0021215�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Number of days of inactivity before an issue becomes stale daysUntilStale: 456 # 1.25 years # Number of days of inactivity before a stale issue is closed daysUntilClose: 30 # Issues with these labels will never be considered stale exemptLabels: - devops - enhancement - feature - theme request - help wanted - p1 # Label to use when marking an issue as stale staleLabel: possibly close # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as possibly close because it has not had recent activity. It will be closed if no further activity occurs. Please leave a comment if this is still an issue for you. Thank you. # Comment to post when closing a stale issue. Set to `false` to disable closeComment: This issue was closed because of lack of recent activity. Reopen if you still need assistance. ���������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.github/workflows/�����������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021405�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.github/workflows/change-tag-name.yml����������������������������������0000664�0000000�0000000�00000000475�14467713645�0025052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������name: Add tag without v on: release: types: [published] jobs: release-on-push: runs-on: ubuntu-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: rymndhng/release-on-push-action@master with: bump_version_scheme: norelease tag_prefix: '' ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.github/workflows/ci.yml�����������������������������������������������0000664�0000000�0000000�00000005224�14467713645�0022526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������name: CI on: push: branches: [main] pull_request: branches: [main] jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [14.x, 16.x, 18.x] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} cache: 'npm' cache-dependency-path: 'package-lock.json' - run: npm i -g npm@9 - run: npm ci - run: npm run lint - run: npm run cs-check - name: Build with Netlify badge if: github.ref != 'refs/heads/main' && matrix.node-version != '14.x' run: npm run build env: VITE_SHOW_NETLIFY_BADGE: true NODE_OPTIONS: --max_old_space_size=4096 - name: Build if: github.ref == 'refs/heads/main' && matrix.node-version != '14.x' run: npm run build env: NODE_OPTIONS: --max_old_space_size=4096 # Docusaurus doesn't support Node 14. These tasks can be removed once Node 14 is EOL (May 2023) - name: Build with Netlify badge (no docs) if: github.ref != 'refs/heads/main' && matrix.node-version == '14.x' run: npx nx run-many --target=build --exclude=docs env: VITE_SHOW_NETLIFY_BADGE: true NODE_OPTIONS: --max_old_space_size=4096 - name: Build (no docs) if: github.ref == 'refs/heads/main' && matrix.node-version == '14.x' run: npx nx run-many --target=build --exclude=docs env: NODE_OPTIONS: --max_old_space_size=4096 - if: matrix.node-version == '18.x' uses: actions/upload-artifact@v3 with: name: playground path: packages/playground/dist - if: matrix.node-version == '18.x' uses: actions/upload-artifact@v3 with: name: docs path: packages/docs/build - run: npm test deploy_playground_and_docs: runs-on: ubuntu-latest if: github.ref == 'refs/heads/main' name: Deploy playground and docs to GitHub Pages needs: [build] steps: - name: Download built playground uses: actions/download-artifact@v3 with: name: playground path: dist - name: Download built docs uses: actions/download-artifact@v3 with: name: docs path: dist/docs - name: Deploy playground + docs to GitHub Pages uses: crazy-max/ghaction-github-pages@v3.1.0 with: keep_history: true target_branch: gh-pages build_dir: dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.github/workflows/issue-triage-automation.yml��������������������������0000664�0000000�0000000�00000000403�14467713645�0026704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������name: issue-triage-automation on: issues: types: [opened] jobs: automate-issues-labels: runs-on: ubuntu-latest steps: - uses: andymckay/labeler@1.0.4 with: add-labels: 'needs triage' ignore-if-labeled: true �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.github/workflows/issue-triage-removal-automation.yml������������������0000664�0000000�0000000�00000000422�14467713645�0030350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������name: issue-triage-removal-automation on: issues: types: [assigned] jobs: automate-issues-labels: runs-on: ubuntu-latest steps: - uses: andymckay/labeler@1.0.4 with: remove-labels: 'needs triage' ignore-if-assigned: false ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.github/workflows/release-docs.yml�������������������������������������0000664�0000000�0000000�00000001615�14467713645�0024501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������name: Release Latest Documentation on: release: types: [published] workflow_dispatch: jobs: create-tag: runs-on: ubuntu-latest steps: - name: Run find-and-replace to remove v uses: mad9000/actions-find-and-replace-string@2 id: tag_without_v with: source: ${{ github.event.release.tag_name }} find: 'v' replace: '' - uses: actions/checkout@v3 - uses: rickstaa/action-create-tag@v1 with: tag: ${{ steps.tag_without_v.outputs.value }} message: 'Tagged documentation release' deploy_docs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: ref: main - name: Setup Python uses: actions/setup-python@v3 with: python-version: '3.10' - run: pip install -r requirements.docs.txt - run: mkdocs build --clean �������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.github/workflows/release.yml������������������������������������������0000664�0000000�0000000�00000001532�14467713645�0023551�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������name: Release on: release: types: [published] jobs: release_to_npm: name: Release to npm runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Use Node.js 18.x uses: actions/setup-node@v3 with: node-version: 18.x cache: 'npm' cache-dependency-path: 'package-lock.json' - run: npm i -g npm@9 - run: npm ci - run: npm run build env: NODE_OPTIONS: --max_old_space_size=4096 - run: npm test - run: npm run lint - run: npm run cs-check - run: echo //registry.npmjs.org/:_authToken=${NPM_TOKEN} > .npmrc env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - run: git update-index --assume-unchanged .npmrc - run: npx lerna publish from-package --yes - if: always() run: rm .npmrc ����������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.gitignore�������������������������������������������������������������0000664�0000000�0000000�00000003555�14467713645�0020010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Created by https://www.gitignore.io/api/osx,node,linux,windows # Edit at https://www.gitignore.io/?templates=osx,node,linux,windows ### Linux ### *~ # temporary files which can be created if a process still has a handle open of a deleted file .fuse_hidden* # KDE directory preferences .directory # Linux trash folder which might appear on any partition or disk .Trash-* # .nfs files are created when an open file is removed but is still being accessed .nfs* ### Node ### # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* # Runtime data pids *.pid *.seed *.pid.lock # Coverage directory used by tools like istanbul coverage # nyc test coverage .nyc_output # Dependency directories node_modules/ # Optional npm cache directory .npm # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history # Output of 'npm pack' *.tgz # Yarn Integrity file .yarn-integrity # dotenv environment variables file .env .env.test ### OSX ### # General .DS_Store .AppleDouble .LSOverride # Icon must end with two \r Icon # Thumbnails ._* # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk ### Windows ### # Windows thumbnail cache files Thumbs.db ehthumbs.db ehthumbs_vista.db # Dump file *.stackdump # Folder config file [Dd]esktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ # Windows Installer files *.cab *.msi *.msix *.msm *.msp # Windows shortcuts *.lnk .rts2_** # End of https://www.gitignore.io/api/osx,node,linux,windows # Package specific files build _build site dist dist-temp lib yarn.lock # IDE .vscode .idea *.iml .editorconfig # Code coverage coverage .nyc_output venv *.orig out/ ���������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.husky/����������������������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0017231�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.husky/pre-commit������������������������������������������������������0000775�0000000�0000000�00000000221�14467713645�0021226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" # Hopefully this disables husky on github CI [ -n "$CI" ] && exit 0 npm run pre-commit:husky �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.node-version����������������������������������������������������������0000664�0000000�0000000�00000000010�14467713645�0020410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������18.16.0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.npmrc�����������������������������������������������������������������0000664�0000000�0000000�00000000172�14467713645�0017130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������registry=https://registry.npmjs.org/ # Use legacy peer deps to allow things to install with node 16 legacy-peer-deps=true ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.nvmrc�����������������������������������������������������������������0000664�0000000�0000000�00000000003�14467713645�0017127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������18 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/.readthedocs.yml�������������������������������������������������������0000664�0000000�0000000�00000000215�14467713645�0021074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������version: 2 mkdocs: configuration: mkdocs.yml formats: all python: version: '3.8' install: - requirements: requirements.docs.txt �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/CHANGELOG.md�����������������������������������������������������������0000664�0000000�0000000�00000355047�14467713645�0017637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!-- INSTRUCTIONS: For each PR, add a changelog entry that describes what your PR does. Add it to the heading for the appropriate package it modifies and include it in this format: - [Description] ([Link to PR]) If your PR affects multiple packages, list it multiple times under headings for each package. If it affects more general things such as dependency updates or non-package-specific changes, add it under a "Dev / docs / playground" section. You should also update the heading of the latest (upcoming) version if your PR change merits it according to semantic versioning. For example, if your PR adds a breaking change, then you should change the heading of the (upcoming) version to include a major version bump. --> # 5.12.1 ## @rjsf/validator-ajv8 - Updated `AJV8PrecompiledValidator.rawValidation()` to resolve root schema with formData when comparing input schema, fixing [#3825](https://github.com/rjsf-team/react-jsonschema-form/issues/3825) ## @rjsf/core - Updated `MultiSchemaField` to merge all top level fields except properties for anyOf/oneOf options, fixing [#3808](https://github.com/rjsf-team/react-jsonschema-form/issues/3808) and [#3787](https://github.com/rjsf-team/react-jsonschema-form/issues/3787) ## @rjsf/antd - Updated CheckboxesWidget to not show duplicate title, fixing [#3815](https://github.com/rjsf-team/react-jsonschema-form/issues/3815) ## @rjsf/utils - Updated `retrieveSchemaInternal` allOf logic for precompiled schemas to resolve top level properties fixing [#3817](https://github.com/rjsf-team/react-jsonschema-form/issues/3817) # 5.12.0 ## @rjsf/utils - Experimental feature: - Added `experimental_defaultFormStateBehavior = { arrayMinItems: { populate: 'never' } }` (feature [#3796](https://github.com/rjsf-team/react-jsonschema-form/issues/3796)) ## @rjsf/validator-ajv8 - Exposing new function `compileSchemaValidatorsCode` to allow creating precompiled validator without a file. This is useful in case when precompiled validator is to be created dynamically. [#3793](https://github.com/rjsf-team/react-jsonschema-form/pull/3793) ## Dev / docs / playground - update playground vite config to use sources directly, allowing to reload changes in it without additional build step - moving from `dts-cli` to use individual dev tools directly, updating package publish config - tsc for generating type definitions and esm modules - esbuild for CJS bundle - rollup for UMD bundle - Updated the `form-props` documentation `arrayMinItems`, added description for `never`. - Updated the `playground` to add the option for the new `arrayMinItems.populate = 'never'`. # 5.11.2 ## @rjsf/material-ui - Removed unnecessary import of old `@types/material-ui` which can cause typescript issues in some situations ## @rjsf/utils - Updated the `resolveAllReferences()` function to use object spreading to update properties and items in a schema rather than directly modifying the schema to avoid issues with frozen object, fixing [#3805](https://github.com/rjsf-team/react-jsonschema-form/issues/3805) # 5.11.1 ## @rjsf/core - Updated `SchemaField` to ignore errors for `anyOf`/`oneOf` parent schema, fixing [1295](https://github.com/rjsf-team/react-jsonschema-form/issues/1295) ## @rjsf/utils - Created new `resolveAllReferences()` function to resolve all references within a schema's properties and array items. - Updated `getClosestMatchingOption()` to use `resolveAllReferences()` for all oneOf/anyOf schemas - Updated `resolveAnyOrOneOfSchemas()` to use `resolveAllReferences()` for all oneOf/anyOf schemas - Better handle the `null` case in `withIdRefPrefix`, fixing [#3792](https://github.com/rjsf-team/react-jsonschema-form/pull/3792) # 5.11.0 ## @rjsf/core - Updated `MultiSchemaField` to use `mergeSchema()` for merging in the remaining schema for `anyOf`/`oneOf` - Added new `extraErrorsBlockSubmit` prop to `Form` that allows the extra asynchronous errors to block a form submit, fixing [#3757](https://github.com/rjsf-team/react-jsonschema-form/issues/3757) ## @rjsf/utils - Updated `retrieveSchemaInternal()` to always resolve allOf schema without merging when `expandAllBranches` is set, fixing compiled schema issue always throwing error with `mergeAllOf` - Updated `getDefaultFormState()` to use `mergeSchema()` for merging in the remaining schema for `anyOf`/`oneOf` - Updated `retrieveSchema()` to use `mergeSchema()` for merging in the remaining schema for `anyOf`/`oneOf` ## Dev / docs / playground - Switched to using npm workspaces for the sub-package hierarchy - NOTE: Developers may need to run the `npm run refresh-node-modules` script first to get the build and tests to work correctly - Backfilled Docusaurus site with documentation for v3, v4 # 5.10.0 ## @rjsf/core - Updated `getFieldComponent()` to support rendering a custom component by given schema id ($id). [#3740](https://github.com/rjsf-team/react-jsonschema-form/pull/3740) - Updated `MultiSchemaField` to merge the selected `oneOf/anyOf` value into base `schema`, fixing [#3744](https://github.com/rjsf-team/react-jsonschema-form/issues/3744) ## @rjsf/utils - Updated `getClosestMatchingOption()` to resolve refs in options before computing the closest matching option, fixing an issue with using precompiled validators - Also, added support for nested `anyOf` and `discriminator` support in the recursive `calculateIndexScore()` - Updated `getDefaultFormState()` to merge the remaining schema into `anyOf/oneOf` schema selected during the computation of values, fixing [#3744](https://github.com/rjsf-team/react-jsonschema-form/issues/3744) - Updated `retrieveSchema()` to merge the remaining schema into the `anyOf/oneOf` schema selected during the resolving of dependencies, fixing [#3744](https://github.com/rjsf-team/react-jsonschema-form/issues/3744) ## Dev / docs / playground - Updated the `custom-widgets-fields` documentation to add the new added behaviour of `getFieldComponent()` function. [#3740](https://github.com/rjsf-team/react-jsonschema-form/pull/3740) - Updated the `playground` to add an example of the new added behaviour of `getFieldComponent()` function. [#3740](https://github.com/rjsf-team/react-jsonschema-form/pull/3740) # 5.9.0 ## @rjsf/utils - Updated `getDefaultFormState()` to fix a bug where `experimental_defaultFormStateBehavior: { emptyObjectFields: 'populateRequiredDefaults' }` wasn't working for object properties with `$ref`s - Experimental feature **breaking change**: - Updated the `experimental_defaultFormStateBehavior.arrayMinItems` from simple flag to an object containing two optional fields, `populate` and `mergeExtraDefaults` - The new `arrayMinItems.mergeExtraDefaults` flag, when "true", allows users to merge defaults onto the end of `formData` arrays when `minItems` is specified - If you were previously passing `experimental_defaultFormStateBehavior` as `{ arrayMinItems = 'requiredOnly }` on the `Form`, now you would pass `{ arrayMinItems: { populate: 'requiredOnly' } }` - Added a new, optional `mergeExtraArrayDefaults=false` flag to the `mergeDefaultWithFormData()` utility function to support the new `arrayMinItems.mergeExtraDefaults` experimental feature ## Dev / docs / playground - Updated the `utility-functions` documentation to add the new `mergeExtraArrayDefaults` flag for the `mergeDefaultWithFormData()` function - Updated the `form-props` documentation to update the `arrayMinItems` documentation for the new object behavior - Updated the `playground` to add a checkbox for the new `arrayMinItems.mergeExtraDefaults` flag # 5.8.2 ## @rjsf/validator-ajv8 - Explicitly cache schemas by their hash when checking data is valid to avoid multiple compilations for schemas without IDs leading to poor performance [#3721](https://github.com/rjsf-team/react-jsonschema-form/pull/3721) # 5.8.1 ## Dev / docs / playground - Updated peer dependencies in all packages to `^5.8.x` # 5.8.0 ## @rjsf/bootstrap-4 - Updated FieldTemplate Component to display description from SchemaField and make it consistent for all the available themes ## @rjsf/chakra-ui - Updated FieldTemplate Component to display description from SchemaField and make it consistent for all the available themes ## @rjsf/core - Updated SchemaField to be able to render markdown in the description field - Updated `MultiSchemaField.getMatchingOption` to use option index from `getClosestMatchingOption`, fixing [#3693](https://github.com/rjsf-team/react-jsonschema-form/issues/3693) and [#3705](https://github.com/rjsf-team/react-jsonschema-form/issues/3705) ## @rjsf/fluent-ui - Updated FieldTemplate Component to display description from SchemaField and make it consistent for all the available themes ## @rjsf/material-ui - Updated FieldTemplate Component to display description from SchemaField and make it consistent for all the available themes ## @rjsf/mui - Updated FieldTemplate Component to display description from SchemaField and make it consistent for all the available themes ## @rjsf/semantic-ui - Updated FieldTemplate Component to display description from SchemaField and make it consistent for all the available themes ## @rjsf/utils - Updated `getClosestMatchingOption` to return selected option if all options score the same, fixing [#3693](https://github.com/rjsf-team/react-jsonschema-form/issues/3693) and [#3705](https://github.com/rjsf-team/react-jsonschema-form/issues/3705) - Updated `resolveCondition` to default formData as empty object when evaluating if expression, fixing [#3706](https://github.com/rjsf-team/react-jsonschema-form/issues/3706) - Updated `retrieveSchemaInternal` to return failed merged allOf sub schemas for expandAllBranches flag, fixing [#3689](https://github.com/rjsf-team/react-jsonschema-form/issues/3700) - Updated `hashForSchema` to sort schema fields in consistent order before stringify to prevent different hash ids for the same schema - Updated `enumOptionsSelectValue` to allow picking falsy enumOptions, fixing [#3716](https://github.com/rjsf-team/react-jsonschema-form/issues/3716) ## @rjsf/validator-ajv8 - Updated `AJV8PrecompiledValidator.rawValidation()` to use resolve root schema when comparing input schema, fixing [#3708](https://github.com/rjsf-team/react-jsonschema-form/issues/3708) ## Dev / docs / playground - Updated sample data and documentation about the markdown in `RJSFSchema` description - Fixed broken playground examples ([#3696](https://github.com/rjsf-team/react-jsonschema-form/issues/3696)) - Added experimental_defaultFormStateBehavior.emptyObjectFields control to Playground - Fixed bug where subthemes would not appear in Playground # 5.7.3 ## @rjsf/utils - Updated `getClosestMatchingOption` `JUNK_OPTION` schema with a well known $id - Updated `schemaParser` to resolve array items field, fixing [#3689](https://github.com/rjsf-team/react-jsonschema-form/issues/3689) ## @rjsf/validator-ajv8 - Updated `AJV8PrecompiledValidator.isValid()` to return false for junk schema option, fixing [#3677](https://github.com/rjsf-team/react-jsonschema-form/issues/3677) # 5.7.2 ## @rjsf/validator-ajv8 - Removed the importing of internal `ajv` types by simplifying the `CompiledValidateFunction` type to avoid a bunch of Typescript errors encountered by users of the package # 5.7.1 ## @rjsf/validator-ajv8 - Updated the build for all but the `cjs` development version, to not export the `compileSchemaValidators()` function to avoid "Module not found: Can't resolve 'fs' error" issues, fixing [#3668](https://github.com/rjsf-team/react-jsonschema-form/issues/3668) ## @rjsf/core - Added protection against a null `field` in the `focusOnError` method in `Form` ## Dev / docs / playground - Updated the `validation` documentation to add a note with a web-resource to help folks work around the "Module not found: Can't resolve 'fs' error" issue for development environments - Updated all of the `package-lock.json` files to bump peer-dependencies to `5.7.x`, fixing [#3669](https://github.com/rjsf-team/react-jsonschema-form/issues/3669) # 5.7.0 ## @rjsf/antd - Fix [#3608](https://github.com/rjsf-team/react-jsonschema-form/issues/3608) by ensuring the root field is always wrapped in Form.Item - Fix [#3594](https://github.com/rjsf-team/react-jsonschema-form/issues/3594) by removing the duplicate title for `SelectWidget` and description for `CheckboxWidget` ## @rjsf/core - Updated the `MultiSchemaField` to use the new `getDiscriminatorFieldFromSchema()` API - Added new `experimental_defaultFormStateBehavior` prop to `Form` - to specify alternate behavior when dealing with the rendering of array fields where `minItems` is set but field is not `required` (fixes [#3363](https://github.com/rjsf-team/react-jsonschema-form/issues/3363)) ([#3602](https://github.com/rjsf-team/react-jsonschema-form/issues/3602)) - to handle setting object defaults based on the value of `emptyObjectFields` supporting required fields only and skipping defaults entirely, fixing [#2980](https://github.com/rjsf-team/react-jsonschema-form/issues/2980) - Fixed regression [#3650](https://github.com/rjsf-team/react-jsonschema-form/issues/3650) in `FileWidget` to again support adding multiple files to arrays ## @rjsf/fluent-ui - Added support for `additionalProperties` to fluent-ui theme, fixing [#2777](https://github.com/rjsf-team/react-jsonschema-form/issues/2777). - Upgraded to `8.x` version of `@fluentui/react` maintaining backwards compatibility to version 7, fixing [#3463](https://github.com/rjsf-team/react-jsonschema-form/issues/3463) ## @rjsf/utils - Added two new APIs `getDiscriminatorFieldFromSchema()` (a refactor of code from `MultiSchemaField`) and `hashForSchema()` - Updated `getDefaultFormState()` and `toPathSchema()` to use `getDiscriminatorFieldFromSchema()` to provide a discriminator field to `getClosestMatchingOption()` calls. - Refactored the `retrieveSchema()` internal API functions to support implementing an internal `schemaParser()` API for use in precompiling schemas, in support of [#3543](https://github.com/rjsf-team/react-jsonschema-form/issues/3543) - Fixed `toPathSchema()` to handle `properties` in an object along with `anyOf`/`oneOf`, fixing [#3628](https://github.com/rjsf-team/react-jsonschema-form/issues/3628) and [#1628](https://github.com/rjsf-team/react-jsonschema-form/issues/1628) - Refactored optional parameters for `computeDefaults()` into destructured props object to reduce clutter when only specifying later of the optional argument, fixing [#3602](https://github.com/rjsf-team/react-jsonschema-form/issues/3602) - Fixed `computeDefaults()` to handle `$ref` in an object along with `anyOf`/`oneOf`, fixing [#3633](https://github.com/rjsf-team/react-jsonschema-form/issues/3633) ## @rjsf/validator-ajv8 - Added two new APIs `compileSchemaValidators()` and `createPrecompiledValidator()` implemented to support using precompiled validators build with AJV 8, fixing [#3543](https://github.com/rjsf-team/react-jsonschema-form/issues/3543) ## Dev / docs / playground - Added documentation to `custom-templates` describing how to extend the `BaseInputTemplate` - Added **minItems behavior for array field** live setting, fixing [#3602](https://github.com/rjsf-team/react-jsonschema-form/issues/3602) - Upgraded playground to `8.x` version of `@fluentui/react`, fixing [#3463](https://github.com/rjsf-team/react-jsonschema-form/issues/3463) - Added documentation to `validation` describing the new precompiled validators feature - Added new `validator-ajv8.md` documentation to the `api-reference` directory as well as putting it into the `sidebar.js` # 5.6.2 ## Dev / docs / playground - Fixed issues with `post-versioning` that caused the 5.6.1 branch to not be publishable # 5.6.1 ## Dev / docs / playground - Updated the `contributing` documentation to improve the `Releasing` section to include a new `npm run post-versioning` step - Implemented a new `bump-peer-deps.js` script to help implement the new scripts included in the `post-versioning` step # 5.6.0 ## @rjsf/antd - Treat multiple as a boolean rather than comparing against `undefined` in the `SelectWidget`, fixing [#3595](https://github.com/rjsf-team/react-jsonschema-form/issues/3595) ## @rjsf/core - Switched `Form` to use the new `validatorDataMerge()` and `toErrorList()` functions instead of the now deprecated `schemaUtils.mergeValidatorData()` and `schemaUtils.getValidator().toErrorList()` - Added option to provide a callback function to `focusOnFirstError` ([3590](https://github.com/rjsf-team/react-jsonschema-form/pull/3590)) - Updated `MultiSchemaField` to handle the OpenAPI `discriminator` extension on `anyOf/oneOf` fields by passing it into `getClosestMatchingOption()` if it exists, fixing [#3512](https://github.com/rjsf-team/react-jsonschema-form/issues/3512) - Updated `SchemaField` function to use `getSchemaType` rather than `schema.type` to set the proper class name. ## @rjsf/utils - Refactored the `createErrorHandler()`, `toErrorList()`, `toErrorSchema()` and `unwrapErrorHandler()` functions from the `@rjsf/validator-ajv6` and `@rjsf/validator-ajv8` implementations since they were identical - As a result, the `mergeValidationData()` function was deprecated in favor of the new `validationDataMerge()` function that uses the refactored `toErrorList()` function - Refactored the `ROOT_SCHEMA_PREFIX` constant as well - Updated `ValidatorType` and `SchemaUtilsType` to deprecate the `toErrorList()` and `mergeValidationData()` functions, respectively - Updated the `getClosestMatchingOption()` and `getFirstMatchingOption()` to pass the new `discriminatorField` to the `getMatchingOption()` function - Updated `getMatchingOption()` to use `discriminatorField` when it is present in the `options` object properties to drill into the object to detect if that one field is valid - Updated `SchemaUtilsType` and the associated forward functions in `createSchemaUtils` to add the new `discriminatorField?: string` optional parameter - Updated `toIdSchema()` function to use `getSchemaType(schema) === 'object'` rather than `schema.type === 'object'` to get the proper pathing for ids, fixing [#2044](https://github.com/rjsf-team/react-jsonschema-form/issues/2044) ## @rjsf/validator-ajv6 - Removed the refactored functions and constant from the `AJV6Validator` in favor of using the new functions and constant from `@rjsf/utils` ## @rjsf/validator-ajv8 - Removed the refactored functions and constant from the `AJV8Validator` in favor of using the new functions and constant from `@rjsf/utils` ## Dev / docs / playground - Updated the `utility-functions` documentation to describe the new refactored functions as well as deprecating the `mergeValidationData()` function - Updated the `playground` to properly restore `liveSettings` from shared links and added a switch for `noHtml5Validation` in the live settings rather than having it set to `true` always - Also added a new `Blank` example to help users easily paste their code # 5.5.2 ## @rjsf/material-ui - Switched to using `TextField` for the `WrapIfAdditionalTemplate` label key input to match the `@rjsf/mui` fix ## @rjsf/mui - Switched to using `TextField` for the `WrapIfAdditionalTemplate` label key input, fixing [#3578](https://github.com/rjsf-team/react-jsonschema-form/issues/3578) ## Dev / docs / playground - Updated the `templates` passed into the main `Form` to not include undefined values, fixing [#3576](https://github.com/rjsf-team/react-jsonschema-form/issues/3576) and [#3579](https://github.com/rjsf-team/react-jsonschema-form/issues/3579) # 5.5.1 ## @rjsf/core - Updated `Form` to include the top `disabled` property in the `ui:submitButtonOptions` so the submit button will be disabled when the whole form is disabled. Fixes [#3264](https://github.com/rjsf-team/react-jsonschema-form/issues/3264). ## @rjsf/utils - Added protections against infinite recursion of `$ref`s for the `toIdSchema()`, `toPathSchema()` and `getDefaultFormState()` functions, fixing [#3560](https://github.com/rjsf-team/react-jsonschema-form/issues/3560) - Updated `getDefaultFormState()` to handle object-based `additionalProperties` with defaults using `formData` in addition to values contained in a `default` object, fixing [#2593](https://github.com/rjsf-team/react-jsonschema-form/issues/2593) - Updated internal helper `withExactlyOneSubschema()` inside of `retrieveSchema()` to use the `isValid()` function rather than `validateFormData()` when determining the one-of branch ## Dev / docs / playground - Refactored some parts of `playground` to make it cleaner - This includes fixing the spelling of the `disabled` flag being passed into the `Form` from the incorrect `disable` spelling - Formatted the entire monorepo which included 6 unformatted files outside of `playground` - Removed `react-app-polyfill` package from `playgound`. This ends IE11 support - Fix a handful of broken docs links, fixing [#3553](https://github.com/rjsf-team/react-jsonschema-form/issues/3553) # 5.5.0 ## @rjsf/antd - Updated tests to use centralized snapshots from `core` ## @rjsf/bootstrap-4 - Updated tests to use centralized snapshots from `core` ## @rjsf/chakra-ui - Updated tests to use centralized snapshots from `core` ## @rjsf/core - Updated `FileWidget` to pass false for `required` once a value has been specified, fixing [#3504](https://github.com/rjsf-team/react-jsonschema-form/issues/3504) - Updated `ObjectField` to pass the `errorSchema` to the `ObjectFieldTemplate` to allow custom templates access to the errors - Centralized snapshot tests from each theme into `core`, adding snapshots tests for `core` as well ## @rjsf/fluent-ui - Updated tests to use centralized snapshots from `core` ## @rjsf/material-ui - Updated tests to use centralized snapshots from `core` ## @rjsf/mui - Updated tests to use centralized snapshots from `core` ## @rjsf/semantic-ui - Updated tests to use centralized snapshots from `core` ## @rjsf/utils - Added `errorSchema` as an optional prop on `ObjectFieldTemplateProps` ## Dev / docs / playground - Converted the `playground` to use Typescript, including some refactoring of code to make that job easier - Updated the `custom-templates` documentation to add `errorSchema` to the props for `ObjectFieldTemplate` # 5.4.0 ## @rjsf/antd - Added the ability to use a tooltip for a description - Updated `ObjectFieldTemplate` to hide the titles and descriptions when `displayLabel` is true (including globally), fixing [#3231](https://github.com/rjsf-team/react-jsonschema-form/issues/3231) - Updated `CheckboxWidget` to show the `description` using the `DescriptionFieldTemplate`, fixing [#2791](https://github.com/rjsf-team/react-jsonschema-form/issues/2791) - Updated `CheckboxesWidget` and `SelectWidget` to show the `label` using the `TitleFieldTemplate`, fixing [#2134](https://github.com/rjsf-team/react-jsonschema-form/issues/2134) ## @rjsf/bootstrap-4 - Updated `ObjectFieldTemplate` to hide the titles and descriptions when `displayLabel` is true (including globally), fixing [#3231](https://github.com/rjsf-team/react-jsonschema-form/issues/3231) - Updated `CheckboxWidget` to show the `description` using the `DescriptionFieldTemplate`, fixing [#2791](https://github.com/rjsf-team/react-jsonschema-form/issues/2791) - Updated `RangeWidget` to fix the label hiding bug using `labelValue()` ## @rjsf/chakra-ui - Fix: MUI radio widget initializes as uncontrolled when schema has no default value, fixing [#3511](https://github.com/rjsf-team/react-jsonschema-form/issues/3511) - Updated `ObjectFieldTemplate` to hide the titles and descriptions when `displayLabel` is true (including globally), fixing [#3231](https://github.com/rjsf-team/react-jsonschema-form/issues/3231) - Updated `CheckboxesWidget`, `CheckboxWidget`, `RadioWidget` and `SelectWidget` to hide labels when `hideLabel` is true using the new `labelValue()` helper (including globally) - Updated `CheckboxWidget` to show the `description` using the `DescriptionFieldTemplate`, fixing [#2791](https://github.com/rjsf-team/react-jsonschema-form/issues/2791) ## @rjsf/core - Updated `FileWidget` to show a preview of images and a download link for non-images when the `filePreview` options is set to true in the `UiSchema` - Updated `ArrayField`, `BooleanField`, `MultiSelectField` and `StringField` to pass `label` (read from `uiSchema.title` || `schema.title` || `name`) and `hideLabel` down to all of the `Widgets` they render, fixing [#827](https://github.com/rjsf-team/react-jsonschema-form/issues/827), [#2636](https://github.com/rjsf-team/react-jsonschema-form/issues/2636), [#2399](https://github.com/rjsf-team/react-jsonschema-form/issues/2399) and [#3531](https://github.com/rjsf-team/react-jsonschema-form/issues/3531) - Updated `ObjectField`, `ObjectFieldTemplate`, `ArrayFieldDescriptionTemplate`, `ArrayFieldTitleTemplate` and `CheckboxWidget` to hide the titles and descriptions when `hideLabel` is true using the new `labelValue()` helper (including globally), fixing [#3231](https://github.com/rjsf-team/react-jsonschema-form/issues/3231) - Updated `CheckboxWidget` to use the `labelValue()` function for hiding labels ## @rjsf/fluent-ui - Updated `FieldTemplate` and `ObjectFieldTemplate` to hide the titles and descriptions when `displayLabel` is true (including globally), fixing [#3231](https://github.com/rjsf-team/react-jsonschema-form/issues/3231) - Updated `BaseInputTemplate`, `CheckboxesWidget`, `CheckboxWidget`, `ColorWidget`, `DateWidget`, `RadioWidget`, `RangeWidget`, `SelectWidget` and `UpDownWidget` to hide labels when `hideLabel` is true using the new `labelValue()` helper (including globally) - Also extracted a new `FluentLabel` component out of `CheckboxesWidget`, `ColorWidget`, `RangeWidget` and `UpDownWidget` - Updated `CheckboxWidget` to show the `description` using the `DescriptionFieldTemplate`, fixing [#2791](https://github.com/rjsf-team/react-jsonschema-form/issues/2791) ## @rjsf/material-ui - Fix: MUI radio widget initializes as uncontrolled when schema has no default value, fixing [#3511](https://github.com/rjsf-team/react-jsonschema-form/issues/3511) - Updated `ObjectFieldTemplate` to hide the titles and descriptions when `displayLabel` is true (including globally), fixing [#3231](https://github.com/rjsf-team/react-jsonschema-form/issues/3231) - Updated `BaseInputTemplate`, `CheckboxesWidget`, `CheckboxWidget`, `RadioWidget`, `RangeWidget` and `SelectWidget` to hide labels when `hideLabel` is true using the new `labelValue()` helper (including globally) - Updated `CheckboxWidget` to show the `description` using the `DescriptionFieldTemplate`, fixing [#2791](https://github.com/rjsf-team/react-jsonschema-form/issues/2791) ## @rjsf/mui - Fix: MUI radio widget initializes as uncontrolled when schema has no default value, fixing [#3511](https://github.com/rjsf-team/react-jsonschema-form/issues/3511) - Updated `ObjectFieldTemplate` to hide the titles and descriptions when `displayLabel` is true (including globally), fixing [#3231](https://github.com/rjsf-team/react-jsonschema-form/issues/3231) - Updated `BaseInputTemplate`, `CheckboxesWidget`, `CheckboxWidget`, `RadioWidget`, `RangeWidget` and `SelectWidget` to hide labels when `hideLabel` is true using the new `labelValue()` helper (including globally) - Updated `CheckboxWidget` to show the `description` using the `DescriptionFieldTemplate`, fixing [#2791](https://github.com/rjsf-team/react-jsonschema-form/issues/2791) ## @rjsf/semantic-ui - - Updated `ObjectFieldTemplate` to hide the titles and descriptions when `displayLabel` is true (including globally), fixing [#3231](https://github.com/rjsf-team/react-jsonschema-form/issues/3231) - Updated `BaseInputTemplate`, `CheckboxesWidget`, `CheckboxWidget`, `SelectWidget` and `TextareaWidget` to hide labels when `hideLabel` is true using the new `labelValue()` helper (including globally) - Updated `CheckboxWidget` to show the `description` using the `DescriptionFieldTemplate`, fixing [#2791](https://github.com/rjsf-team/react-jsonschema-form/issues/2791) ## @rjsf/utils - Updated the `UiSchema` to support the optional `filePreview?: boolean` option and to add a new `TranslatableString.PreviewLabel` to the `enums` - Updated the `WidgetProps` to add an optional `hideLabel?: boolean` field to better support hiding labels - Added a new `labelValue()` helper function to better support hiding labels ## @rjsf/validator-ajv8 - Improve `toErrorList()` and `unwrapErrorHandler()` by ensuring objects before recursing ## Dev / docs / playground - Added a new `AntD Customization` documentation with references to it in the `form-props` and `uiSchema` documentation - Updated the `uiSchema` documentation to add the `filePreview` option - Updated the `widgets` documentation to add the new, optional `hideLabel` prop - Updated the `utility-functions` documentation to add the new `labelValue()` function # 5.3.1 ## @rjsf/core - Updated `AltDateWidget` to remove an infinite loop caused by two conflicting effects by merging them with additional checking of original `value` against the current value, fixing [#3516](https://github.com/rjsf-team/react-jsonschema-form/issues/3516) ## @rjsf/utils - Updated the documentation of `getTestValidator()` and the `schema.test.ts` file to help developers ## @rjsf/validator-ajv6 - Updated the documentation of `getTestValidator()` and the `schema.test.ts` file to help developers ## @rjsf/validator-ajv8 - Updated the documentation of `getTestValidator()` and the `schema.test.ts` file to help developers ## Dev / docs / playground - Updated the `internals` documentation to use a React ref in the example, fixing [#3520](https://github.com/rjsf-team/react-jsonschema-form/issues/3520) - Updated the `contributing` documentation to describe the new development process needed for a `Vite` playground, fixing [#3478](https://github.com/rjsf-team/react-jsonschema-form/issues/3478) - Also fixed the `package.json` files to remove `npm start` in the subdirectories and change the root one to describe the new process - Updated the `semantic-ui/uiSchema` documentation to switch the default for `horizontalButtons` to be true per changes made in `5.3.0` # 5.3.0 ## @rjsf/antd - Added support to make a copy of an array item directly after the item selected to be copied (feature is off by default), fixing [#1261](https://github.com/rjsf-team/react-jsonschema-form/issues/1261) and [#1712](https://github.com/rjsf-team/react-jsonschema-form/issues/1712) - Fixed `package.json` to properly add required dependencies explicitly which were installed implicitly ## @rjsf/bootstrap-4 - Added support to make a copy of an array item directly after the item selected to be copied (feature is off by default), fixing [#1261](https://github.com/rjsf-team/react-jsonschema-form/issues/1261) and [#1712](https://github.com/rjsf-team/react-jsonschema-form/issues/1712) ## @rjsf/chakra-ui - Added support to make a copy of an array item directly after the item selected to be copied (feature is off by default), fixing [#1261](https://github.com/rjsf-team/react-jsonschema-form/issues/1261) and [#1712](https://github.com/rjsf-team/react-jsonschema-form/issues/1712) ## @rjsf/core - `Reset` function added for `Programmatically Reset` action. `Reset` function will reset form data and validation errors. Form data will set to default values. - Implemented a new `TimeWidget` that works for all themes - Added support to make a copy of an array item directly after the item selected to be copied (feature is off by default), fixing [#1261](https://github.com/rjsf-team/react-jsonschema-form/issues/1261) and [#1712](https://github.com/rjsf-team/react-jsonschema-form/issues/1712) - Also added the missing translation for the `InvalidObjectField` error in `ObjectField` - Added support for the handling of the global UiSchema options in `Form`, `ArrayField`, `ObjectField` and `SchemaField` ## @rjsf/fluent-ui - Fix `RadioWidget`'s onChange return value. - Added support to make a copy of an array item directly after the item selected to be copied (feature is off by default), fixing [#1261](https://github.com/rjsf-team/react-jsonschema-form/issues/1261) and [#1712](https://github.com/rjsf-team/react-jsonschema-form/issues/1712) ## @rjsf/material-ui - Updated `BaseInputTemplate` so that it shrinks a `time` formatted input - Added support to make a copy of an array item directly after the item selected to be copied (feature is off by default), fixing [#1261](https://github.com/rjsf-team/react-jsonschema-form/issues/1261) and [#1712](https://github.com/rjsf-team/react-jsonschema-form/issues/1712) ## @rjsf/mui - Updated `BaseInputTemplate` so that it shrinks a `time` formatted input - Added support to make a copy of an array item directly after the item selected to be copied (feature is off by default), fixing [#1261](https://github.com/rjsf-team/react-jsonschema-form/issues/1261) and [#1712](https://github.com/rjsf-team/react-jsonschema-form/issues/1712) ## @rjsf/semantic-ui - Added support to make a copy of an array item directly after the item selected to be copied (feature is off by default), fixing [#1261](https://github.com/rjsf-team/react-jsonschema-form/issues/1261) and [#1712](https://github.com/rjsf-team/react-jsonschema-form/issues/1712) ## @rjsf/utils - Updated the widget matrix used by `getWidget()` to support the `time` to `TimeWidget` mapping - Added a new `TranslatableString` enums `CopyButton` and `InvalidObjectField` that localizes the information extracted from `ObjectField` as markdown - Updated the `ArrayFieldTemplateItemType` to add support for copying array items - Refactored `UIOptionsBaseType` to extract the `addable`, `orderable`, `removable`, `label` and `duplicateKeySuffixSeparator` into a new `GlobalUISchemaOptions` type that adds `copyable` - Extended `UIOptionsBaseType` from `GlobalUISchemaOptions` - In `UiSchema` added a new optional `ui:globalOptions` prop of type `GlobalUISchemaOptions` and a new `UI_GLOBAL_OPTIONS_KEY` constant - Added a new optional prop `globalUiOptions` object of type `GlobalUISchemaOptions` in `Registry` as well as `CopyButton` in `ButtonTemplates` - Updated `getUiOptions()` and `getDisplayLabel()` (and its `SchemaUtilsType` counterpart) to take an optional `GlobalUISchemaOptions` parameter that is used to include global options into the returned `uiOptions` ## Dev / docs / playground - Updated the playground to add a `Programmatically Reset` button to clear states which are form data and validation errors. - Updated the `Date & time` example to show off the new `TimeWidget`. - Updated the `custom-widgets-fields` and `widgets` documentation to mention the new `TimeWidget` and its support for the `time` format. - Updated the documentation for `custom-templates`, `internals`, `uiSchema`, `utility-functions` and `arrays` for the new copy array feature as well as the global UI Schema options support - Updated the `arrays` example to add examples for the new `copyable` feature # 5.2.1 ## @rjsf/antd - Updated `BaseInputTemplate` to favor the special `onChangeOverride` provided by the `core` `FileWidget` - Removed explicit import of `React`, switching imports to explicit ones after fixing linting rules to not require `React` for JSX ## @rjsf/bootstrap-4 - Updated `BaseInputTemplate` to favor the special `onChangeOverride` provided by the `core` `FileWidget`, deleting the theme's `FileWidget`, fixing [#2095](https://github.com/rjsf-team/react-jsonschema-form/issues/2095) - Removed explicit import of `React`, switching imports to explicit ones after fixing linting rules to not require `React` for JSX ## @rjsf/chakra-ui - Updated `BaseInputTemplate` to favor the special `onChangeOverride` provided by the `core` `FileWidget` - Removed explicit import of `React`, switching imports to explicit ones after fixing linting rules to not require `React` for JSX ## @rjsf/core - Ensure that `name` is consistently passed to all `Widgets` through the field components, fixing [#1763](https://github.com/rjsf-team/react-jsonschema-form/issues/1763) - Updated the `FileWidget` to render the input using the `BaseInputTemplate` passing a special `onChangeOverride` function to deal with the file events, fixing [#2095](https://github.com/rjsf-team/react-jsonschema-form/issues/2095) - Removed explicit import of `React`, switching imports to explicit ones after fixing linting rules to not require `React` for JSX ## @rjsf/fluent-ui - Updated `BaseInputTemplate` to favor the special `onChangeOverride` provided by the `core` `FileWidget` - Removed explicit import of `React`, switching imports to explicit ones after fixing linting rules to not require `React` for JSX ## @rjsf/material-ui - Updated `BaseInputTemplate` to favor the special `onChangeOverride` provided by the `core` `FileWidget` and to support automatically shrinking the label for the `date`, `datetime-local` and `file` types - Removed the `DateWidget` and `DateTimeWidget` since they were only created to provide the label shrinking property - Removed explicit import of `React`, switching imports to explicit ones after fixing linting rules to not require `React` for JSX ## @rjsf/mui - Updated `BaseInputTemplate` to favor the special `onChangeOverride` provided by the `core` `FileWidget` and to support automatically shrinking the label for the `date`, `datetime-local` and `file` types - Removed the `DateWidget` and `DateTimeWidget` since they were only created to provide the label shrinking property - Removed explicit import of `React`, switching imports to explicit ones after fixing linting rules to not require `React` for JSX ## @rjsf/semantic-ui - Updated `BaseInputTemplate` to favor the special `onChangeOverride` provided by the `core` `FileWidget` - Removed explicit import of `React`, switching imports to explicit ones after fixing linting rules to not require `React` for JSX ## @rjsf/utils - Added the `name` prop to the `WidgetProps` type, fixing [#1763](https://github.com/rjsf-team/react-jsonschema-form/issues/1763) - Fixed `dataURItoBlob()` to handle the exception thrown by `atob()` when it is passed a malformed URL, returning an `blob` that indicates the error in the `type` prop - Fixed `replaceStringParameters()` to improve the replaceable parameters logic so that it works properly when a parameter also contains a replaceable parameter identifier - Removed explicit import of `React`, switching imports to explicit ones after fixing linting rules to not require `React` for JSX ## Dev / docs / playground - Updated the `custom-widgets-fields` documentation to ensure the new `WidgetProps` `name` prop is documented - Added Algolia DocSearch to the documentation site # 5.2.0 ## @rjsf/antd - Updated `ErrorList`, `IconButton`s, `WrapIfAdditionalTemplate` and `AltDateWidget` to use the new `translateString()` function to support localization ## @rjsf/bootstrap-4 - Updated `AddButton`, `ErrorList`, `IconButton`s and `WrapIfAdditionalTemplate` to use the new `translateString()` function to support localization ## @rjsf/chakra-ui - Updated `AddButton`, `ErrorList`, `IconButton`s, `WrapIfAdditionalTemplate` and `AltDateWidget` to use the new `translateString()` function to support localization ## @rjsf/core - Updated `ArrayField`, `BooleanField`, `MultiSchemaField`, `ObjectField`, `SchemaField`, `AddButton`, `IconButton`s, `ErrorList`, `WrapIfAdditionalTemplate` and `AltDateWidget` and `FileWidget` to use the new `translateString()` function to support localization - Also updated `Form` to take a new optional `translateString` prop and `getDefaultRegistry()` to set `translateString` to `englishStringTranslator()` ## @rjsf/fluent-ui - Updated `AddButton`, `ColorWidget`, `ErrorList`, `IconButton`s and `UpDownWidget` to use the new `translateString()` function to support localization ## @rjsf/material-ui - Updated `AddButton`, `ErrorList`, `IconButton`s and `WrapIfAdditionalTemplate` to use the new `translateString()` function to support localization - Patch `RangeWidget` to support `0` as range slider value, fixing [#3458](https://github.com/rjsf-team/react-jsonschema-form/issues/3458) ## @rjsf/mui - Updated `AddButton`, `ErrorList`, `IconButton`s and `WrapIfAdditionalTemplate` to use the new `translateString()` function to support localization - Patch `RangeWidget` to support `0` as range slider value, fixing [#3458](https://github.com/rjsf-team/react-jsonschema-form/issues/3458) ## @rjsf/semantic-ui - Updated `AddButton`, `ErrorList`, `IconButton`s and `WrapIfAdditionalTemplate` to use the new `translateString()` function to support localization ## Dev / docs / playground - Updated the `utility-functions` documentation for the `enums` and `englishStringTranslator()` & `replaceStringParameters()` functions - Updated the `form-props` documentation for the new, optional `translateString` prop on `Form` - Updated the playground's `numbers` example to use a range slider with a valid negative and `0` value # 5.1.0 ## @rjsf/bootstrap-4 - Updated the `AltDateTimeWidget` in `@rjsf/core` to add `className="list-inline-item"` to the `LI` tags ## @rjsf/chakra-ui - Fixed the `SelectWidget` to allow the proper display of the selected value, fixing [#3422](https://github.com/rjsf-team/react-jsonschema-form/issues/3422) ## @rjsf/core - Fixed `Form` to remove passing `excludeObjectChildren` to `getDefaultFormState()`, fixing [#3424](https://github.com/rjsf-team/react-jsonschema-form/issues/3424) and [#675](https://github.com/rjsf-team/react-jsonschema-form/issues/675) - Added new feature prop `focusOnFirstError`, that if true, will cause the first field with an error to be focused on when a submit has errors ## @rjsf/utils - Updated `computeDefaults()` to fix additionalProperties defaults not being propagated, fixing [#2593](https://github.com/rjsf-team/react-jsonschema-form/issues/2593) - Also made sure to properly deal with empty `anyOf`/`oneOf` lists by simply returning undefined - Add support for adding an empty object when that object is marked as required in a schema ## Dev / docs / playground - Updated the playground to add a control for `focusOnFirstError` and the `form-props` documentation for it as well # 5.0.2 ## @rjsf/utils - Added the `idPrefix`, `idSeparator` and `rawErrors` optional props to `FieldProps` since they were missing ## Dev / docs / playground - Migrated latest documentation to Docusaurus, which is deployed to GitHub Pages. - Updated readthedocs.io documentation site to guide users to the new docs site. - Updated links in documentation and package README files to point to new site. - Updated the `custom-widgets-field` documentation for the new `FieldProps` # 5.0.1 - Updated the `peerDependencies` in all packages to remove the `-beta.x` tags from the `@rjsf/xxxx` packages # 5.0.0 ## @rjsf/antd - Updated `CheckboxesWidget`, `RadioWidget` and `SelectWidget` to use indexes as values to support `enumOptions` with object values, fixing [#1494](https://github.com/rjsf-team/react-jsonschema-form/issues/1494) ## @rjsf/bootstrap-4 - Updated `CheckboxesWidget`, `RadioWidget` and `SelectWidget` to use indexes as values to support `enumOptions` with object values, fixing [#1494](https://github.com/rjsf-team/react-jsonschema-form/issues/1494) ## @rjsf/chakra-ui - Updated `CheckboxesWidget`, `RadioWidget` and `SelectWidget` to use indexes as values to support `enumOptions` with object values, fixing [#1494](https://github.com/rjsf-team/react-jsonschema-form/issues/1494) ## @rjsf/core - Updated `CheckboxesWidget`, `RadioWidget` and `SelectWidget` to use indexes as values to support `enumOptions` with object values, fixing [#1494](https://github.com/rjsf-team/react-jsonschema-form/issues/1494) ## @rjsf/fluent-ui - Updated `CheckboxesWidget`, `RadioWidget` and `SelectWidget` to use indexes as values to support `enumOptions` with object values, fixing [#1494](https://github.com/rjsf-team/react-jsonschema-form/issues/1494) ## @rjsf/material-ui - Updated `CheckboxesWidget`, `RadioWidget` and `SelectWidget` to use indexes as values to support `enumOptions` with object values, fixing [#1494](https://github.com/rjsf-team/react-jsonschema-form/issues/1494) ## @rjsf/mui - Updated `CheckboxesWidget`, `RadioWidget` and `SelectWidget` to use indexes as values to support `enumOptions` with object values, fixing [#1494](https://github.com/rjsf-team/react-jsonschema-form/issues/1494) ## @rjsf/semantic-ui - Updated `CheckboxesWidget`, `RadioWidget` and `SelectWidget` to use indexes as values to support `enumOptions` with object values, fixing [#1494](https://github.com/rjsf-team/react-jsonschema-form/issues/1494) ## @rjsf/utils - Added `enumOptionsIndexForValue()`, `enumOptionsIsSelected()`, `enumOptionsValueForIndex()` functions to support fixing [#1494](https://github.com/rjsf-team/react-jsonschema-form/issues/1494) - Updated `enumOptionsDeselectValue()`, `enumOptionsSelectValue()` and `optionId()` to use indexes instead of values - Deleted the `processSelectValue()` that was added in the beta and is no longer needed - Updated `getSchemaType()` to remove the inference of type from `anyOf`/`oneOf`, fixing [#3412](https://github.com/rjsf-team/react-jsonschema-form/issues/3412) ## Dev / docs / playground - Updated the `utility-functions` documentation for the new and updated methods mentioned above, as well as deleting the documentation for `processSelectValue()` - Updated the playground to add a new `Enum Objects` example to highlight the use of indexes for `enumOptions` - Updated `5.x migration guide` to document the change from values to indexes for the `enumOptions` based controls. # 5.0.0-beta.20 ## @rjsf/antd - Fixed `schema.examples` to deduplicate when `schema.default` exists in the examples, fixing [#3393](https://github.com/rjsf-team/react-jsonschema-form/issues/3393) ## @rjsf/bootstrap-4 - Fixed `schema.examples` to deduplicate when `schema.default` exists in the examples, fixing [#3393](https://github.com/rjsf-team/react-jsonschema-form/issues/3393) ## @rjsf/chakra-ui - Fixed `schema.examples` to deduplicate when `schema.default` exists in the examples, fixing [#3393](https://github.com/rjsf-team/react-jsonschema-form/issues/3393) ## @rjsf/core - Updated `MultiSchemaField` to pass `undefined` as the value to the widget when the `selectedOption` is -1, supporting `SelectWidget` implementations that allow the user to clear the selected value of the `anyOf`/`oneOf` field. - Updated `Form` to support receiving an optional `ref` prop. - Updated `Form` to restore providing empty root level objects, fixing [#3391](https://github.com/rjsf-team/react-jsonschema-form/issues/3391) - Fixed `schema.examples` to deduplicate when `schema.default` exists in the examples, fixing [#3393](https://github.com/rjsf-team/react-jsonschema-form/issues/3393) ## @rjsf/fluent-ui - Fixed `schema.examples` to deduplicate when `schema.default` exists in the examples, fixing [#3393](https://github.com/rjsf-team/react-jsonschema-form/issues/3393) ## @rjsf/material-ui - Fixed `schema.examples` to deduplicate when `schema.default` exists in the examples, fixing [#3393](https://github.com/rjsf-team/react-jsonschema-form/issues/3393) ## @rjsf/mui - Fixed `schema.examples` to deduplicate when `schema.default` exists in the examples, fixing [#3393](https://github.com/rjsf-team/react-jsonschema-form/issues/3393) ## @rjsf/semantic-ui - Fixed `schema.examples` to deduplicate when `schema.default` exists in the examples, fixing [#3393](https://github.com/rjsf-team/react-jsonschema-form/issues/3393) # 5.0.0-beta.19 ## @rjsf/core - Updated `MultiSchemaField` to cache options with refs in state and to output better labels for options without them when a title is available in either the `schema` or `uiSchema` - Improved fix for [#2691](https://github.com/rjsf-team/react-jsonschema-form/issues/2691) to remove the breaking change caused by the original fix [#2980](https://github.com/rjsf-team/react-jsonschema-form/issues/2980) as follows: - Added a new `ui:fieldReplacesAnyOrOneOf` flag to the `uiSchema` that when true will allow users to opt-out of the `anyOf`/`oneOf` wrapping of a custom field ## @rjsf/utils - Updated `toPathSchema()` to handle `oneOf`/`anyOf` by picking the closest option and generating the path for it, fixing [#2262](https://github.com/rjsf-team/react-jsonschema-form/issues/2262) - Added new `uiSchema` only flag `ui:fieldReplacesAnyOrOneOf` that, if true allows the user to opt-out of the `anyOf`/`oneOf` wrapping of a custom field ## Dev / docs / playground - Updated the `uiSchema` documentation for `ui:fieldReplacesAnyOrOneOf` # 5.0.0-beta.18 ## @rjsf/core - Updated `MultiSchemaField` to utilize the new `getClosestMatchingOption()` and `sanitizeDataForNewSchema()` functions, fixing the following issues: - [#3236](https://github.com/rjsf-team/react-jsonschema-form/issues/3236) - [#2978](https://github.com/rjsf-team/react-jsonschema-form/issues/2978) - [#2944](https://github.com/rjsf-team/react-jsonschema-form/issues/2944) - [#2202](https://github.com/rjsf-team/react-jsonschema-form/issues/2202) - [#2183](https://github.com/rjsf-team/react-jsonschema-form/issues/2183) - [#2086](https://github.com/rjsf-team/react-jsonschema-form/issues/2086) - [#2069](https://github.com/rjsf-team/react-jsonschema-form/issues/2069) - [#1661](https://github.com/rjsf-team/react-jsonschema-form/issues/1661) - And probably others - Updated `ObjectField` to deal with `additionalProperties` with `oneOf`/`anyOf`, fixing [#2538](https://github.com/rjsf-team/react-jsonschema-form/issues/2538) - Updated `Form`, `MultiSchemaField`, `ObjectField` and `SchemaField` to properly support making `formData` optional, fixing [#3305](https://github.com/rjsf-team/react-jsonschema-form/issues/3305) ## @rjsf/material-ui - Fix shrinking of `SelectWidget` label only if value is not empty, fixing [#3369](https://github.com/rjsf-team/react-jsonschema-form/issues/3369) ## @rjsf/mui - Fix shrinking of `SelectWidget` label only if value is not empty, fixing [#3369](https://github.com/rjsf-team/react-jsonschema-form/issues/3369) ## @rjsf/utils - Added new `getClosestMatchingOption()`, `getFirstMatchingOption()` and `sanitizeDataForNewSchema()` schema-based utility functions - Deprecated `getMatchingOption()` and updated all calls to it in other utility functions to use `getFirstMatchingOption()` - Updated `stubExistingAdditionalProperties()` to deal with `additionalProperties` with `oneOf`/`anyOf`, fixing [#2538](https://github.com/rjsf-team/react-jsonschema-form/issues/2538) - Updated `getSchemaType()` to grab the type of the first element of a `oneOf`/`anyOf`, fixing [#1654](https://github.com/rjsf-team/react-jsonschema-form/issues/1654) - Updated all props or function parameters of the generic type `T` to allow for them to be optionally provided, fixing [#3305](https://github.com/rjsf-team/react-jsonschema-form/issues/3305) - This was done in both the types file and the actual implementation code ## @rjsf/validator-ajv6 - Updated places where `formData` was required as a function argument to make it optional, fixing [#3305](https://github.com/rjsf-team/react-jsonschema-form/issues/3305) ## @rjsf/validator-ajv8 - Updated places where `formData` was required as a function argument to make it optional, fixing [#3305](https://github.com/rjsf-team/react-jsonschema-form/issues/3305) ## Dev / docs / playground - Updated the playground to `onFormDataEdited()` to only change the formData in the state if the `JSON.stringify()` of the old and new values are different, partially fixing [#3236](https://github.com/rjsf-team/react-jsonschema-form/issues/3236) - Updated the playground `npm start` command to always use the `--force` option to avoid issues where changes made to other packages weren't getting picked up due to `vite` caching - Updated the documentation for `utility-functions` and the `5.x upgrade guide` to add the new utility functions and to document the deprecation of `getMatchingOption()` - Also updated `utility-functions`, making all optional parameters without a default (as denoted by the syntax `[<parameter>]: <type>`) to add ` | undefined` onto the type to make it clear it supports passing in undefined as a value. # 5.0.0-beta.17 ## @rjsf/antd - Enable searching in the `SelectWidget` by the label that the user sees rather than by the value - Added support for new `style` prop on `FieldTemplate` and `WrapIfAdditionalTemplate` rendering them on the outermost wrapper, partially fixing [#1200](https://github.com/rjsf-team/react-jsonschema-form/issues/1200) - Updated all the user "input" controls to have an `aria-describedby` value built using the `ariaDescribedByIds()` function, partially fixing [#959](https://github.com/rjsf-team/react-jsonschema-form/issues/959) - Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions ## @rjsf/bootstrap-4 - Added support for new `style` prop on `FieldTemplate` and `WrapIfAdditionalTemplate` rendering them on the outermost wrapper, partially fixing [#1200](https://github.com/rjsf-team/react-jsonschema-form/issues/1200) - Updated `CheckboxesWidget` to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing [#2141](https://github.com/rjsf-team/react-jsonschema-form/issues/2141) - Updated all the user "input" controls to have an `aria-describedby` value built using the `ariaDescribedByIds()` function, partially fixing [#959](https://github.com/rjsf-team/react-jsonschema-form/issues/959) - Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions ## @rjsf/chakra-ui - Added support for new `style` prop on `FieldTemplate` and `WrapIfAdditionalTemplate` rendering them on the outermost wrapper, partially fixing [#1200](https://github.com/rjsf-team/react-jsonschema-form/issues/1200) - Updated `CheckboxesWidget` to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing [#2141](https://github.com/rjsf-team/react-jsonschema-form/issues/2141) - Updated all the user "input" controls to have an `aria-describedby` value built using the `ariaDescribedByIds()` function, partially fixing [#959](https://github.com/rjsf-team/react-jsonschema-form/issues/959) - Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions ## @rjsf/core - Updated `SchemaField` to handle the new `style` prop in the `uiSchema` similarly to `classNames`, passing it to the `FieldTemplate` and removing it from being passed down to children. - Also, added support for new `style` prop on `FieldTemplate` and `WrapIfAdditionalTemplate` rendering them on the outermost wrapper - This partially fixes [#1200](https://github.com/rjsf-team/react-jsonschema-form/issues/1200) - Updated `CheckboxesWidget` to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing [#2141](https://github.com/rjsf-team/react-jsonschema-form/issues/2141) - Updated all the user "input" controls to have an `aria-describedby` value built using the `ariaDescribedByIds()` function, partially fixing [#959](https://github.com/rjsf-team/react-jsonschema-form/issues/959) - Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions ## @rjsf/fluent-ui - Added support for new `style` prop on `FieldTemplate` rendering them on the outermost wrapper, partially fixing [#1200](https://github.com/rjsf-team/react-jsonschema-form/issues/1200) - Updated `CheckboxesWidget` to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing [#2141](https://github.com/rjsf-team/react-jsonschema-form/issues/2141) - Updated all the user "input" controls to have an `aria-describedby` value built using the `ariaDescribedByIds()` function, partially fixing [#959](https://github.com/rjsf-team/react-jsonschema-form/issues/959) - Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions ## @rjsf/material-ui - Updated `SelectWidget` to support additional `TextFieldProps` in a manner similar to how `BaseInputTemplate` does - Added support for new `style` prop on `FieldTemplate` and `WrapIfAdditionalTemplate` rendering them on the outermost wrapper, partially fixing [#1200](https://github.com/rjsf-team/react-jsonschema-form/issues/1200) - Updated `CheckboxesWidget` to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing [#2141](https://github.com/rjsf-team/react-jsonschema-form/issues/2141) - Updated all the user "input" controls to have an `aria-describedby` value built using the `ariaDescribedByIds()` function, partially fixing [#959](https://github.com/rjsf-team/react-jsonschema-form/issues/959) - Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions ## @rjsf/mui - Updated `SelectWidget` to support additional `TextFieldProps` in a manner similar to how `BaseInputTemplate` does - Added support for new `style` prop on `FieldTemplate` and `WrapIfAdditionalTemplate` rendering them on the outermost wrapper, partially fixing [#1200](https://github.com/rjsf-team/react-jsonschema-form/issues/1200) - Updated `CheckboxesWidget` to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing [#2141](https://github.com/rjsf-team/react-jsonschema-form/issues/2141) - Updated all the user "input" controls to have an `aria-describedby` value built using the `ariaDescribedByIds()` function, partially fixing [#959](https://github.com/rjsf-team/react-jsonschema-form/issues/959) - Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions ## @rjsf/semantic-ui - Added support for new `style` prop on `FieldTemplate` and `WrapIfAdditionalTemplate` rendering them on the outermost wrapper, partially fixing [#1200](https://github.com/rjsf-team/react-jsonschema-form/issues/1200) - Updated `CheckboxesWidget` to treat the value as an array when selecting/deselecting values and when determining the checked state - fixing [#2141](https://github.com/rjsf-team/react-jsonschema-form/issues/2141) - Updated all the user "input" controls to have an `aria-describedby` value built using the `ariaDescribedByIds()` function, partially fixing [#959](https://github.com/rjsf-team/react-jsonschema-form/issues/959) - Also updated the generation of ids for the title, description, error, examples, options and help blocks using the associated new id generation utilty functions ## @rjsf/utils - Updated the `FieldTemplateProps`, `WrapIfAdditionalTemplateProps` and `UIOptionsBaseType` types to add `style?: StyleHTMLAttributes<any>`, partially fixing [#1200](https://github.com/rjsf-team/react-jsonschema-form/issues/1200) - Added `enumOptionsDeselectValue()` and `enumOptionsSelectValue()` as a loose refactor of the duplicated functions in the various `CheckboxesWidget` implementations - Updated the `FieldTemplateProps`, `WrapIfAdditionalTemplateProps` and `UIOptionsBaseType` types to add `style?: StyleHTMLAttributes<any>`, partially fixing [#1200](https://github.com/rjsf-team/react-jsonschema-form/issues/1200) - Added new `ariaDescribedByIds()`, `descriptionId()`, `errorId()`, `examplesId()`, `helpId()` `optionId()` and `titleId()` id generator functions ## @rjsf/validator-ajv8 - Remove alias for ajv -> ajv8 in package.json. This fixes [#3215](https://github.com/rjsf-team/react-jsonschema-form/issues/3215). - Updated `AJV8Validator#transformRJSFValidationErrors` to return more human-readable error messages. The ajv8 `ErrorObject` message is enhanced by replacing the error message field with either the `uiSchema`'s `ui:title` field if one exists or the `parentSchema` title if one exists. Fixes [#3246](https://github.com/rjsf-team/react-jsonschema-form/issues/3246) ## Dev / docs / playground - In the playground, change Vite `preserveSymlinks` to `true`, which provides an alternative fix for [#3228](https://github.com/rjsf-team/react-jsonschema-form/issues/3228) since the prior fix caused [#3215](https://github.com/rjsf-team/react-jsonschema-form/issues/3215). - Updated the `custom-templates.md` and `uiSchema.md` to document the new `style` prop - Updated the `validation.md` documentation to describe the new `uiSchema` parameter passed to the `customValidate()` and `transformError()` functions - Updated the `utility-functions` documentation to add the new `enumOptionsDeselectValue()` and `enumOptionsSelectValue()` functions and to describe the new id generator functions - Updated the `5.x migration guide` documentation to describe potential breaking `id` changes # 5.0.0-beta.16 ## @rjsf/antd - Updated the usage of the `ButtonTemplates` to pass the new required `registry` prop, filtering it out in the actual implementations before spreading props, fixing - [#3314](https://github.com/rjsf-team/react-jsonschema-form/issues/3314) - Updated the test for the `CheckboxWidget` validating that the `schema.title` is passed as the label, fixing [#3302](https://github.com/rjsf-team/react-jsonschema-form/issues/3302) - Updated the theme to accept generic types, exporting `generateXXX` functions for `Form`, `Theme`, `Templates` and `Widgets` to support using the theme with user-specified type generics, partially fixing [#3072](https://github.com/rjsf-team/react-jsonschema-form/issues/3072) - Updated the use of the deprecated `withConfigConsumer` with the `ConfigConsumer` component instead, fixing [#3336](https://github.com/rjsf-team/react-jsonschema-form/issues/3336) ## @rjsf/bootstrap-4 - Updated the usage of the `ButtonTemplates` to pass the new required `registry` prop, filtering it out in the actual implementations before spreading props, fixing - [#3314](https://github.com/rjsf-team/react-jsonschema-form/issues/3314) - Updated `CheckboxWidget` to get the `required` state of the checkbox from the `schemaRequiresTrueValue()` utility function rather than the `required` prop, fixing [#3317](https://github.com/rjsf-team/react-jsonschema-form/issues/3317) - Updated the test for the `CheckboxWidget` validating that the `schema.title` is passed as the label, fixing [#3302](https://github.com/rjsf-team/react-jsonschema-form/issues/3302) - Updated the theme to accept generic types, exporting `generateXXX` functions for `Form`, `Theme`, `Templates` and `Widgets` to support using the theme with user-specified type generics, partially fixing [#3072](https://github.com/rjsf-team/react-jsonschema-form/issues/3072) ## @rjsf/chakra-ui - Updated the usage of the `ButtonTemplates` to pass the new required `registry` prop, filtering it out in the actual implementations before spreading props, fixing - [#3314](https://github.com/rjsf-team/react-jsonschema-form/issues/3314) - Updated `CheckboxWidget` to get the `required` state of the checkbox from the `schemaRequiresTrueValue()` utility function rather than the `required` prop, fixing [#3317](https://github.com/rjsf-team/react-jsonschema-form/issues/3317) - Updated the test for the `CheckboxWidget` validating that the `schema.title` is passed as the label, fixing [#3302](https://github.com/rjsf-team/react-jsonschema-form/issues/3302) - Updated the theme to accept generic types, exporting `generateXXX` functions for `Form`, `Theme`, `Templates` and `Widgets` to support using the theme with user-specified type generics, partially fixing [#3072](https://github.com/rjsf-team/react-jsonschema-form/issues/3072) ## @rjsf/core - Updated the usage of the `ButtonTemplates` to pass the new required `registry` prop, filtering it out in the actual implementations before spreading props, fixing - [#3314](https://github.com/rjsf-team/react-jsonschema-form/issues/3314) - Also, passed `registry` into the `SubmitButton` inside of the `Form` as part of this fix - Updated `ArrayField` to pass the new `totalItems` and `canAdd` props to the `ArrayFieldItemTemplate` instances, fixing [#3315](https://github.com/rjsf-team/react-jsonschema-form/issues/3315) - Also refactored the near duplicate logic for `onAddClick` and `onAddIndexClick` into a new `_handleAddClick()` function, fixing [#3316](https://github.com/rjsf-team/react-jsonschema-form/issues/3316) - Fix passing of generic types to a few helper methods, partially fixing [#3072](https://github.com/rjsf-team/react-jsonschema-form/issues/3072) - Updated the types for `ValidatorType`, `CustomValidator` and `ErrorTransformer` to add the new generics, as well as passing `uiSchema` to the `validateFormData()` call, partially fixing [#3170](https://github.com/rjsf-team/react-jsonschema-form/issues/3170) ## @rjsf/fluent-ui - Updated the usage of the `ButtonTemplates` to pass the new required `registry` prop, filtering it out in the actual implementations before spreading props, fixing - [#3314](https://github.com/rjsf-team/react-jsonschema-form/issues/3314) - Updated the test for the `CheckboxWidget` validating that the `schema.title` is passed as the label, fixing [#3302](https://github.com/rjsf-team/react-jsonschema-form/issues/3302) - Updated the theme to accept generic types, exporting `generateXXX` functions for `Form`, `Theme`, `Templates` and `Widgets` to support using the theme with user-specified type generics, partially fixing [#3072](https://github.com/rjsf-team/react-jsonschema-form/issues/3072) ## @rjsf/material-ui - Updated the usage of the `ButtonTemplates` to pass the new required `registry` prop, filtering it out in the actual implementations before spreading props, fixing - [#3314](https://github.com/rjsf-team/react-jsonschema-form/issues/3314) - Updated the test for the `CheckboxWidget` validating that the `schema.title` is passed as the label, fixing [#3302](https://github.com/rjsf-team/react-jsonschema-form/issues/3302) - Updated the theme to accept generic types, exporting `generateXXX` functions for `Form`, `Theme`, `Templates` and `Widgets` to support using the theme with user-specified type generics, partially fixing [#3072](https://github.com/rjsf-team/react-jsonschema-form/issues/3072) ## @rjsf/mui - Updated the usage of the `ButtonTemplates` to pass the new required `registry` prop, filtering it out in the actual implementations before spreading props, fixing - [#3314](https://github.com/rjsf-team/react-jsonschema-form/issues/3314) - Updated the test for the `CheckboxWidget` validating that the `schema.title` is passed as the label, fixing [#3302](https://github.com/rjsf-team/react-jsonschema-form/issues/3302) - Updated the theme to accept generic types, exporting `generateXXX` functions for `Form`, `Theme`, `Templates` and `Widgets` to support using the theme with user-specified type generics, partially fixing [#3072](https://github.com/rjsf-team/react-jsonschema-form/issues/3072) ## @rjsf/semantic-ui - Updated the usage of the `ButtonTemplates` to pass the new required `registry` prop, filtering it out in the actual implementations before spreading props, fixing - [#3314](https://github.com/rjsf-team/react-jsonschema-form/issues/3314) - Updated `CheckboxWidget` to get the `required` state of the checkbox from the `schemaRequiresTrueValue()` utility function rather than the `required` prop, fixing [#3317](https://github.com/rjsf-team/react-jsonschema-form/issues/3317) - Also fixed the `CheckboxWidget` missing label issue [#3302](https://github.com/rjsf-team/react-jsonschema-form/issues/3302) - Updated the test for the `CheckboxWidget` validating that the `schema.title` is passed as the label, fixing [#3302](https://github.com/rjsf-team/react-jsonschema-form/issues/3302) - Updated the theme to accept generic types, exporting `generateXXX` functions for `Form`, `Theme`, `Templates` and `Widgets` to support using the theme with user-specified type generics, partially fixing [#3072](https://github.com/rjsf-team/react-jsonschema-form/issues/3072) ## @rjsf/utils - Updated the `SubmitButtonProps` and `IconButtonProps` to add required `registry` prop, fixing - [#3314](https://github.com/rjsf-team/react-jsonschema-form/issues/3314) - Updated the `ArrayFieldTemplateItemType` to add the new `totalItems` and `canAdd` props, fixing [#3315](https://github.com/rjsf-team/react-jsonschema-form/issues/3315) - Updated the `CustomValidator` and `ErrorTransformer` types to take the full set of `T`, `S`, `F` generics in order to accept a new optional `uiSchema` property, partially fixing [#3170](https://github.com/rjsf-team/react-jsonschema-form/issues/3170) - Updated the `ValidatorType` to add the `F` generic to allow the `validateFormData()` function to take a new optional `uiSchema` parameter, partially fixing [#3170](https://github.com/rjsf-team/react-jsonschema-form/issues/3170) - Updated many of the schema-based utility functions to take the additional generics as well to fulfill the `ValidatorType` interface change ## @rjsf/validator-ajv6 - Updated the `customizeValidator` and `AJV6Validator` implementations to add the `S` and `F` generics, so that `validateFormData()` can accept a new optional `uiSchema` parameter that is passed to `transformErrors()` and `customValidate()`, partially fixing [#3170](https://github.com/rjsf-team/react-jsonschema-form/issues/3170) ## @rjsf/validator-ajv8 - Updated the `customizeValidator` and `AJV8Validator` implementations to add the `F` generic, so that `validateFormData()` can accept a new optional `uiSchema` parameter that is passed to `transformErrors()` and `customValidate()`, partially fixing [#3170](https://github.com/rjsf-team/react-jsonschema-form/issues/3170) ## Dev / docs / playground - Fixed the documentation for `ArrayFieldItemTemplate`, `SubmitButtonProps` and `IconButtonProps` as part of the fix for [#3314](https://github.com/rjsf-team/react-jsonschema-form/issues/3314) and [#3315](https://github.com/rjsf-team/react-jsonschema-form/issues/3315) - Updated the documentation in `form-props.md` for `children`, fixing [#3322](https://github.com/rjsf-team/react-jsonschema-form/issues/3322) - Added new `typescript.md` documentation to `Advanced Customization` describing how to use custom generics as part of the fix for [#3072](https://github.com/rjsf-team/react-jsonschema-form/issues/3072) - Updated the documentation in `utilty-functions.md` to add the new `F` generic to all the places which needed them # 5.0.0-beta.15 ## @rjsf/core - Pass the `schema` along to the `ArrayFieldItemTemplate` as part of the fix for [#3253](https://github.com/rjsf-team/react-jsonschema-form/issues/3253) - Tweak Babel configuration to emit ES5-compatible output files, fixing [#3240](https://github.com/rjsf-team/react-jsonschema-form/issues/3240) ## @rjsf/material-ui - Reverse the condition used in the `onChange` handler in the `RangeWidget`, fixing [#2161](https://github.com/rjsf-team/react-jsonschema-form/issues/2161) ## @rjsf/mui - Reverse the condition used in the `onChange` handler in the `RangeWidget`, fixing [#2161](https://github.com/rjsf-team/react-jsonschema-form/issues/2161) ## @rjsf/utils - Update the `ArrayFieldItemTemplate` to add `schema` as part of the fix for [#3253](https://github.com/rjsf-team/react-jsonschema-form/issues/3253) - Fix improper merging of nested `allOf`s ([#3025](https://github.com/rjsf-team/react-jsonschema-form/pull/3025), [#3227](https://github.com/rjsf-team/react-jsonschema-form/pull/3227)), fixing [#2923](https://github.com/rjsf-team/react-jsonschema-form/pull/2929) - Added a new `ErrorSchemaBuilder` class to enable building a proper `ErrorSchema` without crazy castings, fixing [#3239](https://github.com/rjsf-team/react-jsonschema-form/issues/3239) ## @rjsf/validator-ajv6 - Updated the validator to use the `ErrorSchemaBuilder` in the `toErrorSchema()` function to simplify the implementation ## @rjsf/validator-ajv8 - Updated the validator to use the `ErrorSchemaBuilder` in the `toErrorSchema()` function to simplify the implementation - Updated the validator to properly map missing required field errors in the `ErrorSchema`, fixing [#3260](https://github.com/rjsf-team/react-jsonschema-form/issues/3260) ## Dev / docs / playground - Fixed the documentation for `ArrayFieldItemTemplate` as part of the fix for [#3253](https://github.com/rjsf-team/react-jsonschema-form/issues/3253) - Added documentation for `ErrorSchemaBuilder` in the `utility-functions.md`, fixing [#3239](https://github.com/rjsf-team/react-jsonschema-form/issues/3239) # 5.0.0-beta.14 ## @rjsf/antd - No longer render extra 0 for array without errors, fixing [#3233](https://github.com/rjsf-team/react-jsonschema-form/issues/3233) ## @rjsf/core - Added `ref` definition to `ThemeProps` fixing [#2135](https://github.com/rjsf-team/react-jsonschema-form/issues/2135) - Updated the `onChange` handler in `Form` to use the new `preventDuplicates` mode of `mergeObjects()` when merging `extraErrors` when live validation is off, fixing [#3169](https://github.com/rjsf-team/react-jsonschema-form/issues/3169) ## @rjsf/material-ui - Fix RangeWidget missing htmlFor and schema.title [#3281](https://github.com/rjsf-team/react-jsonschema-form/pull/3281) ## @rjsf/mui - Fix RangeWidget missing htmlFor and schema.title [#3281](https://github.com/rjsf-team/react-jsonschema-form/pull/3281) ## @rjsf/utils - Updated `computedDefaults` (used by `getDefaultFormState`) to skip saving the computed default if it's an empty object unless `includeUndefinedValues` is truthy, fixing [#2150](https://github.com/rjsf-team/react-jsonschema-form/issues/2150) and [#2708](https://github.com/rjsf-team/react-jsonschema-form/issues/2708) - Expanded the `getDefaultFormState` util's `includeUndefinedValues` prop to accept a boolean or `"excludeObjectChildren"` if it does not want to include undefined values in nested objects - Updated `mergeObjects` to add new `preventDuplicates` mode when concatenating arrays so that only unique values from the source object array are copied to the destination object array - Fix `isObject` to correctly identify 'Date' as not an object, similar to 'File', thus preventing them from being merged with Object default values. ## Dev / docs / playground - Removed extraneous leading space on the examples in the validation documentation, fixing [#3282](https://github.com/rjsf-team/react-jsonschema-form/issues/3282) - Updated the documentation for `mergeObjects()` for the new `preventDuplicates` mode of concatenating arrays - Updated the documentation for unpkg releases to the correct name fixing the confusion found in [#3262](https://github.com/rjsf-team/react-jsonschema-form/issues/3262) # 5.0.0-beta.13 ## @rjsf/playground - Fix Vite development server [#3228](https://github.com/rjsf-team/react-jsonschema-form/issues/3228) ## @rjsf/validator-ajv8 - BREAKING CHANGE: Disable form data validation for invalid JSON Schemas. Use @rjsf/validator-ajv6 if you need to validate against invalid schemas. - Fix additionalProperties validation [#3213](https://github.com/rjsf-team/react-jsonschema-form/issues/3213) - Report all schema errors thrown by Ajv. Previously, we would only report errors thrown for a missing meta-schema. This behavior is unchanged for @rjsf/validator-ajv6. - Disable Ajv strict mode by default. - Add RJSF-specific additional properties keywords to Ajv to prevent errors from being reported in strict mode. - For JSON Schemas with `$id`s, use a pre-compiled Ajv validation function when available. - No longer fail to validate inner schemas with `$id`s, fixing [#2821](https://github.com/rjsf-team/react-jsonschema-form/issues/2181). # 5.0.0-beta.12 ## @rjsf/antd - Updated the tests to use the `@rjsf/validator-ajv8` fixing [#3110](https://github.com/rjsf-team/react-jsonschema-form/issues/3110) ## @rjsf/bootstrap - Updated the tests to use the `@rjsf/validator-ajv8` fixing [#3110](https://github.com/rjsf-team/react-jsonschema-form/issues/3110) ## @rjsf/chakra-ui - Automatically close single-choice Select widget on selection - Updated the tests to use the `@rjsf/validator-ajv8` fixing [#3110](https://github.com/rjsf-team/react-jsonschema-form/issues/3110) ## @rjsf/core - BREAKING CHANGE: ShowErrorList prop changed to support `false`, `top` or `bottom`; `true` is no longer a valid value as the default changed from `true` to `top` [#634](https://github.com/rjsf-team/react-jsonschema-form/issues/634) - Added the new generic, `S extends StrictRJSFSchema = RJSFSchema`, for `schema`/`rootSchema` to every component that needed it. - Fix omitExtraData with field names with dots #2643 - Updated the tests to use the `@rjsf/validator-ajv8` fixing [#3110](https://github.com/rjsf-team/react-jsonschema-form/issues/3110) - Changed the `F = any` generic to be `F extends FormContextType = any` to better support how `formContext` is defined and used, partially fixing [#3072](https://github.com/rjsf-team/react-jsonschema-form/issues/3072) ## @rjsf/fluent-ui - Updated the tests to use the `@rjsf/validator-ajv8` fixing [#3110](https://github.com/rjsf-team/react-jsonschema-form/issues/3110) ## @rjsf/material-ui - Updated the tests to use the `@rjsf/validator-ajv8` fixing [#3110](https://github.com/rjsf-team/react-jsonschema-form/issues/3110) ## @rjsf/mui - Updated the tests to use the `@rjsf/validator-ajv8` fixing [#3110](https://github.com/rjsf-team/react-jsonschema-form/issues/3110) ## @rjsf/semantic-ui - Updated the tests to use the `@rjsf/validator-ajv8` fixing [#3110](https://github.com/rjsf-team/react-jsonschema-form/issues/3110) ## @rjsf/utils - Beta-only potentially BREAKING CHANGE: Changed all types that directly or indirectly defined `schema`/`rootSchema` to add the generic `S extends StrictRJSFSchema = RJSFSchema` and use `S` as the type for them. - `StrictRJSFSchema` was added as the alias to `JSON7Schema` and `RJSFSchema` was modified to be `StrictRJSFSchema & GenericObjectType` - This new generic was added BEFORE the newly added `F = any` generic because it is assumed that more people will want to change the schema than the formContext types - This provides future support for the newer draft versions of the schema - Updated the `ValidatorType` interface to add a new `rawValidation()` method for use by the playground - Added the `FormContextType` alias to `GenericObjectType` and changing the `F = any` generic to be `F extends FormContextType = any` to better support how `formContext` is defined and used, partially fixing [#3072](https://github.com/rjsf-team/react-jsonschema-form/issues/3072) ## @rjsf/validator-ajv6 - Fixed a few type casts given the new expanded definition of the `RJSFSchema` type change - Deprecated this library in favor of the `@rjsf/validator-ajv8` - Refactored out the `rawValidation()` function for use by the playground ## @rjsf/validator-ajv8 - Updated the typing to add the new `S extends StrictRJSFSchema = RJSFSchema` generic and fixed up type casts - Added the `AjvClass` prop to the `CustomValidatorOptionsType` to support using the `Ajv2019` or `Ajv2020` class implementation instead of the default `Ajv` class; fixing [#3189](https://github.com/rjsf-team/react-jsonschema-form/issues/3189) - Refactored out the `rawValidation()` function for use by the playground ## Dev / docs / playground - Updated the `5.x upgrade guide` and `utility-functions.md` to document the new `StrictRJSFSchema`, the `S` generic and changing the `F` generic extend - Updated the `validation` guide to document the new `AjvClass` prop on `CustomValidatorOptionsType` and mentioning the deprecation of `@rjsf/validator-ajv6` - Updated the playground to add support for using the AJV 8 validator with the `draft-2019-09` and `draft-2020-12` schemas and to make the `AJV8` validator the default validator, marking `AJV6` as deprecated - Updated all the documentation to switch to Typescript notation where missing along with switching to using the `@rjsf/validator-ajv8` validator as the default - Added a way of doing a raw Ajv validation in the playground to determine whether an issue is with RJSF or Ajv # 5.0.0-beta.11 ## @rjsf/antd - Updated `FieldTemplate` to no longer render additional, unnecessary white space for fields that have empty `help` and `extra` information, fixing [#3147](https://github.com/rjsf-team/react-jsonschema-form/issues/3174) - Updated `ArrayFieldTemplate` to always render `ArrayFieldDescriptionTemplate` since that template deals with the optional `description` - Pass the `schema` into the `ArrayFieldDescriptionTemplate`, `ArrayFieldTitleTemplate`, `DescriptionFieldTemplate` and `TitleFieldTemplate`, fixing [#3176](https://github.com/rjsf-team/react-jsonschema-form/issues/3176) ## @rjsf/bootstrap-4 - Make label generation consistent with other themes by refactoring the code into the `FieldTemplate` instead of having the widgets implementing the label, fixing [#2007](https://github.com/rjsf-team/react-jsonschema-form/issues/2007) - Updated `ArrayFieldTemplate` to always render `ArrayFieldDescriptionTemplate` since that template deals with the optional `description` - Pass the `schema` into the `ArrayFieldDescriptionTemplate`, `ArrayFieldTitleTemplate`, `DescriptionFieldTemplate` and `TitleFieldTemplate`, fixing [#3176](https://github.com/rjsf-team/react-jsonschema-form/issues/3176) ## @rjsf/chakra-ui - Added support for `chakra-react-select` v4, fixing [#3152](https://github.com/rjsf-team/react-jsonschema-form/issues/3152) - In `SelectWidget` use `Select` from `chakra-react-select` for both single- and multiple-choice select - In `SelectWidget` multiple-choice select display label rather than value for selected items - Updated `ArrayFieldTemplate` to always render `ArrayFieldDescriptionTemplate` since that template deals with the optional `description` - Pass the `schema` into the `ArrayFieldDescriptionTemplate`, `ArrayFieldTitleTemplate`, `DescriptionFieldTemplate` and `TitleFieldTemplate`, fixing [#3176](https://github.com/rjsf-team/react-jsonschema-form/issues/3176) ## @rjsf/core - Extended `Form.onChange` to optionally return the `id` of the field that caused the change, fixing [#2768](https://github.com/rjsf-team/react-jsonschema-form/issues/2768) - Fixed a regression in earlier v5 beta versions where additional properties could not be added when `additionalProperties` was `true` ([#3719](https://github.com/rjsf-team/react-jsonschema-form/pull/3719)). - Fixed a regression in v5 beta version where BooleanField was altering readonly props ([#3188](https://github.com/rjsf-team/react-jsonschema-form/pull/3188). - Updated `ArrayFieldDescriptionTemplate` and `ArrayFieldTitleTemplate` to not render content when `ui:label` is false, fixing [#2535](https://github.com/rjsf-team/react-jsonschema-form/issues/2535) - Updated `ArrayFieldTemplate` to always render `ArrayFieldDescriptionTemplate` since that template deals with the optional `description` - Pass the `schema` into the `ArrayFieldDescriptionTemplate`, `ArrayFieldTitleTemplate`, `DescriptionFieldTemplate` and `TitleFieldTemplate`, fixing [#3176](https://github.com/rjsf-team/react-jsonschema-form/issues/3176) ## @rjsf/fluent-ui - Updated `ArrayFieldTemplate` to always render `ArrayFieldDescriptionTemplate` since that template deals with the optional `description` - Pass the `schema` into the `ArrayFieldDescriptionTemplate`, `ArrayFieldTitleTemplate`, `DescriptionFieldTemplate` and `TitleFieldTemplate`, fixing [#3176](https://github.com/rjsf-team/react-jsonschema-form/issues/3176) ## @rjsf/material-ui - Updated `ArrayFieldTemplate` to always render `ArrayFieldDescriptionTemplate` since that template deals with the optional `description` - Pass the `schema` into the `ArrayFieldDescriptionTemplate`, `ArrayFieldTitleTemplate`, `DescriptionFieldTemplate` and `TitleFieldTemplate`, fixing [#3176](https://github.com/rjsf-team/react-jsonschema-form/issues/3176) ## @rjsf/mui - Updated `ArrayFieldTemplate` to always render `ArrayFieldDescriptionTemplate` since that template deals with the optional `description` - Pass the `schema` into the `ArrayFieldDescriptionTemplate`, `ArrayFieldTitleTemplate`, `DescriptionFieldTemplate` and `TitleFieldTemplate`, fixing [#3176](https://github.com/rjsf-team/react-jsonschema-form/issues/3176) ## @rjsf/semantic-ui - Updated `ArrayFieldTemplate` to always render `ArrayFieldDescriptionTemplate` since that template deals with the optional `description` - Pass the `schema` into the `ArrayFieldDescriptionTemplate`, `ArrayFieldTitleTemplate`, `DescriptionFieldTemplate` and `TitleFieldTemplate`, fixing [#3176](https://github.com/rjsf-team/react-jsonschema-form/issues/3176) ## @rjsf/utils - Updated the `onChange` prop on `FieldProps` and `FieldTemplateProps` to add an optional `id` parameter to the callback. - Updated the `DescriptionFieldProps` and `TitleFieldProps` to add a new required `schema` prop. Also updated the `ArrayFieldDescriptionTemplate` and `ArrayFieldTitleTemplate` to make `description` and `title` optional while pulling all the other props but `id` from the associated type. ## Dev / docs / playground - Added an error boundary to prevent the entire app from crashing when an error is thrown by Form. See [#3164](https://github.com/rjsf-team/react-jsonschema-form/pull/3164) for closed issues. - Updated the playground to log the `id` of the field being changed on the `onChange` handler - Updated `form-props.md` to describe the new `id` parameter being returned by the `Form.onChange` handler - Updated `custom-templates.md` to add the new `schema` prop to the `ArrayFieldDescriptionTemplate`, `ArrayFieldTitleTemplate`, `DescriptionFieldTemplate` and `TitleFieldTemplate` documentation - Updated the `contributing.md` to describe setting up the `husky` precommit hooks for the first time `git clone` of the repo; Also added guidance for developing on underpowered computers; Finally discussed code-coverage requirements for some packages. # 5.0.0-beta.10 ## @rjsf/antd - Convert `WrapIfAdditional` to `WrapIfAdditionalTemplate` - Added `name` to the `input` components that were missing it to support `remix` - Fixed `CheckboxesWidget` and `RadioWidget` to have unique `id`s for each radio element by appending the `option.value`, protecting against non-arrays - Converted `antd` to Typescript, indirectly fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/3123) ## @rjsf/bootstrap - Convert `WrapIfAdditional` to `WrapIfAdditionalTemplate` - Added `name` to the `input` components that were missing it to support `remix` - Simplified the `CheckboxWidgets` code to eliminate a ternary in favor of a simple `inline={inline}` property since all the rest of the props were the same - Fixed `CheckboxesWidget` and `RadioWidget` to have unique `id`s for each radio element by appending the `option.value`, removing unnecessary casts to `any` and protecting against non-arrays - Fixed an issue where `CheckboxesWidget` incorrectly rendered inner `<form>` elements around each checkbox, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2355) ## @rjsf/chakra-ui - Convert `WrapIfAdditional` to `WrapIfAdditionalTemplate` - Added `name` to the `input` components that were missing it to support `remix` - Fixed `CheckboxesWidget` and `RadioWidget` to have unique `id`s for each radio element by appending the `option.value`, removing unnecessary casts to `any` and protecting against non-arrays ## @rjsf/core - Convert `WrapIfAdditional` to `WrapIfAdditionalTemplate` - Added `name` to the `input` components that were missing it to support `remix` - Fixed `CheckboxesWidget` and `RadioWidget` to have unique `id`s for each radio element by appending the `option.value` - Updated the `validate()` method on `Form` to make `schemaUtils` an optional third parameter rather than a required first parameter, making the signature backwards compatible with what was provided in previous versions. ## @rjsf/fluent-ui - Add stubbed `WrapIfAdditionalTemplate`. `additionalProperties` is currently not supported in `@rjsf/fluent-ui` (See [#2777](https://github.com/rjsf-team/react-jsonschema-form/issues/2777)). - Added `name` or `id` (for those fluent components not supporting name) to the `input` components that were missing it to support `remix` - Fixed `DateTimeWidget` to properly use `BaseInputTemplate` rather than `TextWidget` - Fixed `CheckboxesWidget` and `RadioWidget` to have unique `id`s for each radio element by appending the `option.value`, removing unnecessary casts and protecting against non-arrays, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2138) - Fixed `RadioWidget` so that it supports read-only and disabled states ## @rjsf/material-ui - Convert `WrapIfAdditional` to `WrapIfAdditionalTemplate` - Added `name` to the `input` components that were missing it to support `remix` - Fixed `CheckboxesWidget` and `RadioWidget` to have unique `id`s for each radio element by appending the `option.value`, removing unnecessary casts to `any` and protecting against non-arrays ## @rjsf/mui - Convert `WrapIfAdditional` to `WrapIfAdditionalTemplate` - Added `name` to the `input` components that were missing it to support `remix` - Fixed `CheckboxesWidget` and `RadioWidget` to have unique `id`s for each radio element by appending the `option.value`, removing unnecessary casts to `any` and protecting against non-arrays ## @rjsf/semantic-ui - Convert `WrapIfAdditional` to `WrapIfAdditionalTemplate` - Fixed `ArrayFieldTemplate` and `ObjectFieldTemplate`'s `AddButton` to show the non-labeled version. (https://github.com/rjsf-team/react-jsonschema-form/pull/3142) - Added `name` to the `input` components that were missing it to support `remix`, including fixing incorrect `name`s as `id`s in some situations - Fixed `CheckboxesWidget` and `RadioWidget` to have unique `id`s for each radio element by appending the `option.value`, protecting against non-arrays - Converted `semantic-ui` to Typescript ## @rjsf/utils - Added `WrapIfAdditionalTemplate` and `WrapIfAdditionalTemplateProps` to simplify theming and make it easier to override Field behavior for schemas with `additionalProperties`. # 5.0.0-beta.9 ## @rjsf/antd - Pass `uiSchema` appropriately to all of the `IconButton`s, `ArrayFieldItemTemplate` and `WrapIfAdditional` components, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/3130) ## @rjsf/bootstrap - Updated the `FieldErrorTemplate` to remove the explicit typing of the `error` to string to support the two options - Updated `Theme` to use the renamed `ThemeProps` from `@rjsf/core` - Pass `uiSchema` appropriately to all of the `IconButton`s, `ArrayFieldItemTemplate` and `WrapIfAdditional` components, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/3130) ## @rjsf/chakra-ui - Updated `Theme` to use the renamed `ThemeProps` from `@rjsf/core` - Pass `uiSchema` appropriately to all of the `IconButton`s, `ArrayFieldItemTemplate` and `WrapIfAdditional` components, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/3130) ## @rjsf/core - Updated the `FieldErrorTemplate` to remove the explicit typing of the `error` to string to support the two options - Implemented programmatic validation via new `validateForm()` method on `Form`, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2755, https://github.com/rjsf-team/react-jsonschema-form/issues/2552, https://github.com/rjsf-team/react-jsonschema-form/issues/2381, https://github.com/rjsf-team/react-jsonschema-form/issues/2343, https://github.com/rjsf-team/react-jsonschema-form/issues/1006, https://github.com/rjsf-team/react-jsonschema-form/issues/246) - Renamed `WithThemeProps` to `ThemeProps` to prevent another breaking-change by returning the type back to the name it had in version 4 - Pass `uiSchema` appropriately to all of the `IconButton`s, `ArrayFieldItemTemplate` and `WrapIfAdditional` components, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/3130) - Updated `ArrayField` to fall back to `SchemaField` if `ArraySchemaField` is not defined, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/3131) ## @rjsf/fluent-ui - Updated `Theme` to use the renamed `ThemeProps` from `@rjsf/core` - Pass `uiSchema` appropriately to all of the `IconButton`s and `ArrayFieldItemTemplate` components, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/3130) ## @rjsf/material-ui - Updated `Theme` to use the renamed `ThemeProps` from `@rjsf/core` - Pass `uiSchema` appropriately to all of the `IconButton`s, `ArrayFieldItemTemplate` and `WrapIfAdditional` components, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/3130) ## @rjsf/mui - Updated `Theme` to use the renamed `ThemeProps` from `@rjsf/core` - Pass `uiSchema` appropriately to all of the `IconButton`s, `ArrayFieldItemTemplate` and `WrapIfAdditional` components, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/3130) ## @rjsf/semantic-ui - Updated the `FieldErrorTemplate` to use the `children` variation of the `List.Item` that supports ReactElement - Pass `uiSchema` appropriately to all of the `IconButton`s, `ArrayFieldItemTemplate` and `WrapIfAdditional` components, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/3130) ## @rjsf/utils - Updated the `FieldErrorProps` type to make it support an array of string and ReactElement - Updated the `IconButtonProps` type to add `uiSchema`, adding the `<T = any, F = any>` generics to it and the associated `ButtonTemplates` in `TemplatesType` AND added `uiSchema` to `ArrayFieldTemplateItemType` as well, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/3130) ## Dev / docs / playground - Updated the `custom-templates.md` file to add the missing asterisk to the new `FieldErrorTemplate` and `FieldHelpTemplate` - Updated the playground to add a new button for programmatically validating a form - Also updated the `validation.md` documentation to describe how to programmatically validate a form - Fixed the `chakra-ui` custom `uiSchema` documentation to make it clear they work on a per-field basis, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2865) - Added `formElement` breaking-change documentation to the `5.x upgrade guide.md` - Replace Webpack with Vite - Updated documentation for `ArraySchemaField` to better represent the updated implementation, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/3131) # 5.0.0-beta.8 ## @rjsf/core - When rendering additional properties with title, use the key of the property instead of the title. # v5.0.0-beta.7 ## @rjsf/antd - Only show description when there really IS a description, fixes (https://github.com/rjsf-team/react-jsonschema-form/issues/2779) - Refactored the `FieldErrorTemplate` from inside of `FieldTemplate`; fixes (https://github.com/rjsf-team/react-jsonschema-form/issues/3104) ## @rjsf/bootstrap-4 - Refactored the `FieldErrorTemplate` and `FieldHelpTemplate` from inside of `FieldTemplate`; fixes (https://github.com/rjsf-team/react-jsonschema-form/issues/3104) ## @rjsf/chakra-ui - Refactored the `FieldErrorTemplate` and `FieldHelpTemplate` from inside of `FieldTemplate`; fixes (https://github.com/rjsf-team/react-jsonschema-form/issues/3104) ## @rjsf/core - Added new field `ArraySchemaField`, assigned to `SchemaField` by default, that is used by the `ArrayField` to render the `children` for each array field element - Refactored the internal `ErrorList` and `Help` components from inside of `SchemaField` to new templates: `FieldErrorTemplate` and `FieldHelpTemplate`; fixes (https://github.com/rjsf-team/react-jsonschema-form/issues/3104) ## @rjsf/material-ui - Refactored the `FieldErrorTemplate` and `FieldHelpTemplate` from inside of `FieldTemplate`; fixes (https://github.com/rjsf-team/react-jsonschema-form/issues/3104) ## @rjsf/mui - Refactored the `FieldErrorTemplate` and `FieldHelpTemplate` from inside of `FieldTemplate`; fixes (https://github.com/rjsf-team/react-jsonschema-form/issues/3104) ## @rjsf/semantic-ui - Converted `RawErrors` and `HelpField` into `FieldErrorTemplate` and `FieldHelpTemplate`, removing their explicit calls from `FieldTemplate`; fixes (https://github.com/rjsf-team/react-jsonschema-form/issues/3104) ## @rjsf/utils - Added new `FieldErrorProps` and `FieldHelpProps` types - Added new `FieldErrorTemplate` and `FieldHelpTemplate` to the `TemplatesType` ## Dev / docs / playground - Updated the `custom-templates.md` file to add documentation for the new `FieldErrorTemplate` and `FieldHelpTemplate` - Updated the `custom-widgets-fields.md` file to add documentation for the new `ArraySchemaField` field. # v5.0.0-beta.6 ## @rjsf/bootstrap-4 - Change custom attribute to bsPrefix by @WillowP, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2648) ## @rjsf/core - Added tests for the new `@rjsf/validator-ajv8` to the `validate_test.js` file to ensure the validation works with both validator implementations ## @rjsf/mui - Fixed the `README.md` to correct the package name in several places to match the actual package ## @rjsf/utils - Fixed the `README.md` to remove references to ajv6 validator, adding link to the `utility-functions.md` in the docs - Fixed the `README.md` to correct the package name in several places to match the actual package - Updated `getDefaultFormState()` so that oneOf and anyOf default values do not always use the first option when formData contains a better option, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2183) ## @rjsf/validator-ajv6 - Fixed the `README.md` to correct the package name in several places to match the actual package ## @rjsf/validator-ajv8 - Support for localization (L12n) on a customized validator using a `Localizer` function passed as a second parameter to `customizeValidator()`, fixing (https://github.com/rjsf-team/react-jsonschema-form/pull/846, and https://github.com/rjsf-team/react-jsonschema-form/issues/1195) - Fixed the `README.md` to correct the package name in several places to match the actual package ## Dev / docs / playground - Added two new validator selections, `AJV8` and `AJV8_es` to the list of available validators for the playground; Using the second one will translate error messages to spanish. - Updated the validation documentation to clarify the case of empty strings being stored as `null` in certain cases. # v5.0.0-beta.5 ## @rjsf/validator-ajv8 - Added the new Ajv 8 based validator so that it can get published on npm # v5.0.0-beta.4 ## @rjsf/semantic-ui - Switched `devDependencies` for React to 17.x and use `dts` to build and test the library (rather than `tsdx`) # v5.0.0-beta.3 ## @rjsf/core - Added a `requestSubmit()` call to the `Form.submit()` function, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2104, https://github.com/rjsf-team/react-jsonschema-form/issues/3023) - Added missing `children` property on the `FormProps` type for `Form` - Throw an error when the required `validator` prop has not been provided to the `Form` ## @rjsf/antd - Do not show errors if `extraErrors` has `[]` (https://github.com/rjsf-team/react-jsonschema-form/pull/2576). - Added support for `schema.examples` in the material ui theme fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2368, https://github.com/rjsf-team/react-jsonschema-form/issues/2557) ## @rjsf/fluent-ui - Added support for `schema.examples` in the material ui theme fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2368, https://github.com/rjsf-team/react-jsonschema-form/issues/2557) ## @rjsf/material-ui - Added support for `schema.examples` in the material ui theme fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2368, https://github.com/rjsf-team/react-jsonschema-form/issues/2557) ## @rjsf/material-ui - Added support for `schema.examples` in the material ui theme fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2368, https://github.com/rjsf-team/react-jsonschema-form/issues/2557) ## @rjsf/semantic-ui - Upgraded from the `1.x` to `2.x` version of `semantic-ui-react` - Added support for `schema.examples` in the material ui theme fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2368, https://github.com/rjsf-team/react-jsonschema-form/issues/2557) ## @rjsf/bootstrap-4 - Avoid importing the whole of `react-icons` (https://github.com/rjsf-team/react-jsonschema-form/pull/3046, https://github.com/react-icons/react-icons/issues/154) ## Dev / docs / playground - Fixed missing `playground` import error by adding `source-map-loader` - Fixed up the incorrectly formatted `5.x Migration Guide` - Added a `Programmatic Submit` button on the playground form to allow users to test the ability to programmatically submit a form - Regenerated the `package-lock.json` files using clean `node_modules` directories - Fixed issue with playground controls in top right corner not functioning properly due to missing validator # v5.0.0-beta.2 - Added peer dependencies to new `@rjsf/utils` library now that it is published on npm # v5.0.0-beta.1 ## Global changes across all themes: - Node 16 is now the default node engine for all packages, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2687) - Refactored all themes to use the new `@rjsf/utils` library functions and types - Refactored the individual theme forms to consolidate `templates` as part of the fix for https://github.com/rjsf-team/react-jsonschema-form/issues/2526 - All the work implementing the `BaseInputTemplate` should fix (https://github.com/rjsf-team/react-jsonschema-form/issues/2926, https://github.com/rjsf-team/react-jsonschema-form/issues/2889, https://github.com/rjsf-team/react-jsonschema-form/issues/2875, https://github.com/rjsf-team/react-jsonschema-form/issues/2223) - Also made the display of `title` and `description` consistent across themes, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2481, https://github.com/rjsf-team/react-jsonschema-form/issues/2363, https://github.com/rjsf-team/react-jsonschema-form/issues/2219) - This change also ensures that all templates are properly exported, resolving (https://github.com/rjsf-team/react-jsonschema-form/issues/2365) - Bumped most devDependencies to the latest versions where possible - Switched all repos `package.json` and `package-lock.json` files to be built and maintained by Node 16. - Adding button templates help to change text for buttons (https://github.com/rjsf-team/react-jsonschema-form/issues/2082, https://github.com/rjsf-team/react-jsonschema-form/issues/2357) ## @rjsf/utils - New package created by refactoring and converting to Typescript the `utils.js` file from `core` into independent functions. - Resolves (https://github.com/rjsf-team/react-jsonschema-form/issues/1655, https://github.com/rjsf-team/react-jsonschema-form/issues/2480, https://github.com/rjsf-team/react-jsonschema-form/issues/2341) - Updated `types` from `core` in `utils` to better match the implementation across all themes - Included adding a bunch of new types for existing and new features - The type updates should fix (https://github.com/rjsf-team/react-jsonschema-form/issues/2871, https://github.com/rjsf-team/react-jsonschema-form/issues/2673, https://github.com/rjsf-team/react-jsonschema-form/issues/2347, https://github.com/rjsf-team/react-jsonschema-form/issues/2186) - Clear errors on `formData` change when `liveOmit=true` when "additionalProperties: false" [issue 1507](https://github.com/rjsf-team/react-jsonschema-form/issues/1507) (https://github.com/rjsf-team/react-jsonschema-form/pull/2631) ## @rjsf/validator-ajv6 - New package created by refactoring and converting to Typescript the `validator.js` file from `core` into independent functions as well as a class that implements the new `ValidatorType` interface. - [#2693](https://github.com/rjsf-team/react-jsonschema-form/issues/2693). - Added support for customizing the options passed to the creation of the `ajv` instance. - A **BREAKING CHANGE** to `toErrorList()` was made so that it takes `fieldPath: string[]` rather than `fieldName='root'` as part of the fix to (https://github.com/rjsf-team/react-jsonschema-form/issues/1596) - The returned `errors` also now adds `property` from the `fieldPath` along with the proper path from the `property` to the `stack` message, making it consistent with the AJV errors. - Previously the `stack` attribute would say `root: error message`; now it says `. error message` - In addition, the extra information provided by AJV is no longer lost from the `errors` when merged with custom validation, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/1596). ## @rjsf/core - Converted core to Typescript (https://github.com/rjsf-team/react-jsonschema-form/issues/583) - `ui:emptyValue` now works with selects (https://github.com/rjsf-team/react-jsonschema-form/issues/1041) - Refactoring `utils.js` into the new `@rjsf/utils` fixes (https://github.com/rjsf-team/react-jsonschema-form/issues/2719) - **BREAKING CHANGE** Fix overriding core submit button className (https://github.com/rjsf-team/react-jsonschema-form/issues/2979) - Fix `ui:field` with anyOf or oneOf no longer rendered twice (#2890) - **BREAKING CHANGE** Fixed `anyOf` and `oneOf` getting incorrect, potentially duplicate ids when combined with array (https://github.com/rjsf-team/react-jsonschema-form/issues/2197) - `formContext` is now passed properly to `SchemaField`, fixes (https://github.com/rjsf-team/react-jsonschema-form/issues/2394, https://github.com/rjsf-team/react-jsonschema-form/issues/2274) - Added `ui:duplicateKeySuffixSeparator` to customize how duplicate object keys are renamed when using `additionalProperties`. - The `extraErrors` are now consistently appended onto the end of the schema validation-based `errors` information that is returned via the `onErrors()` callback when submit fails. - In addition, the extra information provided by AJV is no longer stripped from the `errors` during the merge process, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/1596). - Fixed id generation for `RadioWidget` to no longer use random numbers fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2461) - Correctly call the `onChange` handler in the new set of props if it changed, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/1708). - Fixed race condition for `onChange` when `formData` is controlled prop, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/513), ## @rjsf/antd - Fix esm build to use `@rollup/plugin-replace` to replace `antd/lib` and `rc-picker/lib` with `antd/es` and `rc-picker/es` respectively, fixing (https://github.com/rjsf-team/react-jsonschema-form/issues/2962) ## @rjsf/bootstrap-4 - Bootstrap-4 `withTheme` customizations should work properly now (https://github.com/rjsf-team/react-jsonschema-form/issues/2058) - `ArrayFieldTemplate` refactor seems to have fixed https://github.com/rjsf-team/react-jsonschema-form/issues/2775 - Fix issues with `SelectField` (https://github.com/rjsf-team/react-jsonschema-form/issues/2616, https://github.com/rjsf-team/react-jsonschema-form/issues/2875) ## @rjsf/chakra-ui - Properly handle the hidden field in this theme (https://github.com/rjsf-team/react-jsonschema-form/issues/2571) ## @rjsf/material-ui - The theme for Material UI version 5 (i.e. `@rjsf/mui`) was split out of the theme for version 4 (i.e. `@rjsf/material-ui`) to resolve the following issues: - [#2762](https://github.com/rjsf-team/react-jsonschema-form/issues/2762) - [#2858](https://github.com/rjsf-team/react-jsonschema-form/issues/2858) - [#2905](https://github.com/rjsf-team/react-jsonschema-form/issues/2905) - [#2945](https://github.com/rjsf-team/react-jsonschema-form/issues/2945) - [#2774](https://github.com/rjsf-team/react-jsonschema-form/issues/2774) - Material-UI TextWidget now respects `inputType` in uiSchema (https://github.com/rjsf-team/react-jsonschema-form/issues/2057) - Also respects `step` for `number` type (https://github.com/rjsf-team/react-jsonschema-form/issues/2488) - Material-UI UpDownWidget now support min/max/step (https://github.com/rjsf-team/react-jsonschema-form/issues/2022) - Properly handle the hidden field in this theme (https://github.com/rjsf-team/react-jsonschema-form/issues/2571) - Select properly accepts true or false (https://github.com/rjsf-team/react-jsonschema-form/issues/2326) ## @rjsf/mui - The theme for Material UI version 5 (i.e. `@rjsf/mui`) was split out of the theme for version 4 (i.e. `@rjsf/material-ui`) to resolve the following issues: - [#2762](https://github.com/rjsf-team/react-jsonschema-form/issues/2762) - [#2858](https://github.com/rjsf-team/react-jsonschema-form/issues/2858) - [#2905](https://github.com/rjsf-team/react-jsonschema-form/issues/2905) - [#2945](https://github.com/rjsf-team/react-jsonschema-form/issues/2945) - [#2774](https://github.com/rjsf-team/react-jsonschema-form/issues/2774) - Material-UI TextWidget now respects `inputType` in uiSchema (https://github.com/rjsf-team/react-jsonschema-form/issues/2057) - Also respects `step` for `number` type (https://github.com/rjsf-team/react-jsonschema-form/issues/2488) - Material-UI UpDownWidget now support min/max/step (https://github.com/rjsf-team/react-jsonschema-form/issues/2022) - Properly handle the hidden field in this theme (https://github.com/rjsf-team/react-jsonschema-form/issues/2571) ## @rjsf/semantic-ui - Fix missing error class on fields (https://github.com/rjsf-team/react-jsonschema-form/issues/2666) - Fixed the `main` definition in `semantic-ui` to fix (https://github.com/withastro/astro/issues/4357) - Properly handle the hidden field in this theme (https://github.com/rjsf-team/react-jsonschema-form/issues/2571) ## Dev / docs / playground - Demonstrate use of `ui:field` with `anyOf` (#2890) - Playground now uses webpack 5 - Corrected number field default (https://github.com/rjsf-team/react-jsonschema-form/issues/2358) # 4.2.1 - fix typo by @epicfaace in https://github.com/rjsf-team/react-jsonschema-form/pull/2854 - Build all packages with TypeScript, including core by @nickgros in https://github.com/rjsf-team/react-jsonschema-form/pull/2799 - fix(@rjsf/chakra-ui): append SubmitButton by @terrierscript in https://github.com/rjsf-team/react-jsonschema-form/pull/2860 - fix: Pass uiSchema to custom ArrayField by @bakajvo in https://github.com/rjsf-team/react-jsonschema-form/pull/2769 - fix(@rjsf-antd): Submit button type bug (#2867) by @sarpere in https://github.com/rjsf-team/react-jsonschema-form/pull/2869 - Docs: Clarify registry object structure and that it's passed down to custom widgets by @epicfaace in https://github.com/rjsf-team/react-jsonschema-form/pull/2886 - fix: allow UISchemaSubmitButtonOptions properties to be undefined by @maxpou in https://github.com/rjsf-team/react-jsonschema-form/pull/2876 - Create FUNDING.yml by @epicfaace in https://github.com/rjsf-team/react-jsonschema-form/pull/2866 - docs: fix schema dependencies link by @epicfaace in https://github.com/rjsf-team/react-jsonschema-form/pull/2885 - chore(deps): bump core-js-pure from 3.21.1 to 3.23.3 by @dependabot in https://github.com/rjsf-team/react-jsonschema-form/pull/2902 - chore(deps): bump minimist from 1.2.5 to 1.2.6 in /packages/fluent-ui by @dependabot in https://github.com/rjsf-team/react-jsonschema-form/pull/2805 - fix(@rjsf/bootstrap-4): Change custom attribute to bsPrefix by @WillowP in https://github.com/rjsf-team/react-jsonschema-form/pull/3049 # 4.2.0 ## @rjsf/core - Feature for ui:submitButtonOptions on the submit button for forms (https://github.com/rjsf-team/react-jsonschema-form/pull/2640) - Fix `ui:orderable` and `ui:removable` in arrays (#2797) - Fix for nested allOf blocks with multiple if/then/else statements failing to render correctly (https://github.com/rjsf-team/react-jsonschema-form/pull/2839) ## Dev / docs / playground - Enable ui options in playground, to demonstrate submit button options (https://github.com/rjsf-team/react-jsonschema-form/pull/2640) - Document the `material-ui` context and hook (#2757) ## @rjsf/material-ui - SubmitButton widget to use new ui:submitButtonOptions on the submit button for forms (https://github.com/rjsf-team/react-jsonschema-form/pull/2833) - Fixed bundler warning issue (#2762) by exporting a `@rjsf/material-ui/v4` and `@rjsf/material-ui/v5` sub-package - NOTE: `@rjsf/material-ui` was retained to avoid a breaking change, but using it will continue to cause bundler warnings - See the `README.md` for the `@rjsf/material-ui` package for updated usage information - Fixed (#2831) for `material-ui` by removing the `DefaultChildren` passed into the themes ## @rjsf/bootstrap-4 - SubmitButton widget to use new ui:submitButtonOptions on the submit button for forms (https://github.com/rjsf-team/react-jsonschema-form/pull/2640) ## @rjsf/semantic-ui - SubmitButton widget to use new ui:submitButtonOptions on the submit button for forms (https://github.com/rjsf-team/react-jsonschema-form/pull/2640) ## @rjsf/antd - SubmitButton widget to use new ui:submitButtonOptions on the submit button for forms (https://github.com/rjsf-team/react-jsonschema-form/pull/2640) ## @rjsf/fluent-ui - SubmitButton widget to use new ui:submitButtonOptions on the submit button for forms (https://github.com/rjsf-team/react-jsonschema-form/pull/2640) # v4.1.1 ## @rjsf/material-ui - Fix bloated bundle size by individually requiring all MUI components (#2754) - Add new `useMuiComponent()` hook as a shortcut for `useContext(MuiComponentContext)` ## @rjsf/semantic-ui - Added support for additionalProperties schema property (#2817) # v4.1.0 ## @rjsf/core - To improve performance, skip validating subschemas in oneOf / anyOf if formData is undefined (#2676) - Fixed the `toIdSchema()` typescript definition to add new `idSeparator` prop along with the spelling of `idPrefix` - Also passed the new `idSeparator` prop through to the `AnyOfField` and `OneOfField` inside of `SchemaField` - Updated `ArrayField` in `@rjsf/core` to pass `idSeparator` and `idPrefix` through to `SchemaField`, fixing a small bug - Added support for the new `ui:hideError` feature, which allows you to hide errors at a field level ## @rjsf/material-ui - Remove `console.log()` of the import error in `MaterialUIContext` and `Mui5Context` - Export the `MaterialComponentContext` (#2724) ## Dev / docs / playground - Added documentation for the new `ui:hideError` feature # v4.0.1 - Bumped the peer dependencies of `@rjsf/core` to `^4.0.0` for all of themes in `package.json` - Also, added tests to all themes to verify that the `tagName` prop works as expected ## @rjsf/core - Updated `Form` to support the `semantic-ui` and `material-ui` themes to allow them work when `tagName` is provided - Support if/then/else (#2700) ## @rjsf/material-ui - Fixed up the `Theme` and `Theme5` implementations to deal with a regression in which adding `tagName` caused the 2 themes to not work - Only `console.log()` the import error in `MaterialUIContext` and `Mui5Context` when not in `production` to eliminate tons of warnings for released code ## @rjsf/semantic-ui - Fixed up the `Theme` implementation to deal with a regression in which adding `tagName` caused the theme to not work # v4.0.0 ## @rjsf/core - Add React 17 as a supported peer-dependency - Introduce `idSeparator` prop to change the path separator used to generate field names (https://github.com/rjsf-team/react-jsonschema-form/pull/2628) - Array fields support custom widgets (previously, only multiple-choice arrays with `enums` or `uniqueItems` support it) (https://github.com/rjsf-team/react-jsonschema-form/pull/2697) ## @rjsf/material-ui - Added React 17 as an optional peer dependency - Minimum version of React required to use package is now React 16.3 - Bumped required minimum versions of `@material-ui/core` and `@material-ui/icons` to the latest (`4.12.0` and `4.11.1`) - New exports: `MuiForm4` and `Theme4` are aliases to the material-ui version 4 `MuiForm` and `Theme` - The Material-UI 4 theme will fallback to a form with a message indicating `@material-ui` is not available when one (or both) of the libraries are not installed - Added support for material-ui version 5 on top of React 17 - Requires React 17 so will need to upgrade project - Added `@mui/material`, `@mui/icons-material`, `@emotion/react` and `@emotion/styled` as optional peer dependencies - New exports: `MuiForm5` and `Theme5` support using the Material UI 5 libraries instead of version 4 - The Material-UI 5 theme will fallback to a form with a message indicating `@mui` is not available when one (or both) of the libraries are not installed ## @rjsf/chakra-ui - Added support for this new theme ## Dev / docs / playground - Upgraded playground to use React 17 - Differentiated the material-ui 4 and 5 themes - Added chakra-ui theme # v3.3.0 ## @rjsf/semantic-ui - "semantic-ui-react" dependency updated to v1.3.1 (https://github.com/rjsf-team/react-jsonschema-form/pull/2590) - fixed an issue where all semantic props overwritten when a single [semantic theme-specific prop](https://rjsf-team.github.io/react-jsonschema-form/docs/api-reference/themes/semantic-ui/uiSchema/) is passed in ([issue 2619](https://github.com/rjsf-team/react-jsonschema-form/issues/2619)) (https://github.com/rjsf-team/react-jsonschema-form/pull/2590) # v3.2.1 ## @rjsf/core - Don't crash when non-object formData is passed in to a schema item with additionalProperties (https://github.com/rjsf-team/react-jsonschema-form/pull/2595) - Upgrade jsonpointer to 5.0.0 to address security vulnerability (https://github.com/rjsf-team/react-jsonschema-form/pull/2599) - Feature for ui:submitButtonOptions on the submit button for forms (https://github.com/rjsf-team/react-jsonschema-form/pull/2640) # v3.2.0 ## @rjsf/core - Fix for clearing errors after updating and submitting form (https://github.com/rjsf-team/react-jsonschema-form/pull/2536) - bootstrap-4 TextWidget wrappers now pull from registry, add rootSchema to Registry, fix FieldProps.onFocus type to match WidgetProps (https://github.com/rjsf-team/react-jsonschema-form/pull/2519) - Added global `readonly` flag to the `Form` (https://github.com/rjsf-team/react-jsonschema-form/pull/2554) - Fix to allow changing `additionalProperties` to falsy values (https://github.com/rjsf-team/react-jsonschema-form/pull/2540) - Pass uiSchema to custom Boolean widget (https://github.com/rjsf-team/react-jsonschema-form/pull/2587 ## @rjsf/bootstrap-4 - bootstrap-4 TextWidget wrappers now pull from registry, add rootSchema to Registry, fix FieldProps.onFocus type to match WidgetProps (https://github.com/rjsf-team/react-jsonschema-form/pull/2519) ## @rjsf/fluent-ui - fluent-ui: Allow value of 0 in TextWidget (https://github.com/rjsf-team/react-jsonschema-form/pull/2497) ## Dev / docs / playground - Several dependency updates - Added global `readonly` flag to the `Form` (https://github.com/rjsf-team/react-jsonschema-form/pull/2554) - Enable source maps in playground, for development (https://github.com/rjsf-team/react-jsonschema-form/pull/2568) # v3.1.0 ## @rjsf/core - Properly assign label prop for MultiSelect ArrayField (https://github.com/rjsf-team/react-jsonschema-form/pull/2459) - Take into account implicitly defined types when rendering labels for fields (https://github.com/rjsf-team/react-jsonschema-form/pull/2502) ## @rjsf/antd - Add default Form export to @rjsf/antd (https://github.com/rjsf-team/react-jsonschema-form/pull/2514) ## @rjsf/fluent-ui - Make material-ui and fluent-ui pull TextWidget from the registry; remove registry prop from <div> in TextWidget (https://github.com/rjsf-team/react-jsonschema-form/pull/2515) ## @rjsf/material-ui - Make material-ui and fluent-ui pull TextWidget from the registry; remove registry prop from <div> in TextWidget (https://github.com/rjsf-team/react-jsonschema-form/pull/2515) ## @rjsf/semantic-ui - Use getDisplayLabel to properly show labels for widgets (https://github.com/rjsf-team/react-jsonschema-form/pull/2225) - Add submit button, email, url, date widgets (https://github.com/rjsf-team/react-jsonschema-form/pull/2224) ## Dev / docs / playground - Several dependency updates �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/CODE_OF_CONDUCT.md�����������������������������������������������������0000664�0000000�0000000�00000000717�14467713645�0020614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Community Participation Guidelines This repository is governed by Mozilla's code of conduct and etiquette guidelines. For more details, please read the [Mozilla Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/). <!-- ## Project Specific Etiquette In some cases, there will be additional project etiquette i.e.: (https://bugzilla.mozilla.org/page.cgi?id=etiquette.html). Please update for your project. --> �������������������������������������������������react-jsonschema-form-5.12.1/LICENSE.md�������������������������������������������������������������0000664�0000000�0000000�00000025303�14467713645�0017417�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/PULL_REQUEST_TEMPLATE.md�����������������������������������������������0000664�0000000�0000000�00000002062�14467713645�0021611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������### Reasons for making this change [Please describe them here] If this is related to existing tickets, include links to them as well. Use the syntax `fixes #[issue number]` (ex: `fixes #123`). If your PR is non-trivial and you'd like to schedule a synchronous review, please add it to the weekly meeting agenda: https://docs.google.com/document/d/12PjTvv21k6LIky6bNQVnsplMLLnmEuypTLQF8a-8Wss/edit ### Checklist - [ ] **I'm updating documentation** - [ ] I've [checked the rendering](https://rjsf-team.github.io/react-jsonschema-form/docs/contributing) of the Markdown text I've added - [ ] **I'm adding or updating code** - [ ] I've added and/or updated tests. I've run `npm run test:update` to update snapshots, if needed. - [ ] I've updated [docs](https://rjsf-team.github.io/react-jsonschema-form/docs) if needed - [ ] I've updated the [changelog](https://github.com/rjsf-team/react-jsonschema-form/blob/main/CHANGELOG.md) with a description of the PR - [ ] **I'm adding a new feature** - [ ] I've updated the playground with an example use of the feature ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/README.md��������������������������������������������������������������0000664�0000000�0000000�00000006144�14467713645�0017274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[![Build Status][build-shield]][build-url] [![Contributors][contributors-shield]][contributors-url] [![Apache 2.0 License][license-shield]][license-url] <p align="center"> <a href="https://github.com/rjsf-team/react-jsonschema-form"> <img src="https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/core/logo.png" alt="Logo" width="180" height="120"> </a> <h3 align="center">react-jsonschema-form</h3> <p align="center"> A simple <a href="http://facebook.github.io/react/">React</a> component capable of using <a href="http://json-schema.org/">JSON Schema</a> to declaratively build and customize web forms. <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/docs/"><strong>Explore the docs »</strong></a> <br /> <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/">View Playground</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Report Bug</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Request Feature</a> </p> </p> [![playground animation](https://i.imgur.com/M8ZCES5.gif)](https://rjsf-team.github.io/react-jsonschema-form/) ## Supported Themes - [Ant Design](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/antd) - [Bootstrap 3](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/core) - [Bootstrap 4](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/bootstrap-4) - [Chakra UI](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/chakra-ui) - [Fluent UI](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/fluent-ui) - [Material UI 4](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/material-ui) - [Material UI 5](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/mui) - [Semantic UI](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/semantic-ui) ## Documentation Read our [documentation](https://rjsf-team.github.io/react-jsonschema-form/docs), powered by [Docusaurus](https://docusaurus.io/). ## Live Playground A [live playground](https://rjsf-team.github.io/react-jsonschema-form/) is hosted on GitHub Pages. ## Contributing Read our [contributors' guide](https://rjsf-team.github.io/react-jsonschema-form/docs/contributing) to get started. ## Credits Testing powered by BrowserStack<br> <a target="_blank" href="https://www.browserstack.com/"><img width="200" src="https://user-images.githubusercontent.com/1689183/51487090-4ea04f80-1d57-11e9-9a91-79b7ef8d2013.png"></a> [build-shield]: https://github.com/rjsf-team/react-jsonschema-form/workflows/CI/badge.svg [build-url]: https://github.com/rjsf-team/react-jsonschema-form/actions [contributors-shield]: https://img.shields.io/github/contributors/rjsf-team/react-jsonschema-form.svg [contributors-url]: https://github.com/rjsf-team/react-jsonschema-form/graphs/contributors [license-shield]: https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat-square [license-url]: https://choosealicense.com/licenses/apache-2.0/ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/SECURITY.md������������������������������������������������������������0000664�0000000�0000000�00000001224�14467713645�0017600�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Security Policy ## Supported Versions | Version | Supported | | ------- | ------------------ | | 5.x | :white_check_mark: | | 4.x | :warning: | | 3.x | :x: | | 2.x | :x: | | 1.x | :x: | ## Reporting a Vulnerability If you believe you have found a vulnerability, please send an email to [aramaswamis@gmail.com](mailto:aramaswamis@gmail.com) with information on what the vulnerability is, steps to reproduce, and estimated severity. We will strive to get back to you as soon as possible. Please do not open issues for anything you suspect may be a security vulnerability. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/babel.config.js��������������������������������������������������������0000664�0000000�0000000�00000000502�14467713645�0020654�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������module.exports = { presets: [ ['@babel/preset-env', { targets: { node: 'current' } }], [ '@babel/preset-react', { runtime: 'automatic', }, ], '@babel/preset-typescript', ], plugins: ['@babel/plugin-proposal-class-properties', '@babel/plugin-proposal-optional-chaining'], }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/docs/������������������������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0016740�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/docs/README.md���������������������������������������������������������0000664�0000000�0000000�00000000145�14467713645�0020217�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# docs (DEPRECATED) [The react-jsonschema-form documentation has been moved here](../packages/docs) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/docs/index.md����������������������������������������������������������0000664�0000000�0000000�00000000466�14467713645�0020377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# react-jsonschema-form The react-jsonschema-form docs have been moved [here](https://rjsf-team.github.io/react-jsonschema-form/docs). We are in the process of migrating our versioned documentation. For documentation prior to version 5.0.0, please select the version in the bottom-right corner of this page. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/lerna.json�������������������������������������������������������������0000664�0000000�0000000�00000000237�14467713645�0020006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "packages": ["packages/*"], "version": "5.12.1", "$schema": "node_modules/lerna/schemas/lerna-schema.json", "useNx": true, "useWorkspaces": true } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/mkdocs.yml�������������������������������������������������������������0000664�0000000�0000000�00000000304�14467713645�0020010�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������site_name: react-jsonschema-form documentation docs_dir: docs theme: readthedocs extra_javascript: [main.js] nav: - Introduction: index.md markdown_extensions: - toc: permalink: true ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/netlify-ignore.sh������������������������������������������������������0000775�0000000�0000000�00000000057�14467713645�0021304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������git log -1 --pretty=%an | grep dependabot[bot] ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/netlify.toml�����������������������������������������������������������0000664�0000000�0000000�00000000373�14467713645�0020362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[build] base = "" publish = "packages/playground/dist" command = "npm run build-serial" # Ignore dependabot PRs for deploy previews ignore = "./netlify-ignore.sh" [build.environment] VITE_SHOW_NETLIFY_BADGE = "true" NODE_VERSION = "18" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/nx.json����������������������������������������������������������������0000664�0000000�0000000�00000001220�14467713645�0017323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": "nx/presets/npm.json", "tasksRunnerOptions": { "default": { "runner": "@nrwl/nx-cloud", "options": { "cacheableOperations": [ "build", "cs-check", "cs-format", "lint", "test", "test:update", "test:watch", "precommit", "publish-to-npm", "test-coverage", "build:lib", "prepublishOnly", "build:dist", "publish-to-gh-pages" ] } } }, "targetDefaults": { "build": { "dependsOn": ["^build"] } }, "affected": { "defaultBase": "main" } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/package-lock.json������������������������������������������������������0000664�0000000�0000000�00005053536�14467713645�0021245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "react-jsonschema-form", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "react-jsonschema-form", "license": "Apache-2.0", "workspaces": [ "packages/antd", "packages/bootstrap-4", "packages/chakra-ui", "packages/core", "packages/docs", "packages/fluent-ui", "packages/material-ui", "packages/mui", "packages/playground", "packages/semantic-ui", "packages/utils", "packages/validator-ajv6", "packages/validator-ajv8" ], "devDependencies": { "@babel/eslint-parser": "^7.22.9", "@nrwl/nx-cloud": "^15.3.5", "@types/estree": "^1.0.1", "@types/node": "^18.17.3", "@types/prettier": "^2.7.3", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "cross-env": "^7.0.3", "eslint": "^8.46.0", "eslint-plugin-import": "^2.28.0", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-react": "^7.33.1", "eslint-plugin-react-hooks": "^4.6.0", "husky": "^8.0.3", "jest-environment-jsdom": "^27.5.1", "lerna": "^6.6.2", "lint-staged": "^13.2.3", "nx": "^15.9.2", "prettier": "^2.8.8", "rimraf": "^5.0.1", "ts-jest": "^29.1.1", "tslib": "^2.6.1", "typescript": "^4.9.5" }, "engines": { "node": ">=14" } }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@algolia/autocomplete-core": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", "dependencies": { "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", "@algolia/autocomplete-shared": "1.9.3" } }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", "dependencies": { "@algolia/autocomplete-shared": "1.9.3" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-preset-algolia": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", "dependencies": { "@algolia/autocomplete-shared": "1.9.3" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "node_modules/@algolia/autocomplete-shared": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", "algoliasearch": ">= 4.9.1 < 6" } }, "node_modules/@algolia/cache-browser-local-storage": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.19.1.tgz", "integrity": "sha512-FYAZWcGsFTTaSAwj9Std8UML3Bu8dyWDncM7Ls8g+58UOe4XYdlgzXWbrIgjaguP63pCCbMoExKr61B+ztK3tw==", "dependencies": { "@algolia/cache-common": "4.19.1" } }, "node_modules/@algolia/cache-common": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.19.1.tgz", "integrity": "sha512-XGghi3l0qA38HiqdoUY+wvGyBsGvKZ6U3vTiMBT4hArhP3fOGLXpIINgMiiGjTe4FVlTa5a/7Zf2bwlIHfRqqg==" }, "node_modules/@algolia/cache-in-memory": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.19.1.tgz", "integrity": "sha512-+PDWL+XALGvIginigzu8oU6eWw+o76Z8zHbBovWYcrtWOEtinbl7a7UTt3x3lthv+wNuFr/YD1Gf+B+A9V8n5w==", "dependencies": { "@algolia/cache-common": "4.19.1" } }, "node_modules/@algolia/client-account": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.19.1.tgz", "integrity": "sha512-Oy0ritA2k7AMxQ2JwNpfaEcgXEDgeyKu0V7E7xt/ZJRdXfEpZcwp9TOg4TJHC7Ia62gIeT2Y/ynzsxccPw92GA==", "dependencies": { "@algolia/client-common": "4.19.1", "@algolia/client-search": "4.19.1", "@algolia/transporter": "4.19.1" } }, "node_modules/@algolia/client-analytics": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.19.1.tgz", "integrity": "sha512-5QCq2zmgdZLIQhHqwl55ZvKVpLM3DNWjFI4T+bHr3rGu23ew2bLO4YtyxaZeChmDb85jUdPDouDlCumGfk6wOg==", "dependencies": { "@algolia/client-common": "4.19.1", "@algolia/client-search": "4.19.1", "@algolia/requester-common": "4.19.1", "@algolia/transporter": "4.19.1" } }, "node_modules/@algolia/client-common": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.19.1.tgz", "integrity": "sha512-3kAIVqTcPrjfS389KQvKzliC559x+BDRxtWamVJt8IVp7LGnjq+aVAXg4Xogkur1MUrScTZ59/AaUd5EdpyXgA==", "dependencies": { "@algolia/requester-common": "4.19.1", "@algolia/transporter": "4.19.1" } }, "node_modules/@algolia/client-personalization": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.19.1.tgz", "integrity": "sha512-8CWz4/H5FA+krm9HMw2HUQenizC/DxUtsI5oYC0Jxxyce1vsr8cb1aEiSJArQT6IzMynrERif1RVWLac1m36xw==", "dependencies": { "@algolia/client-common": "4.19.1", "@algolia/requester-common": "4.19.1", "@algolia/transporter": "4.19.1" } }, "node_modules/@algolia/client-search": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.19.1.tgz", "integrity": "sha512-mBecfMFS4N+yK/p0ZbK53vrZbL6OtWMk8YmnOv1i0LXx4pelY8TFhqKoTit3NPVPwoSNN0vdSN9dTu1xr1XOVw==", "dependencies": { "@algolia/client-common": "4.19.1", "@algolia/requester-common": "4.19.1", "@algolia/transporter": "4.19.1" } }, "node_modules/@algolia/events": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "node_modules/@algolia/logger-common": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.19.1.tgz", "integrity": "sha512-i6pLPZW/+/YXKis8gpmSiNk1lOmYCmRI6+x6d2Qk1OdfvX051nRVdalRbEcVTpSQX6FQAoyeaui0cUfLYW5Elw==" }, "node_modules/@algolia/logger-console": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.19.1.tgz", "integrity": "sha512-jj72k9GKb9W0c7TyC3cuZtTr0CngLBLmc8trzZlXdfvQiigpUdvTi1KoWIb2ZMcRBG7Tl8hSb81zEY3zI2RlXg==", "dependencies": { "@algolia/logger-common": "4.19.1" } }, "node_modules/@algolia/requester-browser-xhr": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.19.1.tgz", "integrity": "sha512-09K/+t7lptsweRTueHnSnmPqIxbHMowejAkn9XIcJMLdseS3zl8ObnS5GWea86mu3vy4+8H+ZBKkUN82Zsq/zg==", "dependencies": { "@algolia/requester-common": "4.19.1" } }, "node_modules/@algolia/requester-common": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.19.1.tgz", "integrity": "sha512-BisRkcWVxrDzF1YPhAckmi2CFYK+jdMT60q10d7z3PX+w6fPPukxHRnZwooiTUrzFe50UBmLItGizWHP5bDzVQ==" }, "node_modules/@algolia/requester-node-http": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.19.1.tgz", "integrity": "sha512-6DK52DHviBHTG2BK/Vv2GIlEw7i+vxm7ypZW0Z7vybGCNDeWzADx+/TmxjkES2h15+FZOqVf/Ja677gePsVItA==", "dependencies": { "@algolia/requester-common": "4.19.1" } }, "node_modules/@algolia/transporter": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.19.1.tgz", "integrity": "sha512-nkpvPWbpuzxo1flEYqNIbGz7xhfhGOKGAZS7tzC+TELgEmi7z99qRyTfNSUlW7LZmB3ACdnqAo+9A9KFBENviQ==", "dependencies": { "@algolia/cache-common": "4.19.1", "@algolia/logger-common": "4.19.1", "@algolia/requester-common": "4.19.1" } }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@ant-design/colors": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz", "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", "dependencies": { "@ctrl/tinycolor": "^3.4.0" } }, "node_modules/@ant-design/icons": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-4.8.0.tgz", "integrity": "sha512-T89P2jG2vM7OJ0IfGx2+9FC5sQjtTzRSz+mCHTXkFn/ELZc2YpfStmYHmqzq2Jx55J0F7+O6i5/ZKFSVNWCKNg==", "dependencies": { "@ant-design/colors": "^6.0.0", "@ant-design/icons-svg": "^4.2.1", "@babel/runtime": "^7.11.2", "classnames": "^2.2.6", "rc-util": "^5.9.4" }, "engines": { "node": ">=8" }, "peerDependencies": { "react": ">=16.0.0", "react-dom": ">=16.0.0" } }, "node_modules/@ant-design/icons-svg": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.3.0.tgz", "integrity": "sha512-WOgvdH/1Wl8Z7VXigRbCa5djO14zxrNTzvrAQzhWiBQtEKT0uTc8K1ltjKZ8U1gPn/wXhMA8/jE39SJl0WNxSg==" }, "node_modules/@ant-design/react-slick": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-1.0.2.tgz", "integrity": "sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==", "dependencies": { "@babel/runtime": "^7.10.4", "classnames": "^2.2.5", "json2mq": "^0.2.0", "resize-observer-polyfill": "^1.5.1", "throttle-debounce": "^5.0.0" }, "peerDependencies": { "react": ">=16.9.0" } }, "node_modules/@babel/cli": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.22.9.tgz", "integrity": "sha512-nb2O7AThqRo7/E53EGiuAkMaRbb7J5Qp3RvN+dmua1U+kydm0oznkhqbTEG15yk26G/C3yL6OdZjzgl+DMXVVA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", "commander": "^4.0.1", "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "glob": "^7.2.0", "make-dir": "^2.1.0", "slash": "^2.0.0" }, "bin": { "babel": "bin/babel.js", "babel-external-helpers": "bin/babel-external-helpers.js" }, "engines": { "node": ">=6.9.0" }, "optionalDependencies": { "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", "chokidar": "^3.4.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/code-frame": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "dependencies": { "@babel/highlight": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.22.5", "@babel/generator": "^7.22.9", "@babel/helper-compilation-targets": "^7.22.9", "@babel/helper-module-transforms": "^7.22.9", "@babel/helpers": "^7.22.6", "@babel/parser": "^7.22.7", "@babel/template": "^7.22.5", "@babel/traverse": "^7.22.8", "@babel/types": "^7.22.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.2", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/babel" } }, "node_modules/@babel/eslint-parser": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.9.tgz", "integrity": "sha512-xdMkt39/nviO/4vpVdrEYPwXCsYIXSSAr6mC7WQsNIlGnuxKyKE7GZjalcnbSWiC4OXGNNN3UQPeHfjSC6sTDA==", "dev": true, "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", "semver": "^6.3.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || >=14.0.0" }, "peerDependencies": { "@babel/core": ">=7.11.0", "eslint": "^7.5.0 || ^8.0.0" } }, "node_modules/@babel/generator": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", "dependencies": { "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", "dependencies": { "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.5", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-member-expression-to-functions": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dependencies": { "@babel/template": "^7.22.5", "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-module-imports": "^7.22.5", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-wrap-function": "^7.22.9" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-replace-supers": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-member-expression-to-functions": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dependencies": { "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", "dependencies": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.5", "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", "dependencies": { "@babel/template": "^7.22.5", "@babel/traverse": "^7.22.6", "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { "version": "7.22.7", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", "bin": { "parser": "bin/babel-parser.js" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.22.5", "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.22.5.tgz", "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-transform-optional-chaining": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dev": true, "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.20.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-async-generators": { "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-bigint": { "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==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-class-properties": { "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-class-static-block": { "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" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-dynamic-import": { "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-import-meta": { "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-json-strings": { "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-numeric-separator": { "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-chaining": { "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "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" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-top-level-await": { "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" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-generator-functions": { "version": "7.22.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-remap-async-to-generator": "^7.22.5", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "dependencies": { "@babel/helper-module-imports": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-remap-async-to-generator": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-class-properties": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-class-static-block": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "node_modules/@babel/plugin-transform-classes": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/template": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", "dependencies": { "@babel/helper-compilation-targets": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-json-strings": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-literals": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", "dependencies": { "@babel/helper-module-transforms": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", "dependencies": { "@babel/helper-module-transforms": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", "dependencies": { "@babel/helper-module-transforms": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-rest-spread": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", "dependencies": { "@babel/compat-data": "^7.22.5", "@babel/helper-compilation-targets": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-optional-chaining": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-private-methods": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-private-property-in-object": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-constant-elements": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz", "integrity": "sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-jsx": "^7.22.5", "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-jsx-source": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "regenerator-transform": "^0.15.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-runtime": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz", "integrity": "sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==", "dependencies": { "@babel/helper-module-imports": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "babel-plugin-polyfill-corejs2": "^0.4.4", "babel-plugin-polyfill-corejs3": "^0.8.2", "babel-plugin-polyfill-regenerator": "^0.5.1", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-spread": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typescript": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.9.tgz", "integrity": "sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.9", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-typescript": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/preset-env": { "version": "7.22.9", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", "dependencies": { "@babel/compat-data": "^7.22.9", "@babel/helper-compilation-targets": "^7.22.9", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@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.22.5", "@babel/plugin-syntax-import-attributes": "^7.22.5", "@babel/plugin-syntax-import-meta": "^7.10.4", "@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-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.22.5", "@babel/plugin-transform-async-generator-functions": "^7.22.7", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", "@babel/plugin-transform-block-scoping": "^7.22.5", "@babel/plugin-transform-class-properties": "^7.22.5", "@babel/plugin-transform-class-static-block": "^7.22.5", "@babel/plugin-transform-classes": "^7.22.6", "@babel/plugin-transform-computed-properties": "^7.22.5", "@babel/plugin-transform-destructuring": "^7.22.5", "@babel/plugin-transform-dotall-regex": "^7.22.5", "@babel/plugin-transform-duplicate-keys": "^7.22.5", "@babel/plugin-transform-dynamic-import": "^7.22.5", "@babel/plugin-transform-exponentiation-operator": "^7.22.5", "@babel/plugin-transform-export-namespace-from": "^7.22.5", "@babel/plugin-transform-for-of": "^7.22.5", "@babel/plugin-transform-function-name": "^7.22.5", "@babel/plugin-transform-json-strings": "^7.22.5", "@babel/plugin-transform-literals": "^7.22.5", "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", "@babel/plugin-transform-member-expression-literals": "^7.22.5", "@babel/plugin-transform-modules-amd": "^7.22.5", "@babel/plugin-transform-modules-commonjs": "^7.22.5", "@babel/plugin-transform-modules-systemjs": "^7.22.5", "@babel/plugin-transform-modules-umd": "^7.22.5", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.22.5", "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", "@babel/plugin-transform-numeric-separator": "^7.22.5", "@babel/plugin-transform-object-rest-spread": "^7.22.5", "@babel/plugin-transform-object-super": "^7.22.5", "@babel/plugin-transform-optional-catch-binding": "^7.22.5", "@babel/plugin-transform-optional-chaining": "^7.22.6", "@babel/plugin-transform-parameters": "^7.22.5", "@babel/plugin-transform-private-methods": "^7.22.5", "@babel/plugin-transform-private-property-in-object": "^7.22.5", "@babel/plugin-transform-property-literals": "^7.22.5", "@babel/plugin-transform-regenerator": "^7.22.5", "@babel/plugin-transform-reserved-words": "^7.22.5", "@babel/plugin-transform-shorthand-properties": "^7.22.5", "@babel/plugin-transform-spread": "^7.22.5", "@babel/plugin-transform-sticky-regex": "^7.22.5", "@babel/plugin-transform-template-literals": "^7.22.5", "@babel/plugin-transform-typeof-symbol": "^7.22.5", "@babel/plugin-transform-unicode-escapes": "^7.22.5", "@babel/plugin-transform-unicode-property-regex": "^7.22.5", "@babel/plugin-transform-unicode-regex": "^7.22.5", "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "^0.1.5", "@babel/types": "^7.22.5", "babel-plugin-polyfill-corejs2": "^0.4.4", "babel-plugin-polyfill-corejs3": "^0.8.2", "babel-plugin-polyfill-regenerator": "^0.5.1", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-modules": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", "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" }, "peerDependencies": { "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/preset-react": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.5", "@babel/plugin-transform-react-display-name": "^7.22.5", "@babel/plugin-transform-react-jsx": "^7.22.5", "@babel/plugin-transform-react-jsx-development": "^7.22.5", "@babel/plugin-transform-react-pure-annotations": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-typescript": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-option": "^7.22.5", "@babel/plugin-syntax-jsx": "^7.22.5", "@babel/plugin-transform-modules-commonjs": "^7.22.5", "@babel/plugin-transform-typescript": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/register": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", "pirates": "^4.0.5", "source-map-support": "^0.5.16" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "dependencies": { "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.6.tgz", "integrity": "sha512-M+37LLIRBTEVjktoJjbw4KVhupF0U/3PYUCbBwgAd9k17hoKhRu1n935QiG7Tuxv0LJOMrb2vuKEeYUlv0iyiw==", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dependencies": { "@babel/code-frame": "^7.22.5", "@babel/parser": "^7.22.5", "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { "version": "7.22.8", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", "dependencies": { "@babel/code-frame": "^7.22.5", "@babel/generator": "^7.22.7", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "@babel/parser": "^7.22.7", "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, "node_modules/@chakra-ui/accordion": { "version": "1.4.12", "resolved": "https://registry.npmjs.org/@chakra-ui/accordion/-/accordion-1.4.12.tgz", "integrity": "sha512-Hq5Ie1SI4mmtgBmeuir+f7QKgopZEyQOojgufo/A20keMSy5Yk9WZjkXNQgvoIRl1AsoziIPUlubQOtkBZjjbA==", "dependencies": { "@chakra-ui/descendant": "2.1.4", "@chakra-ui/hooks": "1.9.1", "@chakra-ui/icon": "2.0.5", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/transition": "1.4.8", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "framer-motion": "3.x || 4.x || 5.x || 6.x", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/alert": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/@chakra-ui/alert/-/alert-1.3.7.tgz", "integrity": "sha512-fFpJYBpHOIK/BX4BVl/xafYiDBUW+Bq/gUYDOo4iAiO4vHgxo74oa+yOwSRNlNjAgIX7pi2ridsYQALKyWyxxQ==", "dependencies": { "@chakra-ui/icon": "2.0.5", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/anatomy": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-1.3.0.tgz", "integrity": "sha512-vj/lcHkCuq/dtbl69DkNsftZTnrGEegB90ODs1B6rxw8iVMdDSYkthPPFAkqzNs4ppv1y2IBjELuVzpeta1OHA==", "dependencies": { "@chakra-ui/theme-tools": "^1.3.6" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0" } }, "node_modules/@chakra-ui/avatar": { "version": "1.3.11", "resolved": "https://registry.npmjs.org/@chakra-ui/avatar/-/avatar-1.3.11.tgz", "integrity": "sha512-/eRRK48Er92/QWAfWhxsJIN0gZBBvk+ew4Hglo+pxt3/NDnfTF2yPE7ZN29Dl6daPNbyTOpoksMwaU2mZIqLgA==", "dependencies": { "@chakra-ui/image": "1.1.10", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/breadcrumb": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/@chakra-ui/breadcrumb/-/breadcrumb-1.3.6.tgz", "integrity": "sha512-iXxienBO6RUnJEcDvyDWyRt+mzPyl7/b6N8i0vrjGKGLpgtayJFvIdo33tFcvx6TCy7V9hiE3HTtZnNomWdR6A==", "dependencies": { "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/button": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/@chakra-ui/button/-/button-1.5.10.tgz", "integrity": "sha512-IVEOrleI378CckAa3b3CTUHMPZRfpy6LPwn1Mx3sMpHEkDTKu8zJcjgEvCE8HYzNC1KbwBsa1PfTgk40ui6EtA==", "dependencies": { "@chakra-ui/hooks": "1.9.1", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/spinner": "1.2.6", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/checkbox": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@chakra-ui/checkbox/-/checkbox-1.7.1.tgz", "integrity": "sha512-9Io97yn8OrdaIynCj+3Z/neJV7lTT1MtcdYh3BKMd7WnoJDkRY/GlBM8zsdgC5Wvm+ZQ1M83t0YvRPKLLzusyA==", "dependencies": { "@chakra-ui/form-control": "1.6.0", "@chakra-ui/hooks": "1.9.1", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4", "@chakra-ui/visually-hidden": "1.1.6" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "framer-motion": "3.x || 4.x || 5.x || 6.x", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/clickable": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@chakra-ui/clickable/-/clickable-1.2.6.tgz", "integrity": "sha512-89SsrQwwwAadcl/bN8nZqqaaVhVNFdBXqQnxVy1t07DL5ezubmNb5SgFh9LDznkm9YYPQhaGr3W6HFro7iAHMg==", "dependencies": { "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "react": ">=16.8.6" } }, "node_modules/@chakra-ui/close-button": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@chakra-ui/close-button/-/close-button-1.2.7.tgz", "integrity": "sha512-cYTxfgrIlPU4IZm1sehZXxx/TNQBk9c3LBPvTpywEM8GVRGINh4YLq8WiMaPtO+TDNBnKoWS/jS4IHnR+abADw==", "dependencies": { "@chakra-ui/icon": "2.0.5", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/color-mode": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/@chakra-ui/color-mode/-/color-mode-1.4.8.tgz", "integrity": "sha512-iD4126DVQi06c6ARr3uf3R2rtEu8aBVjW8rhZ+lOsV26Z15iCJA7OAut13Xu06fcZvgjSB/ChDy6Sx9sV9UjHA==", "dependencies": { "@chakra-ui/hooks": "1.9.1", "@chakra-ui/react-env": "1.1.6", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "react": ">=16.8.6" } }, "node_modules/@chakra-ui/control-box": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@chakra-ui/control-box/-/control-box-1.1.6.tgz", "integrity": "sha512-EUcq5f854puG6ZA6wAWl4107OPl8+bj4MMHJCa48BB0qec0U8HCEtxQGnFwJmaYLalIAjMfHuY3OwO2A3Hi9hA==", "dependencies": { "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/counter": { "version": "1.2.10", "resolved": "https://registry.npmjs.org/@chakra-ui/counter/-/counter-1.2.10.tgz", "integrity": "sha512-HQd09IuJ4z8M8vWajH+99jBWWSHDesQZmnN95jUg3HKOuNleLaipf2JFdrqbO1uWQyHobn2PM6u+B+JCAh2nig==", "dependencies": { "@chakra-ui/hooks": "1.9.1", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "react": ">=16.8.6" } }, "node_modules/@chakra-ui/css-reset": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@chakra-ui/css-reset/-/css-reset-1.1.3.tgz", "integrity": "sha512-AgfrE7bRTJvNi/4zIfacI/kBHmHmHEIeQtHwCvk/0qM9V2gK1VM3ctYlnibf7BTh17F/UszweOGRb1lHSPfWjw==", "peerDependencies": { "@emotion/react": ">=10.0.35", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/descendant": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@chakra-ui/descendant/-/descendant-2.1.4.tgz", "integrity": "sha512-k1olHM6c0fcI5fQxO9rqg9rxripcfHMEm2LkORgH0CAzFn/U75CxCw5ec0IMedNWCdiv740enVfnfhBAoSg7gw==", "dependencies": { "@chakra-ui/react-utils": "^1.2.3" }, "peerDependencies": { "react": ">=16.8.6" } }, "node_modules/@chakra-ui/editable": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/@chakra-ui/editable/-/editable-1.4.2.tgz", "integrity": "sha512-a5zKghA/IvG7yNkmFl7Z9c2KSsf0FgyijsNPTg/4S5jxyz13QJtoTg40tdpyaxHHCT25y25iUcV4FYCj6Jd01w==", "dependencies": { "@chakra-ui/hooks": "1.9.1", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/focus-lock": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@chakra-ui/focus-lock/-/focus-lock-1.2.6.tgz", "integrity": "sha512-ZJNE1oNdUM1aGWuCJ+bxFa/d3EwxzfMWzTKzSvKDK50GWoUQQ10xFTT9nY/yFpkcwhBvx1KavxKf44mIhIbSog==", "dependencies": { "@chakra-ui/utils": "1.10.4", "react-focus-lock": "2.5.2" }, "peerDependencies": { "react": ">=16.8.6" } }, "node_modules/@chakra-ui/form-control": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@chakra-ui/form-control/-/form-control-1.6.0.tgz", "integrity": "sha512-MtUE98aocP2QTgvyyJ/ABuG33mhT3Ox56phKreG3HzbUKByMwrbQSm1QcAgyYdqSZ9eKB2tXx+qgGNh+avAfDA==", "dependencies": { "@chakra-ui/hooks": "1.9.1", "@chakra-ui/icon": "2.0.5", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/hooks": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@chakra-ui/hooks/-/hooks-1.9.1.tgz", "integrity": "sha512-SEeh1alDKzrP9gMLWMnXOUDBQDKF/URL6iTmkumTn6vhawWNla6sPrcMyoCzWdMzwUhZp3QNtCKbUm7dxBXvPw==", "dependencies": { "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4", "compute-scroll-into-view": "1.0.14", "copy-to-clipboard": "3.3.1" }, "peerDependencies": { "react": ">=16.8.6" } }, "node_modules/@chakra-ui/icon": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@chakra-ui/icon/-/icon-2.0.5.tgz", "integrity": "sha512-ZrqRvCCIxGr4qFd/r1pmtd9tobRmv8KAxV7ygFoc/t4vOSKTcVIjhE12gsI3FzgvXM15ZFVwsxa1zodwgo5neQ==", "dependencies": { "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/icons": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@chakra-ui/icons/-/icons-1.1.7.tgz", "integrity": "sha512-YIHxey/B4M2PyFASlHXtAWFyW+tsAtGAChOJ8dsM2kpu1MbVUqm/6nMI1KIFd7Te5IWuNYA75rAHBdLI0Yu61A==", "dependencies": { "@chakra-ui/icon": "2.0.5", "@types/react": "^17.0.15" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/image": { "version": "1.1.10", "resolved": "https://registry.npmjs.org/@chakra-ui/image/-/image-1.1.10.tgz", "integrity": "sha512-PJZmhQ/R1PgdMyCRjALfoyq1FNh/WzMAw70sliHLtLcb9hBXniwQZuckYfUshCkUoFBj/ow9d4byn9Culdpk7Q==", "dependencies": { "@chakra-ui/hooks": "1.9.1", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/input": { "version": "1.4.6", "resolved": "https://registry.npmjs.org/@chakra-ui/input/-/input-1.4.6.tgz", "integrity": "sha512-Ljy/NbOhh9cNQxKTWQRsT4aQiXs2vVya+Cj5NpMAz08NFFjPZovsTawhI7m6ejT5Vsh76QYjh2rOLLI3fWqQQw==", "dependencies": { "@chakra-ui/form-control": "1.6.0", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/layout": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/@chakra-ui/layout/-/layout-1.8.0.tgz", "integrity": "sha512-GJtEKez5AZu0XQTxI6a6jwA/hMDD36pP0HBxBOGuHP1hWCebDzMjraiMfWiP9w7hKERFE4j19kocHxIXyocfJA==", "dependencies": { "@chakra-ui/icon": "2.0.5", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/live-region": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@chakra-ui/live-region/-/live-region-1.1.6.tgz", "integrity": "sha512-9gPQHXf7oW0jXyT5R/JzyDMfJ3hF70TqhN8bRH4fMyfNr2Se+SjztMBqCrv5FS5rPjcCeua+e0eArpoB3ROuWQ==", "dependencies": { "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "react": ">=16.8.6" } }, "node_modules/@chakra-ui/media-query": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@chakra-ui/media-query/-/media-query-2.0.4.tgz", "integrity": "sha512-kn6g/L0IFFUHz2v4yiCsBnhg9jUeA7525Z+AWl+BPtvryi7i9J+AJ27y/QAge7vUGy4dwDeFyxOZTs2oZ9/BsA==", "dependencies": { "@chakra-ui/react-env": "1.1.6", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "@chakra-ui/theme": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/menu": { "version": "1.8.12", "resolved": "https://registry.npmjs.org/@chakra-ui/menu/-/menu-1.8.12.tgz", "integrity": "sha512-X/s74VpOReQW4fCRCa21f/VOe++cXhPz2Sh7pDjtaT3zmKjrJwgk1Kw75cXfNX1eke6hf/wZ0FGweu/m7+C3OA==", "dependencies": { "@chakra-ui/clickable": "1.2.6", "@chakra-ui/descendant": "2.1.4", "@chakra-ui/hooks": "1.9.1", "@chakra-ui/popper": "2.4.3", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/transition": "1.4.8", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "framer-motion": "3.x || 4.x || 5.x || 6.x", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/modal": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@chakra-ui/modal/-/modal-1.11.1.tgz", "integrity": "sha512-B2BBDonHb04vbPLAWgko1JYBwgW8ZNSLyhTJK+rbrCsRSgazuLTcwq4hdyJqrYNWtaQEfSwpAXqJ7joMZdv59A==", "dependencies": { "@chakra-ui/close-button": "1.2.7", "@chakra-ui/focus-lock": "1.2.6", "@chakra-ui/hooks": "1.9.1", "@chakra-ui/portal": "1.3.10", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/transition": "1.4.8", "@chakra-ui/utils": "1.10.4", "aria-hidden": "^1.1.1", "react-remove-scroll": "2.4.1" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "framer-motion": "3.x || 4.x || 5.x || 6.x", "react": ">=16.8.6", "react-dom": ">=16.8.6" } }, "node_modules/@chakra-ui/number-input": { "version": "1.4.7", "resolved": "https://registry.npmjs.org/@chakra-ui/number-input/-/number-input-1.4.7.tgz", "integrity": "sha512-LorGRZFMipom8vCUEbLi2s7bTHF2Fgiu766W0jTbzMje+8Z1ZoRQunH9OZWQnxnWQTUfUM2KBW8KwToYh1ojfQ==", "dependencies": { "@chakra-ui/counter": "1.2.10", "@chakra-ui/form-control": "1.6.0", "@chakra-ui/hooks": "1.9.1", "@chakra-ui/icon": "2.0.5", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/pin-input": { "version": "1.7.11", "resolved": "https://registry.npmjs.org/@chakra-ui/pin-input/-/pin-input-1.7.11.tgz", "integrity": "sha512-KEVUHHmf22tI4F7gzT9+pHi4E5cCyte6M8rPEwRyuc0kUBo48D8OW0BJwGdESWOKMkQXazDF6Zg4o32t45tbpg==", "dependencies": { "@chakra-ui/descendant": "2.1.4", "@chakra-ui/hooks": "1.9.1", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/popover": { "version": "1.11.9", "resolved": "https://registry.npmjs.org/@chakra-ui/popover/-/popover-1.11.9.tgz", "integrity": "sha512-hJ1/Lwukox3ryTN7W1wnj+nE44utfLwQYvfUSdatt5dznnh8k0P6Wx7Hmjm1cYffRavBhqzwua/QZDWjJN9N0g==", "dependencies": { "@chakra-ui/close-button": "1.2.7", "@chakra-ui/hooks": "1.9.1", "@chakra-ui/popper": "2.4.3", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "framer-motion": "3.x || 4.x || 5.x || 6.x", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/popper": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/@chakra-ui/popper/-/popper-2.4.3.tgz", "integrity": "sha512-TGzFnYt3mtIVkIejtYIAu4Ka9DaYLzMR4NgcqI6EtaTvgK7Xep+6RTiY/Nq+ZT3l/eaNUwqHRFoNrDUg1XYasA==", "dependencies": { "@chakra-ui/react-utils": "1.2.3", "@popperjs/core": "^2.9.3" }, "peerDependencies": { "react": ">=16.8.6" } }, "node_modules/@chakra-ui/portal": { "version": "1.3.10", "resolved": "https://registry.npmjs.org/@chakra-ui/portal/-/portal-1.3.10.tgz", "integrity": "sha512-t2KQ6MXbyf1qFYxWw/bs//CnwD+Clq7mbsP1Y7g+THCz2FvlLlMj45BWocLB30NoNyA8WCS2zyMBszW2/qvDiA==", "dependencies": { "@chakra-ui/hooks": "1.9.1", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "react": ">=16.8.6", "react-dom": ">=16.8.6" } }, "node_modules/@chakra-ui/progress": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@chakra-ui/progress/-/progress-1.2.6.tgz", "integrity": "sha512-thaHRIYTVktgV78vJMNwzfCX+ickhSpn2bun6FtGVUphFx4tjV+ggz+IGohm6AH2hapskoR1mQU2iNZb6BK0hQ==", "dependencies": { "@chakra-ui/theme-tools": "1.3.6", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/provider": { "version": "1.7.14", "resolved": "https://registry.npmjs.org/@chakra-ui/provider/-/provider-1.7.14.tgz", "integrity": "sha512-FCA33CZy/jFzExglKMioeri8sr9NtDTcNVPnx95ZJiA7WpfFo0xuZ6/fMC4DwIQPkJKbSIZBXYLZ3U10Ntylrw==", "dependencies": { "@chakra-ui/css-reset": "1.1.3", "@chakra-ui/hooks": "1.9.1", "@chakra-ui/portal": "1.3.10", "@chakra-ui/react-env": "1.1.6", "@chakra-ui/system": "1.12.1", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@emotion/react": "^11.0.0", "@emotion/styled": "^11.0.0", "react": ">=16.8.6", "react-dom": ">=16.8.6" } }, "node_modules/@chakra-ui/radio": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@chakra-ui/radio/-/radio-1.5.1.tgz", "integrity": "sha512-zO5eShz+j68A7935jJ2q5u3brX/bjPEGh9Pj2+bnKbmC9Vva6jEzBSJsAx9n4WbkAzR3xDMGWsbpivFp8X1tJw==", "dependencies": { "@chakra-ui/form-control": "1.6.0", "@chakra-ui/hooks": "1.9.1", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4", "@chakra-ui/visually-hidden": "1.1.6" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/react": { "version": "1.8.9", "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-1.8.9.tgz", "integrity": "sha512-NfR5XKVqEWhchFLiWaTWkWeYZJK1SNF2O6sQxFVrX6M+nAgJ3Q9tfMk6/I3II+xc4hXJUcYmUvmw37vT92yMaQ==", "dependencies": { "@chakra-ui/accordion": "1.4.12", "@chakra-ui/alert": "1.3.7", "@chakra-ui/avatar": "1.3.11", "@chakra-ui/breadcrumb": "1.3.6", "@chakra-ui/button": "1.5.10", "@chakra-ui/checkbox": "1.7.1", "@chakra-ui/close-button": "1.2.7", "@chakra-ui/control-box": "1.1.6", "@chakra-ui/counter": "1.2.10", "@chakra-ui/css-reset": "1.1.3", "@chakra-ui/editable": "1.4.2", "@chakra-ui/form-control": "1.6.0", "@chakra-ui/hooks": "1.9.1", "@chakra-ui/icon": "2.0.5", "@chakra-ui/image": "1.1.10", "@chakra-ui/input": "1.4.6", "@chakra-ui/layout": "1.8.0", "@chakra-ui/live-region": "1.1.6", "@chakra-ui/media-query": "2.0.4", "@chakra-ui/menu": "1.8.12", "@chakra-ui/modal": "1.11.1", "@chakra-ui/number-input": "1.4.7", "@chakra-ui/pin-input": "1.7.11", "@chakra-ui/popover": "1.11.9", "@chakra-ui/popper": "2.4.3", "@chakra-ui/portal": "1.3.10", "@chakra-ui/progress": "1.2.6", "@chakra-ui/provider": "1.7.14", "@chakra-ui/radio": "1.5.1", "@chakra-ui/react-env": "1.1.6", "@chakra-ui/select": "1.2.11", "@chakra-ui/skeleton": "1.2.14", "@chakra-ui/slider": "1.5.11", "@chakra-ui/spinner": "1.2.6", "@chakra-ui/stat": "1.2.7", "@chakra-ui/switch": "1.3.10", "@chakra-ui/system": "1.12.1", "@chakra-ui/table": "1.3.6", "@chakra-ui/tabs": "1.6.11", "@chakra-ui/tag": "1.2.7", "@chakra-ui/textarea": "1.2.11", "@chakra-ui/theme": "1.14.1", "@chakra-ui/toast": "1.5.9", "@chakra-ui/tooltip": "1.5.1", "@chakra-ui/transition": "1.4.8", "@chakra-ui/utils": "1.10.4", "@chakra-ui/visually-hidden": "1.1.6" }, "peerDependencies": { "@emotion/react": "^11.0.0", "@emotion/styled": "^11.0.0", "framer-motion": "3.x || 4.x || 5.x || 6.x", "react": ">=16.8.6", "react-dom": ">=16.8.6" } }, "node_modules/@chakra-ui/react-env": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@chakra-ui/react-env/-/react-env-1.1.6.tgz", "integrity": "sha512-L90LNvCfe04FTkN9OPok/o2e60zLJNBH8Im/5dUHvqy7dXLXok8ZDad5vEL46XmGbhe7O8fbxhG6FmAYdcCHrQ==", "dependencies": { "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "react": ">=16.8.6" } }, "node_modules/@chakra-ui/react-utils": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@chakra-ui/react-utils/-/react-utils-1.2.3.tgz", "integrity": "sha512-r8pUwCVVB7UPhb0AiRa9ZzSp4xkMz64yIeJ4O4aGy4WMw7TRH4j4QkbkE1YC9tQitrXrliOlvx4WWJR4VyiGpw==", "dependencies": { "@chakra-ui/utils": "^1.10.4" }, "peerDependencies": { "react": ">=16.8.6" } }, "node_modules/@chakra-ui/select": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/@chakra-ui/select/-/select-1.2.11.tgz", "integrity": "sha512-6Tis1+ZrRjQeWhQfziQn3ZdPphV5ccafpZOhiPdTcM2J1XcXOlII+9rHxvaW+jx7zQ5ly5o8kd7iXzalDgl5wA==", "dependencies": { "@chakra-ui/form-control": "1.6.0", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/skeleton": { "version": "1.2.14", "resolved": "https://registry.npmjs.org/@chakra-ui/skeleton/-/skeleton-1.2.14.tgz", "integrity": "sha512-R0v4DfQ2yjXCJf9SzhTmDb2PLx5//LxsRbjjgRa8qJCR4MZaGswPrekp4dP8YjY8aEYzuZbvHU12T3vqZBk2GA==", "dependencies": { "@chakra-ui/hooks": "1.9.1", "@chakra-ui/media-query": "2.0.4", "@chakra-ui/system": "1.12.1", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/theme": ">=1.0.0", "@emotion/react": "^11.0.0", "@emotion/styled": "^11.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/slider": { "version": "1.5.11", "resolved": "https://registry.npmjs.org/@chakra-ui/slider/-/slider-1.5.11.tgz", "integrity": "sha512-THkGU2BsA6XMosXcEVQkWVRftqUIAKCb+y4iEpR3C2ztqL7Fl/CbIGwyr5majhPhKc275rb8dfxwp8R0L0ZIiQ==", "dependencies": { "@chakra-ui/hooks": "1.9.1", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/spinner": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@chakra-ui/spinner/-/spinner-1.2.6.tgz", "integrity": "sha512-GoUCccN120fGRVgUtfuwcEjeoaxffB+XsgpxX7jhWloXf8b6lkqm68bsxX4Ybb2vGN1fANI98/45JmrnddZO/A==", "dependencies": { "@chakra-ui/utils": "1.10.4", "@chakra-ui/visually-hidden": "1.1.6" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/stat": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@chakra-ui/stat/-/stat-1.2.7.tgz", "integrity": "sha512-m76jumFW1N+mCG4ytrUz9Mh09nZtS4OQcADEvOslfdI5StwwuzasTA1tueaelPzdhBioMwFUWL05Fr1fXbPJ/Q==", "dependencies": { "@chakra-ui/icon": "2.0.5", "@chakra-ui/utils": "1.10.4", "@chakra-ui/visually-hidden": "1.1.6" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/styled-system": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-1.19.0.tgz", "integrity": "sha512-z+bMfWs6jQGkpgarge1kmk78DuDhJIXRUMyRqZ3+CiIkze88bIIsww6mV2i8tEfUfTAvALeMnlYZ1DYsHsTTJw==", "dependencies": { "@chakra-ui/utils": "1.10.4", "csstype": "3.0.9" } }, "node_modules/@chakra-ui/switch": { "version": "1.3.10", "resolved": "https://registry.npmjs.org/@chakra-ui/switch/-/switch-1.3.10.tgz", "integrity": "sha512-V6qDLY6oECCbPyu7alWWOAhSBI4+SAuT6XW/zEQbelkwuUOiGO1ax67rTXOmZ59A2AaV1gqQFxDh8AcbvwO5XQ==", "dependencies": { "@chakra-ui/checkbox": "1.7.1", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "framer-motion": "3.x || 4.x || 5.x || 6.x", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/system": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@chakra-ui/system/-/system-1.12.1.tgz", "integrity": "sha512-Rp09/rMuPA3hF38OJxeQciGO9N0Ie1GxwHRAw1AFA/TY3fVyK9pNI5oN+J/1cAxq7v9yKdIr1YfnruJTI9xfEg==", "dependencies": { "@chakra-ui/color-mode": "1.4.8", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/styled-system": "1.19.0", "@chakra-ui/utils": "1.10.4", "react-fast-compare": "3.2.0" }, "peerDependencies": { "@emotion/react": "^11.0.0", "@emotion/styled": "^11.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/table": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/@chakra-ui/table/-/table-1.3.6.tgz", "integrity": "sha512-7agZAgAeDFKviqStvixqnLAH54+setzhx67EztioZTr5Xu+6hQ4rotfJbu8L4i587pcbNg98kCEXEkidjw0XRQ==", "dependencies": { "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/tabs": { "version": "1.6.11", "resolved": "https://registry.npmjs.org/@chakra-ui/tabs/-/tabs-1.6.11.tgz", "integrity": "sha512-hGs2REEVVWyfgs+qEkPiUsNnqwv3QwXfKYyXaMnGS7CCkGgUiEvIO7n9968/KGnGbM4GuEHX+BxG2suIUf24yg==", "dependencies": { "@chakra-ui/clickable": "1.2.6", "@chakra-ui/descendant": "2.1.4", "@chakra-ui/hooks": "1.9.1", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/tag": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@chakra-ui/tag/-/tag-1.2.7.tgz", "integrity": "sha512-RKrKOol4i/CnpFfo3T9LMm1abaqM+5Bs0soQLbo1iJBbBACY09sWXrQYvveQ2GYzU/OrAUloHqqmKjyVGOlNtg==", "dependencies": { "@chakra-ui/icon": "2.0.5", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/textarea": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/@chakra-ui/textarea/-/textarea-1.2.11.tgz", "integrity": "sha512-RDWbMyC87/AFRX98EnVum5eig/7hhcvS1BrqW5lvmTgrpr7KVr80Dfa8hUj58Iq37Z7AqZijDPkBn/zg7bPdIg==", "dependencies": { "@chakra-ui/form-control": "1.6.0", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/theme": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@chakra-ui/theme/-/theme-1.14.1.tgz", "integrity": "sha512-VeNZi+zD3yDwzvZm234Cy3vnalCzQ+dhAgpHdIYzGO1CYO8DPa+ROcQ70rUueL7dSvUz15KOiGTw6DAl7LXlGA==", "dependencies": { "@chakra-ui/anatomy": "1.3.0", "@chakra-ui/theme-tools": "1.3.6", "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0" } }, "node_modules/@chakra-ui/theme-tools": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/@chakra-ui/theme-tools/-/theme-tools-1.3.6.tgz", "integrity": "sha512-Wxz3XSJhPCU6OwCHEyH44EegEDQHwvlsx+KDkUDGevOjUU88YuNqOVkKtgTpgMLNQcsrYZ93oPWZUJqqCVNRew==", "dependencies": { "@chakra-ui/utils": "1.10.4", "@ctrl/tinycolor": "^3.4.0" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0" } }, "node_modules/@chakra-ui/toast": { "version": "1.5.9", "resolved": "https://registry.npmjs.org/@chakra-ui/toast/-/toast-1.5.9.tgz", "integrity": "sha512-rns04bGdMcG7Ijg45L+PfuEW4rCd0Ycraix4EJQhcl9RXI18G9sphmlp9feidhZAkI6Ukafq1YvyvkBfkKnIzQ==", "dependencies": { "@chakra-ui/alert": "1.3.7", "@chakra-ui/close-button": "1.2.7", "@chakra-ui/hooks": "1.9.1", "@chakra-ui/theme": "1.14.1", "@chakra-ui/transition": "1.4.8", "@chakra-ui/utils": "1.10.4", "@reach/alert": "0.13.2" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "framer-motion": "3.x || 4.x || 5.x || 6.x", "react": ">=16.8.6", "react-dom": ">=16.8.6" } }, "node_modules/@chakra-ui/tooltip": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@chakra-ui/tooltip/-/tooltip-1.5.1.tgz", "integrity": "sha512-EUAlDdlCBt63VpEVtj/RkFjHQVN/xA9gEAumngQdi1Sp+OXPYCBM9GwSY0NwrM1RfKBnhPSH9wz7FwredJWeaw==", "dependencies": { "@chakra-ui/hooks": "1.9.1", "@chakra-ui/popper": "2.4.3", "@chakra-ui/portal": "1.3.10", "@chakra-ui/react-utils": "1.2.3", "@chakra-ui/utils": "1.10.4", "@chakra-ui/visually-hidden": "1.1.6" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "framer-motion": "3.x || 4.x || 5.x || 6.x", "react": ">=16.8.6", "react-dom": ">=16.8.6" } }, "node_modules/@chakra-ui/transition": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/@chakra-ui/transition/-/transition-1.4.8.tgz", "integrity": "sha512-5uc8LEuCH7+0h++wqAav/EktTHOjbLDSTXQlU9fzPIlNNgyf2eXrHVN2AGMGKiMR9Z4gS7umQjZ54r0w/mZ/Fw==", "dependencies": { "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "framer-motion": "3.x || 4.x || 5.x || 6.x", "react": ">=16.8.6" } }, "node_modules/@chakra-ui/utils": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@chakra-ui/utils/-/utils-1.10.4.tgz", "integrity": "sha512-AM91VQQxw8F4F1WDA28mqKY6NFIOuzc2Ekkna88imy2OiqqmYH0xkq8J16L2qj4cLiLozpYqba3C79pWioy6FA==", "dependencies": { "@types/lodash.mergewith": "4.6.6", "css-box-model": "1.2.1", "framesync": "5.3.0", "lodash.mergewith": "4.6.2" } }, "node_modules/@chakra-ui/visually-hidden": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/@chakra-ui/visually-hidden/-/visually-hidden-1.1.6.tgz", "integrity": "sha512-Xzy5bA0UA+IyMgwJizQYSEdgz8cC/tHdmFB3CniXzmpKTSK8mJddeEBl+cGbXHBzxEUhH7xF1eaS41O+0ezWEQ==", "dependencies": { "@chakra-ui/utils": "1.10.4" }, "peerDependencies": { "@chakra-ui/system": ">=1.0.0", "react": ">=16.8.6" } }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "optional": true, "engines": { "node": ">=0.1.90" } }, "node_modules/@ctrl/tinycolor": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz", "integrity": "sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==", "engines": { "node": ">=10" } }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "engines": { "node": ">=10.0.0" } }, "node_modules/@docsearch/css": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.1.tgz", "integrity": "sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA==" }, "node_modules/@docsearch/react": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.1.tgz", "integrity": "sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ==", "dependencies": { "@algolia/autocomplete-core": "1.9.3", "@algolia/autocomplete-preset-algolia": "1.9.3", "@docsearch/css": "3.5.1", "algoliasearch": "^4.0.0" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 19.0.0", "react": ">= 16.8.0 < 19.0.0", "react-dom": ">= 16.8.0 < 19.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true }, "react": { "optional": true }, "react-dom": { "optional": true } } }, "node_modules/@docusaurus/core": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.4.1.tgz", "integrity": "sha512-SNsY7PshK3Ri7vtsLXVeAJGS50nJN3RgF836zkyUfAD01Fq+sAk5EwWgLw+nnm5KVNGDu7PRR2kRGDsWvqpo0g==", "dependencies": { "@babel/core": "^7.18.6", "@babel/generator": "^7.18.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-transform-runtime": "^7.18.6", "@babel/preset-env": "^7.18.6", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@babel/runtime": "^7.18.6", "@babel/runtime-corejs3": "^7.18.6", "@babel/traverse": "^7.18.8", "@docusaurus/cssnano-preset": "2.4.1", "@docusaurus/logger": "2.4.1", "@docusaurus/mdx-loader": "2.4.1", "@docusaurus/react-loadable": "5.5.2", "@docusaurus/utils": "2.4.1", "@docusaurus/utils-common": "2.4.1", "@docusaurus/utils-validation": "2.4.1", "@slorber/static-site-generator-webpack-plugin": "^4.0.7", "@svgr/webpack": "^6.2.1", "autoprefixer": "^10.4.7", "babel-loader": "^8.2.5", "babel-plugin-dynamic-import-node": "^2.3.3", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", "clean-css": "^5.3.0", "cli-table3": "^0.6.2", "combine-promises": "^1.1.0", "commander": "^5.1.0", "copy-webpack-plugin": "^11.0.0", "core-js": "^3.23.3", "css-loader": "^6.7.1", "css-minimizer-webpack-plugin": "^4.0.0", "cssnano": "^5.1.12", "del": "^6.1.1", "detect-port": "^1.3.0", "escape-html": "^1.0.3", "eta": "^2.0.0", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", "html-minifier-terser": "^6.1.0", "html-tags": "^3.2.0", "html-webpack-plugin": "^5.5.0", "import-fresh": "^3.3.0", "leven": "^3.1.0", "lodash": "^4.17.21", "mini-css-extract-plugin": "^2.6.1", "postcss": "^8.4.14", "postcss-loader": "^7.0.0", "prompts": "^2.4.2", "react-dev-utils": "^12.0.1", "react-helmet-async": "^1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", "react-router": "^5.3.3", "react-router-config": "^5.1.1", "react-router-dom": "^5.3.3", "rtl-detect": "^1.0.4", "semver": "^7.3.7", "serve-handler": "^6.1.3", "shelljs": "^0.8.5", "terser-webpack-plugin": "^5.3.3", "tslib": "^2.4.0", "update-notifier": "^5.1.0", "url-loader": "^4.1.1", "wait-on": "^6.0.1", "webpack": "^5.73.0", "webpack-bundle-analyzer": "^4.5.0", "webpack-dev-server": "^4.9.3", "webpack-merge": "^5.8.0", "webpackbar": "^5.0.2" }, "bin": { "docusaurus": "bin/docusaurus.mjs" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/core/node_modules/ansi-styles": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@docusaurus/core/node_modules/chalk": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@docusaurus/core/node_modules/color-convert": { "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" }, "engines": { "node": ">=7.0.0" } }, "node_modules/@docusaurus/core/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@docusaurus/core/node_modules/commander": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "engines": { "node": ">= 6" } }, "node_modules/@docusaurus/core/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@docusaurus/core/node_modules/lru-cache": { "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" }, "engines": { "node": ">=10" } }, "node_modules/@docusaurus/core/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@docusaurus/core/node_modules/supports-color": { "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" }, "engines": { "node": ">=8" } }, "node_modules/@docusaurus/core/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@docusaurus/cssnano-preset": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.1.tgz", "integrity": "sha512-ka+vqXwtcW1NbXxWsh6yA1Ckii1klY9E53cJ4O9J09nkMBgrNX3iEFED1fWdv8wf4mJjvGi5RLZ2p9hJNjsLyQ==", "dependencies": { "cssnano-preset-advanced": "^5.3.8", "postcss": "^8.4.14", "postcss-sort-media-queries": "^4.2.1", "tslib": "^2.4.0" }, "engines": { "node": ">=16.14" } }, "node_modules/@docusaurus/logger": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.1.tgz", "integrity": "sha512-5h5ysIIWYIDHyTVd8BjheZmQZmEgWDR54aQ1BX9pjFfpyzFo5puKXKYrYJXbjEHGyVhEzmB9UXwbxGfaZhOjcg==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.4.0" }, "engines": { "node": ">=16.14" } }, "node_modules/@docusaurus/logger/node_modules/ansi-styles": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@docusaurus/logger/node_modules/chalk": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@docusaurus/logger/node_modules/color-convert": { "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" }, "engines": { "node": ">=7.0.0" } }, "node_modules/@docusaurus/logger/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@docusaurus/logger/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@docusaurus/logger/node_modules/supports-color": { "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" }, "engines": { "node": ">=8" } }, "node_modules/@docusaurus/mdx-loader": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.4.1.tgz", "integrity": "sha512-4KhUhEavteIAmbBj7LVFnrVYDiU51H5YWW1zY6SmBSte/YLhDutztLTBE0PQl1Grux1jzUJeaSvAzHpTn6JJDQ==", "dependencies": { "@babel/parser": "^7.18.8", "@babel/traverse": "^7.18.8", "@docusaurus/logger": "2.4.1", "@docusaurus/utils": "2.4.1", "@mdx-js/mdx": "^1.6.22", "escape-html": "^1.0.3", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", "image-size": "^1.0.1", "mdast-util-to-string": "^2.0.0", "remark-emoji": "^2.2.0", "stringify-object": "^3.3.0", "tslib": "^2.4.0", "unified": "^9.2.2", "unist-util-visit": "^2.0.3", "url-loader": "^4.1.1", "webpack": "^5.73.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/module-type-aliases": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.1.tgz", "integrity": "sha512-gLBuIFM8Dp2XOCWffUDSjtxY7jQgKvYujt7Mx5s4FCTfoL5dN1EVbnrn+O2Wvh8b0a77D57qoIDY7ghgmatR1A==", "dependencies": { "@docusaurus/react-loadable": "5.5.2", "@docusaurus/types": "2.4.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", "react-helmet-async": "*", "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" }, "peerDependencies": { "react": "*", "react-dom": "*" } }, "node_modules/@docusaurus/plugin-content-blog": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.1.tgz", "integrity": "sha512-E2i7Knz5YIbE1XELI6RlTnZnGgS52cUO4BlCiCUCvQHbR+s1xeIWz4C6BtaVnlug0Ccz7nFSksfwDpVlkujg5Q==", "dependencies": { "@docusaurus/core": "2.4.1", "@docusaurus/logger": "2.4.1", "@docusaurus/mdx-loader": "2.4.1", "@docusaurus/types": "2.4.1", "@docusaurus/utils": "2.4.1", "@docusaurus/utils-common": "2.4.1", "@docusaurus/utils-validation": "2.4.1", "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^10.1.0", "lodash": "^4.17.21", "reading-time": "^1.5.0", "tslib": "^2.4.0", "unist-util-visit": "^2.0.3", "utility-types": "^3.10.0", "webpack": "^5.73.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/plugin-content-docs": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.1.tgz", "integrity": "sha512-Lo7lSIcpswa2Kv4HEeUcGYqaasMUQNpjTXpV0N8G6jXgZaQurqp7E8NGYeGbDXnb48czmHWbzDL4S3+BbK0VzA==", "dependencies": { "@docusaurus/core": "2.4.1", "@docusaurus/logger": "2.4.1", "@docusaurus/mdx-loader": "2.4.1", "@docusaurus/module-type-aliases": "2.4.1", "@docusaurus/types": "2.4.1", "@docusaurus/utils": "2.4.1", "@docusaurus/utils-validation": "2.4.1", "@types/react-router-config": "^5.0.6", "combine-promises": "^1.1.0", "fs-extra": "^10.1.0", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "tslib": "^2.4.0", "utility-types": "^3.10.0", "webpack": "^5.73.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/plugin-content-docs/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@docusaurus/plugin-content-docs/node_modules/js-yaml": { "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" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/@docusaurus/plugin-content-pages": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.1.tgz", "integrity": "sha512-/UjuH/76KLaUlL+o1OvyORynv6FURzjurSjvn2lbWTFc4tpYY2qLYTlKpTCBVPhlLUQsfyFnshEJDLmPneq2oA==", "dependencies": { "@docusaurus/core": "2.4.1", "@docusaurus/mdx-loader": "2.4.1", "@docusaurus/types": "2.4.1", "@docusaurus/utils": "2.4.1", "@docusaurus/utils-validation": "2.4.1", "fs-extra": "^10.1.0", "tslib": "^2.4.0", "webpack": "^5.73.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/plugin-debug": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.4.1.tgz", "integrity": "sha512-7Yu9UPzRShlrH/G8btOpR0e6INFZr0EegWplMjOqelIwAcx3PKyR8mgPTxGTxcqiYj6hxSCRN0D8R7YrzImwNA==", "dependencies": { "@docusaurus/core": "2.4.1", "@docusaurus/types": "2.4.1", "@docusaurus/utils": "2.4.1", "fs-extra": "^10.1.0", "react-json-view": "^1.21.3", "tslib": "^2.4.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/plugin-google-analytics": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.1.tgz", "integrity": "sha512-dyZJdJiCoL+rcfnm0RPkLt/o732HvLiEwmtoNzOoz9MSZz117UH2J6U2vUDtzUzwtFLIf32KkeyzisbwUCgcaQ==", "dependencies": { "@docusaurus/core": "2.4.1", "@docusaurus/types": "2.4.1", "@docusaurus/utils-validation": "2.4.1", "tslib": "^2.4.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/plugin-google-gtag": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.1.tgz", "integrity": "sha512-mKIefK+2kGTQBYvloNEKtDmnRD7bxHLsBcxgnbt4oZwzi2nxCGjPX6+9SQO2KCN5HZbNrYmGo5GJfMgoRvy6uA==", "dependencies": { "@docusaurus/core": "2.4.1", "@docusaurus/types": "2.4.1", "@docusaurus/utils-validation": "2.4.1", "tslib": "^2.4.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/plugin-google-tag-manager": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.1.tgz", "integrity": "sha512-Zg4Ii9CMOLfpeV2nG74lVTWNtisFaH9QNtEw48R5QE1KIwDBdTVaiSA18G1EujZjrzJJzXN79VhINSbOJO/r3g==", "dependencies": { "@docusaurus/core": "2.4.1", "@docusaurus/types": "2.4.1", "@docusaurus/utils-validation": "2.4.1", "tslib": "^2.4.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/plugin-sitemap": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.1.tgz", "integrity": "sha512-lZx+ijt/+atQ3FVE8FOHV/+X3kuok688OydDXrqKRJyXBJZKgGjA2Qa8RjQ4f27V2woaXhtnyrdPop/+OjVMRg==", "dependencies": { "@docusaurus/core": "2.4.1", "@docusaurus/logger": "2.4.1", "@docusaurus/types": "2.4.1", "@docusaurus/utils": "2.4.1", "@docusaurus/utils-common": "2.4.1", "@docusaurus/utils-validation": "2.4.1", "fs-extra": "^10.1.0", "sitemap": "^7.1.1", "tslib": "^2.4.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/preset-classic": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.4.1.tgz", "integrity": "sha512-P4//+I4zDqQJ+UDgoFrjIFaQ1MeS9UD1cvxVQaI6O7iBmiHQm0MGROP1TbE7HlxlDPXFJjZUK3x3cAoK63smGQ==", "dependencies": { "@docusaurus/core": "2.4.1", "@docusaurus/plugin-content-blog": "2.4.1", "@docusaurus/plugin-content-docs": "2.4.1", "@docusaurus/plugin-content-pages": "2.4.1", "@docusaurus/plugin-debug": "2.4.1", "@docusaurus/plugin-google-analytics": "2.4.1", "@docusaurus/plugin-google-gtag": "2.4.1", "@docusaurus/plugin-google-tag-manager": "2.4.1", "@docusaurus/plugin-sitemap": "2.4.1", "@docusaurus/theme-classic": "2.4.1", "@docusaurus/theme-common": "2.4.1", "@docusaurus/theme-search-algolia": "2.4.1", "@docusaurus/types": "2.4.1" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/react-loadable": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", "dependencies": { "@types/react": "*", "prop-types": "^15.6.2" }, "peerDependencies": { "react": "*" } }, "node_modules/@docusaurus/theme-classic": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.4.1.tgz", "integrity": "sha512-Rz0wKUa+LTW1PLXmwnf8mn85EBzaGSt6qamqtmnh9Hflkc+EqiYMhtUJeLdV+wsgYq4aG0ANc+bpUDpsUhdnwg==", "dependencies": { "@docusaurus/core": "2.4.1", "@docusaurus/mdx-loader": "2.4.1", "@docusaurus/module-type-aliases": "2.4.1", "@docusaurus/plugin-content-blog": "2.4.1", "@docusaurus/plugin-content-docs": "2.4.1", "@docusaurus/plugin-content-pages": "2.4.1", "@docusaurus/theme-common": "2.4.1", "@docusaurus/theme-translations": "2.4.1", "@docusaurus/types": "2.4.1", "@docusaurus/utils": "2.4.1", "@docusaurus/utils-common": "2.4.1", "@docusaurus/utils-validation": "2.4.1", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", "copy-text-to-clipboard": "^3.0.1", "infima": "0.2.0-alpha.43", "lodash": "^4.17.21", "nprogress": "^0.2.0", "postcss": "^8.4.14", "prism-react-renderer": "^1.3.5", "prismjs": "^1.28.0", "react-router-dom": "^5.3.3", "rtlcss": "^3.5.0", "tslib": "^2.4.0", "utility-types": "^3.10.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/theme-common": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.4.1.tgz", "integrity": "sha512-G7Zau1W5rQTaFFB3x3soQoZpkgMbl/SYNG8PfMFIjKa3M3q8n0m/GRf5/H/e5BqOvt8c+ZWIXGCiz+kUCSHovA==", "dependencies": { "@docusaurus/mdx-loader": "2.4.1", "@docusaurus/module-type-aliases": "2.4.1", "@docusaurus/plugin-content-blog": "2.4.1", "@docusaurus/plugin-content-docs": "2.4.1", "@docusaurus/plugin-content-pages": "2.4.1", "@docusaurus/utils": "2.4.1", "@docusaurus/utils-common": "2.4.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "clsx": "^1.2.1", "parse-numeric-range": "^1.3.0", "prism-react-renderer": "^1.3.5", "tslib": "^2.4.0", "use-sync-external-store": "^1.2.0", "utility-types": "^3.10.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/theme-search-algolia": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.1.tgz", "integrity": "sha512-6BcqW2lnLhZCXuMAvPRezFs1DpmEKzXFKlYjruuas+Xy3AQeFzDJKTJFIm49N77WFCTyxff8d3E4Q9pi/+5McQ==", "dependencies": { "@docsearch/react": "^3.1.1", "@docusaurus/core": "2.4.1", "@docusaurus/logger": "2.4.1", "@docusaurus/plugin-content-docs": "2.4.1", "@docusaurus/theme-common": "2.4.1", "@docusaurus/theme-translations": "2.4.1", "@docusaurus/utils": "2.4.1", "@docusaurus/utils-validation": "2.4.1", "algoliasearch": "^4.13.1", "algoliasearch-helper": "^3.10.0", "clsx": "^1.2.1", "eta": "^2.0.0", "fs-extra": "^10.1.0", "lodash": "^4.17.21", "tslib": "^2.4.0", "utility-types": "^3.10.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/theme-translations": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.4.1.tgz", "integrity": "sha512-T1RAGP+f86CA1kfE8ejZ3T3pUU3XcyvrGMfC/zxCtc2BsnoexuNI9Vk2CmuKCb+Tacvhxjv5unhxXce0+NKyvA==", "dependencies": { "fs-extra": "^10.1.0", "tslib": "^2.4.0" }, "engines": { "node": ">=16.14" } }, "node_modules/@docusaurus/types": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.4.1.tgz", "integrity": "sha512-0R+cbhpMkhbRXX138UOc/2XZFF8hiZa6ooZAEEJFp5scytzCw4tC1gChMFXrpa3d2tYE6AX8IrOEpSonLmfQuQ==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", "commander": "^5.1.0", "joi": "^17.6.0", "react-helmet-async": "^1.3.0", "utility-types": "^3.10.0", "webpack": "^5.73.0", "webpack-merge": "^5.8.0" }, "peerDependencies": { "react": "^16.8.4 || ^17.0.0", "react-dom": "^16.8.4 || ^17.0.0" } }, "node_modules/@docusaurus/types/node_modules/commander": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "engines": { "node": ">= 6" } }, "node_modules/@docusaurus/utils": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.1.tgz", "integrity": "sha512-1lvEZdAQhKNht9aPXPoh69eeKnV0/62ROhQeFKKxmzd0zkcuE/Oc5Gpnt00y/f5bIsmOsYMY7Pqfm/5rteT5GA==", "dependencies": { "@docusaurus/logger": "2.4.1", "@svgr/webpack": "^6.2.1", "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", "github-slugger": "^1.4.0", "globby": "^11.1.0", "gray-matter": "^4.0.3", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "micromatch": "^4.0.5", "resolve-pathname": "^3.0.0", "shelljs": "^0.8.5", "tslib": "^2.4.0", "url-loader": "^4.1.1", "webpack": "^5.73.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "@docusaurus/types": "*" }, "peerDependenciesMeta": { "@docusaurus/types": { "optional": true } } }, "node_modules/@docusaurus/utils-common": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.4.1.tgz", "integrity": "sha512-bCVGdZU+z/qVcIiEQdyx0K13OC5mYwxhSuDUR95oFbKVuXYRrTVrwZIqQljuo1fyJvFTKHiL9L9skQOPokuFNQ==", "dependencies": { "tslib": "^2.4.0" }, "engines": { "node": ">=16.14" }, "peerDependencies": { "@docusaurus/types": "*" }, "peerDependenciesMeta": { "@docusaurus/types": { "optional": true } } }, "node_modules/@docusaurus/utils-validation": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.1.tgz", "integrity": "sha512-unII3hlJlDwZ3w8U+pMO3Lx3RhI4YEbY3YNsQj4yzrkZzlpqZOLuAiZK2JyULnD+TKbceKU0WyWkQXtYbLNDFA==", "dependencies": { "@docusaurus/logger": "2.4.1", "@docusaurus/utils": "2.4.1", "joi": "^17.6.0", "js-yaml": "^4.1.0", "tslib": "^2.4.0" }, "engines": { "node": ">=16.14" } }, "node_modules/@docusaurus/utils-validation/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@docusaurus/utils-validation/node_modules/js-yaml": { "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" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/@docusaurus/utils/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@docusaurus/utils/node_modules/js-yaml": { "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" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/@emotion/babel-plugin": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", "@emotion/hash": "^0.9.1", "@emotion/memoize": "^0.8.1", "@emotion/serialize": "^1.1.2", "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.2.0" } }, "node_modules/@emotion/cache": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", "dependencies": { "@emotion/memoize": "^0.8.1", "@emotion/sheet": "^1.2.2", "@emotion/utils": "^1.2.1", "@emotion/weak-memoize": "^0.3.1", "stylis": "4.2.0" } }, "node_modules/@emotion/css-prettifier": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@emotion/css-prettifier/-/css-prettifier-1.1.3.tgz", "integrity": "sha512-KNv23+VQ+pcw3ebd1vSEl11CQ6SKAG5EQkrinjVGsfw3ZTWe6/tpWQrsvFLqCtU2LRiLPi04KgFCE4A9+crfpQ==", "dev": true, "dependencies": { "@emotion/memoize": "^0.8.1", "stylis": "4.2.0" } }, "node_modules/@emotion/eslint-plugin": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/eslint-plugin/-/eslint-plugin-11.11.0.tgz", "integrity": "sha512-jCOYqU/0Sqm+g+6D7QuIlG99q8YAF0T7BP98zQF/MPZKfbcm46z5mizXn0YlhZ9AYZfNtZ1DeODXdncYxZzR4Q==", "dev": true, "engines": { "node": ">=6" }, "peerDependencies": { "eslint": "6 || 7 || 8" } }, "node_modules/@emotion/hash": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "node_modules/@emotion/is-prop-valid": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", "dependencies": { "@emotion/memoize": "^0.8.1" } }, "node_modules/@emotion/jest": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/jest/-/jest-11.11.0.tgz", "integrity": "sha512-XZlnmdUZ32YjQnInsCFk/plKpkV/NXN1Ab4YoNvXN887MeR3Hr5ZsTyoblIW8AWwdfQiZHHphaPMb56lk6Ofdw==", "dev": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/css-prettifier": "^1.1.3", "chalk": "^4.1.0", "specificity": "^0.4.1", "stylis": "4.2.0" }, "peerDependencies": { "@types/jest": "^26.0.14 || ^27.0.0 || ^28.0.0 || ^29.0.0", "enzyme-to-json": "^3.2.1" }, "peerDependenciesMeta": { "@types/jest": { "optional": true }, "enzyme-to-json": { "optional": true } } }, "node_modules/@emotion/jest/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@emotion/jest/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@emotion/jest/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/@emotion/jest/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/@emotion/jest/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@emotion/jest/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/@emotion/memoize": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "node_modules/@emotion/react": { "version": "11.11.1", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", "@emotion/cache": "^11.11.0", "@emotion/serialize": "^1.1.2", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", "@emotion/utils": "^1.2.1", "@emotion/weak-memoize": "^0.3.1", "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { "react": ">=16.8.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@emotion/serialize": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", "dependencies": { "@emotion/hash": "^0.9.1", "@emotion/memoize": "^0.8.1", "@emotion/unitless": "^0.8.1", "@emotion/utils": "^1.2.1", "csstype": "^3.0.2" } }, "node_modules/@emotion/sheet": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, "node_modules/@emotion/styled": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", "dev": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", "@emotion/is-prop-valid": "^1.2.1", "@emotion/serialize": "^1.1.2", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", "@emotion/utils": "^1.2.1" }, "peerDependencies": { "@emotion/react": "^11.0.0-rc.0", "react": ">=16.8.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@emotion/unitless": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", "peerDependencies": { "react": ">=16.8.0" } }, "node_modules/@emotion/utils": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" }, "node_modules/@emotion/weak-memoize": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, "node_modules/@esbuild/android-arm": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.19.tgz", "integrity": "sha512-1uOoDurJYh5MNqPqpj3l/TQCI1V25BXgChEldCB7D6iryBYqYKrbZIhYO5AI9fulf66sM8UJpc3UcCly2Tv28w==", "cpu": [ "arm" ], "dev": true, "optional": true, "os": [ "android" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/android-arm64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.19.tgz", "integrity": "sha512-4+jkUFQxZkQfQOOxfGVZB38YUWHMJX2ihZwF+2nh8m7bHdWXpixiurgGRN3c/KMSwlltbYI0/i929jwBRMFzbA==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "android" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/android-x64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.19.tgz", "integrity": "sha512-ae5sHYiP/Ogj2YNrLZbWkBmyHIDOhPgpkGvFnke7XFGQldBDWvc/AyYwSLpNuKw9UNkgnLlB/jPpnBmlF3G9Bg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "android" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/darwin-arm64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.19.tgz", "integrity": "sha512-HIpQvNQWFYROmWDANMRL+jZvvTQGOiTuwWBIuAsMaQrnStedM+nEKJBzKQ6bfT9RFKH2wZ+ej+DY7+9xHBTFPg==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "darwin" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/darwin-x64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.19.tgz", "integrity": "sha512-m6JdvXJQt0thNLIcWOeG079h2ivhYH4B5sVCgqb/B29zTcFd7EE8/J1nIUHhdtwGeItdUeqKaqqb4towwxvglQ==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "darwin" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/freebsd-arm64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.19.tgz", "integrity": "sha512-G0p4EFMPZhGn/xVNspUyMQbORH3nlKTV0bFNHPIwLraBuAkTeMyxNviTe0ZXUbIXQrR1lrwniFjNFU4s+x7veQ==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "freebsd" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/freebsd-x64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.19.tgz", "integrity": "sha512-hBxgRlG42+W+j/1/cvlnSa+3+OBKeDCyO7OG2ICya1YJaSCYfSpuG30KfOnQHI7Ytgu4bRqCgrYXxQEzy0zM5Q==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "freebsd" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-arm": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.19.tgz", "integrity": "sha512-qtWyoQskfJlb9MD45mvzCEKeO4uCnDZ7lPFeNqbfaaJHqBiH9qA5Vu2EuckqYZuFMJWy1l4dxTf9NOulCVfUjg==", "cpu": [ "arm" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-arm64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.19.tgz", "integrity": "sha512-X8g33tczY0GsJq3lhyBrjnFtaKjWVpp1gMq5IlF9BQJ3TUfSK74nQnz9mRIEejmcV+OIYn6bkOJeUaU1Knrljg==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-ia32": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.19.tgz", "integrity": "sha512-SAkRWJgb+KN+gOhmbiE6/wu23D6HRcGQi15cB13IVtBZZgXxygTV5GJlUAKLQ5Gcx0gtlmt+XIxEmSqA6sZTOw==", "cpu": [ "ia32" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-loong64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.19.tgz", "integrity": "sha512-YLAslaO8NsB9UOxBchos82AOMRDbIAWChwDKfjlGrHSzS3v1kxce7dGlSTsrb0PJwo1KYccypN3VNjQVLtz7LA==", "cpu": [ "loong64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-mips64el": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.19.tgz", "integrity": "sha512-vSYFtlYds/oTI8aflEP65xo3MXChMwBOG1eWPGGKs/ev9zkTeXVvciU+nifq8J1JYMz+eQ4J9JDN0O2RKF8+1Q==", "cpu": [ "mips64el" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-ppc64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.19.tgz", "integrity": "sha512-tgG41lRVwlzqO9tv9l7aXYVw35BxKXLtPam1qALScwSqPivI8hjkZLNH0deaaSCYCFT9cBIdB+hUjWFlFFLL9A==", "cpu": [ "ppc64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-riscv64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.19.tgz", "integrity": "sha512-EgBZFLoN1S5RuB4cCJI31pBPsjE1nZ+3+fHRjguq9Ibrzo29bOLSBcH1KZJvRNh5qtd+fcYIGiIUia8Jw5r1lQ==", "cpu": [ "riscv64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-s390x": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.19.tgz", "integrity": "sha512-q1V1rtHRojAzjSigZEqrcLkpfh5K09ShCoIsdTakozVBnM5rgV58PLFticqDp5UJ9uE0HScov9QNbbl8HBo6QQ==", "cpu": [ "s390x" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-x64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.19.tgz", "integrity": "sha512-D0IiYjpZRXxGZLQfsydeAD7ZWqdGyFLBj5f2UshJpy09WPs3qizDCsEr8zyzcym6Woj/UI9ZzMIXwvoXVtyt0A==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/netbsd-x64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.19.tgz", "integrity": "sha512-3tt3SOS8L3D54R8oER41UdDshlBIAjYhdWRPiZCTZ1E41+shIZBpTjaW5UaN/jD1ENE/Ok5lkeqhoNMbxstyxw==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "netbsd" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/openbsd-x64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.19.tgz", "integrity": "sha512-MxbhcuAYQPlfln1EMc4T26OUoeg/YQc6wNoEV8xvktDKZhLtBxjkoeESSo9BbPaGKhAPzusXYj5n8n5A8iZSrA==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "openbsd" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/sunos-x64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.19.tgz", "integrity": "sha512-m0/UOq1wj25JpWqOJxoWBRM9VWc3c32xiNzd+ERlYstUZ6uwx5SZsQUtkiFHaYmcaoj+f6+Tfcl7atuAz3idwQ==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "sunos" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/win32-arm64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.19.tgz", "integrity": "sha512-L4vb6pcoB1cEcXUHU6EPnUhUc4+/tcz4OqlXTWPcSQWxegfmcOprhmIleKKwmMNQVc4wrx/+jB7tGkjjDmiupg==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "win32" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/win32-ia32": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.19.tgz", "integrity": "sha512-rQng7LXSKdrDlNDb7/v0fujob6X0GAazoK/IPd9C3oShr642ri8uIBkgM37/l8B3Rd5sBQcqUXoDdEy75XC/jg==", "cpu": [ "ia32" ], "dev": true, "optional": true, "os": [ "win32" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/win32-x64": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.19.tgz", "integrity": "sha512-z69jhyG20Gq4QL5JKPLqUT+eREuqnDAFItLbza4JCmpvUnIlY73YNjd5djlO7kBiiZnvTnJuAbOjIoZIOa1GjA==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "win32" ], "engines": { "node": ">=12" } }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint-community/regexpp": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.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" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "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" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.20.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "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==", "dev": true }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "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==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@eslint/js": { "version": "8.46.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@floating-ui/core": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz", "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==", "dependencies": { "@floating-ui/utils": "^0.1.1" } }, "node_modules/@floating-ui/dom": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz", "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==", "dependencies": { "@floating-ui/core": "^1.4.1", "@floating-ui/utils": "^0.1.1" } }, "node_modules/@floating-ui/utils": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz", "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==" }, "node_modules/@fluentui/date-time-utilities": { "version": "8.5.13", "resolved": "https://registry.npmjs.org/@fluentui/date-time-utilities/-/date-time-utilities-8.5.13.tgz", "integrity": "sha512-X3clbPKh0URkDj21QoARw6SNec7dWg7Gt7SkTlkVYFzmZUdC4ZIrYk3n36xKe3U1wcGp26EVmKjhAhB262ugpw==", "dependencies": { "@fluentui/set-version": "^8.2.11", "tslib": "^2.1.0" } }, "node_modules/@fluentui/dom-utilities": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/@fluentui/dom-utilities/-/dom-utilities-2.2.11.tgz", "integrity": "sha512-2tXfg7/9PXu9nfU72/P3o3waHEFEQtHUfQbVexUaYqNNAxMj6sOfsqpUx4vd5nPgO+grSWrl+spqlLN2yej51w==", "dependencies": { "@fluentui/set-version": "^8.2.11", "tslib": "^2.1.0" } }, "node_modules/@fluentui/font-icons-mdl2": { "version": "8.5.23", "resolved": "https://registry.npmjs.org/@fluentui/font-icons-mdl2/-/font-icons-mdl2-8.5.23.tgz", "integrity": "sha512-jZjUtfQm9/84jX34zhwwsoZME86xXXgKAgBYuMvRStKzXGdZcd7YSOlmuT8lbISmtFL/SWwUGOEal1nLCUNeNA==", "dependencies": { "@fluentui/set-version": "^8.2.11", "@fluentui/style-utilities": "^8.9.16", "@fluentui/utilities": "^8.13.18", "tslib": "^2.1.0" } }, "node_modules/@fluentui/foundation-legacy": { "version": "8.2.43", "resolved": "https://registry.npmjs.org/@fluentui/foundation-legacy/-/foundation-legacy-8.2.43.tgz", "integrity": "sha512-rXr71KxNcWDH2LmTsFZbP75p8HssLlVLaFAqEdLE+sKf/LNKmqkDVTNhDbHZxzxy0QnguI4aNHcyGhMZUH3MPA==", "dependencies": { "@fluentui/merge-styles": "^8.5.12", "@fluentui/set-version": "^8.2.11", "@fluentui/style-utilities": "^8.9.16", "@fluentui/utilities": "^8.13.18", "tslib": "^2.1.0" }, "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", "react": ">=16.8.0 <19.0.0" } }, "node_modules/@fluentui/keyboard-key": { "version": "0.4.11", "resolved": "https://registry.npmjs.org/@fluentui/keyboard-key/-/keyboard-key-0.4.11.tgz", "integrity": "sha512-TVB/EloWado9AVp1niChgcdDOQAHGP5B30Dinmtfe7zi8OnstwPoxwFP6dHJDdpLQ6ZEUTaEHViSzvewl7Chag==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@fluentui/merge-styles": { "version": "8.5.12", "resolved": "https://registry.npmjs.org/@fluentui/merge-styles/-/merge-styles-8.5.12.tgz", "integrity": "sha512-ZnUo0YuMP7AYi68dkknFqVxopIAgbrUnqR/MZlemmRvBYyy1SMj1WQeHcoiLFA8mF8YKn7B+jxQgJbN2bfcrRw==", "dependencies": { "@fluentui/set-version": "^8.2.11", "tslib": "^2.1.0" } }, "node_modules/@fluentui/react": { "version": "8.110.12", "resolved": "https://registry.npmjs.org/@fluentui/react/-/react-8.110.12.tgz", "integrity": "sha512-SQOUhatXtDlbfyX7Ip2aYWjUBHiCZGPk5SVnb+/jv9IhxKLcMXaxA8faps/bp2h/VlS5Fjk6RkbvQM/qoEjlvg==", "dependencies": { "@fluentui/date-time-utilities": "^8.5.13", "@fluentui/font-icons-mdl2": "^8.5.23", "@fluentui/foundation-legacy": "^8.2.43", "@fluentui/merge-styles": "^8.5.12", "@fluentui/react-focus": "^8.8.30", "@fluentui/react-hooks": "^8.6.29", "@fluentui/react-portal-compat-context": "^9.0.6", "@fluentui/react-window-provider": "^2.2.15", "@fluentui/set-version": "^8.2.11", "@fluentui/style-utilities": "^8.9.16", "@fluentui/theme": "^2.6.34", "@fluentui/utilities": "^8.13.18", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" }, "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", "@types/react-dom": ">=16.8.0 <19.0.0", "react": ">=16.8.0 <19.0.0", "react-dom": ">=16.8.0 <19.0.0" } }, "node_modules/@fluentui/react-component-event-listener": { "version": "0.51.7", "resolved": "https://registry.npmjs.org/@fluentui/react-component-event-listener/-/react-component-event-listener-0.51.7.tgz", "integrity": "sha512-NjVm+crN0T9A7vITL8alZeHnuV8zi2gos0nezU/2YOxaUAB9E4zKiPxt/6k5U50rJs/gj8Nu45iXxnjO41HbZg==", "dependencies": { "@babel/runtime": "^7.10.4" }, "peerDependencies": { "react": "^16.8.0 || ^17", "react-dom": "^16.8.0 || ^17" } }, "node_modules/@fluentui/react-component-ref": { "version": "0.51.7", "resolved": "https://registry.npmjs.org/@fluentui/react-component-ref/-/react-component-ref-0.51.7.tgz", "integrity": "sha512-CX27jVJYaFoBCWpuWAizQZ2se137ku1dmDyn8sw+ySNJa+kkQf7LnMydiPW5K7cRdUSqUJW3eS4EjKRvVAx8xA==", "dependencies": { "@babel/runtime": "^7.10.4", "react-is": "^16.6.3" }, "peerDependencies": { "react": "^16.8.0 || ^17", "react-dom": "^16.8.0 || ^17" } }, "node_modules/@fluentui/react-component-ref/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/@fluentui/react-focus": { "version": "8.8.30", "resolved": "https://registry.npmjs.org/@fluentui/react-focus/-/react-focus-8.8.30.tgz", "integrity": "sha512-dKQQtNTZbQOE+u/Tmh7AbtJPSpzQNI0L8o55a22y4U7s33rizUd++CIiToXsB+bPvlotcmpZswZQ8V06zM4KIw==", "dependencies": { "@fluentui/keyboard-key": "^0.4.11", "@fluentui/merge-styles": "^8.5.12", "@fluentui/set-version": "^8.2.11", "@fluentui/style-utilities": "^8.9.16", "@fluentui/utilities": "^8.13.18", "tslib": "^2.1.0" }, "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", "react": ">=16.8.0 <19.0.0" } }, "node_modules/@fluentui/react-hooks": { "version": "8.6.29", "resolved": "https://registry.npmjs.org/@fluentui/react-hooks/-/react-hooks-8.6.29.tgz", "integrity": "sha512-MeVevmGJtrYxdhoarrkVWE0Hs4XdzOc9A3tiOjMBIcwOvoOYOAoOELoHK/wuulPVwUn2R9Y+7JpJ6oCe4ImdJw==", "dependencies": { "@fluentui/react-window-provider": "^2.2.15", "@fluentui/set-version": "^8.2.11", "@fluentui/utilities": "^8.13.18", "tslib": "^2.1.0" }, "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", "react": ">=16.8.0 <19.0.0" } }, "node_modules/@fluentui/react-portal-compat-context": { "version": "9.0.6", "resolved": "https://registry.npmjs.org/@fluentui/react-portal-compat-context/-/react-portal-compat-context-9.0.6.tgz", "integrity": "sha512-HUt0/YXKRB4chtzlGbZ+7y7FHFyqaI0CeMFAe/QBXVOiOwA01QOr2j4Uky+30vupspIt6mjodLanuw1jMybmqQ==", "dependencies": { "@swc/helpers": "^0.4.14" }, "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", "react": ">=16.8.0 <19.0.0" } }, "node_modules/@fluentui/react-window-provider": { "version": "2.2.15", "resolved": "https://registry.npmjs.org/@fluentui/react-window-provider/-/react-window-provider-2.2.15.tgz", "integrity": "sha512-RraWvRe7wakpPJRBX2tlCV/cybOKiqLJ1UBLPNf5xq7ZIs0T0g/hh3G3Zb5teOeipjuRnl6srkdDUT9Dy9wrBg==", "dependencies": { "@fluentui/set-version": "^8.2.11", "tslib": "^2.1.0" }, "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", "react": ">=16.8.0 <19.0.0" } }, "node_modules/@fluentui/set-version": { "version": "8.2.11", "resolved": "https://registry.npmjs.org/@fluentui/set-version/-/set-version-8.2.11.tgz", "integrity": "sha512-UI03tysau/adBO1a3q4uFZWQ3lfkiFcAWIFng4k5odWcCokfCm5IxA0urKqj5W5JRYdyoBUaq8QbcNGkFB4dCw==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/@fluentui/style-utilities": { "version": "8.9.16", "resolved": "https://registry.npmjs.org/@fluentui/style-utilities/-/style-utilities-8.9.16.tgz", "integrity": "sha512-8hS5HscCFYvcWjAdk37frPZJZthr7f/cu5db7gjrPy+DEhf13WAZRHsropWm17+8GhJhvKt98BQf/Kzxtt34Eg==", "dependencies": { "@fluentui/merge-styles": "^8.5.12", "@fluentui/set-version": "^8.2.11", "@fluentui/theme": "^2.6.34", "@fluentui/utilities": "^8.13.18", "@microsoft/load-themed-styles": "^1.10.26", "tslib": "^2.1.0" } }, "node_modules/@fluentui/theme": { "version": "2.6.34", "resolved": "https://registry.npmjs.org/@fluentui/theme/-/theme-2.6.34.tgz", "integrity": "sha512-2Ssi3sX2snnbPJ4PmxbpCDCGePRE36tvGj2qKgdKiSh/fPVsg1b+Q50YlpFl9sXmbhl1uFmxjAx6WPsVGTl7vQ==", "dependencies": { "@fluentui/merge-styles": "^8.5.12", "@fluentui/set-version": "^8.2.11", "@fluentui/utilities": "^8.13.18", "tslib": "^2.1.0" }, "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", "react": ">=16.8.0 <19.0.0" } }, "node_modules/@fluentui/utilities": { "version": "8.13.18", "resolved": "https://registry.npmjs.org/@fluentui/utilities/-/utilities-8.13.18.tgz", "integrity": "sha512-/0rX9EzltLKwU1SS14VV7agWoOzruVTU3oagZq1QgFAvoj8qi7fNqvSX/VEeRy+0gmbsCkrEViUPkmC7drKzPg==", "dependencies": { "@fluentui/dom-utilities": "^2.2.11", "@fluentui/merge-styles": "^8.5.12", "@fluentui/set-version": "^8.2.11", "tslib": "^2.1.0" }, "peerDependencies": { "@types/react": ">=16.8.0 <19.0.0", "react": ">=16.8.0 <19.0.0" } }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" }, "node_modules/@hapi/topo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dependencies": { "@hapi/hoek": "^9.0.0" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "engines": { "node": ">=12.22" }, "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/object-schema": { "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==", "dev": true }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@hypnosphi/create-react-context": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz", "integrity": "sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A==", "dependencies": { "gud": "^1.0.0", "warning": "^4.0.3" }, "peerDependencies": { "prop-types": "^15.0.0", "react": ">=0.14.0" } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { "node": ">=12" } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "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" }, "engines": { "node": ">=8" } }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/console": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "jest-message-util": "^29.6.2", "jest-util": "^29.6.2", "slash": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/console/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@jest/console/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@jest/console/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/@jest/console/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/@jest/console/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/console/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/console/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/@jest/core": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", "dev": true, "dependencies": { "@jest/console": "^29.6.2", "@jest/reporters": "^29.6.2", "@jest/test-result": "^29.6.2", "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "jest-changed-files": "^29.5.0", "jest-config": "^29.6.2", "jest-haste-map": "^29.6.2", "jest-message-util": "^29.6.2", "jest-regex-util": "^29.4.3", "jest-resolve": "^29.6.2", "jest-resolve-dependencies": "^29.6.2", "jest-runner": "^29.6.2", "jest-runtime": "^29.6.2", "jest-snapshot": "^29.6.2", "jest-util": "^29.6.2", "jest-validate": "^29.6.2", "jest-watcher": "^29.6.2", "micromatch": "^4.0.4", "pretty-format": "^29.6.2", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { "optional": true } } }, "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@jest/core/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@jest/core/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/@jest/core/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/@jest/core/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/core/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/core/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/@jest/environment": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", "dev": true, "dependencies": { "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "jest-mock": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", "dev": true, "dependencies": { "expect": "^29.6.2", "jest-snapshot": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", "dev": true, "dependencies": { "jest-get-type": "^29.4.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", "jest-message-util": "^29.6.2", "jest-mock": "^29.6.2", "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/expect": "^29.6.2", "@jest/types": "^29.6.1", "jest-mock": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.6.2", "@jest/test-result": "^29.6.2", "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.3", "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-message-util": "^29.6.2", "jest-util": "^29.6.2", "jest-worker": "^29.6.2", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", "v8-to-istanbul": "^9.0.1" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { "optional": true } } }, "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@jest/reporters/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@jest/reporters/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/@jest/reporters/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/@jest/reporters/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/reporters/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/@jest/schemas": { "version": "29.6.0", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", "dependencies": { "@sinclair/typebox": "^0.27.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/source-map": { "version": "29.6.0", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-result": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", "dev": true, "dependencies": { "@jest/console": "^29.6.2", "@jest/types": "^29.6.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-sequencer": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", "dev": true, "dependencies": { "@jest/test-result": "^29.6.2", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.6.2", "slash": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/test-sequencer/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/transform": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.1", "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.6.2", "jest-regex-util": "^29.4.3", "jest-util": "^29.6.2", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", "write-file-atomic": "^4.0.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/transform/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@jest/transform/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@jest/transform/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/@jest/transform/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/@jest/transform/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "node_modules/@jest/transform/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/transform/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/transform/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/@jest/types": { "version": "29.6.1", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", "dependencies": { "@jest/schemas": "^29.6.0", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types/node_modules/ansi-styles": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@jest/types/node_modules/chalk": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@jest/types/node_modules/color-convert": { "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" }, "engines": { "node": ">=7.0.0" } }, "node_modules/@jest/types/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@jest/types/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/@jest/types/node_modules/supports-color": { "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" }, "engines": { "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.19", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@leichtgewicht/ip-codec": { "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==" }, "node_modules/@lerna/child-process": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-6.6.2.tgz", "integrity": "sha512-QyKIWEnKQFnYu2ey+SAAm1A5xjzJLJJj3bhIZd3QKyXKKjaJ0hlxam/OsWSltxTNbcyH1jRJjC6Cxv31usv0Ag==", "dev": true, "dependencies": { "chalk": "^4.1.0", "execa": "^5.0.0", "strong-log-transformer": "^2.1.0" }, "engines": { "node": "^14.17.0 || >=16.0.0" } }, "node_modules/@lerna/child-process/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@lerna/child-process/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@lerna/child-process/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/@lerna/child-process/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/@lerna/child-process/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@lerna/child-process/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/@lerna/create": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/@lerna/create/-/create-6.6.2.tgz", "integrity": "sha512-xQ+1Y7D+9etvUlE+unhG/TwmM6XBzGIdFBaNoW8D8kyOa9M2Jf3vdEtAxVa7mhRz66CENfhL/+I/QkVaa7pwbQ==", "dev": true, "dependencies": { "@lerna/child-process": "6.6.2", "dedent": "^0.7.0", "fs-extra": "^9.1.0", "init-package-json": "^3.0.2", "npm-package-arg": "8.1.1", "p-reduce": "^2.1.0", "pacote": "15.1.1", "pify": "^5.0.0", "semver": "^7.3.4", "slash": "^3.0.0", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^4.0.0", "yargs-parser": "20.2.4" }, "engines": { "node": "^14.17.0 || >=16.0.0" } }, "node_modules/@lerna/create/node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, "node_modules/@lerna/create/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { "node": ">=10" } }, "node_modules/@lerna/create/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/@lerna/create/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@lerna/create/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@lerna/create/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/@lerna/create/node_modules/yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/@lerna/legacy-package-management": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/@lerna/legacy-package-management/-/legacy-package-management-6.6.2.tgz", "integrity": "sha512-0hZxUPKnHwehUO2xC4ldtdX9bW0W1UosxebDIQlZL2STnZnA2IFmIk2lJVUyFW+cmTPQzV93jfS0i69T9Z+teg==", "dev": true, "dependencies": { "@npmcli/arborist": "6.2.3", "@npmcli/run-script": "4.1.7", "@nrwl/devkit": ">=15.5.2 < 16", "@octokit/rest": "19.0.3", "byte-size": "7.0.0", "chalk": "4.1.0", "clone-deep": "4.0.1", "cmd-shim": "5.0.0", "columnify": "1.6.0", "config-chain": "1.1.12", "conventional-changelog-core": "4.2.4", "conventional-recommended-bump": "6.1.0", "cosmiconfig": "7.0.0", "dedent": "0.7.0", "dot-prop": "6.0.1", "execa": "5.0.0", "file-url": "3.0.0", "find-up": "5.0.0", "fs-extra": "9.1.0", "get-port": "5.1.1", "get-stream": "6.0.0", "git-url-parse": "13.1.0", "glob-parent": "5.1.2", "globby": "11.1.0", "graceful-fs": "4.2.10", "has-unicode": "2.0.1", "inquirer": "8.2.4", "is-ci": "2.0.0", "is-stream": "2.0.0", "libnpmpublish": "7.1.4", "load-json-file": "6.2.0", "make-dir": "3.1.0", "minimatch": "3.0.5", "multimatch": "5.0.0", "node-fetch": "2.6.7", "npm-package-arg": "8.1.1", "npm-packlist": "5.1.1", "npm-registry-fetch": "14.0.3", "npmlog": "6.0.2", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-queue": "6.6.2", "p-waterfall": "2.1.1", "pacote": "15.1.1", "pify": "5.0.0", "pretty-format": "29.4.3", "read-cmd-shim": "3.0.0", "read-package-json": "5.0.1", "resolve-from": "5.0.0", "semver": "7.3.8", "signal-exit": "3.0.7", "slash": "3.0.0", "ssri": "9.0.1", "strong-log-transformer": "2.1.0", "tar": "6.1.11", "temp-dir": "1.0.0", "tempy": "1.0.0", "upath": "2.0.1", "uuid": "8.3.2", "write-file-atomic": "4.0.1", "write-pkg": "4.0.0", "yargs": "16.2.0" }, "engines": { "node": "^14.17.0 || >=16.0.0" } }, "node_modules/@lerna/legacy-package-management/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@lerna/legacy-package-management/node_modules/chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@lerna/legacy-package-management/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/@lerna/legacy-package-management/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/@lerna/legacy-package-management/node_modules/cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, "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" }, "engines": { "node": ">=10" } }, "node_modules/@lerna/legacy-package-management/node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, "node_modules/@lerna/legacy-package-management/node_modules/execa": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/@lerna/legacy-package-management/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@lerna/legacy-package-management/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { "node": ">=10" } }, "node_modules/@lerna/legacy-package-management/node_modules/get-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@lerna/legacy-package-management/node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "node_modules/@lerna/legacy-package-management/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@lerna/legacy-package-management/node_modules/inquirer": { "version": "8.2.4", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", "ora": "^5.4.1", "run-async": "^2.4.0", "rxjs": "^7.5.5", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6", "wrap-ansi": "^7.0.0" }, "engines": { "node": ">=12.0.0" } }, "node_modules/@lerna/legacy-package-management/node_modules/inquirer/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@lerna/legacy-package-management/node_modules/is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@lerna/legacy-package-management/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@lerna/legacy-package-management/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/@lerna/legacy-package-management/node_modules/make-dir": { "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==", "dev": true, "dependencies": { "semver": "^6.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@lerna/legacy-package-management/node_modules/make-dir/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@lerna/legacy-package-management/node_modules/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/@lerna/legacy-package-management/node_modules/minipass": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@lerna/legacy-package-management/node_modules/npm-registry-fetch": { "version": "14.0.3", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.3.tgz", "integrity": "sha512-YaeRbVNpnWvsGOjX2wk5s85XJ7l1qQBGAp724h8e2CZFFhMSuw9enom7K1mWVUtvXO1uUSFIAPofQK0pPN0ZcA==", "dev": true, "dependencies": { "make-fetch-happen": "^11.0.0", "minipass": "^4.0.0", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^10.0.0", "proc-log": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@lerna/legacy-package-management/node_modules/npm-registry-fetch/node_modules/npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "dependencies": { "hosted-git-info": "^6.0.0", "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@lerna/legacy-package-management/node_modules/p-locate": { "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==", "dev": true, "dependencies": { "p-limit": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@lerna/legacy-package-management/node_modules/pretty-format": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", "dev": true, "dependencies": { "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@lerna/legacy-package-management/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@lerna/legacy-package-management/node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@lerna/legacy-package-management/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@lerna/legacy-package-management/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/@lerna/legacy-package-management/node_modules/validate-npm-package-name": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { "builtins": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@lerna/legacy-package-management/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/@lerna/legacy-package-management/node_modules/write-file-atomic": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/@lerna/legacy-package-management/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/@lerna/legacy-package-management/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "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" }, "engines": { "node": ">=10" } }, "node_modules/@lerna/legacy-package-management/node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/@material-ui/core": { "version": "4.12.4", "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz", "integrity": "sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==", "deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.", "dependencies": { "@babel/runtime": "^7.4.4", "@material-ui/styles": "^4.11.5", "@material-ui/system": "^4.12.2", "@material-ui/types": "5.1.0", "@material-ui/utils": "^4.11.3", "@types/react-transition-group": "^4.2.0", "clsx": "^1.0.4", "hoist-non-react-statics": "^3.3.2", "popper.js": "1.16.1-lts", "prop-types": "^15.7.2", "react-is": "^16.8.0 || ^17.0.0", "react-transition-group": "^4.4.0" }, "engines": { "node": ">=8.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/material-ui" }, "peerDependencies": { "@types/react": "^16.8.6 || ^17.0.0", "react": "^16.8.0 || ^17.0.0", "react-dom": "^16.8.0 || ^17.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@material-ui/core/node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/@material-ui/icons": { "version": "4.11.3", "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz", "integrity": "sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA==", "dev": true, "dependencies": { "@babel/runtime": "^7.4.4" }, "engines": { "node": ">=8.0.0" }, "peerDependencies": { "@material-ui/core": "^4.0.0", "@types/react": "^16.8.6 || ^17.0.0", "react": "^16.8.0 || ^17.0.0", "react-dom": "^16.8.0 || ^17.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@material-ui/styles": { "version": "4.11.5", "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.5.tgz", "integrity": "sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA==", "deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.", "dependencies": { "@babel/runtime": "^7.4.4", "@emotion/hash": "^0.8.0", "@material-ui/types": "5.1.0", "@material-ui/utils": "^4.11.3", "clsx": "^1.0.4", "csstype": "^2.5.2", "hoist-non-react-statics": "^3.3.2", "jss": "^10.5.1", "jss-plugin-camel-case": "^10.5.1", "jss-plugin-default-unit": "^10.5.1", "jss-plugin-global": "^10.5.1", "jss-plugin-nested": "^10.5.1", "jss-plugin-props-sort": "^10.5.1", "jss-plugin-rule-value-function": "^10.5.1", "jss-plugin-vendor-prefixer": "^10.5.1", "prop-types": "^15.7.2" }, "engines": { "node": ">=8.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/material-ui" }, "peerDependencies": { "@types/react": "^16.8.6 || ^17.0.0", "react": "^16.8.0 || ^17.0.0", "react-dom": "^16.8.0 || ^17.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@material-ui/styles/node_modules/@emotion/hash": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" }, "node_modules/@material-ui/styles/node_modules/csstype": { "version": "2.6.21", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, "node_modules/@material-ui/system": { "version": "4.12.2", "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.12.2.tgz", "integrity": "sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw==", "dependencies": { "@babel/runtime": "^7.4.4", "@material-ui/utils": "^4.11.3", "csstype": "^2.5.2", "prop-types": "^15.7.2" }, "engines": { "node": ">=8.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/material-ui" }, "peerDependencies": { "@types/react": "^16.8.6 || ^17.0.0", "react": "^16.8.0 || ^17.0.0", "react-dom": "^16.8.0 || ^17.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@material-ui/system/node_modules/csstype": { "version": "2.6.21", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, "node_modules/@material-ui/types": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz", "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==", "peerDependencies": { "@types/react": "*" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@material-ui/utils": { "version": "4.11.3", "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.3.tgz", "integrity": "sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==", "dependencies": { "@babel/runtime": "^7.4.4", "prop-types": "^15.7.2", "react-is": "^16.8.0 || ^17.0.0" }, "engines": { "node": ">=8.0.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0", "react-dom": "^16.8.0 || ^17.0.0" } }, "node_modules/@material-ui/utils/node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", "dependencies": { "@babel/core": "7.12.9", "@babel/plugin-syntax-jsx": "7.12.1", "@babel/plugin-syntax-object-rest-spread": "7.8.3", "@mdx-js/util": "1.6.22", "babel-plugin-apply-mdx-type-prop": "1.6.22", "babel-plugin-extract-import-names": "1.6.22", "camelcase-css": "2.0.1", "detab": "2.0.4", "hast-util-raw": "6.0.1", "lodash.uniq": "4.5.0", "mdast-util-to-hast": "10.0.1", "remark-footnotes": "2.0.0", "remark-mdx": "1.6.22", "remark-parse": "8.0.3", "remark-squeeze-paragraphs": "4.0.0", "style-to-object": "0.3.0", "unified": "9.2.0", "unist-builder": "2.0.3", "unist-util-visit": "2.0.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/@mdx-js/mdx/node_modules/@babel/core": { "version": "7.12.9", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.12.5", "@babel/helper-module-transforms": "^7.12.1", "@babel/helpers": "^7.12.5", "@babel/parser": "^7.12.7", "@babel/template": "^7.12.7", "@babel/traverse": "^7.12.9", "@babel/types": "^7.12.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/babel" } }, "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@mdx-js/mdx/node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "engines": { "node": ">=8" } }, "node_modules/@mdx-js/mdx/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } }, "node_modules/@mdx-js/mdx/node_modules/unified": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/@mdx-js/react": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0" } }, "node_modules/@mdx-js/util": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/@microsoft/load-themed-styles": { "version": "1.10.295", "resolved": "https://registry.npmjs.org/@microsoft/load-themed-styles/-/load-themed-styles-1.10.295.tgz", "integrity": "sha512-W+IzEBw8a6LOOfRJM02dTT7BDZijxm+Z7lhtOAz1+y9vQm1Kdz9jlAO+qCEKsfxtUOmKilW8DIRqFw2aUgKeGg==" }, "node_modules/@monaco-editor/loader": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.3.3.tgz", "integrity": "sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q==", "dev": true, "dependencies": { "state-local": "^1.0.6" }, "peerDependencies": { "monaco-editor": ">= 0.21.0 < 1" } }, "node_modules/@monaco-editor/react": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.5.1.tgz", "integrity": "sha512-NNDFdP+2HojtNhCkRfE6/D6ro6pBNihaOzMbGK84lNWzRu+CfBjwzGt4jmnqimLuqp5yE5viHS2vi+QOAnD5FQ==", "dev": true, "dependencies": { "@monaco-editor/loader": "^1.3.3" }, "peerDependencies": { "monaco-editor": ">= 0.25.0 < 1", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/@mui/base": { "version": "5.0.0-beta.9", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.9.tgz", "integrity": "sha512-gm6gnPnc/lS5Z3neH0iuOrK7IbS02+oh6KsMtXYLhI6bJpHs+PNWFsBmISx7x4FSPVJZvZkb8Bw6pEXpIMFt7Q==", "dependencies": { "@babel/runtime": "^7.22.6", "@emotion/is-prop-valid": "^1.2.1", "@mui/types": "^7.2.4", "@mui/utils": "^5.14.3", "@popperjs/core": "^2.11.8", "clsx": "^2.0.0", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0", "react-dom": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@mui/base/node_modules/clsx": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", "engines": { "node": ">=6" } }, "node_modules/@mui/core-downloads-tracker": { "version": "5.14.3", "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.3.tgz", "integrity": "sha512-QxvrcDqphZoXRjsAmCaQylmWjC/8/qKWwIde1MJMna5YIst3R9O0qhKRPu36/OE2d8AeTbCVjRcRvNqhhW8jyg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { "version": "5.14.3", "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.3.tgz", "integrity": "sha512-XkxWPhageu1OPUm2LWjo5XqeQ0t2xfGe8EiLkRW9oz2LHMMZmijvCxulhgquUVTF1DnoSh+3KoDLSsoAFtVNVw==", "dev": true, "dependencies": { "@babel/runtime": "^7.22.6" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "@mui/material": "^5.0.0", "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@mui/material": { "version": "5.14.3", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.3.tgz", "integrity": "sha512-dlu4SOcCp9Cy+wkcfZ/ns9ZkP40nr/WPgqxX0HmrE0o+dkE1ropY9BbHsLrTlYJCko8yzcC8bLghrD4xqZG1og==", "dependencies": { "@babel/runtime": "^7.22.6", "@mui/base": "5.0.0-beta.9", "@mui/core-downloads-tracker": "^5.14.3", "@mui/system": "^5.14.3", "@mui/types": "^7.2.4", "@mui/utils": "^5.14.3", "@types/react-transition-group": "^4.4.6", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1", "react-is": "^18.2.0", "react-transition-group": "^4.4.5" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0", "react-dom": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@emotion/react": { "optional": true }, "@emotion/styled": { "optional": true }, "@types/react": { "optional": true } } }, "node_modules/@mui/material/node_modules/clsx": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", "engines": { "node": ">=6" } }, "node_modules/@mui/material/node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/@mui/private-theming": { "version": "5.13.7", "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.7.tgz", "integrity": "sha512-qbSr+udcij5F9dKhGX7fEdx2drXchq7htLNr2Qg2Ma+WJ6q0ERlEqGSBiPiVDJkptcjeVL4DGmcf1wl5+vD4EA==", "dependencies": { "@babel/runtime": "^7.22.5", "@mui/utils": "^5.13.7", "prop-types": "^15.8.1" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@mui/styled-engine": { "version": "5.13.2", "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", "dependencies": { "@babel/runtime": "^7.21.0", "@emotion/cache": "^11.11.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", "react": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@emotion/react": { "optional": true }, "@emotion/styled": { "optional": true } } }, "node_modules/@mui/styled-engine/node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/@mui/system": { "version": "5.14.3", "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.3.tgz", "integrity": "sha512-b+C+j9+75+/iIYSa+1S4eCMc9MDNrj9hzWfExJqS2GffuNocRagjBZFyjtMqsLWLxMxQIX8Cg6j0hAioiw+WfQ==", "dependencies": { "@babel/runtime": "^7.22.6", "@mui/private-theming": "^5.13.7", "@mui/styled-engine": "^5.13.2", "@mui/types": "^7.2.4", "@mui/utils": "^5.14.3", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@emotion/react": { "optional": true }, "@emotion/styled": { "optional": true }, "@types/react": { "optional": true } } }, "node_modules/@mui/system/node_modules/clsx": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", "engines": { "node": ">=6" } }, "node_modules/@mui/system/node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/@mui/types": { "version": "7.2.4", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", "peerDependencies": { "@types/react": "*" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@mui/utils": { "version": "5.14.3", "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.3.tgz", "integrity": "sha512-gZ6Etw+ppO43GYc1HFZSLjwd4DoZoa+RrYTD25wQLfzcSoPjVoC/zZqA2Lkq0zjgwGBQOSxKZI6jfp9uXR+kgw==", "dependencies": { "@babel/runtime": "^7.22.6", "@types/prop-types": "^15.7.5", "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0" } }, "node_modules/@mui/utils/node_modules/@types/react-is": { "version": "18.2.1", "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", "dependencies": { "@types/react": "*" } }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", "dev": true, "optional": true }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, "dependencies": { "eslint-scope": "5.1.1" } }, "node_modules/@nodelib/fs.scandir": { "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" }, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "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" }, "engines": { "node": ">= 8" } }, "node_modules/@npmcli/arborist": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-6.2.3.tgz", "integrity": "sha512-lpGOC2ilSJXcc2zfW9QtukcCTcMbl3fVI0z4wvFB2AFIl0C+Q6Wv7ccrpdrQa8rvJ1ZVuc6qkX7HVTyKlzGqKA==", "dev": true, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^3.1.0", "@npmcli/installed-package-contents": "^2.0.0", "@npmcli/map-workspaces": "^3.0.2", "@npmcli/metavuln-calculator": "^5.0.0", "@npmcli/name-from-folder": "^2.0.0", "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^3.0.0", "@npmcli/query": "^3.0.0", "@npmcli/run-script": "^6.0.0", "bin-links": "^4.0.1", "cacache": "^17.0.4", "common-ancestor-path": "^1.0.1", "hosted-git-info": "^6.1.1", "json-parse-even-better-errors": "^3.0.0", "json-stringify-nice": "^1.1.4", "minimatch": "^6.1.6", "nopt": "^7.0.0", "npm-install-checks": "^6.0.0", "npm-package-arg": "^10.1.0", "npm-pick-manifest": "^8.0.1", "npm-registry-fetch": "^14.0.3", "npmlog": "^7.0.1", "pacote": "^15.0.8", "parse-conflict-json": "^3.0.0", "proc-log": "^3.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", "ssri": "^10.0.1", "treeverse": "^3.0.0", "walk-up-path": "^1.0.0" }, "bin": { "arborist": "bin/index.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/arborist/node_modules/@npmcli/run-script": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^3.0.0", "@npmcli/promise-spawn": "^6.0.0", "node-gyp": "^9.0.0", "read-package-json-fast": "^3.0.0", "which": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/arborist/node_modules/are-we-there-yet": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz", "integrity": "sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA==", "dev": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^4.1.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/arborist/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@npmcli/arborist/node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "node_modules/@npmcli/arborist/node_modules/gauge": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz", "integrity": "sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==", "dev": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", "signal-exit": "^4.0.1", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "wide-align": "^1.1.5" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/arborist/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/@npmcli/arborist/node_modules/minimatch": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", "integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "dependencies": { "hosted-git-info": "^6.0.0", "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/arborist/node_modules/npmlog": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz", "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==", "dev": true, "dependencies": { "are-we-there-yet": "^4.0.0", "console-control-strings": "^1.1.0", "gauge": "^5.0.0", "set-blocking": "^2.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/arborist/node_modules/readable-stream": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", "dev": true, "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@npmcli/arborist/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/@npmcli/arborist/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@npmcli/arborist/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@npmcli/arborist/node_modules/ssri": { "version": "10.0.4", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", "dev": true, "dependencies": { "minipass": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/arborist/node_modules/string_decoder": { "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==", "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/@npmcli/arborist/node_modules/validate-npm-package-name": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { "builtins": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/arborist/node_modules/which": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/which.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/arborist/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/@npmcli/fs": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dev": true, "dependencies": { "semver": "^7.3.5" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/fs/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/@npmcli/fs/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@npmcli/fs/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/@npmcli/git": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", "dev": true, "dependencies": { "@npmcli/promise-spawn": "^6.0.0", "lru-cache": "^7.4.4", "npm-pick-manifest": "^8.0.0", "proc-log": "^3.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/git/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/@npmcli/git/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@npmcli/git/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/@npmcli/git/node_modules/which": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/which.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/git/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", "dev": true, "dependencies": { "npm-bundled": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" }, "bin": { "installed-package-contents": "lib/index.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/map-workspaces": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz", "integrity": "sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==", "dev": true, "dependencies": { "@npmcli/name-from-folder": "^2.0.0", "glob": "^10.2.2", "minimatch": "^9.0.0", "read-package-json-fast": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@npmcli/map-workspaces/node_modules/glob": { "version": "10.3.3", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/cjs/src/bin.js" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@npmcli/metavuln-calculator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz", "integrity": "sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q==", "dev": true, "dependencies": { "cacache": "^17.0.0", "json-parse-even-better-errors": "^3.0.0", "pacote": "^15.0.0", "semver": "^7.3.5" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/metavuln-calculator/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/@npmcli/metavuln-calculator/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@npmcli/metavuln-calculator/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/@npmcli/move-file": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/move-file/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@npmcli/name-from-folder": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/node-gyp": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/package-json": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-3.1.1.tgz", "integrity": "sha512-+UW0UWOYFKCkvszLoTwrYGrjNrT8tI5Ckeb/h+Z1y1fsNJEctl7HmerA5j2FgmoqFaLI2gsA1X9KgMFqx/bRmA==", "dev": true, "dependencies": { "@npmcli/git": "^4.1.0", "glob": "^10.2.2", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^5.0.0", "npm-normalize-package-bin": "^3.0.1", "proc-log": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/package-json/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@npmcli/package-json/node_modules/glob": { "version": "10.3.3", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/cjs/src/bin.js" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@npmcli/package-json/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@npmcli/promise-spawn": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", "dev": true, "dependencies": { "which": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/promise-spawn/node_modules/which": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/which.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/query": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.0.0.tgz", "integrity": "sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.10" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/run-script": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.7.tgz", "integrity": "sha512-WXr/MyM4tpKA4BotB81NccGAv8B48lNH0gRoILucbcAhTQXLCoi6HflMV3KdXubIqvP9SuLsFn68Z7r4jl+ppw==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", "node-gyp": "^9.0.0", "read-package-json-fast": "^2.0.3", "which": "^2.0.2" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/run-script/node_modules/@npmcli/node-gyp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/run-script/node_modules/@npmcli/promise-spawn": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", "dev": true, "dependencies": { "infer-owner": "^1.0.4" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/run-script/node_modules/json-parse-even-better-errors": { "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==", "dev": true }, "node_modules/@npmcli/run-script/node_modules/npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true }, "node_modules/@npmcli/run-script/node_modules/read-package-json-fast": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, "dependencies": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" }, "engines": { "node": ">=10" } }, "node_modules/@nrwl/cli": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.9.4.tgz", "integrity": "sha512-FoiGFCLpb/r4HXCM3KYqT0xteP+MRV6bIHjz3bdPHIDLmBNQQnRRaV2K47jtJ6zjh1eOU5UHKyDtDDYf80Idpw==", "dev": true, "dependencies": { "nx": "15.9.4" } }, "node_modules/@nrwl/devkit": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.9.4.tgz", "integrity": "sha512-mUX1kXTuPMdTzFxIzH+MsSNvdppOmstPDOEtiGFZJTuJ625ki0HhNJILO3N2mJ7MeMrLqIlAiNdvelQaObxYsQ==", "dev": true, "dependencies": { "ejs": "^3.1.7", "ignore": "^5.0.4", "semver": "7.3.4", "tmp": "~0.2.1", "tslib": "^2.3.0" }, "peerDependencies": { "nx": ">= 14.1 <= 16" } }, "node_modules/@nrwl/devkit/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/@nrwl/devkit/node_modules/semver": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@nrwl/devkit/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/@nrwl/nx-cloud": { "version": "15.3.5", "resolved": "https://registry.npmjs.org/@nrwl/nx-cloud/-/nx-cloud-15.3.5.tgz", "integrity": "sha512-JMKLY0HhdzQ/6jEvfL/EecPPdsdBIM0SyFrWAjikSJAh5MqhpFJWnr6FfTc5P57PJZ+IUNLkJ21VMuoTrA4+4w==", "dev": true, "dependencies": { "axios": "^0.21.2", "chalk": "4.1.0", "dotenv": "~10.0.0", "fs-extra": "^10.1.0", "node-machine-id": "^1.1.12", "strip-json-comments": "^3.1.1", "tar": "6.1.11", "yargs-parser": ">=21.0.1" }, "bin": { "nx-cloud": "bin/nx-cloud.js" } }, "node_modules/@nrwl/nx-cloud/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@nrwl/nx-cloud/node_modules/chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/@nrwl/nx-cloud/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/@nrwl/nx-cloud/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/@nrwl/nx-cloud/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/@nrwl/nx-cloud/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/@nrwl/nx-darwin-arm64": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.4.tgz", "integrity": "sha512-XnvrnT9BJsgThY/4xUcYtE077ERq/img8CkRj7MOOBNOh0/nVcR4LGbBKDHtwE3HPk0ikyS/SxRyNa9msvi3QQ==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "darwin" ], "engines": { "node": ">= 10" } }, "node_modules/@nrwl/nx-darwin-x64": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.4.tgz", "integrity": "sha512-WKSfSlpVMLchpXkax0geeUNyhvNxwO7qUz/s0/HJWBekt8fizwKDwDj1gP7fOu+YWb/tHiSscbR1km8PtdjhQw==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "darwin" ], "engines": { "node": ">= 10" } }, "node_modules/@nrwl/nx-linux-arm-gnueabihf": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.4.tgz", "integrity": "sha512-a/b4PP7lP/Cgrh0LjC4O2YTt5pyf4DQTGtuE8qlo8o486UiofCtk4QGJX72q80s23L0ejCaKY2ULKx/3zMLjuA==", "cpu": [ "arm" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">= 10" } }, "node_modules/@nrwl/nx-linux-arm64-gnu": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.4.tgz", "integrity": "sha512-ibBV8fMhSfLVd/2WzcDuUm32BoZsattuKkvMmOoyU6Pzoznc3AqyDjJR4xCIoAn5Rf+Nu1oeQONr5FAtb1Ugow==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">= 10" } }, "node_modules/@nrwl/nx-linux-arm64-musl": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.4.tgz", "integrity": "sha512-iIjvVYd7+uM4jVD461+PvU5XTALgSvJOODUaMRGOoDl0KlMuTe6pQZlw0eXjl5rcTd6paKaVFWT5j6awr8kj7w==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">= 10" } }, "node_modules/@nrwl/nx-linux-x64-gnu": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.4.tgz", "integrity": "sha512-q4OyH72mdrE4KellBWtwpr5EwfxHKNoFP9//7FAILO68ROh0rpMd7YQMlTB7T04UEUHjKEEsFGTlVXIee3Viwg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">= 10" } }, "node_modules/@nrwl/nx-linux-x64-musl": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.4.tgz", "integrity": "sha512-67+/XNMR1CgLPyeGX8jqSG6l8yYD0iiwUgcu1Vaxq6N05WwnqVisIW8XzLSRUtKt4WyVQgOWk3aspImpMVOG3Q==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">= 10" } }, "node_modules/@nrwl/nx-win32-arm64-msvc": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.4.tgz", "integrity": "sha512-2rEsq3eOGVCYpYJn2tTJkOGNJm/U8rP/FmqtZXYa6VJv/00XP3Gl00IXFEDaYV6rZo7SWqLxtEPUbjK5LwPzZA==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "win32" ], "engines": { "node": ">= 10" } }, "node_modules/@nrwl/nx-win32-x64-msvc": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.4.tgz", "integrity": "sha512-bogVju4Z/hy1jbppqaTNbmV1R4Kg0R5fKxXAXC2LaL7FL0dup31wPumdV+mXttXBNOBDjV8V/Oz1ZqdmxpOJUw==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "win32" ], "engines": { "node": ">= 10" } }, "node_modules/@nrwl/tao": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.9.4.tgz", "integrity": "sha512-m90iz8UsXx1rgPm1dxsBQjSrCViWYZIrp8bpwjSCW24j3kifyilYSXGuKaRwZwUn7eNmH/kZcI9/8qeGIPF4Sg==", "dev": true, "dependencies": { "nx": "15.9.4" }, "bin": { "tao": "index.js" } }, "node_modules/@octokit/auth-token": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", "dev": true, "engines": { "node": ">= 14" } }, "node_modules/@octokit/core": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", "dev": true, "dependencies": { "@octokit/auth-token": "^3.0.0", "@octokit/graphql": "^5.0.0", "@octokit/request": "^6.0.0", "@octokit/request-error": "^3.0.0", "@octokit/types": "^9.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/endpoint": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", "dev": true, "dependencies": { "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/endpoint/node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@octokit/graphql": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, "dependencies": { "@octokit/request": "^6.0.0", "@octokit/types": "^9.0.0", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/openapi-types": { "version": "18.0.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==", "dev": true }, "node_modules/@octokit/plugin-enterprise-rest": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz", "integrity": "sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==", "dev": true, "dependencies": { "@octokit/types": "^6.41.0" }, "engines": { "node": ">= 14" }, "peerDependencies": { "@octokit/core": ">=4" } }, "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { "version": "12.11.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { "version": "6.41.0", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", "dev": true, "dependencies": { "@octokit/openapi-types": "^12.11.0" } }, "node_modules/@octokit/plugin-request-log": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, "peerDependencies": { "@octokit/core": ">=3" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.8.1.tgz", "integrity": "sha512-QrlaTm8Lyc/TbU7BL/8bO49vp+RZ6W3McxxmmQTgYxf2sWkO8ZKuj4dLhPNJD6VCUW1hetCmeIM0m6FTVpDiEg==", "dev": true, "dependencies": { "@octokit/types": "^8.1.1", "deprecation": "^2.3.1" }, "engines": { "node": ">= 14" }, "peerDependencies": { "@octokit/core": ">=3" } }, "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==", "dev": true }, "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.2.1.tgz", "integrity": "sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw==", "dev": true, "dependencies": { "@octokit/openapi-types": "^14.0.0" } }, "node_modules/@octokit/request": { "version": "6.2.8", "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", "dev": true, "dependencies": { "@octokit/endpoint": "^7.0.0", "@octokit/request-error": "^3.0.0", "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/request-error": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "dev": true, "dependencies": { "@octokit/types": "^9.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/request/node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/@octokit/rest": { "version": "19.0.3", "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", "dev": true, "dependencies": { "@octokit/core": "^4.0.0", "@octokit/plugin-paginate-rest": "^3.0.0", "@octokit/plugin-request-log": "^1.0.4", "@octokit/plugin-rest-endpoint-methods": "^6.0.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/types": { "version": "9.3.2", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", "dev": true, "dependencies": { "@octokit/openapi-types": "^18.0.0" } }, "node_modules/@parcel/watcher": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", "dev": true, "hasInstallScript": true, "dependencies": { "node-addon-api": "^3.2.1", "node-gyp-build": "^4.3.0" }, "engines": { "node": ">= 10.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "optional": true, "engines": { "node": ">=14" } }, "node_modules/@polka/url": { "version": "1.0.0-next.21", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, "node_modules/@rc-component/portal": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.2.tgz", "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", "dependencies": { "@babel/runtime": "^7.18.0", "classnames": "^2.3.2", "rc-util": "^5.24.4" }, "engines": { "node": ">=8.x" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/@reach/alert": { "version": "0.13.2", "resolved": "https://registry.npmjs.org/@reach/alert/-/alert-0.13.2.tgz", "integrity": "sha512-LDz83AXCrClyq/MWe+0vaZfHp1Ytqn+kgL5VxG7rirUvmluWaj/snxzfNPWn0Ma4K2YENmXXRC/iHt5X95SqIg==", "dependencies": { "@reach/utils": "0.13.2", "@reach/visually-hidden": "0.13.2", "prop-types": "^15.7.2", "tslib": "^2.1.0" }, "peerDependencies": { "react": "^16.8.0 || 17.x", "react-dom": "^16.8.0 || 17.x" } }, "node_modules/@reach/utils": { "version": "0.13.2", "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.13.2.tgz", "integrity": "sha512-3ir6cN60zvUrwjOJu7C6jec/samqAeyAB12ZADK+qjnmQPdzSYldrFWwDVV5H0WkhbYXR3uh+eImu13hCetNPQ==", "dependencies": { "@types/warning": "^3.0.0", "tslib": "^2.1.0", "warning": "^4.0.3" }, "peerDependencies": { "react": "^16.8.0 || 17.x", "react-dom": "^16.8.0 || 17.x" } }, "node_modules/@reach/visually-hidden": { "version": "0.13.2", "resolved": "https://registry.npmjs.org/@reach/visually-hidden/-/visually-hidden-0.13.2.tgz", "integrity": "sha512-sPZwNS0/duOuG0mYwE5DmgEAzW9VhgU3aIt1+mrfT/xiT9Cdncqke+kRBQgU708q/Ttm9tWsoHni03nn/SuPTQ==", "dependencies": { "prop-types": "^15.7.2", "tslib": "^2.1.0" }, "peerDependencies": { "react": "^16.8.0 || 17.x", "react-dom": "^16.8.0 || 17.x" } }, "node_modules/@react-icons/all-files": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@react-icons/all-files/-/all-files-4.1.0.tgz", "integrity": "sha512-hxBI2UOuVaI3O/BhQfhtb4kcGn9ft12RWAFVMUeNjqqhLsHvFtzIkFaptBJpFDANTKoDfdVoHTKZDlwKCACbMQ==", "peerDependencies": { "react": "*" } }, "node_modules/@restart/context": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz", "integrity": "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q==", "peerDependencies": { "react": ">=16.3.2" } }, "node_modules/@restart/hooks": { "version": "0.4.11", "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.11.tgz", "integrity": "sha512-Ft/ncTULZN6ldGHiF/k5qt72O8JyRMOeg0tApvCni8LkoiEahO+z3TNxfXIVGy890YtWVDvJAl662dVJSJXvMw==", "dependencies": { "dequal": "^2.0.3" }, "peerDependencies": { "react": ">=16.8.0" } }, "node_modules/@rjsf/antd": { "resolved": "packages/antd", "link": true }, "node_modules/@rjsf/bootstrap-4": { "resolved": "packages/bootstrap-4", "link": true }, "node_modules/@rjsf/chakra-ui": { "resolved": "packages/chakra-ui", "link": true }, "node_modules/@rjsf/core": { "resolved": "packages/core", "link": true }, "node_modules/@rjsf/fluent-ui": { "resolved": "packages/fluent-ui", "link": true }, "node_modules/@rjsf/material-ui": { "resolved": "packages/material-ui", "link": true }, "node_modules/@rjsf/mui": { "resolved": "packages/mui", "link": true }, "node_modules/@rjsf/playground": { "resolved": "packages/playground", "link": true }, "node_modules/@rjsf/semantic-ui": { "resolved": "packages/semantic-ui", "link": true }, "node_modules/@rjsf/utils": { "resolved": "packages/utils", "link": true }, "node_modules/@rjsf/validator-ajv6": { "resolved": "packages/validator-ajv6", "link": true }, "node_modules/@rjsf/validator-ajv8": { "resolved": "packages/validator-ajv8", "link": true }, "node_modules/@rollup/plugin-replace": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz", "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", "magic-string": "^0.27.0" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0" }, "peerDependenciesMeta": { "rollup": { "optional": true } } }, "node_modules/@rollup/pluginutils": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^2.3.1" }, "engines": { "node": ">=14.0.0" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0" }, "peerDependenciesMeta": { "rollup": { "optional": true } } }, "node_modules/@semantic-ui-react/event-stack": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@semantic-ui-react/event-stack/-/event-stack-3.1.3.tgz", "integrity": "sha512-FdTmJyWvJaYinHrKRsMLDrz4tTMGdFfds299Qory53hBugiDvGC0tEJf+cHsi5igDwWb/CLOgOiChInHwq8URQ==", "dependencies": { "exenv": "^1.2.2", "prop-types": "^15.6.2" }, "peerDependencies": { "react": "^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", "dependencies": { "@hapi/hoek": "^9.0.0" } }, "node_modules/@sideway/formula": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sigstore/bundle": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.0.0.tgz", "integrity": "sha512-yLvrWDOh6uMOUlFCTJIZEnwOT9Xte7NPXUqVexEKGSF5XtBAuSg5du0kn3dRR0p47a4ah10Y0mNt8+uyeQXrBQ==", "dev": true, "dependencies": { "@sigstore/protobuf-specs": "^0.2.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@sigstore/protobuf-specs": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.0.tgz", "integrity": "sha512-8ZhZKAVfXjIspDWwm3D3Kvj0ddbJ0HqDZ/pOs5cx88HpT8mVsotFrg7H1UMnXOuDHz6Zykwxn4mxG3QLuN+RUg==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@sigstore/tuf": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", "dev": true, "dependencies": { "@sigstore/protobuf-specs": "^0.2.0", "tuf-js": "^1.1.7" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "engines": { "node": ">=6" } }, "node_modules/@sinonjs/commons": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/commons/node_modules/type-detect": { "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==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/@sinonjs/fake-timers": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@sinonjs/samsam": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz", "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.6.0", "lodash.get": "^4.4.2", "type-detect": "^4.0.8" } }, "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/samsam/node_modules/type-detect": { "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==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/@sinonjs/text-encoding": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, "node_modules/@slorber/static-site-generator-webpack-plugin": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", "dependencies": { "eval": "^0.1.8", "p-map": "^4.0.0", "webpack-sources": "^3.2.2" }, "engines": { "node": ">=14" } }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", "engines": { "node": ">=14" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", "engines": { "node": ">=14" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-svg-dynamic-title": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-svg-em-dimensions": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-transform-react-native-svg": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-transform-svg-component": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", "engines": { "node": ">=12" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-preset": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", "dependencies": { "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", "@svgr/babel-plugin-remove-jsx-attribute": "*", "@svgr/babel-plugin-remove-jsx-empty-expression": "*", "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", "@svgr/babel-plugin-transform-svg-component": "^6.5.1" }, "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/core": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", "dependencies": { "@babel/core": "^7.19.6", "@svgr/babel-preset": "^6.5.1", "@svgr/plugin-jsx": "^6.5.1", "camelcase": "^6.2.0", "cosmiconfig": "^7.0.1" }, "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" } }, "node_modules/@svgr/core/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@svgr/hast-util-to-babel-ast": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", "dependencies": { "@babel/types": "^7.20.0", "entities": "^4.4.0" }, "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" } }, "node_modules/@svgr/plugin-jsx": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", "dependencies": { "@babel/core": "^7.19.6", "@svgr/babel-preset": "^6.5.1", "@svgr/hast-util-to-babel-ast": "^6.5.1", "svg-parser": "^2.0.4" }, "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { "@svgr/core": "^6.0.0" } }, "node_modules/@svgr/plugin-svgo": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", "dependencies": { "cosmiconfig": "^7.0.1", "deepmerge": "^4.2.2", "svgo": "^2.8.0" }, "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { "@svgr/core": "*" } }, "node_modules/@svgr/webpack": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", "dependencies": { "@babel/core": "^7.19.6", "@babel/plugin-transform-react-constant-elements": "^7.18.12", "@babel/preset-env": "^7.19.4", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@svgr/core": "^6.5.1", "@svgr/plugin-jsx": "^6.5.1", "@svgr/plugin-svgo": "^6.5.1" }, "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" } }, "node_modules/@swc/helpers": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dependencies": { "defer-to-connect": "^1.0.1" }, "engines": { "node": ">=6" } }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, "engines": { "node": ">= 10" } }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "engines": { "node": ">=10.13.0" } }, "node_modules/@tsconfig/docusaurus": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@tsconfig/docusaurus/-/docusaurus-1.0.7.tgz", "integrity": "sha512-ffTXxGIP/IRMCjuzHd6M4/HdIrw1bMfC7Bv8hMkTadnePkpe0lG0oDSdbRpSDZb2rQMAgpbWiR10BvxvNYwYrg==", "dev": true }, "node_modules/@tufjs/canonical-json": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@tufjs/models": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", "dev": true, "dependencies": { "@tufjs/canonical-json": "1.0.0", "minimatch": "^9.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@tufjs/models/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@tufjs/models/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@types/babel__core": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "node_modules/@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==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@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==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" } }, "node_modules/@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": "*" } }, "node_modules/@types/bonjour": { "version": "3.5.10", "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" } }, "node_modules/@types/eslint": { "version": "8.44.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { "version": "3.7.4", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" }, "node_modules/@types/express": { "version": "4.17.17", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { "version": "4.17.35", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "node_modules/@types/graceful-fs": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/hast": { "version": "2.3.5", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.5.tgz", "integrity": "sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==", "dependencies": { "@types/unist": "^2" } }, "node_modules/@types/history": { "version": "4.7.11", "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" }, "node_modules/@types/html-minifier-terser": { "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==" }, "node_modules/@types/http-errors": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==" }, "node_modules/@types/http-proxy": { "version": "1.17.11", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/invariant": { "version": "2.2.35", "resolved": "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.35.tgz", "integrity": "sha512-DxX1V9P8zdJPYQat1gHyY0xj3efl8gnMVjiM9iCY6y27lj+PoQWkgjt8jDqmovPqULkKVpKRg8J36iQiA+EtEg==" }, "node_modules/@types/istanbul-lib-coverage": { "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==" }, "node_modules/@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": "*" } }, "node_modules/@types/istanbul-reports": { "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": "*" } }, "node_modules/@types/jsdom": { "version": "20.0.1", "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", "dev": true, "dependencies": { "@types/node": "*", "@types/tough-cookie": "*", "parse5": "^7.0.0" } }, "node_modules/@types/json-schema": { "version": "7.0.12", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" }, "node_modules/@types/json-schema-merge-allof": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/@types/json-schema-merge-allof/-/json-schema-merge-allof-0.6.1.tgz", "integrity": "sha512-tBVtkCCbA1oF8vQ2cp2yuGLp0T2f0AZ2dAic64ZftoWQnKqrTYY/+PuiqPKX1XaxoR43ll/EkYcHnJbdbHUS2g==", "dev": true, "dependencies": { "@types/json-schema": "*" } }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "node_modules/@types/lodash": { "version": "4.14.196", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.196.tgz", "integrity": "sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==" }, "node_modules/@types/lodash.mergewith": { "version": "4.6.6", "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.6.tgz", "integrity": "sha512-RY/8IaVENjG19rxTZu9Nukqh0W2UrYgmBj5sdns4hWRZaV8PqR7wIKHFKzvOTjo4zVRV7sVI+yFhAJql12Kfqg==", "dependencies": { "@types/lodash": "*" } }, "node_modules/@types/mdast": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.12.tgz", "integrity": "sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==", "dependencies": { "@types/unist": "^2" } }, "node_modules/@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" }, "node_modules/@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, "node_modules/@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "node_modules/@types/node": { "version": "18.17.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.3.tgz", "integrity": "sha512-2x8HWtFk0S99zqVQABU9wTpr8wPoaDHZUcAkoTKH+nL7kPv3WUI9cRi/Kk5Mz4xdqXSqTkKP7IWNoQQYCnDsTA==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/parse5": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, "node_modules/@types/prettier": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", "dev": true }, "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@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==" }, "node_modules/@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==" }, "node_modules/@types/react": { "version": "17.0.62", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.62.tgz", "integrity": "sha512-eANCyz9DG8p/Vdhr0ZKST8JV12PhH2ACCDYlFw6DIO+D+ca+uP4jtEDEpVqXZrh/uZdXQGwk7whJa3ah5DtyLw==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { "version": "17.0.20", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.20.tgz", "integrity": "sha512-4pzIjSxDueZZ90F52mU3aPoogkHIoSIDG+oQ+wQK7Cy2B9S+MvOqY0uEA/qawKz381qrEDkvpwyt8Bm31I8sbA==", "dev": true, "dependencies": { "@types/react": "^17" } }, "node_modules/@types/react-frame-component": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/@types/react-frame-component/-/react-frame-component-4.1.3.tgz", "integrity": "sha512-Ol0pg5m35vTMlam9IJW2iY0O+Qh+5jbeZmVJ2OR/mokWN7AYoMN9FFxj5AmHfwij8bGQctQhbe7o0FoG+axLGA==", "dev": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-is": { "version": "17.0.4", "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.4.tgz", "integrity": "sha512-FLzd0K9pnaEvKz4D1vYxK9JmgQPiGk1lu23o1kqGsLeT0iPbRSF7b76+S5T9fD8aRa0B8bY7I/3DebEj+1ysBA==", "dev": true, "dependencies": { "@types/react": "^17" } }, "node_modules/@types/react-router": { "version": "5.1.20", "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*" } }, "node_modules/@types/react-router-config": { "version": "5.0.7", "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.7.tgz", "integrity": "sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router": "^5.1.0" } }, "node_modules/@types/react-router-dom": { "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": "*" } }, "node_modules/@types/react-test-renderer": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-17.0.2.tgz", "integrity": "sha512-+F1KONQTBHDBBhbHuT2GNydeMpPuviduXIVJRB7Y4nma4NR5DrTJfMMZ+jbhEHbpwL+Uqhs1WXh4KHiyrtYTPg==", "dev": true, "dependencies": { "@types/react": "^17" } }, "node_modules/@types/react-transition-group": { "version": "4.4.6", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", "dependencies": { "@types/react": "*" } }, "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "node_modules/@types/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/scheduler": { "version": "0.16.3", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, "node_modules/@types/semver": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", "dev": true }, "node_modules/@types/send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@types/serve-index": { "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": "*" } }, "node_modules/@types/serve-static": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", "dependencies": { "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } }, "node_modules/@types/sockjs": { "version": "0.3.33", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "node_modules/@types/tough-cookie": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", "dev": true }, "node_modules/@types/unist": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==" }, "node_modules/@types/warning": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", "integrity": "sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA==" }, "node_modules/@types/ws": { "version": "8.5.5", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { "version": "17.0.24", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@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==" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/type-utils": "5.62.0", "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "@typescript-eslint/parser": "^5.0.0", "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/@typescript-eslint/parser": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/type-utils": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "dependencies": { "@typescript-eslint/typescript-estree": "5.62.0", "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "*" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/types": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/typescript-estree": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/@typescript-eslint/utils": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/@typescript-eslint/utils/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/@typescript-eslint/utils/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@vitejs/plugin-react": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz", "integrity": "sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==", "dev": true, "dependencies": { "@babel/core": "^7.22.9", "@babel/plugin-transform-react-jsx-self": "^7.22.5", "@babel/plugin-transform-react-jsx-source": "^7.22.5", "react-refresh": "^0.14.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { "vite": "^4.2.0" } }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dependencies": { "@webassemblyjs/ast": "1.11.6", "@webassemblyjs/helper-buffer": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/wasm-gen": "1.11.6" } }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dependencies": { "@webassemblyjs/ast": "1.11.6", "@webassemblyjs/helper-buffer": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-section": "1.11.6", "@webassemblyjs/wasm-gen": "1.11.6", "@webassemblyjs/wasm-opt": "1.11.6", "@webassemblyjs/wasm-parser": "1.11.6", "@webassemblyjs/wast-printer": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dependencies": { "@webassemblyjs/ast": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dependencies": { "@webassemblyjs/ast": "1.11.6", "@webassemblyjs/helper-buffer": "1.11.6", "@webassemblyjs/wasm-gen": "1.11.6", "@webassemblyjs/wasm-parser": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dependencies": { "@webassemblyjs/ast": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dependencies": { "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true }, "node_modules/@yarnpkg/parsers": { "version": "3.0.0-rc.48.1", "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.48.1.tgz", "integrity": "sha512-qEewJouhRvaecGjbkjz9kMKn96UASbDodNrE5MYy2TrXkHcisIkbMxZdGBYfAq+s1dFtCSx/5H4k5bEkfakM+A==", "dev": true, "dependencies": { "js-yaml": "^3.10.0", "tslib": "^2.4.0" } }, "node_modules/@zkochan/js-yaml": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/@zkochan/js-yaml/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, "node_modules/abbrev": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, "dependencies": { "event-target-shim": "^5.0.0" }, "engines": { "node": ">=6.5" } }, "node_modules/accepts": { "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" }, "engines": { "node": ">= 0.6" } }, "node_modules/acorn": { "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-globals": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, "dependencies": { "acorn": "^8.1.0", "acorn-walk": "^8.0.2" } }, "node_modules/acorn-import-assertions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "peerDependencies": { "acorn": "^8" } }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "engines": { "node": ">=0.4.0" } }, "node_modules/add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", "dev": true }, "node_modules/address": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", "engines": { "node": ">= 10.0.0" } }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { "debug": "4" }, "engines": { "node": ">= 6.0.0" } }, "node_modules/agentkeepalive": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "dev": true, "dependencies": { "humanize-ms": "^1.2.1" }, "engines": { "node": ">= 8.0.0" } }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ajv-formats": { "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" }, "peerDependencies": { "ajv": "^8.0.0" }, "peerDependenciesMeta": { "ajv": { "optional": true } } }, "node_modules/ajv-i18n": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/ajv-i18n/-/ajv-i18n-4.2.0.tgz", "integrity": "sha512-v/ei2UkCEeuKNXh8RToiFsUclmU+G57LO1Oo22OagNMENIw+Yb8eMwvHu7Vn9fmkjJyv6XclhJ8TbuigSglPkg==", "peerDependencies": { "ajv": "^8.0.0-beta.0" } }, "node_modules/ajv-keywords": { "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" }, "peerDependencies": { "ajv": "^8.8.2" } }, "node_modules/algoliasearch": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.19.1.tgz", "integrity": "sha512-IJF5b93b2MgAzcE/tuzW0yOPnuUyRgGAtaPv5UUywXM8kzqfdwZTO4sPJBzoGz1eOy6H9uEchsJsBFTELZSu+g==", "dependencies": { "@algolia/cache-browser-local-storage": "4.19.1", "@algolia/cache-common": "4.19.1", "@algolia/cache-in-memory": "4.19.1", "@algolia/client-account": "4.19.1", "@algolia/client-analytics": "4.19.1", "@algolia/client-common": "4.19.1", "@algolia/client-personalization": "4.19.1", "@algolia/client-search": "4.19.1", "@algolia/logger-common": "4.19.1", "@algolia/logger-console": "4.19.1", "@algolia/requester-browser-xhr": "4.19.1", "@algolia/requester-common": "4.19.1", "@algolia/requester-node-http": "4.19.1", "@algolia/transporter": "4.19.1" } }, "node_modules/algoliasearch-helper": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.14.0.tgz", "integrity": "sha512-gXDXzsSS0YANn5dHr71CUXOo84cN4azhHKUbg71vAWnH+1JBiR4jf7to3t3JHXknXkbV0F7f055vUSBKrltHLQ==", "dependencies": { "@algolia/events": "^4.0.1" }, "peerDependencies": { "algoliasearch": ">= 3.1 < 6" } }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dependencies": { "string-width": "^4.1.0" } }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { "type-fest": "^0.21.3" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-html-community": { "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==", "engines": [ "node >= 0.8.0" ], "bin": { "ansi-html": "bin/ansi-html" } }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "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" }, "engines": { "node": ">=4" } }, "node_modules/antd": { "version": "4.24.13", "resolved": "https://registry.npmjs.org/antd/-/antd-4.24.13.tgz", "integrity": "sha512-N2odRsbomseCE3U845Whf+RdgmQbiWbKvWS6ggH/xHjXojHx951rmZXW4nMqAeSoUp66sQOASGtrP/SUsdA2oQ==", "dependencies": { "@ant-design/colors": "^6.0.0", "@ant-design/icons": "^4.7.0", "@ant-design/react-slick": "~1.0.0", "@babel/runtime": "^7.18.3", "@ctrl/tinycolor": "^3.4.0", "classnames": "^2.2.6", "copy-to-clipboard": "^3.2.0", "lodash": "^4.17.21", "moment": "^2.29.2", "rc-cascader": "~3.7.0", "rc-checkbox": "~3.0.0", "rc-collapse": "~3.4.2", "rc-dialog": "~9.0.2", "rc-drawer": "~6.3.0", "rc-dropdown": "~4.0.0", "rc-field-form": "~1.34.0", "rc-image": "~5.13.0", "rc-input": "~0.1.4", "rc-input-number": "~7.3.9", "rc-mentions": "~1.13.1", "rc-menu": "~9.8.0", "rc-motion": "^2.6.1", "rc-notification": "~4.6.0", "rc-pagination": "~3.2.0", "rc-picker": "~2.7.0", "rc-progress": "~3.4.1", "rc-rate": "~2.9.0", "rc-resize-observer": "^1.2.0", "rc-segmented": "~2.1.0", "rc-select": "~14.1.17", "rc-slider": "~10.0.0", "rc-steps": "~5.0.0-alpha.2", "rc-switch": "~3.2.0", "rc-table": "~7.26.0", "rc-tabs": "~12.5.6", "rc-textarea": "~0.4.5", "rc-tooltip": "~5.2.0", "rc-tree": "~5.7.0", "rc-tree-select": "~5.5.0", "rc-trigger": "^5.2.10", "rc-upload": "~4.3.0", "rc-util": "^5.22.5", "scroll-into-view-if-needed": "^2.2.25" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/ant-design" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" }, "engines": { "node": ">= 8" } }, "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "node_modules/are-we-there-yet": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "dev": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/are-we-there-yet/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "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" } }, "node_modules/aria-hidden": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", "dependencies": { "tslib": "^2.0.0" }, "engines": { "node": ">=10" } }, "node_modules/aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "dependencies": { "dequal": "^2.0.3" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "node_modules/array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true }, "node_modules/array-includes": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-tree-filter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "engines": { "node": ">=8" } }, "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/array.prototype.findlastindex": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0", "get-intrinsic": "^1.1.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.flat": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.flatmap": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.tosorted": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0", "get-intrinsic": "^1.1.3" } }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", "get-intrinsic": "^1.2.1", "is-array-buffer": "^3.0.2", "is-shared-array-buffer": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, "engines": { "node": "*" } }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "dependencies": { "lodash": "^4.17.14" } }, "node_modules/async-validator": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "engines": { "node": ">= 4.0.0" } }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "bin": { "atob": "bin/atob.js" }, "engines": { "node": ">= 4.5.0" } }, "node_modules/autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", "funding": [ { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/autoprefixer" } ], "dependencies": { "browserslist": "^4.21.5", "caniuse-lite": "^1.0.30001464", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" }, "bin": { "autoprefixer": "bin/autoprefixer" }, "engines": { "node": "^10 || ^12 || >=14" }, "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/axe-core": { "version": "4.7.2", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/axios": { "version": "0.21.4", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dev": true, "dependencies": { "follow-redirects": "^1.14.0" } }, "node_modules/axobject-query": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dev": true, "dependencies": { "dequal": "^2.0.3" } }, "node_modules/babel-jest": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", "dev": true, "dependencies": { "@jest/transform": "^29.6.2", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", "babel-preset-jest": "^29.5.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" } }, "node_modules/babel-jest/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/babel-jest/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/babel-jest/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/babel-jest/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/babel-jest/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/babel-jest/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/babel-jest/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", "dependencies": { "find-cache-dir": "^3.3.1", "loader-utils": "^2.0.0", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" }, "engines": { "node": ">= 8.9" }, "peerDependencies": { "@babel/core": "^7.0.0", "webpack": ">=2" } }, "node_modules/babel-loader/node_modules/ajv": { "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" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/babel-loader/node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/babel-loader/node_modules/find-cache-dir": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, "node_modules/babel-loader/node_modules/json-schema-traverse": { "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==" }, "node_modules/babel-loader/node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" }, "engines": { "node": ">=8.9.0" } }, "node_modules/babel-loader/node_modules/make-dir": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/babel-loader/node_modules/pkg-dir": { "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" }, "engines": { "node": ">=8" } }, "node_modules/babel-loader/node_modules/schema-utils": { "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" }, "engines": { "node": ">= 8.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/babel-plugin-apply-mdx-type-prop": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", "dependencies": { "@babel/helper-plugin-utils": "7.10.4", "@mdx-js/util": "1.6.22" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" }, "peerDependencies": { "@babel/core": "^7.11.6" } }, "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "node_modules/babel-plugin-dynamic-import-node": { "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" } }, "node_modules/babel-plugin-extract-import-names": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", "dependencies": { "@babel/helper-plugin-utils": "7.10.4" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "node_modules/babel-plugin-istanbul": { "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==", "dev": true, "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" }, "engines": { "node": ">=8" } }, "node_modules/babel-plugin-jest-hoist": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/babel-plugin-macros": { "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" }, "engines": { "node": ">=10", "npm": ">=6" } }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.4.2", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.2", "core-js-compat": "^3.31.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-preset-current-node-syntax": { "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==", "dev": true, "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" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/babel-preset-jest": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", "dev": true, "dependencies": { "babel-plugin-jest-hoist": "^29.5.0", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base16": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/batch": { "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==" }, "node_modules/before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "engines": { "node": "*" } }, "node_modules/bin-links": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.2.tgz", "integrity": "sha512-jxJ0PbXR8eQyPlExCvCs3JFnikvs1Yp4gUJt6nmgathdOwvur+q22KWC3h20gvWl4T/14DXKj2IlkJwwZkZPOw==", "dev": true, "dependencies": { "cmd-shim": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", "read-cmd-shim": "^4.0.0", "write-file-atomic": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/bin-links/node_modules/cmd-shim": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz", "integrity": "sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/bin-links/node_modules/read-cmd-shim": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/bin-links/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/bin-links/node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "engines": { "node": ">=8" } }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "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.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } }, "node_modules/body-parser/node_modules/debug": { "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" } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/bonjour-service": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", "dependencies": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/boxen": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^6.2.0", "chalk": "^4.1.2", "cli-boxes": "^3.0.0", "string-width": "^5.0.1", "type-fest": "^2.5.0", "widest-line": "^4.0.1", "wrap-ansi": "^8.0.1" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/boxen/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/boxen/node_modules/ansi-styles": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/boxen/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/boxen/node_modules/chalk": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/boxen/node_modules/color-convert": { "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" }, "engines": { "node": ">=7.0.0" } }, "node_modules/boxen/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/boxen/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/boxen/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/boxen/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/boxen/node_modules/supports-color": { "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" }, "engines": { "node": ">=8" } }, "node_modules/boxen/node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "engines": { "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/boxen/node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/boxen/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/brace-expansion": { "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" } }, "node_modules/braces": { "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" }, "engines": { "node": ">=8" } }, "node_modules/browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "node_modules/browserslist": { "version": "4.21.10", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "dependencies": { "caniuse-lite": "^1.0.30001517", "electron-to-chromium": "^1.4.477", "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, "node_modules/bs-logger": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "dependencies": { "fast-json-stable-stringify": "2.x" }, "engines": { "node": ">= 6" } }, "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "dependencies": { "node-int64": "^0.4.0" } }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builtins": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "dependencies": { "semver": "^7.0.0" } }, "node_modules/builtins/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/builtins/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/builtins/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/byte-size": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.0.tgz", "integrity": "sha512-NNiBxKgxybMBtWdmvx7ZITJi4ZG+CYUgwOSZTfqB1qogkRHrhbQE/R2r5Fh94X+InN5MCYz6SvB/ejHMj/HbsQ==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "engines": { "node": ">= 0.8" } }, "node_modules/cacache": { "version": "17.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", "dev": true, "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^7.7.1", "minipass": "^5.0.0", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", "ssri": "^10.0.0", "tar": "^6.1.11", "unique-filename": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/cacache/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/cacache/node_modules/glob": { "version": "10.3.3", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/cjs/src/bin.js" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cacache/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/cacache/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cacache/node_modules/ssri": { "version": "10.0.4", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", "dev": true, "dependencies": { "minipass": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^3.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^4.1.0", "responselike": "^1.0.2" }, "engines": { "node": ">=8" } }, "node_modules/cacheable-request/node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { "pump": "^3.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "engines": { "node": ">=8" } }, "node_modules/cacheable-request/node_modules/normalize-url": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "engines": { "node": ">=8" } }, "node_modules/call-bind": { "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" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "engines": { "node": ">=6" } }, "node_modules/camel-case": { "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" } }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/camelcase-css": { "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==", "engines": { "node": ">= 6" } }, "node_modules/camelcase-keys": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", "quick-lru": "^4.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/caniuse-api": { "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" } }, "node_modules/caniuse-lite": { "version": "1.0.30001519", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ] }, "node_modules/ccount": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/chai": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", "integrity": "sha512-eRYY0vPS2a9zt5w5Z0aCeWbrXTEyvk7u/Xf71EzNObrjSCPgMm1Nku/D/u2tiqHBX5j40wWhj54YJLtgn8g55A==", "dev": true, "dependencies": { "assertion-error": "^1.0.1", "deep-eql": "^0.1.3", "type-detect": "^1.0.0" }, "engines": { "node": ">= 0.4.0" } }, "node_modules/chakra-react-select": { "version": "3.3.9", "resolved": "https://registry.npmjs.org/chakra-react-select/-/chakra-react-select-3.3.9.tgz", "integrity": "sha512-6oMkCGznJm38e9nBbEs37u/raxwPKoPrOCetq1niLBlbs1wvftP06sSn2MWxiEf+VjNUpNqc9rk6sDzvcxOVLA==", "dev": true, "dependencies": { "@chakra-ui/form-control": "^1.0.0", "@chakra-ui/icon": "^2.0.0", "@chakra-ui/layout": "^1.0.0", "@chakra-ui/menu": "^1.0.0", "@chakra-ui/spinner": "^1.0.0", "@chakra-ui/system": "^1.2.0", "react-select": "5.7.0" }, "peerDependencies": { "@emotion/react": "^11.8.1", "react": ">=16.8.6", "react-dom": ">=16.8.6" } }, "node_modules/chakra-react-select/node_modules/react-select": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.0.tgz", "integrity": "sha512-lJGiMxCa3cqnUr2Jjtg9YHsaytiZqeNOKeibv6WF5zbK/fPegZ1hg3y/9P1RZVLhqBTs0PfqQLKuAACednYGhQ==", "dev": true, "dependencies": { "@babel/runtime": "^7.12.0", "@emotion/cache": "^11.4.0", "@emotion/react": "^11.8.1", "@floating-ui/dom": "^1.0.1", "@types/react-transition-group": "^4.4.0", "memoize-one": "^6.0.0", "prop-types": "^15.6.0", "react-transition-group": "^4.3.0", "use-isomorphic-layout-effect": "^1.1.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/chalk": { "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" }, "engines": { "node": ">=4" } }, "node_modules/chalk/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { "node": ">=0.8.0" } }, "node_modules/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/character-entities": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/character-entities-legacy": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/character-reference-invalid": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "node_modules/cheerio": { "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "htmlparser2": "^8.0.1", "parse5": "^7.0.0", "parse5-htmlparser2-tree-adapter": "^7.0.0" }, "engines": { "node": ">= 6" }, "funding": { "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, "node_modules/cheerio-select": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", "css-what": "^6.1.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, "node_modules/cheerio-select/node_modules/css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, "node_modules/cheerio-select/node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, "node_modules/cheerio-select/node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { "domelementtype": "^2.3.0" }, "engines": { "node": ">= 4" }, "funding": { "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/cheerio-select/node_modules/domutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/cheerio/node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, "node_modules/cheerio/node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { "domelementtype": "^2.3.0" }, "engines": { "node": ">= 4" }, "funding": { "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/cheerio/node_modules/domutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/cheerio/node_modules/htmlparser2": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", "url": "https://github.com/sponsors/fb55" } ], "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1", "entities": "^4.4.0" } }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } ], "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" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "node_modules/chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/chrome-trace-event": { "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==", "engines": { "node": ">=6.0" } }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/sibiraj-s" } ], "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, "node_modules/classnames": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" }, "node_modules/clean-css": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dependencies": { "source-map": "~0.6.0" }, "engines": { "node": ">= 10.0" } }, "node_modules/clean-css/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "engines": { "node": ">=6" } }, "node_modules/cli-boxes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "dependencies": { "restore-cursor": "^3.1.0" }, "engines": { "node": ">=8" } }, "node_modules/cli-spinners": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-table3": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dependencies": { "string-width": "^4.2.0" }, "engines": { "node": "10.* || >= 12.*" }, "optionalDependencies": { "@colors/colors": "1.5.0" } }, "node_modules/cli-truncate": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^5.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/cli-truncate/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, "engines": { "node": ">= 10" } }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "node_modules/cliui/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/cliui/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/cliui/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "engines": { "node": ">=0.8" } }, "node_modules/clone-deep": { "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" }, "engines": { "node": ">=6" } }, "node_modules/clone-response": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dependencies": { "mimic-response": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", "engines": { "node": ">=6" } }, "node_modules/cmd-shim": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", "dev": true, "dependencies": { "mkdirp-infer-owner": "^2.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collapse-white-space": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/collect-v8-coverage": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, "node_modules/color-convert": { "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" } }, "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, "bin": { "color-support": "bin.js" } }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "node_modules/columnify": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", "dev": true, "dependencies": { "strip-ansi": "^6.0.1", "wcwidth": "^1.0.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/combine-promises": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", "engines": { "node": ">=10" } }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, "node_modules/comma-separated-tokens": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, "engines": { "node": ">= 6" } }, "node_modules/common-ancestor-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", "dev": true }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" } }, "node_modules/compare-func/node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "dependencies": { "is-obj": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/compressible": { "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" }, "engines": { "node": ">= 0.6" } }, "node_modules/compression": { "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" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/compression/node_modules/debug": { "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" } }, "node_modules/compression/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/compute-gcd": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", "dependencies": { "validate.io-array": "^1.0.3", "validate.io-function": "^1.0.2", "validate.io-integer-array": "^1.0.0" } }, "node_modules/compute-lcm": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", "dependencies": { "compute-gcd": "^1.2.1", "validate.io-array": "^1.0.3", "validate.io-function": "^1.0.2", "validate.io-integer-array": "^1.0.0" } }, "node_modules/compute-scroll-into-view": { "version": "1.0.14", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.14.tgz", "integrity": "sha512-mKDjINe3tc6hGelUMNDzuhorIUZ7kS7BwyY0r2wQd2HOH2tRuJykiC06iSEX8y1TuhNzvz4GcJnK16mM2J1NMQ==" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "engines": [ "node >= 0.8" ], "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, "node_modules/config-chain": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "dev": true, "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" } }, "node_modules/configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dependencies": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", "make-dir": "^3.0.0", "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/configstore/node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dependencies": { "is-obj": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/configstore/node_modules/make-dir": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/configstore/node_modules/write-file-atomic": { "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" } }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "engines": { "node": ">=0.8" } }, "node_modules/consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "node_modules/content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", "engines": { "node": ">= 0.6" } }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } }, "node_modules/conventional-changelog-angular": { "version": "5.0.12", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", "dev": true, "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-core": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, "dependencies": { "add-stream": "^1.0.0", "conventional-changelog-writer": "^5.0.0", "conventional-commits-parser": "^3.2.0", "dateformat": "^3.0.0", "get-pkg-repo": "^4.0.0", "git-raw-commits": "^2.0.8", "git-remote-origin-url": "^2.0.0", "git-semver-tags": "^4.1.1", "lodash": "^4.17.15", "normalize-package-data": "^3.0.0", "q": "^1.5.1", "read-pkg": "^3.0.0", "read-pkg-up": "^3.0.0", "through2": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-core/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-core/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-core/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/conventional-changelog-preset-loader": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-writer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, "dependencies": { "conventional-commits-filter": "^2.0.7", "dateformat": "^3.0.0", "handlebars": "^4.7.7", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.15", "meow": "^8.0.0", "semver": "^6.0.0", "split": "^1.0.0", "through2": "^4.0.0" }, "bin": { "conventional-changelog-writer": "cli.js" }, "engines": { "node": ">=10" } }, "node_modules/conventional-commits-filter": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, "dependencies": { "lodash.ismatch": "^4.4.0", "modify-values": "^1.0.0" }, "engines": { "node": ">=10" } }, "node_modules/conventional-commits-parser": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.0.4", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", "through2": "^4.0.0" }, "bin": { "conventional-commits-parser": "cli.js" }, "engines": { "node": ">=10" } }, "node_modules/conventional-recommended-bump": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", "dev": true, "dependencies": { "concat-stream": "^2.0.0", "conventional-changelog-preset-loader": "^2.3.4", "conventional-commits-filter": "^2.0.7", "conventional-commits-parser": "^3.2.0", "git-raw-commits": "^2.0.8", "git-semver-tags": "^4.1.1", "meow": "^8.0.0", "q": "^1.5.1" }, "bin": { "conventional-recommended-bump": "cli.js" }, "engines": { "node": ">=10" } }, "node_modules/conventional-recommended-bump/node_modules/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, "engines": [ "node >= 6.0" ], "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } }, "node_modules/conventional-recommended-bump/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/copy-text-to-clipboard": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/copy-to-clipboard": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", "dependencies": { "toggle-selection": "^1.0.6" } }, "node_modules/copy-webpack-plugin": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", "dependencies": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", "globby": "^13.1.1", "normalize-path": "^3.0.0", "schema-utils": "^4.0.0", "serialize-javascript": "^6.0.0" }, "engines": { "node": ">= 14.15.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^5.1.0" } }, "node_modules/copy-webpack-plugin/node_modules/glob-parent": { "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" }, "engines": { "node": ">=10.13.0" } }, "node_modules/copy-webpack-plugin/node_modules/globby": { "version": "13.2.2", "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", "ignore": "^5.2.4", "merge2": "^1.4.1", "slash": "^4.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/copy-webpack-plugin/node_modules/slash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/core-js": { "version": "3.32.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.0.tgz", "integrity": "sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww==", "hasInstallScript": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat": { "version": "3.32.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.0.tgz", "integrity": "sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==", "dependencies": { "browserslist": "^4.21.9" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-pure": { "version": "3.32.0", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.0.tgz", "integrity": "sha512-qsev1H+dTNYpDUEURRuOXMvpdtAnNEvQWS/FMJ2Vb5AY8ZP4rAPQldkE27joykZPJTe0+IVgHZYh1P5Xu1/i1g==", "hasInstallScript": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "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" }, "engines": { "node": ">=10" } }, "node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, "dependencies": { "cross-spawn": "^7.0.1" }, "bin": { "cross-env": "src/bin/cross-env.js", "cross-env-shell": "src/bin/cross-env-shell.js" }, "engines": { "node": ">=10.14", "npm": ">=6", "yarn": ">=1" } }, "node_modules/cross-fetch": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/cross-fetch/node_modules/node-fetch": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", "dependencies": { "whatwg-url": "^5.0.0" }, "engines": { "node": "4.x || >=6.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "peerDependenciesMeta": { "encoding": { "optional": true } } }, "node_modules/cross-fetch/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/cross-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/cross-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "node_modules/cross-spawn": { "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" }, "engines": { "node": ">= 8" } }, "node_modules/crypto-random-string": { "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==", "engines": { "node": ">=8" } }, "node_modules/css-box-model": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", "dependencies": { "tiny-invariant": "^1.0.6" } }, "node_modules/css-declaration-sorter": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "engines": { "node": "^10 || ^12 || >=14" }, "peerDependencies": { "postcss": "^8.0.9" } }, "node_modules/css-loader": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.21", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.3", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.3.8" }, "engines": { "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^5.0.0" } }, "node_modules/css-loader/node_modules/lru-cache": { "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" }, "engines": { "node": ">=10" } }, "node_modules/css-loader/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/css-loader/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/css-minimizer-webpack-plugin": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", "dependencies": { "cssnano": "^5.1.8", "jest-worker": "^29.1.2", "postcss": "^8.4.17", "schema-utils": "^4.0.0", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1" }, "engines": { "node": ">= 14.15.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^5.0.0" }, "peerDependenciesMeta": { "@parcel/css": { "optional": true }, "@swc/css": { "optional": true }, "clean-css": { "optional": true }, "csso": { "optional": true }, "esbuild": { "optional": true }, "lightningcss": { "optional": true } } }, "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, "node_modules/css-select": { "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" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, "node_modules/css-tree": { "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" }, "engines": { "node": ">=8.0.0" } }, "node_modules/css-tree/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, "node_modules/css-vendor": { "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" } }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "engines": { "node": ">= 6" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "bin": { "cssesc": "bin/cssesc" }, "engines": { "node": ">=4" } }, "node_modules/cssnano": { "version": "5.1.15", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", "dependencies": { "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/cssnano" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/cssnano-preset-advanced": { "version": "5.3.10", "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", "dependencies": { "autoprefixer": "^10.4.12", "cssnano-preset-default": "^5.2.14", "postcss-discard-unused": "^5.1.0", "postcss-merge-idents": "^5.1.1", "postcss-reduce-idents": "^5.2.0", "postcss-zindex": "^5.1.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/cssnano-preset-default": { "version": "5.2.14", "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", "dependencies": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", "postcss-colormin": "^5.3.1", "postcss-convert-values": "^5.1.3", "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.7", "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", "postcss-minify-params": "^5.1.4", "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", "postcss-normalize-positions": "^5.1.1", "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", "postcss-normalize-unicode": "^5.1.1", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/cssnano-utils": { "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==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/csso": { "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" }, "engines": { "node": ">=8.0.0" } }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, "node_modules/cssstyle": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "dependencies": { "cssom": "~0.3.6" }, "engines": { "node": ">=8" } }, "node_modules/cssstyle/node_modules/cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, "node_modules/csstype": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, "node_modules/dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/data-urls": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, "dependencies": { "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", "whatwg-url": "^11.0.0" }, "engines": { "node": ">=12" } }, "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "dependencies": { "@babel/runtime": "^7.21.0" }, "engines": { "node": ">=0.11" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/date-fns" } }, "node_modules/dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, "engines": { "node": "*" } }, "node_modules/dayjs": { "version": "1.11.9", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==" }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" }, "node_modules/debug": { "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" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/decamelize-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, "engines": { "node": ">=0.10.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/decimal.js": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dependencies": { "mimic-response": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/dedent": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", "dev": true, "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "peerDependenciesMeta": { "babel-plugin-macros": { "optional": true } } }, "node_modules/deep-eql": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", "integrity": "sha512-6sEotTRGBFiNcqVoeHwnfopbSpi5NbH1VWJmYCVkmxMmaVTT0bUTrNaGyBwhgP4MZL012W/mkzIn3Da+iDYweg==", "dev": true, "dependencies": { "type-detect": "0.1.1" }, "engines": { "node": "*" } }, "node_modules/deep-eql/node_modules/type-detect": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", "integrity": "sha512-5rqszGVwYgBoDkIm2oUtvkfZMQ0vk29iDMU0W2qCa3rG0vPDNczCMT4hV/bLBgLg8k8ri6+u3Zbt+S/14eMzlA==", "dev": true, "engines": { "node": "*" } }, "node_modules/deep-equal": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dependencies": { "is-arguments": "^1.0.4", "is-date-object": "^1.0.1", "is-regex": "^1.0.4", "object-is": "^1.0.1", "object-keys": "^1.1.1", "regexp.prototype.flags": "^1.2.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "engines": { "node": ">=4.0.0" } }, "node_modules/deep-freeze-es6": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/deep-freeze-es6/-/deep-freeze-es6-1.4.1.tgz", "integrity": "sha512-WnyM4ZCzpHtziy7LxnpQPGS+mfZDQvFpmH3LGqmyUfzwBLkvNTwbn+mTwSNTQoLQTHiN85qZqprRZdYwU3xN/Q==", "dev": true }, "node_modules/deep-is": { "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==", "dev": true }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { "node": ">=0.10.0" } }, "node_modules/default-gateway": { "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" }, "engines": { "node": ">= 10" } }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "dependencies": { "clone": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "engines": { "node": ">=8" } }, "node_modules/define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "dependencies": { "globby": "^11.0.1", "graceful-fs": "^4.2.4", "is-glob": "^4.0.1", "is-path-cwd": "^2.2.0", "is-path-inside": "^3.0.2", "p-map": "^4.0.0", "rimraf": "^3.0.2", "slash": "^3.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/del/node_modules/rimraf": { "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" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/del/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "engines": { "node": ">=8" } }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { "node": ">= 0.8" } }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "engines": { "node": ">=6" } }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/detab": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", "dependencies": { "repeat-string": "^1.5.4" }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/detect-indent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, "node_modules/detect-port": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "dependencies": { "address": "^1.0.1", "debug": "4" }, "bin": { "detect": "bin/detect-port.js", "detect-port": "bin/detect-port.js" } }, "node_modules/detect-port-alt": { "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" }, "bin": { "detect": "bin/detect-port", "detect-port": "bin/detect-port" }, "engines": { "node": ">= 4.2.1" } }, "node_modules/detect-port-alt/node_modules/debug": { "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" } }, "node_modules/detect-port-alt/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/dir-glob": { "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" }, "engines": { "node": ">=8" } }, "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" }, "node_modules/dns-packet": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { "node": ">=6" } }, "node_modules/docs": { "resolved": "packages/docs", "link": true }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=6.0.0" } }, "node_modules/dom-align": { "version": "1.12.4", "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz", "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==" }, "node_modules/dom-converter": { "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" } }, "node_modules/dom-helpers": { "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" } }, "node_modules/dom-serializer": { "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" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, "node_modules/dom-serializer/node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/dom-walk": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", "dev": true }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } ] }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", "dev": true, "dependencies": { "webidl-conversions": "^7.0.0" }, "engines": { "node": ">=12" } }, "node_modules/domhandler": { "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" }, "engines": { "node": ">= 4" }, "funding": { "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/domutils": { "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" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/dot-case": { "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" } }, "node_modules/dot-prop": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dev": true, "dependencies": { "is-obj": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/dotenv": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, "node_modules/duplexer3": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/ejs": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dev": true, "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" }, "engines": { "node": ">=0.10.0" } }, "node_modules/electron-to-chromium": { "version": "1.4.485", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.485.tgz", "integrity": "sha512-1ndQ5IBNEnFirPwvyud69GHL+31FkE09gH/CJ6m3KCbkx3i0EVOrjwz4UNxRmN9H8OVHbC6vMRZGN1yCvjSs9w==" }, "node_modules/email-addresses": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", "dev": true }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "engines": { "node": ">= 4" } }, "node_modules/emoticon": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } }, "node_modules/encoding": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/encoding/node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" }, "engines": { "node": ">=10.13.0" } }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "dependencies": { "ansi-colors": "^4.1.1" }, "engines": { "node": ">=8.6" } }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { "node": ">=0.12" }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/envinfo": { "version": "7.10.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", "dev": true, "bin": { "envinfo": "dist/cli.js" }, "engines": { "node": ">=4" } }, "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true }, "node_modules/error-ex": { "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" } }, "node_modules/es-abstract": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.1", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.0", "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", "typed-array-buffer": "^1.0.0", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-module-lexer": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" }, "node_modules/es-set-tostringtag": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, "dependencies": { "get-intrinsic": "^1.1.3", "has": "^1.0.3", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, "dependencies": { "has": "^1.0.3" } }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/esbuild": { "version": "0.18.19", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.19.tgz", "integrity": "sha512-ra3CaIKCzJp5bU5BDfrCc0FRqKj71fQi+gbld0aj6lN0ifuX2fWJYPgLVLGwPfA+ruKna+OWwOvf/yHj6n+i0g==", "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" }, "engines": { "node": ">=12" }, "optionalDependencies": { "@esbuild/android-arm": "0.18.19", "@esbuild/android-arm64": "0.18.19", "@esbuild/android-x64": "0.18.19", "@esbuild/darwin-arm64": "0.18.19", "@esbuild/darwin-x64": "0.18.19", "@esbuild/freebsd-arm64": "0.18.19", "@esbuild/freebsd-x64": "0.18.19", "@esbuild/linux-arm": "0.18.19", "@esbuild/linux-arm64": "0.18.19", "@esbuild/linux-ia32": "0.18.19", "@esbuild/linux-loong64": "0.18.19", "@esbuild/linux-mips64el": "0.18.19", "@esbuild/linux-ppc64": "0.18.19", "@esbuild/linux-riscv64": "0.18.19", "@esbuild/linux-s390x": "0.18.19", "@esbuild/linux-x64": "0.18.19", "@esbuild/netbsd-x64": "0.18.19", "@esbuild/openbsd-x64": "0.18.19", "@esbuild/sunos-x64": "0.18.19", "@esbuild/win32-arm64": "0.18.19", "@esbuild/win32-ia32": "0.18.19", "@esbuild/win32-x64": "0.18.19" } }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "engines": { "node": ">=6" } }, "node_modules/escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "engines": { "node": ">=8" } }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", "esgenerate": "bin/esgenerate.js" }, "engines": { "node": ">=6.0" }, "optionalDependencies": { "source-map": "~0.6.1" } }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint": { "version": "8.46.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.1", "@eslint/js": "^8.46.0", "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", "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.2.2", "eslint-visitor-keys": "^3.4.2", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "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.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-import-resolver-node": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.8.tgz", "integrity": "sha512-tEe+Pok22qIGaK3KoMP+N96GVDS66B/zreoVVmiavLvRUEmGRtvb4B8wO9jwnb8d2lvHtrkhZ7UD73dWBVnf/Q==", "dev": true, "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "dependencies": { "debug": "^3.2.7" }, "engines": { "node": ">=4" }, "peerDependenciesMeta": { "eslint": { "optional": true } } }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { "version": "2.28.0", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.0.tgz", "integrity": "sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==", "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.findlastindex": "^1.2.2", "array.prototype.flat": "^1.3.1", "array.prototype.flatmap": "^1.3.1", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.7", "eslint-module-utils": "^2.8.0", "has": "^1.0.3", "is-core-module": "^2.12.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.6", "object.groupby": "^1.0.0", "object.values": "^1.1.6", "resolve": "^1.22.3", "semver": "^6.3.1", "tsconfig-paths": "^3.14.2" }, "engines": { "node": ">=4" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dev": true, "dependencies": { "@babel/runtime": "^7.20.7", "aria-query": "^5.1.3", "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "ast-types-flow": "^0.0.7", "axe-core": "^4.6.2", "axobject-query": "^3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "has": "^1.0.3", "jsx-ast-utils": "^3.3.3", "language-tags": "=1.0.5", "minimatch": "^3.1.2", "object.entries": "^1.1.6", "object.fromentries": "^2.0.6", "semver": "^6.3.0" }, "engines": { "node": ">=4.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, "node_modules/eslint-plugin-react": { "version": "7.33.1", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.1.tgz", "integrity": "sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==", "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", "array.prototype.tosorted": "^1.1.1", "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.6", "object.fromentries": "^2.0.6", "object.hasown": "^1.1.2", "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "engines": { "node": ">=4" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, "node_modules/eslint-plugin-react-hooks": { "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==", "dev": true, "engines": { "node": ">=10" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dev": true, "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/eslint-scope": { "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" }, "engines": { "node": ">=8.0.0" } }, "node_modules/eslint-scope/node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { "node": ">=4.0" } }, "node_modules/eslint-visitor-keys": { "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==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "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" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { "is-glob": "^4.0.3" }, "engines": { "node": ">=10.13.0" } }, "node_modules/eslint/node_modules/globals": { "version": "13.20.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/eslint/node_modules/json-schema-traverse": { "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==", "dev": true }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/p-locate": { "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==", "dev": true, "dependencies": { "p-limit": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/eslint/node_modules/type-fest": { "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==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, "node_modules/esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" }, "engines": { "node": ">=0.10" } }, "node_modules/esrecurse": { "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" }, "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { "node": ">=4.0" } }, "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { "node": ">=0.10.0" } }, "node_modules/eta": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", "engines": { "node": ">=6.0.0" }, "funding": { "url": "https://github.com/eta-dev/eta?sponsor=1" } }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } }, "node_modules/eval": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", "dependencies": { "@types/node": "*", "require-like": ">= 0.1.1" }, "engines": { "node": ">= 0.8" } }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { "node": ">=0.8.x" } }, "node_modules/execa": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/exenv": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", "dev": true, "dependencies": { "@jest/expect-utils": "^29.6.2", "@types/node": "*", "jest-get-type": "^29.4.3", "jest-matcher-utils": "^29.6.2", "jest-message-util": "^29.6.2", "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/exponential-backoff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", "dev": true }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.1", "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.11.0", "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" }, "engines": { "node": ">= 0.10.0" } }, "node_modules/express/node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/express/node_modules/content-disposition": { "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" }, "engines": { "node": ">= 0.6" } }, "node_modules/express/node_modules/debug": { "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" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/express/node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/express/node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { "node": ">= 0.6" } }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dependencies": { "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" }, "engines": { "node": ">=4" } }, "node_modules/external-editor/node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, "engines": { "node": ">=0.6.0" } }, "node_modules/fast-deep-equal": { "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==" }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "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" }, "engines": { "node": ">=8.6.0" } }, "node_modules/fast-json-stable-stringify": { "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==" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "node_modules/fast-url-parser": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", "dependencies": { "punycode": "^1.3.2" } }, "node_modules/fast-url-parser/node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/faye-websocket": { "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" }, "engines": { "node": ">=0.8.0" } }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "dependencies": { "bser": "2.1.1" } }, "node_modules/fbemitter": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", "dependencies": { "fbjs": "^3.0.0" } }, "node_modules/fbjs": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", "dependencies": { "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", "loose-envify": "^1.0.0", "object-assign": "^4.1.0", "promise": "^7.1.1", "setimmediate": "^1.0.5", "ua-parser-js": "^1.0.35" } }, "node_modules/fbjs-css-vars": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, "node_modules/feed": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", "dependencies": { "xml-js": "^1.6.11" }, "engines": { "node": ">=0.4.0" } }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, "node_modules/file-loader": { "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" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^4.0.0 || ^5.0.0" } }, "node_modules/file-loader/node_modules/ajv": { "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" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/file-loader/node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/file-loader/node_modules/json-schema-traverse": { "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==" }, "node_modules/file-loader/node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" }, "engines": { "node": ">=8.9.0" } }, "node_modules/file-loader/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/file-url": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/filelist": { "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==", "dev": true, "dependencies": { "minimatch": "^5.0.1" } }, "node_modules/filelist/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, "node_modules/filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/filenamify": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", "dev": true, "dependencies": { "filename-reserved-regex": "^2.0.0", "strip-outer": "^1.0.1", "trim-repeated": "^1.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/filesize": { "version": "8.0.7", "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", "engines": { "node": ">= 0.4.0" } }, "node_modules/fill-range": { "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" }, "engines": { "node": ">=8" } }, "node_modules/finalhandler": { "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" }, "engines": { "node": ">= 0.8" } }, "node_modules/finalhandler/node_modules/debug": { "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" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "node_modules/find-up": { "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" }, "engines": { "node": ">=8" } }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flat-cache/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "node_modules/flux": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", "dependencies": { "fbemitter": "^3.0.0", "fbjs": "^3.0.1" }, "peerDependencies": { "react": "^15.0.2 || ^16.0.0 || ^17.0.0" } }, "node_modules/focus-lock": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.9.2.tgz", "integrity": "sha512-YtHxjX7a0IC0ZACL5wsX8QdncXofWpGPNoVMuI/nZUrPGp6LmNI6+D5j0pPj+v8Kw5EpweA+T5yImK0rnWf7oQ==", "dependencies": { "tslib": "^2.0.3" }, "engines": { "node": ">=10" } }, "node_modules/follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], "engines": { "node": ">=4.0" }, "peerDependenciesMeta": { "debug": { "optional": true } } }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/foreground-child/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", "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" }, "engines": { "node": ">=10", "yarn": ">=1.0.0" }, "peerDependencies": { "eslint": ">= 6", "typescript": ">= 2.7", "vue-template-compiler": "*", "webpack": ">= 4" }, "peerDependenciesMeta": { "eslint": { "optional": true }, "vue-template-compiler": { "optional": true } } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { "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" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { "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" }, "engines": { "node": ">=7.0.0" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { "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" }, "engines": { "node": ">=8" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { "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" }, "engines": { "node": ">=10" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { "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==" }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { "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" }, "engines": { "node": ">=10" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "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" }, "engines": { "node": ">= 8.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { "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" }, "engines": { "node": ">=8" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "engines": { "node": ">=6" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { "node": ">= 0.6" } }, "node_modules/fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "engines": { "node": "*" }, "funding": { "type": "patreon", "url": "https://www.patreon.com/infusion" } }, "node_modules/framer-motion": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-5.6.0.tgz", "integrity": "sha512-Y4FtwUU+LUWLKSzoT6Sq538qluvhpe6izdQK8/xZeVjQZ/ORKGfZzyhzcUxNfscqnfEa3dUOA47s+dwrSipdGA==", "dependencies": { "framesync": "6.0.1", "hey-listen": "^1.0.8", "popmotion": "11.0.3", "react-merge-refs": "^1.1.0", "react-use-measure": "^2.1.1", "style-value-types": "5.0.0", "tslib": "^2.1.0" }, "optionalDependencies": { "@emotion/is-prop-valid": "^0.8.2" }, "peerDependencies": { "@react-three/fiber": "*", "react": ">=16.8 || ^17.0.0", "react-dom": ">=16.8 || ^17.0.0", "three": "^0.135.0" }, "peerDependenciesMeta": { "@react-three/fiber": { "optional": true }, "three": { "optional": true } } }, "node_modules/framer-motion/node_modules/@emotion/is-prop-valid": { "version": "0.8.8", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", "optional": true, "dependencies": { "@emotion/memoize": "0.7.4" } }, "node_modules/framer-motion/node_modules/@emotion/memoize": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", "optional": true }, "node_modules/framer-motion/node_modules/framesync": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz", "integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/framesync": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/framesync/-/framesync-5.3.0.tgz", "integrity": "sha512-oc5m68HDO/tuK2blj7ZcdEBRx3p1PjrgHazL8GYEpvULhrtGIFbQArN6cQS2QhW8mitffaB+VYzMjDqBxxQeoA==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, "node_modules/fs-extra": { "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" }, "engines": { "node": ">=12" } }, "node_modules/fs-minipass": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", "dev": true, "dependencies": { "minipass": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/fs-monkey": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==" }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "hasInstallScript": true, "optional": true, "os": [ "darwin" ], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { "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==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.0", "functions-have-names": "^1.2.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gauge": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", "signal-exit": "^3.0.7", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "wide-align": "^1.1.5" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/gensync": { "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==", "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-nonce": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", "engines": { "node": ">=6" } }, "node_modules/get-own-enumerable-property-symbols": { "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==" }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "engines": { "node": ">=8.0.0" } }, "node_modules/get-pkg-repo": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, "dependencies": { "@hutson/parse-repository-url": "^3.0.0", "hosted-git-info": "^4.0.0", "through2": "^2.0.0", "yargs": "^16.2.0" }, "bin": { "get-pkg-repo": "src/cli.js" }, "engines": { "node": ">=6.9.0" } }, "node_modules/get-pkg-repo/node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" } }, "node_modules/get-pkg-repo/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/get-pkg-repo/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "node_modules/get-pkg-repo/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/get-pkg-repo/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "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" }, "engines": { "node": ">=10" } }, "node_modules/get-pkg-repo/node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/get-port": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gh-pages": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz", "integrity": "sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg==", "dev": true, "dependencies": { "async": "^2.6.1", "commander": "^2.18.0", "email-addresses": "^3.0.1", "filenamify": "^4.3.0", "find-cache-dir": "^3.3.1", "fs-extra": "^8.1.0", "globby": "^6.1.0" }, "bin": { "gh-pages": "bin/gh-pages.js", "gh-pages-clean": "bin/gh-pages-clean.js" }, "engines": { "node": ">=10" } }, "node_modules/gh-pages/node_modules/array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, "dependencies": { "array-uniq": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/gh-pages/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "node_modules/gh-pages/node_modules/find-cache-dir": { "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==", "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, "node_modules/gh-pages/node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" }, "engines": { "node": ">=6 <7 || >=8" } }, "node_modules/gh-pages/node_modules/globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", "dev": true, "dependencies": { "array-union": "^1.0.1", "glob": "^7.0.3", "object-assign": "^4.0.1", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/gh-pages/node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/gh-pages/node_modules/make-dir": { "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==", "dev": true, "dependencies": { "semver": "^6.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gh-pages/node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/gh-pages/node_modules/pkg-dir": { "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==", "dev": true, "dependencies": { "find-up": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/gh-pages/node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "engines": { "node": ">= 4.0.0" } }, "node_modules/git-raw-commits": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "dependencies": { "dargs": "^7.0.0", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", "through2": "^4.0.0" }, "bin": { "git-raw-commits": "cli.js" }, "engines": { "node": ">=10" } }, "node_modules/git-remote-origin-url": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, "dependencies": { "gitconfiglocal": "^1.0.0", "pify": "^2.3.0" }, "engines": { "node": ">=4" } }, "node_modules/git-remote-origin-url/node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/git-semver-tags": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, "dependencies": { "meow": "^8.0.0", "semver": "^6.0.0" }, "bin": { "git-semver-tags": "cli.js" }, "engines": { "node": ">=10" } }, "node_modules/git-up": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", "dev": true, "dependencies": { "is-ssh": "^1.4.0", "parse-url": "^8.1.0" } }, "node_modules/git-url-parse": { "version": "13.1.0", "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz", "integrity": "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==", "dev": true, "dependencies": { "git-up": "^7.0.0" } }, "node_modules/gitconfiglocal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, "dependencies": { "ini": "^1.3.2" } }, "node_modules/github-slugger": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, "node_modules/glob": { "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" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { "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" }, "engines": { "node": ">= 6" } }, "node_modules/glob-to-regexp": { "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==" }, "node_modules/global": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "dev": true, "dependencies": { "min-document": "^2.19.0", "process": "^0.11.10" } }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dependencies": { "ini": "2.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/global-dirs/node_modules/ini": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "engines": { "node": ">=10" } }, "node_modules/global-modules": { "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" }, "engines": { "node": ">=6" } }, "node_modules/global-prefix": { "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" }, "engines": { "node": ">=6" } }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "bin/which" } }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { "node": ">=4" } }, "node_modules/globalthis": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/globby": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globby/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "engines": { "node": ">=8" } }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dependencies": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", "cacheable-request": "^6.0.0", "decompress-response": "^3.3.0", "duplexer3": "^0.1.4", "get-stream": "^4.1.0", "lowercase-keys": "^1.0.1", "mimic-response": "^1.0.1", "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" }, "engines": { "node": ">=8.6" } }, "node_modules/got/node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dependencies": { "pump": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "node_modules/gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" }, "engines": { "node": ">=6.0" } }, "node_modules/gud": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" }, "node_modules/gzip-size": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", "source-map": "^0.6.1", "wordwrap": "^1.0.0" }, "bin": { "handlebars": "bin/handlebars" }, "engines": { "node": ">=0.4.7" }, "optionalDependencies": { "uglify-js": "^3.1.4" } }, "node_modules/handlebars/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/has": { "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" }, "engines": { "node": ">= 0.4.0" } }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "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" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-tostringtag": { "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" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "node_modules/has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "engines": { "node": ">=8" } }, "node_modules/hast-to-hyperscript": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", "dependencies": { "@types/unist": "^2.0.3", "comma-separated-tokens": "^1.0.0", "property-information": "^5.3.0", "space-separated-tokens": "^1.0.0", "style-to-object": "^0.3.0", "unist-util-is": "^4.0.0", "web-namespaces": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/hast-util-from-parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", "dependencies": { "@types/parse5": "^5.0.0", "hastscript": "^6.0.0", "property-information": "^5.0.0", "vfile": "^4.0.0", "vfile-location": "^3.2.0", "web-namespaces": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/hast-util-parse-selector": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/hast-util-raw": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", "dependencies": { "@types/hast": "^2.0.0", "hast-util-from-parse5": "^6.0.0", "hast-util-to-parse5": "^6.0.0", "html-void-elements": "^1.0.0", "parse5": "^6.0.0", "unist-util-position": "^3.0.0", "vfile": "^4.0.0", "web-namespaces": "^1.0.0", "xtend": "^4.0.0", "zwitch": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/hast-util-raw/node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "node_modules/hast-util-to-parse5": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", "dependencies": { "hast-to-hyperscript": "^9.0.0", "property-information": "^5.0.0", "web-namespaces": "^1.0.0", "xtend": "^4.0.0", "zwitch": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/hastscript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", "dependencies": { "@types/hast": "^2.0.0", "comma-separated-tokens": "^1.0.0", "hast-util-parse-selector": "^2.0.0", "property-information": "^5.0.0", "space-separated-tokens": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "bin": { "he": "bin/he" } }, "node_modules/hey-listen": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==" }, "node_modules/history": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", "dependencies": { "@babel/runtime": "^7.1.2", "loose-envify": "^1.2.0", "resolve-pathname": "^3.0.0", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0", "value-equal": "^1.0.1" } }, "node_modules/hoist-non-react-statics": { "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" } }, "node_modules/hoist-non-react-statics/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/hosted-git-info": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/hosted-git-info/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/hpack.js": { "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" } }, "node_modules/html": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/html/-/html-1.0.0.tgz", "integrity": "sha512-lw/7YsdKiP3kk5PnR1INY17iJuzdAtJewxr14ozKJWbbR97znovZ0mh+WEMZ8rjc3lgTK+ID/htTjuyGKB52Kw==", "dev": true, "dependencies": { "concat-stream": "^1.4.7" }, "bin": { "html": "bin/html.js" } }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, "dependencies": { "whatwg-encoding": "^2.0.0" }, "engines": { "node": ">=12" } }, "node_modules/html-entities": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/mdevils" }, { "type": "patreon", "url": "https://patreon.com/mdevils" } ] }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "node_modules/html-minifier-terser": { "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" }, "bin": { "html-minifier-terser": "cli.js" }, "engines": { "node": ">=12" } }, "node_modules/html-minifier-terser/node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "engines": { "node": ">= 12" } }, "node_modules/html-tags": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/html-void-elements": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/html-webpack-plugin": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", "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" }, "engines": { "node": ">=10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { "webpack": "^5.20.0" } }, "node_modules/htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", "url": "https://github.com/sponsors/fb55" } ], "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", "domutils": "^2.5.2", "entities": "^2.0.0" } }, "node_modules/htmlparser2/node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, "node_modules/http-errors": { "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" }, "engines": { "node": ">= 0.8" } }, "node_modules/http-parser-js": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, "node_modules/http-proxy": { "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" }, "engines": { "node": ">=8.0.0" } }, "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "dependencies": { "@tootallnate/once": "2", "agent-base": "6", "debug": "4" }, "engines": { "node": ">= 6" } }, "node_modules/http-proxy-middleware": { "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" }, "engines": { "node": ">=12.0.0" }, "peerDependencies": { "@types/express": "^4.17.13" }, "peerDependenciesMeta": { "@types/express": { "optional": true } } }, "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/https-proxy-agent": { "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==", "dev": true, "dependencies": { "agent-base": "6", "debug": "4" }, "engines": { "node": ">= 6" } }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "engines": { "node": ">=10.17.0" } }, "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "dependencies": { "ms": "^2.0.0" } }, "node_modules/husky": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true, "bin": { "husky": "lib/bin.js" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/typicode" } }, "node_modules/hyphenate-style-name": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" }, "node_modules/iconv-lite": { "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" }, "engines": { "node": ">=0.10.0" } }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "engines": { "node": "^10 || ^12 || >= 14" }, "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "engines": { "node": ">= 4" } }, "node_modules/ignore-walk": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", "dev": true, "dependencies": { "minimatch": "^5.0.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/ignore-walk/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/ignore-walk/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, "node_modules/image-size": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", "dependencies": { "queue": "6.0.2" }, "bin": { "image-size": "bin/image-size.js" }, "engines": { "node": ">=14.0.0" } }, "node_modules/immer": { "version": "9.0.21", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" } }, "node_modules/import-fresh": { "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" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "engines": { "node": ">=4" } }, "node_modules/import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "engines": { "node": ">=4" } }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-local/node_modules/pkg-dir": { "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==", "dev": true, "dependencies": { "find-up": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "engines": { "node": ">=8" } }, "node_modules/infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true }, "node_modules/infima": { "version": "0.2.0-alpha.43", "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==", "engines": { "node": ">=12" } }, "node_modules/inflight": { "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" } }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/init-package-json": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", "dev": true, "dependencies": { "npm-package-arg": "^9.0.1", "promzard": "^0.3.0", "read": "^1.0.7", "read-package-json": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^4.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/init-package-json/node_modules/hosted-git-info": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/init-package-json/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/init-package-json/node_modules/npm-package-arg": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "proc-log": "^2.0.1", "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/init-package-json/node_modules/proc-log": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/init-package-json/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/init-package-json/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/init-package-json/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/inline-style-parser": { "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==" }, "node_modules/inquirer": { "version": "8.2.6", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", "ora": "^5.4.1", "run-async": "^2.4.0", "rxjs": "^7.5.5", "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6", "wrap-ansi": "^6.0.1" }, "engines": { "node": ">=12.0.0" } }, "node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/inquirer/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/inquirer/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/inquirer/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/inquirer/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, "engines": { "node": ">= 0.4" } }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "engines": { "node": ">= 0.10" } }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dependencies": { "loose-envify": "^1.0.0" } }, "node_modules/ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "node_modules/ipaddr.js": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "engines": { "node": ">= 10" } }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/is-alphanumerical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", "is-typed-array": "^1.1.10" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-binary-path": { "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" }, "engines": { "node": ">=8" } }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "engines": { "node": ">=4" } }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dependencies": { "ci-info": "^2.0.0" }, "bin": { "is-ci": "bin.js" } }, "node_modules/is-ci/node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "node_modules/is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dependencies": { "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { "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" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-decimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "bin": { "is-docker": "cli.js" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "engines": { "node": ">=0.10.0" } }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/is-glob": { "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" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-hexadecimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/is-in-browser": { "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==" }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "engines": { "node": ">=8" } }, "node_modules/is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "engines": { "node": ">=6" } }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-plain-object": { "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" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-potential-custom-element-name": { "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==", "dev": true }, "node_modules/is-regex": { "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" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "engines": { "node": ">=0.10.0" } }, "node_modules/is-root": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", "engines": { "node": ">=6" } }, "node_modules/is-shared-array-buffer": { "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==", "dev": true, "dependencies": { "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-ssh": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", "dev": true, "dependencies": { "protocols": "^2.0.1" } }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "dependencies": { "text-extensions": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-typed-array": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/is-word-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/is-wsl": { "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" }, "engines": { "node": ">=8" } }, "node_modules/is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-lib-coverage": { "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==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "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" }, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" } }, "node_modules/istanbul-lib-report/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { "semver": "^7.5.3" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/istanbul-lib-report/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/istanbul-lib-source-maps": { "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==", "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" }, "engines": { "node": ">=10" } }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-reports": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jackspeak": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/jake": { "version": "10.8.7", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", "filelist": "^1.0.4", "minimatch": "^3.1.2" }, "bin": { "jake": "bin/cli.js" }, "engines": { "node": ">=10" } }, "node_modules/jake/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jake/node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jake/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jake/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jake/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jake/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", "dev": true, "dependencies": { "@jest/core": "^29.6.2", "@jest/types": "^29.6.1", "import-local": "^3.0.2", "jest-cli": "^29.6.2" }, "bin": { "jest": "bin/jest.js" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { "optional": true } } }, "node_modules/jest-changed-files": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", "dev": true, "dependencies": { "execa": "^5.0.0", "p-limit": "^3.1.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/expect": "^29.6.2", "@jest/test-result": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", "jest-each": "^29.6.2", "jest-matcher-utils": "^29.6.2", "jest-message-util": "^29.6.2", "jest-runtime": "^29.6.2", "jest-snapshot": "^29.6.2", "jest-util": "^29.6.2", "p-limit": "^3.1.0", "pretty-format": "^29.6.2", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-circus/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-circus/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-circus/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-circus/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-circus/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-circus/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-circus/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-cli": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", "dev": true, "dependencies": { "@jest/core": "^29.6.2", "@jest/test-result": "^29.6.2", "@jest/types": "^29.6.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", "jest-config": "^29.6.2", "jest-util": "^29.6.2", "jest-validate": "^29.6.2", "prompts": "^2.0.1", "yargs": "^17.3.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "node-notifier": { "optional": true } } }, "node_modules/jest-cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-cli/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-cli/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-cli/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-cli/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-config": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.6.2", "@jest/types": "^29.6.1", "babel-jest": "^29.6.2", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", "jest-circus": "^29.6.2", "jest-environment-node": "^29.6.2", "jest-get-type": "^29.4.3", "jest-regex-util": "^29.4.3", "jest-resolve": "^29.6.2", "jest-runner": "^29.6.2", "jest-util": "^29.6.2", "jest-validate": "^29.6.2", "micromatch": "^4.0.4", "parse-json": "^5.2.0", "pretty-format": "^29.6.2", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@types/node": "*", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, "ts-node": { "optional": true } } }, "node_modules/jest-config/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-config/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-config/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-config/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-config/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-config/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-config/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-diff": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", "jest-get-type": "^29.4.3", "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-diff/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-diff/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-diff/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-diff/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-diff/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-diff/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-docblock": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-each": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", "jest-util": "^29.6.2", "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-each/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-each/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-each/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-each/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-each/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-each/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-environment-jsdom": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", "dev": true, "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" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", "dev": true, "dependencies": { "@jest/fake-timers": "^27.5.1", "@jest/types": "^27.5.1", "@types/node": "*", "jest-mock": "^27.5.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", "dev": true, "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" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom/node_modules/@jest/types": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, "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" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom/node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/jest-environment-jsdom/node_modules/@sinonjs/fake-timers": { "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==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "node_modules/jest-environment-jsdom/node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, "engines": { "node": ">= 6" } }, "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { "version": "16.0.5", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/jest-environment-jsdom/node_modules/acorn-globals": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "dependencies": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" } }, "node_modules/jest-environment-jsdom/node_modules/acorn-globals/node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/jest-environment-jsdom/node_modules/acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-environment-jsdom/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-environment-jsdom/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-environment-jsdom/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-environment-jsdom/node_modules/cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, "node_modules/jest-environment-jsdom/node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, "dependencies": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.0.0" }, "engines": { "node": ">=10" } }, "node_modules/jest-environment-jsdom/node_modules/domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, "dependencies": { "webidl-conversions": "^5.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-environment-jsdom/node_modules/domexception/node_modules/webidl-conversions": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-environment-jsdom/node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, "node_modules/jest-environment-jsdom/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, "dependencies": { "whatwg-encoding": "^1.0.5" }, "engines": { "node": ">=10" } }, "node_modules/jest-environment-jsdom/node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "dependencies": { "@tootallnate/once": "1", "agent-base": "6", "debug": "4" }, "engines": { "node": ">= 6" } }, "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { "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==", "dev": true, "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" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom/node_modules/jest-mock": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", "dev": true, "dependencies": { "@jest/types": "^27.5.1", "@types/node": "*" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom/node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dev": true, "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" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom/node_modules/jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "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" }, "engines": { "node": ">=10" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "node_modules/jest-environment-jsdom/node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "node_modules/jest-environment-jsdom/node_modules/pretty-format": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-environment-jsdom/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-environment-jsdom/node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "node_modules/jest-environment-jsdom/node_modules/saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "dependencies": { "xmlchars": "^2.2.0" }, "engines": { "node": ">=10" } }, "node_modules/jest-environment-jsdom/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-environment-jsdom/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-environment-jsdom/node_modules/tr46": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "dependencies": { "punycode": "^2.1.1" }, "engines": { "node": ">=8" } }, "node_modules/jest-environment-jsdom/node_modules/type-detect": { "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==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "dependencies": { "xml-name-validator": "^3.0.0" }, "engines": { "node": ">=10" } }, "node_modules/jest-environment-jsdom/node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, "engines": { "node": ">=10.4" } }, "node_modules/jest-environment-jsdom/node_modules/whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, "dependencies": { "iconv-lite": "0.4.24" } }, "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "dependencies": { "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" }, "engines": { "node": ">=10" } }, "node_modules/jest-environment-jsdom/node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, "engines": { "node": ">=8.3.0" }, "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { "bufferutil": { "optional": true }, "utf-8-validate": { "optional": true } } }, "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { "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==", "dev": true }, "node_modules/jest-environment-node": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-get-type": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.4.3", "jest-util": "^29.6.2", "jest-worker": "^29.6.2", "micromatch": "^4.0.4", "walker": "^1.0.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "node_modules/jest-leak-detector": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", "dev": true, "dependencies": { "jest-get-type": "^29.4.3", "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", "dev": true, "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.6.2", "jest-get-type": "^29.4.3", "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-matcher-utils/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-matcher-utils/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-matcher-utils/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-matcher-utils/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-matcher-utils/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-message-util": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", "pretty-format": "^29.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-message-util/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-message-util/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-message-util/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-message-util/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-message-util/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-message-util/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-mock": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "@types/node": "*", "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-pnp-resolver": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "engines": { "node": ">=6" }, "peerDependencies": { "jest-resolve": "*" }, "peerDependenciesMeta": { "jest-resolve": { "optional": true } } }, "node_modules/jest-regex-util": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.6.2", "jest-pnp-resolver": "^1.2.2", "jest-util": "^29.6.2", "jest-validate": "^29.6.2", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve-dependencies": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", "dev": true, "dependencies": { "jest-regex-util": "^29.4.3", "jest-snapshot": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-resolve/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-resolve/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-resolve/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-resolve/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-resolve/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-resolve/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-runner": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", "dev": true, "dependencies": { "@jest/console": "^29.6.2", "@jest/environment": "^29.6.2", "@jest/test-result": "^29.6.2", "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", "jest-docblock": "^29.4.3", "jest-environment-node": "^29.6.2", "jest-haste-map": "^29.6.2", "jest-leak-detector": "^29.6.2", "jest-message-util": "^29.6.2", "jest-resolve": "^29.6.2", "jest-runtime": "^29.6.2", "jest-util": "^29.6.2", "jest-watcher": "^29.6.2", "jest-worker": "^29.6.2", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-runner/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-runner/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-runner/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-runner/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-runner/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/jest-runner/node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/jest-runner/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-runtime": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/globals": "^29.6.2", "@jest/source-map": "^29.6.0", "@jest/test-result": "^29.6.2", "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", "jest-haste-map": "^29.6.2", "jest-message-util": "^29.6.2", "jest-mock": "^29.6.2", "jest-regex-util": "^29.4.3", "jest-resolve": "^29.6.2", "jest-snapshot": "^29.6.2", "jest-util": "^29.6.2", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runtime/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-runtime/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-runtime/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-runtime/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-runtime/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-runtime/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-runtime/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-snapshot": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", "@jest/expect-utils": "^29.6.2", "@jest/transform": "^29.6.2", "@jest/types": "^29.6.1", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", "expect": "^29.6.2", "graceful-fs": "^4.2.9", "jest-diff": "^29.6.2", "jest-get-type": "^29.4.3", "jest-matcher-utils": "^29.6.2", "jest-message-util": "^29.6.2", "jest-util": "^29.6.2", "natural-compare": "^1.4.0", "pretty-format": "^29.6.2", "semver": "^7.5.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-snapshot/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-snapshot/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-snapshot/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-snapshot/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-snapshot/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/jest-snapshot/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/jest-snapshot/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-snapshot/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/jest-util": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", "dependencies": { "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-util/node_modules/ansi-styles": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-util/node_modules/chalk": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-util/node_modules/color-convert": { "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" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-util/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jest-util/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/jest-util/node_modules/supports-color": { "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" }, "engines": { "node": ">=8" } }, "node_modules/jest-validate": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", "dev": true, "dependencies": { "@jest/types": "^29.6.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", "leven": "^3.1.0", "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-validate/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/jest-validate/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-validate/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-validate/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-validate/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-watch-typeahead": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-2.2.2.tgz", "integrity": "sha512-+QgOFW4o5Xlgd6jGS5X37i08tuuXNW8X0CV9WNFi+3n8ExCIP+E1melYhvYLjv5fE6D0yyzk74vsSO8I6GqtvQ==", "dev": true, "dependencies": { "ansi-escapes": "^6.0.0", "chalk": "^5.2.0", "jest-regex-util": "^29.0.0", "jest-watcher": "^29.0.0", "slash": "^5.0.0", "string-length": "^5.0.1", "strip-ansi": "^7.0.1" }, "engines": { "node": "^14.17.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "jest": "^27.0.0 || ^28.0.0 || ^29.0.0" } }, "node_modules/jest-watch-typeahead/node_modules/ansi-escapes": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", "dev": true, "dependencies": { "type-fest": "^3.0.0" }, "engines": { "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/jest-watch-typeahead/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/jest-watch-typeahead/node_modules/chalk": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-watch-typeahead/node_modules/char-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", "dev": true, "engines": { "node": ">=12.20" } }, "node_modules/jest-watch-typeahead/node_modules/slash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, "engines": { "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/jest-watch-typeahead/node_modules/string-length": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", "dev": true, "dependencies": { "char-regex": "^2.0.0", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/jest-watch-typeahead/node_modules/type-fest": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", "dev": true, "engines": { "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/jest-watcher": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", "dev": true, "dependencies": { "@jest/test-result": "^29.6.2", "@jest/types": "^29.6.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", "jest-util": "^29.6.2", "string-length": "^4.0.1" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-watcher/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-watcher/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/jest-watcher/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/jest-watcher/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/jest-watcher/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-watcher/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/jest-worker": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", "dependencies": { "@types/node": "*", "jest-util": "^29.6.2", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/jest-worker/node_modules/supports-color": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/jiti": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", "bin": { "jiti": "bin/jiti.js" } }, "node_modules/joi": { "version": "17.9.2", "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", "@sideway/address": "^4.1.3", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, "node_modules/jquery": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz", "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "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" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/jsdom": { "version": "20.0.3", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, "dependencies": { "abab": "^2.0.6", "acorn": "^8.8.1", "acorn-globals": "^7.0.0", "cssom": "^0.5.0", "cssstyle": "^2.3.0", "data-urls": "^3.0.2", "decimal.js": "^10.4.2", "domexception": "^4.0.0", "escodegen": "^2.0.0", "form-data": "^4.0.0", "html-encoding-sniffer": "^3.0.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.2", "parse5": "^7.1.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^4.1.2", "w3c-xmlserializer": "^4.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^2.0.0", "whatwg-mimetype": "^3.0.0", "whatwg-url": "^11.0.0", "ws": "^8.11.0", "xml-name-validator": "^4.0.0" }, "engines": { "node": ">=14" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "bin": { "jsesc": "bin/jsesc" }, "engines": { "node": ">=4" } }, "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/json-schema-compare": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", "dependencies": { "lodash": "^4.17.4" } }, "node_modules/json-schema-merge-allof": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", "dependencies": { "compute-lcm": "^1.1.2", "json-schema-compare": "^0.2.2", "lodash": "^4.17.20" }, "engines": { "node": ">=12.0.0" } }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json-stable-stringify-without-jsonify": { "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==", "dev": true }, "node_modules/json-stringify-nice": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", "dev": true, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, "node_modules/json2mq": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", "dependencies": { "string-convert": "^0.2.0" } }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "bin": { "json5": "lib/cli.js" }, "engines": { "node": ">=6" } }, "node_modules/jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, "node_modules/jsonfile": { "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" } }, "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" ] }, "node_modules/jsonpointer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" }, "bin": { "JSONStream": "bin.js" }, "engines": { "node": "*" } }, "node_modules/jss": { "version": "10.10.0", "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz", "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==", "dependencies": { "@babel/runtime": "^7.3.1", "csstype": "^3.0.2", "is-in-browser": "^1.1.3", "tiny-warning": "^1.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/jss" } }, "node_modules/jss-plugin-camel-case": { "version": "10.10.0", "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz", "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==", "dependencies": { "@babel/runtime": "^7.3.1", "hyphenate-style-name": "^1.0.3", "jss": "10.10.0" } }, "node_modules/jss-plugin-default-unit": { "version": "10.10.0", "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz", "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==", "dependencies": { "@babel/runtime": "^7.3.1", "jss": "10.10.0" } }, "node_modules/jss-plugin-global": { "version": "10.10.0", "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz", "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==", "dependencies": { "@babel/runtime": "^7.3.1", "jss": "10.10.0" } }, "node_modules/jss-plugin-nested": { "version": "10.10.0", "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz", "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==", "dependencies": { "@babel/runtime": "^7.3.1", "jss": "10.10.0", "tiny-warning": "^1.0.2" } }, "node_modules/jss-plugin-props-sort": { "version": "10.10.0", "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz", "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==", "dependencies": { "@babel/runtime": "^7.3.1", "jss": "10.10.0" } }, "node_modules/jss-plugin-rule-value-function": { "version": "10.10.0", "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz", "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==", "dependencies": { "@babel/runtime": "^7.3.1", "jss": "10.10.0", "tiny-warning": "^1.0.2" } }, "node_modules/jss-plugin-vendor-prefixer": { "version": "10.10.0", "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz", "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==", "dependencies": { "@babel/runtime": "^7.3.1", "css-vendor": "^2.0.8", "jss": "10.10.0" } }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" } }, "node_modules/just-diff": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", "dev": true }, "node_modules/just-diff-apply": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", "dev": true }, "node_modules/just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, "node_modules/keyboard-key": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/keyboard-key/-/keyboard-key-1.1.0.tgz", "integrity": "sha512-qkBzPTi3rlAKvX7k0/ub44sqOfXeLc/jcnGGmj5c7BJpU8eDrEVPyhCvNYAaoubbsLm9uGWwQJO1ytQK1a9/dQ==" }, "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dependencies": { "json-buffer": "3.0.0" } }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { "node": ">=0.10.0" } }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "engines": { "node": ">=6" } }, "node_modules/language-subtag-registry": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", "dev": true }, "node_modules/language-tags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", "dev": true, "dependencies": { "language-subtag-registry": "~0.3.2" } }, "node_modules/latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dependencies": { "package-json": "^6.3.0" }, "engines": { "node": ">=8" } }, "node_modules/launch-editor": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.7.3" } }, "node_modules/lerna": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/lerna/-/lerna-6.6.2.tgz", "integrity": "sha512-W4qrGhcdutkRdHEaDf9eqp7u4JvI+1TwFy5woX6OI8WPe4PYBdxuILAsvhp614fUG41rKSGDKlOh+AWzdSidTg==", "dev": true, "dependencies": { "@lerna/child-process": "6.6.2", "@lerna/create": "6.6.2", "@lerna/legacy-package-management": "6.6.2", "@npmcli/arborist": "6.2.3", "@npmcli/run-script": "4.1.7", "@nrwl/devkit": ">=15.5.2 < 16", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "19.0.3", "byte-size": "7.0.0", "chalk": "4.1.0", "clone-deep": "4.0.1", "cmd-shim": "5.0.0", "columnify": "1.6.0", "config-chain": "1.1.12", "conventional-changelog-angular": "5.0.12", "conventional-changelog-core": "4.2.4", "conventional-recommended-bump": "6.1.0", "cosmiconfig": "7.0.0", "dedent": "0.7.0", "dot-prop": "6.0.1", "envinfo": "^7.7.4", "execa": "5.0.0", "fs-extra": "9.1.0", "get-port": "5.1.1", "get-stream": "6.0.0", "git-url-parse": "13.1.0", "glob-parent": "5.1.2", "globby": "11.1.0", "graceful-fs": "4.2.10", "has-unicode": "2.0.1", "import-local": "^3.0.2", "init-package-json": "3.0.2", "inquirer": "^8.2.4", "is-ci": "2.0.0", "is-stream": "2.0.0", "js-yaml": "^4.1.0", "libnpmaccess": "^6.0.3", "libnpmpublish": "7.1.4", "load-json-file": "6.2.0", "make-dir": "3.1.0", "minimatch": "3.0.5", "multimatch": "5.0.0", "node-fetch": "2.6.7", "npm-package-arg": "8.1.1", "npm-packlist": "5.1.1", "npm-registry-fetch": "^14.0.3", "npmlog": "^6.0.2", "nx": ">=15.5.2 < 16", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-pipe": "3.1.0", "p-queue": "6.6.2", "p-reduce": "2.1.0", "p-waterfall": "2.1.1", "pacote": "15.1.1", "pify": "5.0.0", "read-cmd-shim": "3.0.0", "read-package-json": "5.0.1", "resolve-from": "5.0.0", "rimraf": "^4.4.1", "semver": "^7.3.8", "signal-exit": "3.0.7", "slash": "3.0.0", "ssri": "9.0.1", "strong-log-transformer": "2.1.0", "tar": "6.1.11", "temp-dir": "1.0.0", "typescript": "^3 || ^4", "upath": "^2.0.1", "uuid": "8.3.2", "validate-npm-package-license": "3.0.4", "validate-npm-package-name": "4.0.0", "write-file-atomic": "4.0.1", "write-pkg": "4.0.0", "yargs": "16.2.0", "yargs-parser": "20.2.4" }, "bin": { "lerna": "dist/cli.js" }, "engines": { "node": "^14.17.0 || >=16.0.0" } }, "node_modules/lerna/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/lerna/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/lerna/node_modules/chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/lerna/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/lerna/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/lerna/node_modules/cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, "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" }, "engines": { "node": ">=10" } }, "node_modules/lerna/node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, "node_modules/lerna/node_modules/execa": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/lerna/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { "node": ">=10" } }, "node_modules/lerna/node_modules/get-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lerna/node_modules/glob": { "version": "9.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", "minipass": "^4.2.4", "path-scurry": "^1.6.1" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/lerna/node_modules/glob/node_modules/minimatch": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/lerna/node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "node_modules/lerna/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/lerna/node_modules/is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/lerna/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/lerna/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/lerna/node_modules/make-dir": { "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==", "dev": true, "dependencies": { "semver": "^6.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lerna/node_modules/make-dir/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/lerna/node_modules/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/lerna/node_modules/minipass": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/lerna/node_modules/rimraf": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, "dependencies": { "glob": "^9.2.0" }, "bin": { "rimraf": "dist/cjs/src/bin.js" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/lerna/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/lerna/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/lerna/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/lerna/node_modules/write-file-atomic": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/lerna/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/lerna/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "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" }, "engines": { "node": ">=10" } }, "node_modules/lerna/node_modules/yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "engines": { "node": ">=6" } }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/libnpmaccess": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.4.tgz", "integrity": "sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag==", "dev": true, "dependencies": { "aproba": "^2.0.0", "minipass": "^3.1.1", "npm-package-arg": "^9.0.1", "npm-registry-fetch": "^13.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/libnpmaccess/node_modules/@npmcli/fs": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dev": true, "dependencies": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/libnpmaccess/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/libnpmaccess/node_modules/cacache": { "version": "16.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "dev": true, "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", "ssri": "^9.0.0", "tar": "^6.1.11", "unique-filename": "^2.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/libnpmaccess/node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "dependencies": { "minipass": "^3.0.0" }, "engines": { "node": ">= 8" } }, "node_modules/libnpmaccess/node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/libnpmaccess/node_modules/hosted-git-info": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/libnpmaccess/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/libnpmaccess/node_modules/make-fetch-happen": { "version": "10.2.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", "socks-proxy-agent": "^7.0.0", "ssri": "^9.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/libnpmaccess/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, "node_modules/libnpmaccess/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/libnpmaccess/node_modules/minipass-fetch": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "node_modules/libnpmaccess/node_modules/npm-package-arg": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "proc-log": "^2.0.1", "semver": "^7.3.5", "validate-npm-package-name": "^4.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/libnpmaccess/node_modules/npm-registry-fetch": { "version": "13.3.1", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", "dev": true, "dependencies": { "make-fetch-happen": "^10.0.6", "minipass": "^3.1.6", "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^9.0.1", "proc-log": "^2.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/libnpmaccess/node_modules/proc-log": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/libnpmaccess/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/libnpmaccess/node_modules/rimraf/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/libnpmaccess/node_modules/rimraf/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "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" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/libnpmaccess/node_modules/rimraf/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/libnpmaccess/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/libnpmaccess/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/libnpmaccess/node_modules/unique-filename": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, "dependencies": { "unique-slug": "^3.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/libnpmaccess/node_modules/unique-slug": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/libnpmaccess/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/libnpmpublish": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-7.1.4.tgz", "integrity": "sha512-mMntrhVwut5prP4rJ228eEbEyvIzLWhqFuY90j5QeXBCTT2pWSMno7Yo2S2qplPUr02zPurGH4heGLZ+wORczg==", "dev": true, "dependencies": { "ci-info": "^3.6.1", "normalize-package-data": "^5.0.0", "npm-package-arg": "^10.1.0", "npm-registry-fetch": "^14.0.3", "proc-log": "^3.0.0", "semver": "^7.3.7", "sigstore": "^1.4.0", "ssri": "^10.0.1" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/libnpmpublish/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/libnpmpublish/node_modules/npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "dependencies": { "hosted-git-info": "^6.0.0", "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/libnpmpublish/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/libnpmpublish/node_modules/ssri": { "version": "10.0.4", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", "dev": true, "dependencies": { "minipass": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/libnpmpublish/node_modules/validate-npm-package-name": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { "builtins": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/libnpmpublish/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "engines": { "node": ">=10" } }, "node_modules/lines-and-columns": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/lint-staged": { "version": "13.2.3", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.2.3.tgz", "integrity": "sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==", "dev": true, "dependencies": { "chalk": "5.2.0", "cli-truncate": "^3.1.0", "commander": "^10.0.0", "debug": "^4.3.4", "execa": "^7.0.0", "lilconfig": "2.1.0", "listr2": "^5.0.7", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-inspect": "^1.12.3", "pidtree": "^0.6.0", "string-argv": "^0.3.1", "yaml": "^2.2.2" }, "bin": { "lint-staged": "bin/lint-staged.js" }, "engines": { "node": "^14.13.1 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/lint-staged" } }, "node_modules/lint-staged/node_modules/chalk": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/lint-staged/node_modules/commander": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, "engines": { "node": ">=14" } }, "node_modules/lint-staged/node_modules/execa": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", "human-signals": "^4.3.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^3.0.7", "strip-final-newline": "^3.0.0" }, "engines": { "node": "^14.18.0 || ^16.14.0 || >=18.0.0" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/lint-staged/node_modules/human-signals": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, "engines": { "node": ">=14.18.0" } }, "node_modules/lint-staged/node_modules/is-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lint-staged/node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lint-staged/node_modules/npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dev": true, "dependencies": { "path-key": "^4.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lint-staged/node_modules/onetime": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "dependencies": { "mimic-fn": "^4.0.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lint-staged/node_modules/path-key": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lint-staged/node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lint-staged/node_modules/yaml": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "dev": true, "engines": { "node": ">= 14" } }, "node_modules/listr2": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/listr2/-/listr2-5.0.8.tgz", "integrity": "sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==", "dev": true, "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.19", "log-update": "^4.0.0", "p-map": "^4.0.0", "rfdc": "^1.3.0", "rxjs": "^7.8.0", "through": "^2.3.8", "wrap-ansi": "^7.0.0" }, "engines": { "node": "^14.13.1 || >=16.0.0" }, "peerDependencies": { "enquirer": ">= 2.3.0 < 3" }, "peerDependenciesMeta": { "enquirer": { "optional": true } } }, "node_modules/listr2/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/listr2/node_modules/cli-truncate": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/listr2/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/listr2/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/listr2/node_modules/is-fullwidth-code-point": { "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==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/listr2/node_modules/slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/listr2/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/load-json-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, "dependencies": { "graceful-fs": "^4.1.15", "parse-json": "^5.0.0", "strip-bom": "^4.0.0", "type-fest": "^0.6.0" }, "engines": { "node": ">=8" } }, "node_modules/load-json-file/node_modules/type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", "engines": { "node": ">= 12.13.0" } }, "node_modules/locate-path": { "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" }, "engines": { "node": ">=8" } }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, "node_modules/lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.flow": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, "node_modules/lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "node_modules/lodash.mergewith": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/log-update": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", "slice-ansi": "^4.0.0", "wrap-ansi": "^6.2.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/log-update/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/log-update/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "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==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/loose-envify": { "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" }, "bin": { "loose-envify": "cli.js" } }, "node_modules/lower-case": { "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" } }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "engines": { "node": ">=0.10.0" } }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/magic-string": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.13" }, "engines": { "node": ">=12" } }, "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" }, "engines": { "node": ">=6" } }, "node_modules/make-dir/node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/make-dir/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "node_modules/make-fetch-happen": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^17.0.0", "http-cache-semantics": "^4.1.1", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", "minipass": "^5.0.0", "minipass-fetch": "^3.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", "socks-proxy-agent": "^7.0.0", "ssri": "^10.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/make-fetch-happen/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/make-fetch-happen/node_modules/ssri": { "version": "10.0.4", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", "dev": true, "dependencies": { "minipass": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "dependencies": { "tmpl": "1.0.5" } }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/markdown-escapes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/markdown-to-jsx": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.3.2.tgz", "integrity": "sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==", "engines": { "node": ">= 10" }, "peerDependencies": { "react": ">= 0.14.0" } }, "node_modules/mdast-squeeze-paragraphs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", "dependencies": { "unist-util-remove": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/mdast-util-definitions": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", "dependencies": { "unist-util-visit": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/mdast-util-to-hast": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", "dependencies": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", "mdast-util-definitions": "^4.0.0", "mdurl": "^1.0.0", "unist-builder": "^2.0.0", "unist-util-generated": "^1.0.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/mdast-util-to-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" }, "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } }, "node_modules/memfs": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dependencies": { "fs-monkey": "^1.0.4" }, "engines": { "node": ">= 4.0.0" } }, "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, "node_modules/meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", "normalize-package-data": "^3.0.0", "read-pkg-up": "^7.0.1", "redent": "^3.0.0", "trim-newlines": "^3.0.0", "type-fest": "^0.18.0", "yargs-parser": "^20.2.3" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/meow/node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" } }, "node_modules/meow/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/meow/node_modules/normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" }, "engines": { "node": ">=10" } }, "node_modules/meow/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", "parse-json": "^5.0.0", "type-fest": "^0.6.0" }, "engines": { "node": ">=8" } }, "node_modules/meow/node_modules/read-pkg-up": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", "type-fest": "^0.8.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "node_modules/meow/node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/meow/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/meow/node_modules/type-fest": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/meow/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/meow/node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { "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" }, "engines": { "node": ">=8.6" } }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "bin": { "mime": "cli.js" }, "engines": { "node": ">=4" } }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "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" }, "engines": { "node": ">= 0.6" } }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { "node": ">=6" } }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "engines": { "node": ">=4" } }, "node_modules/min-document": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", "dev": true, "dependencies": { "dom-walk": "^0.1.0" } }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/mini-css-extract-plugin": { "version": "2.7.6", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", "dependencies": { "schema-utils": "^4.0.0" }, "engines": { "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^5.0.0" } }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimatch": { "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" }, "engines": { "node": "*" } }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minimist-options": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" }, "engines": { "node": ">= 6" } }, "node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/minipass-collect": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "dependencies": { "minipass": "^3.0.0" }, "engines": { "node": ">= 8" } }, "node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minipass-collect/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/minipass-fetch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", "dev": true, "dependencies": { "minipass": "^5.0.0", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "dependencies": { "minipass": "^3.0.0" }, "engines": { "node": ">= 8" } }, "node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minipass-flush/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/minipass-json-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, "dependencies": { "jsonparse": "^1.3.1", "minipass": "^3.0.0" } }, "node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minipass-json-stream/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "dependencies": { "minipass": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minipass-pipeline/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, "dependencies": { "minipass": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minipass-sized/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" }, "engines": { "node": ">= 8" } }, "node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" } }, "node_modules/mkdirp-infer-owner": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", "dev": true, "dependencies": { "chownr": "^2.0.0", "infer-owner": "^1.0.4", "mkdirp": "^1.0.3" }, "engines": { "node": ">=10" } }, "node_modules/mocha": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "bin": { "_mocha": "bin/_mocha", "mocha": "bin/mocha.js" }, "engines": { "node": ">= 14.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/mocha/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/mocha/node_modules/nanoid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, "engines": { "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/mocha/node_modules/p-locate": { "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==", "dev": true, "dependencies": { "p-limit": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "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" }, "engines": { "node": ">=10" } }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", "engines": { "node": "*" } }, "node_modules/monaco-editor": { "version": "0.38.0", "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.38.0.tgz", "integrity": "sha512-11Fkh6yzEmwx7O0YoLxeae0qEGFwmyPRlVxpg7oF9czOOCB/iCjdJrG5I67da5WiXK3YJCxoz9TJFE8Tfq/v9A==" }, "node_modules/mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", "engines": { "node": ">=10" } }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multicast-dns": { "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" }, "bin": { "multicast-dns": "cli.js" } }, "node_modules/multimatch": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "dev": true, "dependencies": { "@types/minimatch": "^3.0.3", "array-differ": "^3.0.0", "array-union": "^2.1.0", "arrify": "^2.0.1", "minimatch": "^3.0.4" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/multimatch/node_modules/arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], "bin": { "nanoid": "bin/nanoid.cjs" }, "engines": { "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "node_modules/natural-compare-lite": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/nise": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz", "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0", "@sinonjs/fake-timers": "^6.0.0", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", "path-to-regexp": "^1.7.0" } }, "node_modules/nise/node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "node_modules/nise/node_modules/type-detect": { "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==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/no-case": { "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_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dependencies": { "lodash": "^4.17.21" } }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, "engines": { "node": "4.x || >=6.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "peerDependenciesMeta": { "encoding": { "optional": true } } }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-gyp": { "version": "9.4.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", "dev": true, "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^11.0.3", "nopt": "^6.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.2", "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { "node": "^12.13 || ^14.13 || >=16" } }, "node_modules/node-gyp-build": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", "dev": true, "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "node_modules/node-gyp/node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, "node_modules/node-gyp/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/node-gyp/node_modules/nopt": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, "dependencies": { "abbrev": "^1.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/node-gyp/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/node-gyp/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/node-gyp/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, "node_modules/node-machine-id": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", "dev": true }, "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, "node_modules/nopt": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", "dev": true, "dependencies": { "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/normalize-package-data": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "dependencies": { "hosted-git-info": "^6.0.0", "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/normalize-package-data/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/normalize-package-data/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/normalize-package-data/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm-bundled": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, "dependencies": { "npm-normalize-package-bin": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-install-checks": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", "dev": true, "dependencies": { "semver": "^7.1.1" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-install-checks/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/npm-install-checks/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/npm-install-checks/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/npm-normalize-package-bin": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-package-arg": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", "dev": true, "dependencies": { "hosted-git-info": "^3.0.6", "semver": "^7.0.0", "validate-npm-package-name": "^3.0.0" }, "engines": { "node": ">=10" } }, "node_modules/npm-package-arg/node_modules/builtins": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", "dev": true }, "node_modules/npm-package-arg/node_modules/hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" } }, "node_modules/npm-package-arg/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/npm-package-arg/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dev": true, "dependencies": { "builtins": "^1.0.3" } }, "node_modules/npm-package-arg/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/npm-packlist": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", "dev": true, "dependencies": { "glob": "^8.0.1", "ignore-walk": "^5.0.1", "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" }, "bin": { "npm-packlist": "bin/index.js" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm-packlist/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/npm-packlist/node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm-packlist/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, "node_modules/npm-packlist/node_modules/npm-bundled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, "dependencies": { "npm-normalize-package-bin": "^1.0.1" } }, "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true }, "node_modules/npm-pick-manifest": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", "dev": true, "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", "npm-package-arg": "^10.0.0", "semver": "^7.3.5" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-pick-manifest/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "dependencies": { "hosted-git-info": "^6.0.0", "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-pick-manifest/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/npm-pick-manifest/node_modules/validate-npm-package-name": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { "builtins": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-pick-manifest/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/npm-registry-fetch": { "version": "14.0.5", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", "dev": true, "dependencies": { "make-fetch-happen": "^11.0.0", "minipass": "^5.0.0", "minipass-fetch": "^3.0.0", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^10.0.0", "proc-log": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-registry-fetch/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "dependencies": { "hosted-git-info": "^6.0.0", "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-registry-fetch/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/npm-registry-fetch/node_modules/validate-npm-package-name": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { "builtins": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-registry-fetch/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/npm-run-path": { "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" }, "engines": { "node": ">=8" } }, "node_modules/npmlog": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", "gauge": "^4.0.3", "set-blocking": "^2.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/nprogress": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" }, "node_modules/nth-check": { "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" }, "funding": { "url": "https://github.com/fb55/nth-check?sponsor=1" } }, "node_modules/nwsapi": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, "node_modules/nx": { "version": "15.9.4", "resolved": "https://registry.npmjs.org/nx/-/nx-15.9.4.tgz", "integrity": "sha512-P1G4t59UvE/lkHyruLeSOB5ZuNyh01IwU0tTUOi8f9s/NbP7+OQ8MYVwDV74JHTr6mQgjlS+n+4Eox8tVm9itA==", "dev": true, "hasInstallScript": true, "dependencies": { "@nrwl/cli": "15.9.4", "@nrwl/tao": "15.9.4", "@parcel/watcher": "2.0.4", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "^3.0.0-rc.18", "@zkochan/js-yaml": "0.0.6", "axios": "^1.0.0", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "^7.0.2", "dotenv": "~10.0.0", "enquirer": "~2.3.6", "fast-glob": "3.2.7", "figures": "3.2.0", "flat": "^5.0.2", "fs-extra": "^11.1.0", "glob": "7.1.4", "ignore": "^5.0.4", "js-yaml": "4.1.0", "jsonc-parser": "3.2.0", "lines-and-columns": "~2.0.3", "minimatch": "3.0.5", "npm-run-path": "^4.0.1", "open": "^8.4.0", "semver": "7.3.4", "string-width": "^4.2.3", "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", "tmp": "~0.2.1", "tsconfig-paths": "^4.1.2", "tslib": "^2.3.0", "v8-compile-cache": "2.3.0", "yargs": "^17.6.2", "yargs-parser": "21.1.1" }, "bin": { "nx": "bin/nx.js" }, "optionalDependencies": { "@nrwl/nx-darwin-arm64": "15.9.4", "@nrwl/nx-darwin-x64": "15.9.4", "@nrwl/nx-linux-arm-gnueabihf": "15.9.4", "@nrwl/nx-linux-arm64-gnu": "15.9.4", "@nrwl/nx-linux-arm64-musl": "15.9.4", "@nrwl/nx-linux-x64-gnu": "15.9.4", "@nrwl/nx-linux-x64-musl": "15.9.4", "@nrwl/nx-win32-arm64-msvc": "15.9.4", "@nrwl/nx-win32-x64-msvc": "15.9.4" }, "peerDependencies": { "@swc-node/register": "^1.4.2", "@swc/core": "^1.2.173" }, "peerDependenciesMeta": { "@swc-node/register": { "optional": true }, "@swc/core": { "optional": true } } }, "node_modules/nx/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/nx/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/nx/node_modules/axios": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "node_modules/nx/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/nx/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/nx/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/nx/node_modules/fast-glob": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "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" }, "engines": { "node": ">=8" } }, "node_modules/nx/node_modules/fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { "node": ">=14.14" } }, "node_modules/nx/node_modules/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" } }, "node_modules/nx/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/nx/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/nx/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/nx/node_modules/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/nx/node_modules/semver": { "version": "7.3.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/nx/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/nx/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/nx/node_modules/tsconfig-paths": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/nx/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.entries": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.groupby": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.21.2", "get-intrinsic": "^1.2.1" } }, "node_modules/object.hasown": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dev": true, "dependencies": { "define-properties": "^1.1.4", "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "node_modules/on-finished": { "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" }, "engines": { "node": ">= 0.8" } }, "node_modules/on-headers": { "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==", "engines": { "node": ">= 0.8" } }, "node_modules/once": { "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" } }, "node_modules/onetime": { "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" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/open": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "bin": { "opener": "bin/opener-bin.js" } }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "is-unicode-supported": "^0.1.0", "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ora/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/ora/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/ora/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/ora/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/ora/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "engines": { "node": ">=6" } }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/p-limit": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { "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" }, "engines": { "node": ">=8" } }, "node_modules/p-locate/node_modules/p-limit": { "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" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dependencies": { "aggregate-error": "^3.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-map-series": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/p-pipe": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-queue": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "dev": true, "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-reduce": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/p-retry": { "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" }, "engines": { "node": ">=8" } }, "node_modules/p-retry/node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "engines": { "node": ">= 4" } }, "node_modules/p-timeout": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, "dependencies": { "p-finally": "^1.0.0" }, "engines": { "node": ">=8" } }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "engines": { "node": ">=6" } }, "node_modules/p-waterfall": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", "dev": true, "dependencies": { "p-reduce": "^2.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dependencies": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", "semver": "^6.2.0" }, "engines": { "node": ">=8" } }, "node_modules/pacote": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.1.tgz", "integrity": "sha512-eeqEe77QrA6auZxNHIp+1TzHQ0HBKf5V6c8zcaYZ134EJe1lCi+fjXATkNiEEfbG+e50nu02GLvUtmZcGOYabQ==", "dev": true, "dependencies": { "@npmcli/git": "^4.0.0", "@npmcli/installed-package-contents": "^2.0.1", "@npmcli/promise-spawn": "^6.0.1", "@npmcli/run-script": "^6.0.0", "cacache": "^17.0.0", "fs-minipass": "^3.0.0", "minipass": "^4.0.0", "npm-package-arg": "^10.0.0", "npm-packlist": "^7.0.0", "npm-pick-manifest": "^8.0.0", "npm-registry-fetch": "^14.0.0", "proc-log": "^3.0.0", "promise-retry": "^2.0.1", "read-package-json": "^6.0.0", "read-package-json-fast": "^3.0.0", "sigstore": "^1.0.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, "bin": { "pacote": "lib/bin.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/pacote/node_modules/@npmcli/run-script": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", "dev": true, "dependencies": { "@npmcli/node-gyp": "^3.0.0", "@npmcli/promise-spawn": "^6.0.0", "node-gyp": "^9.0.0", "read-package-json-fast": "^3.0.0", "which": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/pacote/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/pacote/node_modules/glob": { "version": "10.3.3", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/cjs/src/bin.js" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/pacote/node_modules/glob/node_modules/minipass": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/pacote/node_modules/ignore-walk": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", "dev": true, "dependencies": { "minimatch": "^9.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/pacote/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/pacote/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/pacote/node_modules/minipass": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/pacote/node_modules/npm-package-arg": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "dependencies": { "hosted-git-info": "^6.0.0", "proc-log": "^3.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/pacote/node_modules/npm-packlist": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", "dev": true, "dependencies": { "ignore-walk": "^6.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/pacote/node_modules/read-package-json": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", "dev": true, "dependencies": { "glob": "^10.2.2", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^5.0.0", "npm-normalize-package-bin": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/pacote/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/pacote/node_modules/ssri": { "version": "10.0.4", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", "dev": true, "dependencies": { "minipass": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/pacote/node_modules/ssri/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/pacote/node_modules/validate-npm-package-name": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "dependencies": { "builtins": "^5.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/pacote/node_modules/which": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/which.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/pacote/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/param-case": { "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" } }, "node_modules/parent-module": { "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" }, "engines": { "node": ">=6" } }, "node_modules/parse-conflict-json": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", "dev": true, "dependencies": { "json-parse-even-better-errors": "^3.0.0", "just-diff": "^6.0.0", "just-diff-apply": "^5.2.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/parse-entities": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "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" }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/parse-json": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/parse-json/node_modules/json-parse-even-better-errors": { "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==" }, "node_modules/parse-json/node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/parse-numeric-range": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, "node_modules/parse-path": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", "dev": true, "dependencies": { "protocols": "^2.0.0" } }, "node_modules/parse-url": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", "dev": true, "dependencies": { "parse-path": "^7.0.0" } }, "node_modules/parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dependencies": { "entities": "^4.4.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" } }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "dependencies": { "domhandler": "^5.0.2", "parse5": "^7.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" } }, "node_modules/parse5-htmlparser2-tree-adapter/node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { "domelementtype": "^2.3.0" }, "engines": { "node": ">= 4" }, "funding": { "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { "node": ">= 0.8" } }, "node_modules/pascal-case": { "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" } }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } }, "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", "dev": true, "engines": { "node": "14 || >=16.14" } }, "node_modules/path-to-regexp": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dependencies": { "isarray": "0.0.1" } }, "node_modules/path-to-regexp/node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "engines": { "node": ">=8" } }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pidtree": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, "bin": { "pidtree": "bin/pidtree.js" }, "engines": { "node": ">=0.10" } }, "node_modules/pify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "dependencies": { "pinkie": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, "engines": { "node": ">= 6" } }, "node_modules/pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "dependencies": { "find-up": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pkg-dir/node_modules/find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "dependencies": { "locate-path": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pkg-dir/node_modules/p-locate": { "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==", "dev": true, "dependencies": { "p-limit": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/pkg-up": { "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" }, "engines": { "node": ">=8" } }, "node_modules/pkg-up/node_modules/find-up": { "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" }, "engines": { "node": ">=6" } }, "node_modules/pkg-up/node_modules/locate-path": { "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" }, "engines": { "node": ">=6" } }, "node_modules/pkg-up/node_modules/p-limit": { "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" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pkg-up/node_modules/p-locate": { "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" }, "engines": { "node": ">=6" } }, "node_modules/pkg-up/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "engines": { "node": ">=4" } }, "node_modules/popmotion": { "version": "11.0.3", "resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz", "integrity": "sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==", "dependencies": { "framesync": "6.0.1", "hey-listen": "^1.0.8", "style-value-types": "5.0.0", "tslib": "^2.1.0" } }, "node_modules/popmotion/node_modules/framesync": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz", "integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/popper.js": { "version": "1.16.1-lts", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz", "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==" }, "node_modules/postcss": { "version": "8.4.27", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", "funding": [ { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-calc": { "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" }, "peerDependencies": { "postcss": "^8.2.2" } }, "node_modules/postcss-colormin": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-convert-values": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-comments": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-discard-unused": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", "dependencies": { "postcss-selector-parser": "^6.0.5" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-loader": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", "dependencies": { "cosmiconfig": "^8.2.0", "jiti": "^1.18.2", "semver": "^7.3.8" }, "engines": { "node": ">= 14.15.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "postcss": "^7.0.0 || ^8.0.1", "webpack": "^5.0.0" } }, "node_modules/postcss-loader/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/postcss-loader/node_modules/cosmiconfig": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", "dependencies": { "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "parse-json": "^5.0.0", "path-type": "^4.0.0" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/d-fischer" } }, "node_modules/postcss-loader/node_modules/js-yaml": { "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" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/postcss-loader/node_modules/lru-cache": { "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" }, "engines": { "node": ">=10" } }, "node_modules/postcss-loader/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/postcss-loader/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/postcss-merge-idents": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", "dependencies": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-merge-longhand": { "version": "5.1.7", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^5.1.1" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-merge-rules": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-minify-font-values": { "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" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-minify-gradients": { "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" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-minify-params": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dependencies": { "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-minify-selectors": { "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" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-modules-extract-imports": { "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==", "engines": { "node": "^10 || ^12 || >= 14" }, "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/postcss-modules-local-by-default": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" }, "engines": { "node": "^10 || ^12 || >= 14" }, "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/postcss-modules-scope": { "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" }, "engines": { "node": "^10 || ^12 || >= 14" }, "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/postcss-modules-values": { "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" }, "engines": { "node": "^10 || ^12 || >= 14" }, "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/postcss-normalize-charset": { "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==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-display-values": { "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" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-positions": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-repeat-style": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-string": { "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" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-timing-functions": { "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" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-unicode": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-url": { "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" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-whitespace": { "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" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-ordered-values": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dependencies": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-idents": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-initial": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-transforms": { "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" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-selector-parser": { "version": "6.0.13", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" }, "engines": { "node": ">=4" } }, "node_modules/postcss-sort-media-queries": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", "dependencies": { "sort-css-media-queries": "2.1.0" }, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "postcss": "^8.4.16" } }, "node_modules/postcss-svgo": { "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" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-unique-selectors": { "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" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/postcss-zindex": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "engines": { "node": ">=4" } }, "node_modules/prettier": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/pretty-error": { "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" } }, "node_modules/pretty-format": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.0", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/pretty-time": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", "engines": { "node": ">=4" } }, "node_modules/prism-react-renderer": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", "peerDependencies": { "react": ">=0.14.9" } }, "node_modules/prismjs": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", "engines": { "node": ">=6" } }, "node_modules/proc-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "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==" }, "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dependencies": { "asap": "~2.0.3" } }, "node_modules/promise-all-reject-late": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", "dev": true, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/promise-call-limit": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz", "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", "dev": true, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "dev": true }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" }, "engines": { "node": ">=10" } }, "node_modules/prompts": { "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" }, "engines": { "node": ">= 6" } }, "node_modules/promzard": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", "dev": true, "dependencies": { "read": "1" } }, "node_modules/prop-types": { "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" } }, "node_modules/prop-types-extra": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", "dependencies": { "react-is": "^16.3.2", "warning": "^4.0.0" }, "peerDependencies": { "react": ">=0.14.0" } }, "node_modules/prop-types-extra/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/property-information": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", "dependencies": { "xtend": "^4.0.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, "node_modules/protocols": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", "dev": true }, "node_modules/proxy-addr": { "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" }, "engines": { "node": ">= 0.10" } }, "node_modules/proxy-addr/node_modules/ipaddr.js": { "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==", "engines": { "node": ">= 0.10" } }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "engines": { "node": ">=6" } }, "node_modules/pupa": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dependencies": { "escape-goat": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/pure-color": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" }, "node_modules/pure-rand": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", "dev": true, "funding": [ { "type": "individual", "url": "https://github.com/sponsors/dubzzz" }, { "type": "opencollective", "url": "https://opencollective.com/fast-check" } ] }, "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "dev": true, "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" } }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dependencies": { "side-channel": "^1.0.4" }, "engines": { "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, "node_modules/queue": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", "dependencies": { "inherits": "~2.0.3" } }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/randombytes": { "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" } }, "node_modules/range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "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" }, "engines": { "node": ">= 0.8" } }, "node_modules/raw-body/node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "cli.js" } }, "node_modules/rc-align": { "version": "4.0.15", "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz", "integrity": "sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "dom-align": "^1.7.0", "rc-util": "^5.26.0", "resize-observer-polyfill": "^1.5.1" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-cascader": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.7.3.tgz", "integrity": "sha512-KBpT+kzhxDW+hxPiNk4zaKa99+Lie2/8nnI11XF+FIOPl4Bj9VlFZi61GrnWzhLGA7VEN+dTxAkNOjkySDa0dA==", "dependencies": { "@babel/runtime": "^7.12.5", "array-tree-filter": "^2.1.0", "classnames": "^2.3.1", "rc-select": "~14.1.0", "rc-tree": "~5.7.0", "rc-util": "^5.6.1" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-checkbox": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.0.1.tgz", "integrity": "sha512-k7nxDWxYF+jDI0ZcCvuvj71xONmWRVe5+1MKcERRR9MRyP3tZ69b+yUCSXXh+sik4/Hc9P5wHr2nnUoGS2zBjA==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.3.2", "rc-util": "^5.25.2" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-collapse": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.4.2.tgz", "integrity": "sha512-jpTwLgJzkhAgp2Wpi3xmbTbbYExg6fkptL67Uu5LCRVEj6wqmy0DHTjjeynsjOLsppHGHu41t1ELntZ0lEvS/Q==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-motion": "^2.3.4", "rc-util": "^5.2.1", "shallowequal": "^1.1.0" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-dialog": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.0.2.tgz", "integrity": "sha512-s3U+24xWUuB6Bn2Lk/Qt6rufy+uT+QvWkiFhNBcO9APLxcFFczWamaq7x9h8SCuhfc1nHcW4y8NbMsnAjNnWyg==", "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/portal": "^1.0.0-8", "classnames": "^2.2.6", "rc-motion": "^2.3.0", "rc-util": "^5.21.0" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-drawer": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-6.3.0.tgz", "integrity": "sha512-uBZVb3xTAR+dBV53d/bUhTctCw3pwcwJoM7g5aX+7vgwt2zzVzoJ6aqFjYJpBlZ9zp0dVYN8fV+hykFE7c4lig==", "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/portal": "^1.1.1", "classnames": "^2.2.6", "rc-motion": "^2.6.1", "rc-util": "^5.21.2" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-dropdown": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.0.1.tgz", "integrity": "sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g==", "dependencies": { "@babel/runtime": "^7.18.3", "classnames": "^2.2.6", "rc-trigger": "^5.3.1", "rc-util": "^5.17.0" }, "peerDependencies": { "react": ">=16.11.0", "react-dom": ">=16.11.0" } }, "node_modules/rc-field-form": { "version": "1.34.2", "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.34.2.tgz", "integrity": "sha512-BdciU5C7dBO51/9ZKcMvK2f8zaaO12Lt1eBhlAo8nNv+6htlNcgY9DAkUlZ7gfyWjnCc1Oo4hHIXau1m6tLw1A==", "dependencies": { "@babel/runtime": "^7.18.0", "async-validator": "^4.1.0", "rc-util": "^5.32.2" }, "engines": { "node": ">=8.x" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-image": { "version": "5.13.0", "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-5.13.0.tgz", "integrity": "sha512-iZTOmw5eWo2+gcrJMMcnd7SsxVHl3w5xlyCgsULUdJhJbnuI8i/AL0tVOsE7aLn9VfOh1qgDT3mC2G75/c7mqg==", "dependencies": { "@babel/runtime": "^7.11.2", "@rc-component/portal": "^1.0.2", "classnames": "^2.2.6", "rc-dialog": "~9.0.0", "rc-motion": "^2.6.2", "rc-util": "^5.0.6" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-input": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-0.1.4.tgz", "integrity": "sha512-FqDdNz+fV2dKNgfXzcSLKvC+jEs1709t7nD+WdfjrdSaOcefpgc7BUJYadc3usaING+b7ediMTfKxuJBsEFbXA==", "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", "rc-util": "^5.18.1" }, "peerDependencies": { "react": ">=16.0.0", "react-dom": ">=16.0.0" } }, "node_modules/rc-input-number": { "version": "7.3.11", "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-7.3.11.tgz", "integrity": "sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", "rc-util": "^5.23.0" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-mentions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-1.13.1.tgz", "integrity": "sha512-FCkaWw6JQygtOz0+Vxz/M/NWqrWHB9LwqlY2RtcuFqWJNFK9njijOOzTSsBGANliGufVUzx/xuPHmZPBV0+Hgw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.6", "rc-menu": "~9.8.0", "rc-textarea": "^0.4.0", "rc-trigger": "^5.0.4", "rc-util": "^5.22.5" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-menu": { "version": "9.8.4", "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.8.4.tgz", "integrity": "sha512-lmw2j8I2fhdIzHmC9ajfImfckt0WDb2KVJJBBRIsxPEw2kGkEfjLMUoB1NgiNT/Q5cC8PdjGOGQjHJIJMwyNMw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-motion": "^2.4.3", "rc-overflow": "^1.2.8", "rc-trigger": "^5.1.2", "rc-util": "^5.27.0" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-motion": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.7.3.tgz", "integrity": "sha512-2xUvo8yGHdOHeQbdI8BtBsCIrWKchEmFEIskf0nmHtJsou+meLd/JE+vnvSX2JxcBrJtXY2LuBpxAOxrbY/wMQ==", "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", "rc-util": "^5.21.0" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-notification": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-4.6.1.tgz", "integrity": "sha512-NSmFYwrrdY3+un1GvDAJQw62Xi9LNMSsoQyo95tuaYrcad5Bn9gJUL8AREufRxSQAQnr64u3LtP3EUyLYT6bhw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-motion": "^2.2.0", "rc-util": "^5.20.1" }, "engines": { "node": ">=8.x" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-overflow": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.3.1.tgz", "integrity": "sha512-RY0nVBlfP9CkxrpgaLlGzkSoh9JhjJLu6Icqs9E7CW6Ewh9s0peF9OHIex4OhfoPsR92LR0fN6BlCY9Z4VoUtA==", "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", "rc-resize-observer": "^1.0.0", "rc-util": "^5.19.2" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-pagination": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.2.0.tgz", "integrity": "sha512-5tIXjB670WwwcAJzAqp2J+cOBS9W3cH/WU1EiYwXljuZ4vtZXKlY2Idq8FZrnYBz8KhN3vwPo9CoV/SJS6SL1w==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-picker": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.7.2.tgz", "integrity": "sha512-KbUKgbzgWVN5L+V9xhZDKSmseHIyFneBlmuMtMrZ9fU7Oypw6D+owS5kuUicIEV08Y17oXt8dUqauMeC5IFBPg==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", "date-fns": "2.x", "dayjs": "1.x", "moment": "^2.24.0", "rc-trigger": "^5.0.4", "rc-util": "^5.4.0", "shallowequal": "^1.1.0" }, "engines": { "node": ">=8.x" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-progress": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.4.2.tgz", "integrity": "sha512-iAGhwWU+tsayP+Jkl9T4+6rHeQTG9kDz8JAHZk4XtQOcYN5fj9H34NXNEdRdZx94VUDHMqCb1yOIvi8eJRh67w==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.6", "rc-util": "^5.16.1" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-rate": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.9.2.tgz", "integrity": "sha512-SaiZFyN8pe0Fgphv8t3+kidlej+cq/EALkAJAc3A0w0XcPaH2L1aggM8bhe1u6GAGuQNAoFvTLjw4qLPGRKV5g==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", "rc-util": "^5.0.1" }, "engines": { "node": ">=8.x" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-resize-observer": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.3.1.tgz", "integrity": "sha512-iFUdt3NNhflbY3mwySv5CA1TC06zdJ+pfo0oc27xpf4PIOvfZwZGtD9Kz41wGYqC4SLio93RVAirSSpYlV/uYg==", "dependencies": { "@babel/runtime": "^7.20.7", "classnames": "^2.2.1", "rc-util": "^5.27.0", "resize-observer-polyfill": "^1.5.1" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-segmented": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.1.2.tgz", "integrity": "sha512-qGo1bCr83ESXpXVOCXjFe1QJlCAQXyi9KCiy8eX3rIMYlTeJr/ftySIaTnYsitL18SvWf5ZEHsfqIWoX0EMfFQ==", "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", "rc-motion": "^2.4.4", "rc-util": "^5.17.0" }, "peerDependencies": { "react": ">=16.0.0", "react-dom": ">=16.0.0" } }, "node_modules/rc-select": { "version": "14.1.18", "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.1.18.tgz", "integrity": "sha512-4JgY3oG2Yz68ECMUSCON7mtxuJvCSj+LJpHEg/AONaaVBxIIrmI/ZTuMJkyojall/X50YdBe5oMKqHHPNiPzEg==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-motion": "^2.0.1", "rc-overflow": "^1.0.0", "rc-trigger": "^5.0.4", "rc-util": "^5.16.1", "rc-virtual-list": "^3.2.0" }, "engines": { "node": ">=8.x" }, "peerDependencies": { "react": "*", "react-dom": "*" } }, "node_modules/rc-slider": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-10.0.1.tgz", "integrity": "sha512-igTKF3zBet7oS/3yNiIlmU8KnZ45npmrmHlUUio8PNbIhzMcsh+oE/r2UD42Y6YD2D/s+kzCQkzQrPD6RY435Q==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", "rc-util": "^5.18.1", "shallowequal": "^1.1.0" }, "engines": { "node": ">=8.x" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-steps": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-5.0.0.tgz", "integrity": "sha512-9TgRvnVYirdhbV0C3syJFj9EhCRqoJAsxt4i1rED5o8/ZcSv5TLIYyo4H8MCjLPvbe2R+oBAm/IYBEtC+OS1Rw==", "dependencies": { "@babel/runtime": "^7.16.7", "classnames": "^2.2.3", "rc-util": "^5.16.1" }, "engines": { "node": ">=8.x" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-switch": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-3.2.2.tgz", "integrity": "sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", "rc-util": "^5.0.1" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-table": { "version": "7.26.0", "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.26.0.tgz", "integrity": "sha512-0cD8e6S+DTGAt5nBZQIPFYEaIukn17sfa5uFL98faHlH/whZzD8ii3dbFL4wmUDEL4BLybhYop+QUfZJ4CPvNQ==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", "rc-resize-observer": "^1.1.0", "rc-util": "^5.22.5", "shallowequal": "^1.1.0" }, "engines": { "node": ">=8.x" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-tabs": { "version": "12.5.10", "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-12.5.10.tgz", "integrity": "sha512-Ay0l0jtd4eXepFH9vWBvinBjqOpqzcsJTerBGwJy435P2S90Uu38q8U/mvc1sxUEVOXX5ZCFbxcWPnfG3dH+tQ==", "dependencies": { "@babel/runtime": "^7.11.2", "classnames": "2.x", "rc-dropdown": "~4.0.0", "rc-menu": "~9.8.0", "rc-motion": "^2.6.2", "rc-resize-observer": "^1.0.0", "rc-util": "^5.16.0" }, "engines": { "node": ">=8.x" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-textarea": { "version": "0.4.7", "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-0.4.7.tgz", "integrity": "sha512-IQPd1CDI3mnMlkFyzt2O4gQ2lxUsnBAeJEoZGJnkkXgORNqyM9qovdrCj9NzcRfpHgLdzaEbU3AmobNFGUznwQ==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", "rc-resize-observer": "^1.0.0", "rc-util": "^5.24.4", "shallowequal": "^1.1.0" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-tooltip": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.2.2.tgz", "integrity": "sha512-jtQzU/18S6EI3lhSGoDYhPqNpWajMtS5VV/ld1LwyfrDByQpYmw/LW6U7oFXXLukjfDHQ7Ju705A82PRNFWYhg==", "dependencies": { "@babel/runtime": "^7.11.2", "classnames": "^2.3.1", "rc-trigger": "^5.0.0" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-tree": { "version": "5.7.9", "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.7.9.tgz", "integrity": "sha512-1hKkToz/EVjJlMVwmZnpXeLXt/1iQMsaAq9m+GNkUbK746gkc7QpJXSN/TzjhTI5Hi+LOSlrMaXLMT0bHPqILQ==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-motion": "^2.0.1", "rc-util": "^5.16.1", "rc-virtual-list": "^3.5.1" }, "engines": { "node": ">=10.x" }, "peerDependencies": { "react": "*", "react-dom": "*" } }, "node_modules/rc-tree-select": { "version": "5.5.5", "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.5.5.tgz", "integrity": "sha512-k2av7jF6tW9bIO4mQhaVdV4kJ1c54oxV3/hHVU+oD251Gb5JN+m1RbJFTMf1o0rAFqkvto33rxMdpafaGKQRJw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-select": "~14.1.0", "rc-tree": "~5.7.0", "rc-util": "^5.16.1" }, "peerDependencies": { "react": "*", "react-dom": "*" } }, "node_modules/rc-trigger": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.3.4.tgz", "integrity": "sha512-mQv+vas0TwKcjAO2izNPkqR4j86OemLRmvL2nOzdP9OWNWA1ivoTt5hzFqYNW9zACwmTezRiN8bttrC7cZzYSw==", "dependencies": { "@babel/runtime": "^7.18.3", "classnames": "^2.2.6", "rc-align": "^4.0.0", "rc-motion": "^2.0.0", "rc-util": "^5.19.2" }, "engines": { "node": ">=8.x" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-upload": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.3.4.tgz", "integrity": "sha512-uVbtHFGNjHG/RyAfm9fluXB6pvArAGyAx8z7XzXXyorEgVIWj6mOlriuDm0XowDHYz4ycNK0nE0oP3cbFnzxiQ==", "dependencies": { "@babel/runtime": "^7.18.3", "classnames": "^2.2.5", "rc-util": "^5.2.0" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-util": { "version": "5.35.1", "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.35.1.tgz", "integrity": "sha512-TFB8FMe/lLB8Bv97PNRShfueayQ7oXqfKC9Y6wtxKvjSQvqlPbSG+xjUqZYppdvtMrukZfX4/xKbLV3ldwT1YQ==", "dependencies": { "@babel/runtime": "^7.18.3", "react-is": "^16.12.0" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "node_modules/rc-util/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/rc-virtual-list": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.5.3.tgz", "integrity": "sha512-rG6IuD4EYM8K6oZ8Shu2BC/CmcTdqng4yBWkc/5fjWhB20bl6QwR2Upyt7+MxvfscoVm8zOQY+tcpEO5cu4GaQ==", "dependencies": { "@babel/runtime": "^7.20.0", "classnames": "^2.2.6", "rc-resize-observer": "^1.0.0", "rc-util": "^5.15.0" }, "engines": { "node": ">=8.x" }, "peerDependencies": { "react": "*", "react-dom": "*" } }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-base16-styling": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", "dependencies": { "base16": "^1.0.0", "lodash.curry": "^4.0.1", "lodash.flow": "^3.3.0", "pure-color": "^1.2.0" } }, "node_modules/react-bootstrap": { "version": "1.6.7", "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.6.7.tgz", "integrity": "sha512-IzCYXuLSKDEjGFglbFWk0/iHmdhdcJzTmtS6lXxc0kaNFx2PFgrQf5jKnx5sarF2tiXh9Tgx3pSt3pdK7YwkMA==", "dependencies": { "@babel/runtime": "^7.14.0", "@restart/context": "^2.1.4", "@restart/hooks": "^0.4.7", "@types/invariant": "^2.2.33", "@types/prop-types": "^15.7.3", "@types/react": ">=16.14.8", "@types/react-transition-group": "^4.4.1", "@types/warning": "^3.0.0", "classnames": "^2.3.1", "dom-helpers": "^5.2.1", "invariant": "^2.2.4", "prop-types": "^15.7.2", "prop-types-extra": "^1.1.0", "react-overlays": "^5.1.2", "react-transition-group": "^4.4.1", "uncontrollable": "^7.2.1", "warning": "^4.0.3" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "node_modules/react-clientside-effect": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz", "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==", "dependencies": { "@babel/runtime": "^7.12.13" }, "peerDependencies": { "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/react-deep-force-update": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz", "integrity": "sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA==", "dev": true }, "node_modules/react-dev-utils": { "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" }, "engines": { "node": ">=14" } }, "node_modules/react-dev-utils/node_modules/ansi-styles": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/react-dev-utils/node_modules/chalk": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/react-dev-utils/node_modules/color-convert": { "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" }, "engines": { "node": ">=7.0.0" } }, "node_modules/react-dev-utils/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/react-dev-utils/node_modules/find-up": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/react-dev-utils/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/react-dev-utils/node_modules/locate-path": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/react-dev-utils/node_modules/p-locate": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/react-dev-utils/node_modules/supports-color": { "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" }, "engines": { "node": ">=8" } }, "node_modules/react-dom": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "scheduler": "^0.20.2" }, "peerDependencies": { "react": "17.0.2" } }, "node_modules/react-error-overlay": { "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==" }, "node_modules/react-fast-compare": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, "node_modules/react-focus-lock": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.5.2.tgz", "integrity": "sha512-WzpdOnEqjf+/A3EH9opMZWauag7gV0BxFl+EY4ElA4qFqYsUsBLnmo2sELbN5OC30S16GAWMy16B9DLPpdJKAQ==", "dependencies": { "@babel/runtime": "^7.0.0", "focus-lock": "^0.9.1", "prop-types": "^15.6.2", "react-clientside-effect": "^1.2.5", "use-callback-ref": "^1.2.5", "use-sidecar": "^1.0.5" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0" } }, "node_modules/react-frame-component": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/react-frame-component/-/react-frame-component-4.1.3.tgz", "integrity": "sha512-4PurhctiqnmC1F5prPZ+LdsalH7pZ3SFA5xoc0HBe8mSHctdLLt4Cr2WXfXOoajHBYq/yiipp9zOgx+vy8GiEA==", "peerDependencies": { "prop-types": "^15.5.9", "react": ">= 16.3", "react-dom": ">= 16.3" } }, "node_modules/react-helmet-async": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", "dependencies": { "@babel/runtime": "^7.12.5", "invariant": "^2.2.4", "prop-types": "^15.7.2", "react-fast-compare": "^3.2.0", "shallowequal": "^1.1.0" }, "peerDependencies": { "react": "^16.6.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/react-json-view": { "version": "1.21.3", "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", "dependencies": { "flux": "^4.0.1", "react-base16-styling": "^0.6.0", "react-lifecycles-compat": "^3.0.4", "react-textarea-autosize": "^8.3.2" }, "peerDependencies": { "react": "^17.0.0 || ^16.3.0 || ^15.5.4", "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" } }, "node_modules/react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "node_modules/react-loadable": { "name": "@docusaurus/react-loadable", "version": "5.5.2", "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", "dependencies": { "@types/react": "*", "prop-types": "^15.6.2" }, "peerDependencies": { "react": "*" } }, "node_modules/react-loadable-ssr-addon-v5-slorber": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", "dependencies": { "@babel/runtime": "^7.10.3" }, "engines": { "node": ">=10.13.0" }, "peerDependencies": { "react-loadable": "*", "webpack": ">=4.41.1 || 5.x" } }, "node_modules/react-merge-refs": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz", "integrity": "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" } }, "node_modules/react-overlays": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-5.2.1.tgz", "integrity": "sha512-GLLSOLWr21CqtJn8geSwQfoJufdt3mfdsnIiQswouuQ2MMPns+ihZklxvsTDKD3cR2tF8ELbi5xUsvqVhR6WvA==", "dependencies": { "@babel/runtime": "^7.13.8", "@popperjs/core": "^2.11.6", "@restart/hooks": "^0.4.7", "@types/warning": "^3.0.0", "dom-helpers": "^5.2.0", "prop-types": "^15.7.2", "uncontrollable": "^7.2.1", "warning": "^4.0.3" }, "peerDependencies": { "react": ">=16.3.0", "react-dom": ">=16.3.0" } }, "node_modules/react-popper": { "version": "1.3.11", "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.11.tgz", "integrity": "sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg==", "dependencies": { "@babel/runtime": "^7.1.2", "@hypnosphi/create-react-context": "^0.3.1", "deep-equal": "^1.1.1", "popper.js": "^1.14.4", "prop-types": "^15.6.1", "typed-styles": "^0.0.7", "warning": "^4.0.2" }, "peerDependencies": { "react": "0.14.x || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/react-popper/node_modules/popper.js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, "node_modules/react-portal": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/react-portal/-/react-portal-4.2.2.tgz", "integrity": "sha512-vS18idTmevQxyQpnde0Td6ZcUlv+pD8GTyR42n3CHUQq9OHi1C4jDE4ZWEbEsrbrLRhSECYiao58cvocwMtP7Q==", "dependencies": { "prop-types": "^15.5.8" }, "peerDependencies": { "react": "^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0", "react-dom": "^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0" } }, "node_modules/react-proxy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-1.1.8.tgz", "integrity": "sha512-46GkBpZD97R/vV+iw+u6aFACzIHOst9gCl41d5K5vepPBz2i2gqHmXQJWKXsrUsSOdylKahN3sd9taswFN8Wzw==", "dev": true, "dependencies": { "lodash": "^4.6.1", "react-deep-force-update": "^1.0.0" } }, "node_modules/react-refresh": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/react-remove-scroll": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.4.1.tgz", "integrity": "sha512-K7XZySEzOHMTq7dDwcHsZA6Y7/1uX5RsWhRXVYv8rdh+y9Qz2nMwl9RX/Mwnj/j7JstCGmxyfyC0zbVGXYh3mA==", "dependencies": { "react-remove-scroll-bar": "^2.1.0", "react-style-singleton": "^2.1.0", "tslib": "^1.0.0", "use-callback-ref": "^1.2.3", "use-sidecar": "^1.0.1" }, "engines": { "node": ">=8.5.0" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0", "react": "^16.8.0 || ^17.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/react-remove-scroll-bar": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", "dependencies": { "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/react-remove-scroll/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/react-router": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", "hoist-non-react-statics": "^3.1.0", "loose-envify": "^1.3.1", "path-to-regexp": "^1.7.0", "prop-types": "^15.6.2", "react-is": "^16.6.0", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" }, "peerDependencies": { "react": ">=15" } }, "node_modules/react-router-config": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", "dependencies": { "@babel/runtime": "^7.1.2" }, "peerDependencies": { "react": ">=15", "react-router": ">=5" } }, "node_modules/react-router-dom": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", "loose-envify": "^1.3.1", "prop-types": "^15.6.2", "react-router": "5.3.4", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" }, "peerDependencies": { "react": ">=15" } }, "node_modules/react-router/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-select": { "version": "5.7.4", "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.4.tgz", "integrity": "sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ==", "dependencies": { "@babel/runtime": "^7.12.0", "@emotion/cache": "^11.4.0", "@emotion/react": "^11.8.1", "@floating-ui/dom": "^1.0.1", "@types/react-transition-group": "^4.4.0", "memoize-one": "^6.0.0", "prop-types": "^15.6.0", "react-transition-group": "^4.3.0", "use-isomorphic-layout-effect": "^1.1.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/react-shallow-renderer": { "version": "16.15.0", "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", "dev": true, "dependencies": { "object-assign": "^4.1.1", "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" }, "peerDependencies": { "react": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/react-style-singleton": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", "dependencies": { "get-nonce": "^1.0.0", "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/react-test-renderer": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", "dev": true, "dependencies": { "object-assign": "^4.1.1", "react-is": "^17.0.2", "react-shallow-renderer": "^16.13.1", "scheduler": "^0.20.2" }, "peerDependencies": { "react": "17.0.2" } }, "node_modules/react-test-renderer/node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "node_modules/react-textarea-autosize": { "version": "8.5.2", "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.2.tgz", "integrity": "sha512-uOkyjkEl0ByEK21eCJMHDGBAAd/BoFQBawYK5XItjAmCTeSbjxghd8qnt7nzsLYzidjnoObu6M26xts0YGKsGg==", "dependencies": { "@babel/runtime": "^7.20.13", "use-composed-ref": "^1.3.0", "use-latest": "^1.2.1" }, "engines": { "node": ">=10" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/react-transform-catch-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/react-transform-catch-errors/-/react-transform-catch-errors-1.0.2.tgz", "integrity": "sha512-FCeTXLTpRM8wMrwAlYVoEI+HXUFYEJLKdmf9zd5YtH1yc2Dq81JL1YMr0eHeUe699CCTezG4CfEB5D9RpmovEw==", "dev": true }, "node_modules/react-transform-hmr": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz", "integrity": "sha512-8bK1DWUZynE6swD2jNPbzO5mvhB8fs9Ub5GksoVqYkc9i06FdSLC36qQYjaKOW79KBdsROq2cK0tRKITiEzmyg==", "dev": true, "dependencies": { "global": "^4.3.0", "react-proxy": "^1.1.7" } }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", "loose-envify": "^1.4.0", "prop-types": "^15.6.2" }, "peerDependencies": { "react": ">=16.6.0", "react-dom": ">=16.6.0" } }, "node_modules/react-use-measure": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz", "integrity": "sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==", "dependencies": { "debounce": "^1.2.1" }, "peerDependencies": { "react": ">=16.13", "react-dom": ">=16.13" } }, "node_modules/read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, "dependencies": { "mute-stream": "~0.0.4" }, "engines": { "node": ">=0.8" } }, "node_modules/read-cmd-shim": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/read-package-json": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", "dev": true, "dependencies": { "glob": "^8.0.1", "json-parse-even-better-errors": "^2.3.1", "normalize-package-data": "^4.0.0", "npm-normalize-package-bin": "^1.0.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/read-package-json-fast": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, "dependencies": { "json-parse-even-better-errors": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/read-package-json/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/read-package-json/node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/read-package-json/node_modules/hosted-git-info": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { "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==", "dev": true }, "node_modules/read-package-json/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/read-package-json/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, "node_modules/read-package-json/node_modules/normalize-package-data": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true }, "node_modules/read-package-json/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/read-package-json/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/read-package-json/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, "dependencies": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up/node_modules/find-up": { "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==", "dev": true, "dependencies": { "locate-path": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "dependencies": { "p-try": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "dependencies": { "p-limit": "^1.1.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up/node_modules/p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "node_modules/read-pkg/node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "node_modules/read-pkg/node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg/node_modules/path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "dependencies": { "pify": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/read-pkg/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "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" } }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { "picomatch": "^2.2.1" }, "engines": { "node": ">=8.10.0" } }, "node_modules/reading-time": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dependencies": { "resolve": "^1.1.6" }, "engines": { "node": ">= 0.10" } }, "node_modules/recursive-readdir": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dependencies": { "minimatch": "^3.0.5" }, "engines": { "node": ">=6.0.0" } }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dependencies": { "regenerate": "^1.4.2" }, "engines": { "node": ">=4" } }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, "engines": { "node": ">=4" } }, "node_modules/registry-auth-token": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", "dependencies": { "rc": "1.2.8" }, "engines": { "node": ">=6.0.0" } }, "node_modules/registry-url": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dependencies": { "rc": "^1.2.8" }, "engines": { "node": ">=8" } }, "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": "~0.5.0" }, "bin": { "regjsparser": "bin/parser" } }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "bin": { "jsesc": "bin/jsesc" } }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "engines": { "node": ">= 0.10" } }, "node_modules/remark-emoji": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", "dependencies": { "emoticon": "^3.2.0", "node-emoji": "^1.10.0", "unist-util-visit": "^2.0.3" } }, "node_modules/remark-footnotes": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/remark-mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", "dependencies": { "@babel/core": "7.12.9", "@babel/helper-plugin-utils": "7.10.4", "@babel/plugin-proposal-object-rest-spread": "7.12.1", "@babel/plugin-syntax-jsx": "7.12.1", "@mdx-js/util": "1.6.22", "is-alphabetical": "1.0.4", "remark-parse": "8.0.3", "unified": "9.2.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/remark-mdx/node_modules/@babel/core": { "version": "7.12.9", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.12.5", "@babel/helper-module-transforms": "^7.12.1", "@babel/helpers": "^7.12.5", "@babel/parser": "^7.12.7", "@babel/template": "^7.12.7", "@babel/traverse": "^7.12.9", "@babel/types": "^7.12.7", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/babel" } }, "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-transform-parameters": "^7.12.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/remark-mdx/node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "engines": { "node": ">=8" } }, "node_modules/remark-mdx/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } }, "node_modules/remark-mdx/node_modules/unified": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/remark-parse": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", "dependencies": { "ccount": "^1.0.0", "collapse-white-space": "^1.0.2", "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0", "is-whitespace-character": "^1.0.0", "is-word-character": "^1.0.0", "markdown-escapes": "^1.0.0", "parse-entities": "^2.0.0", "repeat-string": "^1.5.4", "state-toggle": "^1.0.0", "trim": "0.0.1", "trim-trailing-lines": "^1.0.0", "unherit": "^1.0.4", "unist-util-remove-position": "^2.0.0", "vfile-location": "^3.0.0", "xtend": "^4.0.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/remark-squeeze-paragraphs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", "dependencies": { "mdast-squeeze-paragraphs": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/renderkid": { "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" } }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "engines": { "node": ">=0.10" } }, "node_modules/require-directory": { "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==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "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==", "engines": { "node": ">=0.10.0" } }, "node_modules/require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", "engines": { "node": "*" } }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "node_modules/resolve": { "version": "1.22.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-cwd": { "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==", "dev": true, "dependencies": { "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" } }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/resolve-pathname": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, "node_modules/resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dependencies": { "lowercase-keys": "^1.0.0" } }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" }, "engines": { "node": ">=8" } }, "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, "node_modules/rimraf": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", "dev": true, "dependencies": { "glob": "^10.2.5" }, "bin": { "rimraf": "dist/cjs/src/bin.js" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rimraf/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/rimraf/node_modules/glob": { "version": "10.3.3", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/cjs/src/bin.js" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rimraf/node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rollup": { "version": "3.27.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.27.2.tgz", "integrity": "sha512-YGwmHf7h2oUHkVBT248x0yt6vZkYQ3/rvE5iQuVBh3WO8GcJ6BNeOkpoX1yMHIiBm18EMLjBPIoUDkhgnyxGOQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" }, "engines": { "node": ">=14.18.0", "npm": ">=8.0.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "node_modules/rtl-detect": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" }, "node_modules/rtlcss": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", "dependencies": { "find-up": "^5.0.0", "picocolors": "^1.0.0", "postcss": "^8.3.11", "strip-json-comments": "^3.1.1" }, "bin": { "rtlcss": "bin/rtlcss.js" } }, "node_modules/rtlcss/node_modules/find-up": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/rtlcss/node_modules/locate-path": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/rtlcss/node_modules/p-locate": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, "engines": { "node": ">=0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safe-array-concat/node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", "is-regex": "^1.1.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, "dependencies": { "xmlchars": "^2.2.0" }, "engines": { "node": ">=v12.22.7" } }, "node_modules/scheduler": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "node_modules/schema-utils": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/scroll-into-view-if-needed": { "version": "2.2.31", "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", "dependencies": { "compute-scroll-into-view": "^1.0.20" } }, "node_modules/scroll-into-view-if-needed/node_modules/compute-scroll-into-view": { "version": "1.0.20", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" }, "node_modules/section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" }, "engines": { "node": ">=4" } }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, "node_modules/selfsigned": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", "dependencies": { "node-forge": "^1" }, "engines": { "node": ">=10" } }, "node_modules/semantic-ui-css": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/semantic-ui-css/-/semantic-ui-css-2.5.0.tgz", "integrity": "sha512-jIWn3WXXE2uSaWCcB+gVJVRG3masIKtTMNEP2X8Aw909H2rHpXGneYOxzO3hT8TpyvB5/dEEo9mBFCitGwoj1A==", "dependencies": { "jquery": "x.*" } }, "node_modules/semantic-ui-react": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/semantic-ui-react/-/semantic-ui-react-1.3.1.tgz", "integrity": "sha512-3EE8Cl2Tq9re+J5An8QOZHgjRJjHqNDBq+Aoaa0TLFnd79UgYzovJPQGy3AWIxgCkxDPj4c3yxl72ImumJLyeA==", "dependencies": { "@babel/runtime": "^7.10.5", "@fluentui/react-component-event-listener": "~0.51.1", "@fluentui/react-component-ref": "~0.51.1", "@semantic-ui-react/event-stack": "^3.1.0", "clsx": "^1.1.1", "keyboard-key": "^1.1.0", "lodash": "^4.17.19", "lodash-es": "^4.17.15", "prop-types": "^15.7.2", "react-is": "^16.8.6", "react-popper": "^1.3.7", "shallowequal": "^1.1.0" }, "peerDependencies": { "react": "^16.8.0", "react-dom": "^16.8.0" } }, "node_modules/semantic-ui-react/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dependencies": { "semver": "^6.3.0" }, "engines": { "node": ">=8" } }, "node_modules/send": { "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" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/send/node_modules/debug": { "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" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/send/node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { "node": ">= 0.6" } }, "node_modules/serialize-javascript": { "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" } }, "node_modules/serve-handler": { "version": "6.1.5", "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "fast-url-parser": "1.1.3", "mime-types": "2.1.18", "minimatch": "3.1.2", "path-is-inside": "1.0.2", "path-to-regexp": "2.2.1", "range-parser": "1.2.0" } }, "node_modules/serve-handler/node_modules/mime-db": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", "engines": { "node": ">= 0.6" } }, "node_modules/serve-handler/node_modules/mime-types": { "version": "2.1.18", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dependencies": { "mime-db": "~1.33.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/serve-handler/node_modules/path-to-regexp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" }, "node_modules/serve-index": { "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" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/serve-index/node_modules/debug": { "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" } }, "node_modules/serve-index/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "engines": { "node": ">= 0.6" } }, "node_modules/serve-index/node_modules/http-errors": { "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" }, "engines": { "node": ">= 0.6" } }, "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "engines": { "node": ">= 0.6" } }, "node_modules/serve-static": { "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" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/shallow-clone": { "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" }, "engines": { "node": ">=8" } }, "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, "node_modules/shebang-command": { "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" }, "engines": { "node": ">=8" } }, "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { "node": ">=8" } }, "node_modules/shell-quote": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", "rechoir": "^0.6.2" }, "bin": { "shjs": "bin/shjs" }, "engines": { "node": ">=4" } }, "node_modules/side-channel": { "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" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sigstore": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.8.0.tgz", "integrity": "sha512-ogU8qtQ3VFBawRJ8wjsBEX/vIFeHuGs1fm4jZtjWQwjo8pfAt7T/rh+udlAN4+QUe0IzA8qRSc/YZ7dHP6kh+w==", "dev": true, "dependencies": { "@sigstore/bundle": "^1.0.0", "@sigstore/protobuf-specs": "^0.2.0", "@sigstore/tuf": "^1.0.3", "make-fetch-happen": "^11.0.1" }, "bin": { "sigstore": "bin/sigstore.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/sinon": { "version": "9.2.4", "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.8.1", "@sinonjs/fake-timers": "^6.0.1", "@sinonjs/samsam": "^5.3.1", "diff": "^4.0.2", "nise": "^4.0.4", "supports-color": "^7.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/sinon" } }, "node_modules/sinon/node_modules/@sinonjs/commons": { "version": "1.8.6", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, "dependencies": { "type-detect": "4.0.8" } }, "node_modules/sinon/node_modules/@sinonjs/fake-timers": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "node_modules/sinon/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/sinon/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/sinon/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/sinon/node_modules/type-detect": { "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==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/sirv": { "version": "1.0.19", "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", "dependencies": { "@polka/url": "^1.0.0-next.20", "mrmime": "^1.0.0", "totalist": "^1.0.0" }, "engines": { "node": ">= 10" } }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "node_modules/sitemap": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", "dependencies": { "@types/node": "^17.0.5", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.2.4" }, "bin": { "sitemap": "dist/cli.js" }, "engines": { "node": ">=12.0.0", "npm": ">=5.6.0" } }, "node_modules/sitemap/node_modules/@types/node": { "version": "17.0.45", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" }, "node_modules/slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" } }, "node_modules/sockjs": { "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" } }, "node_modules/socks": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, "dependencies": { "ip": "^2.0.0", "smart-buffer": "^4.2.0" }, "engines": { "node": ">= 10.13.0", "npm": ">= 3.0.0" } }, "node_modules/socks-proxy-agent": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", "socks": "^2.6.2" }, "engines": { "node": ">= 10" } }, "node_modules/sort-css-media-queries": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", "engines": { "node": ">= 6.3.0" } }, "node_modules/sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, "dependencies": { "is-plain-obj": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-loader": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", "dev": true, "dependencies": { "abab": "^2.0.6", "iconv-lite": "^0.6.3", "source-map-js": "^1.0.2" }, "engines": { "node": ">= 14.15.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^5.72.1" } }, "node_modules/source-map-loader/node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } }, "node_modules/space-separated-tokens": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { "version": "3.0.13", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, "node_modules/spdy": { "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" }, "engines": { "node": ">=6.0.0" } }, "node_modules/spdy-transport": { "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" } }, "node_modules/spdy-transport/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/specificity": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", "dev": true, "bin": { "specificity": "bin/specificity" } }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "dependencies": { "through": "2" }, "engines": { "node": "*" } }, "node_modules/split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "dependencies": { "readable-stream": "^3.0.0" } }, "node_modules/split2/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/ssri": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "dependencies": { "minipass": "^3.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/ssri/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/ssri/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" }, "engines": { "node": ">=10" } }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/state-local": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==", "dev": true }, "node_modules/state-toggle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { "node": ">= 0.8" } }, "node_modules/std-env": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==" }, "node_modules/string_decoder": { "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" } }, "node_modules/string-argv": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "engines": { "node": ">=0.6.19" } }, "node_modules/string-convert": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" } }, "node_modules/string-width": { "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" }, "engines": { "node": ">=8" } }, "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "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==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string-width/node_modules/is-fullwidth-code-point": { "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==", "engines": { "node": ">=8" } }, "node_modules/string.prototype.matchall": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4", "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "regexp.prototype.flags": "^1.4.3", "side-channel": "^1.0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trim": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/stringify-object": { "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" }, "engines": { "node": ">=4" } }, "node_modules/stringify-object/node_modules/is-obj": { "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==", "engines": { "node": ">=0.10.0" } }, "node_modules/strip-ansi": { "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" }, "engines": { "node": ">=8" } }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", "engines": { "node": ">=0.10.0" } }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "engines": { "node": ">=6" } }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "dependencies": { "min-indent": "^1.0.0" }, "engines": { "node": ">=8" } }, "node_modules/strip-json-comments": { "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==", "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strip-outer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", "dev": true, "dependencies": { "escape-string-regexp": "^1.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/strip-outer/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/strong-log-transformer": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", "dev": true, "dependencies": { "duplexer": "^0.1.1", "minimist": "^1.2.0", "through": "^2.3.4" }, "bin": { "sl-log-transformer": "bin/sl-log-transformer.js" }, "engines": { "node": ">=4" } }, "node_modules/style-to-object": { "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" } }, "node_modules/style-value-types": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz", "integrity": "sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==", "dependencies": { "hey-listen": "^1.0.8", "tslib": "^2.1.0" } }, "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dependencies": { "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "engines": { "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { "postcss": "^8.2.15" } }, "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, "node_modules/supports-color": { "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" }, "engines": { "node": ">=4" } }, "node_modules/supports-preserve-symlinks-flag": { "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==", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, "node_modules/svgo": { "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" }, "bin": { "svgo": "bin/svgo" }, "engines": { "node": ">=10.13.0" } }, "node_modules/svgo/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { "node": ">= 10" } }, "node_modules/symbol-tree": { "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==", "dev": true }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "engines": { "node": ">=6" } }, "node_modules/tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^3.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "engines": { "node": ">= 10" } }, "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" }, "engines": { "node": ">=6" } }, "node_modules/tar-stream/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "dependencies": { "minipass": "^3.0.0" }, "engines": { "node": ">= 8" } }, "node_modules/tar/node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/tar/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/tempy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.0.tgz", "integrity": "sha512-eLXG5B1G0mRPHmgH2WydPl5v4jH35qEn3y/rA/aahKhIa91Pn119SsU7n7v/433gtT9ONzC8ISvNHIh2JSTm0w==", "dev": true, "dependencies": { "del": "^6.0.0", "is-stream": "^2.0.0", "temp-dir": "^2.0.0", "type-fest": "^0.16.0", "unique-string": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tempy/node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/tempy/node_modules/type-fest": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/terser": { "version": "5.19.2", "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" }, "engines": { "node": ">=10" } }, "node_modules/terser-webpack-plugin": { "version": "5.3.9", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", "terser": "^5.16.8" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^5.1.0" }, "peerDependenciesMeta": { "@swc/core": { "optional": true }, "esbuild": { "optional": true }, "uglify-js": { "optional": true } } }, "node_modules/terser-webpack-plugin/node_modules/ajv": { "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" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/terser-webpack-plugin/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "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" }, "engines": { "node": ">= 10.13.0" } }, "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { "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==" }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/test-exclude": { "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==", "dev": true, "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" }, "engines": { "node": ">=8" } }, "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "engines": { "node": ">=0.10" } }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/throttle-debounce": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz", "integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==", "engines": { "node": ">=12.22" } }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "dependencies": { "readable-stream": "3" } }, "node_modules/through2/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, "node_modules/tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" }, "node_modules/tiny-warning": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "dependencies": { "rimraf": "^3.0.0" }, "engines": { "node": ">=8.17.0" } }, "node_modules/tmp/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "node_modules/to-fast-properties": { "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==", "engines": { "node": ">=4" } }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "engines": { "node": ">=6" } }, "node_modules/to-regex-range": { "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" }, "engines": { "node": ">=8.0" } }, "node_modules/toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { "node": ">=0.6" } }, "node_modules/totalist": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", "engines": { "node": ">=6" } }, "node_modules/tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", "universalify": "^0.2.0", "url-parse": "^1.5.3" }, "engines": { "node": ">=6" } }, "node_modules/tough-cookie/node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, "engines": { "node": ">= 4.0.0" } }, "node_modules/tr46": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "dependencies": { "punycode": "^2.1.1" }, "engines": { "node": ">=12" } }, "node_modules/treeverse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", "deprecated": "Use String.prototype.trim() instead" }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", "dev": true, "dependencies": { "escape-string-regexp": "^1.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/trim-repeated/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/trim-trailing-lines": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/trough": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/ts-jest": { "version": "29.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", "dev": true, "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", "jest-util": "^29.0.0", "json5": "^2.2.3", "lodash.memoize": "4.x", "make-error": "1.x", "semver": "^7.5.3", "yargs-parser": "^21.0.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, "@jest/types": { "optional": true }, "babel-jest": { "optional": true }, "esbuild": { "optional": true } } }, "node_modules/ts-jest/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/ts-jest/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/ts-jest/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/tsconfig-paths": { "version": "3.14.2", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/tslib": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" }, "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { "tslib": "^1.8.1" }, "engines": { "node": ">= 6" }, "peerDependencies": { "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "node_modules/tuf-js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", "dev": true, "dependencies": { "@tufjs/models": "1.0.4", "debug": "^4.3.4", "make-fetch-happen": "^11.1.1" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/type-detect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", "integrity": "sha512-f9Uv6ezcpvCQjJU0Zqbg+65qdcszv3qUQsZfjdRbWiZ7AMenrX1u0lNk9EoWWX6e1F+NULyg27mtdeZ5WhpljA==", "dev": true, "engines": { "node": "*" } }, "node_modules/type-fest": { "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==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/type-is": { "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" }, "engines": { "node": ">= 0.6" } }, "node_modules/typed-array-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", "has-proto": "^1.0.1", "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typed-array-byte-offset": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "has-proto": "^1.0.1", "is-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", "is-typed-array": "^1.1.9" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typed-styles": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==" }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, "node_modules/typedarray-to-buffer": { "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" } }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { "node": ">=4.2.0" } }, "node_modules/ua-parser-js": { "version": "1.0.35", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", "funding": [ { "type": "opencollective", "url": "https://opencollective.com/ua-parser-js" }, { "type": "paypal", "url": "https://paypal.me/faisalman" } ], "engines": { "node": "*" } }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" }, "engines": { "node": ">=0.8.0" } }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/uncontrollable": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", "dependencies": { "@babel/runtime": "^7.6.3", "@types/react": ">=16.9.11", "invariant": "^2.2.4", "react-lifecycles-compat": "^3.0.4" }, "peerDependencies": { "react": ">=15.0.0" } }, "node_modules/unherit": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", "dependencies": { "inherits": "^2.0.0", "xtend": "^4.0.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/unicode-canonical-property-names-ecmascript": { "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==", "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "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" }, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "engines": { "node": ">=4" } }, "node_modules/unified": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unified/node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "engines": { "node": ">=8" } }, "node_modules/unique-filename": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "dependencies": { "unique-slug": "^4.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-slug": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/unique-string": { "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" }, "engines": { "node": ">=8" } }, "node_modules/unist-builder": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-generated": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-is": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-position": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-remove": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", "dependencies": { "unist-util-is": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-remove-position": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", "dependencies": { "unist-util-visit": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dependencies": { "@types/unist": "^2.0.2" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-visit": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", "unist-util-visit-parents": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/unist-util-visit-parents": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", "dev": true }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "engines": { "node": ">= 10.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { "node": ">= 0.8" } }, "node_modules/upath": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true, "engines": { "node": ">=4", "yarn": "*" } }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" }, "bin": { "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" } }, "node_modules/update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dependencies": { "boxen": "^5.0.0", "chalk": "^4.1.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", "is-installed-globally": "^0.4.0", "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", "latest-version": "^5.1.0", "pupa": "^2.1.1", "semver": "^7.3.4", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, "node_modules/update-notifier/node_modules/ansi-styles": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/update-notifier/node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", "chalk": "^4.1.0", "cli-boxes": "^2.2.1", "string-width": "^4.2.2", "type-fest": "^0.20.2", "widest-line": "^3.1.0", "wrap-ansi": "^7.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/update-notifier/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/update-notifier/node_modules/chalk": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/update-notifier/node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/update-notifier/node_modules/color-convert": { "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" }, "engines": { "node": ">=7.0.0" } }, "node_modules/update-notifier/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/update-notifier/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/update-notifier/node_modules/lru-cache": { "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" }, "engines": { "node": ">=10" } }, "node_modules/update-notifier/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/update-notifier/node_modules/supports-color": { "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" }, "engines": { "node": ">=8" } }, "node_modules/update-notifier/node_modules/type-fest": { "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==", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/update-notifier/node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dependencies": { "string-width": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/update-notifier/node_modules/wrap-ansi": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/update-notifier/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/uri-js": { "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" } }, "node_modules/url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", "dependencies": { "loader-utils": "^2.0.0", "mime-types": "^2.1.27", "schema-utils": "^3.0.0" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "file-loader": "*", "webpack": "^4.0.0 || ^5.0.0" }, "peerDependenciesMeta": { "file-loader": { "optional": true } } }, "node_modules/url-loader/node_modules/ajv": { "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" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/url-loader/node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/url-loader/node_modules/json-schema-traverse": { "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==" }, "node_modules/url-loader/node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" }, "engines": { "node": ">=8.9.0" } }, "node_modules/url-loader/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dependencies": { "prepend-http": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/use-callback-ref": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", "dependencies": { "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/use-composed-ref": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/use-isomorphic-layout-effect": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/use-latest": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", "dependencies": { "use-isomorphic-layout-effect": "^1.1.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/use-sidecar": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" }, "node_modules/utility-types": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", "engines": { "node": ">= 4" } }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache": { "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==", "dev": true }, "node_modules/v8-to-istanbul": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0" }, "engines": { "node": ">=10.12.0" } }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "node_modules/validate-npm-package-name": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, "dependencies": { "builtins": "^5.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/validate.io-array": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==" }, "node_modules/validate.io-function": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==" }, "node_modules/validate.io-integer": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", "dependencies": { "validate.io-number": "^1.0.3" } }, "node_modules/validate.io-integer-array": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", "dependencies": { "validate.io-array": "^1.0.3", "validate.io-integer": "^1.0.4" } }, "node_modules/validate.io-number": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" }, "node_modules/value-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } }, "node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "unist-util-stringify-position": "^2.0.0", "vfile-message": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/vfile-location": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/vfile-message": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, "node_modules/vite": { "version": "4.4.9", "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", "dev": true, "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", "rollup": "^3.27.1" }, "bin": { "vite": "bin/vite.js" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { "fsevents": "~2.3.2" }, "peerDependencies": { "@types/node": ">= 14", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, "less": { "optional": true }, "lightningcss": { "optional": true }, "sass": { "optional": true }, "stylus": { "optional": true }, "sugarss": { "optional": true }, "terser": { "optional": true } } }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", "dev": true, "dependencies": { "browser-process-hrtime": "^1.0.0" } }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, "dependencies": { "xml-name-validator": "^4.0.0" }, "engines": { "node": ">=14" } }, "node_modules/wait-on": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", "dependencies": { "axios": "^0.25.0", "joi": "^17.6.0", "lodash": "^4.17.21", "minimist": "^1.2.5", "rxjs": "^7.5.4" }, "bin": { "wait-on": "bin/wait-on" }, "engines": { "node": ">=10.0.0" } }, "node_modules/wait-on/node_modules/axios": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", "dependencies": { "follow-redirects": "^1.14.7" } }, "node_modules/walk-up-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", "dev": true }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "dependencies": { "makeerror": "1.0.12" } }, "node_modules/warning": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "dependencies": { "loose-envify": "^1.0.0" } }, "node_modules/watchpack": { "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" }, "engines": { "node": ">=10.13.0" } }, "node_modules/wbuf": { "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" } }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "dependencies": { "defaults": "^1.0.3" } }, "node_modules/web-namespaces": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/webpack": { "version": "5.88.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.0", "@webassemblyjs/ast": "^1.11.5", "@webassemblyjs/wasm-edit": "^1.11.5", "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", "acorn-import-assertions": "^1.9.0", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.15.0", "es-module-lexer": "^1.2.1", "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.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.7", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" }, "engines": { "node": ">=10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependenciesMeta": { "webpack-cli": { "optional": true } } }, "node_modules/webpack-bundle-analyzer": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz", "integrity": "sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw==", "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "chalk": "^4.1.0", "commander": "^7.2.0", "gzip-size": "^6.0.0", "lodash": "^4.17.20", "opener": "^1.5.2", "sirv": "^1.0.7", "ws": "^7.3.1" }, "bin": { "webpack-bundle-analyzer": "lib/bin/analyzer.js" }, "engines": { "node": ">= 10.13.0" } }, "node_modules/webpack-bundle-analyzer/node_modules/ansi-styles": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/webpack-bundle-analyzer/node_modules/chalk": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/webpack-bundle-analyzer/node_modules/color-convert": { "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" }, "engines": { "node": ">=7.0.0" } }, "node_modules/webpack-bundle-analyzer/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { "node": ">= 10" } }, "node_modules/webpack-bundle-analyzer/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/webpack-bundle-analyzer/node_modules/supports-color": { "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" }, "engines": { "node": ">=8" } }, "node_modules/webpack-bundle-analyzer/node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "engines": { "node": ">=8.3.0" }, "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { "bufferutil": { "optional": true }, "utf-8-validate": { "optional": true } } }, "node_modules/webpack-dev-middleware": { "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" }, "engines": { "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^4.0.0 || ^5.0.0" } }, "node_modules/webpack-dev-middleware/node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { "node": ">= 0.6" } }, "node_modules/webpack-dev-server": { "version": "4.15.1", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", "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.5", "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": "^2.0.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", "launch-editor": "^2.6.0", "open": "^8.0.9", "p-retry": "^4.5.0", "rimraf": "^3.0.2", "schema-utils": "^4.0.0", "selfsigned": "^2.1.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", "webpack-dev-middleware": "^5.3.1", "ws": "^8.13.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^4.37.0 || ^5.0.0" }, "peerDependenciesMeta": { "webpack": { "optional": true }, "webpack-cli": { "optional": true } } }, "node_modules/webpack-dev-server/node_modules/rimraf": { "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" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/webpack-merge": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" }, "engines": { "node": ">=10.0.0" } }, "node_modules/webpack-sources": { "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==", "engines": { "node": ">=10.13.0" } }, "node_modules/webpack/node_modules/ajv": { "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" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/webpack/node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/webpack/node_modules/json-parse-even-better-errors": { "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==" }, "node_modules/webpack/node_modules/json-schema-traverse": { "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==" }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/webpackbar": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", "dependencies": { "chalk": "^4.1.0", "consola": "^2.15.3", "pretty-time": "^1.1.0", "std-env": "^3.0.1" }, "engines": { "node": ">=12" }, "peerDependencies": { "webpack": "3 || 4 || 5" } }, "node_modules/webpackbar/node_modules/ansi-styles": { "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" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/webpackbar/node_modules/chalk": { "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" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/webpackbar/node_modules/color-convert": { "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" }, "engines": { "node": ">=7.0.0" } }, "node_modules/webpackbar/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/webpackbar/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/webpackbar/node_modules/supports-color": { "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" }, "engines": { "node": ">=8" } }, "node_modules/websocket-driver": { "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" }, "engines": { "node": ">=0.8.0" } }, "node_modules/websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "engines": { "node": ">=0.8.0" } }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, "dependencies": { "iconv-lite": "0.6.3" }, "engines": { "node": ">=12" } }, "node_modules/whatwg-encoding/node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/whatwg-mimetype": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/whatwg-url": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" }, "engines": { "node": ">=12" } }, "node_modules/which": { "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" }, "bin": { "node-which": "bin/node-which" }, "engines": { "node": ">= 8" } }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "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" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "dependencies": { "string-width": "^5.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/widest-line/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/widest-line/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/widest-line/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/wrap-ansi-cjs/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/write-json-file": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", "dev": true, "dependencies": { "detect-indent": "^5.0.0", "graceful-fs": "^4.1.15", "make-dir": "^2.1.0", "pify": "^4.0.1", "sort-keys": "^2.0.0", "write-file-atomic": "^2.4.2" }, "engines": { "node": ">=6" } }, "node_modules/write-json-file/node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/write-json-file/node_modules/write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "dependencies": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "signal-exit": "^3.0.2" } }, "node_modules/write-pkg": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", "dev": true, "dependencies": { "sort-keys": "^2.0.0", "type-fest": "^0.4.1", "write-json-file": "^3.2.0" }, "engines": { "node": ">=8" } }, "node_modules/write-pkg/node_modules/type-fest": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { "optional": true }, "utf-8-validate": { "optional": true } } }, "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "engines": { "node": ">=8" } }, "node_modules/xml-js": { "version": "1.6.11", "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", "dependencies": { "sax": "^1.2.4" }, "bin": { "xml-js": "bin/cli.js" } }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "engines": { "node": ">= 6" } }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" } }, "node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" }, "engines": { "node": ">=10" } }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/yargs/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/yargs/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" }, "engines": { "node": ">=12" } }, "node_modules/yargs/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/yargs/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/yargs/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "packages/antd": { "name": "@rjsf/antd", "version": "5.12.1", "license": "Apache-2.0", "dependencies": { "classnames": "^2.3.2", "lodash": "^4.17.21", "lodash-es": "^4.17.21", "rc-picker": "^2.7.2" }, "devDependencies": { "@ant-design/icons": "^4.8.0", "@babel/cli": "^7.22.9", "@babel/core": "^7.22.9", "@babel/eslint-parser": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@rollup/plugin-replace": "^5.0.2", "@types/lodash": "^4.14.196", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "antd": "^4.24.13", "atob": "^2.1.2", "babel-jest": "^29.6.2", "dayjs": "^1.11.9", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "react": "^17.0.2", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "engines": { "node": ">=14" }, "peerDependencies": { "@ant-design/icons": "^4.0.0", "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "antd": "^4.0.0", "dayjs": "^1.8.0", "react": "^16.14.0 || >=17" } }, "packages/antd/node_modules/jest-environment-jsdom": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/jsdom": "^20.0.0", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2", "jsdom": "^20.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "packages/bootstrap-4": { "name": "@rjsf/bootstrap-4", "version": "5.12.1", "license": "MIT", "dependencies": { "@react-icons/all-files": "^4.1.0" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "babel-jest": "^29.6.2", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "react": "^17.0.2", "react-bootstrap": "^1.6.7", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "engines": { "node": ">=14" }, "peerDependencies": { "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "react": "^16.14.0 || >=17", "react-bootstrap": "^1.6.5" } }, "packages/bootstrap-4/node_modules/jest-environment-jsdom": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/jsdom": "^20.0.0", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2", "jsdom": "^20.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "packages/chakra-ui": { "name": "@rjsf/chakra-ui", "version": "5.12.1", "license": "Apache-2.0", "dependencies": { "react-select": "^5.7.4" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@chakra-ui/icons": "^1.1.7", "@chakra-ui/react": "^1.8.9", "@chakra-ui/system": "^1.12.1", "@emotion/eslint-plugin": "^11.11.0", "@emotion/jest": "^11.11.0", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "babel-jest": "^29.6.2", "chakra-react-select": "^3.3.9", "esbuild": "^0.18.19", "eslint": "^8.46.0", "framer-motion": "^5.6.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "jest-watch-typeahead": "^2.2.2", "react": "^17.0.2", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "engines": { "node": ">=14" }, "peerDependencies": { "@chakra-ui/icons": ">=1.1.1", "@chakra-ui/react": ">=1.7.3", "@chakra-ui/system": ">=1.12.1", "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "chakra-react-select": ">=3.3.8", "framer-motion": ">=5.6.0", "react": "^16.14.0 || >=17" } }, "packages/chakra-ui/node_modules/jest-environment-jsdom": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/jsdom": "^20.0.0", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2", "jsdom": "^20.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "packages/core": { "name": "@rjsf/core", "version": "5.12.1", "license": "Apache-2.0", "dependencies": { "lodash": "^4.17.21", "lodash-es": "^4.17.21", "markdown-to-jsx": "^7.3.2", "nanoid": "^3.3.6", "prop-types": "^15.8.1" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv6": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/lodash": "^4.14.196", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "ajv": "^8.12.0", "atob": "^2.1.2", "babel-jest": "^29.6.2", "chai": "^3.5.0", "esbuild": "^0.18.19", "eslint": "^8.46.0", "html": "^1.0.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "jsdom": "^20.0.3", "mocha": "^10.2.0", "react": "^17.0.2", "react-dom": "^17.0.2", "react-portal": "^4.2.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "sinon": "^9.2.4", "typescript": "^4.9.5" }, "engines": { "node": ">=14" }, "peerDependencies": { "@rjsf/utils": "^5.8.x", "react": "^16.14.0 || >=17" } }, "packages/core/node_modules/jest-environment-jsdom": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/jsdom": "^20.0.0", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2", "jsdom": "^20.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "packages/docs": { "version": "5.12.1", "dependencies": { "@docusaurus/core": "^2.4.0", "@docusaurus/preset-classic": "^2.4.1", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", "react-dom": "^17.0.2" }, "devDependencies": { "@docusaurus/module-type-aliases": "^2.4.0", "@tsconfig/docusaurus": "^1.0.7", "typescript": "^4.9.5" }, "engines": { "node": ">=16.14" } }, "packages/fluent-ui": { "name": "@rjsf/fluent-ui", "version": "5.12.1", "license": "Apache-2.0", "dependencies": { "lodash": "^4.17.21", "lodash-es": "^4.17.21" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@fluentui/react": "^8.110.12", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/lodash": "^4.14.196", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "babel-jest": "^29.6.2", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "react": "^17.0.2", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "engines": { "node": ">=14" }, "peerDependencies": { "@fluentui/react": ">= 7", "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "react": "^16.14.0 || >=17" } }, "packages/fluent-ui/node_modules/jest-environment-jsdom": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/jsdom": "^20.0.0", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2", "jsdom": "^20.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "packages/material-ui": { "name": "@rjsf/material-ui", "version": "5.12.1", "license": "Apache-2.0", "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@material-ui/core": "^4.12.4", "@material-ui/icons": "^4.11.3", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "babel-jest": "^29.6.2", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "react": "^17.0.2", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "engines": { "node": ">=14" }, "peerDependencies": { "@material-ui/core": "^4.12.3", "@material-ui/icons": "^4.11.2", "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "react": "^16.14.0 || >=17" } }, "packages/material-ui/node_modules/jest-environment-jsdom": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/jsdom": "^20.0.0", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2", "jsdom": "^20.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "packages/mui": { "name": "@rjsf/mui", "version": "5.12.1", "license": "Apache-2.0", "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@emotion/jest": "^11.11.0", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.14.3", "@mui/material": "^5.14.3", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "babel-jest": "^29.6.2", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "jest-watch-typeahead": "^2.2.2", "react": "^17.0.2", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "engines": { "node": ">=14" }, "peerDependencies": { "@emotion/react": "^11.7.0", "@emotion/styled": "^11.6.0", "@mui/icons-material": "^5.2.0", "@mui/material": "^5.2.2", "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "react": ">=17" } }, "packages/mui/node_modules/jest-environment-jsdom": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/jsdom": "^20.0.0", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2", "jsdom": "^20.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "packages/playground": { "name": "@rjsf/playground", "version": "5.12.1", "license": "Apache-2.0", "dependencies": { "@ant-design/icons": "^4.8.0", "@babel/runtime": "^7.22.6", "@chakra-ui/icons": "^1.1.7", "@chakra-ui/react": "^1.8.9", "@fluentui/react": "^8.110.12", "@material-ui/core": "^4.12.4", "@mui/material": "^5.14.3", "@rjsf/antd": "^5.12.1", "@rjsf/bootstrap-4": "^5.12.1", "@rjsf/chakra-ui": "^5.12.1", "@rjsf/core": "^5.12.1", "@rjsf/fluent-ui": "^5.12.1", "@rjsf/material-ui": "^5.12.1", "@rjsf/mui": "^5.12.1", "@rjsf/semantic-ui": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv6": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "ajv": "^8.12.0", "ajv-formats": "^2.1.1", "ajv-i18n": "^4.2.0", "antd": "^4.24.13", "atob": "^2.1.2", "chakra-react-select": "^4.6.0", "core-js": "^3.32.0", "dayjs": "^1.11.9", "framer-motion": "^5.6.0", "jss": "^10.10.0", "lodash": "^4.17.21", "monaco-editor": "^0.38.0", "react": "^18.2.0", "react-bootstrap": "^1.6.7", "react-dom": "^18.2.0", "react-frame-component": "^4.1.3", "react-is": "^18.2.0", "react-portal": "^4.2.2" }, "devDependencies": { "@babel/cli": "^7.22.9", "@babel/core": "^7.22.9", "@babel/eslint-parser": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-transform-react-jsx": "^7.22.5", "@babel/plugin-transform-runtime": "^7.22.9", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/register": "^7.22.5", "@emotion/cache": "^11.11.0", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@material-ui/icons": "^4.11.3", "@monaco-editor/react": "^4.5.1", "@mui/icons-material": "^5.14.3", "@types/lodash": "^4.14.196", "@types/react-frame-component": "^4.1.3", "@vitejs/plugin-react": "^4.0.4", "cross-env": "^7.0.3", "esbuild": "^0.18.19", "eslint": "^8.46.0", "gh-pages": "^3.2.3", "html": "^1.0.0", "html-webpack-plugin": "^5.5.3", "loader-utils": "^3.2.1", "mini-css-extract-plugin": "^2.7.6", "prettier": "^2.8.8", "react-transform-catch-errors": "^1.0.2", "react-transform-hmr": "^1.0.4", "rimraf": "^5.0.1", "source-map-loader": "^4.0.1", "vite": "^4.4.9" }, "engines": { "node": ">=14" }, "peerDependencies": { "react": "^18.2.0" } }, "packages/playground/node_modules/chakra-react-select": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/chakra-react-select/-/chakra-react-select-4.7.0.tgz", "integrity": "sha512-BHo4OnLhsfmxMr7ntIL7Sp55zhZKgeU2XOQK/9a0bnnRH6qyd0GMxwII+XnF3TsRHdtrI/2HxdQuX3KKQPFuDg==", "dependencies": { "react-select": "5.7.4" }, "peerDependencies": { "@chakra-ui/form-control": "^2.0.0", "@chakra-ui/icon": "^3.0.0", "@chakra-ui/layout": "^2.0.0", "@chakra-ui/media-query": "^3.0.0", "@chakra-ui/menu": "^2.0.0", "@chakra-ui/spinner": "^2.0.0", "@chakra-ui/system": "^2.0.0", "@emotion/react": "^11.8.1", "react": "^18.0.0", "react-dom": "^18.0.0" } }, "packages/playground/node_modules/react": { "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" }, "engines": { "node": ">=0.10.0" } }, "packages/playground/node_modules/react-dom": { "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" }, "peerDependencies": { "react": "^18.2.0" } }, "packages/playground/node_modules/scheduler": { "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" } }, "packages/semantic-ui": { "name": "@rjsf/semantic-ui", "version": "5.12.1", "license": "Apache-2.0", "dependencies": { "semantic-ui-css": "^2.5.0", "semantic-ui-react": "^1.3.1" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/lodash": "^4.14.196", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "atob": "^2.1.2", "babel-jest": "^29.6.2", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "nanoid": "^3.3.6", "react": "^17.0.2", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "engines": { "node": ">=14" }, "peerDependencies": { "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "react": "^16.14.0 || >=17", "semantic-ui-react": "^1.3.1" } }, "packages/semantic-ui/node_modules/jest-environment-jsdom": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/jsdom": "^20.0.0", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2", "jsdom": "^20.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "packages/utils": { "name": "@rjsf/utils", "version": "5.12.1", "license": "Apache-2.0", "dependencies": { "json-schema-merge-allof": "^0.8.1", "jsonpointer": "^5.0.1", "lodash": "^4.17.21", "lodash-es": "^4.17.21", "react-is": "^18.2.0" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@types/json-schema": "^7.0.12", "@types/json-schema-merge-allof": "^0.6.1", "@types/lodash": "^4.14.196", "@types/react": "^17.0.62", "@types/react-is": "^17.0.4", "@types/react-test-renderer": "^17.0.2", "babel-jest": "^29.6.2", "deep-freeze-es6": "^1.4.1", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "react": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "engines": { "node": ">=14" }, "peerDependencies": { "react": "^16.14.0 || >=17" } }, "packages/utils/node_modules/jest-environment-jsdom": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/jsdom": "^20.0.0", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2", "jsdom": "^20.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "packages/validator-ajv6": { "name": "@rjsf/validator-ajv6", "version": "5.12.1", "license": "Apache-2.0", "dependencies": { "ajv": "^6.12.6", "lodash": "^4.17.21", "lodash-es": "^4.17.21" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@rjsf/utils": "^5.12.1", "@types/json-schema": "^7.0.12", "@types/lodash": "^4.14.196", "babel-jest": "^29.6.2", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "engines": { "node": ">=14" }, "peerDependencies": { "@rjsf/utils": "^5.8.x" } }, "packages/validator-ajv6/node_modules/ajv": { "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" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "packages/validator-ajv6/node_modules/jest-environment-jsdom": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/jsdom": "^20.0.0", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2", "jsdom": "^20.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } }, "packages/validator-ajv6/node_modules/json-schema-traverse": { "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==" }, "packages/validator-ajv8": { "name": "@rjsf/validator-ajv8", "version": "5.12.1", "license": "Apache-2.0", "dependencies": { "ajv": "^8.12.0", "ajv-formats": "^2.1.1", "lodash": "^4.17.21", "lodash-es": "^4.17.21" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@rjsf/utils": "^5.12.1", "@types/json-schema": "^7.0.12", "@types/lodash": "^4.14.196", "babel-jest": "^29.6.2", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "engines": { "node": ">=14" }, "peerDependencies": { "@rjsf/utils": "^5.8.x" } }, "packages/validator-ajv8/node_modules/jest-environment-jsdom": { "version": "29.6.2", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", "dev": true, "dependencies": { "@jest/environment": "^29.6.2", "@jest/fake-timers": "^29.6.2", "@jest/types": "^29.6.1", "@types/jsdom": "^20.0.0", "@types/node": "*", "jest-mock": "^29.6.2", "jest-util": "^29.6.2", "jsdom": "^20.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "canvas": "^2.5.0" }, "peerDependenciesMeta": { "canvas": { "optional": true } } } } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/package.json�����������������������������������������������������������0000664�0000000�0000000�00000005707�14467713645�0020307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "react-jsonschema-form", "private": true, "description": "monorepo for react-jsonschema-form and its themes", "engines": { "node": ">=14" }, "scripts": { "publish": "lerna publish", "changed": "lerna changed", "test": "lerna run --concurrency 2 --stream test", "test:update": "lerna run --concurrency 2 --stream test:update", "lint": "lerna run lint", "cs-check": "lerna run cs-check", "cs-format": "lerna run cs-format", "build": "lerna run --stream build", "build-serial": "lerna run --concurrency 1 --stream build", "start": "echo 'use \"npm run build\" from main directory and then \"npm start\" in the playground package'", "pre-commit:husky": "lerna run --concurrency 1 --stream precommit", "prepare": "husky install", "format": "prettier --write .", "format-check": "prettier --check .", "bump-all-packages": "echo 'NOTE: Make sure to sanity check the playground locally before commiting changes' && npm update --save && npm install && npm run build && npm run test && npm run lint", "bump-peer-deps": "node scripts/bump-peer-deps.js", "refresh-node-modules": "rimraf packages/*/node_modules && rimraf node_modules && npm install", "commit-package-changes": "git add package-lock.json packages/*/package*.json && cross-env CI=skipPrecommit git commit -m 'updated package*.json after versioning' && git push", "post-versioning": "echo 'This will take a while...' && npm run bump-peer-deps && npm run refresh-node-modules && npm run commit-package-changes && npm run update-version-tags", "update-version-tags": "git tag -f $(node scripts/get-version-tag.js) && git push -f origin $(node scripts/get-version-tag.js)" }, "license": "Apache-2.0", "homepage": "https://github.com/rjsf-team/react-jsonschema-form", "devDependencies": { "@babel/eslint-parser": "^7.22.9", "@nrwl/nx-cloud": "^15.3.5", "@types/estree": "^1.0.1", "@types/node": "^18.17.3", "@types/prettier": "^2.7.3", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "cross-env": "^7.0.3", "eslint": "^8.46.0", "eslint-plugin-import": "^2.28.0", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-react": "^7.33.1", "eslint-plugin-react-hooks": "^4.6.0", "husky": "^8.0.3", "jest-environment-jsdom": "^27.5.1", "lerna": "^6.6.2", "lint-staged": "^13.2.3", "nx": "^15.9.2", "prettier": "^2.8.8", "rimraf": "^5.0.1", "ts-jest": "^29.1.1", "tslib": "^2.6.1", "typescript": "^4.9.5" }, "workspaces": [ "packages/antd", "packages/bootstrap-4", "packages/chakra-ui", "packages/core", "packages/docs", "packages/fluent-ui", "packages/material-ui", "packages/mui", "packages/playground", "packages/semantic-ui", "packages/utils", "packages/validator-ajv6", "packages/validator-ajv8" ] } ���������������������������������������������������������react-jsonschema-form-5.12.1/packages/��������������������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0017566�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/���������������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0020514�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/.eslintrc������������������������������������������������0000664�0000000�0000000�00000000162�14467713645�0022337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": "../../.eslintrc-typescript", "plugins": ["@typescript-eslint", "jsx-a11y", "react", "import"] } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/README.md������������������������������������������������0000664�0000000�0000000�00000007515�14467713645�0022003�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[![Build Status][build-shield]][build-url] [![npm][npm-shield]][npm-url] [![npm downloads][npm-dl-shield]][npm-dl-url] [![Contributors][contributors-shield]][contributors-url] [![Apache 2.0 License][license-shield]][license-url] <br /> <p align="center"> <a href="https://github.com/rjsf-team/react-jsonschema-form"> <img src="https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/antd/logo.png" alt="Logo" width="120" height="120"> </a> <h3 align="center">@rjsf/antd</h3> <p align="center"> Ant Design theme, fields and widgets for <a href="https://github.com/rjsf-team/react-jsonschema-form/"><code>react-jsonschema-form</code></a>. <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/docs/"><strong>Explore the docs »</strong></a> <br /> <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/">View Playground</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Report Bug</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Request Feature</a> </p> </p> <!-- TABLE OF CONTENTS --> ## Table of Contents - [Table of Contents](#table-of-contents) - [About The Project](#about-the-project) - [Built With](#built-with) - [Getting Started](#getting-started) - [Prerequisites](#prerequisites) - [Installation](#installation) - [Usage](#usage) - [Roadmap](#roadmap) - [Contributing](#contributing) - [Contact](#contact) <!-- ABOUT THE PROJECT --> ## About The Project Ant Design theme, fields and widgets for `react-jsonschema-form`. ### Built With - [react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form/) - [Ant Design](https://github.com/ant-design/ant-design) <!-- GETTING STARTED --> ## Getting Started ### Prerequisites - `antd >= 4.0.0` - `@ant-design/icons >= 4.0.0` - `dayjs >= 1.8.0` - `@rjsf/core >= 2.0.0` ```sh npm install antd @ant-design/icons dayjs @rjsf/core ``` ### Installation ```sh npm install @rjsf/antd ``` ## Usage ```javascript import Form from '@rjsf/antd'; ``` or ```javascript import { withTheme } from '@rjsf/core'; import { Theme as AntDTheme } from '@rjsf/antd'; // Make modifications to the theme with your own fields and widgets const Form = withTheme(AntDTheme); ``` <!-- ROADMAP --> ## Roadmap See the general [open issues](https://github.com/rjsf-team/react-jsonschema-form/issues). <!-- CONTRIBUTING --> ## Contributing Read our [contributors' guide](https://rjsf-team.github.io/react-jsonschema-form/docs/contributing/) to get started. <!-- CONTACT --> ## Contact rjsf team: [https://github.com/orgs/rjsf-team/people](https://github.com/orgs/rjsf-team/people) GitHub repository: [https://github.com/rjsf-team/react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form) <!-- MARKDOWN LINKS & IMAGES --> <!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --> [build-shield]: https://github.com/rjsf-team/react-jsonschema-form/workflows/CI/badge.svg [build-url]: https://github.com/rjsf-team/react-jsonschema-form/actions [contributors-shield]: https://img.shields.io/github/contributors/rjsf-team/react-jsonschema-form.svg [contributors-url]: https://github.com/rjsf-team/react-jsonschema-form/graphs/contributors [license-shield]: https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat-square [license-url]: https://choosealicense.com/licenses/apache-2.0/ [npm-shield]: https://img.shields.io/npm/v/@rjsf/antd/latest.svg?style=flat-square [npm-url]: https://www.npmjs.com/package/@rjsf/antd [npm-dl-shield]: https://img.shields.io/npm/dm/@rjsf/antd.svg?style=flat-square [npm-dl-url]: https://www.npmjs.com/package/@rjsf/antd [product-screenshot]: https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/antd/screenshot.png �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/__mocks__/�����������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022424�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/__mocks__/matchMedia.mock��������������������������������0000664�0000000�0000000�00000000555�14467713645�0025340�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Object.defineProperty(window, 'matchMedia', { writable: true, value: jest.fn().mockImplementation(query => ({ matches: false, media: query, onchange: null, addListener: jest.fn(), removeListener: jest.fn(), addEventListener: jest.fn(), removeEventListener: jest.fn(), dispatchEvent: jest.fn(), })), }); ���������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/__mocks__/styleMock.js�����������������������������������0000664�0000000�0000000�00000000025�14467713645�0024731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������module.exports = {}; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/babel.config.js������������������������������������������0000664�0000000�0000000�00000000126�14467713645�0023362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const defaultConfig = require('../../babel.config'); module.exports = defaultConfig; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/jest.config.js�������������������������������������������0000664�0000000�0000000�00000000441�14467713645�0023262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������module.exports = { verbose: true, testEnvironment: 'jsdom', testEnvironmentOptions: { browsers: ['chrome', 'firefox', 'safari'], }, moduleNameMapper: { '\\.(css|less)$': '<rootDir>/__mocks__/styleMock.js', }, transformIgnorePatterns: [`/node_modules/(?!nanoid)`], }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/logo.png�������������������������������������������������0000664�0000000�0000000�00000047404�14467713645�0022173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������X���sRGB���@�IDATx dUu&|NUgiDEy48QTAQI2DFAh?L~q&1N|+1:DaDQgF FK}VokWݺM7]uo:{gw>,Gi{tUYN*j*W_Ek~PrO|>356VEQdViL5gFv71*.g v8d`]Ns갑_5xvNBBm01`f1Sz^:ò<dy⬳}s5ٯ>T11 DI{hĵ~SÒG fOO-UQev}H"V "sfs& Ѱ^ԖaӯU-3>Aw jGZ<vBeH٘<Sz6Eò| F9>mvC-y ob%_UҊ~np%0^KYZʾVmD:ImՁ =L A!Yz% kQc۰:At7ǒ(t뺠>d_Z"WVu b[*}JAG=l Dа=kɮ!H| 4+Gwh(,r ,3ﰡn9jN}p%I!<(Dt;8F|[`(8tl bEeLB xby�ɚ� ۭzX,XBؒ糶F<MT+䩽Xb.<V[�+6a8C@7[!AY\ OH~�CH%@f$GRgSHY'|+Ɩ̽IEEVL_drWyw#@6Mh9T/:dE\a P(CXz%SC'jE75u=IÏ<洿֏�3\9JXu"GJK?v%<FwM'f'CXX"fʵr4*y(BeR4Jj2Є%$ ]۴F֬9ne1_2B^O5rDHhyjDۤGK4tb|a;uHf�$<4~h͡9e^ !7DCDWfb|jwD7(9e1?h3u�_䅌 Yw(Pyd?{iLd."&b` =ֹyݦ>mJt8kx`jRϠP @˜^7ZLm)�zjNn{9,@}kb)UyD}K獁 A4#̗,'azQ3{XT1B65[$C�ȋh+Zsr !H,}JWXs�GWD̘bdd!684g u}Ylw3/yKI>¾S.P4<"{7͎5[?;B|U 5dp%IC#ojC Yޚ3ZȞ*k�T3L,NjvX֏=X~gGH,@uds~ՆDp";%'g2j#)8m[!7a;5�@8lP? ;5` \y[7~{GP;>.rs! */t%s5 <tbOSpOIA*g* wط`WZ/񛣛amC; "@pYGֹBv1r?Bꈙw%2#>ꑙfyn<i2t6yL_A^m$S^5ɢ82Ѭ#1a ݎ;My"jC>6=g{ШyL3PB%޵˵j]Q=Wܯ>'rLb`8J[9zb"삮D R@ _;:Ӽ;.wGW?YVm/s@CꨂL'p Q jUmx\BWm%päQxP9# Q R/3M7]S?O_<+H <aqZ3x%@z3 f"=I7"6�*"E&!ZPCW:dv (v]a =YH�b)7 Px}nUaL8pϡ%VKԞS]Gr$,8Y9L}<�IxG$NW0_}sJlI}r(37$)jG7u9HL* ćn=׶\Y }$1-ԶJ10  ڹtL"7Fxun"T|฽eOĹ'0,:E~?F;+{+<vVt< N!3p,ԁPen5FV'H<$p<Ӳ#Y ɜgPב0hDgj9îCGuw1jpۮ�;�]] o.�t"яQ+Zm+@ef{[E %L= \^%bcmڽuRg\ :3Pk4q^$ }ld_w2DX:g`8J&F�POl`O೻9 q3>T;yHbcp$6gd:;<\Irլ$tc-S�!vY[vmT-<F4sYǹ:uÐ"�XK.֢ .QS٪uWLd=#°1_<kl$[V3X $dIGK匠Ox@VE[$EZI0V\i*B,foAȂH|?3~u{,~}dٳ AyU4Xk'FyY@#:>;ئƒ#,HP4XlLMc7PM.s_rpٍ=6p8V(ܓlx"+6p͞3v."Y6Y L۽P7wMV?a)W˽WU9$�/iG8Eըy96+Dp(0%{Vs.cO>#Jذe>?d?Uvy50;28` Y|koۃ-{ }{bW=j?6ʁ{HduМB:!I::2pC~Zk/h+]UV;6E4k2Wp| ut^sj+86o*I|' brDm\C@9H|&ͻ78bh_w#ݯɜLٷ}yoMO F& 9DXP& U"0ʻ^LrC@oC }+??^ ^8+(cI߄fOHv fT+ VMM8МTՠ9͚j14KO3ݞϰ$ ; ug�j[y'uK'/[fQImDH{'!mn.iHH5�q71R̄ ,@<2  (S.xu9ٔOc^^$VCi(Z̐ Dj\{u2 cjh='{Jhsfs^PZ/Y+|<HΟVcŁwISF QMOCAR/3;nߪQ ,@ :V΄ϟ,>?Jr4re%B?ԀGwއ*_Z+ˋ?\)b{D_"V# e }v3�!8oj4\i9^ך<%@㫄2#: Ziow[.t\I7ۖ݇` tێfu 9WL/~௄z�8|m0KJ|�/Cih:rzMYD orwW=ჳFV�E, _l}hBJ)`#pr[8LA3t�luNGoccG˧_ \xtNj2�LfȩG)W|DlYB6+B\Dfz%_wc5xBĦ<*�dAQ/0M-58+ @~ϡi`3 :=u~eza#sZ6hrwv$H}Dct8hleJ mƆ ]C %qJx "i@@? pPo+e[u/Hj]%?b&@V~yu(wBpoi׌c$%Q 0ۥ~)ËOY^8 ^0(�cJW^GMce=VFsT~Xh5煳׹ԓcGat AtӪ#Uwz3/n֊��k *`ЊAaFЉJ9,.?[9#u( &4A� >jhy  i7Vxȳb& 8DV_7;}yuy}|=.pIe.3]0uyVU<:a;=ٕjN\>\mjޤmΞ^ \ZaExOpo[S~GٜZHC.6Oכ7`[|U~=P T TbD4}%#j(NV�~}d5n"Núw"zK 9KljD G :nt/{OT;8V-Qk+N6Qkezvw޶LCدr&ma; zG 0IBGc=!8/-]͵ Z<x.s(q_mLe#oѡ-8eju,4LСiZ(or-RK׾)'>R=)P * }[(;jeゑK:!{P(o8'5޸SGF1t"<ץڙ YcCp0 V/蜲h^/<Io4 +~)‰5Uk 6'sxiXn:ΰ*"}1,An\o۪+b ׾Ey5~h{L}i<JLϦt^Ȼ0Xp#Rݎ{5elUuՅn"Go{ 3j~ 'L40'M=`[-1U߼jl1:FI hoi#p6^n9x/S=۬~lUGq %Pp@ۋC*%1Ræl]d/g87OuV1X]gB@MQ}I9=4h~2YkQpc4Xv}n_9՜ `zhzY̱r,+e#y[z ?>2U\ DA>WM,G ^`$-y{b7Z%8lUA~dL|po{s?/GKM|k[%4KPv@PGAcvmǖ HO`[5\9/Op~*�)Q"EPV@Kj~o5%/K |H ` PD+gzZzPLp;V1Tţ-yv1P嫅_Ϋ@J=�Xݬ~w梋~o}[28b[$$$ޓߡm KA?lR(;w7Gz$bpb&�ms- :"`yO·,Kc\rKArn:nG"yHln8bu$V09څm7[ߙyRyz#tt8+' A>K^;*h EE!8C~([[5&TL缑`,aM^K2m|l̫^$TlڲwxmuF,OD+X2;ٓ QOM}cp o~NO!p9w/niG�)!̞ 2(dM�C`Hp4U462udzƝ+A9=vCb[<'X9Nlp}##pv Y|wDR?Qd쳝&kvL!#x\ת}}=C|Eio؁ A2 QGrJGp8X/F[ `�qL8C@<,(k66%||`7s9l>f'=9(O@vXJr Jmch؇[!~$u aah޴o\ЉNIy<N``[uIU.]{$!?z%)$>F[#܅d\|>G\*2W|c{e0'# u0_ERX>v)˷}:y|(?j+U2lG7<+u]xV 8/|ϔΓ-A _ ]!;ygoo5.o *9~? " ,Iٓ1t[c?yy78Jh 5=H98+/pOpyƯ fS4}u'HN:! I޵_kwU i^Xo>\gEdxAE&j4cJQO>4O߆(~}VEo ]:IkmbA&=@/1Q3sN_Qb25W/I�4 ƓR 7\z)W,/*<2(8=V�|$GSa()BR9 joPʁ{#hb}vʳBi#^% &Vqbs^ct;%&@�"M] `H9ZW#[͡uՀ7fglbx#$~Bub~uz)Pzk1p0 ٘szNrH' ӟ$9@|"w<LhH\V[r#঒ycA/=U� ah 3^6aCT2Wv\-.nENHb�ɟe_!mM`¸ibiFk h0p\x̮9s.l88D! Vƕ2tN@1 s~C=Xrծ=jY$ƭIlQt >k׊G?_3CtceJbYGQDZ*^s,-]Ovh8̎wL6P7hg w.1a~or IS> CGORf>K?.7BBŀQ-Y%Mfe1QRe3lF[UWgoo?>Kwm T$kq ה?1(Vqܳb% B'hhYBՃVM6_cO#{[Cj$W#0'gMcE_:ЕTf牴u4V|_W28sxPoS5mb0pwS[z[g؄L' O2o'@N;;?* 0V1rٻMt EY<ŅO} Q"t _(x-7D\2KK }d]l&7늧Sc4:9n.6|Ѽ~!YZcYkK :(S3u -l'k:&ö)t)酌/m U՚2Vh0`Wi%L~%R&g*2yȘfK!zK.ʿxQ_b_9qСpH? SQS5eZ/;}rY}[ͽ;l~A3] WȂXitB=v=IF%Z<>m 03x\ �x\LbNLŪA~&f"y.e wTGWGT/zmGa?9@͹[ xCKWv*";V<XA_rּy_-մ}~laO Khee•� LyCVcie|ܖlHPl~ ;P@NzknL|ccٿBCr $r1 +c2/i$?Dq5Iʒ>&%2nWٳO.M>mbCZgU<q3_|1e3~~,K1n P\FgSιNIX?0U�w[gc@o�ITfbIjWG(#jgG5vyŇLVM<՘4qF4uT{ 3%u4>&JwgatMb~7RܰCao<q3羼$)Oẋ~E)wQuҀdžҶI,!A{vp ~t}B, `}r'xq/)ss׃m[1թtS6V*Gն}oqտ{ٱ3Hp#|6GՈaԠQG:`'HO<r)^0ZA=[#^DhgP&< rq^Q}8u7?#z-{o&h8Zq^ ĶlB:o̮2_ 0u8QnczWy,Ɛ ZQYO^y\+dX&{jՊ7;{}ͪSE5X%K K 2i^w۱MplUo^Xp2dK6xL]/݀S= Lў 쨏C�"I�: A܏~yOR4jgm4^ uXR@?)c3Xۦ۶6ꘙz PN5j@B';MKO{uHTs ,8ITN3yK\S/NdzSO?6~..x'af/@1L Le +m5I"ƕqrDyPD/ژ,O{괪WS>u >cIt~uR$wsV?'/盀G̕~`N$�1& @ӂd|U1Oʼn9tl'bbKK[훍}ߪ8@#\MX, |dx.^/2؇%byh^|Q0i~4ذ$(7W: t^͌?eUcPYZ ]~Elܐg�(N m9(4琦}}cCBڳWc@X[[G71F"rgVx+e'D "!4e:h6PdCi,y5^T>HA-Y#)FJt9 G,l+1m!e61$7>e'jLD<f@sݠ~q?!_ŧO(ƹ yI.q]zTØ<:CўԤя%$d迵B5;. Ѧ!eғ`dfv�$~ć"dՠ>^#2=$3[_ Ul얓G9~"Shnzc$/$VQLڅ񣸙=A* V6ō`:f^d;9#M]mʦC>_{f=]I�&0*1T_jūV)l4A}G;A>u>{v*R&,gĴN1tbcJ0E"vcƼyDO43W}� '$ݪS9mgY6vi} 67'gtx1d 2`4:Pt@=os$W=d> +w^8<^lcvb9{IT`|X2�2堑RM)j10c}rW޼D;jb;4 )fnOX 7byi qY?{3ڊClIZ>cc { ]Y][PޡN2u`>q#;yl#b ww@=Fkw;tΡ,ѵ>XC1pIf4E L<CNEڦw JR7g gyu"- B+Vi6\eï*+ i>d+w)qs}Vj}OօorX *b hĨW̠lyU3+}u �1HF$io c\rgkwƟ.eWUm[ށ sL|ґ [mCXR#.S`>K`=pp]?Xqƶ U!KܧmMι<bЄtC tR[@nx}y_ג@:}ms +ljqtAI`2WN&) bߒ�/avVbmTnV0NO&U}!8-n_#^T9Q<1f)6\5{k5mw:H�!u?IL$Sk&U}H +y䬩Fhm,m1|aS?(Lhk+)8qѐfZ6NR~7>}9j6?_!mbj+o;(+9"/tkB1=Ƌؐ%=#WV dL9rD#QֿlbI P[1':< S+vrRPȋ-px4')xV[;d(N'zl$W(s'�}˞4e ,M?JH_ Q/Ҷʒ.^sPPOBEwT׼ky|C"u/Fԟ0^o|ܒ"c]D^*ۉnUSpȃ`(48)xvU!U@hѧ]M-m[Ӈ9fSR3n# .<vqv$rLŐ<y҉AqGez?qUY9scٽ/O cH^?ɫўc/GzԟU;cc[Ya?As kr\ UuW] S܏~KyL8<2"v]gT_FƛL9KǾl[_)R?i|PsQcKpGAP?^5I^\+ɞ'nBPS W |pbq%$zW= ԕWJ繜TN}Ym6~^귚1a/Ѭ+1tCYZRbf[.]af/3U1G[Tr#gm8=_8sHą䔑OFW9-e0yZI`%ye${O~K,ȃcN U mՃ^ULE]}?LlyW[όQklQ >Cm[Z?-^<vvye_+kX9}~C$I|+IFsMΨys@5Qh35[J_ SYڽ;CUm|ܯdA=[u"Oӳ{̆6WZ3B>?C/с۪ռ+sp׮?C`*vӎ dždpA2[a=vA?$8ml,|bs ZihM~h  7A?٣8xcrK+gj>sW Rkr1io&ş4u.ڤ/ǿ(~,{q0!+#*oo:\D2P5\9"^vh&Hvl<햍'Dd}8M01hȁS]LƛkfGAGlf`IEKp#9t)?G'9^kϳ'T 0.CG@F%Q^]J>X"*WeAc:1]4<Gjp {|E�(}ȧʍ{P_o?7r}37Ʒ�pj)%x`(%?:[/e==g9]eI<1lGl8 Itg7@LL8 !ű1~'Mh?]f2Sns_Wjbͣ^$5$n'�}19%=$F&gMI%xi)8uϨHZKcpП9 Ly@AdrݧPOXtݞO^2+Udڳuɶk.du|Pa@OLR;nMgoU@ѐ !`iFwCAG gY~k5ToȋW\Dx-\s8DH~ڸRnϰZ~̧>YNd'@O$"u8<a'dqw{l#$3O>EͪQ$\8/7p\{n:钢G#9U+'>r2uOQ4&`Y6ԎDRoAa( Pa}zIxXIz :CiNO TB=$v:DQ$k'QtJVak1GaƳ E�2!tQhY#7M| 7c<{/|A+EW(Ds@4iSjx?+xQĴDo8^>>,v*M`y%hԃ�yɧ=*%gd΢DL/p/Qrpz?~K0<}s_1^0J$1I<W vg\p,V�GdK<`"mxO%<3h]~&c}f@rx$ž'cT/ 'bvKǓcIb�tog>ݨ~~Ny53;p1޷s1xgDѦ=۽⅕V{`=:: 'E KI'u"QܾK׻S5䀀$=Nʼ� >Ϥpq4dwB_}^?_}CB=ss^l.g2dR+BԍyAvXuМãǾ>o?":nEGNoch2qr8 zvFe_ߓG8'9| {KN;3=)CIW�AmkcURzs훓bbO+J"x\N 0 hD[5 ӣkVH"\Wut]Ohy SӉ` ۪AO~@ovwo&ytĉ$f *u: t"ٓoꎶh)7콿BN!qH"0SUěx D@TxuvI9AvN&A3.t4ھG B_h:CDmݜ+0I{;�U/[mgfG!t<o/m%H OLx1N! kȢt$VA:tulMʇ!pʒ>x\UMQLJ%9<$6նMTh>[]OvVdFt93ۭ [ !8=3 ϝ;&c֋ɆKmI76n(OHN 3}ҲJ2GlyոYsxbsN0)9$N LLH]jp0bi<K>;M<9%>.&#x*; j9HrGO r|䆉O9mbZ90+߼o#\KZI6'OVǫ=h FI^.mT:/ArO2|h,O{9UqW`r<Vw[5Hۍ< }vc be#l�b@B&J08Dɂmie&^|dmyD9񇸑ޣ)DM$'A:AV.uj˲rp , 0$k0Qxa-= zEi2+$e8{�䪡$9 ⓯/qvQ;oͷ Ѳ'M+ɚbMYxoɄ O"l3:V\x+L�j '(V֛>yxppp <$&ë 8FQ+tDX̭ΰ`5}{u$ǿskho+AsOle!yк*>T`T@xZkۭ�cAM̨6DI 7`EYQAfIްO|+_<ϲe i_C@{S&kxx>mZK,L딌>FH@c~lmsq$e#g>~q*bٸWȧƿ囗z,.NrEA@0x tnbc#DG$GAaCp4p#}XOXWѻB4+M) Ht'Uu\+'>y~_^5�¨HvHĎN5 �P;r谧mhJrjnş*Λ}xLkZQ/~X_|/^{b*/^D+IđQs<AfbC0 ?P=Au#b5[ +ї�a$\IbR"qE6E/t�t`={UvVۋs?v<83י8i˦oi2Z1BGG'N~ \ʚ<&&@M= ;X?u{j'y~BĤ=FIO[xo++з�aowr+>C%3W6Z .uYg�W葁"{f,ュqxԻn/N ɏry`qUm68mQ>Q cPZ8-~Q@|pS wG:⛮*J4TY/?;"^A"·-Rb:h)Xz#?l>V|��IDATunK|P@YEPizN@�17`Ep5y1JwE'4H +GSxzG%[NE:A(J*=d=@ʼn I$;hr�̎bݞ1n6qW'- @u/ڬ1#9U4` "(ЇSj]GF k HsnQ|wPABpL0 x<|ρ"ל/NWB=p�a<PIJsb\$GR_.J2= 9WOE؎@^rB,)Rcz\9� c&6؍;y'7le`%#&<e9x+ Dหx|#_֌]1�V1,Os l6J`>%OrȣfvTsݹYIIyNz6ԧbZz d|Sq&LLiM.'4Ir(DSr{%8O .܏< )c[ke $DN2''PWH1mI|s%$}w~۫MGw =\/A{Lh~Yl*nYi_�\J фQrډ2MZ`of~ $�U?&@}F>z: 9Ħ ~S+!~,eVr@$&P%$"&<cGlS^$b'PŲ\9l/~, @rAF< <ʧtV@cŬ 1ZI/83AO$=hF@?l_0Z;C>QmU'848~'&ݼ,~IDb�)"H֞X'3XDdGM^$rt]5,N\904?|Uϵ,u݈dg "7ĭW0~Γ4�2\fT뒎f=+qop~~E0=VXz' DqVc~\Qv;+>Ն7<Plp{H uf$\$b7KzOh1ċ>^vq>F/N]ioODi3ġ}F!hlϒP,y Ov>xGiu=@͚Y\$X2]cXh+0B+Ƕ_Y:;8:�IH NbS$cG\lթ]2p#5f@;OUr0<,+(T2}?[츪Fb($UVY-Y}IуwD插&9\ ok[u"U`Y]O¹7z2&'nLgv T6Lv_}Yutف $R |L}L<vLTnA!Jl3� Nн^dT{ԣq+UX9< )J_+c{DZZF{Ml8$JrRqytS&tڔ% OJńWvɓ,hJaZq[ZHDQYEVm?,On#)L -Itd.LAк'yݸ qa=,<9sjfB6D[�0Fc^rXNcK- (%WFw1ѲDd@eսxn=H839f.Nx(ԃ\ӡ�ٍ5̚cW78UŊ\`n)_YxEl( PPz9>voc[OR2K/gjʅAǀpisW!ŕdwtnCt 0.cI/*9'%t>ƣoyUSF'N%;O9=ymGrU). CVOMWsז*IdOWk'+cEsZN|L~2X!uCOKmCQ8D;+ LL7Z=<":x`F²K7N5:*D=v(Ο'yc!8"J ݓ{"I{h4*38-8J|r~N6ف/{>Vs Uy3#VՓi%m":+HyhwsGPiNGnxnڔϨTUR "_՚^s#WN3fòHrRa(ٳW$_9!uFRDNm*:O$^G;CN+oU}^tg`+{'!cKШc2*]nk*6g?\9$cNz L@/xǝ7H>%;E"�K/FGƒ'_߂aA]=G o{7;8n>tgrvg b*NwcNIFWLc($b|P1=Ӫu'2u:CGT~xOr_eeR*<%Qw {o_u*5�[  X<$u/{,~-+I\ %ksЄN9B7ޭtNRW+d?tst:$- ԪBF5EGvUGߡ}Xx(zapX%M$G$[W^FrR t"WcQщ2tbvg}3iA9:-W`%-XNw|6^I %IpPO>\9:t� r�VJ+f$HnX:n%YȕXtˣK|Z~ï�y[Hx.pNhfbЖ  9GZ<[2H;N$?pBBQM|ڻ(.盀�p[GǮRۭcl%9W$uR(衷90RQCp0p F VocODC(5$աRUUV1r# Hΐ=q< Q?0=qloIFA - $-HYe)rL?GJAj8۝#wõ @H I20C&Q~YMCpXsDXI"q�3\9,!97�"ŪB.8n,e=b-etnm) X P/ ϱ#"u~Zljl7콭xjt�AY?{↓krd"W_n)) ,cEkg✲K!@.)wOޙٳR`J5؃Qz)>8*CA"<=cfD�QP;�Iz����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/package.json���������������������������������������������0000664�0000000�0000000�00000006222�14467713645�0023004�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "@rjsf/antd", "version": "5.12.1", "description": "Ant Design theme, fields and widgets for react-jsonschema-form", "main": "dist/index.js", "module": "lib/index.js", "typings": "lib/index.d.ts", "scripts": { "build:ts": "rimraf lib && tsc", "build:cjs": "esbuild ./src/index.ts --bundle --outfile=dist/index.js --sourcemap --packages=external --format=cjs", "build:esm": "esbuild ./src/index.ts --bundle --outfile=dist/antd.esm.js --sourcemap --packages=external --format=esm", "build:umd": "rollup dist/antd.esm.js --format=umd --file=dist/antd.umd.js --name=@rjsf/antd", "build": "rimraf dist && npm run build:ts && npm run build:cjs && npm run build:esm && npm run build:umd", "cs-check": "prettier -l \"{src,test}/**/*.ts?(x)\"", "cs-format": "prettier \"{src,test}/**/*.ts?(x)\" --write", "lint": "eslint src test", "precommit": "lint-staged", "test": "jest", "test:update": "jest --u" }, "lint-staged": { "{src,test}/**/*.ts?(x)": [ "eslint --fix", "prettier --write" ] }, "files": [ "dist", "lib", "src" ], "engineStrict": false, "engines": { "node": ">=14" }, "peerDependencies": { "@ant-design/icons": "^4.0.0", "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "antd": "^4.0.0", "dayjs": "^1.8.0", "react": "^16.14.0 || >=17" }, "dependencies": { "classnames": "^2.3.2", "lodash": "^4.17.21", "lodash-es": "^4.17.21", "rc-picker": "^2.7.2" }, "devDependencies": { "@ant-design/icons": "^4.8.0", "@babel/cli": "^7.22.9", "@babel/core": "^7.22.9", "@babel/eslint-parser": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@rollup/plugin-replace": "^5.0.2", "@types/lodash": "^4.14.196", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "antd": "^4.24.13", "atob": "^2.1.2", "babel-jest": "^29.6.2", "dayjs": "^1.11.9", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "react": "^17.0.2", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "repository": { "type": "git", "url": "git+https://github.com/rjsf-team/react-jsonschema-form.git" }, "keywords": [ "antd", "ant-design", "react", "react-jsonschema-form", "jsonschema", "json-schema", "json", "rjsf-antd" ], "author": "Delyan Ruskov <d.ruskov@gmail.com>", "contributors": [ "Heath Chiavettone <heath.chiavettone@freenome.com" ], "license": "Apache-2.0", "bugs": { "url": "https://github.com/rjsf-team/react-jsonschema-form/issues" }, "homepage": "https://github.com/rjsf-team/react-jsonschema-form", "publishConfig": { "access": "public" } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/screenshot.png�������������������������������������������0000664�0000000�0000000�00000425367�14467713645�0023420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����}���u��BiCCPICC Profile��(c``H,(aa``+) rwRR` `Ġ\\T�Qk .ȬͫOp`ݦKcG\)@$000&�% v -Rt=N׀I g -d?uӑP{nP021H$XRAIjE v/,L(QpPg^(!?�#B,)q.PP!%VC20(H,BxKqͽu5^.c`` �%am���VeXIfMM�*����i�������������������D������������}����ASCII���Screenshotr*��iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/"> <exif:PixelXDimension>1216</exif:PixelXDimension> <exif:UserComment>Screenshot</exif:UserComment> <exif:PixelYDimension>893</exif:PixelYDimension> </rdf:Description> </rdf:RDF> </x:xmpmeta> ̈[Y��@�IDATxiRPQD%DE]bc(" Hw4 H\w}svw~;;gĿ֌LD@D@D@D@D@D@D@D@)myD@D@D@D@D@D@D@D@D� " " " " " " " "P H�+֗W''" " " " " " " " Lu@D@D@D@D@D@D@D@DX�V/NND@D@D@D@D@D@D@D@@& X_^0bM@X:9 `" " " " " " " " Śb}yur" " " " " " " " TD@D@D@D@D@D@D@D@5 `D@D@D@D@D@D@D@D@$kɉH�S($˫�: " " " " " " " "P H�+֗W''" " " " " " " " Lu@D@D@D@D@D@D@D@DX�V/NND@D@D@D@D@D@D@D@@& X_^0bM@X:9 `" " " " " " " " Śb}yur" " " " " " " " TD@D@D@D@D@D@D@D@5 `D@D@D@D@D@D@D@D@$kɉH�S($˫�: " " " " " " " "P H�+֗W''" " " " " " " " Lu@D@D@D@D@D@D@D@DX�V/NND@D@D@D@D@D@D@D@@& X_^0bM@X:9RBP,Y￱._XblZ_ҋ͆ bUR%S\ش/M6+V%KΔ.]:}VG&" " " " " "@ +$,@C毿YgeشN;:ͽ֗"@s8x`3Ϙɓ'g:= 80<M � /EŶc=66/"/E#|W^z)" " " " " "$5/̄ b[ڵ }&@c<+\G'" " " " " "d\D` yuʕ+knt" " " " " "P H�+bWϔl/bg$0{,v}?|(Z$eva"v:\(ϟ@;vef=) `6m27oaRL%4GFÃdɒ{f͚ƍ͒%KLMݺuMV ˎYmgٲen['=vm E6l03fpqN5jpW^=SN r{6fm9 =H>zhtRkȵUaT+[5UViӦ)S.bvuWSvΏz|tұ}M8L4 &@َ;h6l7V(ɗŋ\l3L2>p{WB^QINxIC]\]_iԨ;pDFuֹ5NfumԨQfΜ9p-7osxu Dmz1cƸm+Wmq/Q9k49/%ݤn/_ޜ~q#G {qƦYfRJStߩ/r'\;*e!" " " " " E@J{th?_ϴVP�9s{O?ϜuYI6#?w_si}'ryp&nBv<3[TC4cpW_}]w`~ҥuz0ꪫdsܸqW^1}Yl^ԗO<u";c}ٸuԩLժU#71 d޼yncžp /tglf˗_~iz-י-Mr\ ;zaD~<KApk\C5>mc_wi'-KŻC 1w}wF<vanԵk̝;7jG梋.rrd;hLmq}^{-8+z9c@?f)b^z%cw<S4?V~AӧA>CsF2~ 'lʖ-U)#usgX=>h sG(CG6_^a^}NH&~?{/jSnSO=5Ea:g}<y=( F&ouZ_lA!*^'\;3R帎#0}3eB<`O B Aa:"!ɒ,b&.Q"j̣ (tW_|HSK^YfK/ԉ%Qo^E{_uu->NJcA G|_C=;h0ȭr?G~xqo/66|qM7XAd<8_~e9|AǺ2(RN~-jQlBxj_|9s\Sx:tʳk{6Ç\<,w}?BO$;FG34 .̲!TGuTd'<K-3oHgqF\%X N8 '<–-ļT졇rBE,ܳgl3BF^L*Bg*'T W_RG 6;]aYA]vY\q*SYc1Lyljc" " " " " "J<;\9 pNI!ux=3Lx!mڴq9k$bį:Fj߾}ywQdr|SdTfDH$W^y^$x;km፰(ϫ]/y5$acE[1"h', D?w%rntA C(.B$Aa.^UTǰ{.z a[^ D-ZpeRF 駟f$\ o0A<~w\{m۶C/8?wD+T1rk4B:篿/K*_x!aԣp}[bZy+AsoDV,wv9IY=rѮ#y}z2(Jr,J1$XсMѡKMpy`n~N0"C^0(/|D8K>M(ow3ߠAL/ .#?~' �u't$B @aOC/!*hxIĎHG"eO; ޚ6mS'0-[4x]oH:"\_'I(GBt懍T|3"}!2l[AgÃNp %i 8A ?O<"4i[; ]֭[, I ZX .w( rɑ):hA 'WACoOx6Ó$(~tƒw!=t&B�BRȳ D|ma!Xx`FYu,W9ǂRXaOgTHBK0O_y| ^ׂQbQ#b q#(*XA˗y睳xR.YE0~ `/o2U̻F] G}toq&la1]PǎG3<Y_΍A˗!/_Eb'dG&L W`U\9%:3F#3 ٽ aYQF{Qb [c(i<sF[TL~AZ|yJxAtÃ|Bxe-g*,N tzo8N©^Bx1E >~K>q†G7<?z[ aQ|]~> ^D8 ^&x &pbF0I=?ܫa1cB]6XX̣;R DƀQy֩Vvm%Whٹ]WיrxL oG" " " " " "PX�C ^g+؁F2Q*JB%a#_tlAh%&^ЃeAa(\i5FO4Dթ&ǻ'fh,#lQ``�^BYX'0]Ifd`QBO׸x#0\@>|dxQ/D ~2WX (WKd3u+.%B!͟?Æ $Ȅ4cZeރ ^<q1xLQ23D@D@D@D@D@D8ȱ�@8Ƀ2e>ι3KeO` {HNe'2an]w31vꩧMzHI,ĭMX bᰨrAӧG͋'HQ ^l8f̘,/JD;  ^yȂ.XNq88^x,E3B<UG#Gf*֭[}A]ˎp:Eʋ@qD!my/f1^;= _Pd!T>}\h`@"vݝ׍/HÛ'? d\pAJatA0QޖQ|~@EȂ<TUE*s*Ǭ2" " " " " " ,' aQe ={-~aD>W~}}РAgqV nEd&sE(q=8-$=*NO',x% .bQ-9Gy}Ȃ^/"ANz Ez&,׌cKH5ya8y2yYEyy.ږlMr,%DHaP�w}͓O>h},_$,K,!d6qD $|SNV\NtFKŢHe=ֶm[4N&LpЃa,ɯB.8jՊq}=@.p]pY0>'b믿ް^a׋d1" )!T/1:i3r~0XF~T,Jy_)" " " " " [+|DF#W@xr5a2A#=wt`dp==, (1ͯ裏f SD:t?dپ}{3;s?n^|LDn(o#'Kg@.f8nܸL[@`8;<7 $KШp*z<xF[N[ph6dTݣᒉ%=hTE[:ʉB _pRyĭ>\K.79gle˖qů|W3~%Sex4O@Kf{An0rJ@, VX�-c#F: FeoTiF</<׷qYO3�šY,38�_Q.Xx≙ƨԋ¶}(%0d�q h_" " " " " "P8 ~ܹ,f˟}LO;4|VxpQ6ol%\uY)H6s7g;iL.aVג%K"wpq[Ϟ='BeX`!.L?ꨣ\~6y/ඟx e0Vo#O^|,>lOQnLe=pB">@Ln ZdfEsҴlTR.RHޢ>y#Gg<-Ɔʆ("'i&Qg2F OA m<#69]0)'OQP(ۨSN&!?|Ӯ];\h{~ڴic. Q./#Ggy&V!g7<J\GIÀ\J\B5D(2ΟA�Qvm7·~k>LC ˯zi^{<Znb\_7pmZF:qPW UQ\zGh/`YV}@Q"/�{ _o `Glݻ/DxG1FN(rx"/x -*v>䎰8ډD鄠�Dvqe Aꪫom[oKT.7ׯk2m祗^r&"-^vI?#ϷDF:r祋1A<y଄_y<+ba85*" " " " " Œ@@zRE]tLd{awڵkJezlߟ%|,^3 >I8ce{Wxt!Xf͚NN1 +zieu떥\^׋,; P \K.)okB~6Dˎa~'OMQ/R=@JsbxI!꫆g6߫W/HG>[o9T|0`@; ylg0QaaJz)֏^BӧOn⑫),br<i~~n?Inϵ1G d"*Wln u0'4(, O1</+_|6]Ea_lRa(d%(j6 gΜ.\hvak@ZR1ғsjΜ9.;a]t MٳgѣGK}5i$Rf̘:uuG$;~zg2eomDCpxFrz8?6lh15 uԩ.9}<9͛;g-FRٱov: לK徠 z=g! &̵RJnOrp ((ڏ#@Q:&t:V B sw1lxrD@D@D@D@D@D@D@D@:aZRH>g9tJj4CD@D@D@D@D@D@D@ҀB "$;f͚-2tPCBt@4@Fs)s{)H\)@aPdažoFs'b ZUD@D@D@D@D@D@D@ ,yذaf͚5L2~^zlٲEu" " " " " " " "P$5#�Gڴ@�V@G " " " " " " " "$#\mZD@D@D@D@D@D@D@D H�+k#G6-" " " " " " " "P$5# `W(|R91s`NZdmؔ*źL%2W٫~b}:95kܹs͊+͛l\WPB.DytHa_Y"X(zƎkj׮DD#Y LӦM`I=W |^8o+" " " " " " E�__UV5e˖5J% P72eʸS6n8%Ʉ=lDD@D@D@D@D@Dh lm5x(Qhv!PtiSdIX2K('1-(:++Wįsɶ#EE.�ՒԉVH�y~m2I�KʈYӁB@X*TFD@D@D@D@D@D@D@D�Vd/\D@D@D@D@D@D@D@D R2" " " " " " " " E"{t" " " " " " "uظq={ٰa @gmL+#G_|1ϟozifΜ' ̓Ч@8q4hPx(USe26;U53˼3bY.MLmLolٹFES6fy?טʕ6+ʹi,ZT)Q"Ӣອ\ԫm;=˙ e Z':XfMcmdjW.ffjmKV3-qf>ok,?myyl_h(c؛Z-*[\]?oؤqY%:ܴW:rmK,fߗի)M~Tg8٣|Mj:טr*m}kb>^Z-X6yƬS9W"T3 ̛oiMt_첋9餓Lڵ%J*bŊYfŊN:YƌkךKzM6yc+U*ʕ+mú*U2*T(S>ӌѣ?n/^lw7r#>n̪Ṵa\<C\`ywߙǜuY/7-[4߿Yp;4;cN^xQGIp)V/US+tA G4u x8}mn8ʼ1|iTyNGFQs;-gc)ANr!uG\jN~r\ }:ѼiZrN?L_+vyqv5w"vSǜG52\_&S#go/7p"+'ʏ̓ƛic 1w+u3gwm!SL?[Gg<p9ͩ -<垏g~iExr^i'3zL{̖`j!m'WhZX5ӱ %l,֢&Dp9?E߻ɏ<дܩsV V5= 7#f,t쿫٪6eTs*YὸxCD^ϯL3._mڴ1W^yeXlnW\a9,5\c, cgٲeccٴiáSIX '<8k׮qn6E=̙g,[!n /4k֬1 0o9s=4lڷooZhr{M:|Ff֬Y[ouB.c7 nL=nF3}t""X `xحp9 8^oc)m}'2:۾ۼ0t1=qYs0ZFa h>X~Sn�p8!MͶej t!愶 t[:ZÝ昹+'+?Lx5rnz,67mutCz ȥ-^]ҴۥtAS o<8]%c"N9˭X= $__|w,'8LzU .=inEV<ux.n0WSTIs{]?ɯ'/gܹXtxD�x~%< 8Oao߾9Z7W;c,/3[L�klyq|F~ꫯ6 6t_:DTeʔ1sN<2e3g;w9S]~%K~ؔ+WË>g1"O?./D0̋_)dU%hV?AdDYj;/04\yVr74OZd#טe>5WSÆq?e5F0LXK57?D(rg۷s:D-y'k`y9e=يQFɯ'Pfvj:lzwsݪ{֭l B%-ݼ;?|3~y䴽J~+}cKUnսe}sy.¯ n^a ب}Hp6X~up$rߗfͱmvtG5e*s+#̣md[OZle9GX͐ mhZ5j;ցɡ.o騜H,Kk"Cjn<{n g>@N֓YŴ̲>S#wQ0]jU4ƉnyzHQG\qlczѦA ff]Q[O Lbې& AZ/MB1#<^c.wC8?M]Eʼ1|9'<` ߹q1y⑳vpFMxfU˞]xuY뱯&iVjӉXO4K;EVdևQ1w6":\r֓<Rku;+j;,#.|hG3=i{˘>FZOwz o,\$dWPΜ~@$<c߸>ahhK~:vή=uU=yΦ[}ngϲv&;8ns'gV^ױ~\/Q2m괭<><uV؋<nUߵxb6/Ho>?̝?Ds~"׾i0:3+]q״<s\uEv|\oC~#^ iik];϶mM?MYb^/mJ,/l=/C=uoΞz)Cw¿�"?lMfwq1/!bO?aի}g~GDf͜ T!xF\#i{5j+ZdIv˗/Xp]wt. <NqLxn_?܍G)=O�._'7n?;!EZ~_D^b/,3A@Dۉw/Q&eIkń {;!7Vjf\nG\99Ά0yX%\'=y}𥣉7KyQb9VYn;%](o'gLvbowQb\ڈXaO~5qQ <7 vyg :XcvNf e#w|۝\_LpmobP5L +X9 QkڕWϼ 6Ɗ>-VP͊MHx#]'KmVx8𗙱&P˝xc ͅw=V0`?-B3 NљH1#cC(}[Lg;v:zCl82'X,YCz"Hug~twta`TF0<|w(tFCxNlل!P͵GڎǷ2l/~ci^ߊ'v5aOv~r=~fwmdyrOw9+Xʾ:uo櫱]h_a~"Lm;>4x,g,|mg0)g4(^|]mK0/r.~gO:_bYsqV ͊7YoDg8s_#]sFw%<\]jEv|ၻaZC^{\~ԃdmJ:1sVX^Lr'M+8׶A^`<haVtob_"t`[HrݿվnV.s,#^zhp{l0Ȇ_p[=?!h]/pxcl8utQoA&4;v@y͛7;]w}G_|I'jF?QժU @^%Fͻꪫ 2:FymܸL0ɯ4fcgyƭo:#]1r3;!k|AO^z9aO4x`"#ug} . /=N =ó+[6sD;۰a)]:s(eEr+~A"_=ۚ]4ݶwQM>C#�}8?]Gl½G=mRKVy!qB6 u*oRŮoτ]3#hCB; ^^lx&/xN0�BWxggxc?m^@wqVd#d>ú3#μp>FT@(y$< d;%u<7$+B a'o`8xD9Qon#s{Rkf+=$Il-Wݘ" H3FX .D+'w GϊQOJoq+<S~2wTrN/v> tFɅPqX1`sj恜㥁(çퟙp65{јoB ۸ge䏄\o on<WPA4AƓ' .)7m]T' 6<;uYw-VL'{ c"Hbk1o aEx]^"$f0<;T%Qu9+wx#}:nO;fo;޶lI~/0omzXoi踋l/|68EϬ5Xo}N[va۶ۊ28蠃\?BƏ& )0<-4m!C\>3gvBa7t?X 3Bȣsbb]Fh>xvs+m �KG /k:GHOɓeEK/9.΄:SskJ`h 9ݦK^^9g;!c0ه-:x$t!:*hA I߽&7]WzmֵoF%lgF9")a_96_x0>mC? ڴkVl O`ڄxxaM\/X :8};唣 0cqpٰɺ�Z#> tvbna3A$8~Dޚ#}mF DD:K':;.{N^XO"*;@: [7+ڔm獼shmaQn&Xc|?u[㶷^]x0H]CC&,y !T9Tݨ ß":{"lqLb9|aXR5jhfnwx9ξ|1Xs?Q7ZgxT@vK^E8%kD[Ŀ`e\ko}҇:K~mkuwXm[K"٩K~v6YyZgP$o FNE\>k!k0x&kSҵsmX [/ /Uk ]9} o,'mVa}>zZ,M!6m-YЎhOۈ+3.18*pp[`4VZ `NxL!x} R9$a 1o}zw#oᒌ/8.<_Z=?ɍFҋ_,X}XQNvW8�?Kx$ /ίϢA� q]X+Ep^֭sx�Q E|e[ʊ?/q}Yk$R^ D`4C`x-D}dL -&~>\jIhyM|t$ o }3ªN 0Gǯa [5ٷ@|a&: ೅ՋmyġE&wTrLNvQV`ek-<GH$ɠ  M:'m h B'"UX K:[x&ׇ͡zV" םV8#,QC(ǼwDmstpb?0G<6WGh-ys 2F#P OR%Cٖ<hXש v}eԃ/?a2B*_%D>UG;Ϳ s W ԯ .6Soz?-|م:Mv{?;t٭K~8`;Jd|-O֦sz5el8k ŗ2~^vΑ{?WdmVa}r" }{<>l-m/{<FP~aM;}>2ߖ>ntܿ+C!I üЃ84���@�IDATqt; L`-2'N4Cu^"vgDj׮]J#8r<A/3??/e;C5}i}Gq3G[th =wӼ\9>ɯG2ŋ�Wn/duCN$o8ԩ!*t]m^OgBo> F8??/]>P,a6{k`sa=l>0D¤TAkRiCcD:Fण^vґË'ymֲLO#8$j'i70ׯmn r`^elbb, ?ORgamɃ&?'Qo𼣓FXU ?a"̛w%5b<'<V䭫 f`AAKg<9ˊ6Y! 6Kzu >[<8[Ao9<v;|<o˰]I':-zűo<6<1pE=6sM5C?#GV84Wa^Ol!tӛ]ګl@lVw~^*;8GJyZX 9ȩI|v뒯~lgi}e1mPŨ6ohӵ3˵oo:8wm  >ZUփdu+iCiap3?^O?PiCxa0"o<gR i6?ڀ}|d=Z@�!t IiA.2YɪUZ!a!oGa pe߿? Fbr<0<Ϙt[nQ$_5;EdŜ@͚5]˝ Blda{cH{Ŧ¨4Q e"dpv˾js|x\G|Tt wm0rSVO rI8lC&,r9R<#C[eX->,?$;?@eLv.$+$ljU9:Ub$5pδۡr]< cb=#GnÅGK4Fc~T  rCLr!^jKuMF >'GaOSwWz=o# /F(ut[掰]x)$rM>EF{ݱj0z9g !Zޣ52a4M<"wl)G&M޽_]Go1>#!=UJuŃMh/i8*ƾ-a>gCMq9(w7[,Y{E(B'vϼ'/b-ee]:i\hX<dE|nYqF%>mCso*cTxe+u~''bo-u>"ZˍDyei?O<W<#03B΋}]u3`` ]^d_&F-<<o1r)F]m=f̘ =tʕ+N:Q;t`jg;Dn0rInH޽aI<|y_btHİ5kָ?<7'="=l3,F'GB~pz?>XTߋ1/NzqRA6$~BKeU2!#2Z!?$"#0#tlr~$C]b( ax;}cs;"[EqϺ_cdi|؎-G63 ~'v"aor}~M3NR;־wryz d`t06PR0i" 95 7Ίz!?ΐ;6xd z96P繮x?xR&\)S<hv=w#2#Q o=i;~6ᢅ6sC[4(leCmG!L[0^n+|xb1 0thTFa}y}==…PkxI _)I|F;a{>~&ki'T<mfb9c B_h~}v܌v ) o ^/RM[ubkg|xtM_(}#v`M:seӧWwq/ o-KcZъ<1~�n.ʒ$p<?�/fvP>,޵p Wa6^J aB�<ow=/':^x PY| |ᇆߋDaaʇ?\H>Mn*̺KëǦIxNëk׮O>pJF$Wn|4G튰/V$.#;r܈m\qywq94eukDb(-FM!6ͤ]NXBބ&c'mMd)C.gt*rÐӋD'o9 pLA򪐼8l$7Z:o4NXj6R9S  -ӄ2p7xOɭߞƝa_`,]Y63Okl=apԫuv񶙨ޅPQLQFE b5UD{#S,8/HD,垦QI[Pht!ob@J{`hx "BLS=,q&-:nz,/M) usa*YA5A7[s,*g}ЖVMĀ6Lղ#C0~ȑ.Vyo-<Zm\ҍ7S8WԶ)˾/rO Y 0l0Ӿ}{7B8bNk> QXptd/㡗PTNf^_/�)#KUj{9J䢖ya! +r46]ޑ)䙉SNzn%Z'0^^^ԧZ:}g=.X/;<|J+QKE<>ߚ_?> S=TګT9O1:z"ds<f#.ıfn oxmJQT 9 )wkNۓsGF}Ni:I'd|,JQ|ym>Xn6v7>2" M8U-0^;t6d"_Z6o<<k?ڮDچatu#A~UlZ/n:Wd>ȏ B 7͐>_y啅 :B%P`!z E@D@D@D@D@D@2 .x18TC 3�:0G87m$"PdP_SAVX:P_ d7hI[M}M4ߋ0OB" " " " " " "W={Yp<JMfEzd'" " " " " " " Piڴ;w5k!Lґ�ax~Q_LX2BZ." " " " " " [ĄƍoEgS(rk:G؊ $ʕ.I~ⓜJ@aH*{<߷%l `WSt- |d" " " " " " " " KĿ֒ޘ9C_L0C'-26lJV/G kUE@D@D@D@D@D@D@D(HI�+'cغ $ ܺE@D@D@D@D@D@D@D@: `E E@D@D@D@D@D@D@D@�u$$ ,!-($+HH@XB<Z(" " " " " " " "P H�+WP/" " " " " " " "@KPD@D@D@D@D@0 7|L6-Y.椓N2kNXvٱ%K4իW7e˖mVXaԩi~v'/_n6nhjԨڵkҥKMz" 68֭[pٵMɓM͚5Mjղ{̙3͛7` 6lc*Wlׯon?`a Z @x衇L6m~{3rHsW&,۬Y,wi's饗>ؔ(Q|k1GٙѻworJyDY^'j~1c>;)ufdjsg_X34h 9=s] auɒ%f̙fV eo�+ک@A@I&h@$8pLy皓O>N#u .4m7609駟L哯&;m9r΍7Nձ�ڄEbŊ.$pI<ڞx UB//:0MW_ŖγCʬZ*|ݺu;4;w6~֯_[zz+~oB>Csi9'MdN<D3dȐγ>fY5cƌز)S={ ݌2Dɋ.ȕe;xExG9<x;vXr)O?~;^s_BHc_s׺k0e  -8WYV H�+Xg(" " " " "P�g!cǺх0<c\c\_+ 1n͉hcoVY4;μo-_.B믿uQ'4O?/lذ&Nof„ ~pӈnd֯_?s;m֬Y1E"\W^.d}{~'0W\9wxp^Ç_Zli#?ӑGoƅBO>fw67x4h[ >wiݺP;nva+0_|ҥ`Ix%|2u}9(8m95qITm..Zo6nԬT;\r!-L`v?h*5˕΋Mg{7m6W35*3KfOkFC_x%iomv>[jeVqYd?wߦnmezvRټvqk-ST?WhY!^]S]agW%hfjE~O[L]TݮiZrHs<kf3U d{/3aJ5ަt)G[>~ }2Iyv9Gf!.2+$Ɩ-[fH ;CLZFNZj#@&<ΝWwxrUR} 0r  1'GhzG TDh",l=4!?6sk,^#  㸟{97p[RJnfeLCc}Asz[]۶mcZ׮]bz+8F?曝0GNjxwHO+e" œ@ `ޙGawfmD-*y `f/ 8c?vz͛W/L3ہŷf:궃nFrSOǚ#sLKq)͹ 3kUl)ęL&GyڟיKM.=p4}G{,}6|6zcۂ(xcߙ+$l2Fth`Ӹ i~撃R+'WhZX5Eaav=v0Nj;ڶ\\&{?xQ '?~T>_3=? xuLssre g]?W`3B{N]֣9`w5ܔ&wo "lOfS2۶я|杵.GȻ>cg'(UZ5SHUǎ<ЃE|G9NjalutN�6}t&cF#!.! 3otxD!�wu9!a"yy~uwlc:wD`$2[zCr- !P2į!y8EJ0 S'ǃz㼙)yA՝ěc[nxihWDNǘ4<h=�6frڰ1NU͓V4+nvT_faSNkNoUfC%zI,nAP ^Ţ21xsgޓE__f'۬e6;߼?Eښ3XZ/֧r,u̧lܳH^l(l6~_VtAf 8d"s_MR%GS)ztwKnsZg=o[+Nf A^ƏBx{NH>aÆ9# <kD:蠃\x`X)U*sO{ǟfY"#'^kp!/\^AÛ,dC 6#2hXŨ`wXtfNǭ9-)/B"ܒ3m2*iӟ37ux`7ͣmժd<<a;t9CC)y;jW2ּ>|}xe6l_D3? ӗڿ?M}rzǝs ~HGhTu+8\yHX8M>#9>ÅDp]'=p?N7os[hyc H)WG+/cGQry.kJȇ1l*fKUZ[1p2ó˄p'h1۬@fq=V[n;\bܳ1-[8ZllY|j=>m2,娛xq6,dZ'y:5بrNAs{]0:މk%kg|,QvOmGmwߧ\`Nggsvvve {mw}vinן�m:ͮy N<zK!m<kϕ2AKT !}\ mŝ=Z:fmiki >uX;?l>uG1s6fW{oaf.K.B[]/N#\{X+ /oZ1cZh&Il+[\ӶGg$8'm?+?N3'gleQ˳[zṠ1[;mwPWiNz{s7m{\vgSgs6R G۶XQ\3̹xgogӞE/δ yQ{æ.6xȵߵN{rYlo/*+|6[5kָ@ĦwZ ;a{Cl:#\""ď_6l0^ [9s?+1ry&-6<W^yŴjʅH"E oiDnjb;vuWDކj|YL'= ΉB\" "� Sǃ^Ǵu0x <Lߵ^H>,?wNs|7ms >+/ц)zn(ϛ~lV-}mOMVlÚMc9Phjsņ\Ĵv³GdtJi:un> Ag^bFnNubS뭈PdxOW�?,'W M!paSlGbj,{z[A!c]:4!O~5J:O^dα! O&ޖ'Eu{]椣֋ ҃;q 1lH='rbK,50YNwqSKT_}y>3!0؎mtNozX׏Ǹ5@$G8a}6]D2Geͥvz?Q.#p=m-LlYu6`X7Ǚ <G:6iγ1?{\ܴǩSݕL.B[9݊OQv!{B Z?h(l'obT{>o˓y^Z n<&6OΓ o:rfv[Wc:ډ|1fߤbmcp@xt Ew+^ W^csM7Z3>3b>%=c_d{%mT=B~B{O>ِ{UaC!BBؼyBx5ʅ!z&˅1eF=#K  Dϙ3  /0\_BӄKFyR4lX,\ؼ(;]'( C!pdJ?x}_7g}vU4_D@OD:A Lb4>@^cc\Uu SLrmw`An5N"TŎm ;\8o1r"[`ixp $ y[E֚N17wo{-\NCf)0v=#7|$jy Qͷ<D!l;Y"ho%6vF k:3QrpzIJQ_fIvuU-kNƛl_t&ZB}9 I9hy^uZ6>ؿLW4ݯ!{FM<u SGNo%\@D%uu}yfds> !VK;Pn6aݬmo^CTB'5! <,]m=^YzO5<yx�kT\𺊷C_{=z^}؞./(o]tKm"%gj=w:fb^ۖ-i=p^`nc_m/|YkχN傿u~&+vsCW@(% O/>5d}<Wh%^(KV[/ZU:]W~GNy!eεymvsfK:|OF0HÂ}ZKtF 'SNqN?tEv /?M4{Q'B%FE֭[~G<|~-Z'^o_xCcDȰQ1v+,|N[rݻwga:tKcwM@0ް ?5QxXeErUx! qaNy+cFK=yWɎXqxf;g>yxxീgG mU!v2Enttm;#'bpSoxE$ጘ◷m `8I?/:Zìw#V cϙ#\2ʦ-^fm&!T0M蹿fˁk33uv}y#w[ o~aM2|0r~|C,Y}dՃ`/g�}^;2u0BgQXdlrIe}1M{U5rłG={#3hNxzȃikELl,YX:^!7V^Ȳ}-iǶzt'=a?ٜWۏmFd^iI?RpvoP^ U^<KPȱ≺j?IGL늈N4XY^<< ?qy%'';J+GHN}CvrȈ'GaC2>0W!EẎefLX0?'!\|[|r<|.1HŨ~I9]veNL3iA1DȠE{p�6i$ ukSF W}] w.t7xRߺJ@;vRZЂD^C7v C8ěl./F ZPb~P,翇{ap񀸝}WK:0o '0tуm Mxjؾv VGؒ7L];cy|Nmw<ֵl'}mǽe$fVcȨ^|Nuq v aXo#ӋeCn'r{DtL$HįTkq.cי."Vڋ`;UŒLVޙTmq|R(Ѭ T*QhAz zAEiYA"e ܿt|>}>{ڟ\wwq_ 6GgQƂb"(1{rS-[Du]f_؈ khq}LN gTʎg(Dm\4w}_g[߆4oae.$U;CN}88?ws]!\Dl9v0cwi- q}Doyh1^9-t dNY8_/,AEXADf, hxqߣJ]2չPl,O� '\ve>\bq_8аZ-O~dž@*o7$סNK. :ϸl{KtӜ_Cb�HJA2|<>pidG9 '59ENLC> 5nnws bA&n VtAF 84ɵ p+1"m!R{>06qJ$ .b� , Ņ,]e1cyYൺ}bWKBI 'E%nIw#H~NJE�>u=<AIb~c؆5+Va�$iKQ2Q_Ml˪..)`b8<Iv1Y&?XಇmwVh&xpEP>-YR 0އH^߉ĭ-džXgd3߈v<Q! :�B:,j'h[цLf澣9ֵ$nixOQ."&1>Qꔤz::}kKB {6dg m=vAyH2�ARt"P`qؽ{wܹ[6`�o (nEC)MbP~;l&=.4"P3q,vz9`ZVb9mbqm)(Eq~~cTxdC%eV 2+ s\XfEGdK=GV# e+: otqyu2Y0H2N!Mq ȩ3ʣgĎ QFSDܥfN$ (q߮}kC&1}Qa-Fw;Jg5Gyȝ'0HE̡ ҥ$.%pb/}{]ȺoovVĦj]s$EAI2%J;pSܣXN/~nvSVIuh,)E*3Q|wqhwm8U+KERѼ2-8J]6gE^N;llD{_\fwbl{FH&[w V(#m[c"Ѽ::7]٠l=E;1r8a\/9w}p=;?a5ϒRpe1p;ep{'X) YB^.i?ﵜgCp¹)" 4@5jx݆E% @`A>cUؙgi,(7׺uko=.{Ǐ}`-ZXT"/b[zK]K~nnBXd9ne\|0Cvast;d3oVۭxS^ `X!]t~H7sJXHV4<g0+ 6(g?3u7=f7=}T'P9 /Րdb*߱,cB3#և[ُV)s Mg]uSͮw0A%ĝ?XHW"b~!0$6FC0;JsOa^$(\ "+WĪK~:ʭb\M؂7M Q|rOʗ~{_ t5ӿ# ;\ڭ:ί6tiX[]4$m)ܪn1 a[q|E>@_Gܹ|']|XŅPgv13ӟ?]= ĴMP(tuJ+ X!<<#G9d A ¶;]䵍e{Bx aQSXwj-);ܪU0ó3zX qo+-Yo> {{SFS2l ƪ7tM<ٯ. ׷;# ү_?ˍUH~ƒ>h|󍱂)nXpc=5i#HۦM)1}G?(㬫63;1:m"c}{cmg,(Q^,lĜ vI .X-tQP0GkGƾ~;GAXks"'S4M&'`0OEEQeL>X+;nF+d+e7l: :ˊdV!M~ y`9B0񰽴&irqp+O}-JV9mA7vüopmuŸ\*]`"\Ƽy-Sc,j'߲P;Mu^%0ȔOg"3=_՛�#Ԓ;9wS j;@_%" "PZ 렃͙3Pdk9Dz)(Z(X ",l{%nC{+ʗ/]ϊjJ^z/Al1VJj,տK`!(is(1oofB$X2Wݏ`mD8Lv1'( | \Gpn};5 y"N$ JKV\e/Mao+u5hݟ|C>a{SLvcuι;/b4Lc͕Hx+8fcމ}'*kAmON2d7(Sx>.cOP tb.Rwe#\LxnɞQ)bԩc{k֦Njcƌ8 B`nݺ9"UL{C)+Zx2e-]ԻYtӦM營\8`Z~տMr 2[s{o, v,4jKZNy?&0Q8WYr%nq..-w*}+b 駟x]E^{em}^X 59Ҏ82dUZ. EWQ믿|}oCN:mp6�JXAV}.$ğDD@D E <Wo\ @x]8+HY+@a{`=s/] cӕ+^;0$X^r5pŔ@<X<&" " " " " " "w^]|6vX[x͘1nV^+Pf-XXQcqDvOv '_m>?/!?XD B@  }_XnmWDȪ*[6ᬳβYfّG鏭R0`WpŖqϞx :$CI[< KD@D@D@D@D@D@Dp wE?Ν++z5k֬E`[v-YĪUMwp˹y{X@eTD@D@D@D@D@D@D@J�!WZrŝ1cr!1&~@I# XI1WD@D@D@D@D@D@D@D O�.%(i�+i5䉀`y¥" " " " " " " " %`%T^<,OXD@D@D@D@D@D@J/eڵkK\5KJ?rc]Ejժ6o޼ҖD\+,)�+u+ԯ_ߦOnGkZfI'P'2u" " " " " " " X|oxb[n]:4=bRJ%*p Hwf:BD@D@D@D@D@D@D@D(Wʪ@̞= d?Svi'ҥm)Ӓ`ʕ?ܹsmw>_.\h8ԨQ#gz xժU|" �YmKMYfֲe˔FmǏ={LR[nɕ^zvwۮk{?nV5kw}Ga5J7fޡ__֯_)!CZ۶m=+" " " " "JGE.K ٷ~ko֩S':uF1С_9s6{cژ1c6P#" i,-LJ$" " " " " fӦM~za'tmVLkذ7nl]wG5l0^O<Znm(PjѢvi>O/l>xΝ}wu]{{%KVVK=Xnݺykp{ggOG&=o}70r{キ߆XV^s.˖-#/k֬|ȏtC<LwyǗ�gg)KE@D@D@D@D@6evţiaj��@�IDATpq`(Ogs=׎:(CtYgٞ{eᦉ̙3+*Wl4i9=ETmҤIvWo<WmV^Oظq|}񮠻{ܼ'L`7t9Ҏ=Xonϗ-3x 8v( Qy9vWWfMC|-Y>E@D /?/VD@D@D@D@D`&OؽVZ~?ʬ n|<^x?pիoyɐOڵ~>-X]VTu+V]3>lĈM~6_K^v|;0+_|^E2rQ!=qM~߅UZTI5J@:j(7or)ޕN:"R"" y% X^)&K�G[np?DV?+U_@+,ʦ`[aIΜ9X/g~饗+ٱcGb[ou2̘1Zq](͂\r%+5}OD@ H" " " " " "&'=A^!"fm)ϿqD +(1&OX(Ye Dzj+Xz . Qv~{^'L;E@DnH@ӦM‰Z͚5K(\_YnT2#~+XsF>5\ңp"`W'ʕ+ⷅ<;Nj(#>cV }$" "% ( }$pc$n^zh"..}gqU^&"]Xa/lp̡-T 7E\)VB~D^tE^iadysLjŵ?+\"Y<d;vm~5Gd4iq\h;N~b\)SrO" "E�6}2[jMbY߾z\3rW.ϔJ9\ꇿ_UeL [f.ZaKWf ;yKWGSwi~[:pqޒ6YKAG_ʢ?6 [J[ݰI$gm\xײ-p{xǧ-#QGWYkԎ2Q /Za n%s3}?i~KaKogy&\{}5}&ѧK7-<^oaX;9ʖp}~5īj"裏Iw'BCbEZ,+ò I7YGyO[JoƊa!�曍& Oc.Vry׬UVvꩧP…�ϊ;w6;SէKahn xd;vI$wK};_N_`-'MQ~=̴Oww*b;d<Yol:Yq 6HPb&guHߡѶYAMgAuo٥GagSAfA^umwخ+Ip\Egj7+q3cӭy쮌]T\K_L^Ʀ~1}yv}#mUlG:(.}a1}_MmmY!׻:yy;fմw5cr{?4cJ&۽vn]6W\bv4Lg E }c/mrn[JPζtk&Q?~x_r<};cQ.mdӽOR<J}yc'lh޽m9>znMTO$(% \[lF-z2mH@{׿ a_ܬXfoE 0,pMzɹWX/"�FtRr&CO>^&" z'ﰥ?zz֠F%{}^ݡmY!~&\ds)bϿ0<pH'sX?ZzMc }@.غI8KNݳYiiͬSܢׅ^36g$ƔσLɟ.1v1XS4{f6[o�Լ)|ӸوᬖY?$'2ZjJLX~ \g l'4sbToVƾq 9nC{*ۇgST߲BoLyp__桗FNIFNî}k, p'|!;Yj[˯~9Ov~}Q_nTIL^[iޥK4hPScDEv市L+I*JZj$Ò+X 9fAAUmIrk\}ITP??~|a+ks6tnD{it~ík�C]G^gӜbZvQ{ZzUmڜ%vlfe]'`]qmsb.l:U9s1Ȩ,CNu/a={~:4; #׵~-(9uD:"y[sluì?'GQm5Ywntf\k>?Vf:<jqMY#vrף)4Wnz2n [0c[c@uי\;'ݹ7w1ɽLKhdGe@v*6wMN#VOQ7&WW}ѡI}Ygq`$=rPiro IVXu)5o"w}w:(jp3H<kD.yr֕U(om37Ctb闬Np7ѕ۩7㿟ܳ0Ý5^߱ݵBѸH&!mc7{.X-[ڰybYR26[_tձG?f yxbNf9ֆ!Xg1\{l7g%ݷ "LZ<O@Ig6管߹ggu>R [ܳ$;O]À[GT{,Ȼes5Z$kx~^~Ӝ_OPhw}?]Nl޾յ%U*?W7aUge}Y1uűWV[6 ^k-7l>/ʛG5!_f;Ԫh;J{?pen]~9H$%{Ў/~uaW윃lg=[֞s"';{Duxs�]}Y%7aGxx~W^a]hݝbFzK_/}3?^mÜBmbUEөD@D@@XA#^ummrJz?́kSѩVǽԉs~nj:Qxa:U9cB[[:l;߹-k]J z?'ʩ\`:Xnq aS*`ގ+ ((3s]yw].guq$yȧ{h݀| -bKpmtdy|ԏB�WOHۇM1ȸ �zz!MYlA R;ޙd|}ξF0~3|QDϬFrڹ�+Wx%DZMpxG #;of,􊩓o~\ó`Ӝ챑_(bq[uK)jT.r4cotxSg%{R'9YksQ~ /< sx&AN1tp} P^n> ce2W'YpYE$AuQFvoڪ3DZ++Y;,~n6r kX[2c!H~ @)ͽ;&4^|`8ϤKv+L%,WG>:E:z% ׎j㸏hqdbIjUS\[W\YurPgZ?(i.z _$TW{gك#s[bO{|ʷ&rOUߴW{+$mGXMtm=}�7:ՙ"l7+ 2ɭ\#ouyŞ;ߴ'~O� !>w9 (s&\f&3&"˻g\"" " 2"�c`N0rS8a5 Y")Cт=(lW78h]73=R]Hr"(WP|3p? :(b1FGL78*-ñ'췽tو0_xwL43b1Ĩivm9Z:Eo (c0$(Z>r�f7 \A[afb%ÕNـpӻܶ, =\U�Ei5Ga7:+/_ƆMZd[2SR^AYrg`ms̍xQGX]G\񤰤ƹ:\~O#nOGy}>{#9_Uͻ1ed7 X~N9It?,s纷̹vӲpDqNP1h>䷣<c݇4j+ϝ7{nMEeκ7QNE #00"qgyP p~,=VIِ€wRO8{m|S.M归?=?ڻ+?"<=XN8Y!;%6 6o}?AS&#oQ)9><ʘ /*S`9;QE)oTB` $ Jr}wQxNװS-KcL?}L+j$*8Uy9&?Z@q9V%k+;9w#V69$>[M^Ĝε͉v{kkx`)c6`ċb/R?${Dl<?H#c];[1v`!DD@D@6uE�R�<O?^6+>dR+Qeɠc#zkˎ~]�;)b݆:k 9e{kwL#]Bd t|qš Kg>zG :r^,Ϟvʟֻqʠ6p '=A12sν S(~tS tvf-.q!JTJG'0J;).}<e.ںy۳nA0#}!Fp7ǣ�ҤOZ ݔt, ic9 D<k.DONn`솷}~(V;Y uqd!0*J(G>vűV)m94sϣ@W'ڛTlpZ$pߣ\Gu}2$/P~�g1\ oSpoT Jb}`Ɛ_g0e \&.$;Oy<{ԭY5(g?EyRS ڸ.'u-'7ɕ}[$ѳ>\'=Kq^v1,ÄVx+-o~.N\~]K5#1:({2A%z\rBfeH,J3Mxއ{4^pYy}qvjv+j=7XHJ}" " ")X?+īegܬ6ftn%u#0c&f.pABDUÜ Y~Rt<rI#w6(+ E q;9/wgĽ"-jՐ ; .$ Iֈtضy,0@bVVQa�YZ5":AH_A&|2;j'b_lD^\HldzEb]µq%'Q |sS{FN~rQ5e\txWbpcC=q?p_+Q\pm]ᔙX%pǦIfSϪ$/PA~ IYLtmU B,Dl,m||OvLo_W9_?Em!1:~ f6gƿTn!֒wBkR&RqVXa3)]ab)JСMKmY*E+'Qw7^0/UgKLL?؉;z\d>=S99 qҰ`/$t!+OsH%{Q'" " LH`q5 aQɖeFAA\\.=jp\/#dJx#&AȉMx^5n=!vŮ.yy;'8k dl{R S{);Ky2mtEPOe zEmQ& \_CNE- b yF?_C\1,ɨP4|奎 օAvrY~.pBvq`V߰p@P &(ɿJg05mHAS4tmp*=S J&,TeUFy#.) t8 tX-<?0X<VB,b(/v}].1ȗnr H~ճb&g-%3y2 ٺ;?nB XKK bPKTm 7)u"*m@[P"N@;Vi-h yoMt=k∱.jr{k/NIF'^fB'e|Xl$ML<#}E @Lņ]`%p$G*Ǐ{,hfA@nr/ӑUrv@B[̛< NgƮsV!681.> z ' Hcok?@@'/zX 6͊Z>=[F80j5F�g8كGI$<7@V/-4FAnu�RwX1cL 2~œxu!/Vbr@Vym'3s r_|g@0P.Kgu2\8GOVܬʜ{Tttfd?w"UW-fwNx$*܏g|ܢ ō+^ʪWx.JKTTlh{v(z\A,Fw/C*5mpgeJ[궏3(~9O&w1r95Kr(Jsv5H6. XpgkS.L GPnd܉ hxi'yg$,TPNy N/Y{M3AF;ŪmLq92}a;ߝ' Yq:K?\~Y:;gQo;Ʌ`W(!/G٫wt1BC s70z8O†tq}**f<_TpYTeY1ঈEXNM X =o:縕 ƎlX*S7؈=8.| A@aAPݵWXA7+E$R;2cx4 gRZez ΀ e B.MsOp=B\!\}@Q) MS$fE9opKVCIe`G(@_.z ;P (srym'8? Aj?7{A=!XtH1nwhaBX \<UD}EI<r8Ew/uŇX3,m/KdlBCR~j{@,& 9hP^VocM$?tpd6$1`zmiͭ +| @Tm\컑~ڔێs{K\?w H/|rvx\b*JmBLU^NTw2~neMVde kX8%>[*T!2io:q_&YՏsE$LFrnvH\[?quD㧆}Y{Díɺhߊ;$xEwdq|3q hrLWwX73֥ yźLp^f9f"qE^ z `[(^'}؄�yŒ+ J9k8{ ng # bAȵWlxܢ|\玦s/pcMcNxVrY q2w8qq~Ye2qRSdlbϓƴCsճ_y6#5$yJC p%zƥc{{%j/CORC}\=14CQXE~^W>Vr. Ilw^ˡLXro NԆ}1&ny-cG<p 鴋>( ZH|1sW- JEyCp]ZQ4EMn(ܯLGTG>1[!m ~~&t~Z)?מn<Y hS8=RIv\쾍i{ֳȵ^O;?F^xS`8$[-6.^$Nomɖ ۑNy 呬+?Ɩ;?7WRGwрzyt-" " "@DןK6AUXB\\5bb:@I#PbIcnZ~]}{Jg(J dI-"Yh/Ig�[BD@D@D@D@D@D@D@D@J!)JaD@D@D@D@D@D@D@D@l= }(�+KXO@ ,MD@D@D@D@D@D@D@DV.ID@D@D@D@D@D@D@D`=)ֳ7RH@ RX$�[BD@D@D@D@D@D@D@D@J!rtI" " " " " " ̞= d?SJ";uŶvۤig̘aժU*UlnŊxb[2in[mU\9@(B]@10`5kZlG[Ϟ={ュGvgo>/&LLСCԩy6g{sΉˤr," "t@+Bt,Œ]tƍ;H$#+˂ '˗gDT( RU)" " " " "I=g޻worqxۖ,Y⿷nN<D{衇lݺu҇k׮~اkѢwy6eʔ[ozݺu~k׮qᄈaÆٕW^鷟 /(M�+Mk(V(&M@L1Jrk;{EW}ZP=^oqv7zkΝ;{%Qf]s5֠A̙vg}f(P=c6qD?hX~կ_Zj巵i5j6Rdmr;ZpWF3+Pj}+[jUTg^uQGyEYJI۱cG]vNc;qɐYf1l )" V,Uթ&Bi M4+DXv7oz ӧO_;찰P~au$8V^m~ovSD@6I�$]-" " " " "P;8m͚5 *XyթSO?tr-smwsmX\2g[ٲwsld V.YD@D@D@D@Dh~F0|γ$ OsU\g?J5jvm[,G</vmL" " IHv@<}v+UVAofcuZj$zwc|.r-B [_~Vvm螘`(̮\i7GrYBj͛7ؘ|td2)2vT6$0d/* Yqȑ9Gڷo뢋.O>sPiӦ9i6 qv}w_>+66/'" J?N2p*Yfֲe˔~ֳgϔi 2e +,bzb-_OVE@D@l= }(efϞm .tb((]�+]!{ܘ)" " " " " " " " %@+{M̖Zݚu׮_–:WKogę5YƦt}3cabVmp%l+^c3,yr c_M_hDzOtL8Gk\=QɔmsVlPXs pI%ӹ?sϓrS8Z,-gٛ_fco']Yru{ KS?WG^oA>OKD@D@D@D@D@D @+;PIʲ)>yb1J� o}`ys;߇̌&O&׿mȵ~쮱+b7 _q;Xn:v ;6uOlslm@D}4wiف7k~Y\+k`ﹶ9x9uE?c˴ؿsP}Gpub7y߬]IZӼ8vz^Wۜ4ڟ� Di)" " " " " B\f&X<=GkP=>ض"|<'vACvzնy/gXmgїە6 f) ?}ޘ`OkV'{uֺQ{?X2fu]Z7Opً^mb2x%Ls}{Bӥcv;5e\1mߛ>}[6a5"a79qڰ+YR@UXmę~{.HE@D@D@D@D@D kdj'1?/lemnN:6>aD8ko=^9u?lW[oꥯl~|8gӭyN倆6Yaפ} bڣ=`sf7HhNI8~7p]x]|Vz%ç+fgvڍ'm[oYa,BS8vmC4ÿm9)Jfͽb{vo"F9v/pj>7*{ o ,5nvu1f|lǚvs}m۪[_R'ᘢ~zòS, i qn9/je?;3(YYaS+Βp52|/۫^U)75Yp}1=nͳ]t^7[dܳ-]= mc7+o,q칭WWɮۡfٽN\[bZ{ Ga>az(ݧ?x >-uJ;;7lgnӝTvio|}ףmж&[]ݣu̞9yvĦ6%6RGn}\9pэ}cݻvUo&LED@D@D@D@D@(<8'DsS.V)u fG'W?5ڎ^Yp7`AֻxE-2 bu$"J+w>ʪjUSh`坕[w&v;um,j> |2oxGV `owx(|SG>5O`;lY!IVu \s -[n;>r)gO:6yC:,RD{w8_=(PŋYnD.-\- Ns=)s܈unub{}ljŒ >p EF]"nd=+:e)N own}Ah7,^~n6ĹE>lGNyyԶ~6sY'feix/zf5(z5u"W<g=9&[7gV֙\q Qf<wnE,(cT<33sIThP+:9G7qSڎ2Y󜥯DD@D@D@D@D@B,2y܃|NٿaeJU{(r!<w:C+g}q|Y-t>~f( 9ng9)PX` s lhwǰ DXaysܢB`Lys <cijeQ{o;WȂ/9 )(]5Qy)˶}üOTu)=E(r-'7.lX,F\uP F>Y`b]qg`E<?^}e-ѶYVt\+UQ`񇠬¢Sr/xÝ{fuZ s)^QK/ule 9{Ew $@n9yUޠq.(jWh8v3Vm\Kh^sC'ȀlnSdnضqmݽt1κvhGeܯ^( iT(!L2y֟6 VuK9y9N!?,yxSl(+w{b{ ;5Y~j'EYƟfYۼ\"pfXus_lkgNXszzOέs#q-6,s._O9gHqq/>OAP`ר,Udl`k`>.]54g8hAxv֊XA_l]:%TV|Z :Y&_|c:5o+ ]Šl3#`,�uA,z?oey25!+f5,99w})j;E;YpLIJXY;$jkmUʯL{TlE�cP@&\qa¾DĮBt&ˌho{ҠfVLY;`5Dp]<d RVY볫QU>;Ԫl r .vSTAVms%{_լ L;,}k,?Rjgqp; α0*(ʢ5M.yJ\?w")(9wX 2x! ւQWSjcʀn&.X6snkdl8Ny%H JTng ]wls~j m` @Ճv{08\ww#%"%{XqfDGW'" " " " "Q1¥� À6) Ц#Ԭd B!,{8.%ڂrt>f;HXGp1*H!8iޢ(dխe.NEA|P`1dsC qAFŰIM\Oy4efP,{0.\DA⣱{6Lma!\XAAK^J:1(BDPu = n\l\ vS$+HMvp< ً1 Xu?pHOXع]pO9|l{l՛}*LO:s6c PDClS]se]Ju3ΕbuU!Yuy`s9@:(M F!!aY](J"F:f ٴy>4k;읗5mۆ 6E bE�)p'P(" @wD{q/N;Zvy}" 2嫌8m6߾@y  ~]m *MWeǵs\8,u`9_J)rGI[ct!];ӝb2Pth@g8^>yk#+^#]n!,,+9KT2E||lԭYHߟm5폥~Їݪce+s#K+BL#�k_z Zxg⚱6i?ڴ_z]RV`eA!br \`uā@a>:JgɑjgLEW0Wjem,Sb%r~xyXA Bp 2_ucX YXlJA/Vxq6wPQi7H~i~Vx# [ߞ %S3@%Xcm\+X�b&lq9C 8 S-;ά|/8԰Tb['c{` ;:kQ$ K(;?o~:`, .|-׾?a;Yu KK;?C܊ݳ㼱i<)0`7'" $EbVa3õgogډU8% ^nk@s'J,v:^p`J*{[E<$" " " " " ".2.vNIr5ħzCXz$*vҹY@* !T4}sq]pgPq;ˍmfW8HFǽ.5&&jĔ 5J:LN$l](8caH}sz8uO/t>?[BwA _Ǧ{/fJ��@�IDATʮnjyr q6nr.(}JUHD@D@D@D@D@D@D@D 8dKD@D@D@D@D@D@D@D@`_*@!*k' XׁJ " " " " " " " "P�+DZD@D@D@D@D@D@D@D HVu") (~R" " " " " " " " H@ BE@D@D@D@D@D@D@D@`_*@!*k' XׁJ " " " " " " " "P�+DZD@D@D@D@D@D@D@D HVu") (~R" " " " " " " " H@ BE@D@D@D@D@D@D@D@`_*@!*k' XׁJ " " " " " " " "P�+DZD@D@D@D@D@D@D@D HVu") (~R" " " " " " " " H@ BE@D@D@D@D@D@D@D@`_*@!*k'P.Uϟ*@YfsI)" " " " " " " " %\ Kp" " " " " " " "  HR`RSE@D@D@D@D@D@D@D@R,5#(�+& XjFJ!" " " " " " " "P HV+OEHM@ ԌBD@D@D@D@D@D@D@DW." " " " " " " "`)@ & X <]D@D@D@D@D@D@D@D 5)R3R L@ \y*@jRf" " " " " " " " %`%Tt�KH)D@D@D@D@D@D@D@D@J0)Jp" " " " " " " "  HR`RSE@D@D@D@D@D@D@D@R(:IR\,X`˗/'hpʔ)c*U5jXŊDD@D@D@(RB5{l1)W[.iaSD@D@D@D@!PlY[f-\жf)ҁ4" " " (T{)6L." " " L%}իۂ 8we'" " "P 0,$" " " " "Pk._0V" " " @)\v,J͢KL#%BilBSmDYt8) 2$ReRm," " " " " " " " N@ G E@D@D@D@D@D@D@D@2`T*@*C(z~5O9caU {'쯿Y_E@D@D 9)^Hjzi/D~8l bfJ+mD-^{V\$/e9(_n޽}Wz<" " :28) d?vmW+OPVLb%r?0vX+_|ETٲeB )ϋeՑG2m'NN:٧~j5kRD&۾~ٕW^i;wNLD@D@D`��6@[^z%+|I =X<xqj w5kXRUVv7r駟K.1@;v>̧8q; :nmֶ̙m[榛nQau{>sswqwy>I'd^{-Ժ |vj/OǿiӦ|G^uܹss҄/O|r{UV0'm0ݻK/ԗ?53n==z>'C}(JNnj3JlE" " " " %�?Î9CQo$+v}w;=s9^{y-[+8kӧO7AȜ9srG8}QjԨ:.]+P]tEva.gumv۾3ydkǢL:hPZ{2e{oo^Iuꩧ7n\.%OժU+WQ+W_n(.r0a+V<,;:tPoveYÆ /e駟ק@) P\g#F~YӦM^/[fԩcNSNʕ+{3Un/pmtv[m-u;(k˘… {쑖:,XWV-'?}(z(ڵkg[mWN~xbן C;׽kGqF(,P,6lm~?}o?[2E+(Pn!(pSO=^djԨmfvom~viv=Ȑ(,*VhXi'@Ik odzT'ʍ5؋/ca4o[(u~۞{-p RWuQ E"nʔ)." "P xXP~1K0s]wyDuQ1{l?R 3Fp 9|7~所Qa6-QQC x4f񘋿+p^\s?_8/,f7n=ET`.(/Å(kt钰PCp;ȑ#w\c /hтBG5S(ڴiCqgo$VAPay 5W(]}qҤIO+LHAֳ>~& Cy`" /dmQ;찃w;OD@DT= R.)VE9/¬ZJ_y=2f+b$᭷2L15s')W `jl L"" " " "B@*ߡCõ GQLPa"RBR˪L[ [nr\o+*l_}e<LW(oSh_ e}f!ϐf7m-OI`ۦ]_</2 ΋0{t!xHc B--ʋ A7anπWX'gɊEU={|˜ K/̰,˘] (prcJu ʱKÇ3b)D  x vɟIf0RDb$D;o>&DP&5  b2Sd]vIaЗ#}Sax-G i?c.?vXpϋ^xR-gR^ux5T;78]T݉!+DoE'+f~&f6A9}^D  0^ LLCt>1 G$.LTt<PD!tej1 ʥum]f:0C[%$Fsj5#)ߏ=pN\<QX4V&BileX}k = >z;Y</>8m�eDD@D@D@6U%@-1id)J)_I#Ϸ'x1$M$'fx%-byQ6Iz|LC莨?I9VX;882;ut~o> P~jpEnT:HD@Dx 0Yoc7ELE`էOiؘB/eFF8 ':3xƓY;2B) dz/!?qPjar'D oPD6 6t6 ⡈|,K͌c15kV';,q.:a ׼>)" " " |!QO�~}h\X#`)E?0{衇|W_}|0'-/XZU@^yw@[- @ߘ>jHK?2 ~m GIw3<pMM3sf-6obSD@Dd((:x1A FLo ʯ*L؞쓙h2#QH@Ëk׮~)xIb Y5^ V!/k(AyQf (6cu,|I#,~+=3}e0C*eV`)ǂ`rϒ(:l9į@ F~LY=&/- \ WZS<5k,GC8 yOXqW4 . F2a(&r[/h,>:[d ;3ZpdAC3gR C ;V#EPC)P1kww4A-C"FQ|!6N#NY< ]v_pxDO>  +ݻ;�;EQ#qj'()8)Dr Bd%!PX/1C" " .Vd5fb67cv0O'ȋ6VNFEbaEǁ:+*̪gvP /b,fc.@b ΌeTӜ1,X>t1>hov=C!WaL0rR"" " " "P4#\J*ۡDD@D@D 5VQxJrq0aw)$>%+Б` %&)C,/(PL}W~FtEW #p-$>.A8'Y(p}d`:o#1 T3\(8/EQmR#iX%'%OrXqݔcDID@D@D@D@ �}8U0ʤ$($" " "  d||.!(bBW/ܹ_K.go'`|L>lOm`EaVA4lѣGN}" (!<Q\Ӌ�)AH)4b|!#ۯj_+8b*Y}^MлufW^yeN Վ;z0dk9�j� !!PKh{WPDAł*( "Q>HJ*Z!ty! ?̜23>9PyQ O'O &3%Y:JByaZ 4RQiJ~-Q%Afbsr_2J}ؒb|QfZZ2J~jX\TCruHp8;;[2 R�(@l$ي(@ P*�ό�(@ P)�K)} P�R `)/�(@ P�(@ PD0Kؖ�(@ P�(@ P 0�>2^0(@ P�(@ P% YŶ�(@ P�(@ PN|)@ P�(@ P�,`�-�(@ P�(@ Pw 廏L P�(@ P�(`�`h-(@ P�(@ P@`�,}d` P�(@ P�(@K�Dm)@ P�(@ P��`#S�(@ P�(@ X"�%ZlK P�(@ P�(�w/�(@ P�(@ PB4J+WdP�(@ P�(@ P [r<�-j IId.n5*뮷bPaƍо};Ǹ| <=ZaQkgjǾN*] ]mj&;.;q񈋌DgTuY=pefEg2qf}4s-EBL ]vow$%&?YP?NvQ�(@ZFR�(( x�6]];{k*P�wvz*{OLLR?^=F\p0ݍ/>+W} ١ yv;HJWQoHÐ=h^;n%qyF}XKWA#(//"Vnz~?v BP7nCP<A+nQWsŽQҷ닂EBCƎP_Kl()oBuo rlUߊOA9y|h(p81"q7>�(@&PTw3�f1;P�9*HFpa[[ѥz%o\ >jXĨLY$5{-+ WXS=QD}4խ3ʵmxGZPH 5'qǟ ƅƅK[5^xN<k/OC͛H;?|(1*Wpvŋ#!<\ S- TP_k 6, ' H*T *=7M 'gm*ռ:|GD@ t\(߾-qF Rn�(@ <Tz<9(@ PV') Zv]&'1sa|jz:.%66Vl,=Ĭ|SU%b_ލW3Kc9Oj8yU@lMH}kPx5kQ(Z_qEbP= KW`%FE*�VדX)jZ&vZΕ+;uثga'O麤hS%kTq#.wo#Eܵ7`[:9ZYhx}%Xj(@ PE wr?իW/G.dǎBٲYKqmV PKʒ5:# �-[Lk(@ P Wr<�V@-ARHaDYH5]ڢ>Z~=A(UX\N e%�~T 2٤s9.Aݏ ٧>߆qPi�NU^bIw&3nJ8Gū\SMbv2m Q5k *P-TXe,5]1$5NGE"YUC/LuORB P@qnݺ8 _{#bN͛>}d)�~+VDΝr{T ~͞=GSRyU `6*B!,<U3KTSJ婢Kn}\^Y9Xe%DQ>#ǥ>U VRW=۷կ~8:eZo$<�FgSOW_ʎখ$J}9vB%TɚM1t$/h xZU2 ٫iI*V]-5 /ƌ[UIhӦل�(@HFFJUlӦM۷o,|'\Ã{O^h8lG PmY%&;�z{!VX~q7ٻ_%Psv o *H|J?.F2J`yu\SթJy<Ay9U员KjT}{F0\WCYҺPsG}N-ьV|WFu` ך$5uY%K4%Yk٧;e收m= ))ќlC P@6 Жlw8 |=X`;;ܕ+W0w\9sS[ha?A޽{šCPE}Zfo!>_#L_ETC @fI^ƍ\ZE~۲e .T2tҩΙ3V1bt_E7N8///=۩m۶˗1uT=e舏>FB=U3ԩ`ѢEسgJ>,6l:Dm֬w`wV'Zj._GÚ}?s;wN_o~PY兕/d޽{,7xCgժUMǎѫW/c{Y rيܟ')F떱%es=?mO P+I-{}`OZGMӉz^P#<`'zq?- uTjQ[ zɓnUrcn`j.|^zQ?qg%l|~�ʶk>ϐ(~n/{eއa<S3Y(@ P~~~:(ӴiS̒@TzEe2J|=rHԭ[3gu H`K<Y\BGӴeVM3f Zvލk&k�SϞ=}v=n⏌?\^DN4 D%U&MP\=_A+ }wD:OSƩAAA? �=H駟!4"/2>rW�W_逝{1oذaJ_qG嵽z*$(A+޵k^X[咕s9$0%E Hp]xܸqXeŋC>oC BxAOٗkIu`,CNY(@ P r|XBgxַ:z͈(.vGN*= yW|y,TgORQ@=k'mڪ_ZMm~l]%tx̹znۄ(Nj[p/;j<& ~da%D'LH(@ P@djԨF ,>v5k/ СCu^0$" iF7?}4.\ВeR$`?VN@ezaF\k״\r_: r}�VYm"y } Ǟz)}nٿt钞5x`R~?~<_9ik`?g{+<d:tj$%A6.)ޘ2e1{=+V2HZ*dHp7}dƖ7z}||tm͛7C"3֯_ɿ)~M P+`0a*f1`M-c SN{JZ:~ziI{/w_z,϶�(@ <zM?>3:0")2}@^fRI�Gf$IK'<KH00?6zxxJG,u4X5t̺2 ɬ'Y))K$cZSL %e(2jZRi:{KF,aG"3> SdYȵI咆"3东SEiR,drIi'd[hhYeRB& ކ2\U^HG`:RvܩʶCH]j6P@Xu�,g85 +kE(@ P, yHn'y I!C@+Kf<f!ƐwYgI1 FIB}7 qò?d8qf@c P71˲HCI+W!ehc$ezͲ-y 4CfI/i+\\\t~/s[z]876$g\> PYr֗S�(@ Xm.Ɂe(`}ĉ:U2e d$`2 H8A,q $?W/eMPd٠a7+r cJR(2CKvH}Y)k5k&3$?,딲rJt԰/*H>0 v2Nf44,U%&~2ͰA})@ P cW�(@ PHO@EO!e, Y=;vH֭[:<0,,L3RuDC I*r>ӡ$؊+tMHʶmsdI$w2M)T{[kvA>�$"OcpJJ^zI_u#$Yv$$rn z<0 e|_dPi+<uS=Z/`؄ t}O P.`n(@ P�Q%EԙYFתU+lܸQ3]XT)|<V0uzikXgtMe$ ƽ[0mc[n:!ٳ*YZ8h TR$wi' %<R˓)d:wjǴvv`I\/O;v3ulsOb򰁟~I'i%%?^x7;y nlǴ$ؗl~n!'|ҤM闆Ɛ_fI.92#p�*`'esFdXU;fV[7id3;x𐚮]~@ P�1<Yϒ{O3 JXa᐀NzKM>(y$䜒YE)5\,!Ii3=&:e\n~|TrnK<`i1Ei(*.LS@6Y|rkh Y+/ m n;(@ d�ge%G�(@ P)gtar-MgtKܓHJ fe4~z ftnQxT�OڶpTAʗCо('._M5LKjpQ]o[۟ ^y?�(@ PTz2 S>s*gf-(@ X*`I'm !_z] 'ߵ_߫/.Z{׈ubo8T^k<L R5p?5mω r|�(@ ///h"\_$k,�(r؛-}ѯaM{eqƓ䃍 ȫWjnϲ@ƱTn)go!1.^o(@ P�(@ P X0<tq,9AMg=GX޲{bI8 @%5sw]MGU2K<p>Booʴn1FF\ۣ<Av`wC`suzn9j;(@ P�(@ PH&`3Lpk@ .Ojv¥iǎz 9%)1 >�}p)H`׮wCD:*t V|)m_zOOwA8x>٥dtΐ'PwϬ<-] @b5 jSDbs&=~V ]w(@ P�(@ PsUD1;2J<m.ߵq; ݻ"A=*[fV%Dagt�̴o(ץPgȫz;+zdF=!\dutfjܢ*x<i=!!{d_Q%(wI˪A(@ P�(@ PV#`w+_m5XNș *T*yj\dq٢Sʨ7]lze}CÏ?Dag'.�ŕҰ@z6Y"EtE ]ĥ(Z$njO)>eܠ�(@ P�(@ P�OAT#uP6V%%$W㉟J>HJLĥu`s9 uv߆k효@6jIdb|qtm!~1f9M0ݶssӻMgq�(@ P�(@ $i!!m ZmnwMpefD\aLQ/ 3_`x."*롰SqGFeC.ye&=RFD% 9S7/ۮ>9KK' ꙶ6(@ P�(@ PF]WЯὄǜ%WzuAS]%A}ط?`g%eT~-u\JtP *UCJ3Ae[]˚IV';#Af,Ӵq[m59yWEOBU/_'x3m P�(@ P�M:l4a㝍柡&M1cF[|Uz_ˎIgOꢮ߀$`VvΙ9dYԵ(dod֜�(@ q???zz;` P�^sY7(Ke)dZEyMꁎeteʖɬ)@ P�(@ Pxv #)@ P�(@ P�`�(@ P�(@ P�Z0xys�(@ P�(@ P +~cP�(@ P�(@l`�,(9(@ P�(@ P@^`�,/~*& P�(@ P�(@l�XRp+2:۰rs;ѱ8z虛(@ P�(@ P Xm�l}((7h<u6>ubʔ W͋�(@ P�(@ PyM*`D`ҍ> -*{e}SP!ȋ�(@ P�(@ P2�v1Vi^ D ebo P�(@ P�(@|'`S/6UנSaA߱) x_G �(@ PV'pA([ҭmذ FVԟ(@ PX*`66@_x㏵8p:&$UrK�(@ P  /&�@)Tlٲz5kĒ%Kߪ 9f9�sNuj{ԫW/9x�(@*`_wW~-ɒH P�(@ d?A7wF��#;2KʢEPV+̙3ʕc�( P@r\x:;n/}'wks!lܸaaap; P�(?76�\]-| |PUti~ڴi1cޖ ِ!Cf͚GZ ;w裏pU瞃0~:tɓ'S] :m|}}駟q ,X_|Rׯ_?=zPݻcٲe0` ￯^qJ||<z[nm;(@ P 2�&y.csǼ}her8N՗˩Sp\ P�(@slբ DD#U7n耒Tcݺu:;m۶X|9krĉ:gqz-R >ge̵kb6lz)̟?mWZ &/O#8p $%% �cƌAoҥ 0~x/^r_|Wtm͚5:X+�(r d2۩)_(;[UU~md�(@ PxxowA/ez Nvoh(A& pU~W5w= =z ZhgvI}zc۷oǦMФI=K`UTM+VuYcbRuI&J1"A7vE-:u>$ٜ1�(@ 䦀UTp3" r4[ոq۷-[L5^dd$v؁>}j�(@ PyN@WE5^W%ۦ2̶KLfb5jȴKۥJ/CÆ ʕ+zWbYn)т14GժUe˖8%%0LfIpLԶnݪ#""3g e�(@ 䶀zd~ ~ɵݻG,KYσ�(@ PyS@fQ3+]Zyf,^XfϞgyI女7ilkkk?&S0canwnT"3Lz|�(@ 䆀UraC$%%>S�(@ PA 44T$'$a,'|w \ެY>gee,L1IߪU+=$enn֓7+6C PO*?<N�(@ P/ |I^x)+V8JrwrÃt٢W"9$!#G $~VkӦ ƍ={5j;fHձُ�(U*~�(@ PPFHqô >wK(9b݋3g2O<DpJYӴ$YZco߾ݻ6g-uSLO={ĉ' 9 (@ P lTɉʰ�;'cN4Y=*ztN^y˗HaϞ=ҭc(@ P Hvީ0_.Yh[p[ ,~ 3 ʞL)r2˜g_,;P�,ȞYpB6@~hԪqKTx�(@ 䔀$Op. /0\.\b�(@ <l'KU P�(@ P�(:XBbnFDO!F\knGo-[x7.E+ٍ ]wtmvD^ۏ035zfy%b6.�(@ P�(@ P 6�6ynxcE͉pv)fȗ<G�\X~{!'Na˯[oi^}qqm׈uCȡشa<?n;VP�(@ P�(w2�v6M��@�IDAT8cVlO֗P3-ِw+ =u7L5@s .S<ҽVP�(@ P�(2�x�j*6Uվ(^~V8ػyK? Wp[?JհMG;l5?s-zc'v{WDžcǐߟď?Au>ݣɸ&|x/ҦxBLpι̺kg~[Y~('5ܺe+׺g/=oÌ/lܹuG}Aw)jẉ�(@ P�(@/`0 N̽WP>Ves˵v-4v wQҡQߡpR{?Hȹ} fEV-}Jl:7vA@a`peV]y^*XWld͙{+YUHou'A=Zy)<- Z5n/(ռޖ"&OjTx菛>u}~Ll(ӦcGb'*8z(l'^(Zujg֔�(@ P�(@ !| d0`JLۼ==զ<,:6ѧ)>ސOOT'U:#½QC:8`EDbŌ*?u%} 6mVk).e۵eZ2ոs\,.5 \E^ }qrL4p, }O#Q}p襃ar}H�/9m Dkzܳ8 J] wooo|tevZ<pswüE3kz P�(@ P�U�swW{ar<U^0>?إ8Up\Y8l2[$ۗQ*hR.~?R~s5ܻ_ pI q~8^=@|YvҰTfƱt#s(je+j g90tPt:8͚5ϿDA|s8(@ P�(@ PyP*gsUKל<'op?CJ".]F=#KnxpqdAђ%!%C,kKp~o}R)XͦO1Mk2Tu܉ gt szv�yV �hHc]_~)Su1hxhԪ1(_fƽQsQ�(@ P�(r8w 8}] 6mA3nhջ,OVfEb_ /#h^\/<=fv}:M(ݢ+߭ WŵmL0IbaJc6\kԹ$XRbbf3=gʃvI-ݔ$NUxJuL'<]aڴif|a,�(@ P�(@ v.8TWÄn-ϧbƕ B$OUԬEoz%,ܻ*>̩je|/+K95^=7FH+ݼj8ϱpG?cHJ)ϟ=9s((K֯L3cMz� N3h* P�(@ P�M*9q12J4~/VN#1L+(QE g4G&M1cFgm:ū| E\]Pe}#Ok`5*#%nn\GQWd Stϩ}E F.˗K #U2;tzhPlָzӧ�(@GBϢP!7Yq0)@ PnVH%J"}<tGi ,ZvV'>:+VUKjz"cnb꩓vnFZ~*1ܾ�(@ P�(@ 6�fCi.AgEWziu<Xv3%.;8uS�(@ P�9G.k58ۯZݳP�(@ P�(@k`�?USwoA)@ P�(@ PYr<_c`�(@ P�(@`�,'u96(@ P ĩRGHHHQ�rZ`(Us.6`9)rGR ..)@ P"0cOiv<4?P�(@|+/h�@1Տr14m;"/ ڷagҼpqKV[&;fM;!ǎc hl h޼E(@ Pț2(@ P Ksz6u %֊cgt\ gC}NE2k\ KVo;{Ձ-]#FynorBSBN–_OA\X~$wOؽx|Qܯsb8<io1td&66_~%s_vD P�(@ P@m�L_Ɠd%nO|ڽ%'zC#~~243=z<ýQwCcz4n?l,rEZ:_˝;w7h �(@ P�(`6�֬'FowA{y}(`W 3nG=Z!St"lP?h>˯fk k{®ᣍ aoGzuQ]-6gtYq,y׬۲s޸l Y͵=z1|2;,."B7a؏Qs}fE]Rw)Ow?** uCNm^"X(@ P�(@ P;6 }C0|Fڬ0Gžh¥f }+ǎj*_xG(lf_O9}8ǰ3 ~G֭zM{Si٩NW 1Z&'fDԵkhx''n_j>IF3Ke&X徽i:`a ƍEիpO`{߰o\۾u^UN-o E6`^- x<<G2^~=Plٌ�(@ P�(@\ȷB"T֜<ׂ[}u�,,޲J<m]eC@*ʖcE/4*Uq?O$0zM +F U(9pE|ddI꯽ wdCxի$Wɻj5Gt2mZåV (m7/Pv (^.<d^y [ON79eH"(ܲw^ .^`±(@ P�(@ P Ȍ|\0z *H#ɮHFXKɂ_\f5W3Ϋ% ^YW ev(W{ҳČՆ<qa\ٰ jylՌ+)m g;啲RfyI ̜b:t( dNsݦVZ?QfMS Y(@ P�(@ P[V9AQxWF Ztqg䭏)o\M4/D?Jvg8du66HLLbۃuHN09$X]rKi.0YFy4ҳ~7_S*&5mcW-Zmڴ1=4i?GupM5L;`# P�a(@ P.|=bH.|_Ro߁Ki]AWpqBL\<z�]kTu7ԓ/IpRE/7L9ʵvMص2;KL,.jcu1C^6)KKk{sj/S'~7Z7vFؙ�GGGknxپKC]Hܓ�(@ # ๪ʏpElڴ)ǾWm P@^30~N=8)%ӳRIgqG`#`1tN{Ϟp`JV/Oh K֯L3#ͰU{$>꥓j":=+ee۵1>=]'W1 <\x¢r|-Y6m2ӧO+ð(@ PDZxb[nӧ+z̚5 >>>&5FNYM Pu$Ur2wN o֘j DzN2kP3M4cƌ6foÖo@(ꚭWuz[9'\b|Bsm^ye~tk׮IY} P�2`|,-~!8x,='O<?r&M;C(QwyQp >SLɑ'Lx-(@ P@N8aS-K 3BjF~ev]VWfMI*_d_#K/+3aiP,�(@ <"˖-Cz0p@S|uo7^8_Ƅ rI9f9R,R$5l0}YVꀚ7ۺ.3n8,\xoUEzS�UϟŋG2e)@ PQ JL7__T3֪U\%Տx2g4j}5@+V*Ym!wUTCXPPUnV)ҥK}di>3\�lŊ3<c�(@9P�(@ XavWR̺{[m%p%W^y%Ӿ111X~= vThn2g}K[[[c7(@ P$�5} P�(@<- )+V46\ޖvvviml/)k6VK~}Y.)e鐄3gD"E1�(@ X�@Zѧ* Y(@ P�򮀃$]•+WҼHY"iD`vT~یiD0()qsso?�(@kz׼/ P�(@ <$իcݺuz%l߾ODѴt3 ]~DKKZv-BCC e�ۿ87(@ P&�} P�(@<-Я_?^8p@'ߴi~G4iIӻ 68~fh/K-%y?EΘ1-aQOa-[7,4w P0�f-Gȱu%L�{{˸6=H͛e+=ؠ89});Nd�ˡsg4;QweEE\|޾~ۼ\"�(@ 䨀{=} #GĬYСCc.s.@ᇇcɘ8q":uꤻIPK[.Ne~!Jt/D:')z�(@ X";'G�|.p%:x:&m؍ENcnѿQ-c]nlL4cƌT׷Ã4$Gfm}4وvkCG`n<Sfޱ0 2׬!عS>z'$b.1sV ߬g.6./OߊCiW{6_ oۙҶ|^</G>^-'D Px~~~껣Wooo=!N<5kfyIh/K=<<`Xh`^fu_/^ S�*pĉojfͷ3V;~sF}O}qQh0WCHH̑_fVU8_ qVu_܌;Z9�Y6g-L%d[ P�\@ReʔI7xeKR__2Gm(@ Pm�YEO\j$dW?} 3tfy0o ŪN }[ñǿ=KvMv~2}lu7n<Qks-1MPDt[PL\B36dipҥLZ_Sh<t)lD7,[h4d|OLS7Ϩ]~Ɏuu{Cj|>f/{h;f%ٍR/3ՆK؉T= (@ P�(@ P yiWNybT3z|,~bm:)Xlh7zӸf3=| -7¶7|(dg#SUht,ޅ[(ߵ Jl?|p] Ϳyi=zTO75 >*e.zmXqg4Zo81Bcuk;-PTq8+lG=qsc3uQlq n[|8]c##jYjuۦ s?`  r-x]Uݿfh?:mf P�(@ P�R �X[(ݲ[_lؗ).9/NJ^rX7xJ*xU}[Ц ϡL(ӺNn?\-p~E.7l`*w8xzJ>zψ!O*2II~5lj2+Y(z62,Y fVT9)n3ݘпiQ.Z.vSS'T@U:]tnAjgUN]P7zFܠ�(@ P�(@ P@ 0�&23?Uc>O6!2µVM<u ."BpefEK&N߾}3ogaIW:WÔAM`2ڶuX|zK-Q #bN'U�Pjy 4"u�Pw P�rW-Yy6 P�"�XV>ȔO'Gebbٱ}&stEA^Q/PvޭԪUlK:y_l=l=v Oڄ*8ɟC_i-Hscwfr<m\x\22kz P�(@ P $\ åp޾ ԍH\Pw L |L@rvLK$7&Rع|.zbE ~~rD]5kU>`_F֪ܻ.K }g 2]vիW3jfvkwO*IYG"P V쾀 fÒ_aX'wKʒ%KСCG,^ؒnlK P�(@ P:|=k z;+ VcՉz{̊-׾waR>ܰLw''7ʬ&_|jJ\TP+eQ%nC}t|iG1dV`ؔ/PE3~F=;~]#W7.kecl1so n>\ڂ9Z9@5I쯔} |=u>1yz$ڰLvvBCsss˨(@ P�(@ PV/`JNܥ 9&MƘ1-ăW%JyY9i?M1]V,KjIXSOw@¶N|B"ފBI_y5ɬVVn5 3-Z̙3xY_S�c~TvRWPOȶSY(@ PȚ@z8&*yq؜rǿ8g ;;[g�y"yZdFZ?sr8pBf1Ũ\lG7|YblD PȚ@Rv�(@ /ojNrR[7:+KtgT}G@"oQ>97K!ghc4~'/#R�(Lb�(@ P o 0�?<u<P7ҽ꯽n+2|_/θk)@ P�(@ PT _?2ӻc P�(@ P�(@G^G�(@ P�(@ Pu 0�fݟ/�(@ P�(@ < =@ P�(@ P�[j`II@pd4"Y'Mwr8n=G ;,9h~D\lvpnR}quVܽĸxt5 X2'<;Oހ;QwWX])3~;QcR�(@ P@ȷDZq N !_lpx_5  }f/Å0c=7R :'M~Î#5J{~7790s\!}aJ͞xP>~kSէw Eӧ=`az;+}Ǯ҇wFHx?z>6]gz&fd`'6.&oµL:{P'n<+(@ P�(@ P  eP;[jbH)_$|xk<Q Bcj^|LGC[(󋗡ިKoY?֡XSx >/ HVWҷyjyygOLP8.Ɏ=Ȏ[^9�5xaؗ�(@ P�(H `*z`T&>ǼƵb_K8oXt%v|lk(Vu6<lc_gT9t9Vu^Ƶ˒Hi{Y\No~̭[6mKwOl815OVߣnzX|ySd1x !z.œ3.4=W+0R"{eV]-Go7*>ٍR^,]>\H[3Yce.2M;#*|ըku|z6d6y__U?|�(@ P�(@ @ho hWņCīx~`m:)Xl;ʴi ך57Up+xܵVM N̘k蓏u]''c6lڂCF)pQC-c(YͿjƙ.Qv]GɎgӮnY}nRrINŒN8;VR }nu~/6 νe:rI/7Rojv]kK>W8Zo@RS]9L@lЖ~:}/ %Ye_iZ^8uQǡ0T `']!AOV}mذej~z%lA?Fy7|lv%M/�(@ P�(@&o`}kNÅH+ݲeþLivqʗcE/mSDKQn[+##S3mr;`*UU,l苓*ñ\.ҷ`n] e^ %vNէj'=L0Cqu,yc2}C}as+׻U双/cJKUyGMWUJbetb{n"n`2vۺe`WB#eRpPlS4)UsWcAn^ۺP�(@ P�Ud VcݛϢk泎SDw…3,7oyewRY`AR^*U=KMcYk^R\ԓZ{gBC\8"b}7^ɟ"QP-\PW0ypwúm_\MM0s�(@ P�(6�?::; N*E|yMI%f߀Z:~`"N6}R)XP/LVa掟Ο?Zj^9@YdQm1:O,U֨Qe.^-[,Y7I/73dZUь=\=@Ur%</" �+WW&YM P�(@ P>|_.Rh}GΙxUHBBK7, rFgo\Zbc̵vMص )11UMLKݺ pZ\۶]VL7sC׮ݰaÆ;OEKf5QJ_Sd ̾\+v_ Tetc*jz֜FPhcz4,b1I/%KCXx9ن�(@ P�(mzF/I߾=_Fq_F:g^{;7n|:^y MT_5wv i;v/ݢ9J7o#."}ǽXҠ\ڳ4A6rgv,ǐ?{WǍmy@Ҏ7bFLkF<Uq]:�& Ga>!Pe/d 2Hzb'/6Đ;u*^)~9cvxmx[{\%7fnnn4g P�(@ P@ $m $GzˤI1fhoC(sVĻqqE]]Qu8̠YXP '$Jl_ZȲ+i%5{-q\xE!(@ {Iac};8�(@ X@f o(P-ʕ3[SsH-+/FYFY-?39r|5_a�(@ P�]l'@J~'aS�(@ P�rE w[ʭ$�(@ P�(@ PH-�Xj�(@ P�(@ P"P�(@ P�(@ `�, P�(@ P�(@ X�`VaV(@ P�(@ P�R Xm�,1) D""nT!ǎcxؙ�ݗ@?2ŕ}Y}2jtq[Tdls%iwbD}vT r+wUCov} =x`@;});N^OR�(@ P�E $466CPgrjFOGi1dƆ0 :'M~Î#u)7.XSf<?Sc5|+öTõ۰m;HOEoT-T9pt`5!Td{lj2c'l~C'fa{Aoǟf7ˎaᖀ4A|4o^5v<H P�(@ PBF$JoT/\E c1V_-뎐hMް?bh\ Ƶm;ؗȖ39 2-Eiz4"/iҝqt3QO߀}|zIsQ�(@ P�E �kV?7I!Ǽζ:9er'}cAjXѦ#B[*i-!Ww9Xչ;n9jºzz_f-o7k}鷤QsaT$^9]8kȬۯ<,fr>y2oYTT֭N:gv*eק Ԍ~ P ؠyR_ŠOjfntw`Q\mDzDPXb5$K,11^ŖQci,Fލb HspW)skٙ9ef߻s{6;}~qIJYNKޔ,3h0t �(@ P�(@B!Ps<}ׂC6A>V\uEFAͿ֡/sGB$絣cW<gπ80t;zP7e."na~ht,4ԝ46Uv:6pj a3lߋWwGpuR˶&ŊS4HUy{{A揳%o V23u+!=j?`6yzem$2>#]GA,TaJ0Х@ecԫlU|6ڽ0\ݣyȃvWѳyE4ى{�(@ P�(@=�6K>8,([J.c{AGSEϸ𞒌^J;waW&-] h]{5X:EJb˻P J.dA�r �؋ff*SH>E;<XXXd㶝)>jnq;D bRX]ykr۪<\|qV؋�XN%>1sm-*ʦr^It߫׳6FtkSzQ}Nܠ�(@ P�(@ 蘀^})ʔQ[:}t,;?˟VFue&X̤0-Q-իܷ?9kqvd%hVV..HRV)Zi̗322СC_vub?Jv2vNPg>,�>ɔN%,pv?;S�(@ P�t]@`9W)yQT ~P6(3D1sf )RRdQwO)KS?Dd'Rfe.鳪RV10P3wHQk߾}0UflRnٶ+,e'?CZ*Ɔ0g.WP]-UV5^ >^e{}I{(@ P�(@ P@X@ G+ /p)ۯ?|G%,Ӄh-ج GMeZxʣUH3l*Ս2H o^#Q5K)SU{;V.;6#):i5i k\6{ԩ3zKK&uX"IWpfH^"U%%9yWG:umWqnL/3&67FRVX9L/P�(@ P� N�sAyjfZ6,< 'kvŽ"vʹQ7F[OVDZv\+89r,N [W۪dz3f$N$gV {lb*B$Op4D&m4s*͔n%WYRMǦMؤ16o#c=/{ɀhQ_M]!&@Gfu[Vשݜl$PˍrYm!oAoyB)ktFoSベqwPPP�(@ P�r0HSJn^^ 7g_d퓨,e{sSX)^w9'3:ϧR{xs?ejs¸`lkrCXf0f8FڊmpJ<Q<ѠNj&$ (4l!7j[+3[KlW"gXL|2Jۙ3ȫ-*Q@Q;}ɾ2kUyt~5xZu*%( (@ PO@o ~\X\C%ʗDWfWL"%.%D"fmZd(X(@ PY RIǡbɀp ?>,{Ѣ+.'Nŋ_�(_z�ӯwC P�(P ._~<k]/VX۷x^VR� �`_��(@ PDzuSǁXA<soƍcȐ!xPSRexȺgʪ>}@.ۼy3ڶmk׮EСCj*F1e_ʚ5k0`�9~߾}?%K`رGuyz.\n/69ŵs 6 wѨ(@ Pu 0�y> P�(@0Rr.x2m̙믿Gat;9?k4k +e@+66VwwwGݺu1a899=w(޽;ww}Wƹsd;v`25m4URTH~b޼y_'7o r={`ܸqD?:X(@ PoJ@3)xM_�oD P�tGү_/Jc$$$abGDA'W_iӦrfWٲeѪU+.?-򰢷z ǎѰaC9KK*U$/_^DT%]6&N(Dk֬YXUe�,[lM6x` 4ܮ1kq P 0�O P�(@AӧO`Vhh(n޼dׇ`6me[xjTiX/UA]GGG'pebVHH<jUK,)ULMMDR$/< IHXnܸk.c{nS�^�@J0VRRR ^(@ P@^F?XD`B fff9&Mo -1KL"TW[Nw(QժUSUߵ ]2e/FA Px|ݻ/$)@ P@Kr-bծ]B_`^UL01J$/___t'NPϨ/ZĹDbS! I[RJ1mРAnTs�(tvXcCfVHxvS{o'l۶ҥK R�(@ 'O["x`SqI\"%ȋ|]"5j$( )Rti.NG2.[Z*_$2/]b&ݻwEn*)h~~~C Px:;LڎqnLQ(MӁ�(@ P`ëF<q͘;wL2/fb9jVΝ퍁ni?:A }vׯHX6Kmȑi={Oݖ%J}q"P',)f2es% Pk0Pnǹİ,77baabǠ%9q *?K)5ؤ{B*Zt̟0f謪r<uAyOV)hXZZ)]D͚5skz P�(P D"vSrA>>puu}. 1^Z:wjjXb2=%%E֫f踉7��@�IDATwq-bEx*UEU1^Q�^V@g@:XY^zv\⋋w,g=�o�(@ 蠀Y%EVoA$*%ډW/c۫ ~T#Y(@ PoZ@g`9=b~v0PWի|pv.'aрL P�(@ P�^~} 9"&1 '}5(AхS:uvxzzR�(@ P�(@fQ~?nhܦO5> O9r06mq <+VFw(@ P�(@ P> t�_ rG^X$ \bXܳJIMCa3ך_}o`CD32G`Y1bDjS�(@ P�(@�HkvcuC<AIkk#1{{x�(@ P�(@ 裀N v16۷֬Y]:pֳgx�(@ P�(@ 裀^&J{3g6BmV8q%L> M P�(@ P�V@g7VTl{WTTd�(@ P�(@ P(`(@ P�(@ P� )A P�(@ P�( {�(@ P�(@ PP 0�(@ P�(@ P> 0�*)Ґ (@ P�(@ Pxy^ް@tkzt"|o/]޴E®]W׷ ^^Es.(R'Nz؟�(@ P�(@ T%Mx] !3p+$\0*FU_zyco߱K*\1vVgECP>v}r~~ld;{,vڅci/;S�(@ P�(s)D_BQQ<lcf.%<jCb_Aðt*4T-o ۩IHMݥJ.OnP�(@ P�(PtvXN:4VJ,Mm ޮڬ5V88as&b(QE5ѡֲ"n:1K{| LWEs\Y)cιֻrS諭!^zu=䭪ĉU6&M>׶$%%e>} P�(@ P� �s2ϕi⯲ͻ5]WGh'A xfֽ:GA+NKMCI`S aWCl\]Ԯ v9W.]Jq˿.ʴnC n]QH}N.[7õb#s^Zê3nom֬U �ѱ+ܕm3~#}3 ݎfLF:u4'~Ϟy۸�(@ P@w|IIIݛS�ްc(UlllJt6�~ 8&l?_ruzN۹m )3RS9D}M슣lC&6ff0+�.:aPj~;~}zjvNǦqMb(٨!,-NqJ@_-] ] \?σ䴳d5J@q95e(@ PH@)ߛ̔B,�(@ @\\5�K s"{{TEvР:mUNyC$gZX_&.ΜCG^XRE3|NpQH z,<}FmN d& MMe.:>LK!;} 9e'|₡CcG=z QhQX2ay�(@B( f~1U?x2(@ RM32 ֦&TM_Mad%*i&QwOeib*x@Ps7>y k'2]159Ey:9Ճg0G<̔32UsD5k̵hPB uIF,XiӦjՏ(@ P�(@ Px:=?4J`K{aBxib{hYٙ/l1s*: @2E|Q o^x%H*Qwr O%Ԇq1k$Īx"T>@dΙ2[]J^HgV^`Vg̝;/sUbMr$�(@ (IY(@ P §µr+mX\'k-?tV5-"ףg'l\e:'ə`ժ^ɯR|" N$wjWcLZWwXWwOQ/rPfyM~\˜9՝3}T̵2/YԘ 8gmݴPݟ6mUmq}Ou>S�(@ P�(iJyaA $w}5IL£v?)̙?a̘yS/% GޞNd!MyaP9,sQ" f9s;ifJ"~ܚzɆ ڵk2e .=�J �(@B.㓧Ԩ|||!r"?nxWE(@ PO:=,%F(oܺZ'8YQgT&:9sX,(S:fRy+J`�(@ P�(@ 䟀#vr ;�(@ P�(3:_gy�(@ P�(@ PoL7FS�(@ P "6V)f�(Pp�+8K_HB P�(P&LQF!11QB>|>�w8;7oڵk_/{]O Px Nm�(@ Pa |z8qVC P(LL_>m+(@ P@Qv܉5kWvr;t*U˖-5p >򂓓ߏvڡI&1c{ʕ+!fUPM6E˖-�(@ 腀� Œ@+x}Y6Gg!kGGY?F#HMLz^/9΍pcj;p]DD$%0΋)@ PM@zE!222;y$,Y?!?=Iڼy\JGt҈3gp9CJJJ£G,ǘ2e 0bԪU K.ŝ;w�(@ 苀R/�.߄ܕ02B5>ˁKa?P^=QM謹p|)JqiϯG9s籯g_$k~/ryaҪs]#Z?DP9>_N oEÄ}p%&_}SQ�(Pz-Y]!֬Y3:t(qh_͛7GÌ?m۶F\\ 5jbFY׮]0͸M P; WߕSId̙K6}9Le΃כ;Aba-)iXsq/6mHga}S�(Iq!׭[ J%VoVBŊa``ri;hذy6k,ݻvvvridVy�(/:�k\ ScT}} lLQsx@;c_Ŏ]dakָeb7Qc~;vvzg'jccfu۔2M֭P'OE25_2`ʴжK~y nA5oe }l1mݳnTfbߑuV-ܐbL1Kkeg0n41QT|Iy\=d 5US�("WxHRT]QD,cAO,Rd/ "gYXX`ݺu<x0ݻ)@ Pz%I̳ n+!]ϟ[U)2k(S˶c!PBHn]QѳDŽrᶖh4X+#k+ٶgC Wa$U ~{!> -_ACܥᒲ4]0Ep|H7 Nج xh2.STܸqHPiږon=WD"P傣}ԭ\|i5@hT r-JYo<N(&<Q=jrkDrVX1l9>B嬲գ[wk=ݲ DcXs>~+1-|xKB P t gϞTW/]rX(XJ*]y4h g%F*؁�(+:� X$ F N4>p6rV5U߿}]0/c1.,u`]̯2mZ>6A-PEs\u DN/qe;GKzuqk2�f ReRr;ÿÇQ6˨hT%Y%ME֩[JЩRiku]ƍG PJښ!BI^tmX}[Y8Nx$W`6vA/%P'v}.G̸n P�tB@rȑ+z^Z&?.bh'OȜa={DV䬳X,/-(@ P@2�fkn*?;5Eqe{d5c#Q}FznͿ֢uh4s5YJ S'xp =煑L%o$޽{gq9,,1ʧ`g akfV5KkLMv2vNvByB;J�LU"<��(@ @楋 "%^ҹsgDEEaÆ 2qH_M6ɜKj<QWT)|'XfWԉd-ZP5;(@ P@/2�hm!?,9LfBK n*]{g'Mƍe+vm4}/@w վFVHmPSe SN!\y2uT$t}e׫6\3J2습eٵ|e47"U>#PLۆ?dr\ܚ�(@$0u揅ӊxe,z%fi]ˈOu;vʖ-+^c"զM\D`)@ P$|L;G+ /JWL_.}< ]b&W}ՉQܹ#|\hh>Ou;["6(vVbJnwǭ ˼a;!CѩSgvʡHU~U+:>Iܤ(9b۩OLHn*7)^~)y)7oV~mM6R�(P̭D15_/ �(3:=j6 cQ>JQB#Ҙnku[n@a':NOnNRqonTPZ5|-勝z?N!ñE[uFT6r{QN} EU]8.bc|:$Q/F}V>s+?ߵDށj'&)wW&F5NNxxz@><L P�(@ P(d_Ը=MdCpdяch~͜ƌk�%"v==0V88MRO=Q4%QHINIEX(f 1 qMbVZQ0s5uܮify&4Ӭ�(&|||r~_*/իW.!/ٖ�(@tojiU.o"OS y+ +Ot\Ke{6Ų3RrOWA("P0EH!P,=ƅ[OбVLJ.K._~fK+16�(@ P�(@}�>pF˲ea,.6J}قr:us_`\ |xKg_QQ:uX P�(@ P@~ 0�_d\R%>lf[NJDm\snZ P�(@ P�r@zwl@ P�(@ P�(P�+@ P�(@ P�[0|yw�(@ P(`C3ph P ga�(@ Pz-PT)#%%E7G POM�X~ء -- v5k Р~s0w,K''Eݹ^d[۪U`[VJxxWVVk(7Dm2xKe0.ʉ,26n<BC74CށY8JٚgG�(@xP�(Pt٧*mosJ [!jOcxW`D 74.Ξ3g˃#4$&⿯AG3<xHnݶ>W<w<!,aWٸss}="m$FFGgf\NE;dÄ{àR$j= _i)M| axL>~�(@ P�(�}w(g/nzP3Ŭq}.f>ƍ )lGY6][FՆ_{pCY\q e=Rf}~iS�tEk׷|g@ P@�XN:bX2:էfeb %E \lGc_˲^`hj Ea;[ڒrpQn%'F̃�flߺ B9K9{LKȩn…?㏓ѭ[7HHJAߟbKB;',RYJ[?`ˉrHa}%&ѰYf A0ehSw~܃~+c&oT/g>m}~\w]8X8X,nG*3l6S~1z(O>_L_b׻]dp38d*YG PȻ۷TB, (@ PF@g`V:wãгNm< m} en]QQCDŽHǶh4X+#k+u}-Pܽ|1OBNjWwGpuR:bmxp0f^g1,ʠtvRfYmZ54 7”\fږֵ`Vy%|xKH4X[~[Ek~_6kw`X(QQl=] DZx)܃Mq^ fl[ ֏kRͰ-t PΟ*Ͽz Zx A2_uNv sa͕&< 9p&.%`ef$U7yC Px|M|՗Y}||c(@ P:�[~+/;܃ ڎ=[~g_CK;6=3ʻhԛ(u%QHP/ښGrLs2ͼfLob<@z~7^9-*q[usNpP׫WOu(wwexRs͵h`f\?=%yT.S >:8,b H_՜a`�9K(T^5cL>m4Ugӟ{¢dz嶒<=צvԪ`Ϫ%Ѽ#F~JYG0ӨJI 2;kS m}C P�(@ Pxz� W}o~^{p cg5i:JRr*}\ؼ#biEE0gm $y#tmX\*V<jP1L,eJJxegPX)Ht/GRfJcK!S�(@ P�tJ@`뽮R־JyP Ŧ%'N)341Ar\Fc)%ZΝ;^:rΧ6v_G=W_{vFXLp< BT%6\bYI n ?zh>!Iu=g/cg܃\8)@ P�(@ P,]F @%ʽHe_<Hrb9+CJB:_6ᎇ'O#>ץgC9+: @I܍L'Opwfw`Uԩ3ߟ]:.g|\\"X2 ,JEv^{Ǚ{Icqsx(lbW"Iur|hFQHK-*IEkySq؎�(@ P�(PtzՖmi ;V xK݆/' xvd2 U> OV!!rљ89b|B1c&pl[ARt4z^YIŔNŦ2AT7oaov<yAO^֫Glチ﯐usY }Cbf$K#UE<awk塍ڢG ,U4<?̩F_ 'LҿMe.dl-ű u eXq;dU|=ܠ�(@ P�(@ @4ua}}}*e̟0f<ߺxxs?e _C$> i(jaM DĊON"f%+Ō1-PYJ)ru �(@ U@08xYόs{ N_u2v6(@ P^@gO�16eٲ:qJ"슭@^^gyxbKI2�(zr t+(@ P'gx/�(@ P�(@ Px*�)P�(@ P�(@ �`z(@ P�(@ P��ӣ/<_x+�(@ P�(@ P9# P�(@ P�(@}`�L>M^x;�(@ P�(@ P:�<{9!ݽ{_ؕr)@ P�(@ P@l�,Unm|sW` w,%WMz}ٶm+:K"((H_oE P�(@ P��~]/87&{=-A�hyдFsHU#""^y�(@ PM d�(@ P@; 5.੃1M?4Rk164Dr(ɩϵ={�(@ P�(@ Py�9,ΎhY_ۅEG0eqk牢EtvZXX{N)@ P�(@ P(,z20�z{TVe}'Tի|pv.'ay�(@ P�(@ P ^Ny/ƍ@_NHLIp9u4888`5Q�(@ P�(@PU'>{h"߯iq غu+9Mj*V:P�(@ P�(@}`˽H}QW)o#.)^V?"�&l޼m۶æM2Wq�(@ P�(@ 襀N�saCipN?5K;`|{O|z;EEw(4I}||G$/@}�(@ P�(@+0ʮL}tiѱ(ie]3;޷o?Y]vsw93gϞ�(@ P�(@ PG^RDyda ~ 9sf#,,۶mxfK.ai055PM P�(@ P�(:=L?RJeY"g(@ P�(@ PG�(@ P�(@ P o ͋)@ P�(@ P�tL0x�(@ P�(@ Py`�,o^lM P�(@W&p8q╌ 6 29__ (�(@`|8y3E )) FFFrx�(@ 1iҤlG?ЬYllqٶѶ"44'NDݺuammm7�(@  !467tʕsY<:{&Ŋk嗺$Ā=vQeO9ZXUu(C/_AZZj@M?$AWvqcƌ_>Μ9@�(@ LΝ;QF._#F`ժU(Y<P0/WE P(d:2U bl|sW` ~ .?,picGUv:Nq,D]5=w~n͵pwvۿgřP#^Űrڸq_LQ� )?>Wҥ:99aӧ<<<0l0ܹs'ۛ AdO>V f͚5Kҥ ~wuj~C۪*$''cܹ}Ŭq!((H]/e{.\P׫w-Z)S(@ P l�Lu]zTEl;UɌaX6WUwG LG'yWme,�(@ P@ٳGDiڴix .EEE=> Ƙ>}:1p@\vM}EK4-[bXnXhb̥KEoݻcȑ爍mq}fرP kO1tPڵK^�(@*K wBxǞ*%_CR%вtQMfD'$ĸ~z])ѱ+!`[?{1Et9[ۇ1a OD,e<3{<>ujOaWga_7"F8T^ccϻɥ˨5[)T\Y7@Rd|\2}/�| ᅦ۪n;iqa١~w9s_<=e {ɩsu"(�(@ PS`ٲe0`�,<==ѠA;wZ@ f͙3G~A,1KȪVlk|_!fuU&_|9zK-QRT"?\ck׮5UHжm[eP}>c|bŔtC 'O fׂ dMW~(Aɓ'˶ (@ P (W\UylM+Dyc>�l|غA3~4̞041A383~Z\&M%eih` oPΝ:=~,k_}3~#}3 ݎ]DP,> -E ]ACܥ*_D[/@2Ueβ{k x %pr8x@ ʍ։NAUpyd)/^(g?6ű*A0G>L[J6j(UėDKػw/,--QLp|�(@ P ŋ(7af 7n<�r ďq+?^f J/UiҤ|c6QF -f߿_n�-[uuu�zjD%-(;v#Gx(7oDz6P� rX>\sK$<#G%M/2ή^ `hj*3#izuqk߹H7V"ܕ-aWqJhZñYSyڡBwmx&IE}fMYW%޸YT]kķ]}Ȁ8.^"VwxHh]ێ*~>hk\sb y,i=r`±(@ P@TŬ?TFOoVTE|WXTOThgX>bLU8[43S&4Q5.)@ PI@/`bvϻcQ/Tށ ,1"I OB!Us+F%x(W@ѾJ+)Jxuwx]Tľ;Bbx܍ mUu6UX?DNS{;/Q,/q?P|)KFL:MɁ1'OKw�(@ P@OL+U VY㙋NqyaaarH/] a&fpBCCUͲ|*QL3S*#"" ~eʕӿ{|f͛7,71;^iB P(z�oר,_b{׵ %#;+c1JԾ%.4AXV(眙2wxwKU"nWv xaTSücP\T>h U:}%n߾}_X[*e)hذvknM<VK6rlC Pl~̙2&\9֯_ڵkk�tL:;֭[205j(_4PfO8||}}eoFcvD>֭[bf_p! "okk+OH/T!̲q P:&' W#!97>Va*E,384%#H:/7®ߐD*L&2B.\BD Qʴn)g_X%Oڝ-[K)E{v˶n6Kƍ|\O.a,ӲEfT"eW={\۬xwzΪ:c_RӒX(@ P(|TB@$OvI;w%K`ʔ)D:uݻѥK 'eѣG?^4HUx%׋"RׯyDE1q]ݺuիWef;(@ P  0 ,\+揕`Cu`rf궅yC,WO[N\.$2ZU456V[W(ڣG`o^2%89r,NIO*rnmlƍғ5L~20(,*(A<ER5P{kQR dž jf T}˾E5"K YC P^ �xjc"[\#FXn1$M>=csdGtG^|ȘK4Ν+(f+}T\cIϟ/QeɎKƶ/1kѢE2gX`"cp�(P Ҕ&Ӳ\c\LV@fgaF8sO3ftיãNïm_Sp;XmIS,f� mm*rvTSUOT]KUfb(~;tݻ:sP�A@ZTyr?>Cp\]]a-/@ۯ KKury�(@%3r,</Se!`*(^y-"dQt݌m^0.f혹U_`޼r9>7G P~ 3OOo (@ P oz�[@ KD ^J P@ j*�(@=`�L?7}{UM_O P�(@ P@!x= 92o�(@ P�(@ P 0�_E} P�(@ P�(@M4=G P�(@ P�(g ۡ�(@ P�(@ P�XJj#yWOҀ,xPS <,Fã3g5QyָǏxR^*. _F@8_ ~1~ɮ]dl"zGDL"SvpXlvy�(@ P�(Pt6�7lC a;g {Rv\se]Q?ny8sl/:BKJb"=|q<vv}ϝǾ}ҧ&:'Y:>{D1R }@Ӻ#0g˩᭠Ht"s: P�(@ P@�!|bfo`񏷯 cBoS4ýɃ䱯7-bb^p:9q^l&ڐn1 Ow^4(@ P�(@ P@t6�֯;ں 9{EY_+߿lRE; rH ?Ǿ^{fqr8=nƈ?w6#6Nq) 8?e[S Odu}n|Zj# Z: NKQkE0";~ 7bںgOݼ7#[!ۋ1ĘbւmW1՟`3h5f;DibRvRcY|B={M՟�(@ P�(@ .P4&ED\`λCqŷƵi7pU?xxq%5T_DŽrᶖh4X+#k+Y_ҳ!D0Eص| !Ol/x|.P evy00,F¾A]8wfM_kTGsa qҴ-vW&z6f]EG[>a 4*An QX7^Y}'WèP5B"bd+,z#}F@HUztk|n t[VBղ6wPh kهѯueˇKI+Xmq,�(@ P�(@ </0i x}ܰИ835kq5c��@�IDAT(-`"Pƒc ma^ƶ6򘥳3ʻmޣ+V;:UM+Gըr>(ݲJh.%wlHMŭ�+KK''TSng3|x!J>Ӧv83o6E7Oa(ne"+AJu7&M+d<ScC*ik%y}ҵa9mUIY8Nx$W`6vA/%P'K|Ŷr}K> (@ P�(@ Pt>�6eq~ F~#e(-oދBӧD3K`<}n>쏛Ez+hTaU,(mWwGEլh$< Ńd{#++N޽ss ~_O?P>k[KݴY:]Nݧ¢''TT-£N P�(@ P@:�[,ku4Nf8XQT,ޫ&p{GkxTkrt47@J|<ڵ/޳]~Pade)8o**/_:u ʓ!7oss.?^qr>yu]5&++ϖEf&"J`07=~Jژe4cCŊe�(@ P�(@ )S:x/`Xܳ,Dw#(2ZIrm1'%cTl̘E?jK س"y:2=;węラK M5lيؠ`۵["(*6-c'!CS ԺON oE⬒2Pl_ϞhnR՜m]'d$ik[ >v{c{اl޼m۶æMҍm)@ P�(@ Pz'36]FU?qh41{lƸB j˩OZ6j <q|rpW>܍ JP+s104ZCN'֢KYQic~NʸŢm!4pW]u0|I7~$_U&s}40Vk!?c'1+s~{'OL<=R$T,Lc P�(@ P@a0HSJ~ܴnO9r3YPycbO,̭9'3:Czy]XE}esuo[ݎx+q&V(2?Q4%QD&KrJ*ĢD1S_kҚچvmM6͛7f֗�(@7!|wt}||uZ<"Cpp0RRRЋM)@ P( &*U 66X UwiJM2]^<ĕ':.GWcbYZB B&gq-bFZ_%Yeq1.zubWr]t 3_Z(@ PD\r0SEP�(bqqq ^^XhY :lސ7Y/:.E!>a;WFʥˇzVw&! P@A3*h �tM@4gS 0]uzK/_|m+rq͹k)@ P�(@ PU@g띱(@ P�(@ P�π�(@ P�(@ P@�돗7G P�(@ P�(� P�(@ P�(@ 赀NRRT^ͅ^'ޗ"nљy>}M[+u%EE!$FF!5)Yn=zu?{E6p $ H"\rDPU`˵bEP@ U[ owI$?ϳ9e~#9gB3qx IL[ko0bk>_QqI2ka"cIDL$Y.SXs@�@�@�+Se`c+ȱ2%r)Xio/2}+㬷8F)oJ$&!C% ?lym9le,}d< 2!?B\ؽGm2%JCV,l$`/7^/&!q,_oܖEˎCarc #}^bR R@e4&B"$ Ϛ?. !� � � L/g6Vmy{zσN jSaT֨{mS9+m?Zrv(<ǒTŔ9<i)Mnrq/>v\ z(þmZbN̐_>tnVCOh;d_gd+ʗεoh$l\�@�@�@�(|vҳI})]Z ?ȉktyxJTeNk8{#{e="VH=v_ʱ̶~ Ɓ?Ԁڲ?^Zj-sɐ_e=vU-?W(m|V:>c8Fgٲ?o}OL&o=S6H#g8(XnmIXd|SdnSeh3D8r)tE[Am)~m%⥩_/'Mojg$@�@�@�\Ye`#dŁҩa-jUK۹\=x4{l9]wHW^h &Ke_ eXIIH[[476{lk2+ڏn#bhˮOSt#[qkjSNΝ;… sУU-kU)ûKE�WNtE:Y#ŶO#]א?\S7glWGtYY[~@m<fkGYJE NqNAZ/qӔXVQKW)Y3.Ѻx."-xv<4Za GS挭|"”] h<o+l՝uį\iݶqUS?@�@�@�(.�/OZ*AePkJu[`.حcmm|@kP|[lRžL%ֆWr[Y+T0ZW3o̘)]-V,&$D^F&&IJDYS'}rmرcːӇ*756 or޹uæMHi۸9vS{o?YuO$xuut_bP;~MMzgsYD}l#^M 9%;W1u;)|I{;:ԓ7^%w^_OiPY6泿O9f=勅TP֘TX֌S @�@�@�(/g֢5`ARy%\yӅuݱ/ґiɱΝ;�r(]pQ+ gMo)BEk&R&[5KSfiIaZelSuDfuͻOY/ UQN]zeFȅs2KNhf׭'/Ӊ  � � �K&.A @Trﶇf Q\qי*XC<|raiѢԮ]@uPJiTW)ekv|/O`[@vk4;gYLGr^Rr/tެ:lQ[ɩOnRR�+~j0C|[-ѣriԨԯ_?ُ� � � S\v̅f{k!ar*2ڎv&*FDktȗNgo$-F <-˙u$D\LMu(Uc3+q{ L`mZڌӅ̝P6iӦ˭&K.Buu諉5Eҧ^mk+Ia):qבte;.MU_GwͰݾn*i:"m҂fdֻ&Θ[S}CLM 5fϞ-={,fkC�@�@�@\6�6k{y`s`Ms!ȿ@˧ɟMo4 /jf͓n$F<ozϾ?Kg ItIը+qg֛PjV2mG&k-_YܧL '_JNXRW:2cd9yskrړ[ӈ{oy &Xu͐SkAp{1}S){u쳍gw/d-P*;U~F\U3mlm >?3, ?M~pvXiWV-c9�@�@�@�g x\RQ4۷OX{ȑԷn&m\rZrA'EcϜ+Z,xѩ:0?)Z LGV.o_k¯.xTo9u>VjV)IN,S3?ɓVut*GHٲ3k� A&i?,IPPC ҼyK> � p S]z +/ŕtޥ魙XR_GVթ[YA&}et/ ߤZO,H҅xٱc|X_A  � � @ �+2Z*Ftͮ$/J(� 4 :� + �sE_(H � � � py[)Ii@�@�@�@� $@�@lB�@�@�@�p`r' � � � @B � � � �"ԋr2"ZSS/Z $}d8 ߵ[v2;"79KM%ĉ\*keA=S+W}q+$I$:1>~� � � � l�l?rzeT9VDRaMj/~,ώ~S~##r׸އF`oeS#卷䲕y.u{}y>glCuWm.}}6o%JBxx'3*!NoO+s'Jʾ_'jt2g@�@�@�Ee`ޞ{$2~e>s:2o>-^{\E?6Bˉ;^+*G~_ -;69I2v<i@2d\|`[lЛȟ2j,JA�@�@�@�\6�vҳI})]Z ?~My} T4/^-?lۛ#;XxgYp2aSQ^w[?ϑz˲ eEw+Ǝ9]{ɑ_f؟Ӈ30eԖe \i>v\vYvOLoڌ" ۱^U=[?LL7V?9ԥ}җNgԤDYsXtǼ|HZj-Ǐky{)үEg2Ӷ/I-dy_H � � � ? ?͈YqtjX+}}{iѸ3W$lvԿiKSUK4c >ŝM ~t7VR%>,-Pc+cv4sHF~\4�bhˮO&jSD1]QzL,^I&eË/&oqYJ|x)#7NB}9)m1my^6t)_nYL}ԝ];K *l!?H+_%;wyMAUjJ),?t4#:Ms'M˟vecd"� @<Y qqq*K!@�HS2yeΨ[c)OZ*AePkb`!9}d\Z6mF`NU$FFJ;�RR.o^T*5}a+El)-H :Ԟw`LjXQbBBumdg.ZxFF5O?kj4e'RFlyZVɯA}Fhy-kvdՈK~y@&AG֮-Wig̙3RjU}ɸ--וgN^ZIe^f+~xQ<  � @jԨ!GWBI@�p ~S2|�Ekdރهgm:ɢ'*W,JG*]ڌғ�RJbbλR8okk#GɐߗُՑiɱ46eTOj*4oKLKT,ۛfs> {+EɩH ޻^<Jyʧ##� P/ �lMZ]>}ԩT!c 3eCw-Msm  _�+i˕((i6]'̌:v̡fz`֯_/֓!u&˗V.;j>dיcRǯeK � � �\iL,\(%>BTd9.ȍfȰnmE}"<hl/e!~[(V6#yNԩ^Xget{fzSxɧ[o'O湆$vRNE]zW7OٶL8@�@�@�eGl._ʲa?&ւVn1/IcR.FgeOb=Mna楑5"ﶏV}^׬:f8ΞFZ/M+ltobL;HwOVj-4iMᴥ],g_ϥzmG m8OO~`IZWޓ^WG$iH^~, � � � 7kAmkOZ}x{}9za>֭ۤMkY*)[P(51IbϜ+OZ,g'Eܻ}Sʖ#@&%H _)Iׅ �@ppo&88x9}LGe~s� �LeGt)j魾u;># IWʗ+)'"!� � � @̍R%X@ cfL*k � � � PZ.닄� � � ��+�@�@�@�@-nD � � � �H@�@�@�@�p'`t5sIJJr3t@�@�@�@�p�XJE9-ɩ /NHt}Rcirn � � � @\)f-5.2p7IiRY<{Wɘ{zJyqΝ#˗/o!o@�@�@�@P\v<p>t_E~ٹϠT%Oʉ$yBsJڴic ݥ � K xd4 �Wˎ�]sk_/Pz7o$<(^T4�/M*IFu-{ǻԔxeMt!� � � @\vXӍKKgvs?6 =ϰϝ?HPP,^X.Zk@�@�@�@�+Y`ѵ*ˠdwԍ$S#>w7eʔnz&!� � � � |�Ekdރ.>O_90ec7~GI@@| ر۟/'� � � �d'k MZ]>}ԩT!s,!4m cmQf4XQfBB̙3GVX.]tq3T@�@�@�@� l�L7>6sL.-¥li/ +o/Ovu9r>B>YY|xKUrr�Ӥ#H � � � .Yۃ͵{`kؽq]Y6_&ȌȅCI)+ai6*d=* � � � pl�ۇ}e] l\DƈgRˌ3;+9O@�@�@�@ [g{4]I/JG(.s2vc@�@�@�pˎ�s&+UF W.}E�@�\ZɓSÇy 60 `� PbKAG@�@�\M@_͛7~պ^nܸ^B�@v dq. � !pE3]vW [gپ}{9ts( 0ehhXk?~+Թsv� �@DDO.}t@�"@�)kQY8{d"� � � �d/@�,{BSj|_QRSS+9hT � � 0Z.M"� .XJJ<.ɩ.ʟul"J6eYD. � � � @\6�60aTj5L6CSNģx՟JjFҠai% @�@�@�p  y?Bb~&xVO]~Y-z2\Ci~!UL?@�@�rHHH(]zU$66qgso.w.`i!� zrwG{o۷j {\#!ci|R?0siJ] � �"##eڴisN-ZC=$+Ve%ӧOJʗ/aʟ;w+WN֯_/7*U~m`@�IeGIWٳ^gޚp-$"<…zMW@�@� |!|o\^|?Ҿ3ػ9yd9z3 �ˎ�]3$Auԯ>w>Jx[Y;Ez=nIz)^-n%C3N#� �Wk׮RfM#(?<yR߲ @itM6瞳9sF~9x4mTz-3g̘!*U=f֭RF 4hudsLo7?)SF:w,cƌסo �ˏ�{_eC6o~ȘDٰs_:Z#Gf~3SF}0J^y � k tA4LYf֏֒Ir9 Y\\ f>뻎kР 0@eܸq#5]pAlA~ILL;yf:Q`&-3y;v{l �&#&X!LZ$f$u+ۯM4#'BeSy~@*UvN]:C>lzؙe� � I@G]3/ ֳgOԩ*ߣuםwijo޼<f԰aCm M:Uyg^{],¯kْkG ٶmyG�@]\6�6{Vyi2}`)_FeJK`@E'%%U[,tmnw }O]@�@ ]^Q믿F]_>>ٔrcTB:q-K֭k鐚Vjuje%9,@�\6�6kfsxKE~}SY6: .AO6j肽 � �D_ᅴ鉙o3m[t @�[G.*+g)s+ڶei,kV]l4� � pygϞ5h/[@UPP#Ͷ.`oKOm>l)Zj.w#}0r< �%MeG4Oe5RJe ~B�@�p@j"_}YKO?$k] �5nѠiotZ.3]ܾ0eƍIMB�@+W 0t @�ȧ>||'K7nX˗7km۶իW/6}Q8'>j`mذa52O}Ƕ~ʛo)&]zX@�puk} ᬴}I&iû J7Ho׬Y#Z4β, @�pa&O2o 3S t[GAj7SX *U9JLL8fohЬ ^{MƏ_S �E*"-X"!� �r \*UJr=ȵph"!� 誎|j; TB � ZS4t @�Ixra � � � �+KTS5 � � � @^\:�zQNFDK`gIL}0-%=xI}B�@�@�@�]lԬ(e-壻oҞLTxy\ 8[䉮m2s{믿&E$#� � � �dp�<Ԡ>*FOnȽ6&m~ac9>j:E|l&-A�H@�(iРlڴIڵkW<pr7n :UC�@\6�vo_/Pz7o$<h`5*H`_)e㤸ӔX\]]@�@�"0`|w2o޼"jdU/=g �&q q}wR !~3w ŋK˖-5/ @�@JY1J:e@�pEU\;Z`AePkE-SZ{.e˦cdª-vfLԭ[Š#4� � � �\.?Ekdރهz uQm6i*+cmnR,!~{OVZ]8e@�@�@�@\:�6iv nRRl+-#'£$)%Uxɕ#!!A̙#+V,.]rT� � � � ff.!>ޥpX-e_x*%-2n޸Ӄ_0M:� � � � | l]M\ˆKGffoW7Pp37YB#ԜB�@�@�@�4V*j'ME$gbD?V)Eqˌ3;A :@�@m&M|n|Q�@�+Fݕi [K5zry;w. � � � @ "v)kԨQ(P  � � � @vXI(� � � � Njr. � � � �H@�@�@�@�p'`t59@�@�@�@�`$d � � � ��0w  � � � �02@�@�@�@�I�;]M@�@�@�@A�  � � � �$@�̝&� � � � @�́ @�@�@�@�w �NWsA�@�@�@�p �@B � � � ; �sɹ � � � �8�s !@�@�@�@\@�@�@�@�9� � � � Njr. � � � �H@�@�@�@�p'`t59@�@�@�@�`$d � � � ��0w  � � � �02@�@�@�@�I�;]M@�@�@�@A�  � � � �$@�̝&� � � � @�́ @�@�@�@�w �NWsA�@�@�@�p �@B � � � ; �sɹ � � � �8�s !@�@�@�@\@�@�@�@�9� � � � Njr. � � � �H@�@�@�@�p'`t59@�@�@�@�`$d � � � ��0w  � � � �02@�@�@�@�I�;]M@�@�@�@A�  � � � �$@�̝&� � � � @�́ @�@�@�@�w �NWsA�@�@�@�p(�Cd � � P05 @�(�XٲeSB�@�(1\ :� @(�Wb{t @�@=ߜskY � PTTTHddDEEI||aSEu ԋ� � P4#B Y{I@�@i�LOR`潤4@�@�p} zy{{rK � PE�l#� �� C:@�2uYҴ� � � � ^O � � � ��⒧]@�@�@�@��s 3 � � � ��⒧]@�@�@�@��s 3 � � � ��⒧]@�@�@�@��s 3 � � � ��⒧]@�@�@�@��s 3 � � � ��⒧]@�@�@�@��s 3 � � � ��⒧]@�@�@�@��s 3 � � � ��⒧]@�@�@�@��s 3 � � � ��⒧]@�@�@�@��s 3 � � � �WQ7/aaa#/^,(*UHٲeF$xG�w(I]wv@�p+(UdQ)vIZxzz�s58 5k[å!TvZ림 �n'PS J*EpB ^@K{W\nq.8[vՑaan@�@4�kF~ E� ,]W\nq.wcbcyE�@�(�*g{D�.[vwglJ{ M{Mw@�I`95>@�@�@�@�%@�YҴ� � � � P,F@�@�@�@�%@�YҴ� � � � P,F@�@�@�@�%@�YҴ� � � � P,F@�@�@�@�%@�YҴ� � � � P,F@�@�@�@�%6T9v옳h^�@�@�@e"�_~my衇d˖-/^'NH\\>}Z'OJdddΟ?/֭e˖_%Z_^9p {ݻ%>>ޖUd~t}={~o/F@�@�\B`/a ,yge֭5_~dN7o6N:ev=2c aӦMo]F!/<#2x` ӆ֧3 .ynܸQn&#,߿^_?K.2tPE^;0|Y|y^8@�@�pfNNNz@ĉMkժUb $,,L>˪ + 羫?:tAV^-W_}Nwߕ9sȏ?(&Lz/28]^iӦv� � �.(}6]K[ҵkB9Gz7o.ZZj%8pކN@N;C $J9bF 藯5kO?mF%hQQQ'ڵkߌxMY /_^"""dѢE'O>)#Μ9#ڵ#~ .qٳl �}WGر4裏t0ѦM6lTTI>okf-]Ҿ}{[ձcG3f/ nKҨQ#ii}ժU3kժ%^{̙3sW=v߳g y{{so벁� � k 0%_RN_ºwn;۶mk)_~2)53N>mFhs='r|W˚~4n|\f== ,}L;SL1EuZBBBLBS<5`v뭷c=fFN-{'חW_}U~@�*pnAW.uԑ޽{t*!6l!CHJJ' /`x ~tr =Q\駹Nh.{ëVjd ~t| s� � �?L::EG:rnݺfyȬ7|S 3WGۚ4ih@jHb5jԐٳgQZ:lٲ|;|?t z|`ֹsd޽v��@�IDATK֡#xF2_Tb/R~9ԅ5EGGEMZ,v] ¸yfWro߾^#4XպukӍKuشiS|`a=z0ufFj%z-UXcsWs=~z3{5er:{knG�@�@d�ŋMKI:z@iPǖloіU-ZѣGute:*@v֑6>| }7`6u¾}̶l)44<5Rijٲ ~NsԤ0mIEڞJ#)N-_4Y|ߦ;U2?؂_ڟf͚znq=FۂL:-RmtnS=WG^s@�@�@xJ믿^2+Hĉl@[OOӤ_tgyƌ@;{ )S & ^Kз ɶXL냎ЩEv2(5 ºfnSwY uN!%]Yo7tJc~=w@�@�@[^Bޕ.n-ek^G~ytF]H^G Ӿ4/Nc5jtM@sUvm}Hv;v>iҵpt|MڦNk)I7|cW>Ch^xv8[t1z~Sm#tī~-$e+ݻ0i:<]G�@�@�(#e,H0[K׃kh˗'77,lӤ˙.$S Znرfի Za%K1]',ԹsgSӴ ]^r'~oxx/,,,!l#�9 }7}#t^Ψ` #凌u嶭lb :ua@GZ[^)(С)mu� � �%W.}2AD׷uԕcJvo-7O `/D'NO5f̘!x.د#4Sҩ:Gp6N~LP?Y岫S]ttۯj~q+]1@�, 㾛~ t*all 8tZ>V2*/y{,Æ 3O]ru]fmD ^:AЩ[3K@�@�PXjuڢN{)k]w]LNN]KϮR x5YS\+m1do/ze0..,_>I ][PG7s+k'j_mS3w+{3΁6@@qw/-@�(.�+P"V0( uu� �i.1� � � � @ATr � � � �.!@�%.D�@�@�@�(�Q@�@�@�@%e � � � � �VP9!� � � ��0Lt@�@�@�@ *G9@�@�@�@� �N"� � � �T�XA(� � � � \2I@�@�@�@� �+@�@�@�@�\B�K\&:� � � � PPkq � }@�@�J`MX^OfΜڹslJ;_̲CYk￟>g}фJwK%}B�@�E�ܕQ'|p~<2@d ILLL2[ p߽\A#� @v)ʕ+kJJJ2UV籁�%W ,,Te y<| ޗ>v�ݢ7JnQR/ �ujrԯ^OÝ"M �W�+s � �dp�G御ţ2}_MR{;w\6!�,iA�@�@� e�(i{R_OOB@�"}\ � � �Y `ɉJd;:o%$$[R;Ց@ p-׆!� � [FeK{WIGJfMKBwS Y[}׭//'� � e�$\d? {$$t> �n+}m/-'� � e `Rz_~2Z>=TF)P+U �d'}7;@�@�@�X𐫂/ˆu%E�P=@�@�@�6�v&4R9kNJΡuDB:%::ڠb@$p- W> � � @Vn�{)ҠH9)#l{"+"ϫ_Q+vh�(NũO � � .?oS9S6\;hGNm@�g pu4 � � @~6�_<> /ȱ}G)F��2q<=G�@�+S Kxٲe%f*yI6S{^W @�@�0 j(s9e3@Hxar\؍@ [/]C�@<{N �f3 � ��"{PNi"j@aaRj|7(|BH�b�4�  _\N @�@�@�@@� Fŋ^@�@�@�@U6�f.$4&Nb\Z}ℜZ|;wNN._!YGJ|9bJnD8(a;wesIQQ$12JRvsvz;=W^-zw}7ǏBL3qx ILNu&42^G%dÒjϾSdl79űO(IVuBl@�@�R-`Mj/~,ώ~S~##ұP>p,;ynYo$ghC@7k->/,`~䗹gg(s9Re吡w欽 {ԀڲyQ E9jL"}v&{.wcӦM` 9!3r<W�]>wຽg˿Yx{EJA3}ӤJr̾+X{nѿOE p+}]D1@�@�g "۷ wJ)sde\ߛ[dZFU[f}eW~DR o0;<i)gkQ{X)dr ݺMZF&~I]ԬYn!}WnUF}]/ʿ ZKBRYwp6@�@�+F-G]_<ؾT*_VTmu}C֍xAtn+%!N}߫,_)ah 7KrlJ7evf>ԴQexJԥ]cyC7;>#?ngԶBXnvG=fֺ~M6|ٌh;{30tٲK|h}_nǏVZ˜9˭mRRmu򎀻 p{9ݬz> /'Zeoy ~2gT0]nzaly5z̖-{]}e;NJ~['f7mo</O$|sd5"v � �!KH2gρ];K UnB:xW3Ji?"Uii[t7Vj%QG)9"3KAX?4kq8KuԿyyZF6?/Ӟlo %<x=϶Qj/>{65u.$?/VNP94dg yr:Dz//)H>[ͧv-c[5UZ5iO:-;w .}p@6tE˵^d#@^^R{"VVdڳ7kU)ûKE=.U/SK{G?Wq9uliP{k5 4@v~W>kcb>i|D[~u?+Wlm\ � �%\-@7~,sH>$}vo$kMŻ?{K\@5,[lwZeHŠfbTd] c>ogm5/Kz(ޕquی;O-=~9ax sf 9ehJSԑcVlv"7j׵;Pt`LjXQbBBumd5r^2*e0Ic [vۭ`]wu\'N(=U.@~-mM\ q�8pu &Ӽ^%zFxխ`9WWʣcWt}w+e?IJyxH]'&6oG+7U*п̣@�@�(n�M>Wb�ѩ7l{kʹDUp`6ip]+r5lfN�5zͳ*]ZM.t뎅|?tTNZvYԷo_W<32u45Xf׀n.9֨T^9fu+U+S$󒎞Wvǯuw|=�ݱ#� �6;-7O)3Sni5z2'bOa kyNj!YEk`VUqwZjܽ~Th@t}~gZi?05S: gÇEfAKTZUnV9jM7n<q ȴ}7H>6/}ESW \Y&keS Mav` kDm|0ny2e>S6o\8p@5X~u� � P<YxRh?wAn7Cuk+0p*ܰ6K#Ҧ &Ylɫ\93-%i RS\=}~i_.[uoYWԪf$X|X;/RvO6 f&K.ǭ5jHddGX!p p%羛C=Li]˅\Z/##cӻ]]9t:R&c=c[Tz}y;ڛg&Ͱ/gϖ=oYft@�@�A o?iC.ItB[żlu%}^Jevz3fʡ-_Z6rۂ,'-dӫoا%6c@`˧ɦWސ-ot 1UZ_#Dȓ+V"vvѽ}̻1Oiɔר__PQ"Z^G%\B9a?m1\w_~v5֌K{gn_W!A77!_/ njla;ka!W[@s}o6CgX߶+pMժUv � �E+EZ}ߋE%έ[I6$8 I^MkA dI{Y?LG9#E[upٳGz-^vFQt*m&Mݳ`뉨AAAi|.xwm{\kwv .Xˢ'JxLTiY%+UʈTH]t[SHYA5 }7gH @�(.‹rn 4G:u >[E*]Hd[Vw .d<@Ro,mKJc z@�@�B �VT>:MOtL@�J@G|EE~dQR/ � p P@�@�@�@%@�@�@�@�r �N1I � � � �'@�, @�@�@�@ �+.!� � � �R/^ӑ1XxZ.PөU%qӳ6Kľurr|)΃SΟZJM.KWYbd&%犥/4@q }7 s/QsǩIvΣȡY?T{;mfPsv0T5:.k.hUZ.42^o=:#c1jO_syD�@�(^ <yV*>?F7NH /^i'O/j ^W?X\ #_.PxYkx9`�+/QGʒ~%!I0g7n*9e."CNKVf>,W_D`Pmb;NԊUj0IMN.4SԀfk?ɌMm=76Ʒ[MI #2quv{~'~L.ʍK[&^/&B"$ ?<"� �[Ȓ'Kg[OH+KЮܹrz*G~_N^#-.>Rޥ TOI.zQf,; qFҷ+WﻭF<-͟x/pV@hV 'Ǧ5]gz4mTLN]ǫd{@�@�(הrVE?ڨ,?p̉%Y`K^|E4Q~,{y{m#9.NvY/[yOILFnjL ?1'[/?Otַ_�ta^:Hغ{3IrLWxF`F]ʦ$$ʢ5#(tN[N^+{6g,'nvm}Yar`M^N5?^Zj-skyeɟi؏2j楧F!O2{aOGM|/sM/̓gm6[`>' 7JH 4zA6\^@`W}wLJc̽Jzoczͯ)zzO[nҾRq#9l9wZ?(,oУt~y~nS\[eFꈲ-o-12ӦTwr:2eIC:VGy[s<veXN@ˈƑHG\ޯnxW+M4`2@�@�\FezZ~a9*&Y\HO?J͛_R. ~R/:rDյ4Cѩ{=Ͼa}aө:qU3mek{!!;>HV{ܾ4mfsiB]/eȍS36Ɨ^&T3'/o+G/Q^Qv'm^~A2W_ 7|)-b}aZ1q)W:9<{tRJ<tXO>:H:-Z?aM2D7j`׺g_0Viu!<=>ڵ'oڢ_ZuJfSNΝ;… -?QQ &ٰ.ҰFc)ޚSx^YJת f}$*ݨ1]'6!mś3ȏ#g)/Uvow ,HR=-[+ɡ_di_;L֚a喟V}'58fݧr}JS˧N?r&GHu雯e?JW^2 `ѹ˸1YJXAjzHĊ`WT%FM4h11&FcFS)jLb5{X+`C@DT#]8T`ݾ}}{df5F` `e@^u蒥o6uuj4^y/^^K'ݡp|<0v^a-fZI T~mf&ooF4皵fo+bЩ*좹XKKi~+j9jy8 `L 0&i( 'CpjWiܑe~ϫ=MAĩ|pצ5}1vv:66 נk Cj[N,sV>(-ʇ13'qY<D,ٖHQ|pk.B9<{jԦ\946fPS1u˺RtQc`\;dnbM4Q=z+ kYxᨷ͔Ͽ2}?=+])Y.G-km� LT2>w:?GDP<<R$Kv2Rvcj]]:PU woZvk,gWU/[ƸlTwƍ('QccC ߢf2J^-?bJ<=xxnuH躨*ʆ}0q`#Yoؾepv҅c9Ga8N+y|dL 0&�xz kbfYO^{zS>3R:z\$ ݟEpc,߲924nRcfQWJt4\Q+SW5XjF<Ȓѫ:R5IQWuKKOH9cY{ 4 8D'u֠=7S<xThgW'L;e"V_$Kvπܮ5,D#_*efʴ;cqjOJm6u*i[RlDzdz|#&^m)#57VhlU%'aڒxOX*u; mu X=Z;i): zO,kҵ&# 4"&�`L 0@5O)ӣ?Ԭ; &1EZ)e%hac 9Q;ѮrjHAhC $E"6oʯ~G¢% -rw1GE'}Bpr =D*n@TFvn399Y:$]LhɷVXѫeo61^֎eFdV_<FĞQcT1\o(+Wnݺ4TUoYFVh})e8?<&I-vӸl^cV0;w:t萳ϙ@+ݬ߿%Mdep.MGnۯ%ZP<CNTWuo T W{´ NZ*h-g \'vl۶-rX݉j`œX+ PS/EhF)@NB(>쇏41hUoX/xUPsExyyjժEfL 0&�xJ=.kHIoO mxҩkc?D܍XDlڂFO( r!%=aE # -daT(zεkIB}ɥ(jYQAT `tI ]H֧k'QZf�Dc72E[RQ<3j+ר!bϰҖ/@=m6|v]kדbi["!%6WC;zKax8f(%:t舎; 0D$U劈E;2Y_Jr׹t09HX.-ݲ^Ύk 2ѡ7q}~MxoU+Hb녾|Rؑ2v8EEƶϫյCk-j'ֱp08FZ~Q.~!1哒툈e!⣑ˤ1\:uƿ{cL 0&�x8�v~=o_ '>G@[Kk񯿕^vSv(;JK˪"*u$l-񩃕롯T4�v`W-\z` )둲`ݫv0#.*vl/+{Z<rAOU_qeZМMͿ\1FqZ|3 xcyFHY$Xr4׵q#uԘuH9,=|UK _=}5?< ޳1`Z9˝}H8EM%آr.,%Mk9(qrňۤej1o`}r!0)Y_[ǎ_n WQ"j:Ѽ{('<C뮙ւ@d$9vU;_2~G[?<+]}AB*bohZ -ǯKeaMbuyjW6gK\h\5|wR κ02JqB J*6baaL 0&�x 7'#mJ 6q644YA k  (c' 믢V;~a?K[1ېBN!+:gY~b(CW_)'k2rM"GUI)#)Y.d-t-NNbQK[>ք3A1(>]"iIw;XYdw!~}&Fi#U,nA.:DX݃ .[w [zgfܗ֡:ℬM81gݜusi•έi:unz* Bhp "mp R@@n�`L <1M[_+95ZEtlʖ=Y^r5,Phe76}iNӛ>Z>$ȅ'/AXZ+>|իWs90H$9ڠHaNُZZ~)!^E$vVv+8"Tɓ'3XUDaL 0&@A[XA p]& L!�` ܻTdL 0&�x(7`L 0&�`L 0&�xBXL 0&�`L 0&�`EC`EÙGaL 0&�`L 0&�xBXL 0&�`L 0&�`EC`EÙGaL 0&�`L 0&�xBX?a݇}̑PbckwpU(<=7!%["{2}'E5\N8L &{ʂԛ7:~/wG{ n:-{p1<޹+&�`L 0& {ش-`6kl }6@\]Q^_; d]k5bT<ӱgވ1z|/ ֩XӦNL1ޝ3pqR'}U Dߠ' 87Ԫ>ZU4W܃Ωe`)bKAͣǰ=^ 6;9fE?݇5/٤^˾3=WC0&�`L 0 `as,Cbbn_5m^{=}\w5.lQc|dV*jxvo..h<y"B/+�ML2ǿrM\?Sr Oi,<xnލ[y)33.'�`L 0&@q&Pl-x}&|'˟|-o2/"G(z6|zE4)te]EcC^]퓧dǦ^}zMxl4TZbɑISpdTؔix!9<#(۝<?Lܵr5ʷj%oDVTC{yq溲ikU<(҇% ߰ ~Ouqr3</jA4iZ\~u%k]#^kdex%L!ސRIr?- >j7T˕uN DJJ\tG즾6MZ(o_Fhm ODzN2j>'�`L 0&@q&Pl` h,<Fj}u""sS=O [V3KCqX&23qyĞuX9= fMk5o}cޖr=EͨЪ%\4%eyr5YWI܍C8~'_e~Pkc<{ܑw˷h+Gi,aytkDd>@I7 ~TEn! AKjo#1<7Ā*'T$b:u tjTvǜwPl-ew9ۣ<6)q <.ҺKhr=bsS=6A;`ݯV1h"Ee :IqM}uz<UUce[k˨=jWhjpI|cObS>l]3`5?J1٬S'L 0&�`L(v3)oWz˭ܽ6&TK*-eef_LNqzMr ,"6s;Y2:U X Ŕ?{ڇG1<nT\UhvrX,W jU6~Uda3EiUc{ن*yv錰k;�U{D)+Kپ3AdEUO{v_Є!М=k wQ;xe}ZVUӜ`e|}@/{OOu]ss4xmҞ[ի!l:*mrI< 7ve<{.*u"ݲMpi Lk"b )rm(]t"Y)s<WZP}nU~`-Fm [{'�`L 0&@q$P,`S7G*H;x%PG~a>ȥ,-PWr5MMrڹ[-2wR^RĹvM%)-(b,L} WX]XރRfZ,=1=>׶D7_W.,\"]/6Uq/9YXjhV*`"?uWUcܸqUr&T(n ,RoYf$%{AgʴcH1Eh enʵ-`SEbh)χY~:/7 yk6SlYӆb=xE5L 0&�`L8]]p ǐkիz[ Lzj^IKX^bz:HXڽ",uďi7@ףι\yJ;嘐FHI(S+x9՞#Yϓ ,m . 2Ј U5rx >' K`wZ(,? $nG7P%$$ȑ#p5j:J,Fl"_B*5k^ħ,U\-4?xv鈚\}fmݺ6- @^[դs-a!,b6sN.v!϶\�`L 0&Lf|gK^OFZ >[_\lR\v"6mAJ<&+m_ԉ{C*vqn!Tק@Tʪ5OtsCq!X\ #)Aۺrn8d"%mң;N ڵ`^AζEl2Bpv;J5k*ݜȭ)CXk')ӔW2APPw~ԩ3>t/!KLaQ|OX~;tBZD~9^/ť+@?8P,}*bMa+辙g;41p='AtR>ڶ21i.:t舎; `L 0&�0uRf7q͟\-lf}[NHrq2㖾tF/b,^ι9x￈]ξ¢*XXN{,Mmε(KmGxYd+o?}13xo'd}|P]Yd=FJAyR]GwA,U>vz/]g[MbmD"<hR*qqqk_;Lԥ\B1TU_}!~n- $s++yl2ut_ۮ\SWjKjW5!-ڋכv[ۑp+v|T)iI777%L 0&�`LX0__貨[2<%QDu?Rv'F*HꒅH 6 toh:_: rYRqGDȥSh RY\r)a:2e*>3>} u-aMnmN\` P)­r?mA֖cqxfG[&vnM9<g$"6R北N|0ǎ;ĨQrj<Lm�`L O3wi! FPSG~umF2E/3js U[Fʫ2)[Vo0 1bzL|I dE;<88�RI )e+;sAg%.`L 0&�`&H`&xӊ˔{6y?uf氯T]W.GVyU|6mh�(rcyµFA?Uu'LbaL 0&�`ō�+5щUyU(:o^\ 0&P|z0&�`L 0& O1&�`L 0&�`L <�{ &�`L 0&�`L 0�+{3cL 0&�`L 0&�xX rL 0&�`L 0&�`O/V=P3w#dۘ#Gz@"j) %%䫨$EFo͛d{h/B[8? wߡy2Joya2C"ԱhE:u%V6p%:$^'mv/1WoăL/^S .=}F"b..tZsx Iv9%:ҹȺCbp9C R+ȸoEjL 0&�`L�b� _~d�C)w|P+ |]P={F*P|yptQ$m3q9\\~c]9 .bVl7Hy(<F[u0s`Y ]LV奻/t&˷1iQ )3NǪWLmڏd%G]Ǯ_ŃY^3g]x8w2+t"vqڟW܃Ω}uʫ'0{ZVTOU;NDME}'zeHsGJFi[a>}[" B&�`L 0 X]d%h~(PZ6 *™5m^{وwoBiE6favqA%h��&IDAT:.XY.K<ߗ_*p'`M`G~Ï]2t^7ٲ.xǰ|ܷЮ:z]hUjx8>aKLֹGq?;G�`L 0IXZ)wcix8ó쭭{ ˶;ѧ:ʜ=æ}8\2RS630X쾰55,^<ey0Ζp+zSwąݻ}c)ִ _{!ӰC'aYrܝG ͯ䆴d>x5\IyZgʪ5_:R?ۇ$2Q4tw}Oj ;7/oܬ^ ii8:)04R6lKhР!""4nJ~aSg?sS0n aݥݻ/#-HL�r_$a}-lzy)zNބ;Ii\[k<cޞ| lV XrO_.=.w2,sImBftd CsvI( w5@D Ae[c4JyI?u_[Oo0S'uߴw6ORRRK "+8⽾ `ok2ŗe'Pi"9cR5 hJ:@BWF\*z|Q~gLݢ JtaYGcweaJIf>dUEkIKߗkVA d}s?T}$n@Y[ȝ+4C4WXE3u3!wkZik8aztXU)k?c\(eA'K&1s@=-w*ϊ>kyy>(x#|u�`L 0MX+<?DLbJm~ m6TG$$I' S+G祡yLPHbsj{ujdž5wjzHmCqޅ5&K{{t|5m"Fnنi__pm.O>Ch6m ?εk<A<=:JYXըZ)S(}9Ur ߰ e||u?H s1JP|ݞ[&s ܚ7þ1o.uyThRNk''Y~R@]]?OG߳pyjDlX๷i _S.ZtSN!M\zO=Y[/|=ڴ_E{`XGofFT+zP|kĭ$kQg0- ܛH9`{U# ykQ<fΎbeëg|ZG/!it+ n_C>%I73^o)\hF_[WsDvwRyWU 8k_ש 5 o~i<k-|:-['84cW(۠^U)Aϙ[8b=Ӹ2j)W,'ef'Of+d|޴?ӆ7M軰tTp(')scҐXaGl>/e؁rHh'o3Vߝ]{;\ ԏGY;l;5 f>?94==4Uu󦷩៽1�Ig,u(zwW[sֹ A(té0kl AG V{v#.bMDlFE�u ?v1~ԭ_nw7]C҇cwxg_\{w똶D9o:3`} NʮދOa1uh2OTe>�`L 0&MX@[[bhX ^ucң4)Zܽ4T ){*eef_LN_66BI6#`ի]+ffpV>(-H}j,μOVoԅEKoQ޲Y4sh�Rr5_H"s z kʺmek(߲x \{h4DW Uhx'7ʬrp%L<ǹ,$ ]MYi:IV[ӥe+@|Q'j OIy!yi`u 8ذZB<ixPn:٪vTC|L<{WtJ6uѶ<^eq3^s]6VU ;"^|6Vt>WNg >>2@?Yڕ\#qR?[xLXjy?ߺ|<rS*ʞiVYv׾lgzu[AZgJ<4FVBoxf ŋe[9UM}5Vqr]!j2NR [7W'j"~e?,T^fњ)ַTX?r`ƌ(]t"*iY5Wݡydً !IHA|_VS p\fxFeRCSW$XB_j/f>&EE)x;E (Z*BRhn =^R Z+.2V(%zUV7'-HN?((",`ߒ}?Ȯ5 reX$e(`рFBtiHkYj.8vG\mHJV^%V(;Zשo^'ɫ3&�`L@!PL`VWK^ceq+9wOh<R+d"U12)#IHfxDG)#WeEJ $#Yc, )#U!YV(ei Q$#SrW%)"6BeAm Bp4$ r۱]@j ei 8P)vW #ܓHѕqR\,+=lCP2*+-gW;D^i>n$;),%E"Շb(ȵq 4z8N{Z֖Z,5d.$ xL1%]ͼN^6; E?m#),HkiJTEXs&Gi,#lU`)֧qW j$,x\1Mӎ7}DNlez]a5h oBDVJ&}|\[Z JR~:٨.3  K@TXGZ%K7Ro<q'?kl8!9R|1rU(IHʯh}]&`yW^9q Ԟ䄰d%auѺtJhu? 0IĊ(H ˝>d{fTOA7:e=!yL 0&�P d?)Y/hcȸD[[*62rwD`vvwI%/{t W>E"6oʯ~G‹,zd|KᲧ"+1}Br:pMv+ree>͟cb#<j(~ .%9d=FjfnHHVr,C[WWyo`ˆxhUX:hq]: k4:}Aĉ!۶m yFwbdEƠ+sɇٛku ŕb]uDW_i" -r"y_y4oNU)(>ҥ}U2|54RVݤkRٝ|e՗A@RHV3 Sw/֢[FXR<R6tjT*狋d|@ rSxXuIRjkFeom,dpE+`jA򒇙)L!7)jq fb$,\5B6Y򚃾|D~U(U*.)zf<o9A_oG/}ɸ?q'GF\~靄bI +Yr%!ARgʠXڧ`]dp' 4ĿbKh$4) EY�`L 0&`q  hIy1xW./MbCVJi$ cTߋRzR2_>tB.*,|fx QF,n8(OJZHEGF ʊdp>@"%!|&<޾R%`tO ]H^xi ʿ٩N[Փb)=re@HWFbEF^4_Ry4] ӎw@y;vwyFZg^uՄ(2QG)mƣ F%3ߣieyN_qiVbC<R~`j"5$YQjGq-/ E5ʂR9n[^ׅX߽WDl?R:,~HZߌTMSu’,v&/8*SQ8#-(3P|+\&ˠңY%JyAD[Bm&]& ; 0/ȒOXQBRoH.!SX!F=/~]z4>Y\/([K[m-\h+8ۡpcz iQG 1#XZ)sE(CW祦PT,#r'e+l%!?ўO~u 0&�`hbGˆY7쎿PKjH1f}x"%˰ܻ*ёd <Z!+QK'\K|4S*R)H{=KKelFaYB_9gʳϠP E#wVejc]'PPVu.h;W|qeY>q/\Tۛ iev$ 8k&j >Q1ݒwΟ@M'vIlq[še@MN;)A[|Jijh.,ՊJWvyrH L,ʽ9a ~8={-bSm퓐[%]7y DaMnpi.9#W[ю-^id@B\=bi U%a%%ֵz5^G='9){l\ ڌdNj/_?ҋVJ [زzՕJ5We -ArSbwGm|gjvt8_Z)VeT{GyP,·,Ti'ZRVx?RuՖb]?z2f+LR8qpU>qf K"vҏ:oJҌEډQqm.Zރ6P[v?",߈jkz~BkP-uR^+< ̇bE"Nh]rS(uԞOq>`L 0&$B 644>|LVI1 75nK6zϯQ{,l z#F*_ &"עs JOHn.9=8YK BM.#̭5͕\P@C2g92Ȳƴ9 2-M2ڹWcl AA<T*.QE1z6bѵ"ְVgd wMjYܱG<k�jnjS Br6v]QҚbnkk'Wi:R,-rJĂt_!cmE.dU)|ʓbi+ܴ%kV)�RкsMeAx{\,}Shx>Z6oĥA9=_a<i̸p߻G4G~=W2'g0&�`O-^F-sڔ҇bhFE}Y99RͣS(qvU,3tN.+̂@鏔J~%i=$X^=[ͅ;oHS9 =WrpQTOKºk'c% hCg"* ;B�CȧWQ ;U܊f혲,mbd^o1g}_S* ˝TlRoEGe>1ڹfL 0&@nVR9 &@.KJ}5.g/6j\ 0&`kU NdY~j7.,L 0&�(XV>_ ^,On `L �7 `L 0&@`L 0&�`L 0&�`L `װ W_�`L 0&�`L 0&�?L 0&�`L 0&�`Ś�+ۛpf<%&�`L 0&�`L b�eJKK+xy#GLi<W&�LqM={KyQv#3^x5\^bp-]%s&;8#盐-AONǽLb2eL 0&@I'Pl`n?я('^du֭vޘ?̛'@&`nĦo7CWo}u>.Sa҂r?6Ljv ^/k^7 Z<0k2&�`L(�2 aߗO}zw; &uVVVhԨ5̛yL 8a-q7/ 0&�`L lGUĥelmPn+.8&wcxL "P\\&2/^š6ptT,^k:#㟆M1S]۱K-˼!ۭlZo;�ď4$y]\ ?$.,^Gn.Dcn}a0î*qcpyJl~9ߓ޹mPW.a^B _Uwގ39xYX݈ӄ-|�_-;JC2?Jt"߮8u8vAfIGNA/v^//łM hfB}=!e;_qTs 0&�`Ld K[qqsk`72o-GB{nܹsd?`<q&JS_w۴?ʛR.Zyfz:BBN©OXKs&?r�U{?m_DZl,J\g% }rI^e+z굲[ݰq-1>%xoV!3zC*;| m̦u(O޼nWr%y]JCC :8upOS=իSO _h/6~{N_ڃe޺CxaLK>"mڽ8u%{DcpN2RbTm|2}SUM]| 8�Ig,uk6c;VPb@pk`L 0&MX*(�sPD480/U o,t =ѣz 9=58 0&t0u^+a{z0с[qpk}7 dY^{H1Xiϊ2/1LPQ(|3ssY' [Hs}o)`k?\߻OM�fMQX:~)Ѻ?x xAkem;P(ߪ}Sތa;1ct+gcÊHåEM7<ת2z4u*5WK$axn5ѳyee/m(1iϑ]kbk A G$^TgӫUHĔ{hY<o m ͯu㶮]A[YG W'X4)X�`L 0&L@lyh."^fh߈Oi1KƯnݺ̼yL <e5t眼kb'//y={N*}).-,e!U3"iiozUʫεkI7˰5I++aR)Fʱ ep'qǻ½ѮBy7vj))2QXXѫL6p@c]LHD;EDNFClE[ݪ.oh:$.\K�Hu0K(oƧbQ')h\RR5QqI鲌ߊѯ`<`L 0&PbKciy-4[XZ$ih*o[lE@@�xC׵q &MT.@1%P\]C')"2KciXRG#x<wp/]X#Q'+x`ujK˼*jk;v"#5=s̖J/ꏔl@f&KʊeUF+Gs ;;8TH1aF1.ZT~*;x m۶q ).]=iW̔T<yo}ԬT&@=g*l~k$na74 4ʧ]4i4`L 0&jz68>Ue}AHLKǜdjeu6SP*|<ˌ><3t!!!9 0&P˺kڅPq$ -rRP>͜ȆHE} K,CeM#d,!@**n)۹6i,/c^XX*J|Co߽},5TUoرн{DEE-c(H_gCb(S[#˲RBc6ty<'5ӡ։_E]r|,2`L 0&i(`NX:7 މU=sLdx:{,|\[rNH\mr9`L( u7?^.bjeu;ww)ϕ8b2Mu8Lr$(Uf_#Yߣ}�((? #!W&}>/yLVPG*veHͿ b m 3E%(-ǯy~5a0 rY[ǐ[[LjK.Bkƺ6P岬ZL 0&�`ML(Z4�:POJ2V7Ry(y_LA=t萴vwt,/;t'L I,,}}},ϫ DHk3)=8¯n aQaHu.0iB33wrcdE.bL4+c^fbcr'I[/ Q׋KN Tp.%˸�\lE,4BY8Xi,EKݢã1&�`C@/)lk!aQ4ACB KK\Q/>3�`O22݆\ 6o_bCezheRkU˕]( j"(SZ(U!˯'caL 0&�(^ToMEؙLS<7`Lغ  `L 0&�`I`yxL 0&PD(}7Gh< `L 0&�`nЋ1�`L 0&�`L 0& meKO<����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/�����������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021303�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/components/������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023470�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/components/DatePicker/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025503�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/components/DatePicker/index.ts�����������������������0000664�0000000�0000000�00000000327�14467713645�0027164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import dayjsGenerateConfig from 'rc-picker/lib/generate/dayjs'; import generatePicker from 'antd/lib/date-picker/generatePicker'; const DatePicker = generatePicker(dayjsGenerateConfig); export default DatePicker; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/index.less�������������������������������������������0000664�0000000�0000000�00000001505�14467713645�0023303�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������@import '~antd/lib/style/themes/default.less'; .field-hidden { display: none; } .form-group.field-object { margin-bottom: 0; } .form-group:not(.field) { // Add margin below oneOf / anyOf dropdown. margin-bottom: @form-item-margin-bottom; } .object-property-expand { // Add margin below the `additionalProperties` related add button. margin-bottom: @form-item-margin-bottom; } // .panel.panel-default.panel-body > .ant-row > fieldset > .ant-col.ant-form-item-label { .panel.panel-default.panel-body fieldset > .ant-col.ant-form-item-label { // Hide oneOf / anyOf object title. display: none; } .panel.panel-danger.errors { margin-bottom: @form-item-margin-bottom; .list-group .ant-list-item { margin-left: 0; margin-right: 0; .anticon.anticon-exclamation-circle { color: @red-6; } } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/index.ts���������������������������������������������0000664�0000000�0000000�00000001637�14467713645�0022771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ComponentType } from 'react'; import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import { FormProps, ThemeProps, withTheme } from '@rjsf/core'; import Templates, { generateTemplates } from './templates'; import Widgets, { generateWidgets } from './widgets'; export function generateTheme< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): ThemeProps<T, S, F> { return { templates: generateTemplates<T, S, F>(), widgets: generateWidgets<T, S, F>(), }; } const Theme = generateTheme(); export function generateForm< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): ComponentType<FormProps<T, S, F>> { return withTheme<T, S, F>(generateTheme<T, S, F>()); } const Form = generateForm(); export { Form, Templates, Theme, Widgets, generateTemplates, generateWidgets }; export default Form; �������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/�������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023301�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/ArrayFieldItemTemplate/��������������������0000775�0000000�0000000�00000000000�14467713645�0027636�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/ArrayFieldItemTemplate/index.tsx�����������0000664�0000000�0000000�00000005105�14467713645�0031506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Button from 'antd/lib/button'; import Col from 'antd/lib/col'; import Row from 'antd/lib/row'; import { ArrayFieldTemplateItemType, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; const BTN_GRP_STYLE = { width: '100%', }; const BTN_STYLE = { width: 'calc(100% / 4)', }; /** The `ArrayFieldItemTemplate` component is the template used to render an items of an array. * * @param props - The `ArrayFieldTemplateItemType` props for the component */ export default function ArrayFieldItemTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateItemType<T, S, F>) { const { children, disabled, hasCopy, hasMoveDown, hasMoveUp, hasRemove, hasToolbar, index, onCopyIndexClick, onDropIndexClick, onReorderClick, readonly, registry, uiSchema, } = props; const { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } = registry.templates.ButtonTemplates; const { rowGutter = 24, toolbarAlign = 'top' } = registry.formContext; return ( <Row align={toolbarAlign} key={`array-item-${index}`} gutter={rowGutter}> <Col flex='1'>{children}</Col> {hasToolbar && ( <Col flex='192px'> <Button.Group style={BTN_GRP_STYLE}> {(hasMoveUp || hasMoveDown) && ( <MoveUpButton disabled={disabled || readonly || !hasMoveUp} onClick={onReorderClick(index, index - 1)} style={BTN_STYLE} uiSchema={uiSchema} registry={registry} /> )} {(hasMoveUp || hasMoveDown) && ( <MoveDownButton disabled={disabled || readonly || !hasMoveDown} onClick={onReorderClick(index, index + 1)} style={BTN_STYLE} uiSchema={uiSchema} registry={registry} /> )} {hasCopy && ( <CopyButton disabled={disabled || readonly} onClick={onCopyIndexClick(index)} style={BTN_STYLE} uiSchema={uiSchema} registry={registry} /> )} {hasRemove && ( <RemoveButton disabled={disabled || readonly} onClick={onDropIndexClick(index)} style={BTN_STYLE} uiSchema={uiSchema} registry={registry} /> )} </Button.Group> </Col> )} </Row> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/ArrayFieldTemplate/������������������������0000775�0000000�0000000�00000000000�14467713645�0027017�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/ArrayFieldTemplate/index.tsx���������������0000664�0000000�0000000�00000010013�14467713645�0030661�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getTemplate, getUiOptions, ArrayFieldTemplateProps, ArrayFieldTemplateItemType, FormContextType, GenericObjectType, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; import classNames from 'classnames'; import Col from 'antd/lib/col'; import Row from 'antd/lib/row'; import { ConfigConsumer, ConfigConsumerProps } from 'antd/lib/config-provider/context'; const DESCRIPTION_COL_STYLE = { paddingBottom: '8px', }; /** The `ArrayFieldTemplate` component is the template used to render all items in an array. * * @param props - The `ArrayFieldTemplateItemType` props for the component */ export default function ArrayFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateProps<T, S, F>) { const { canAdd, className, disabled, formContext, idSchema, items, onAddClick, readonly, registry, required, schema, title, uiSchema, } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const ArrayFieldDescriptionTemplate = getTemplate<'ArrayFieldDescriptionTemplate', T, S, F>( 'ArrayFieldDescriptionTemplate', registry, uiOptions ); const ArrayFieldItemTemplate = getTemplate<'ArrayFieldItemTemplate', T, S, F>( 'ArrayFieldItemTemplate', registry, uiOptions ); const ArrayFieldTitleTemplate = getTemplate<'ArrayFieldTitleTemplate', T, S, F>( 'ArrayFieldTitleTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; const { labelAlign = 'right', rowGutter = 24 } = formContext as GenericObjectType; return ( <ConfigConsumer> {(configProps: ConfigConsumerProps) => { const { getPrefixCls } = configProps; const prefixCls = getPrefixCls('form'); const labelClsBasic = `${prefixCls}-item-label`; const labelColClassName = classNames( labelClsBasic, labelAlign === 'left' && `${labelClsBasic}-left` // labelCol.className, ); return ( <fieldset className={className} id={idSchema.$id}> <Row gutter={rowGutter}> {(uiOptions.title || title) && ( <Col className={labelColClassName} span={24}> <ArrayFieldTitleTemplate idSchema={idSchema} required={required} title={uiOptions.title || title} schema={schema} uiSchema={uiSchema} registry={registry} /> </Col> )} {(uiOptions.description || schema.description) && ( <Col span={24} style={DESCRIPTION_COL_STYLE}> <ArrayFieldDescriptionTemplate description={uiOptions.description || schema.description} idSchema={idSchema} schema={schema} uiSchema={uiSchema} registry={registry} /> </Col> )} <Col className='row array-item-list' span={24}> {items && items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType<T, S, F>) => ( <ArrayFieldItemTemplate key={key} {...itemProps} /> ))} </Col> {canAdd && ( <Col span={24}> <Row gutter={rowGutter} justify='end'> <Col flex='192px'> <AddButton className='array-item-add' disabled={disabled || readonly} onClick={onAddClick} uiSchema={uiSchema} registry={registry} /> </Col> </Row> </Col> )} </Row> </fieldset> ); }} </ConfigConsumer> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/BaseInputTemplate/�������������������������0000775�0000000�0000000�00000000000�14467713645�0026667�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/BaseInputTemplate/index.tsx����������������0000664�0000000�0000000�00000006407�14467713645�0030545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import Input from 'antd/lib/input'; import InputNumber from 'antd/lib/input-number'; import { ariaDescribedByIds, BaseInputTemplateProps, examplesId, getInputProps, FormContextType, GenericObjectType, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; const INPUT_STYLE = { width: '100%', }; /** The `BaseInputTemplate` is the template to use to render the basic `<input>` component for the `core` theme. * It is used as the template for rendering many of the <input> based widgets that differ by `type` and callbacks only. * It can be customized/overridden for other themes or individual implementations as needed. * * @param props - The `WidgetProps` for this template */ export default function BaseInputTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: BaseInputTemplateProps<T, S, F>) { const { disabled, formContext, id, onBlur, onChange, onChangeOverride, onFocus, options, placeholder, readonly, schema, value, type, } = props; const inputProps = getInputProps<T, S, F>(schema, type, options, false); const { readonlyAsDisabled = true } = formContext as GenericObjectType; const handleNumberChange = (nextValue: number | null) => onChange(nextValue); const handleTextChange = onChangeOverride ? onChangeOverride : ({ target }: ChangeEvent<HTMLInputElement>) => onChange(target.value === '' ? options.emptyValue : target.value); const handleBlur = ({ target }: FocusEvent<HTMLInputElement>) => onBlur(id, target.value); const handleFocus = ({ target }: FocusEvent<HTMLInputElement>) => onFocus(id, target.value); const input = inputProps.type === 'number' || inputProps.type === 'integer' ? ( <InputNumber disabled={disabled || (readonlyAsDisabled && readonly)} id={id} name={id} onBlur={!readonly ? handleBlur : undefined} onChange={!readonly ? handleNumberChange : undefined} onFocus={!readonly ? handleFocus : undefined} placeholder={placeholder} style={INPUT_STYLE} list={schema.examples ? examplesId<T>(id) : undefined} {...inputProps} value={value} aria-describedby={ariaDescribedByIds<T>(id, !!schema.examples)} /> ) : ( <Input disabled={disabled || (readonlyAsDisabled && readonly)} id={id} name={id} onBlur={!readonly ? handleBlur : undefined} onChange={!readonly ? handleTextChange : undefined} onFocus={!readonly ? handleFocus : undefined} placeholder={placeholder} style={INPUT_STYLE} list={schema.examples ? examplesId<T>(id) : undefined} {...inputProps} value={value} aria-describedby={ariaDescribedByIds<T>(id, !!schema.examples)} /> ); return ( <> {input} {Array.isArray(schema.examples) && ( <datalist id={examplesId<T>(id)}> {(schema.examples as string[]) .concat(schema.default && !schema.examples.includes(schema.default) ? ([schema.default] as string[]) : []) .map((example) => { return <option key={example} value={example} />; })} </datalist> )} </> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/DescriptionField/��������������������������0000775�0000000�0000000�00000000000�14467713645�0026530�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/DescriptionField/index.tsx�����������������0000664�0000000�0000000�00000001060�14467713645�0030374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { DescriptionFieldProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `DescriptionField` is the template to use to render the description of a field * * @param props - The `DescriptionFieldProps` for this component */ export default function DescriptionField< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: DescriptionFieldProps<T, S, F>) { const { id, description } = props; if (!description) { return null; } return <span id={id}>{description}</span>; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/ErrorList/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025226�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/ErrorList/index.tsx������������������������0000664�0000000�0000000�00000002260�14467713645�0027075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Alert from 'antd/lib/alert'; import List from 'antd/lib/list'; import Space from 'antd/lib/space'; import ExclamationCircleOutlined from '@ant-design/icons/ExclamationCircleOutlined'; import { ErrorListProps, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; /** The `ErrorList` component is the template that renders the all the errors associated with the fields in the `Form` * * @param props - The `ErrorListProps` for this component */ export default function ErrorList<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ errors, registry, }: ErrorListProps<T, S, F>) { const { translateString } = registry; const renderErrors = () => ( <List className='list-group' size='small'> {errors.map((error, index) => ( <List.Item key={index}> <Space> <ExclamationCircleOutlined /> {error.stack} </Space> </List.Item> ))} </List> ); return ( <Alert className='panel panel-danger errors' description={renderErrors()} message={translateString(TranslatableString.ErrorsLabel)} type='error' /> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/FieldErrorTemplate/������������������������0000775�0000000�0000000�00000000000�14467713645�0027032�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/FieldErrorTemplate/index.tsx���������������0000664�0000000�0000000�00000001315�14467713645�0030701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FieldErrorProps, FormContextType, RJSFSchema, StrictRJSFSchema, errorId } from '@rjsf/utils'; /** The `FieldErrorTemplate` component renders the errors local to the particular field * * @param props - The `FieldErrorProps` for the errors being rendered */ export default function FieldErrorTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldErrorProps<T, S, F>) { const { errors = [], idSchema } = props; if (errors.length === 0) { return null; } const id = errorId<T>(idSchema); return ( <div id={id}> {errors.map((error) => ( <div key={`field-${id}-error-${error}`}>{error}</div> ))} </div> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/FieldTemplate/�����������������������������0000775�0000000�0000000�00000000000�14467713645�0026020�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/FieldTemplate/index.tsx��������������������0000664�0000000�0000000�00000005554�14467713645�0027700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Form from 'antd/lib/form'; import { FieldTemplateProps, FormContextType, RJSFSchema, StrictRJSFSchema, getTemplate, getUiOptions, GenericObjectType, } from '@rjsf/utils'; const VERTICAL_LABEL_COL = { span: 24 }; const VERTICAL_WRAPPER_COL = { span: 24 }; /** The `FieldTemplate` component is the template used by `SchemaField` to render any field. It renders the field * content, (label, description, children, errors and help) inside of a `WrapIfAdditional` component. * * @param props - The `FieldTemplateProps` for this component */ export default function FieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldTemplateProps<T, S, F>) { const { children, classNames, style, description, disabled, displayLabel, errors, formContext, help, hidden, id, label, onDropPropertyClick, onKeyChange, rawErrors, rawDescription, rawHelp, readonly, registry, required, schema, uiSchema, } = props; const { colon, labelCol = VERTICAL_LABEL_COL, wrapperCol = VERTICAL_WRAPPER_COL, wrapperStyle, descriptionLocation = 'below', } = formContext as GenericObjectType; const uiOptions = getUiOptions<T, S, F>(uiSchema); const WrapIfAdditionalTemplate = getTemplate<'WrapIfAdditionalTemplate', T, S, F>( 'WrapIfAdditionalTemplate', registry, uiOptions ); if (hidden) { return <div className='field-hidden'>{children}</div>; } // check to see if there is rawDescription(string) before using description(ReactNode) // to prevent showing a blank description area const descriptionNode = rawDescription ? description : undefined; const descriptionProps: GenericObjectType = {}; switch (descriptionLocation) { case 'tooltip': descriptionProps.tooltip = descriptionNode; break; case 'below': default: descriptionProps.extra = descriptionNode; break; } return ( <WrapIfAdditionalTemplate classNames={classNames} style={style} disabled={disabled} id={id} label={label} onDropPropertyClick={onDropPropertyClick} onKeyChange={onKeyChange} readonly={readonly} required={required} schema={schema} uiSchema={uiSchema} registry={registry} > <Form.Item colon={colon} hasFeedback={schema.type !== 'array' && schema.type !== 'object'} help={(!!rawHelp && help) || (rawErrors?.length ? errors : undefined)} htmlFor={id} label={displayLabel && label} labelCol={labelCol} required={required} style={wrapperStyle} validateStatus={rawErrors?.length ? 'error' : undefined} wrapperCol={wrapperCol} {...descriptionProps} > {children} </Form.Item> </WrapIfAdditionalTemplate> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/IconButton/��������������������������������0000775�0000000�0000000�00000000000�14467713645�0025365�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/IconButton/index.tsx�����������������������0000664�0000000�0000000�00000006166�14467713645�0027245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Button, { ButtonProps, ButtonType } from 'antd/lib/button'; import ArrowDownOutlined from '@ant-design/icons/ArrowDownOutlined'; import ArrowUpOutlined from '@ant-design/icons/ArrowUpOutlined'; import CopyOutlined from '@ant-design/icons/CopyOutlined'; import DeleteOutlined from '@ant-design/icons/DeleteOutlined'; import PlusCircleOutlined from '@ant-design/icons/PlusCircleOutlined'; import { getUiOptions, FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString, } from '@rjsf/utils'; // The `type` for IconButtonProps collides with the `type` for `ButtonProps` so omit it to avoid Typescript issue export type AntdIconButtonProps< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any > = Omit<IconButtonProps<T, S, F>, 'type'>; export default function IconButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: AntdIconButtonProps<T, S, F> & ButtonProps ) { const { iconType = 'default', icon, uiSchema, registry, ...otherProps } = props; return <Button type={iconType as ButtonType} icon={icon} {...otherProps} />; } export function AddButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: AntdIconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <IconButton title={translateString(TranslatableString.AddItemButton)} {...props} block iconType='primary' icon={<PlusCircleOutlined />} /> ); } export function CopyButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: AntdIconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return <IconButton title={translateString(TranslatableString.CopyButton)} {...props} icon={<CopyOutlined />} />; } export function MoveDownButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: AntdIconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <IconButton title={translateString(TranslatableString.MoveDownButton)} {...props} icon={<ArrowDownOutlined />} /> ); } export function MoveUpButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: AntdIconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return <IconButton title={translateString(TranslatableString.MoveUpButton)} {...props} icon={<ArrowUpOutlined />} />; } export function RemoveButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: AntdIconButtonProps<T, S, F> ) { // The `block` prop is not part of the `IconButtonProps` defined in the template, so get it from the uiSchema instead const options = getUiOptions<T, S, F>(props.uiSchema); const { registry: { translateString }, } = props; return ( <IconButton title={translateString(TranslatableString.RemoveButton)} {...props} danger block={!!options.block} iconType='primary' icon={<DeleteOutlined />} /> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/ObjectFieldTemplate/�����������������������0000775�0000000�0000000�00000000000�14467713645�0027147�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/ObjectFieldTemplate/index.tsx��������������0000664�0000000�0000000�00000012650�14467713645�0031022�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import classNames from 'classnames'; import isObject from 'lodash/isObject'; import isNumber from 'lodash/isNumber'; import isString from 'lodash/isString'; import { FormContextType, GenericObjectType, ObjectFieldTemplateProps, ObjectFieldTemplatePropertyType, RJSFSchema, StrictRJSFSchema, UiSchema, canExpand, descriptionId, getTemplate, getUiOptions, titleId, } from '@rjsf/utils'; import Col from 'antd/lib/col'; import Row from 'antd/lib/row'; import { ConfigConsumer, ConfigConsumerProps } from 'antd/lib/config-provider/context'; const DESCRIPTION_COL_STYLE = { paddingBottom: '8px', }; /** The `ObjectFieldTemplate` is the template to use to render all the inner properties of an object along with the * title and description if available. If the object is expandable, then an `AddButton` is also rendered after all * the properties. * * @param props - The `ObjectFieldTemplateProps` for this component */ export default function ObjectFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ObjectFieldTemplateProps<T, S, F>) { const { description, disabled, formContext, formData, idSchema, onAddClick, properties, readonly, required, registry, schema, title, uiSchema, } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const TitleFieldTemplate = getTemplate<'TitleFieldTemplate', T, S, F>('TitleFieldTemplate', registry, uiOptions); const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; const { colSpan = 24, labelAlign = 'right', rowGutter = 24 } = formContext as GenericObjectType; const findSchema = (element: ObjectFieldTemplatePropertyType): S => element.content.props.schema; const findSchemaType = (element: ObjectFieldTemplatePropertyType) => findSchema(element).type; const findUiSchema = (element: ObjectFieldTemplatePropertyType): UiSchema<T, S, F> | undefined => element.content.props.uiSchema; const findUiSchemaField = (element: ObjectFieldTemplatePropertyType) => getUiOptions(findUiSchema(element)).field; const findUiSchemaWidget = (element: ObjectFieldTemplatePropertyType) => getUiOptions(findUiSchema(element)).widget; const calculateColSpan = (element: ObjectFieldTemplatePropertyType) => { const type = findSchemaType(element); const field = findUiSchemaField(element); const widget = findUiSchemaWidget(element); const defaultColSpan = properties.length < 2 || // Single or no field in object. type === 'object' || type === 'array' || widget === 'textarea' ? 24 : 12; if (isObject(colSpan)) { const colSpanObj: GenericObjectType = colSpan; if (isString(widget)) { return colSpanObj[widget]; } if (isString(field)) { return colSpanObj[field]; } if (isString(type)) { return colSpanObj[type]; } } if (isNumber(colSpan)) { return colSpan; } return defaultColSpan; }; return ( <ConfigConsumer> {(configProps: ConfigConsumerProps) => { const { getPrefixCls } = configProps; const prefixCls = getPrefixCls('form'); const labelClsBasic = `${prefixCls}-item-label`; const labelColClassName = classNames( labelClsBasic, labelAlign === 'left' && `${labelClsBasic}-left` // labelCol.className, ); return ( <fieldset id={idSchema.$id}> <Row gutter={rowGutter}> {title && ( <Col className={labelColClassName} span={24}> <TitleFieldTemplate id={titleId<T>(idSchema)} title={title} required={required} schema={schema} uiSchema={uiSchema} registry={registry} /> </Col> )} {description && ( <Col span={24} style={DESCRIPTION_COL_STYLE}> <DescriptionFieldTemplate id={descriptionId<T>(idSchema)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> </Col> )} {properties .filter((e) => !e.hidden) .map((element: ObjectFieldTemplatePropertyType) => ( <Col key={element.name} span={calculateColSpan(element)}> {element.content} </Col> ))} </Row> {canExpand(schema, uiSchema, formData) && ( <Col span={24}> <Row gutter={rowGutter} justify='end'> <Col flex='192px'> <AddButton className='object-property-expand' disabled={disabled || readonly} onClick={onAddClick(schema)} uiSchema={uiSchema} registry={registry} /> </Col> </Row> </Col> )} </fieldset> ); }} </ConfigConsumer> ); } ����������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/SubmitButton/������������������������������0000775�0000000�0000000�00000000000�14467713645�0025740�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/SubmitButton/index.tsx���������������������0000664�0000000�0000000�00000001301�14467713645�0027602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Button, { ButtonType } from 'antd/lib/button'; import { getSubmitButtonOptions, FormContextType, RJSFSchema, StrictRJSFSchema, SubmitButtonProps } from '@rjsf/utils'; /** The `SubmitButton` renders a button that represent the `Submit` action on a form */ export default function SubmitButton< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ uiSchema }: SubmitButtonProps<T, S, F>) { const { submitText, norender, props: submitButtonProps } = getSubmitButtonOptions(uiSchema); if (norender) { return null; } return ( <Button type={'submit' as ButtonType} {...submitButtonProps} htmlType='submit'> {submitText} </Button> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/TitleField/��������������������������������0000775�0000000�0000000�00000000000�14467713645�0025326�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/TitleField/index.tsx�����������������������0000664�0000000�0000000�00000003174�14467713645�0027202�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import classNames from 'classnames'; import { ConfigConsumer, ConfigConsumerProps } from 'antd/lib/config-provider/context'; import { FormContextType, TitleFieldProps, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `TitleField` is the template to use to render the title of a field * * @param props - The `TitleFieldProps` for this component */ export default function TitleField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, required, registry, title, }: TitleFieldProps<T, S, F>) { const { formContext } = registry; const { colon = true } = formContext; let labelChildren = title; if (colon && typeof title === 'string' && title.trim() !== '') { labelChildren = title.replace(/[::]\s*$/, ''); } const handleLabelClick = () => { if (!id) { return; } const control: HTMLLabelElement | null = document.querySelector(`[id="${id}"]`); if (control && control.focus) { control.focus(); } }; return title ? ( <ConfigConsumer> {(configProps: ConfigConsumerProps) => { const { getPrefixCls } = configProps; const prefixCls = getPrefixCls('form'); const labelClassName = classNames({ [`${prefixCls}-item-required`]: required, [`${prefixCls}-item-no-colon`]: !colon, }); return ( <label className={labelClassName} htmlFor={id} onClick={handleLabelClick} title={typeof title === 'string' ? title : ''} > {labelChildren} </label> ); }} </ConfigConsumer> ) : null; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/WrapIfAdditionalTemplate/������������������0000775�0000000�0000000�00000000000�14467713645�0030156�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/WrapIfAdditionalTemplate/index.tsx���������0000664�0000000�0000000�00000006670�14467713645�0032036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import Col from 'antd/lib/col'; import Form from 'antd/lib/form'; import Input from 'antd/lib/input'; import Row from 'antd/lib/row'; import { ADDITIONAL_PROPERTY_FLAG, UI_OPTIONS_KEY, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString, WrapIfAdditionalTemplateProps, } from '@rjsf/utils'; const VERTICAL_LABEL_COL = { span: 24 }; const VERTICAL_WRAPPER_COL = { span: 24 }; const INPUT_STYLE = { width: '100%', }; /** The `WrapIfAdditional` component is used by the `FieldTemplate` to rename, or remove properties that are * part of an `additionalProperties` part of a schema. * * @param props - The `WrapIfAdditionalProps` for this component */ export default function WrapIfAdditionalTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WrapIfAdditionalTemplateProps<T, S, F>) { const { children, classNames, style, disabled, id, label, onDropPropertyClick, onKeyChange, readonly, required, registry, schema, uiSchema, } = props; const { colon, labelCol = VERTICAL_LABEL_COL, readonlyAsDisabled = true, rowGutter = 24, toolbarAlign = 'top', wrapperCol = VERTICAL_WRAPPER_COL, wrapperStyle, } = registry.formContext; const { templates, translateString } = registry; // Button templates are not overridden in the uiSchema const { RemoveButton } = templates.ButtonTemplates; const keyLabel = translateString(TranslatableString.KeyLabel, [label]); const additional = ADDITIONAL_PROPERTY_FLAG in schema; if (!additional) { return ( <div className={classNames} style={style}> {children} </div> ); } const handleBlur = ({ target }: FocusEvent<HTMLInputElement>) => onKeyChange(target.value); // The `block` prop is not part of the `IconButtonProps` defined in the template, so put it into the uiSchema instead const uiOptions = uiSchema ? uiSchema[UI_OPTIONS_KEY] : {}; const buttonUiOptions = { ...uiSchema, [UI_OPTIONS_KEY]: { ...uiOptions, block: true }, }; return ( <div className={classNames} style={style}> <Row align={toolbarAlign} gutter={rowGutter}> <Col className='form-additional' flex='1'> <div className='form-group'> <Form.Item colon={colon} className='form-group' hasFeedback htmlFor={`${id}-key`} label={keyLabel} labelCol={labelCol} required={required} style={wrapperStyle} wrapperCol={wrapperCol} > <Input className='form-control' defaultValue={label} disabled={disabled || (readonlyAsDisabled && readonly)} id={`${id}-key`} name={`${id}-key`} onBlur={!readonly ? handleBlur : undefined} style={INPUT_STYLE} type='text' /> </Form.Item> </div> </Col> <Col className='form-additional' flex='1'> {children} </Col> <Col flex='192px'> <RemoveButton className='array-item-remove' disabled={disabled || readonly} onClick={onDropPropertyClick(label)} uiSchema={buttonUiOptions} registry={registry} /> </Col> </Row> </div> ); } ������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/templates/index.ts�����������������������������������0000664�0000000�0000000�00000002604�14467713645�0024762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, TemplatesType } from '@rjsf/utils'; import ArrayFieldItemTemplate from './ArrayFieldItemTemplate'; import ArrayFieldTemplate from './ArrayFieldTemplate'; import BaseInputTemplate from './BaseInputTemplate'; import DescriptionField from './DescriptionField'; import ErrorList from './ErrorList'; import { AddButton, CopyButton, MoveDownButton, MoveUpButton, RemoveButton } from './IconButton'; import FieldErrorTemplate from './FieldErrorTemplate'; import FieldTemplate from './FieldTemplate'; import ObjectFieldTemplate from './ObjectFieldTemplate'; import SubmitButton from './SubmitButton'; import TitleField from './TitleField'; import WrapIfAdditionalTemplate from './WrapIfAdditionalTemplate'; export function generateTemplates< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): Partial<TemplatesType<T, S, F>> { return { ArrayFieldItemTemplate, ArrayFieldTemplate, BaseInputTemplate, ButtonTemplates: { AddButton, CopyButton, MoveDownButton, MoveUpButton, RemoveButton, SubmitButton, }, DescriptionFieldTemplate: DescriptionField, ErrorListTemplate: ErrorList, FieldErrorTemplate, FieldTemplate, ObjectFieldTemplate, TitleFieldTemplate: TitleField, WrapIfAdditionalTemplate, }; } export default generateTemplates(); ����������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/���������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022751�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/AltDateTimeWidget/���������������������������0000775�0000000�0000000�00000000000�14467713645�0026252�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/AltDateTimeWidget/index.tsx������������������0000664�0000000�0000000�00000000760�14467713645�0030124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; import _AltDateWidget from '../AltDateWidget'; export default function AltDateTimeWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { AltDateWidget } = props.registry.widgets; return <AltDateWidget showTime {...props} />; } AltDateTimeWidget.defaultProps = { ..._AltDateWidget.defaultProps, showTime: true, }; ����������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/AltDateWidget/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025433�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/AltDateWidget/index.tsx����������������������0000664�0000000�0000000�00000012646�14467713645�0027313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { MouseEvent, useEffect, useState } from 'react'; import Button from 'antd/lib/button'; import Col from 'antd/lib/col'; import Row from 'antd/lib/row'; import { ariaDescribedByIds, pad, parseDateString, toDateString, DateObject, FormContextType, GenericObjectType, RJSFSchema, StrictRJSFSchema, TranslatableString, WidgetProps, } from '@rjsf/utils'; type DateElementProps<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> = Pick< WidgetProps<T, S, F>, 'id' | 'name' | 'value' | 'disabled' | 'readonly' | 'autofocus' | 'registry' | 'onBlur' | 'onFocus' > & { select: (property: keyof DateObject, value: any) => void; type: string; range: [number, number]; }; const rangeOptions = (start: number, stop: number) => { const options = []; for (let i = start; i <= stop; i++) { options.push({ value: i, label: pad(i, 2) }); } return options; }; const readyForChange = (state: DateObject) => { return Object.values(state).every((value) => value !== -1); }; function dateElementProps( state: DateObject, time: boolean, yearsRange: [number, number] = [1900, new Date().getFullYear() + 2] ) { const { year, month, day, hour, minute, second } = state; const data = [ { type: 'year', range: yearsRange, value: year, }, { type: 'month', range: [1, 12], value: month }, { type: 'day', range: [1, 31], value: day }, ] as { type: string; range: [number, number]; value: number }[]; if (time) { data.push( { type: 'hour', range: [0, 23], value: hour || -1 }, { type: 'minute', range: [0, 59], value: minute || -1 }, { type: 'second', range: [0, 59], value: second || -1 } ); } return data; } export default function AltDateWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { autofocus, disabled, formContext, id, onBlur, onChange, onFocus, options, readonly, registry, showTime, value, } = props; const { translateString, widgets } = registry; const { SelectWidget } = widgets; const { rowGutter = 24 } = formContext as GenericObjectType; const [state, setState] = useState(parseDateString(value, showTime)); useEffect(() => { setState(parseDateString(value, showTime)); }, [showTime, value]); const handleChange = (property: keyof DateObject, nextValue: any) => { const nextState = { ...state, [property]: typeof nextValue === 'undefined' ? -1 : nextValue, }; if (readyForChange(nextState)) { onChange(toDateString(nextState, showTime)); } else { setState(nextState); } }; const handleNow = (event: MouseEvent<HTMLButtonElement>) => { event.preventDefault(); if (disabled || readonly) { return; } const nextState = parseDateString(new Date().toJSON(), showTime); onChange(toDateString(nextState, showTime)); }; const handleClear = (event: MouseEvent<HTMLButtonElement>) => { event.preventDefault(); if (disabled || readonly) { return; } onChange(undefined); }; const renderDateElement = (elemProps: DateElementProps<T, S, F>) => ( <SelectWidget autofocus={elemProps.autofocus} className='form-control' disabled={elemProps.disabled} id={elemProps.id} name={elemProps.name} onBlur={elemProps.onBlur} onChange={(elemValue) => elemProps.select(elemProps.type as keyof DateObject, elemValue)} onFocus={elemProps.onFocus} options={{ enumOptions: rangeOptions(elemProps.range[0], elemProps.range[1]), }} placeholder={elemProps.type} readonly={elemProps.readonly} schema={{ type: 'integer' } as S} value={elemProps.value} registry={registry} label='' aria-describedby={ariaDescribedByIds<T>(id)} /> ); return ( <Row gutter={[Math.floor(rowGutter / 2), Math.floor(rowGutter / 2)]}> {dateElementProps(state, showTime, options.yearsRange as [number, number] | undefined).map((elemProps, i) => { const elemId = id + '_' + elemProps.type; return ( <Col flex='88px' key={elemId}> {renderDateElement({ ...elemProps, autofocus: autofocus && i === 0, disabled, id: elemId, name: id, onBlur, onFocus, readonly, registry, select: handleChange, // NOTE: antd components accept -1 rather than issue a warning // like material-ui, so we need to convert -1 to undefined here. value: elemProps.value < 0 ? undefined : elemProps.value, })} </Col> ); })} {!options.hideNowButton && ( <Col flex='88px'> <Button block className='btn-now' onClick={handleNow} type='primary'> {translateString(TranslatableString.NowLabel)} </Button> </Col> )} {!options.hideClearButton && ( <Col flex='88px'> <Button block className='btn-clear' danger onClick={handleClear} type='primary'> {translateString(TranslatableString.ClearLabel)} </Button> </Col> )} </Row> ); } AltDateWidget.defaultProps = { autofocus: false, disabled: false, options: { yearsRange: [1900, new Date().getFullYear() + 2], }, readonly: false, showTime: false, }; ������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/CheckboxWidget/������������������������������0000775�0000000�0000000�00000000000�14467713645�0025643�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/CheckboxWidget/index.tsx���������������������0000664�0000000�0000000�00000003455�14467713645�0027521�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import Checkbox, { CheckboxChangeEvent } from 'antd/lib/checkbox'; import { ariaDescribedByIds, labelValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, GenericObjectType, } from '@rjsf/utils'; /** The `CheckBoxWidget` is a widget for rendering boolean properties. * It is typically used to represent a boolean. * * @param props - The `WidgetProps` for this component */ export default function CheckboxWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { autofocus, disabled, formContext, id, label, hideLabel, onBlur, onChange, onFocus, readonly, value } = props; const { readonlyAsDisabled = true } = formContext as GenericObjectType; const handleChange = ({ target }: CheckboxChangeEvent) => onChange(target.checked); const handleBlur = ({ target }: FocusEvent<HTMLInputElement>) => onBlur(id, target.checked); const handleFocus = ({ target }: FocusEvent<HTMLInputElement>) => onFocus(id, target.checked); // Antd's typescript definitions do not contain the following props that are actually necessary and, if provided, // they are used, so hacking them in via by spreading `extraProps` on the component to avoid typescript errors const extraProps = { onBlur: !readonly ? handleBlur : undefined, onFocus: !readonly ? handleFocus : undefined, }; return ( <Checkbox autoFocus={autofocus} checked={typeof value === 'undefined' ? false : value} disabled={disabled || (readonlyAsDisabled && readonly)} id={id} name={id} onChange={!readonly ? handleChange : undefined} {...extraProps} aria-describedby={ariaDescribedByIds<T>(id)} > {labelValue(label, hideLabel, '')} </Checkbox> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/CheckboxesWidget/����������������������������0000775�0000000�0000000�00000000000�14467713645�0026173�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/CheckboxesWidget/index.tsx�������������������0000664�0000000�0000000�00000005161�14467713645�0030045�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import Checkbox from 'antd/lib/checkbox'; import { ariaDescribedByIds, enumOptionsIndexForValue, enumOptionsValueForIndex, optionId, FormContextType, WidgetProps, RJSFSchema, StrictRJSFSchema, GenericObjectType, } from '@rjsf/utils'; /** The `CheckboxesWidget` is a widget for rendering checkbox groups. * It is typically used to represent an array of enums. * * @param props - The `WidgetProps` for this component */ export default function CheckboxesWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ autofocus, disabled, formContext, id, onBlur, onChange, onFocus, options, readonly, value }: WidgetProps<T, S, F>) { const { readonlyAsDisabled = true } = formContext as GenericObjectType; const { enumOptions, enumDisabled, inline, emptyValue } = options; const handleChange = (nextValue: any) => onChange(enumOptionsValueForIndex<S>(nextValue, enumOptions, emptyValue)); const handleBlur = ({ target }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(target.value, enumOptions, emptyValue)); const handleFocus = ({ target }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(target.value, enumOptions, emptyValue)); // Antd's typescript definitions do not contain the following props that are actually necessary and, if provided, // they are used, so hacking them in via by spreading `extraProps` on the component to avoid typescript errors const extraProps = { id, onBlur: !readonly ? handleBlur : undefined, onFocus: !readonly ? handleFocus : undefined, }; const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, true) as string[]; return Array.isArray(enumOptions) && enumOptions.length > 0 ? ( <> <Checkbox.Group disabled={disabled || (readonlyAsDisabled && readonly)} name={id} onChange={!readonly ? handleChange : undefined} value={selectedIndexes} {...extraProps} aria-describedby={ariaDescribedByIds<T>(id)} > {Array.isArray(enumOptions) && enumOptions.map((option, i) => ( <span key={i}> <Checkbox id={optionId(id, i)} name={id} autoFocus={i === 0 ? autofocus : false} disabled={Array.isArray(enumDisabled) && enumDisabled.indexOf(value) !== -1} value={String(i)} > {option.label} </Checkbox> {!inline && <br />} </span> ))} </Checkbox.Group> </> ) : null; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/DateTimeWidget/������������������������������0000775�0000000�0000000�00000000000�14467713645�0025611�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/DateTimeWidget/index.tsx���������������������0000664�0000000�0000000�00000003107�14467713645�0027461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import dayjs from 'dayjs'; import { ariaDescribedByIds, FormContextType, GenericObjectType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import DatePicker from '../../components/DatePicker'; const DATE_PICKER_STYLE = { width: '100%', }; /** The `DateTimeWidget` component uses the `BaseInputTemplate` changing the type to `datetime-local` and transforms * the value to/from utc using the appropriate utility functions. * * @param props - The `WidgetProps` for this component */ export default function DateTimeWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { disabled, formContext, id, onBlur, onChange, onFocus, placeholder, readonly, value } = props; const { readonlyAsDisabled = true } = formContext as GenericObjectType; const handleChange = (nextValue: any) => onChange(nextValue && nextValue.toISOString()); const handleBlur = () => onBlur(id, value); const handleFocus = () => onFocus(id, value); const getPopupContainer = (node: any) => node.parentNode; return ( <DatePicker disabled={disabled || (readonlyAsDisabled && readonly)} getPopupContainer={getPopupContainer} id={id} name={id} onBlur={!readonly ? handleBlur : undefined} onChange={!readonly ? handleChange : undefined} onFocus={!readonly ? handleFocus : undefined} placeholder={placeholder} showTime style={DATE_PICKER_STYLE} value={value && dayjs(value)} aria-describedby={ariaDescribedByIds<T>(id)} /> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/DateWidget/����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024772�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/DateWidget/index.tsx�������������������������0000664�0000000�0000000�00000003111�14467713645�0026635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import dayjs from 'dayjs'; import { ariaDescribedByIds, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, GenericObjectType, } from '@rjsf/utils'; import DatePicker from '../../components/DatePicker'; const DATE_PICKER_STYLE = { width: '100%', }; /** The `DateWidget` component uses the `BaseInputTemplate` changing the type to `date` and transforms * the value to undefined when it is falsy during the `onChange` handling. * * @param props - The `WidgetProps` for this component */ export default function DateWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { disabled, formContext, id, onBlur, onChange, onFocus, placeholder, readonly, value } = props; const { readonlyAsDisabled = true } = formContext as GenericObjectType; const handleChange = (nextValue: any) => onChange(nextValue && nextValue.format('YYYY-MM-DD')); const handleBlur = () => onBlur(id, value); const handleFocus = () => onFocus(id, value); const getPopupContainer = (node: any) => node.parentNode; return ( <DatePicker disabled={disabled || (readonlyAsDisabled && readonly)} getPopupContainer={getPopupContainer} id={id} name={id} onBlur={!readonly ? handleBlur : undefined} onChange={!readonly ? handleChange : undefined} onFocus={!readonly ? handleFocus : undefined} placeholder={placeholder} showTime={false} style={DATE_PICKER_STYLE} value={value && dayjs(value)} aria-describedby={ariaDescribedByIds<T>(id)} /> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/PasswordWidget/������������������������������0000775�0000000�0000000�00000000000�14467713645�0025717�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/PasswordWidget/index.tsx���������������������0000664�0000000�0000000�00000002746�14467713645�0027577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import Input from 'antd/lib/input'; import { ariaDescribedByIds, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, GenericObjectType, } from '@rjsf/utils'; /** The `PasswordWidget` component uses the `BaseInputTemplate` changing the type to `password`. * * @param props - The `WidgetProps` for this component */ export default function PasswordWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { disabled, formContext, id, onBlur, onChange, onFocus, options, placeholder, readonly, value } = props; const { readonlyAsDisabled = true } = formContext as GenericObjectType; const emptyValue = options.emptyValue || ''; const handleChange = ({ target }: ChangeEvent<HTMLInputElement>) => onChange(target.value === '' ? emptyValue : target.value); const handleBlur = ({ target }: FocusEvent<HTMLInputElement>) => onBlur(id, target.value); const handleFocus = ({ target }: FocusEvent<HTMLInputElement>) => onFocus(id, target.value); return ( <Input.Password disabled={disabled || (readonlyAsDisabled && readonly)} id={id} name={id} onBlur={!readonly ? handleBlur : undefined} onChange={!readonly ? handleChange : undefined} onFocus={!readonly ? handleFocus : undefined} placeholder={placeholder} value={value || ''} aria-describedby={ariaDescribedByIds<T>(id)} /> ); } ��������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/RadioWidget/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025153�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/RadioWidget/index.tsx������������������������0000664�0000000�0000000�00000004320�14467713645�0027021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import Radio, { RadioChangeEvent } from 'antd/lib/radio'; import { ariaDescribedByIds, enumOptionsIndexForValue, enumOptionsValueForIndex, optionId, FormContextType, GenericObjectType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; /** The `RadioWidget` is a widget for rendering a radio group. * It is typically used with a string property constrained with enum options. * * @param props - The `WidgetProps` for this component */ export default function RadioWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ autofocus, disabled, formContext, id, onBlur, onChange, onFocus, options, readonly, value, }: WidgetProps<T, S, F>) { const { readonlyAsDisabled = true } = formContext as GenericObjectType; const { enumOptions, enumDisabled, emptyValue } = options; const handleChange = ({ target: { value: nextValue } }: RadioChangeEvent) => onChange(enumOptionsValueForIndex<S>(nextValue, enumOptions, emptyValue)); const handleBlur = ({ target }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(target.value, enumOptions, emptyValue)); const handleFocus = ({ target }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(target.value, enumOptions, emptyValue)); const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions) as string; return ( <Radio.Group disabled={disabled || (readonlyAsDisabled && readonly)} id={id} name={id} onChange={!readonly ? handleChange : undefined} onBlur={!readonly ? handleBlur : undefined} onFocus={!readonly ? handleFocus : undefined} value={selectedIndexes} aria-describedby={ariaDescribedByIds<T>(id)} > {Array.isArray(enumOptions) && enumOptions.map((option, i) => ( <Radio id={optionId(id, i)} name={id} autoFocus={i === 0 ? autofocus : false} disabled={Array.isArray(enumDisabled) && enumDisabled.indexOf(value) !== -1} key={i} value={String(i)} > {option.label} </Radio> ))} </Radio.Group> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/RangeWidget/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025151�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/RangeWidget/index.tsx������������������������0000664�0000000�0000000�00000003466�14467713645�0027031�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Slider from 'antd/lib/slider'; import { ariaDescribedByIds, rangeSpec, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, GenericObjectType, } from '@rjsf/utils'; /** The `RangeWidget` component uses the `BaseInputTemplate` changing the type to `range` and wrapping the result * in a div, with the value along side it. * * @param props - The `WidgetProps` for this component */ export default function RangeWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { autofocus, disabled, formContext, id, onBlur, onChange, onFocus, options, placeholder, readonly, schema, value, } = props; const { readonlyAsDisabled = true } = formContext as GenericObjectType; const { min, max, step } = rangeSpec(schema); const emptyValue = options.emptyValue || ''; const handleChange = (nextValue: any) => onChange(nextValue === '' ? emptyValue : nextValue); const handleBlur = () => onBlur(id, value); const handleFocus = () => onFocus(id, value); // Antd's typescript definitions do not contain the following props that are actually necessary and, if provided, // they are used, so hacking them in via by spreading `extraProps` on the component to avoid typescript errors const extraProps = { placeholder, onBlur: !readonly ? handleBlur : undefined, onFocus: !readonly ? handleFocus : undefined, }; return ( <Slider autoFocus={autofocus} disabled={disabled || (readonlyAsDisabled && readonly)} id={id} max={max} min={min} onChange={!readonly ? handleChange : undefined} range={false} step={step} value={value} {...extraProps} aria-describedby={ariaDescribedByIds<T>(id)} /> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/SelectWidget/��������������������������������0000775�0000000�0000000�00000000000�14467713645�0025334�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/SelectWidget/index.tsx�����������������������0000664�0000000�0000000�00000005633�14467713645�0027212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Select, { DefaultOptionType } from 'antd/lib/select'; import { ariaDescribedByIds, enumOptionsIndexForValue, enumOptionsValueForIndex, FormContextType, GenericObjectType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import isString from 'lodash/isString'; const SELECT_STYLE = { width: '100%', }; /** The `SelectWidget` is a widget for rendering dropdowns. * It is typically used with string properties constrained with enum options. * * @param props - The `WidgetProps` for this component */ export default function SelectWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ autofocus, disabled, formContext = {} as F, id, multiple, onBlur, onChange, onFocus, options, placeholder, readonly, value, }: WidgetProps<T, S, F>) { const { readonlyAsDisabled = true } = formContext as GenericObjectType; const { enumOptions, enumDisabled, emptyValue } = options; const handleChange = (nextValue: any) => onChange(enumOptionsValueForIndex<S>(nextValue, enumOptions, emptyValue)); const handleBlur = () => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const handleFocus = () => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const filterOption = (input: string, option?: DefaultOptionType) => { if (option && isString(option.label)) { // labels are strings in this context return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0; } return false; }; const getPopupContainer = (node: any) => node.parentNode; const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, multiple); // Antd's typescript definitions do not contain the following props that are actually necessary and, if provided, // they are used, so hacking them in via by spreading `extraProps` on the component to avoid typescript errors const extraProps = { name: id, }; return ( <Select autoFocus={autofocus} disabled={disabled || (readonlyAsDisabled && readonly)} getPopupContainer={getPopupContainer} id={id} mode={multiple ? 'multiple' : undefined} onBlur={!readonly ? handleBlur : undefined} onChange={!readonly ? handleChange : undefined} onFocus={!readonly ? handleFocus : undefined} placeholder={placeholder} style={SELECT_STYLE} value={selectedIndexes} {...extraProps} filterOption={filterOption} aria-describedby={ariaDescribedByIds<T>(id)} > {Array.isArray(enumOptions) && enumOptions.map(({ value: optionValue, label: optionLabel }, index) => ( <Select.Option disabled={Array.isArray(enumDisabled) && enumDisabled.indexOf(optionValue) !== -1} key={String(index)} value={String(index)} > {optionLabel} </Select.Option> ))} </Select> ); } �����������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/TextareaWidget/������������������������������0000775�0000000�0000000�00000000000�14467713645�0025672�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/TextareaWidget/index.tsx���������������������0000664�0000000�0000000�00000003475�14467713645�0027552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import Input from 'antd/lib/input'; import { ariaDescribedByIds, FormContextType, GenericObjectType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; const INPUT_STYLE = { width: '100%', }; /** The `TextareaWidget` is a widget for rendering input fields as textarea. * * @param props - The `WidgetProps` for this component */ export default function TextareaWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ disabled, formContext, id, onBlur, onChange, onFocus, options, placeholder, readonly, value, }: WidgetProps<T, S, F>) { const { readonlyAsDisabled = true } = formContext as GenericObjectType; const handleChange = ({ target }: ChangeEvent<HTMLTextAreaElement>) => onChange(target.value === '' ? options.emptyValue : target.value); const handleBlur = ({ target }: FocusEvent<HTMLTextAreaElement>) => onBlur(id, target.value); const handleFocus = ({ target }: FocusEvent<HTMLTextAreaElement>) => onFocus(id, target.value); // Antd's typescript definitions do not contain the following props that are actually necessary and, if provided, // they are used, so hacking them in via by spreading `extraProps` on the component to avoid typescript errors const extraProps = { type: 'textarea', }; return ( <Input.TextArea disabled={disabled || (readonlyAsDisabled && readonly)} id={id} name={id} onBlur={!readonly ? handleBlur : undefined} onChange={!readonly ? handleChange : undefined} onFocus={!readonly ? handleFocus : undefined} placeholder={placeholder} rows={options.rows || 4} style={INPUT_STYLE} value={value} {...extraProps} aria-describedby={ariaDescribedByIds<T>(id)} /> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/src/widgets/index.ts�������������������������������������0000664�0000000�0000000�00000001777�14467713645�0024444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RegistryWidgetsType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import AltDateTimeWidget from './AltDateTimeWidget'; import AltDateWidget from './AltDateWidget'; import CheckboxesWidget from './CheckboxesWidget'; import CheckboxWidget from './CheckboxWidget'; import DateTimeWidget from './DateTimeWidget'; import DateWidget from './DateWidget'; import PasswordWidget from './PasswordWidget'; import RadioWidget from './RadioWidget'; import RangeWidget from './RangeWidget'; import SelectWidget from './SelectWidget'; import TextareaWidget from './TextareaWidget'; export function generateWidgets< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): RegistryWidgetsType<T, S, F> { return { AltDateTimeWidget, AltDateWidget, CheckboxesWidget, CheckboxWidget, DateTimeWidget, DateWidget, PasswordWidget, RadioWidget, RangeWidget, SelectWidget, TextareaWidget, }; } export default generateWidgets(); �react-jsonschema-form-5.12.1/packages/antd/test/����������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021473�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/test/Array.test.tsx��������������������������������������0000664�0000000�0000000�00000001132�14467713645�0024264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import arrayTests, { CHECKBOXES_CUSTOMIZE } from '@rjsf/core/testSnap/arrayTests'; import '../__mocks__/matchMedia.mock'; import Form from '../src'; arrayTests(Form, { [CHECKBOXES_CUSTOMIZE]: { createNodeMock: (element) => { if (element.type === 'span' && element.props['aria-hidden']) { // the `rc-select` MultipleSelector code expects a ref for this span to exist, so use the feature of // react-test-renderer to create one // See: https://reactjs.org/docs/test-renderer.html#ideas return { scrollWidth: 100 }; } return null; }, }, }); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/test/Form.test.tsx���������������������������������������0000664�0000000�0000000�00000002331�14467713645�0024113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import renderer from 'react-test-renderer'; import validator from '@rjsf/validator-ajv8'; import { RJSFSchema } from '@rjsf/utils'; import formTests, { SELECT_CUSTOMIZE } from '@rjsf/core/testSnap/formTests'; import '../__mocks__/matchMedia.mock'; import Form from '../src'; formTests(Form, { [SELECT_CUSTOMIZE]: { createNodeMock: (element) => { if (element.type === 'span' && element.props['aria-hidden']) { // the `rc-select` MultipleSelector code expects a ref for this span to exist, so use the feature of // react-test-renderer to create one // See: https://reactjs.org/docs/test-renderer.html#ideas return { scrollWidth: 100 }; } return null; }, }, }); describe('antd specific tests', () => { test('descriptionLocation tooltip in formContext', () => { const schema: RJSFSchema = { type: 'object', properties: { 'my-field': { type: 'string', description: 'some description', }, }, }; const formContext = { descriptionLocation: 'tooltip' }; const tree = renderer.create(<Form schema={schema} validator={validator} formContext={formContext} />).toJSON(); expect(tree).toMatchSnapshot(); }); }); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/test/Object.test.tsx�������������������������������������0000664�0000000�0000000�00000000222�14467713645�0024413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import objectTests from '@rjsf/core/testSnap/objectTests'; import '../__mocks__/matchMedia.mock'; import Form from '../src'; objectTests(Form); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/test/__snapshots__/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024311�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/test/__snapshots__/Array.test.tsx.snap�������������������0000664�0000000�0000000�00001064163�14467713645�0030060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`array fields array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } /> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block array-item-add" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`array fields array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_0__error root_0__description root_0__help" className="ant-input" hidden={null} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="a" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-btn-group" style={ { "width": "100%", } } > <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={true} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move up" type="button" > <span aria-label="arrow-up" className="anticon anticon-arrow-up" role="img" > <svg aria-hidden="true" data-icon="arrow-up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move down" type="button" > <span aria-label="arrow-down" className="anticon anticon-arrow-down" role="img" > <svg aria-hidden="true" data-icon="arrow-down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0048.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Copy" type="button" > <span aria-label="copy" className="anticon anticon-copy" role="img" > <svg aria-hidden="true" data-icon="copy" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z" /> </svg> </span> </button> <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-dangerous" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_1__error root_1__description root_1__help" className="ant-input" hidden={null} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="b" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-btn-group" style={ { "width": "100%", } } > <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move up" type="button" > <span aria-label="arrow-up" className="anticon anticon-arrow-up" role="img" > <svg aria-hidden="true" data-icon="arrow-up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={true} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move down" type="button" > <span aria-label="arrow-down" className="anticon anticon-arrow-down" role="img" > <svg aria-hidden="true" data-icon="arrow-down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0048.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Copy" type="button" > <span aria-label="copy" className="anticon anticon-copy" role="img" > <svg aria-hidden="true" data-icon="copy" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z" /> </svg> </span> </button> <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-dangerous" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block array-item-add" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`array fields checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-select ant-select-in-form-item ant-select-multiple ant-select-show-search" name="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} style={ { "width": "100%", } } > <div className="ant-select-selector" onClick={[Function]} onMouseDown={[Function]} > <div className="ant-select-selection-overflow" > <div className="ant-select-selection-overflow-item ant-select-selection-overflow-item-suffix" style={ { "height": undefined, "opacity": 1, "order": undefined, "overflowY": undefined, "pointerEvents": undefined, "position": undefined, } } > <div className="ant-select-selection-search" onBlur={[Function]} onFocus={[Function]} style={ { "width": 100, } } > <input aria-activedescendant="root_list_0" aria-autocomplete="list" aria-controls="root_list" aria-describedby="root__error root__description root__help" aria-haspopup="listbox" aria-owns="root_list" autoComplete="off" autoFocus={false} className="ant-select-selection-search-input" disabled={false} id="root" onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onPaste={[Function]} readOnly={true} role="combobox" style={ { "opacity": 0, } } type="search" unselectable="on" value="" /> <span aria-hidden={true} className="ant-select-selection-search-mirror" >   </span> </div> </div> </div> <span className="ant-select-selection-placeholder" /> </div> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`array fields empty errors array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_name" title="name" > name </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_name__error root_name__description root_name__help" className="ant-input" hidden={null} id="root_name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`array fields fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-fixed-items" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_0__error root_0__description root_0__help" className="ant-input" hidden={null} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> </div> <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-valuenow={null} autoComplete="off" className="ant-input-number-input" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`array fields has errors 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ant-alert ant-alert-error ant-alert-with-description ant-alert-no-icon panel panel-danger errors" data-show={true} role="alert" style={{}} > <div className="ant-alert-content" > <div className="ant-alert-message" > Errors </div> <div className="ant-alert-description" > <div className="ant-list ant-list-sm ant-list-split list-group" > <div className="ant-spin-nested-loading" > <div className="ant-spin-container" > <li className="ant-list-item" > <div className="ant-space ant-space-horizontal ant-space-align-center" style={{}} > <div className="ant-space-item" style={ { "marginRight": 8, } } > <span aria-label="exclamation-circle" className="anticon anticon-exclamation-circle" role="img" > <svg aria-hidden="true" data-icon="exclamation-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> <path d="M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z" /> </svg> </span> </div> <div className="ant-space-item" style={{}} > .name Bad input </div> </div> </li> </div> </div> </div> </div> </div> </div> <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string field-error has-error has-danger" > <div className="ant-form-item ant-form-item-with-help ant-form-item-has-feedback ant-form-item-has-error" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_name" title="name" > name </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-status-error ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_name__error root_name__description root_name__help" className="ant-input" hidden={null} id="root_name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" > <span className="ant-form-item-feedback-icon ant-form-item-feedback-icon-error" > <span aria-label="close-circle" className="anticon anticon-close-circle" role="img" > <svg aria-hidden="true" data-icon="close-circle" fill="currentColor" fill-rule="evenodd" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z" /> </svg> </span> </span> </span> </span> </div> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`array fields no errors 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_name" title="name" > name </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_name__error root_name__description root_name__help" className="ant-input" hidden={null} id="root_name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="Test field" > Test field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a test description </span> </div> <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } /> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block array-item-add" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="Test field" > Test field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a test description </span> </div> <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="ant-form-item-required" htmlFor="root_0" title="Test item" > Test item </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_0__error root_0__description root_0__help" className="ant-input" hidden={null} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="a" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_0__description" > a test item description </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-btn-group" style={ { "width": "100%", } } > <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={true} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move up" type="button" > <span aria-label="arrow-up" className="anticon anticon-arrow-up" role="img" > <svg aria-hidden="true" data-icon="arrow-up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move down" type="button" > <span aria-label="arrow-down" className="anticon anticon-arrow-down" role="img" > <svg aria-hidden="true" data-icon="arrow-down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0048.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Copy" type="button" > <span aria-label="copy" className="anticon anticon-copy" role="img" > <svg aria-hidden="true" data-icon="copy" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z" /> </svg> </span> </button> <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-dangerous" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="ant-form-item-required" htmlFor="root_1" title="Test item" > Test item </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_1__error root_1__description root_1__help" className="ant-input" hidden={null} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="b" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_1__description" > a test item description </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-btn-group" style={ { "width": "100%", } } > <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move up" type="button" > <span aria-label="arrow-up" className="anticon anticon-arrow-up" role="img" > <svg aria-hidden="true" data-icon="arrow-up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={true} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move down" type="button" > <span aria-label="arrow-down" className="anticon anticon-arrow-down" role="img" > <svg aria-hidden="true" data-icon="arrow-down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0048.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Copy" type="button" > <span aria-label="copy" className="anticon anticon-copy" role="img" > <svg aria-hidden="true" data-icon="copy" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z" /> </svg> </span> </button> <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-dangerous" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block array-item-add" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root" title="Test field" > Test field </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-select ant-select-in-form-item ant-select-multiple ant-select-show-search" name="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} style={ { "width": "100%", } } > <div className="ant-select-selector" onClick={[Function]} onMouseDown={[Function]} > <div className="ant-select-selection-overflow" > <div className="ant-select-selection-overflow-item ant-select-selection-overflow-item-suffix" style={ { "height": undefined, "opacity": 1, "order": undefined, "overflowY": undefined, "pointerEvents": undefined, "position": undefined, } } > <div className="ant-select-selection-search" onBlur={[Function]} onFocus={[Function]} style={ { "width": 100, } } > <input aria-activedescendant="root_list_0" aria-autocomplete="list" aria-controls="root_list" aria-describedby="root__error root__description root__help" aria-haspopup="listbox" aria-owns="root_list" autoComplete="off" autoFocus={false} className="ant-select-selection-search-input" disabled={false} id="root" onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onPaste={[Function]} readOnly={true} role="combobox" style={ { "opacity": 0, } } type="search" unselectable="on" value="" /> <span aria-hidden={true} className="ant-select-selection-search-mirror" >   </span> </div> </div> </div> <span className="ant-select-selection-placeholder" /> </div> </div> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-fixed-items" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="Test field" > Test field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a test description </span> </div> <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="ant-form-item-required" htmlFor="root_0" title="Test item" > Test item </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_0__error root_0__description root_0__help" className="ant-input" hidden={null} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_0__description" > a test item description </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="ant-form-item-required" htmlFor="root_1" title="Test item" > Test item </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-valuenow={null} autoComplete="off" className="ant-input-number-input" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> <div className="ant-form-item-extra" > <span id="root_1__description" > a test item description </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description from both array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a fancier description </span> </div> <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } /> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block array-item-add" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description from both array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a fancier description </span> </div> <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="ant-form-item-required" htmlFor="root_0" title="My Item" > My Item </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_0__error root_0__description root_0__help" className="ant-input" hidden={null} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="a" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_0__description" > a fancier item description </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-btn-group" style={ { "width": "100%", } } > <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={true} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move up" type="button" > <span aria-label="arrow-up" className="anticon anticon-arrow-up" role="img" > <svg aria-hidden="true" data-icon="arrow-up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move down" type="button" > <span aria-label="arrow-down" className="anticon anticon-arrow-down" role="img" > <svg aria-hidden="true" data-icon="arrow-down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0048.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Copy" type="button" > <span aria-label="copy" className="anticon anticon-copy" role="img" > <svg aria-hidden="true" data-icon="copy" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z" /> </svg> </span> </button> <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-dangerous" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="ant-form-item-required" htmlFor="root_1" title="My Item" > My Item </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_1__error root_1__description root_1__help" className="ant-input" hidden={null} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="b" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_1__description" > a fancier item description </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-btn-group" style={ { "width": "100%", } } > <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move up" type="button" > <span aria-label="arrow-up" className="anticon anticon-arrow-up" role="img" > <svg aria-hidden="true" data-icon="arrow-up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={true} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move down" type="button" > <span aria-label="arrow-down" className="anticon anticon-arrow-down" role="img" > <svg aria-hidden="true" data-icon="arrow-down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0048.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Copy" type="button" > <span aria-label="copy" className="anticon anticon-copy" role="img" > <svg aria-hidden="true" data-icon="copy" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z" /> </svg> </span> </button> <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-dangerous" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block array-item-add" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description from both checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root" title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-select ant-select-in-form-item ant-select-multiple ant-select-show-search" name="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} style={ { "width": "100%", } } > <div className="ant-select-selector" onClick={[Function]} onMouseDown={[Function]} > <div className="ant-select-selection-overflow" > <div className="ant-select-selection-overflow-item ant-select-selection-overflow-item-suffix" style={ { "height": undefined, "opacity": 1, "order": undefined, "overflowY": undefined, "pointerEvents": undefined, "position": undefined, } } > <div className="ant-select-selection-search" onBlur={[Function]} onFocus={[Function]} style={ { "width": 100, } } > <input aria-activedescendant="root_list_0" aria-autocomplete="list" aria-controls="root_list" aria-describedby="root__error root__description root__help" aria-haspopup="listbox" aria-owns="root_list" autoComplete="off" autoFocus={false} className="ant-select-selection-search-input" disabled={false} id="root" onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onPaste={[Function]} readOnly={true} role="combobox" style={ { "opacity": 0, } } type="search" unselectable="on" value="" /> <span aria-hidden={true} className="ant-select-selection-search-mirror" >   </span> </div> </div> </div> <span className="ant-select-selection-placeholder" /> </div> </div> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description from both fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-fixed-items" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a fancier description </span> </div> <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="ant-form-item-required" htmlFor="root_0" title="My Item" > My Item </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_0__error root_0__description root_0__help" className="ant-input" hidden={null} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_0__description" > a fancier item description </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="ant-form-item-required" htmlFor="root_1" title="My Item" > My Item </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-valuenow={null} autoComplete="off" className="ant-input-number-input" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> <div className="ant-form-item-extra" > <span id="root_1__description" > a fancier item description </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description from uiSchema array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a fancier description </span> </div> <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } /> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block array-item-add" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description from uiSchema array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a fancier description </span> </div> <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="ant-form-item-required" htmlFor="root_0" title="My Item" > My Item </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_0__error root_0__description root_0__help" className="ant-input" hidden={null} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="a" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_0__description" > a fancier item description </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-btn-group" style={ { "width": "100%", } } > <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={true} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move up" type="button" > <span aria-label="arrow-up" className="anticon anticon-arrow-up" role="img" > <svg aria-hidden="true" data-icon="arrow-up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move down" type="button" > <span aria-label="arrow-down" className="anticon anticon-arrow-down" role="img" > <svg aria-hidden="true" data-icon="arrow-down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0048.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Copy" type="button" > <span aria-label="copy" className="anticon anticon-copy" role="img" > <svg aria-hidden="true" data-icon="copy" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z" /> </svg> </span> </button> <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-dangerous" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="ant-form-item-required" htmlFor="root_1" title="My Item" > My Item </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_1__error root_1__description root_1__help" className="ant-input" hidden={null} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="b" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_1__description" > a fancier item description </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-btn-group" style={ { "width": "100%", } } > <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move up" type="button" > <span aria-label="arrow-up" className="anticon anticon-arrow-up" role="img" > <svg aria-hidden="true" data-icon="arrow-up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={true} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move down" type="button" > <span aria-label="arrow-down" className="anticon anticon-arrow-down" role="img" > <svg aria-hidden="true" data-icon="arrow-down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0048.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Copy" type="button" > <span aria-label="copy" className="anticon anticon-copy" role="img" > <svg aria-hidden="true" data-icon="copy" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z" /> </svg> </span> </button> <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-dangerous" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block array-item-add" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description from uiSchema checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root" title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-select ant-select-in-form-item ant-select-multiple ant-select-show-search" name="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} style={ { "width": "100%", } } > <div className="ant-select-selector" onClick={[Function]} onMouseDown={[Function]} > <div className="ant-select-selection-overflow" > <div className="ant-select-selection-overflow-item ant-select-selection-overflow-item-suffix" style={ { "height": undefined, "opacity": 1, "order": undefined, "overflowY": undefined, "pointerEvents": undefined, "position": undefined, } } > <div className="ant-select-selection-search" onBlur={[Function]} onFocus={[Function]} style={ { "width": 100, } } > <input aria-activedescendant="root_list_0" aria-autocomplete="list" aria-controls="root_list" aria-describedby="root__error root__description root__help" aria-haspopup="listbox" aria-owns="root_list" autoComplete="off" autoFocus={false} className="ant-select-selection-search-input" disabled={false} id="root" onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onPaste={[Function]} readOnly={true} role="combobox" style={ { "opacity": 0, } } type="search" unselectable="on" value="" /> <span aria-hidden={true} className="ant-select-selection-search-mirror" >   </span> </div> </div> </div> <span className="ant-select-selection-placeholder" /> </div> </div> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description from uiSchema fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-fixed-items" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a fancier description </span> </div> <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="ant-form-item-required" htmlFor="root_0" title="My Item" > My Item </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_0__error root_0__description root_0__help" className="ant-input" hidden={null} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_0__description" > a fancier item description </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="ant-form-item-required" htmlFor="root_1" title="My Item" > My Item </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-valuenow={null} autoComplete="off" className="ant-input-number-input" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> <div className="ant-form-item-extra" > <span id="root_1__description" > a fancier item description </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description with global label off array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } /> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } /> <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } /> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block array-item-add" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description with global label off array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } /> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } /> <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_0__error root_0__description root_0__help" className="ant-input" hidden={null} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="a" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_0__description" > a test item description </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-btn-group" style={ { "width": "100%", } } > <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={true} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move up" type="button" > <span aria-label="arrow-up" className="anticon anticon-arrow-up" role="img" > <svg aria-hidden="true" data-icon="arrow-up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move down" type="button" > <span aria-label="arrow-down" className="anticon anticon-arrow-down" role="img" > <svg aria-hidden="true" data-icon="arrow-down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0048.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Copy" type="button" > <span aria-label="copy" className="anticon anticon-copy" role="img" > <svg aria-hidden="true" data-icon="copy" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z" /> </svg> </span> </button> <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-dangerous" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_1__error root_1__description root_1__help" className="ant-input" hidden={null} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="b" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_1__description" > a test item description </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-btn-group" style={ { "width": "100%", } } > <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move up" type="button" > <span aria-label="arrow-up" className="anticon anticon-arrow-up" role="img" > <svg aria-hidden="true" data-icon="arrow-up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={true} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Move down" type="button" > <span aria-label="arrow-down" className="anticon anticon-arrow-down" role="img" > <svg aria-hidden="true" data-icon="arrow-down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0048.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </span> </button> <button className="ant-btn ant-btn-default ant-btn-icon-only" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Copy" type="button" > <span aria-label="copy" className="anticon anticon-copy" role="img" > <svg aria-hidden="true" data-icon="copy" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z" /> </svg> </span> </button> <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-dangerous" disabled={false} onClick={[Function]} style={ { "width": "calc(100% / 4)", } } title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block array-item-add" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description with global label off checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root" title="Test field" > Test field </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-select ant-select-in-form-item ant-select-multiple ant-select-show-search" name="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} style={ { "width": "100%", } } > <div className="ant-select-selector" onClick={[Function]} onMouseDown={[Function]} > <div className="ant-select-selection-overflow" > <div className="ant-select-selection-overflow-item ant-select-selection-overflow-item-suffix" style={ { "height": undefined, "opacity": 1, "order": undefined, "overflowY": undefined, "pointerEvents": undefined, "position": undefined, } } > <div className="ant-select-selection-search" onBlur={[Function]} onFocus={[Function]} style={ { "width": 100, } } > <input aria-activedescendant="root_list_0" aria-autocomplete="list" aria-controls="root_list" aria-describedby="root__error root__description root__help" aria-haspopup="listbox" aria-owns="root_list" autoComplete="off" autoFocus={false} className="ant-select-selection-search-input" disabled={false} id="root" onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onPaste={[Function]} readOnly={true} role="combobox" style={ { "opacity": 0, } } type="search" unselectable="on" value="" /> <span aria-hidden={true} className="ant-select-selection-search-mirror" >   </span> </div> </div> </div> <span className="ant-select-selection-placeholder" /> </div> </div> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`with title and description with global label off fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset className="field field-array field-array-fixed-items" id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } /> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } /> <div className="ant-col ant-col-24 row array-item-list" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_0__error root_0__description root_0__help" className="ant-input" hidden={null} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_0__description" > a test item description </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-valuenow={null} autoComplete="off" className="ant-input-number-input" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> <div className="ant-form-item-extra" > <span id="root_1__description" > a test item description </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/test/__snapshots__/Form.test.tsx.snap��������������������0000664�0000000�0000000�00000371147�14467713645�0027707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`antd specific tests descriptionLocation tooltip in formContext 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_my-field" title="my-field" > my-field <span aria-label="question-circle" className="anticon anticon-question-circle ant-form-item-tooltip" onMouseEnter={[Function]} onMouseLeave={[Function]} role="img" title="" > <svg aria-hidden="true" data-icon="question-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> <path d="M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0130.9-44.8c59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1080 0 40 40 0 10-80 0z" /> </svg> </span> </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_my-field__error root_my-field__description root_my-field__help" className="ant-input" hidden={null} id="root_my-field" name="root_my-field" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields checkbox field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <label className="ant-checkbox-wrapper ant-checkbox-wrapper-in-form-item" > <span className="ant-checkbox" > <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} className="ant-checkbox-input" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="checkbox" /> <span className="ant-checkbox-inner" /> </span> <span> </span> </label> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields checkbox field with label 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <label className="ant-checkbox-wrapper ant-checkbox-wrapper-in-form-item" > <span className="ant-checkbox" > <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} className="ant-checkbox-input" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="checkbox" /> <span className="ant-checkbox-inner" /> </span> <span> test </span> </label> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields checkboxes field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root" title="An enum list rendered as checkboxes" > An enum list rendered as checkboxes </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-checkbox-group" id="root" name="root" onBlur={[Function]} onFocus={[Function]} > <span> <label className="ant-checkbox-wrapper ant-checkbox-wrapper-in-form-item" > <span className="ant-checkbox" > <input autoFocus={false} checked={false} className="ant-checkbox-input" disabled={false} id="root-0" name="root" onChange={[Function]} type="checkbox" value="0" /> <span className="ant-checkbox-inner" /> </span> <span> foo </span> </label> <br /> </span> <span> <label className="ant-checkbox-wrapper ant-checkbox-wrapper-in-form-item" > <span className="ant-checkbox" > <input autoFocus={false} checked={false} className="ant-checkbox-input" disabled={false} id="root-1" name="root" onChange={[Function]} type="checkbox" value="1" /> <span className="ant-checkbox-inner" /> </span> <span> bar </span> </label> <br /> </span> <span> <label className="ant-checkbox-wrapper ant-checkbox-wrapper-in-form-item" > <span className="ant-checkbox" > <input autoFocus={false} checked={false} className="ant-checkbox-input" disabled={false} id="root-2" name="root" onChange={[Function]} type="checkbox" value="2" /> <span className="ant-checkbox-inner" /> </span> <span> fuzz </span> </label> <br /> </span> <span> <label className="ant-checkbox-wrapper ant-checkbox-wrapper-in-form-item" > <span className="ant-checkbox" > <input autoFocus={false} checked={false} className="ant-checkbox-input" disabled={false} id="root-3" name="root" onChange={[Function]} type="checkbox" value="3" /> <span className="ant-checkbox-inner" /> </span> <span> qux </span> </label> <br /> </span> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields field with description 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_my-field" title="my-field" > my-field </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_my-field__error root_my-field__description root_my-field__help" className="ant-input" hidden={null} id="root_my-field" name="root_my-field" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_my-field__description" > some description </span> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields field with description in uiSchema 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_my-field" title="my-field" > my-field </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_my-field__error root_my-field__description root_my-field__help" className="ant-input" hidden={null} id="root_my-field" name="root_my-field" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_my-field__description" > some other description </span> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields format color 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root__error root__description root__help" className="ant-input" hidden={null} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="color" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields format date 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-picker ant-picker-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <div className="ant-picker-input" > <input aria-describedby="root__error root__description root__help" autoComplete="off" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} placeholder="" readOnly={true} size={12} title="" value="" /> <span className="ant-picker-suffix" > <span aria-label="calendar" className="anticon anticon-calendar" role="img" > <svg aria-hidden="true" data-icon="calendar" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M880 184H712v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H384v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H144c-17.7 0-32 14.3-32 32v664c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V216c0-17.7-14.3-32-32-32zm-40 656H184V460h656v380zM184 392V256h128v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h256v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h128v136H184z" /> </svg> </span> </span> </div> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields format datetime 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-picker ant-picker-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <div className="ant-picker-input" > <input aria-describedby="root__error root__description root__help" autoComplete="off" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} placeholder="" readOnly={true} size={21} title="" value="" /> <span className="ant-picker-suffix" > <span aria-label="calendar" className="anticon anticon-calendar" role="img" > <svg aria-hidden="true" data-icon="calendar" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M880 184H712v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H384v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H144c-17.7 0-32 14.3-32 32v664c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V216c0-17.7-14.3-32-32-32zm-40 656H184V460h656v380zM184 392V256h128v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h256v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h128v136H184z" /> </svg> </span> </span> </div> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields format time 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root__error root__description root__help" className="ant-input" hidden={null} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="time" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields help and error display 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ant-alert ant-alert-error ant-alert-with-description ant-alert-no-icon panel panel-danger errors" data-show={true} role="alert" style={{}} > <div className="ant-alert-content" > <div className="ant-alert-message" > Errors </div> <div className="ant-alert-description" > <div className="ant-list ant-list-sm ant-list-split list-group" > <div className="ant-spin-nested-loading" > <div className="ant-spin-container" > <li className="ant-list-item" > <div className="ant-space ant-space-horizontal ant-space-align-center" style={{}} > <div className="ant-space-item" style={ { "marginRight": 8, } } > <span aria-label="exclamation-circle" className="anticon anticon-exclamation-circle" role="img" > <svg aria-hidden="true" data-icon="exclamation-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> <path d="M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z" /> </svg> </span> </div> <div className="ant-space-item" style={{}} > . an error </div> </div> </li> </div> </div> </div> </div> </div> </div> <div className="form-group field field-string field-error has-error has-danger" > <div className="ant-form-item ant-form-item-with-help ant-form-item-has-feedback ant-form-item-has-error" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-status-error ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root__error root__description root__help" className="ant-input" hidden={null} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" > <span className="ant-form-item-feedback-icon ant-form-item-feedback-icon-error" > <span aria-label="close-circle" className="anticon anticon-close-circle" role="img" > <svg aria-hidden="true" data-icon="close-circle" fill="currentColor" fill-rule="evenodd" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z" /> </svg> </span> </span> </span> </span> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields hidden field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields hidden label 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root__error root__description root__help" className="ant-input" hidden={null} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields null field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-null" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" /> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields number field 0 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root__error root__description root__help" aria-valuenow="0" autoComplete="off" className="ant-input-number-input" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="0" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields number field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root__error root__description root__help" aria-valuenow={null} autoComplete="off" className="ant-input-number-input" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields password field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-password ant-input-affix-wrapper-has-feedback" onClick={[Function]} > <input aria-describedby="root__error root__description root__help" className="ant-input" hidden={null} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="password" value="" /> <span className="ant-input-suffix" > <span aria-label="eye-invisible" className="anticon anticon-eye-invisible ant-input-password-icon" onClick={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} role="img" tabIndex={-1} > <svg aria-hidden="true" data-icon="eye-invisible" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 000-51.5zm-63.57-320.64L836 122.88a8 8 0 00-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 000 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 000 11.31L155.17 889a8 8 0 0011.31 0l712.15-712.12a8 8 0 000-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 00-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 01146.2-106.69L401.31 546.2A112 112 0 01396 512z" /> <path d="M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 00227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 01-112 112z" /> </svg> </span> </span> </span> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields radio field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-radio-group ant-radio-group-outline" id="root" onBlur={[Function]} onFocus={[Function]} > <label className="ant-radio-wrapper ant-radio-wrapper-in-form-item" > <span className="ant-radio" > <input autoFocus={false} checked={false} className="ant-radio-input" disabled={false} id="root-0" name="root" onChange={[Function]} type="radio" value="0" /> <span className="ant-radio-inner" /> </span> <span> Yes </span> </label> <label className="ant-radio-wrapper ant-radio-wrapper-in-form-item" > <span className="ant-radio" > <input autoFocus={false} checked={false} className="ant-radio-input" disabled={false} id="root-1" name="root" onChange={[Function]} type="radio" value="1" /> <span className="ant-radio-inner" /> </span> <span> No </span> </label> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields schema examples 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root__error root__description root__help root__examples" className="ant-input" hidden={null} id="root" list="root__examples" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> <datalist id="root__examples" > <option value="Firefox" /> <option value="Chrome" /> <option value="Opera" /> <option value="Vivaldi" /> <option value="Safari" /> </datalist> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields select field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-select ant-select-in-form-item ant-select-has-feedback ant-select-single ant-select-show-arrow" name="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} style={ { "width": "100%", } } > <div className="ant-select-selector" onClick={[Function]} onMouseDown={[Function]} > <span className="ant-select-selection-search" > <input aria-activedescendant="root_list_0" aria-autocomplete="list" aria-controls="root_list" aria-describedby="root__error root__description root__help" aria-haspopup="listbox" aria-owns="root_list" autoComplete="off" autoFocus={false} className="ant-select-selection-search-input" disabled={false} id="root" onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onPaste={[Function]} readOnly={true} role="combobox" style={ { "opacity": 0, } } type="search" unselectable="on" value="" /> </span> <span className="ant-select-selection-placeholder" > </span> </div> <span aria-hidden={true} className="ant-select-arrow" onMouseDown={[Function]} style={ { "WebkitUserSelect": "none", "userSelect": "none", } } unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-select-suffix" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields select field multiple choice 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-select ant-select-in-form-item ant-select-multiple ant-select-show-search" name="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} style={ { "width": "100%", } } > <div className="ant-select-selector" onClick={[Function]} onMouseDown={[Function]} > <div className="ant-select-selection-overflow" > <div className="ant-select-selection-overflow-item ant-select-selection-overflow-item-suffix" style={ { "height": undefined, "opacity": 1, "order": undefined, "overflowY": undefined, "pointerEvents": undefined, "position": undefined, } } > <div className="ant-select-selection-search" onBlur={[Function]} onFocus={[Function]} style={ { "width": 100, } } > <input aria-activedescendant="root_list_0" aria-autocomplete="list" aria-controls="root_list" aria-describedby="root__error root__description root__help" aria-haspopup="listbox" aria-owns="root_list" autoComplete="off" autoFocus={false} className="ant-select-selection-search-input" disabled={false} id="root" onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onPaste={[Function]} readOnly={true} role="combobox" style={ { "opacity": 0, } } type="search" unselectable="on" value="" /> <span aria-hidden={true} className="ant-select-selection-search-mirror" >   </span> </div> </div> </div> <span className="ant-select-selection-placeholder" /> </div> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields select field multiple choice enumDisabled 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-select ant-select-in-form-item ant-select-multiple ant-select-show-search" name="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} style={ { "width": "100%", } } > <div className="ant-select-selector" onClick={[Function]} onMouseDown={[Function]} > <div className="ant-select-selection-overflow" > <div className="ant-select-selection-overflow-item ant-select-selection-overflow-item-suffix" style={ { "height": undefined, "opacity": 1, "order": undefined, "overflowY": undefined, "pointerEvents": undefined, "position": undefined, } } > <div className="ant-select-selection-search" onBlur={[Function]} onFocus={[Function]} style={ { "width": 100, } } > <input aria-activedescendant="root_list_0" aria-autocomplete="list" aria-controls="root_list" aria-describedby="root__error root__description root__help" aria-haspopup="listbox" aria-owns="root_list" autoComplete="off" autoFocus={false} className="ant-select-selection-search-input" disabled={false} id="root" onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onPaste={[Function]} readOnly={true} role="combobox" style={ { "opacity": 0, } } type="search" unselectable="on" value="" /> <span aria-hidden={true} className="ant-select-selection-search-mirror" >   </span> </div> </div> </div> <span className="ant-select-selection-placeholder" /> </div> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields select field multiple choice formData 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-select ant-select-in-form-item ant-select-multiple ant-select-show-search" name="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} style={ { "width": "100%", } } > <div className="ant-select-selector" onClick={[Function]} onMouseDown={[Function]} > <div className="ant-select-selection-overflow" > <div className="ant-select-selection-overflow-item" style={ { "height": undefined, "opacity": 1, "order": undefined, "overflowY": undefined, "pointerEvents": undefined, "position": undefined, } } > <span className="ant-select-selection-item" title="foo" > <span className="ant-select-selection-item-content" > foo </span> <span aria-hidden={true} className="ant-select-selection-item-remove" onClick={[Function]} onMouseDown={[Function]} style={ { "WebkitUserSelect": "none", "userSelect": "none", } } unselectable="on" > <span aria-label="close" className="anticon anticon-close" role="img" > <svg aria-hidden="true" data-icon="close" fill="currentColor" fill-rule="evenodd" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z" /> </svg> </span> </span> </span> </div> <div className="ant-select-selection-overflow-item" style={ { "height": undefined, "opacity": 1, "order": undefined, "overflowY": undefined, "pointerEvents": undefined, "position": undefined, } } > <span className="ant-select-selection-item" title="bar" > <span className="ant-select-selection-item-content" > bar </span> <span aria-hidden={true} className="ant-select-selection-item-remove" onClick={[Function]} onMouseDown={[Function]} style={ { "WebkitUserSelect": "none", "userSelect": "none", } } unselectable="on" > <span aria-label="close" className="anticon anticon-close" role="img" > <svg aria-hidden="true" data-icon="close" fill="currentColor" fill-rule="evenodd" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z" /> </svg> </span> </span> </span> </div> <div className="ant-select-selection-overflow-item ant-select-selection-overflow-item-suffix" style={ { "height": undefined, "opacity": 1, "order": undefined, "overflowY": undefined, "pointerEvents": undefined, "position": undefined, } } > <div className="ant-select-selection-search" onBlur={[Function]} onFocus={[Function]} style={ { "width": 100, } } > <input aria-activedescendant="root_list_0" aria-autocomplete="list" aria-controls="root_list" aria-describedby="root__error root__description root__help" aria-haspopup="listbox" aria-owns="root_list" autoComplete="off" autoFocus={false} className="ant-select-selection-search-input" disabled={false} id="root" onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onPaste={[Function]} readOnly={true} role="combobox" style={ { "opacity": 0, } } type="search" unselectable="on" value="" /> <span aria-hidden={true} className="ant-select-selection-search-mirror" >   </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields select field multiple choice with labels 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-select ant-select-in-form-item ant-select-multiple ant-select-show-search" name="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} style={ { "width": "100%", } } > <div className="ant-select-selector" onClick={[Function]} onMouseDown={[Function]} > <div className="ant-select-selection-overflow" > <div className="ant-select-selection-overflow-item ant-select-selection-overflow-item-suffix" style={ { "height": undefined, "opacity": 1, "order": undefined, "overflowY": undefined, "pointerEvents": undefined, "position": undefined, } } > <div className="ant-select-selection-search" onBlur={[Function]} onFocus={[Function]} style={ { "width": 100, } } > <input aria-activedescendant="root_list_0" aria-autocomplete="list" aria-controls="root_list" aria-describedby="root__error root__description root__help" aria-haspopup="listbox" aria-owns="root_list" autoComplete="off" autoFocus={false} className="ant-select-selection-search-input" disabled={false} id="root" onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onPaste={[Function]} readOnly={true} role="combobox" style={ { "opacity": 0, } } type="search" unselectable="on" value="" /> <span aria-hidden={true} className="ant-select-selection-search-mirror" >   </span> </div> </div> </div> <span className="ant-select-selection-placeholder" /> </div> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields select field single choice enumDisabled 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-select ant-select-in-form-item ant-select-has-feedback ant-select-single ant-select-show-arrow" name="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} style={ { "width": "100%", } } > <div className="ant-select-selector" onClick={[Function]} onMouseDown={[Function]} > <span className="ant-select-selection-search" > <input aria-activedescendant="root_list_0" aria-autocomplete="list" aria-controls="root_list" aria-describedby="root__error root__description root__help" aria-haspopup="listbox" aria-owns="root_list" autoComplete="off" autoFocus={false} className="ant-select-selection-search-input" disabled={false} id="root" onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onPaste={[Function]} readOnly={true} role="combobox" style={ { "opacity": 0, } } type="search" unselectable="on" value="" /> </span> <span className="ant-select-selection-placeholder" > </span> </div> <span aria-hidden={true} className="ant-select-arrow" onMouseDown={[Function]} style={ { "WebkitUserSelect": "none", "userSelect": "none", } } unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-select-suffix" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields select field single choice formData 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div aria-describedby="root__error root__description root__help" className="ant-select ant-select-in-form-item ant-select-has-feedback ant-select-single ant-select-show-arrow" name="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} style={ { "width": "100%", } } > <div className="ant-select-selector" onClick={[Function]} onMouseDown={[Function]} > <span className="ant-select-selection-search" > <input aria-activedescendant="root_list_0" aria-autocomplete="list" aria-controls="root_list" aria-describedby="root__error root__description root__help" aria-haspopup="listbox" aria-owns="root_list" autoComplete="off" autoFocus={false} className="ant-select-selection-search-input" disabled={false} id="root" onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onPaste={[Function]} readOnly={true} role="combobox" style={ { "opacity": 0, } } type="search" unselectable="on" value="" /> </span> <span className="ant-select-selection-item" title="bar" > bar </span> </div> <span aria-hidden={true} className="ant-select-arrow" onMouseDown={[Function]} style={ { "WebkitUserSelect": "none", "userSelect": "none", } } unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-select-suffix" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields slider field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-integer" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-slider ant-slider-horizontal" onMouseDown={[Function]} > <div className="ant-slider-rail" /> <div className="ant-slider-track" onMouseDown={[Function]} onTouchStart={[Function]} style={ { "left": "0%", "width": "56.896551724137936%", } } /> <div className="ant-slider-step" /> <div aria-disabled={false} aria-valuemax={100} aria-valuemin={42} aria-valuenow={75} className="ant-slider-handle" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} onTouchStart={[Function]} role="slider" style={ { "left": "56.896551724137936%", "transform": "translateX(-50%)", } } tabIndex={0} /> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields string field format data-url 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div> <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root__error root__description root__help" className="ant-input" hidden={null} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="file" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields string field format email 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root__error root__description root__help" className="ant-input" hidden={null} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="email" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields string field format uri 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root__error root__description root__help" className="ant-input" hidden={null} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="url" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields string field regular 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root__error root__description root__help" className="ant-input" hidden={null} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields string field with placeholder 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root__error root__description root__help" className="ant-input" hidden={null} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="placeholder" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields textarea field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-textarea ant-input-textarea-in-form-item ant-input-textarea-has-feedback" data-count="0" style={ { "width": "100%", } } > <textarea aria-describedby="root__error root__description root__help" className="ant-input" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" rows={4} style={ { "width": "100%", } } type="textarea" value="" /> <span className="ant-input-textarea-suffix" /> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields title field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="Titre 1" > Titre 1 </label> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_title" title="Titre 2" > Titre 2 </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_title__error root_title__description root_title__help" className="ant-input" hidden={null} id="root_title" name="root_title" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields unsupported field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-undefined" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="unsupported-field" > <p> <span> Unsupported field schema for field <code> root </code> : <em> Unknown field type undefined </em> . </span> </p> <pre> {} </pre> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields up/down field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root__error root__description root__help" aria-valuenow={null} autoComplete="off" className="ant-input-number-input" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`single fields using custom tagName 1`] = ` <div className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root__error root__description root__help" className="ant-input" hidden={null} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </div> `; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/test/__snapshots__/Object.test.tsx.snap������������������0000664�0000000�0000000�00000604532�14467713645�0030207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`object fields additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group" > <div className="ant-form-item form-group" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_foo-key" title="foo Key" > foo Key </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper form-control ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input className="ant-input" hidden={null} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} style={null} type="text" value="foo" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_foo" title="foo" > foo </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_foo__error root_foo__description root_foo__help" className="ant-input" hidden={null} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="foo" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block ant-btn-dangerous array-item-remove" disabled={false} onClick={[Function]} title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={{}} > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block object-property-expand" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_a" title="A" > A </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_a__error root_a__description root_a__help" className="ant-input" hidden={null} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_b" title="B" > B </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root_b__error root_b__description root_b__help" aria-valuenow={null} autoComplete="off" className="ant-input-number-input" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group" > <div className="ant-form-item form-group" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_additionalProperty-key" title="additionalProperty Key" > additionalProperty Key </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper form-control ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input className="ant-input" hidden={null} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} style={null} type="text" value="additionalProperty" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_additionalProperty" title="additionalProperty" > additionalProperty </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" className="ant-input" hidden={null} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="should appear" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block ant-btn-dangerous array-item-remove" disabled={false} onClick={[Function]} title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={{}} > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block object-property-expand" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </fieldset> </div> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields with title and description additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="Test field" > Test field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a test description </span> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group" > <div className="ant-form-item form-group" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_foo-key" title="foo Key" > foo Key </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper form-control ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input className="ant-input" hidden={null} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} style={null} type="text" value="foo" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_foo" title="foo" > foo </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_foo__error root_foo__description root_foo__help" className="ant-input" hidden={null} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="foo" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block ant-btn-dangerous array-item-remove" disabled={false} onClick={[Function]} title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={{}} > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block object-property-expand" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields with title and description from both additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a fancier description </span> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group" > <div className="ant-form-item form-group" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_foo-key" title="foo Key" > foo Key </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper form-control ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input className="ant-input" hidden={null} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} style={null} type="text" value="foo" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_foo" title="foo" > foo </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_foo__error root_foo__description root_foo__help" className="ant-input" hidden={null} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="foo" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block ant-btn-dangerous array-item-remove" disabled={false} onClick={[Function]} title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={{}} > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block object-property-expand" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields with title and description from both object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a fancier description </span> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_a" title="My Item A" > My Item A </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_a__error root_a__description root_a__help" className="ant-input" hidden={null} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_a__description" > a fancier item A description </span> </div> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_b" title="My Item B" > My Item B </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root_b__error root_b__description root_b__help" aria-valuenow={null} autoComplete="off" className="ant-input-number-input" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> <div className="ant-form-item-extra" > <span id="root_b__description" > a fancier item B description </span> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields with title and description from uiSchema additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a fancier description </span> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group" > <div className="ant-form-item form-group" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_foo-key" title="foo Key" > foo Key </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper form-control ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input className="ant-input" hidden={null} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} style={null} type="text" value="foo" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_foo" title="foo" > foo </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_foo__error root_foo__description root_foo__help" className="ant-input" hidden={null} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="foo" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block ant-btn-dangerous array-item-remove" disabled={false} onClick={[Function]} title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={{}} > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block object-property-expand" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields with title and description from uiSchema object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a fancier description </span> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_a" title="My Item A" > My Item A </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_a__error root_a__description root_a__help" className="ant-input" hidden={null} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_a__description" > a fancier item A description </span> </div> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_b" title="My Item B" > My Item B </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root_b__error root_b__description root_b__help" aria-valuenow={null} autoComplete="off" className="ant-input-number-input" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> <div className="ant-form-item-extra" > <span id="root_b__description" > a fancier item B description </span> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields with title and description from uiSchema show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="My Field" > My Field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a fancier description </span> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group" > <div className="ant-form-item form-group" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_additionalProperty-key" title="additionalProperty Key" > additionalProperty Key </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper form-control ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input className="ant-input" hidden={null} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} style={null} type="text" value="additionalProperty" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_additionalProperty" title="additionalProperty" > additionalProperty </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" className="ant-input" hidden={null} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="should appear" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block ant-btn-dangerous array-item-remove" disabled={false} onClick={[Function]} title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={{}} > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block object-property-expand" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a fancier description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields with title and description object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="Test field" > Test field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a test description </span> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_a" title="A" > A </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_a__error root_a__description root_a__help" className="ant-input" hidden={null} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_a__description" > A description </span> </div> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_b" title="B" > B </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root_b__error root_b__description root_b__help" aria-valuenow={null} autoComplete="off" className="ant-input-number-input" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> <div className="ant-form-item-extra" > <span id="root_b__description" > B description </span> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields with title and description show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24 ant-form-item-label" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <label className="" htmlFor="root__title" onClick={[Function]} title="Test field" > Test field </label> </div> <div className="ant-col ant-col-24" style={ { "paddingBottom": "8px", "paddingLeft": 12, "paddingRight": 12, } } > <span id="root__description" > a test description </span> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group" > <div className="ant-form-item form-group" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_additionalProperty-key" title="additionalProperty Key" > additionalProperty Key </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper form-control ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input className="ant-input" hidden={null} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} style={null} type="text" value="additionalProperty" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_additionalProperty" title="additionalProperty" > additionalProperty </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" className="ant-input" hidden={null} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="should appear" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block ant-btn-dangerous array-item-remove" disabled={false} onClick={[Function]} title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={{}} > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block object-property-expand" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields with title and description with global label off additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group" > <div className="ant-form-item form-group" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_foo-key" title="foo Key" > foo Key </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper form-control ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input className="ant-input" hidden={null} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} style={null} type="text" value="foo" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_foo__error root_foo__description root_foo__help" className="ant-input" hidden={null} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="foo" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block ant-btn-dangerous array-item-remove" disabled={false} onClick={[Function]} title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={{}} > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block object-property-expand" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields with title and description with global label off object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_a__error root_a__description root_a__help" className="ant-input" hidden={null} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="" /> <span className="ant-input-suffix" /> </span> </div> </div> <div className="ant-form-item-extra" > <span id="root_a__description" > A description </span> </div> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-number" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <div className="ant-input-number-affix-wrapper ant-input-number-affix-wrapper-has-feedback" onMouseUp={[Function]} style={ { "width": "100%", } } > <div className="ant-input-number ant-input-number-in-form-item" onBeforeInput={[Function]} onBlur={[Function]} onCompositionEnd={[Function]} onCompositionStart={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} style={null} > <div className="ant-input-number-handler-wrap" > <span aria-disabled={false} aria-label="Increase Value" className="ant-input-number-handler ant-input-number-handler-up" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="up" className="anticon anticon-up ant-input-number-handler-up-inner" role="img" > <svg aria-hidden="true" data-icon="up" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z" /> </svg> </span> </span> <span aria-disabled={false} aria-label="Decrease Value" className="ant-input-number-handler ant-input-number-handler-down" onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} role="button" unselectable="on" > <span aria-label="down" className="anticon anticon-down ant-input-number-handler-down-inner" role="img" > <svg aria-hidden="true" data-icon="down" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" /> </svg> </span> </span> </div> <div className="ant-input-number-input-wrap" > <input aria-describedby="root_b__error root_b__description root_b__help" aria-valuenow={null} autoComplete="off" className="ant-input-number-input" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" role="spinbutton" step={1} type="number" value="" /> </div> </div> <span className="ant-input-number-suffix" /> </div> </div> </div> <div className="ant-form-item-extra" > <span id="root_b__description" > B description </span> </div> </div> </div> </div> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; exports[`object fields with title and description with global label off show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <fieldset id="root" > <div className="ant-row" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col ant-col-24" style={ { "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group field field-string" > <div className="ant-row ant-row-top" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="form-group" > <div className="ant-form-item form-group" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-label" style={{}} > <label className="" htmlFor="root_additionalProperty-key" title="additionalProperty Key" > additionalProperty Key </label> </div> <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper form-control ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input className="ant-input" hidden={null} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} style={null} type="text" value="additionalProperty" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> </div> <div className="ant-col form-additional" style={ { "flex": "1", "paddingLeft": 12, "paddingRight": 12, } } > <div className="ant-form-item" > <div className="ant-row ant-form-item-row" style={{}} > <div className="ant-col ant-col-24 ant-form-item-control" style={{}} > <div className="ant-form-item-control-input" > <div className="ant-form-item-control-input-content" > <span className="ant-input-affix-wrapper ant-input-affix-wrapper-has-feedback" onClick={[Function]} style={ { "width": "100%", } } > <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" className="ant-input" hidden={null} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} placeholder="" style={null} type="text" value="should appear" /> <span className="ant-input-suffix" /> </span> </div> </div> </div> </div> </div> </div> <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block ant-btn-dangerous array-item-remove" disabled={false} onClick={[Function]} title="Remove" type="button" > <span aria-label="delete" className="anticon anticon-delete" role="img" > <svg aria-hidden="true" data-icon="delete" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="ant-col ant-col-24" style={{}} > <div className="ant-row ant-row-end" style={ { "marginLeft": -12, "marginRight": -12, } } > <div className="ant-col" style={ { "flex": "0 0 192px", "paddingLeft": 12, "paddingRight": 12, } } > <button className="ant-btn ant-btn-primary ant-btn-icon-only ant-btn-block object-property-expand" disabled={false} onClick={[Function]} title="Add Item" type="button" > <span aria-label="plus-circle" className="anticon anticon-plus-circle" role="img" > <svg aria-hidden="true" data-icon="plus-circle" fill="currentColor" focusable="false" height="1em" viewBox="64 64 896 896" width="1em" > <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" /> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" /> </svg> </span> </button> </div> </div> </div> </fieldset> </div> </div> <div className="ant-form-item-extra" > <span id="root__description" > a test description </span> </div> </div> </div> </div> </div> <button className="ant-btn ant-btn-submit" disabled={false} onClick={[Function]} type="submit" > <span> Submit </span> </button> </form> `; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/antd/tsconfig.json��������������������������������������������0000664�0000000�0000000�00000000271�14467713645�0023223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": "../../tsconfig.base.json", "include": ["src"], "compilerOptions": { "rootDir": "./src", "outDir": "./lib", "baseUrl": "./", "jsx": "react-jsx" } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/��������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021744�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/.eslintrc�����������������������������������������0000664�0000000�0000000�00000000164�14467713645�0023571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": ["../../.eslintrc-typescript"], "plugins": ["@typescript-eslint", "jsx-a11y", "react", "import"] } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/.gitignore����������������������������������������0000664�0000000�0000000�00000000011�14467713645�0023724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.rts2_** �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/README.md�����������������������������������������0000664�0000000�0000000�00000006615�14467713645�0023233�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!-- PROJECT LOGO --> <br /> <p align="center"> <a href="https://github.com/rjsf-team/react-jsonschema-form"> <img src="./react-bootstrap-4-logo.png" alt="Logo" width="140" height="120"> </a> <h3 align="center">@rjsf/bootstrap-4</h3> <p align="center"> Bootstrap-4 theme, fields and widgets for <a href="https://github.com/mozilla-services/react-jsonschema-form/"><code>react-jsonschema-form</code></a>. <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/docs/"><strong>Explore the docs »</strong></a> <br /> <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/">View Playground</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Report Bug</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Request Feature</a> </p> </p> <!-- TABLE OF CONTENTS --> ## Table of Contents - [Table of Contents](#table-of-contents) - [About The Project](#about-the-project) - [Built With](#built-with) - [Getting Started](#getting-started) - [Prerequisites](#prerequisites) - [Installation](#installation) - [Usage](#usage) - [Contributing](#contributing) - [Contact](#contact) <!-- ABOUT THE PROJECT --> ## About The Project Exports `bootstrap-4` theme, fields and widgets for `react-jsonschema-form`. ### Built With - [react-jsonschema-form](https://github.com/mozilla-services/react-jsonschema-form/) - [Bootstrap-4](https://getbootstrap.com/docs/4.0/) - [Typescript](https://www.typescriptlang.org/) <!-- GETTING STARTED --> ## Getting Started ### Prerequisites - `react-bootstrap >= 1.0.1` - `@rjsf/core >= 2.2.0` ```bash yarn add react-bootstrap @rjsf/core ``` ### Installation ```bash yarn add @rjsf/bootstrap-4 ``` ## Usage ```js import Form from '@rjsf/bootstrap-4'; ``` or ```js import { withTheme } from '@rjsf/core'; import { Theme as Bootstrap4Theme } from '@rjsf/bootstrap-4'; const Form = withTheme(Bootstrap4Theme); ``` <!-- CONTRIBUTING --> ## Contributing Read our [contributors' guide](https://rjsf-team.github.io/react-jsonschema-form/docs/contributing/) to get started. <!-- CONTACT --> ## Contact rjsf team: [https://github.com/orgs/rjsf-team/people](https://github.com/orgs/rjsf-team/people) GitHub repository: [https://github.com/rjsf-team/react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form) <!-- MARKDOWN LINKS & IMAGES --> <!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --> [build-shield]: https://github.com/rjsf-team/react-jsonschema-form/workflows/CI/badge.svg [build-url]: https://github.com/rjsf-team/react-jsonschema-form/actions [contributors-shield]: https://img.shields.io/github/contributors/rjsf-team/react-jsonschema-form.svg [contributors-url]: https://github.com/rjsf-team/react-jsonschema-form/graphs/contributors [license-shield]: https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat-square [license-url]: https://choosealicense.com/licenses/apache-2.0/ [npm-shield]: https://img.shields.io/npm/v/@rjsf/bootstrap-4/latest.svg?style=flat-square [npm-url]: https://www.npmjs.com/package/@rjsf/bootstrap-4 [npm-dl-shield]: https://img.shields.io/npm/dm/@rjsf/bootstrap-4.svg?style=flat-square [npm-dl-url]: https://www.npmjs.com/package/@rjsf/bootstrap-4 [product-screenshot]: https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/bootstrap-4/screenshot.png �������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/babel.config.js�����������������������������������0000664�0000000�0000000�00000000126�14467713645�0024612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const defaultConfig = require('../../babel.config'); module.exports = defaultConfig; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/jest.config.js������������������������������������0000664�0000000�0000000�00000000025�14467713645�0024510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������module.exports = {}; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/package.json��������������������������������������0000664�0000000�0000000�00000005205�14467713645�0024234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "@rjsf/bootstrap-4", "version": "5.12.1", "main": "dist/index.js", "module": "lib/index.js", "typings": "lib/index.d.ts", "description": "Bootstrap 4 theme, fields and widgets for react-jsonschema-form", "files": [ "dist", "lib", "src" ], "repository": { "type": "git", "url": "" }, "scripts": { "build:ts": "rimraf lib && tsc", "build:cjs": "esbuild ./src/index.ts --bundle --outfile=dist/index.js --sourcemap --packages=external --format=cjs", "build:esm": "esbuild ./src/index.ts --bundle --outfile=dist/bootstrap-4.esm.js --sourcemap --packages=external --format=esm", "build:umd": "rollup dist/bootstrap-4.esm.js --format=umd --file=dist/bootstrap-4.umd.js --name=@rjsf/bootstrap-4", "build": "rimraf dist && npm run build:ts && npm run build:cjs && npm run build:esm && npm run build:umd", "cs-check": "prettier -l \"{src,test}/**/*.ts?(x)\"", "cs-format": "prettier \"{src,test}/**/*.ts?(x)\" --write", "lint": "eslint src test", "precommit": "lint-staged", "test": "jest", "test:update": "jest --u" }, "lint-staged": { "{src,test}/**/*.ts?(x)": [ "eslint --fix", "prettier --write" ] }, "peerDependencies": { "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "react": "^16.14.0 || >=17", "react-bootstrap": "^1.6.5" }, "engineStrict": false, "engines": { "node": ">=14" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "babel-jest": "^29.6.2", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "react": "^17.0.2", "react-bootstrap": "^1.6.7", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "publishConfig": { "access": "public" }, "keywords": [ "Bootstrap 4", "react-jsonschema-form", "jsonschema", "json-schema", "json", "schema", "form", "react", "bootstrap-4", "rjsf-bootstrap-4" ], "contributors": [ "Heath Chiavettone <heath.chiavettone@freenome.com" ], "license": "MIT", "dependencies": { "@react-icons/all-files": "^4.1.0" } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/react-bootstrap-4-logo.png������������������������0000664�0000000�0000000�00000043342�14467713645�0026670�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������������gAMA�� a��� cHRM��z&���������u0��`��:��pQ<���bKGD�����EIDATxyu3* ("z\:*jzNtJO,MX=0 /}O_`{y> uםEsck[Ed"W>{iWiDZFϿCDX�V}D4ED$qBcDL#YIi&VD+|2$Ҙ>x]Wb7nܸlfnFd$w18"vG�`J#bID̏;ixu)FmD-pWgL$H:�@"Wȼij˒˓'׶F�g'VáQi&#e�#iOuԮ2�(Q=*wp iGā �P&iII/lH�G]#ɞ4c#U��""byD<&Ƀ͙\$(t`mN!$M"?u�'49۞]gPΧIiz|DT[�U6i<d2{o\`P0Na|sƿ{��$I'F>Mv�Voji>)M#��l/irCuMȏ!�ݩckw̵\Fn �HnH[=3a9@KG+i|6\�P(#I$ÉO]9V;cc"e>��,M#$r�[1O+#(k��\>+4�.?4㓈�PK#nL!�>doƁ?�@II#\6w񝓿7 uILőû�$Iod*/}r Pj6?I �*M噊'Om�eQ#$��@I#^fԕS@ wݒWD~5"2��Iĭ=SJ�3G?1M:��˒IS')�J;$/"<�HiL6/٫ "u񟎈#g4��aE&Np�("zǤ#M/�ɷt[Q�(Q$m1S�V(HrLzK}eK1:ce%~��leH>?|ИY <[:V 7si:3�FrOT5[5kvvoOw%=5�hGsȝZ7{o7QouƨNJs�&qˊ㯈$eDT{.�TE$zwSEy ]l_-�`IcRso\ �٣.ќTܕD��Lf+>}3~L>y Mag��\p甫 6rKH#`D� quO_�ڃ#/?8ͧEDO,�� ؚ4PԕYз=cec|��@$>zƨV8sG<]<��(5gB }�ƍ#}?��ŧ""9u1Z8ev}q3nj?6Mވ�5?n�їH��JL'1qK3#��JK}M0M�Q&n?��i]7>�NU;$< �RƲLEawL]=zq&-8�%/kyQ(�8+��@س%_x Y۩"(��̘.rF`gED\�L=|1鬅Sֿ63G_vJQoB��P4u%�gi}."y� 'I:qUonp`iRq��.iwshmR $nH�_\99EgHk[��{5N޿QWƙ/= 3 ��1$1ʗ7iKN:S�UON:S@N-?Kt��6˞k؞A]t񟎈=��e$NrսE�ZfFDo��l٦>?{r P?��Z|X?ᙣƟ&q ��`=ĩ)�wݒY@��l0vM[}6(i��h3:'1{[}FOFoa ��e"u&LkO&g�ƍ'q��hs$I~1nܸl@,c��b̲_hOcKz$o~�@{Zޔck_g�rI ��Tro'٪3�ggƫQ��vלcWi'ت3�4~��$ߚO3�g|&y.��4CNx5g�I\��$׶¸QJd�`{U@z)l/k$I8��lGilq�1j1q�`:QǶ{�D��|+ͷ5�}\d^ /�~]~E� -q_60HED+�@hnV kr{} |?��ʊ|W7~s>蟏qS{ݾ��PpVoX}/n{Yg�7v<?��:NߜܼK2m ��+M6^4n$iI�wNr}=��A6=w;&5#9�씭ɵ { S��P4zZNc|Y6�Dw~o;ڮZED�hlL&n[?g�Z*sv��ES|GG@g��Od>Xo^tKz$K#��4Uf @.=?��h8o߾(`3��(^IYP4cL��ES7.P�9k/��(j;9n�D&s��(�H���$5A[۽Cee|���E!?X~;[p��%}&#m��#I#?:�"���PJpWF�rر ՝��%OKn@&Cm��'ɤ}(�"}M��%�P�I0 ��4qe#bi��$ `ڨ%�w=���JU͛G�+\��%,�2I��(eI�H#$��Pv_��J} @"���, ꍹ���Dw^)S2?��LMvD��(ȷ $ 0��4HM�� 靉2��4z9���w&M��r+D ���$ޙ4)��,d"h��(}IDu&)��U���P:d"��P������l�d���e!������������������ ����������@��������������������@����������������� ����������@���������� ����������@����������������� ���@�������(%&VdcCQ��#yن9Z~CC456Gsc_XnclXucݚXjCԈ��bQU]UՕѹk-\^!V~6V._WƊekb{+c{+Ȁ��RF~ݢwn4W)Ew ��(%I%>`_ܺ5Kwo-,|>o8@��@ڽ&9h]c ݷƼ9c̅cݚzc��JQu1tc>;iVĬ߉Y/Ϗ ��(EIıxHX֒⼘; 9g(@��@)d21d2l`rhlhY/͋O}3֮v ��dUUWG }xwioƌ'_56��P!CsoZS~9?>367��PL{ 1Wsf��P:TUGGO^><J<gcŲ��)猎<"^>;H8��RơGCK[l<zbʘ��W{ŹOFQQӹ(��R׭g8&}#1QӥQ���su#o_:6:8#���(y;U)猎k'~=N9gtt4 ��u)ұ=F3"$1 ��-.θ_݇d��@9u/W.;-l��@K2I~=9 ���AMEw~~^߱A@���`57}%N9gtd2 @���%2ұkϋ��P?1���N5qwW.;-;��P|jލ; ��r0pP__Ce ��@9!ʳ/I{���J^$q9[;':T��P8|h|[���a`Oc���A=?b mc���A??/{gc���AM1'ư��(Uk) ` ��@9TS\ ��(]u?\sw ��@yѻK\En��(&Yc���8 ��r13G��P.˟b��@9H2I\qѽggc���A>5$1��w^���('92t!@��� [/_򏑭� ��;Ig��P6N'b>���ʊ7NvW ��@k1S��P.>OFUu!@���gq��P.>Oc[Ά���ύ5��\sAѻ_7C���A"'5 ��rqIE^ ���( *3��\waQӹ ��rб*>Y aeҜ3DԹ:$*CUED2wI'=i�PJ~pɭ|C7UUw:G[޳st9v}}o8]j;op|c��\464ŲūbUXe6;v;1 ۀE� ��௵4behn=jbv{F ] ʬȡGuk��>ѱSU8t^qШ=s׎F*l>v㤧��̦s⥧D&sONqqQD7o<U8j���N>ٯ_{7n=b,���\./L/Lv~8ă8 I8lqӌm�({/\7_@\p揣OD>1 ��]]qY?{oMFَvˀ���júMq/ν.^zzA$I ��e﯎k.5~xbF@��´7s鏽fmlwl7r��؆u+ V:v ��`+qЈw3��~}{iyc[��mͪ Q{M1wΆ A��⇗^ov��B45]1|'#��B%ƊekNvs@��@XjCۢ`���f%4D;C֣!@��@ayiok?#��s hcwm��Px֬w!:�5��(L|,m���478 Ц0H���ʳs f5]:��nym߀F���k 7Dշ@��@a㤧VЧ@��@a1yVԯd6г3� ��57Ĵ^3D���P&?$����E`ՆJ=z;���sS0V}�@��@x~FJ:WE$���oE[sDu���/7Vr��(3_gԩs@��@qB#l���wFsS!Bu*#��Ҝsb+d+��"2**F���a+d���(&V� ��@�lU�8����/ ��ȬZOS#��zz#Q���EF���-� jr���`+ A��@q P��uk7 �� |x ����eqS@��@[mJ���;ٴΦ ���(�pU֬`��P @? ��yp��\K%@ ��e+��� luF���ŧR�{ >0��(>ՕFB|>_ ��t[hU ��t6Z4? ��Hu,�A��@ٻТy���aK%@ ��X#�Dæx;���"wFo0r-9C��^Fo ��8UUwp z���Ԁ{G$LM-Λ ��Ӯa ̝([ ��Ӑ\��ڮ<#��ԩ:v޵!6Ӻ51gBC��D&SoD.7��(N[����nʹ~x���i]Ezb3=7? ��<zO#la����c1fZvc|?A��@uqp_Clz9r-9C��ta <qF���ũcMU9v?Clٯ]n��P>XSe3���S6N;iŲ��buGb3=g��lٱL7y/��(^<czlo0��(>zĸ2fZ>_��P>sQӹ>66��cO_k}/��o}:$1fODSc!@��@9LK'x ��<fD}AŃk��v_)/=='^> ��t9s16SsSK| ��Kʸ곣onz" ��xTTfW{ [`lj ��G"_=38|1@Ks.~y" � ;.17< Yj��P;7L{nB/x+8iC��ЫO׸sbB+믺345��(|{78޳1P.km4��(lIolE pǍŜ �� [ǚo3sۧ��_c=J -A��@\;*;H2AZiqŷc��ta8)zjicc|[Ċek�� ώ9zlpwZ\>~V;1]b ��PX3&:d2i7_xe\C��±qڹQǎp߆nz"9C��/IsAq;Ymi<wv!@��UӥcqiN3H;+ ��`;TS#5?j8h䰨z$TC��m߀q#ƞvп ~ãA��@XS?vc@ : wp0H>\@<t׳���mTe6z=t>;t^}Šv];+Ļn Mq g�;攃cC*CEtTl&jTG&D\=v=;Z.Vo�`}1F"q%Ɗek��(e<;7~V;167��P|njL#��P֮;g��P^q^��(U\>S<i>5��T-[*~ً��(U\>ٸǢaSA@���j%q ��Rwɸn ��(e/x+~b5���Ex9���]y2%���JUMqƃM��xgN 6��P67_{~75VXo@��@)ZjC<v@Q ��RtxGsSA���H˘��Knb>$1- ��#?<nXnc5say}a~x"s@��@IҵS8rX8rXDD464[//3_x'yH��RUU!9h]# ?7x~1"{� ��d0gQqgFoƌ'_7^] @���G.qc?}HZ.}jVL~X0wq@���gq^BL{hlh2��:l`:l`9#_f��@)XSǜ|P}ҁ1wۦ/3 ��%I#-F[,$XtL{罿�  �Mw_oA���`>+Ί+q'6��<_|?ό{���weE5��$ĘO?8#x}���u)xq/wc��@9c㚛-N9gtd2/@���%CEc0��>|榯ĨOk ��@9ة*.eEu��1/. ��orsЮ���];Ʒ8Í��(l&>w @���S⬨Pa ��@98d^~6:T��PK|矏];��Pvc@D���":���(w\QU]A���ea;7>;**���}5SO���\:fD}' ��('=: ��(}m ��(*Wt5 �Êek#ұSf3QUbLWM?�Pj/Xt!hѡ2**Qݱ2t.:Ekݯ[١{=z]v2Z6bP;器nj�rM-vuIJWw) .{ !{ 5U,>gLxw��>uc̅1g¿X$Îbv=F ;6VJ2I|u_kWo0��2iƒE+bɢ1W"Oכ8d8!EjCn=;qRx���[oͪ 1WbCD"{;(>qؽ@2f8}g��\K.^q^⼸gǾcO?9,D=cKbzc@+x��،x9qqc򃵆Nt}$C��z₳~_}g,(ac5��6r-+]?whFνjf�� iO}3_W Sm��B Ɣ^kLѾ>}Θۿ!@��~x\tu1ӻֶ?i��}-]*&|7qMMiGw1|'C��+Mx[E{i'I8 ��� DzWw/xh'{ۂ��Ҝ_Ilv0"IC��3)֬`66d= �� o<vX#��³|隨W`c1=d7C��³~ o^_h6t�� q7o6Cb �� ӦƸwF���kڍqE+ <f֣!@��@ZlmxbTYYǜ|!@��@a;kQ{ >F` ��Myx =9pWC��w^jt��榖{=V:hԞѵ{!@��@[4Yۧ **q'6��(6%]bp��\."MSc}v^}��^3D+%IG,���("h456?�@��@Ylm<t CҐG.���ۧEæ&CB$qC ��_0D+x0#��r#ג3D+}4�P<V-_O}С2o!�&�?��@qyނ (�@��@7k.];��[�ib %��&�|xEhl��P|^n@𝌀���ϋO1B+2t@TVV��.Wb UVVĠw0��(>3_x^.B���Eh o��P|�2hW�!��"jXjClD60��sa UVVD{��a�]bVp��(J @ p���5�@���Ehd-F@���'MXXg���@ZJ#l5UѭGgC ��bZ#B=���Ϛ v3��(>VV@F@���)���@1ڰ~���(К�-���@ڸХ{'# ��" �g�Z�]���(B\>!P#$@���E-`2ܹ!��@ii���g�@ktTe��P'eo���O"kV���( �g���@1:U+���Keeٷ6�\���MdZ٬!��PdR���2ҩsZ{0$���@ջٶ3���=8B���E{Ojn���M>]J��@qW�VK�@���Ef{A���rdۿ!Z�.B���ŤWѡ �g���@1i~F -F@���c=a+ԯo0��(w�[cMF@���E� Q/���@޳s[a:���İ}a+o���X`65 (��(bv# ��Ыoy�˗1��(1[ik���a���AM1 V,���z^QQ5V# ��7Fh˗ ���P=!RKs.-^e��P>y!#|khEryC ��UQ'`6ނ��� ۨcFD5h,7��(\Iĉg2Dq���G;md<��� TIslo[a��PFr{Cx/|j��Px**q2Dzk"# ��t#߀hCY��١{zhCi7@���_㤨`6tXv!��@ab0D<# ��ҷ8k'F@���#k|zy!��@8_=`~&C ��0q# N^}? ��@ : O&�@��@!7G\|?GUu1U��lgzt~޳1ތ|>o �`ڽ&so`Ocg��l?z?|<1u 0�l{tK|n81͎\? ��`;qq?v36׍���%.3Qӥ1+kϽc��msAqNlES? ��`۩_I1ScK4&?!@��1d`1`\K0��h_l&N>{t'\=KF���kv/:%1'��.:<H2A}! ��l{!qyGEMj\K.k!@��@PUGtPQѳOWx=V._g��jtO:(N<ֳA ��lO1QU]iKb%���[kÿ}쾱밁)w@��ѻKx8xԞAyW��|bCbCw!CDgI4n1C��ֳOuu}NCkSߌy��($ѳWӿG 'vܥo4o4_tw瞒c<n�@XS5]:?OX+[ßٱCt1v;E5ѣWշ[-**]_.&?rC�� #�mbúMq?jL��uk ��(uf/ ��RO4��PkF{���W ��Pr|\we]4lj2��.��ysޏob��@۴1Ik��P4何���oy*f<!@���މ4��-_&| ��R!-~Fc���JYKs.~r��(ei>}|c���Jo~;���]C���J&& C@;0�?qzrC���{oaC���J=M#���4Mc<w1@���,ǯ~r_<~ ���Mgߝ<; ��RzŷĂK��(e ._|K^ ��R6W ���/~1@���lk'߹#~=c���JK̉'m2��T556o~2}Z ��RW/\a ��@qc\K ��R`^ ��Rwfr��}bZc���Jղū⦟̘k ��@X:5Xt47��Pr-xcү ��(EiƳgnx4-^e��@zys7��T|᝘cE���43ފ_?oA���9{-pXhA@���h 1f ��(E|<+��(EM-1cx��P[ALyxcڍ�� 6Ōɳ{s��PjgG^Q���%fN<3x~ʛicQ���9^q~@��@`xex幹DcCQ���%fn|;1oF��\K.ޙ~̙nҼx��P*bܥ1wc W���]% .s[ŻsD.7 ��5lj|z?y?]��(Z+% WVĒE+cɢ5S��IMrXlMZ.V~..^K%VDæ&#�� YScs_)6cڍ~m}XbŲ��fjii [Ms.^nܰ)Z""~CC47DcCslܰ)[97DSSs45bM~m}_A=H=��P&2&���������@����������������� ����������@���������� ����������@����������������� ���@����%�93��@Ye"��P���Y�4��'��� ���$1F4��J_ѐI"V��ªLD��dE&"���PtE&d%�� $L���2L5���P2YG,1��|6Y4��J_9?/SSYnD��%-_[(sچXj��(iͪmDD ��%m~DD&"" ��RD y$��PH%�4 ��$�4I��t3�{Nz;"��%ijk�j6��'9�.�cD���@)@�L24��Pg>�˒<��PR6,d?|`ږH��#xzږt�@I%_gR���$I}d�Du3��T<P5k#;�@IQ7vG@DD$��:P�i��eS+_��EmS|@m#Q{�@J"}("ҿ�i ��X7.�hdF�@Qjl>ɵk"I��4n{vf@DD�d<�ؔk7"6��ƪM�w֧7�bDw#?�S��@A Nʊ��PVYV͓k"In#��4n~[�IeI��($w�\fD<cN��(4M[�I7�� :6}`㦊ƨ��PVGn,�{vcDr]� W3?ݬ7lgL[FDm�4Dg&, ��$IokK<�""lGZ�� Be~%``_H3��;_9 ""M�� ?[�uSz"Ik�vN2aJJ#s�`INk~]`+G��4'f��`g2ŭiWFr�`[Jԕo�g[.f��lMIr| ;'ovDr��_Ӿv l?#b�� [I[ f/0|Б#D ��4{{lɴ#U ��çT->W@]]].p[P��hk$_|[|l[}Uޝ$�@EݔnlOi˯[��†|em 4�n{v]8�K?X_Q7?Fy��4~W7{f6. ���A>}=>q^, w�-F~n/ԳUZ4F+��l$'M;e+ia�:#߲[;k�<!I>ML��XIg=Mdx)KS�GHoLw1kwW$1# ��ri-~̶ҊI#fyl�̬m%;;mݳi<<��klukVaf[~wwNjn?��4M6z 6kԷDX9��eu&M;KDq� >iU_qf;}iF�2k?�qË74wh<5"fz��P7*Җ|W'8kl|KˌH'��%lIK.='=^ɵ I؈X9�@ZI�OL=7��(1H?uǔ+_./&S(1g##s�))uS'<W(_P֙4i&�@k$NcU JoԼƼ��1IS'_h_XR5$"��EdcDISx;G�"!M┺)W=Q_`R 5䡈�@[&N0Ȥwĥ%C, �$nzkfaͺ~%SQqXD��$ՒK/ ?cpS6;2IO3�� يQn9{䆽}{)?("|�`{I"9]Uy]]{1jw"��@qJ#I3iʄ3\ظїC[#!��4M?W7m ߞ[[k+"|�dvdS'Nb>2@M};VDL�ޡӦ?Į?cG"s�6iI&\[*Pɽd%#<_� ouO_J)}Sْ{MY~ȐnnkD�J"nٴ仟rQ ~oTD�Ͱ<_&Mp_~R~f-|Gd�q{s;_r)esycƟi2"v�y?MӯD\YN{Cn*qDxm��@K$!|ӿj|ey<neLr]=�@Yz)$_{g/ۿ̛rFH��4+ߜ_q fIHb��9i=vru'Fdq]��JFqw>9媹ps>I呦�Po1} �י#/;,I.K"N�@QFrY+2�bg?6){�4"$fҔ S!�ic䫑GDE�� BS11L|�mٖ #/EDw��l4$w]S^b?뻞&q-�4ӦnyG�Ÿ&|q^D�@Z$L^ԫ_3�(AU ]O$sf?DD'��H$լ^hPI1IK#N��|4LmJw֛D�g sqh8.I#"~V�IIC=[$67""C",�@hIMz{#�?{QMƪHFIJ"Fۋ�>"^$E>TQ9kטE�gcVidÒHG4� HbVkϼInF~L#�#gIF.Ș�F8"GHҷ|GwN.�qk;{ %^IIWiDZF5"Q*�@9K"]XI2tED<M+LLdXX7|I'3���%tEXtdate:create�2019-10-26T16:02:57+00:00���%tEXtdate:modify�2019-10-26T16:02:57+00:00ݹ����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/����������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022533�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/AddButton/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024417�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/AddButton/AddButton.tsx�����������������������0000664�0000000�0000000�00000001234�14467713645�0027043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; import Button from 'react-bootstrap/Button'; import { BsPlus } from '@react-icons/all-files/bs/BsPlus'; export default function AddButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ uiSchema, registry, ...props }: IconButtonProps<T, S, F>) { const { translateString } = registry; return ( <Button {...props} style={{ width: '100%' }} className={`ml-1 ${props.className}`} title={translateString(TranslatableString.AddItemButton)} > <BsPlus /> </Button> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/AddButton/index.ts����������������������������0000664�0000000�0000000�00000000104�14467713645�0026071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './AddButton'; export * from './AddButton'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/ArrayFieldItemTemplate/�����������������������0000775�0000000�0000000�00000000000�14467713645�0027070�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ArrayFieldItemTemplate.tsx��������������������������������������������������������������������������0000664�0000000�0000000�00000005517�14467713645�0034116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/bootstrap-4/src/ArrayFieldItemTemplate�������������������������������������������������������������������������������������������import { CSSProperties } from 'react'; import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; import { ArrayFieldTemplateItemType, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export default function ArrayFieldItemTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateItemType<T, S, F>) { const { children, disabled, hasToolbar, hasCopy, hasMoveDown, hasMoveUp, hasRemove, index, onCopyIndexClick, onDropIndexClick, onReorderClick, readonly, registry, uiSchema, } = props; const { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } = registry.templates.ButtonTemplates; const btnStyle: CSSProperties = { flex: 1, paddingLeft: 6, paddingRight: 6, fontWeight: 'bold', }; return ( <div> <Row className='mb-2 d-flex align-items-center'> <Col xs='9' lg='9'> {children} </Col> <Col xs='3' lg='3' className='py-4'> {hasToolbar && ( <div className='d-flex flex-row'> {(hasMoveUp || hasMoveDown) && ( <div className='m-0 p-0'> <MoveUpButton className='array-item-move-up' style={btnStyle} disabled={disabled || readonly || !hasMoveUp} onClick={onReorderClick(index, index - 1)} uiSchema={uiSchema} registry={registry} /> </div> )} {(hasMoveUp || hasMoveDown) && ( <div className='m-0 p-0'> <MoveDownButton style={btnStyle} disabled={disabled || readonly || !hasMoveDown} onClick={onReorderClick(index, index + 1)} uiSchema={uiSchema} registry={registry} /> </div> )} {hasCopy && ( <div className='m-0 p-0'> <CopyButton style={btnStyle} disabled={disabled || readonly} onClick={onCopyIndexClick(index)} uiSchema={uiSchema} registry={registry} /> </div> )} {hasRemove && ( <div className='m-0 p-0'> <RemoveButton style={btnStyle} disabled={disabled || readonly} onClick={onDropIndexClick(index)} uiSchema={uiSchema} registry={registry} /> </div> )} </div> )} </Col> </Row> </div> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/ArrayFieldItemTemplate/index.ts���������������0000664�0000000�0000000�00000000136�14467713645�0030547�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ArrayFieldItemTemplate'; export * from './ArrayFieldItemTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/ArrayFieldTemplate/���������������������������0000775�0000000�0000000�00000000000�14467713645�0026251�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx�����0000664�0000000�0000000�00000005307�14467713645�0032534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; import Container from 'react-bootstrap/Container'; import { ArrayFieldTemplateItemType, ArrayFieldTemplateProps, FormContextType, getTemplate, getUiOptions, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; export default function ArrayFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateProps<T, S, F>) { const { canAdd, disabled, idSchema, uiSchema, items, onAddClick, readonly, registry, required, schema, title } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const ArrayFieldDescriptionTemplate = getTemplate<'ArrayFieldDescriptionTemplate', T, S, F>( 'ArrayFieldDescriptionTemplate', registry, uiOptions ); const ArrayFieldItemTemplate = getTemplate<'ArrayFieldItemTemplate', T, S, F>( 'ArrayFieldItemTemplate', registry, uiOptions ); const ArrayFieldTitleTemplate = getTemplate<'ArrayFieldTitleTemplate', T, S, F>( 'ArrayFieldTitleTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; return ( <div> <Row className='p-0 m-0'> <Col className='p-0 m-0'> <ArrayFieldTitleTemplate idSchema={idSchema} title={uiOptions.title || title} schema={schema} uiSchema={uiSchema} required={required} registry={registry} /> <ArrayFieldDescriptionTemplate idSchema={idSchema} description={uiOptions.description || schema.description} schema={schema} uiSchema={uiSchema} registry={registry} /> <Container fluid key={`array-item-list-${idSchema.$id}`} className='p-0 m-0'> {items && items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType<T, S, F>) => ( <ArrayFieldItemTemplate key={key} {...itemProps} /> ))} {canAdd && ( <Container className=''> <Row className='mt-2'> <Col xs={9}></Col> <Col xs={3} className='py-4 col-lg-3 col-3'> <AddButton className='array-item-add' onClick={onAddClick} disabled={disabled || readonly} uiSchema={uiSchema} registry={registry} /> </Col> </Row> </Container> )} </Container> </Col> </Row> </div> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/ArrayFieldTemplate/index.ts�������������������0000664�0000000�0000000�00000000126�14467713645�0027727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ArrayFieldTemplate'; export * from './ArrayFieldTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/BaseInputTemplate/����������������������������0000775�0000000�0000000�00000000000�14467713645�0026121�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/BaseInputTemplate/BaseInputTemplate.tsx�������0000664�0000000�0000000�00000004225�14467713645�0032252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import Form from 'react-bootstrap/Form'; import { ariaDescribedByIds, BaseInputTemplateProps, examplesId, FormContextType, getInputProps, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; export default function BaseInputTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ id, placeholder, required, readonly, disabled, type, value, onChange, onChangeOverride, onBlur, onFocus, autofocus, options, schema, rawErrors = [], children, extraProps, }: BaseInputTemplateProps<T, S, F>) { const inputProps = { ...extraProps, ...getInputProps<T, S, F>(schema, type, options), }; const _onChange = ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onChange(value === '' ? options.emptyValue : value); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, value); // const classNames = [rawErrors.length > 0 ? "is-invalid" : "", type === 'file' ? 'custom-file-label': ""] return ( <> <Form.Control id={id} name={id} placeholder={placeholder} autoFocus={autofocus} required={required} disabled={disabled} readOnly={readonly} className={rawErrors.length > 0 ? 'is-invalid' : ''} list={schema.examples ? examplesId<T>(id) : undefined} {...inputProps} value={value || value === 0 ? value : ''} onChange={onChangeOverride || _onChange} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id, !!schema.examples)} /> {children} {Array.isArray(schema.examples) ? ( <datalist id={examplesId<T>(id)}> {(schema.examples as string[]) .concat(schema.default && !schema.examples.includes(schema.default) ? ([schema.default] as string[]) : []) .map((example: any) => { return <option key={example} value={example} />; })} </datalist> ) : null} </> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/BaseInputTemplate/index.ts��������������������0000664�0000000�0000000�00000000124�14467713645�0027575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './BaseInputTemplate'; export * from './BaseInputTemplate'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/CheckboxWidget/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025425�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/CheckboxWidget/CheckboxWidget.tsx�������������0000664�0000000�0000000�00000004235�14467713645�0031063�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import { ariaDescribedByIds, descriptionId, getTemplate, labelValue, WidgetProps, schemaRequiresTrueValue, StrictRJSFSchema, RJSFSchema, FormContextType, } from '@rjsf/utils'; import Form from 'react-bootstrap/Form'; export default function CheckboxWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { id, value, disabled, readonly, label, hideLabel, schema, autofocus, options, onChange, onBlur, onFocus, registry, uiSchema, } = props; // Because an unchecked checkbox will cause html5 validation to fail, only add // the "required" attribute if the field value must be "true", due to the // "const" or "enum" keywords const required = schemaRequiresTrueValue<S>(schema); const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, options ); const _onChange = ({ target: { checked } }: FocusEvent<HTMLInputElement>) => onChange(checked); const _onBlur = ({ target: { checked } }: FocusEvent<HTMLInputElement>) => onBlur(id, checked); const _onFocus = ({ target: { checked } }: FocusEvent<HTMLInputElement>) => onFocus(id, checked); const description = options.description || schema.description; return ( <Form.Group className={`checkbox ${disabled || readonly ? 'disabled' : ''}`} aria-describedby={ariaDescribedByIds<T>(id)} > {!hideLabel && !!description && ( <DescriptionFieldTemplate id={descriptionId<T>(id)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> )} <Form.Check id={id} name={id} label={labelValue(label, hideLabel || !label)} checked={typeof value === 'undefined' ? false : value} required={required} disabled={disabled || readonly} autoFocus={autofocus} onChange={_onChange} type='checkbox' onBlur={_onBlur} onFocus={_onFocus} /> </Form.Group> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/CheckboxWidget/index.ts�����������������������0000664�0000000�0000000�00000000116�14467713645�0027102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './CheckboxWidget'; export * from './CheckboxWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/CheckboxesWidget/�����������������������������0000775�0000000�0000000�00000000000�14467713645�0025755�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/CheckboxesWidget/CheckboxesWidget.tsx���������0000664�0000000�0000000�00000004510�14467713645�0031737�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import Form from 'react-bootstrap/Form'; import { ariaDescribedByIds, enumOptionsDeselectValue, enumOptionsIsSelected, enumOptionsSelectValue, enumOptionsValueForIndex, optionId, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; export default function CheckboxesWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ id, disabled, options, value, autofocus, readonly, required, onChange, onBlur, onFocus }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, inline, emptyValue } = options; const checkboxesValues = Array.isArray(value) ? value : [value]; const _onChange = (index: number) => ({ target: { checked } }: ChangeEvent<HTMLInputElement>) => { if (checked) { onChange(enumOptionsSelectValue<S>(index, checkboxesValues, enumOptions)); } else { onChange(enumOptionsDeselectValue<S>(index, checkboxesValues, enumOptions)); } }; const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); return ( <Form.Group> {Array.isArray(enumOptions) && enumOptions.map((option, index: number) => { const checked = enumOptionsIsSelected<S>(option.value, checkboxesValues); const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1; return ( <Form.Check key={option.value} inline={inline} custom required={required} checked={checked} className='bg-transparent border-0' type={'checkbox'} id={optionId(id, index)} name={id} label={option.label} autoFocus={autofocus && index === 0} onChange={_onChange(index)} onBlur={_onBlur} onFocus={_onFocus} disabled={disabled || itemDisabled || readonly} aria-describedby={ariaDescribedByIds<T>(id)} /> ); })} </Form.Group> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/CheckboxesWidget/index.ts���������������������0000664�0000000�0000000�00000000122�14467713645�0027427�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './CheckboxesWidget'; export * from './CheckboxesWidget'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/DescriptionField/�����������������������������0000775�0000000�0000000�00000000000�14467713645�0025762�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/DescriptionField/DescriptionField.tsx���������0000664�0000000�0000000�00000000706�14467713645�0031754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { DescriptionFieldProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export default function DescriptionField< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ id, description }: DescriptionFieldProps<T, S, F>) { if (description) { return ( <div> <div id={id} className='mb-3'> {description} </div> </div> ); } return null; } ����������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/DescriptionField/index.ts���������������������0000664�0000000�0000000�00000000122�14467713645�0027434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './DescriptionField'; export * from './DescriptionField'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/ErrorList/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024460�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/ErrorList/ErrorList.tsx�����������������������0000664�0000000�0000000�00000001635�14467713645�0027152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Card from 'react-bootstrap/Card'; import ListGroup from 'react-bootstrap/ListGroup'; import { ErrorListProps, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; export default function ErrorList<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ errors, registry, }: ErrorListProps<T, S, F>) { const { translateString } = registry; return ( <Card border='danger' className='mb-4'> <Card.Header className='alert-danger'>{translateString(TranslatableString.ErrorsLabel)}</Card.Header> <Card.Body className='p-0'> <ListGroup> {errors.map((error, i: number) => { return ( <ListGroup.Item key={i} className='border-0'> <span>{error.stack}</span> </ListGroup.Item> ); })} </ListGroup> </Card.Body> </Card> ); } ���������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/ErrorList/index.ts����������������������������0000664�0000000�0000000�00000000104�14467713645�0026132�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ErrorList'; export * from './ErrorList'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/FieldErrorTemplate/���������������������������0000775�0000000�0000000�00000000000�14467713645�0026264�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/FieldErrorTemplate/FieldErrorTemplate.tsx�����0000664�0000000�0000000�00000001630�14467713645�0032555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FieldErrorProps, FormContextType, RJSFSchema, StrictRJSFSchema, errorId } from '@rjsf/utils'; import ListGroup from 'react-bootstrap/ListGroup'; /** The `FieldErrorTemplate` component renders the errors local to the particular field * * @param props - The `FieldErrorProps` for the errors being rendered */ export default function FieldErrorTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldErrorProps<T, S, F>) { const { errors = [], idSchema } = props; if (errors.length === 0) { return null; } const id = errorId<T>(idSchema); return ( <ListGroup as='ul' id={id}> {errors.map((error, i) => { return ( <ListGroup.Item as='li' key={i} className='border-0 m-0 p-0'> <small className='m-0 text-danger'>{error}</small> </ListGroup.Item> ); })} </ListGroup> ); } ��������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/FieldErrorTemplate/index.ts�������������������0000664�0000000�0000000�00000000126�14467713645�0027742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldErrorTemplate'; export * from './FieldErrorTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/FieldHelpTemplate/����������������������������0000775�0000000�0000000�00000000000�14467713645�0026063�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/FieldHelpTemplate/FieldHelpTemplate.tsx�������0000664�0000000�0000000�00000001260�14467713645�0032152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FieldHelpProps, FormContextType, RJSFSchema, StrictRJSFSchema, helpId } from '@rjsf/utils'; import Form from 'react-bootstrap/Form'; /** The `FieldHelpTemplate` component renders any help desired for a field * * @param props - The `FieldHelpProps` to be rendered */ export default function FieldHelpTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldHelpProps<T, S, F>) { const { idSchema, help, hasErrors } = props; if (!help) { return null; } const id = helpId<T>(idSchema); return ( <Form.Text className={hasErrors ? 'text-danger' : 'text-muted'} id={id}> {help} </Form.Text> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/FieldHelpTemplate/index.ts��������������������0000664�0000000�0000000�00000000124�14467713645�0027537�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldHelpTemplate'; export * from './FieldHelpTemplate'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/FieldTemplate/��������������������������������0000775�0000000�0000000�00000000000�14467713645�0025252�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/FieldTemplate/FieldTemplate.tsx���������������0000664�0000000�0000000�00000003303�14467713645�0030530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FieldTemplateProps, FormContextType, getTemplate, getUiOptions, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; import Form from 'react-bootstrap/Form'; export default function FieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ id, children, displayLabel, rawErrors = [], errors, help, description, rawDescription, classNames, style, disabled, label, hidden, onDropPropertyClick, onKeyChange, readonly, required, schema, uiSchema, registry, }: FieldTemplateProps<T, S, F>) { const uiOptions = getUiOptions(uiSchema); const WrapIfAdditionalTemplate = getTemplate<'WrapIfAdditionalTemplate', T, S, F>( 'WrapIfAdditionalTemplate', registry, uiOptions ); if (hidden) { return <div className='hidden'>{children}</div>; } return ( <WrapIfAdditionalTemplate classNames={classNames} style={style} disabled={disabled} id={id} label={label} onDropPropertyClick={onDropPropertyClick} onKeyChange={onKeyChange} readonly={readonly} required={required} schema={schema} uiSchema={uiSchema} registry={registry} > <Form.Group> {displayLabel && ( <Form.Label htmlFor={id} className={rawErrors.length > 0 ? 'text-danger' : ''}> {label} {required ? '*' : null} </Form.Label> )} {children} {displayLabel && rawDescription && ( <Form.Text className={rawErrors.length > 0 ? 'text-danger' : 'text-muted'}>{description}</Form.Text> )} {errors} {help} </Form.Group> </WrapIfAdditionalTemplate> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/FieldTemplate/index.ts������������������������0000664�0000000�0000000�00000000114�14467713645�0026725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldTemplate'; export * from './FieldTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/Form/�����������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023436�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/Form/Form.tsx���������������������������������0000664�0000000�0000000�00000000713�14467713645�0025102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ComponentType } from 'react'; import { withTheme, FormProps } from '@rjsf/core'; import { generateTheme } from '../Theme'; import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export function generateForm< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): ComponentType<FormProps<T, S, F>> { return withTheme<T, S, F>(generateTheme<T, S, F>()); } export default generateForm(); �����������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/Form/index.ts���������������������������������0000664�0000000�0000000�00000000072�14467713645�0025114�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Form'; export * from './Form'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/IconButton/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024617�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/IconButton/IconButton.tsx���������������������0000664�0000000�0000000�00000004325�14467713645�0027447�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; import Button, { ButtonProps } from 'react-bootstrap/Button'; import { IoIosCopy } from '@react-icons/all-files/io/IoIosCopy'; import { IoIosRemove } from '@react-icons/all-files/io/IoIosRemove'; import { AiOutlineArrowUp } from '@react-icons/all-files/ai/AiOutlineArrowUp'; import { AiOutlineArrowDown } from '@react-icons/all-files/ai/AiOutlineArrowDown'; export default function IconButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> & ButtonProps ) { const { icon, iconType, className, uiSchema, registry, ...otherProps } = props; return ( <Button block={iconType === 'block'} {...otherProps} variant={props.variant || 'light'} size='sm'> {icon} </Button> ); } export function CopyButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return <IconButton title={translateString(TranslatableString.CopyButton)} {...props} icon={<IoIosCopy />} />; } export function MoveDownButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <IconButton title={translateString(TranslatableString.MoveDownButton)} {...props} icon={<AiOutlineArrowDown />} /> ); } export function MoveUpButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return <IconButton title={translateString(TranslatableString.MoveUpButton)} {...props} icon={<AiOutlineArrowUp />} />; } export function RemoveButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <IconButton title={translateString(TranslatableString.RemoveButton)} {...props} variant='danger' icon={<IoIosRemove />} /> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/IconButton/index.ts���������������������������0000664�0000000�0000000�00000000106�14467713645�0026273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './IconButton'; export * from './IconButton'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/ObjectFieldTemplate/��������������������������0000775�0000000�0000000�00000000000�14467713645�0026401�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx���0000664�0000000�0000000�00000004461�14467713645�0033014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; import Container from 'react-bootstrap/Container'; import { canExpand, descriptionId, FormContextType, getTemplate, getUiOptions, ObjectFieldTemplateProps, RJSFSchema, StrictRJSFSchema, titleId, } from '@rjsf/utils'; export default function ObjectFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ description, title, properties, required, uiSchema, idSchema, schema, formData, onAddClick, disabled, readonly, registry, }: ObjectFieldTemplateProps<T, S, F>) { const uiOptions = getUiOptions<T, S, F>(uiSchema); const TitleFieldTemplate = getTemplate<'TitleFieldTemplate', T, S, F>('TitleFieldTemplate', registry, uiOptions); const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; return ( <> {title && ( <TitleFieldTemplate id={titleId<T>(idSchema)} title={title} required={required} schema={schema} uiSchema={uiSchema} registry={registry} /> )} {description && ( <DescriptionFieldTemplate id={descriptionId<T>(idSchema)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> )} <Container fluid className='p-0'> {properties.map((element: any, index: number) => ( <Row key={index} style={{ marginBottom: '10px' }} className={element.hidden ? 'd-none' : undefined}> <Col xs={12}> {element.content}</Col> </Row> ))} {canExpand(schema, uiSchema, formData) ? ( <Row> <Col xs={{ offset: 9, span: 3 }} className='py-4'> <AddButton onClick={onAddClick(schema)} disabled={disabled || readonly} className='object-property-expand' uiSchema={uiSchema} registry={registry} /> </Col> </Row> ) : null} </Container> </> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/ObjectFieldTemplate/index.ts������������������0000664�0000000�0000000�00000000130�14467713645�0030052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ObjectFieldTemplate'; export * from './ObjectFieldTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/RadioWidget/����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024735�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/RadioWidget/RadioWidget.tsx�������������������0000664�0000000�0000000�00000003774�14467713645�0027712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import Form from 'react-bootstrap/Form'; import { ariaDescribedByIds, enumOptionsIsSelected, enumOptionsValueForIndex, optionId, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; export default function RadioWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, options, value, required, disabled, readonly, onChange, onBlur, onFocus, }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, emptyValue } = options; const _onChange = ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onChange(enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const inline = Boolean(options && options.inline); return ( <Form.Group className='mb-0'> {Array.isArray(enumOptions) && enumOptions.map((option, index) => { const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1; const checked = enumOptionsIsSelected<S>(option.value, value); const radio = ( <Form.Check inline={inline} label={option.label} id={optionId(id, index)} key={index} name={id} type='radio' disabled={disabled || itemDisabled || readonly} checked={checked} required={required} value={String(index)} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id)} /> ); return radio; })} </Form.Group> ); } ����react-jsonschema-form-5.12.1/packages/bootstrap-4/src/RadioWidget/index.ts��������������������������0000664�0000000�0000000�00000000110�14467713645�0026404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './RadioWidget'; export * from './RadioWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/RangeWidget/����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024733�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/RangeWidget/RangeWidget.tsx�������������������0000664�0000000�0000000�00000001177�14467713645�0027701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, getTemplate, labelValue, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; export default function RangeWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { value, label, hideLabel, options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); return ( <BaseInputTemplate {...props} extraProps={{ label: labelValue(label || undefined, hideLabel) }}> <span className='range-view'>{value}</span> </BaseInputTemplate> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/RangeWidget/index.ts��������������������������0000664�0000000�0000000�00000000110�14467713645�0026402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './RangeWidget'; export * from './RangeWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/SelectWidget/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025116�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/SelectWidget/SelectWidget.tsx�����������������0000664�0000000�0000000�00000005070�14467713645�0030243�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import Form from 'react-bootstrap/Form'; import { ariaDescribedByIds, FormContextType, enumOptionsIndexForValue, enumOptionsValueForIndex, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; export default function SelectWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ schema, id, options, required, disabled, readonly, value, multiple, autofocus, onChange, onBlur, onFocus, placeholder, rawErrors = [], }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, emptyValue: optEmptyValue } = options; const emptyValue = multiple ? [] : ''; function getValue(event: FocusEvent | ChangeEvent | any, multiple?: boolean) { if (multiple) { return [].slice .call(event.target.options as any) .filter((o: any) => o.selected) .map((o: any) => o.value); } else { return event.target.value; } } const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, multiple); return ( <Form.Control as='select' bsPrefix='custom-select' id={id} name={id} value={typeof selectedIndexes === 'undefined' ? emptyValue : selectedIndexes} required={required} multiple={multiple} disabled={disabled || readonly} autoFocus={autofocus} className={rawErrors.length > 0 ? 'is-invalid' : ''} onBlur={ onBlur && ((event: FocusEvent) => { const newValue = getValue(event, multiple); onBlur(id, enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyValue)); }) } onFocus={ onFocus && ((event: FocusEvent) => { const newValue = getValue(event, multiple); onFocus(id, enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyValue)); }) } onChange={(event: ChangeEvent) => { const newValue = getValue(event, multiple); onChange(enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyValue)); }} aria-describedby={ariaDescribedByIds<T>(id)} > {!multiple && schema.default === undefined && <option value=''>{placeholder}</option>} {(enumOptions as any).map(({ value, label }: any, i: number) => { const disabled: any = Array.isArray(enumDisabled) && (enumDisabled as any).indexOf(value) != -1; return ( <option key={i} id={label} value={String(i)} disabled={disabled}> {label} </option> ); })} </Form.Control> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/SelectWidget/index.ts�������������������������0000664�0000000�0000000�00000000112�14467713645�0026567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './SelectWidget'; export * from './SelectWidget'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/SubmitButton/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025172�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/SubmitButton/SubmitButton.tsx�����������������0000664�0000000�0000000�00000001156�14467713645�0030374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Button from 'react-bootstrap/Button'; import { FormContextType, getSubmitButtonOptions, RJSFSchema, StrictRJSFSchema, SubmitButtonProps } from '@rjsf/utils'; export default function SubmitButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: SubmitButtonProps<T, S, F> ) { const { submitText, norender, props: submitButtonProps } = getSubmitButtonOptions<T, S, F>(props.uiSchema); if (norender) { return null; } return ( <div> <Button variant='primary' type='submit' {...submitButtonProps}> {submitText} </Button> </div> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/SubmitButton/index.ts�������������������������0000664�0000000�0000000�00000000112�14467713645�0026643�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './SubmitButton'; export * from './SubmitButton'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/Templates/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024471�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/Templates/Templates.ts������������������������0000664�0000000�0000000�00000003011�14467713645�0026772�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import AddButton from '../AddButton'; import ArrayFieldItemTemplate from '../ArrayFieldItemTemplate'; import ArrayFieldTemplate from '../ArrayFieldTemplate'; import BaseInputTemplate from '../BaseInputTemplate/BaseInputTemplate'; import DescriptionField from '../DescriptionField'; import ErrorList from '../ErrorList'; import { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } from '../IconButton'; import FieldErrorTemplate from '../FieldErrorTemplate'; import FieldHelpTemplate from '../FieldHelpTemplate'; import FieldTemplate from '../FieldTemplate'; import ObjectFieldTemplate from '../ObjectFieldTemplate'; import SubmitButton from '../SubmitButton'; import TitleField from '../TitleField'; import WrapIfAdditionalTemplate from '../WrapIfAdditionalTemplate'; import { FormContextType, RJSFSchema, StrictRJSFSchema, TemplatesType } from '@rjsf/utils'; export function generateTemplates< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): Partial<TemplatesType<T, S, F>> { return { ArrayFieldItemTemplate, ArrayFieldTemplate, BaseInputTemplate, ButtonTemplates: { AddButton, CopyButton, MoveDownButton, MoveUpButton, RemoveButton, SubmitButton, }, DescriptionFieldTemplate: DescriptionField, ErrorListTemplate: ErrorList, FieldErrorTemplate, FieldHelpTemplate, FieldTemplate, ObjectFieldTemplate, TitleFieldTemplate: TitleField, WrapIfAdditionalTemplate, }; } export default generateTemplates(); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/Templates/index.ts����������������������������0000664�0000000�0000000�00000000104�14467713645�0026143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Templates'; export * from './Templates'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/TextareaWidget/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025454�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/TextareaWidget/TextareaWidget.tsx�������������0000664�0000000�0000000�00000002766�14467713645�0031150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import { ariaDescribedByIds, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; import FormControl from 'react-bootstrap/FormControl'; import InputGroup from 'react-bootstrap/InputGroup'; type CustomWidgetProps<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> = WidgetProps< T, S, F > & { options: any; }; export default function TextareaWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ id, placeholder, value, required, disabled, autofocus, readonly, onBlur, onFocus, onChange, options, }: CustomWidgetProps<T, S, F>) { const _onChange = ({ target: { value } }: ChangeEvent<HTMLTextAreaElement>) => onChange(value === '' ? options.emptyValue : value); const _onBlur = ({ target: { value } }: FocusEvent<HTMLTextAreaElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLTextAreaElement>) => onFocus(id, value); return ( <InputGroup> <FormControl id={id} name={id} as='textarea' placeholder={placeholder} disabled={disabled} readOnly={readonly} value={value} required={required} autoFocus={autofocus} rows={options.rows || 5} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id)} /> </InputGroup> ); } ����������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/TextareaWidget/index.ts�����������������������0000664�0000000�0000000�00000000116�14467713645�0027131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './TextareaWidget'; export * from './TextareaWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/Theme/����������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023575�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/Theme/Theme.tsx�������������������������������0000664�0000000�0000000�00000000763�14467713645�0025405�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ThemeProps } from '@rjsf/core'; import { generateTemplates } from '../Templates'; import { generateWidgets } from '../Widgets'; import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export function generateTheme< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): ThemeProps<T, S, F> { return { templates: generateTemplates<T, S, F>(), widgets: generateWidgets<T, S, F>(), }; } export default generateTheme(); �������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/Theme/index.ts��������������������������������0000664�0000000�0000000�00000000074�14467713645�0025255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Theme'; export * from './Theme'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/TitleField/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024560�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/TitleField/TitleField.tsx���������������������0000664�0000000�0000000�00000001007�14467713645�0027343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, getUiOptions, RJSFSchema, StrictRJSFSchema, TitleFieldProps } from '@rjsf/utils'; export default function TitleField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, title, uiSchema, }: TitleFieldProps<T, S, F>) { const uiOptions = getUiOptions<T, S, F>(uiSchema); return ( <div id={id} className='my-1'> <h5>{uiOptions.title || title}</h5> <hr className='border-0 bg-secondary' style={{ height: '1px' }} /> </div> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/TitleField/index.ts���������������������������0000664�0000000�0000000�00000000106�14467713645�0026234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './TitleField'; export * from './TitleField'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/Widgets/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024141�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/Widgets/Widgets.ts����������������������������0000664�0000000�0000000�00000001417�14467713645�0026122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import CheckboxWidget from '../CheckboxWidget/CheckboxWidget'; import CheckboxesWidget from '../CheckboxesWidget/CheckboxesWidget'; import RadioWidget from '../RadioWidget/RadioWidget'; import RangeWidget from '../RangeWidget/RangeWidget'; import SelectWidget from '../SelectWidget/SelectWidget'; import TextareaWidget from '../TextareaWidget/TextareaWidget'; import { FormContextType, RegistryWidgetsType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export function generateWidgets< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): RegistryWidgetsType<T, S, F> { return { CheckboxWidget, CheckboxesWidget, RadioWidget, RangeWidget, SelectWidget, TextareaWidget, }; } export default generateWidgets(); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/Widgets/index.ts������������������������������0000664�0000000�0000000�00000000100�14467713645�0025607�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Widgets'; export * from './Widgets'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/WrapIfAdditionalTemplate/���������������������0000775�0000000�0000000�00000000000�14467713645�0027410�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������WrapIfAdditionalTemplate.tsx������������������������������������������������������������������������0000664�0000000�0000000�00000003762�14467713645�0034756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/bootstrap-4/src/WrapIfAdditionalTemplate�����������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import { ADDITIONAL_PROPERTY_FLAG, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString, WrapIfAdditionalTemplateProps, } from '@rjsf/utils'; import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; import Form from 'react-bootstrap/Form'; export default function WrapIfAdditionalTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ classNames, style, children, disabled, id, label, onDropPropertyClick, onKeyChange, readonly, required, schema, uiSchema, registry, }: WrapIfAdditionalTemplateProps<T, S, F>) { const { templates, translateString } = registry; // Button templates are not overridden in the uiSchema const { RemoveButton } = templates.ButtonTemplates; const keyLabel = translateString(TranslatableString.KeyLabel, [label]); const additional = ADDITIONAL_PROPERTY_FLAG in schema; if (!additional) { return ( <div className={classNames} style={style}> {children} </div> ); } const handleBlur = ({ target }: FocusEvent<HTMLInputElement>) => onKeyChange(target.value); const keyId = `${id}-key`; return ( <Row className={classNames} style={style} key={keyId}> <Col xs={5}> <Form.Group> <Form.Label htmlFor={keyId}>{keyLabel}</Form.Label> <Form.Control required={required} defaultValue={label} disabled={disabled || readonly} id={keyId} name={keyId} onBlur={!readonly ? handleBlur : undefined} type='text' /> </Form.Group> </Col> <Col xs={5}>{children}</Col> <Col xs={2} className='py-4'> <RemoveButton iconType='block' className='w-100' disabled={disabled || readonly} onClick={onDropPropertyClick(label)} uiSchema={uiSchema} registry={registry} /> </Col> </Row> ); } ��������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/WrapIfAdditionalTemplate/index.ts�������������0000664�0000000�0000000�00000000142�14467713645�0031064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './WrapIfAdditionalTemplate'; export * from './WrapIfAdditionalTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/src/index.ts��������������������������������������0000664�0000000�0000000�00000000462�14467713645�0024214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Form from './Form/Form'; export { default as Form, generateForm } from './Form'; export { default as Templates, generateTemplates } from './Templates'; export { default as Theme, generateTheme } from './Theme'; export { default as Widgets, generateWidgets } from './Widgets'; export default Form; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/���������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022723�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/Array.test.tsx�������������������������������0000664�0000000�0000000�00000000150�14467713645�0025513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import arrayTests from '@rjsf/core/testSnap/arrayTests'; import Form from '../src'; arrayTests(Form); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/CheckboxesWidget.test.tsx��������������������0000664�0000000�0000000�00000001535�14467713645�0027667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import CheckboxesWidget from '../src/CheckboxesWidget'; import renderer from 'react-test-renderer'; import { makeWidgetMockProps } from './helpers/createMocks'; describe('CheckboxesWidget', () => { test('simple', () => { const tree = renderer .create( <CheckboxesWidget {...makeWidgetMockProps({ options: { enumOptions: [{ label: 'A', value: 'a' }], }, })} /> ) .toJSON(); expect(tree).toMatchSnapshot(); }); test('inline', () => { const tree = renderer .create( <CheckboxesWidget {...makeWidgetMockProps({ options: { enumOptions: [{ label: 'A', value: 'a' }], inline: true, }, })} /> ) .toJSON(); expect(tree).toMatchSnapshot(); }); }); �������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/Form.test.tsx��������������������������������0000664�0000000�0000000�00000000145�14467713645�0025344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import formTests from '@rjsf/core/testSnap/formTests'; import Form from '../src'; formTests(Form); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/Object.test.tsx������������������������������0000664�0000000�0000000�00000000153�14467713645�0025646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import objectTests from '@rjsf/core/testSnap/objectTests'; import Form from '../src'; objectTests(Form); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/TextAreaWidget.test.tsx����������������������0000664�0000000�0000000�00000001425�14467713645�0027324�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import TextareaWidget from '../src/TextareaWidget'; import { makeWidgetMockProps } from './helpers/createMocks'; import renderer from 'react-test-renderer'; describe('TextareaWidget', () => { test('simple without errors', () => { const tree = renderer.create(<TextareaWidget {...makeWidgetMockProps({})} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('simple with errors', () => { const tree = renderer .create(<TextareaWidget {...makeWidgetMockProps({ rawErrors: ['Invalid 1', 'Invalid 2'] })} />) .toJSON(); expect(tree).toMatchSnapshot(); }); test('simple without required', () => { const tree = renderer.create(<TextareaWidget {...makeWidgetMockProps({ required: false })} />).toJSON(); expect(tree).toMatchSnapshot(); }); }); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/__snapshots__/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025541�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/__snapshots__/Array.test.tsx.snap������������0000664�0000000�0000000�00000461323�14467713645�0031306�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`array fields array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="p-0 m-0 container-fluid" > <div className="container" > <div className="mt-2 row" > <div className="col-9" /> <div className="py-4 col-lg-3 col-3 col-3" > <button className="ml-1 array-item-add btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="p-0 m-0 container-fluid" > <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_0" > * </label> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> </div> <div className="py-4 col-lg-3 col-3" > <div className="d-flex flex-row" > <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M868 545.5L536.1 163a31.96 31.96 0 0 0-48.3 0L156 545.5a7.97 7.97 0 0 0 6 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0 0 48.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M352 115h90c3.3 0 6-2.7 6-6 0-8.2-3.7-16-10-21.3l-77.1-64.2c-4.9-4.1-14.2-7.4-20.6-7.4-4.1 0-7.4 3.3-7.4 7.4V96c.1 10.5 8.6 19 19.1 19z" /> <path d="M307 96V16H176c-17.6 0-32 14.4-32 32v336c0 17.6 14.4 32 32 32h240c17.6 0 32-14.4 32-32V141h-96c-24.8 0-45-20.2-45-45z" /> <path d="M116 412V80H96c-17.6 0-32 14.4-32 32v352c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32v-20H148c-17.6 0-32-14.4-32-32z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-danger btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> </div> <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_1" > * </label> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> </div> <div className="py-4 col-lg-3 col-3" > <div className="d-flex flex-row" > <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M868 545.5L536.1 163a31.96 31.96 0 0 0-48.3 0L156 545.5a7.97 7.97 0 0 0 6 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0 0 48.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M352 115h90c3.3 0 6-2.7 6-6 0-8.2-3.7-16-10-21.3l-77.1-64.2c-4.9-4.1-14.2-7.4-20.6-7.4-4.1 0-7.4 3.3-7.4 7.4V96c.1 10.5 8.6 19 19.1 19z" /> <path d="M307 96V16H176c-17.6 0-32 14.4-32 32v336c0 17.6 14.4 32 32 32h240c17.6 0 32-14.4 32-32V141h-96c-24.8 0-45-20.2-45-45z" /> <path d="M116 412V80H96c-17.6 0-32 14.4-32 32v352c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32v-20H148c-17.6 0-32-14.4-32-32z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-danger btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> </div> <div className="container" > <div className="mt-2 row" > <div className="col-9" /> <div className="py-4 col-lg-3 col-3 col-3" > <button className="ml-1 array-item-add btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="custom-select" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option disabled={false} id="a" value="0" > a </option> <option disabled={false} id="b" value="1" > b </option> <option disabled={false} id="c" value="2" > c </option> </select> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields empty errors array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_name" > name </label> <input aria-describedby="root_name__error root_name__description root_name__help" autoFocus={false} className="form-control" disabled={false} id="root_name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="p-0 m-0 container-fluid" > <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_0" > * </label> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> <div className="py-4 col-lg-3 col-3" /> </div> </div> <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-number" > <div className="form-group" > <label className="form-label" htmlFor="root_1" > * </label> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> <div className="py-4 col-lg-3 col-3" /> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields has errors 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="mb-4 card border-danger" > <div className="alert-danger card-header" > Errors </div> <div className="p-0 card-body" > <div className="list-group" onKeyDown={[Function]} > <div className="border-0 list-group-item" data-rb-event-key={null} disabled={false} onClick={[Function]} > <span> .name Bad input </span> </div> </div> </div> </div> <div className="form-group field field-object" > <div className="form-group" > <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string field-error has-error has-danger" > <div className="form-group" > <label className="text-danger form-label" htmlFor="root_name" > name </label> <input aria-describedby="root_name__error root_name__description root_name__help" autoFocus={false} className="is-invalid form-control" disabled={false} id="root_name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> <ul className="list-group" id="root_name__error" onKeyDown={[Function]} > <li className="border-0 m-0 p-0 list-group-item" data-rb-event-key={null} disabled={false} onClick={[Function]} > <small className="m-0 text-danger" > Bad input </small> </li> </ul> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields no errors 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_name" > name </label> <input aria-describedby="root_name__error root_name__description root_name__help" autoFocus={false} className="form-control" disabled={false} id="root_name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="my-1" id="root__title" > <h5> Test field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a test description </div> </div> <div className="p-0 m-0 container-fluid" > <div className="container" > <div className="mt-2 row" > <div className="col-9" /> <div className="py-4 col-lg-3 col-3 col-3" > <button className="ml-1 array-item-add btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="my-1" id="root__title" > <h5> Test field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a test description </div> </div> <div className="p-0 m-0 container-fluid" > <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_0" > Test item * </label> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_0__description" > a test item description </div> </div> </small> </div> </div> </div> <div className="py-4 col-lg-3 col-3" > <div className="d-flex flex-row" > <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M868 545.5L536.1 163a31.96 31.96 0 0 0-48.3 0L156 545.5a7.97 7.97 0 0 0 6 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0 0 48.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M352 115h90c3.3 0 6-2.7 6-6 0-8.2-3.7-16-10-21.3l-77.1-64.2c-4.9-4.1-14.2-7.4-20.6-7.4-4.1 0-7.4 3.3-7.4 7.4V96c.1 10.5 8.6 19 19.1 19z" /> <path d="M307 96V16H176c-17.6 0-32 14.4-32 32v336c0 17.6 14.4 32 32 32h240c17.6 0 32-14.4 32-32V141h-96c-24.8 0-45-20.2-45-45z" /> <path d="M116 412V80H96c-17.6 0-32 14.4-32 32v352c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32v-20H148c-17.6 0-32-14.4-32-32z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-danger btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> </div> <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_1" > Test item * </label> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_1__description" > a test item description </div> </div> </small> </div> </div> </div> <div className="py-4 col-lg-3 col-3" > <div className="d-flex flex-row" > <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M868 545.5L536.1 163a31.96 31.96 0 0 0-48.3 0L156 545.5a7.97 7.97 0 0 0 6 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0 0 48.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M352 115h90c3.3 0 6-2.7 6-6 0-8.2-3.7-16-10-21.3l-77.1-64.2c-4.9-4.1-14.2-7.4-20.6-7.4-4.1 0-7.4 3.3-7.4 7.4V96c.1 10.5 8.6 19 19.1 19z" /> <path d="M307 96V16H176c-17.6 0-32 14.4-32 32v336c0 17.6 14.4 32 32 32h240c17.6 0 32-14.4 32-32V141h-96c-24.8 0-45-20.2-45-45z" /> <path d="M116 412V80H96c-17.6 0-32 14.4-32 32v352c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32v-20H148c-17.6 0-32-14.4-32-32z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-danger btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> </div> <div className="container" > <div className="mt-2 row" > <div className="col-9" /> <div className="py-4 col-lg-3 col-3 col-3" > <button className="ml-1 array-item-add btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <label className="form-label" htmlFor="root" > Test field </label> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="custom-select" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option disabled={false} id="a" value="0" > a </option> <option disabled={false} id="b" value="1" > b </option> <option disabled={false} id="c" value="2" > c </option> </select> <small className="text-muted form-text" > <div> <div className="mb-3" id="root__description" > a test description </div> </div> </small> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="my-1" id="root__title" > <h5> Test field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a test description </div> </div> <div className="p-0 m-0 container-fluid" > <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_0" > Test item * </label> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_0__description" > a test item description </div> </div> </small> </div> </div> </div> <div className="py-4 col-lg-3 col-3" /> </div> </div> <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-number" > <div className="form-group" > <label className="form-label" htmlFor="root_1" > Test item * </label> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_1__description" > a test item description </div> </div> </small> </div> </div> </div> <div className="py-4 col-lg-3 col-3" /> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="my-1" id="root__title" > <h5> My Field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> <div className="p-0 m-0 container-fluid" > <div className="container" > <div className="mt-2 row" > <div className="col-9" /> <div className="py-4 col-lg-3 col-3 col-3" > <button className="ml-1 array-item-add btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="my-1" id="root__title" > <h5> My Field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> <div className="p-0 m-0 container-fluid" > <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_0" > My Item * </label> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_0__description" > a fancier item description </div> </div> </small> </div> </div> </div> <div className="py-4 col-lg-3 col-3" > <div className="d-flex flex-row" > <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M868 545.5L536.1 163a31.96 31.96 0 0 0-48.3 0L156 545.5a7.97 7.97 0 0 0 6 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0 0 48.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M352 115h90c3.3 0 6-2.7 6-6 0-8.2-3.7-16-10-21.3l-77.1-64.2c-4.9-4.1-14.2-7.4-20.6-7.4-4.1 0-7.4 3.3-7.4 7.4V96c.1 10.5 8.6 19 19.1 19z" /> <path d="M307 96V16H176c-17.6 0-32 14.4-32 32v336c0 17.6 14.4 32 32 32h240c17.6 0 32-14.4 32-32V141h-96c-24.8 0-45-20.2-45-45z" /> <path d="M116 412V80H96c-17.6 0-32 14.4-32 32v352c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32v-20H148c-17.6 0-32-14.4-32-32z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-danger btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> </div> <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_1" > My Item * </label> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_1__description" > a fancier item description </div> </div> </small> </div> </div> </div> <div className="py-4 col-lg-3 col-3" > <div className="d-flex flex-row" > <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M868 545.5L536.1 163a31.96 31.96 0 0 0-48.3 0L156 545.5a7.97 7.97 0 0 0 6 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0 0 48.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M352 115h90c3.3 0 6-2.7 6-6 0-8.2-3.7-16-10-21.3l-77.1-64.2c-4.9-4.1-14.2-7.4-20.6-7.4-4.1 0-7.4 3.3-7.4 7.4V96c.1 10.5 8.6 19 19.1 19z" /> <path d="M307 96V16H176c-17.6 0-32 14.4-32 32v336c0 17.6 14.4 32 32 32h240c17.6 0 32-14.4 32-32V141h-96c-24.8 0-45-20.2-45-45z" /> <path d="M116 412V80H96c-17.6 0-32 14.4-32 32v352c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32v-20H148c-17.6 0-32-14.4-32-32z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-danger btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> </div> <div className="container" > <div className="mt-2 row" > <div className="col-9" /> <div className="py-4 col-lg-3 col-3 col-3" > <button className="ml-1 array-item-add btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <label className="form-label" htmlFor="root" > My Field </label> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="custom-select" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option disabled={false} id="a" value="0" > a </option> <option disabled={false} id="b" value="1" > b </option> <option disabled={false} id="c" value="2" > c </option> </select> <small className="text-muted form-text" > <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> </small> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="my-1" id="root__title" > <h5> My Field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> <div className="p-0 m-0 container-fluid" > <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_0" > My Item * </label> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_0__description" > a fancier item description </div> </div> </small> </div> </div> </div> <div className="py-4 col-lg-3 col-3" /> </div> </div> <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-number" > <div className="form-group" > <label className="form-label" htmlFor="root_1" > My Item * </label> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_1__description" > a fancier item description </div> </div> </small> </div> </div> </div> <div className="py-4 col-lg-3 col-3" /> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="my-1" id="root__title" > <h5> My Field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> <div className="p-0 m-0 container-fluid" > <div className="container" > <div className="mt-2 row" > <div className="col-9" /> <div className="py-4 col-lg-3 col-3 col-3" > <button className="ml-1 array-item-add btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="my-1" id="root__title" > <h5> My Field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> <div className="p-0 m-0 container-fluid" > <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_0" > My Item * </label> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_0__description" > a fancier item description </div> </div> </small> </div> </div> </div> <div className="py-4 col-lg-3 col-3" > <div className="d-flex flex-row" > <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M868 545.5L536.1 163a31.96 31.96 0 0 0-48.3 0L156 545.5a7.97 7.97 0 0 0 6 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0 0 48.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M352 115h90c3.3 0 6-2.7 6-6 0-8.2-3.7-16-10-21.3l-77.1-64.2c-4.9-4.1-14.2-7.4-20.6-7.4-4.1 0-7.4 3.3-7.4 7.4V96c.1 10.5 8.6 19 19.1 19z" /> <path d="M307 96V16H176c-17.6 0-32 14.4-32 32v336c0 17.6 14.4 32 32 32h240c17.6 0 32-14.4 32-32V141h-96c-24.8 0-45-20.2-45-45z" /> <path d="M116 412V80H96c-17.6 0-32 14.4-32 32v352c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32v-20H148c-17.6 0-32-14.4-32-32z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-danger btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> </div> <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_1" > My Item * </label> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_1__description" > a fancier item description </div> </div> </small> </div> </div> </div> <div className="py-4 col-lg-3 col-3" > <div className="d-flex flex-row" > <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M868 545.5L536.1 163a31.96 31.96 0 0 0-48.3 0L156 545.5a7.97 7.97 0 0 0 6 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0 0 48.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M352 115h90c3.3 0 6-2.7 6-6 0-8.2-3.7-16-10-21.3l-77.1-64.2c-4.9-4.1-14.2-7.4-20.6-7.4-4.1 0-7.4 3.3-7.4 7.4V96c.1 10.5 8.6 19 19.1 19z" /> <path d="M307 96V16H176c-17.6 0-32 14.4-32 32v336c0 17.6 14.4 32 32 32h240c17.6 0 32-14.4 32-32V141h-96c-24.8 0-45-20.2-45-45z" /> <path d="M116 412V80H96c-17.6 0-32 14.4-32 32v352c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32v-20H148c-17.6 0-32-14.4-32-32z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-danger btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> </div> <div className="container" > <div className="mt-2 row" > <div className="col-9" /> <div className="py-4 col-lg-3 col-3 col-3" > <button className="ml-1 array-item-add btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <label className="form-label" htmlFor="root" > My Field </label> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="custom-select" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option disabled={false} id="a" value="0" > a </option> <option disabled={false} id="b" value="1" > b </option> <option disabled={false} id="c" value="2" > c </option> </select> <small className="text-muted form-text" > <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> </small> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="my-1" id="root__title" > <h5> My Field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> <div className="p-0 m-0 container-fluid" > <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_0" > My Item * </label> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_0__description" > a fancier item description </div> </div> </small> </div> </div> </div> <div className="py-4 col-lg-3 col-3" /> </div> </div> <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-number" > <div className="form-group" > <label className="form-label" htmlFor="root_1" > My Item * </label> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_1__description" > a fancier item description </div> </div> </small> </div> </div> </div> <div className="py-4 col-lg-3 col-3" /> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="p-0 m-0 container-fluid" > <div className="container" > <div className="mt-2 row" > <div className="col-9" /> <div className="py-4 col-lg-3 col-3 col-3" > <button className="ml-1 array-item-add btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="p-0 m-0 container-fluid" > <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> </div> <div className="py-4 col-lg-3 col-3" > <div className="d-flex flex-row" > <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M868 545.5L536.1 163a31.96 31.96 0 0 0-48.3 0L156 545.5a7.97 7.97 0 0 0 6 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0 0 48.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M352 115h90c3.3 0 6-2.7 6-6 0-8.2-3.7-16-10-21.3l-77.1-64.2c-4.9-4.1-14.2-7.4-20.6-7.4-4.1 0-7.4 3.3-7.4 7.4V96c.1 10.5 8.6 19 19.1 19z" /> <path d="M307 96V16H176c-17.6 0-32 14.4-32 32v336c0 17.6 14.4 32 32 32h240c17.6 0 32-14.4 32-32V141h-96c-24.8 0-45-20.2-45-45z" /> <path d="M116 412V80H96c-17.6 0-32 14.4-32 32v352c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32v-20H148c-17.6 0-32-14.4-32-32z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-danger btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> </div> <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> </div> <div className="py-4 col-lg-3 col-3" > <div className="d-flex flex-row" > <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M868 545.5L536.1 163a31.96 31.96 0 0 0-48.3 0L156 545.5a7.97 7.97 0 0 0 6 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 1024 1024" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M862 465.3h-81c-4.6 0-9 2-12.1 5.5L550 723.1V160c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v563.1L255.1 470.8c-3-3.5-7.4-5.5-12.1-5.5h-81c-6.8 0-10.5 8.1-6 13.2L487.9 861a31.96 31.96 0 0 0 48.3 0L868 478.5c4.5-5.2.8-13.2-6-13.2z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-light btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M352 115h90c3.3 0 6-2.7 6-6 0-8.2-3.7-16-10-21.3l-77.1-64.2c-4.9-4.1-14.2-7.4-20.6-7.4-4.1 0-7.4 3.3-7.4 7.4V96c.1 10.5 8.6 19 19.1 19z" /> <path d="M307 96V16H176c-17.6 0-32 14.4-32 32v336c0 17.6 14.4 32 32 32h240c17.6 0 32-14.4 32-32V141h-96c-24.8 0-45-20.2-45-45z" /> <path d="M116 412V80H96c-17.6 0-32 14.4-32 32v352c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32v-20H148c-17.6 0-32-14.4-32-32z" /> </svg> </button> </div> <div className="m-0 p-0" > <button className="btn btn-danger btn-sm" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> </div> <div className="container" > <div className="mt-2 row" > <div className="col-9" /> <div className="py-4 col-lg-3 col-3 col-3" > <button className="ml-1 array-item-add btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <label className="form-label" htmlFor="root" > Test field </label> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="custom-select" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option disabled={false} id="a" value="0" > a </option> <option disabled={false} id="b" value="1" > b </option> <option disabled={false} id="c" value="2" > c </option> </select> <small className="text-muted form-text" > <div> <div className="mb-3" id="root__description" > a test description </div> </div> </small> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <div> <div className="p-0 m-0 row" > <div className="p-0 m-0 col" > <div className="p-0 m-0 container-fluid" > <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-string" > <div className="form-group" > <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> <div className="py-4 col-lg-3 col-3" /> </div> </div> <div> <div className="mb-2 d-flex align-items-center row" > <div className="col-lg-9 col-9" > <div className="form-group field field-number" > <div className="form-group" > <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> <div className="py-4 col-lg-3 col-3" /> </div> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/__snapshots__/CheckboxesWidget.test.tsx.snap�0000664�0000000�0000000�00000002467�14467713645�0033452�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`CheckboxesWidget inline 1`] = ` <div className="form-group" > <div className="bg-transparent border-0 custom-control custom-checkbox custom-control-inline" > <input aria-describedby="_id__error _id__description _id__help" autoFocus={true} checked={false} className="custom-control-input" disabled={true} id="_id-0" name="_id" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={true} type="checkbox" /> <label className="custom-control-label" htmlFor="_id-0" title="" > A </label> </div> </div> `; exports[`CheckboxesWidget simple 1`] = ` <div className="form-group" > <div className="bg-transparent border-0 custom-control custom-checkbox" > <input aria-describedby="_id__error _id__description _id__help" autoFocus={true} checked={false} className="custom-control-input" disabled={true} id="_id-0" name="_id" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={true} type="checkbox" /> <label className="custom-control-label" htmlFor="_id-0" title="" > A </label> </div> </div> `; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/__snapshots__/Form.test.tsx.snap�������������0000664�0000000�0000000�00000124700�14467713645�0031126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`single fields checkbox field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="form-group" > <div aria-describedby="root__error root__description root__help" className="checkbox form-group" > <div className="form-check" > <input autoFocus={false} checked={false} className="form-check-input position-static" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="checkbox" /> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields checkbox field with label 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="form-group" > <div aria-describedby="root__error root__description root__help" className="checkbox form-group" > <div className="form-check" > <input autoFocus={false} checked={false} className="form-check-input" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="checkbox" /> <label className="form-check-label" htmlFor="root" title="" > test </label> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields checkboxes field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <label className="form-label" htmlFor="root" > An enum list rendered as checkboxes </label> <div className="form-group" > <div className="bg-transparent border-0 custom-control custom-checkbox" > <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} className="custom-control-input" disabled={false} id="root-0" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="checkbox" /> <label className="custom-control-label" htmlFor="root-0" title="" > foo </label> </div> <div className="bg-transparent border-0 custom-control custom-checkbox" > <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} className="custom-control-input" disabled={false} id="root-1" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="checkbox" /> <label className="custom-control-label" htmlFor="root-1" title="" > bar </label> </div> <div className="bg-transparent border-0 custom-control custom-checkbox" > <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} className="custom-control-input" disabled={false} id="root-2" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="checkbox" /> <label className="custom-control-label" htmlFor="root-2" title="" > fuzz </label> </div> <div className="bg-transparent border-0 custom-control custom-checkbox" > <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} className="custom-control-input" disabled={false} id="root-3" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="checkbox" /> <label className="custom-control-label" htmlFor="root-3" title="" > qux </label> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields field with description 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_my-field" > my-field </label> <input aria-describedby="root_my-field__error root_my-field__description root_my-field__help" autoFocus={false} className="form-control" disabled={false} id="root_my-field" name="root_my-field" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_my-field__description" > some description </div> </div> </small> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields field with description in uiSchema 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_my-field" > my-field </label> <input aria-describedby="root_my-field__error root_my-field__description root_my-field__help" autoFocus={false} className="form-control" disabled={false} id="root_my-field" name="root_my-field" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_my-field__description" > some other description </div> </div> </small> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields format color 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="color" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields format date 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="date" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields format datetime 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="datetime-local" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields format time 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="time" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields help and error display 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="mb-4 card border-danger" > <div className="alert-danger card-header" > Errors </div> <div className="p-0 card-body" > <div className="list-group" onKeyDown={[Function]} > <div className="border-0 list-group-item" data-rb-event-key={null} disabled={false} onClick={[Function]} > <span> . an error </span> </div> </div> </div> </div> <div className="form-group field field-string field-error has-error has-danger" > <div className="form-group" > <label className="text-danger form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="is-invalid form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="text" value="" /> <ul className="list-group" id="root__error" onKeyDown={[Function]} > <li className="border-0 m-0 p-0 list-group-item" data-rb-event-key={null} disabled={false} onClick={[Function]} > <small className="m-0 text-danger" > an error </small> </li> </ul> <small className="text-danger form-text" id="root__help" > help me! </small> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields hidden field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="p-0 container-fluid" > <div className="d-none row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="hidden" > <input id="root_my-field" name="root_my-field" type="hidden" value="" /> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields hidden label 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="text" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields null field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-null" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields number field 0 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} step="any" type="number" value={0} /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields number field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} step="any" type="number" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields password field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="password" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields radio field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <div className="mb-0 form-group" > <div className="form-check" > <input aria-describedby="root__error root__description root__help" checked={false} className="form-check-input" disabled={false} id="root-0" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="radio" value="0" /> <label className="form-check-label" htmlFor="root-0" title="" > Yes </label> </div> <div className="form-check" > <input aria-describedby="root__error root__description root__help" checked={false} className="form-check-input" disabled={false} id="root-1" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="radio" value="1" /> <label className="form-check-label" htmlFor="root-1" title="" > No </label> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields schema examples 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help root__examples" autoFocus={false} className="form-control" disabled={false} id="root" list="root__examples" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="text" value="" /> <datalist id="root__examples" > <option value="Firefox" /> <option value="Chrome" /> <option value="Opera" /> <option value="Vivaldi" /> <option value="Safari" /> </datalist> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="custom-select" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} value="" > <option value="" > </option> <option disabled={false} id="foo" value="0" > foo </option> <option disabled={false} id="bar" value="1" > bar </option> </select> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="custom-select" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option disabled={false} id="foo" value="0" > foo </option> <option disabled={false} id="bar" value="1" > bar </option> <option disabled={false} id="fuzz" value="2" > fuzz </option> <option disabled={false} id="qux" value="3" > qux </option> </select> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice enumDisabled 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="custom-select" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option disabled={false} id="foo" value="0" > foo </option> <option disabled={true} id="bar" value="1" > bar </option> <option disabled={false} id="fuzz" value="2" > fuzz </option> <option disabled={false} id="qux" value="3" > qux </option> </select> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice formData 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="custom-select" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={ [ "0", "1", ] } > <option disabled={false} id="foo" value="0" > foo </option> <option disabled={false} id="bar" value="1" > bar </option> <option disabled={false} id="fuzz" value="2" > fuzz </option> <option disabled={false} id="qux" value="3" > qux </option> </select> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice with labels 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="custom-select" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option disabled={false} id="Blue" value="0" > Blue </option> <option disabled={false} id="Red" value="1" > Red </option> <option disabled={false} id="Green" value="2" > Green </option> </select> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field single choice enumDisabled 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="custom-select" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} value="" > <option value="" > </option> <option disabled={false} id="foo" value="0" > foo </option> <option disabled={true} id="bar" value="1" > bar </option> </select> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field single choice formData 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="custom-select" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} value="1" > <option value="" > </option> <option disabled={false} id="foo" value="0" > foo </option> <option disabled={false} id="bar" value="1" > bar </option> </select> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields slider field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-integer" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" max={100} min={42} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} step={1} type="number" value={75} /> <span className="range-view" > 75 </span> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field format data-url 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <div> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control-file" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="file" value="" /> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field format email 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="email" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field format uri 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="url" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field regular 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="text" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field with placeholder 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="placeholder" readOnly={false} type="text" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields textarea field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <div className="input-group" > <textarea aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} rows={5} /> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields title field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="my-1" id="root__title" > <h5> Titre 1 </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_title" > Titre 2 </label> <input aria-describedby="root_title__error root_title__description root_title__help" autoFocus={false} className="form-control" disabled={false} id="root_title" name="root_title" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields unsupported field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-undefined" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <div className="unsupported-field" > <p> <span> Unsupported field schema for field <code> root </code> : <em> Unknown field type undefined </em> . </span> </p> <pre> {} </pre> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields up/down field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="number" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields using custom tagName 1`] = ` <div className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root" > </label> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="text" value="" /> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </div> `; ����������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/__snapshots__/Object.test.tsx.snap�����������0000664�0000000�0000000�00000200177�14467713645�0031434�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`object fields additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string row" > <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_foo-key" > foo Key </label> <input className="form-control" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} required={false} type="text" /> </div> </div> <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_foo" > foo </label> <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="form-control" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> <div className="py-4 col-2" > <button className="btn btn-danger btn-block btn-sm" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> <div className="row" > <div className="py-4 col-3 offset-9" > <button className="ml-1 object-property-expand btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_a" > A </label> <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="form-control" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-number" > <div className="form-group" > <label className="form-label" htmlFor="root_b" > B </label> <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="form-control" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string row" > <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_additionalProperty-key" > additionalProperty Key </label> <input className="form-control" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} required={false} type="text" /> </div> </div> <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_additionalProperty" > additionalProperty </label> <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" autoFocus={false} className="form-control" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> </div> <div className="py-4 col-2" > <button className="btn btn-danger btn-block btn-sm" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> <div className="row" > <div className="py-4 col-3 offset-9" > <button className="ml-1 object-property-expand btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="my-1" id="root__title" > <h5> Test field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a test description </div> </div> <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string row" > <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_foo-key" > foo Key </label> <input className="form-control" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} required={false} type="text" /> </div> </div> <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_foo" > foo </label> <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="form-control" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> <div className="py-4 col-2" > <button className="btn btn-danger btn-block btn-sm" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> <div className="row" > <div className="py-4 col-3 offset-9" > <button className="ml-1 object-property-expand btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from both additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="my-1" id="root__title" > <h5> My Field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string row" > <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_foo-key" > foo Key </label> <input className="form-control" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} required={false} type="text" /> </div> </div> <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_foo" > foo </label> <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="form-control" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> <div className="py-4 col-2" > <button className="btn btn-danger btn-block btn-sm" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> <div className="row" > <div className="py-4 col-3 offset-9" > <button className="ml-1 object-property-expand btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from both object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="my-1" id="root__title" > <h5> My Field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_a" > My Item A </label> <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="form-control" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_a__description" > a fancier item A description </div> </div> </small> </div> </div> </div> </div> <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-number" > <div className="form-group" > <label className="form-label" htmlFor="root_b" > My Item B </label> <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="form-control" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_b__description" > a fancier item B description </div> </div> </small> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from uiSchema additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="my-1" id="root__title" > <h5> My Field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string row" > <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_foo-key" > foo Key </label> <input className="form-control" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} required={false} type="text" /> </div> </div> <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_foo" > foo </label> <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="form-control" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> <div className="py-4 col-2" > <button className="btn btn-danger btn-block btn-sm" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> <div className="row" > <div className="py-4 col-3 offset-9" > <button className="ml-1 object-property-expand btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from uiSchema object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="my-1" id="root__title" > <h5> My Field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_a" > My Item A </label> <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="form-control" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_a__description" > a fancier item A description </div> </div> </small> </div> </div> </div> </div> <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-number" > <div className="form-group" > <label className="form-label" htmlFor="root_b" > My Item B </label> <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="form-control" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_b__description" > a fancier item B description </div> </div> </small> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from uiSchema show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="my-1" id="root__title" > <h5> My Field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a fancier description </div> </div> <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string row" > <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_additionalProperty-key" > additionalProperty Key </label> <input className="form-control" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} required={false} type="text" /> </div> </div> <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_additionalProperty" > additionalProperty </label> <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" autoFocus={false} className="form-control" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> </div> <div className="py-4 col-2" > <button className="btn btn-danger btn-block btn-sm" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> <div className="row" > <div className="py-4 col-3 offset-9" > <button className="ml-1 object-property-expand btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="my-1" id="root__title" > <h5> Test field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a test description </div> </div> <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string" > <div className="form-group" > <label className="form-label" htmlFor="root_a" > A </label> <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="form-control" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_a__description" > A description </div> </div> </small> </div> </div> </div> </div> <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-number" > <div className="form-group" > <label className="form-label" htmlFor="root_b" > B </label> <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="form-control" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> <small className="text-muted form-text" > <div> <div className="mb-3" id="root_b__description" > B description </div> </div> </small> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="my-1" id="root__title" > <h5> Test field </h5> <hr className="border-0 bg-secondary" style={ { "height": "1px", } } /> </div> <div> <div className="mb-3" id="root__description" > a test description </div> </div> <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string row" > <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_additionalProperty-key" > additionalProperty Key </label> <input className="form-control" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} required={false} type="text" /> </div> </div> <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_additionalProperty" > additionalProperty </label> <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" autoFocus={false} className="form-control" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> </div> <div className="py-4 col-2" > <button className="btn btn-danger btn-block btn-sm" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> <div className="row" > <div className="py-4 col-3 offset-9" > <button className="ml-1 object-property-expand btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description with global label off additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string row" > <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_foo-key" > foo Key </label> <input className="form-control" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} required={false} type="text" /> </div> </div> <div className="col-5" > <div className="form-group" > <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="form-control" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> <div className="py-4 col-2" > <button className="btn btn-danger btn-block btn-sm" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> <div className="row" > <div className="py-4 col-3 offset-9" > <button className="ml-1 object-property-expand btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description with global label off object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string" > <div className="form-group" > <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="form-control" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-number" > <div className="form-group" > <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="form-control" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description with global label off show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="form-group" > <div className="p-0 container-fluid" > <div className="row" style={ { "marginBottom": "10px", } } > <div className="col-12" > <div className="form-group field field-string row" > <div className="col-5" > <div className="form-group" > <label className="form-label" htmlFor="root_additionalProperty-key" > additionalProperty Key </label> <input className="form-control" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} required={false} type="text" /> </div> </div> <div className="col-5" > <div className="form-group" > <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" autoFocus={false} className="form-control" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> </div> <div className="py-4 col-2" > <button className="btn btn-danger btn-block btn-sm" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 512 512" width="1em" xmlns="http://www.w3.org/2000/svg" > <path d="M368.5 240h-225c-8.8 0-16 7.2-16 16 0 4.4 1.8 8.4 4.7 11.3 2.9 2.9 6.9 4.7 11.3 4.7h225c8.8 0 16-7.2 16-16s-7.2-16-16-16z" /> </svg> </button> </div> </div> </div> </div> <div className="row" > <div className="py-4 col-3 offset-9" > <button className="ml-1 object-property-expand btn btn-primary" disabled={false} onClick={[Function]} style={ { "width": "100%", } } title="Add Item" type="button" > <svg fill="currentColor" height="1em" stroke="currentColor" strokeWidth="0" style={ { "color": undefined, } } viewBox="0 0 16 16" width="1em" xmlns="http://www.w3.org/2000/svg" > <path clipRule="evenodd" d="M8 3.5a.5.5 0 01.5.5v4a.5.5 0 01-.5.5H4a.5.5 0 010-1h3.5V4a.5.5 0 01.5-.5z" fillRule="evenodd" /> <path clipRule="evenodd" d="M7.5 8a.5.5 0 01.5-.5h4a.5.5 0 010 1H8.5V12a.5.5 0 01-1 0V8z" fillRule="evenodd" /> </svg> </button> </div> </div> </div> </div> </div> <div> <button className="btn btn-primary" disabled={false} type="submit" > Submit </button> </div> </form> `; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/__snapshots__/TextAreaWidget.test.tsx.snap���0000664�0000000�0000000�00000002523�14467713645�0033102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`TextareaWidget simple with errors 1`] = ` <div className="input-group" > <textarea aria-describedby="_id__error _id__description _id__help" autoFocus={true} className="form-control" disabled={false} id="_id" name="_id" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={true} required={true} rows={5} value="value" /> </div> `; exports[`TextareaWidget simple without errors 1`] = ` <div className="input-group" > <textarea aria-describedby="_id__error _id__description _id__help" autoFocus={true} className="form-control" disabled={false} id="_id" name="_id" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={true} required={true} rows={5} value="value" /> </div> `; exports[`TextareaWidget simple without required 1`] = ` <div className="input-group" > <textarea aria-describedby="_id__error _id__description _id__help" autoFocus={true} className="form-control" disabled={false} id="_id" name="_id" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={true} required={false} rows={5} value="value" /> </div> `; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/helpers/�������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024365�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/test/helpers/createMocks.ts�����������������������0000664�0000000�0000000�00000002552�14467713645�0027201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { createSchemaUtils, englishStringTranslator, WidgetProps, RJSFSchema } from '@rjsf/utils'; import { getDefaultRegistry } from '@rjsf/core'; import validator from '@rjsf/validator-ajv8'; import Templates from '../../src/Templates'; import BaseInputTemplate from '../../src/BaseInputTemplate'; export const mockSchema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; export const mockEventHandlers = (): void => void 0; export const mockSchemaUtils = createSchemaUtils(validator, mockSchema); export function mockRegistry() { return { fields: {}, widgets: { TextWidget: BaseInputTemplate }, templates: { ...getDefaultRegistry().templates, ...Templates }, formContext: {}, rootSchema: {}, schemaUtils: mockSchemaUtils, translateString: englishStringTranslator, }; } export function makeWidgetMockProps(props: Partial<WidgetProps> = {}): WidgetProps { return { uiSchema: {}, schema: mockSchema, required: true, disabled: false, readonly: true, autofocus: true, label: 'Some simple label', onChange: mockEventHandlers, onBlur: mockEventHandlers, onFocus: mockEventHandlers, multiple: false, rawErrors: [''], value: 'value', options: {}, formContext: {}, id: '_id', name: '_name', placeholder: '', registry: mockRegistry(), ...props, }; } ������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/bootstrap-4/tsconfig.json�������������������������������������0000664�0000000�0000000�00000000271�14467713645�0024453�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": "../../tsconfig.base.json", "include": ["src"], "compilerOptions": { "rootDir": "./src", "outDir": "./lib", "baseUrl": "./", "jsx": "react-jsx" } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/����������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021432�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/.eslintrc�������������������������������������������0000664�0000000�0000000�00000000257�14467713645�0023262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": ["../../.eslintrc-typescript"], "plugins": ["@typescript-eslint", "jsx-a11y", "react", "import", "@emotion"], "rules": { "@emotion/jsx-import": "error" } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/README.md�������������������������������������������0000664�0000000�0000000�00000012125�14467713645�0022712�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[![Build Status][build-shield]][build-url] [![npm][npm-shield]][npm-url] [![npm downloads][npm-dl-shield]][npm-dl-url] [![Contributors][contributors-shield]][contributors-url] [![Apache 2.0 License][license-shield]][license-url] <!-- PROJECT LOGO --> <br /> <p align="center"> <a href="https://github.com/rjsf-team/react-jsonschema-form"> <img src="./logo.png" alt="Logo" width="340"> </a> <h3 align="center">@rjsf/chakra-ui</h3> <p align="center"> Chakra UI theme, fields and widgets for <a href="https://github.com/rjsf-team/react-jsonschema-form/"><code>react-jsonschema-form</code></a>. <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/docs/"><strong>Explore the docs »</strong></a> <br /> <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/">View Playground</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Report Bug</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Request Feature</a> </p> </p> <!-- TABLE OF CONTENTS --> ## Table of Contents - [Table of Contents](#table-of-contents) - [About The Project](#about-the-project) - [Built With](#built-with) - [Getting Started](#getting-started) - [Prerequisites](#prerequisites) - [Installation](#installation) - [Usage](#usage) - [Optional Chakra UI Theme properties](#optional-chakra-ui-theme-properties) - [Custom Chakra uiSchema Chakra Property](#custom-chakra-uischema-chakra-property) - [Roadmap](#roadmap) - [Contributing](#contributing) - [Contact](#contact) <!-- ABOUT THE PROJECT --> ## About The Project [![@rjsf/chakra-ui Screen Shot][product-screenshot]](https://rjsf-team.github.io/@rjsf/chakra-ui) Exports `chakra-ui` theme, fields and widgets for `react-jsonschema-form`. ### Built With - [react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form/) - [Chakra UI](https://chakra-ui.com/) - [TypeScript](https://www.typescriptlang.org/) <!-- GETTING STARTED --> ## Getting Started ### Prerequisites - `@chakra-ui/react >= 1.7.0` - `chakra-react-select >= 3.3.8` - `react >= 17.0.0` - `framer-motion >= 5.0.0` - `@rjsf/core >= 2.0.0` Refer to the [rjsf installation guide](https://rjsf-team.github.io/react-jsonschema-form/docs/#installation) and [chakra-ui installation guide](https://chakra-ui.com/docs/getting-started#installation) and for more details. --- ### Installation ```bash yarn add @chakra-ui/react@^1.7 @emotion/react@^11 @emotion/styled@^11 framer-motion@^5 ``` ```bash yarn add @rjsf/chakra-ui @rjsf/core ``` <!-- USAGE EXAMPLES --> ## Usage ```js import Form from '@rjsf/chakra-ui'; ``` or ```js import { withTheme } from '@rjsf/core'; import { Theme as ChakraUITheme } from '@rjsf/chakra-ui'; // Make modifications to the theme with your own fields and widgets const Form = withTheme(ChakraUITheme); ``` ## Optional Chakra UI Theme properties - To pass additional properties to widgets, see this [guide](https://rjsf-team.github.io/react-jsonschema-form/docs/usage/objects#additional-properties). You can use `ChakraProvider`, to customize the components at a theme level.\ And, `uiSchema` allows for the use of a `"chakra"` `"ui:option"` to customize the styling of the form widgets. #### Custom Chakra uiSchema Chakra Property ```json { "ui:options": { "chakra": { "p": "1rem", "color": "blue.200", "sx": { "margin": "0 auto" } } } } ``` It accepts the theme accessible [style props](https://chakra-ui.com/docs/features/style-props) provided by [Chakra](https://chakra-ui.com/docs/getting-started) and [Emotion](https://emotion.sh/docs/introduction). <!-- ROADMAP --> ## Roadmap See the [open issues](https://github.com/rjsf-team/react-jsonschema-form/issues) for a list of proposed features (and known issues). <!-- CONTRIBUTING --> ## Contributing Read our [contributors' guide](https://rjsf-team.github.io/react-jsonschema-form/docs/contributing/) to get started. <!-- CONTACT --> ## Contact rjsf team: [https://github.com/orgs/rjsf-team/people](https://github.com/orgs/rjsf-team/people) GitHub repository: [https://github.com/rjsf-team/react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form) <!-- MARKDOWN LINKS & IMAGES --> <!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --> [build-shield]: https://github.com/rjsf-team/react-jsonschema-form/workflows/CI/badge.svg [build-url]: https://github.com/rjsf-team/react-jsonschema-form/actions [contributors-shield]: https://img.shields.io/github/contributors/rjsf-team/react-jsonschema-form.svg [contributors-url]: https://github.com/rjsf-team/react-jsonschema-form/graphs/contributors [license-shield]: https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat-square [license-url]: https://choosealicense.com/licenses/apache-2.0/ [npm-shield]: https://img.shields.io/npm/v/@rjsf/chakra-ui/latest.svg?style=flat-square [npm-url]: https://www.npmjs.com/package/@rjsf/chakra-ui [npm-dl-shield]: https://img.shields.io/npm/dm/@rjsf/chakra-ui.svg?style=flat-square [npm-dl-url]: https://www.npmjs.com/package/@rjsf/chakra-ui [product-screenshot]: ./screenshot.png �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/babel.config.js�������������������������������������0000664�0000000�0000000�00000000127�14467713645�0024301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ const defaultConfig = require('../../babel.config'); module.exports = defaultConfig; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/jest.config.js��������������������������������������0000664�0000000�0000000�00000000360�14467713645�0024200�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������module.exports = { snapshotSerializers: ['@emotion/jest/serializer'], testEnvironment: 'jsdom', testEnvironmentOptions: { browsers: ['chrome', 'firefox', 'safari'], }, transformIgnorePatterns: [`/node_modules/(?!nanoid)`], }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/logo.png��������������������������������������������0000664�0000000�0000000�00000027434�14467713645�0023112�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��p������.���PLTEGpL7AR7AR7@Q7AR7AQ=bn:Ta=am7AR7AR7AR7AR7AR7AR6@R7AR7AQ6AQ7ARVTRSm=Ⱦ9ǽon:ǽ2ǻ7AR;ǾW7ǽ?ȿJMc`]fBEi4ǻSl0ǺPoG,ƹrZuwyԻՀL%���tRNS�"ۆgT@0y@$^͖֥��-IDATxisLc*BML zD6YzYY+˶Y.]>O"sqշP(3's<wYpÅB.šYW9vBBr9;5@APcԟ99ԡP CjXoYx@Q$ wn)X[ؖ6lE K6o #9C*.% -Nl+i"5 8uxlQ(Uv,cЧ2TdF,` f7r-(r�bo[͞~>]C8nfClUдق%60 7[9/&o[DV MJJfs+%3H\.%Ś-kvAm|j]Z ^Wڨ982᣼Ca£hefeԌev18Ȋ&9TޖyܳS1h#/dC%ƤɔEO!:uI\ADIWq9x<(95Ye.Giɭs[xYj]he%{>D=?LrQ8_ApU,R|2vz*IYtnԣ>.8ИH%㝂Ĕ*Z഼? C>-7|tzDY.-(,Zf(*5; YA=`~sSL~%vbe$6`jr%�4sl$?0;ifDA/ۓ-uOOTRL`Ȭiw[[cd Ȟ{I-! U{Ԏ=9>5{-$ ^g ЖCړT()LX'/Ѽ-!pmoyCD7)f $u"eN1g &9xW}aX!Ad. L*I$"zÕ2=4NHA?s`'N IRCF} b"D0ؑIAS} pcRuX,LJ.U3\vʪ<BSbJnZ3ݛ!p\񨭣9vYr[mw?w-k!WWSr�k%on++wֹJ-1]1kr+\5JfUk2AP&V�ɐ\03jyɒDUuʆ3kS"+sVB#(NzAC,:ypO3E2Uc<YKByI!A]R#p\ef` 墼Gy3q\<S=omLf[*f!p-ܻ%o<_ke\j,/oϺW%^f׬'e#@Py ..-+dO*VO() D\WAƶ`1GlEb IDדn9+5_9 9,O$'JhoM nъ+'"oM+fUOL j]$ w3kȹ7guək?2 NAFhq #>A@[u;!!p !h`CBX  oM^A ^Ը*C,�<vz2s:ca�RC?yEPl4 Vcؤ5M:͞6 p',q7<NB(Tv aTkkIso*nBCZ UaUBX # &8u>i^(BNG(843XC2B1az~b:$P#*[S@;֌*X"U*x*yK+3v7&4/*V$ CUQVBa}b0cU |"!' fw<0%_,W)\h^�AW%vYAhrXR^"p>21 H;�G{xP;1/6ȅ1Qx"-GF\ݶT9\3,8N5XW#h` &țh?uħAwa`�P'` ALExۥ>QUЦbw,Yk5)0I! #XWZ o-+V&8)Jl !pwZnAW$3Q}bemC06ܦK!p(GEF(2$!�<rOpG!`diH;As+JHEXRaPx=NFPZhؠ_Sx4w:N7V}pZh4@l>;56GLOlr`jy)CȀ̛AbBݧ�s1G*yM:u%7z=4t>×܉Zlk:yfDjT]iTM]&׷zqe2;<�/ua> ۩?Ug6cƁy`et=fv Ż3. =<;YmLݛ<低 k}g:G\)neQGNP8kp3OMS�{ GҶSavstY'?+b("]~e\W+ym8CG�+^ҟfDz?:)o&cG/IY{8Bv\Hܥ(a#MU6x|3|H ]z}rM'}Nrਨ_+g[xBުv3sWg^.u`\%% *aoT&F>[# J׼r=,주dwxN}<g8= g^*)+hk6 ݙHq|,KCޝTǤj6y&Y7cZD@y�RՊϏ? `3N"5qpnY?9_%xsgE .LC3)VQp()xS)�G;w aҔa>hbEԞh9oC߆F -6]܉쥴׈wAqhۓE=z. țJN@p8U N1}HĬi�K} [ O%.�p[k䞀KLobp9T&_upr^9/37;x]FI\"8T^ yPnywБRm˓9 P<tLRK첽9peo4,=�Th9pǴC s㟭yҫZE֪;_~I"p{B>j:+=m-W ݑ/}IY&n:B8**s+. Ppkz eXCxf�/_<sl~fهepSU)CkS-6) -XJ z0}| ׈Y⡒la jUХ6 /'+ dJ]6ji&}8.2ig 3e _bN>wh 'wlh tbvWޟ;׸y7孥 |3.P݄er+)*K3JKF[Ż1~*8#Ԗg=<qArL5s*_}MP9p-8UqLNV'A<$L򙑪j5a߉!M xVVfEGfW͔'5?-NL(;Mp<p QaY|#+xfʣ[ބ>^fDf[͛8s0ӸnyCؽ>Bi­k J`JR$캙<Ӵ,<g� h(r*ڄh¨WHɇ*K~ ^{T=i5gg/N ,'2Y-.F[Rx0ap'Ev�n#-hMeTQj~1Kԏxx⭭120)o_}s\@nmf3� ^XJ< �Nk8O١Kd0E&;f᫮x.qESSO*,b2WG2f!\j%==v ƒP宪 ; 6@O%O;pPH�B 3B`N{{?LfoO4b]x5)dIwqR(7dY-A',YM91#LUC$M>\՟4N}8yd@�}cB _EWЇs ˓ù~xuL3 ɷx^a̚(x]Y82a#oKH˘b2O] Oys5!I].6‡Kcuff,$N8nd\} 0"a2(a>w KW3"&1 {*O rFKTz�~1,TA^*+USVŅUyf_ O<}HtR3YS%LU 9n'=SD^=5ņDt?<aꢫ fppWFiHڊ�Ec8&p۰OZXNIT̟T8fDMP.ꏷj&4d(|[ ۛ�Pg'mK5rҨ{pO.�5s4FRB&zZjbhx:=6F5eY֢og[色@aqF`L5sԚ M2NwYO Z *9.+y 3 =zCkĎ9j~x{Ajd8e4:p9Sz}ǒf .PʆvZTx�N=CnQa ׭^∹r gԴk荷>hUy ÿ.48lup�n_MyO̽.pf I'Ap2^jFXHNbxGDg7y*Oab"ua7v .^ }c)KPWΟg1G5pzvz)+$^nScx\ X}}}z�ȸb5XV-�VhÅ֌$ΣìWwII8;7%pEm2-6Jު0Y%?quګ3!Vk.bt;3.9uPn<N�W#}u^l|La7MMX b;+` 'keaq;]V<Vc&:E#ف)ᐼDy0{` 毐tL>lv}퀲r p yۜLn}1MU%L4fE~o'x�sP{ qle%}ETFҽ3|R�pjR�KqƄ,-f�i=7yS=6ڴj ܻ@+nQv8]nu90 4iLsWd)zDk_i0B}u«]$v鬁7B䦧JWX57ޚ Mg\[dJ2"p/u7boބhqvs:Jx vCUiK6U&iDS3 Ԫu-po wz%/O(oS4@.d2[G DVOńrMMl&;{m7,}ހiƛN^~ߙ|+} 1l ymɋx'/ixڹ#38v 3B =ÖG-p_zc0ۍ+<oĦPٓSjB9/&mI+#pqx̣�7)xAHCm¤Q% MVΙ<F~xdU!m<)&f| mSҢ#Sa,3;+ܖh2&$Ld<99I.@[7&XEI.�WۼnNZS:y3G?>Fq [i$gn/Aar.]A8No \S>4A[pqk+])a\ ܇[޾{ mM+z6 nR⼹dٚY8TC8U6a.a.[VI(_W[[ pgwbkڒeҼ 'β`0=peë%� S`ݕ6_A.[a8.m.jlW$jc뽯F]7nbũ78U̼.n}% .Wvo@]DJ jЇ_b&^ ^{ ^dkhrvwN5I/Q8鋅ۭ́ǩu _eLSǕ�l6fU$p|3ԝ,/dkZ"%!xLӟ[KU]G Q(4 <$ ,aje~NnxԎt>d~3pg� {``|�>(s:GnYU{T{p9I2͵^} ,7iSvN�L˛5ި箷A; ']^ 3][k]ft>&T-ⴚ!y;[8!pw/`BB &nm+]hAөcq-mY8E �.�9}NfQq8o`y̿ p|1-ݱ5 }z6p~w<CK{p.·b<#ըRuRZٔX(Ogy1WU*@o1  7@O{p^1@eINx%P0 @:4~ܕUP-H�˟`*pK 2Қ+ٴp S`S8 ;8o GwdeVMo>NNjIrlZ8q Xx:G/=M^8h<%3c@nG?{ʈoM8vL7�vpvZ& \e] sW|8]SW6RiSss;enIޗ#Fg&\MV8 tn5`ưUi6C�!_C03ziTjiXK3{tQWsZ#ˡ,()=)۴ӴۋI� 5l籟ejWW ɵ,>poD0p/ڦb;|iUx' \*R"H ;˙By_ %tL7 oؒFSV)<KY'g[8A,K}.Az2-xƦfwpAB v3#_] Ġ[=G=F4.a8fPiɅ&s]/}5@O0p-,3L3"NY<~`=&7Rb= `lp֜ߚRk Fk)w|1{cb/gaRC^2Y�.3p$cuScp;/@ xD[<SSrL^#Bԗi8MwP)(_}NC?ѓ�3nXƮ<n9 (9&B,EЄ:}L vg:^rO<P+(>_e^`]py*Hb9䗽BǮS*~i֤ٜ؆j2Sp=p tNS0P:{u97rڭ1=qvE@,m_|*]6OVr5\7aoi n))d/р,mlzH>3BtL얖-pyܱABBÀΓa_/NVn+MF�na-=xb EIU><rB?t~xxPDrnր\Hw X%xmȌ`p#]�LDm 98K=Ys8sNW0xZ?�h*[й3׉= ߤ-X> 8V8 qcgtHq[8pՉ'Ĉ-I$& lHEpN5w1YvuNG0e&.yP|/)7 FG:Źة:FVgQծ@E.%sMNo/qM{0vV^_b;&͞0'8[(?LF7"s't AӢk7E*v3~D+!̹v_]è{~sW>uɢ}I9쀰-{%S iDc=pw#i�n[r`%$f]&;4"p.#M]NT 8K872!ON/i E=gb=1prp, b" {;N$<e<ʽP.1s@LNIw43qA ɄME!. =vxRlr˃'70�!:Ffk<EŻ{==s7O`IM\on8QS 'nUiHtBj9P8 'xX8~aENӓ[' Cݢ{iPBko�tb )NZ 5Ƒɋ1f0oeϬƥ|<[.,ҋǯc�X8O,L q dhW\(G"VQ|\Oذ~[pvALXK9(G熴pj!D X5PLIĢq*Տ zU_$Z,0 ,/ ,QخWcq<`DMokjphT vV1Rz8GB#cQ}y &#ec�*c>ꓰo8pur0V4kɁy�̴@V0޺aM<^%m_slfVTmѱzy&Cy  f> WTjr ȶ)kڲ\M7(padL 6$)LI,o}8q J5' 1r' th0.O8Fـ%t/yL]c�;rChWҁxvǡJ8_|6K>soP5G3v-j 4GoFvVpW~oH^i|�.jcetS'FkhTs: pGWd}q}wčڨPzs:9Κqcrt Ds `=z*Kf;uc>a k�c-yaW`>ppqA^H{i]s9`yq?VpOA{J*`{rړa탸u;t3r�\FZA D>Vs" sEuCuH*%]9.KcȎܤG!KǾ|{{q&o9WƊzµ_bw8�$pjtL^ToLhd:ܼi?[{67N)750yD�)t/R3[/@S 1[Ls~NCHtF͔j=F:s' ד~�{K[|pgHXh1T]NN0603\&YKmV]6iB'YlW"7}іI GOR$ܒTPCrpԂh U_ٝ 93b[*~XSلHU�6 vs CQ8mR [)ob&MpN_]*I۰З_O&j~ryڝ}Z]M价c6;:K]B&fs=~3c$<0:%YL+I=Ա)lj}x?7[ 껨xy8)Z v}F폟!]a'0FVJO(fIcg>_pdℬ_O7mm_7WH s-572y{0 ;Αa\b& $MښC%m#| e:ߏEel {2\s&sqɺ_M>p`1"yP;dd, ;Y.n{&wWh.q1IgLR5d3:P6.KH)yq= L&)}4IB3fbU/!xO#f_/!3:"k5J0=Yg ޖ8))NA$1хVzq& 淪[oVYw89?OwA}o<5á:V\Uيܶ߃7h&Wz&Jy"-}aUU_`k+hI_ѡ<mRbEB"E!i˺V+̍Z\'OE�%\ujI3*JVI;Dx�-@e&U' >D p:\~ eyTsXZl O)w+J; -0{}.}Cs:`oM h y�V<Bͪ57h&38E8KcOj0�Z՝EžKZk;lTLPUNJykGbӗ9 -ܬ+)\H%LYsxfV|bJ(9ܤFVdQk$ZuL.@Dբ'|" o4=Qf*Gbn^ r-a5Bq:qZ}W ص\? pՖ5p(پ-mpALjWUs3nnҲmXJBЙew6:igOZ bV* f_4F>gu kـ]ouEVހ׵m{Y4!-+@r2-2����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/package.json����������������������������������������0000664�0000000�0000000�00000006067�14467713645�0023731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "@rjsf/chakra-ui", "version": "5.12.1", "description": "Chakra UI theme, fields, and widgets for react-jsonschema-form", "main": "dist/index.js", "module": "lib/index.js", "typings": "lib/index.d.ts", "files": [ "dist", "lib", "src" ], "scripts": { "build:ts": "rimraf lib && tsc", "build:cjs": "esbuild ./src/index.ts --bundle --outfile=dist/index.js --sourcemap --packages=external --format=cjs", "build:esm": "esbuild ./src/index.ts --bundle --outfile=dist/chakra-ui.esm.js --sourcemap --packages=external --format=esm", "build:umd": "rollup dist/chakra-ui.esm.js --format=umd --file=dist/chakra-ui.umd.js --name=@rjsf/chakra-ui", "build": "rimraf dist && npm run build:ts && npm run build:cjs && npm run build:esm && npm run build:umd", "cs-check": "prettier -l \"{src,test}/**/*.ts?(x)\"", "cs-format": "prettier \"{src,test}/**/*.ts?(x)\" --write", "lint": "eslint src test", "precommit": "lint-staged", "test": "jest", "test:update": "jest --u", "test:watch": "jest --watch" }, "lint-staged": { "{src,test}/**/*.ts?(x)": [ "eslint --fix", "prettier --write" ] }, "engineStrict": false, "engines": { "node": ">=14" }, "peerDependencies": { "@chakra-ui/icons": ">=1.1.1", "@chakra-ui/react": ">=1.7.3", "@chakra-ui/system": ">=1.12.1", "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "chakra-react-select": ">=3.3.8", "framer-motion": ">=5.6.0", "react": "^16.14.0 || >=17" }, "publishConfig": { "access": "public" }, "author": "Jonathan Blair <jonathanbblair@gmail.com>", "contributors": [ "jzander <jeremy.zander@gmail.com>", "Rodrigo Fuentes <rodrigofuentes@users.noreply.github.com>", "U.M Andrew <me@andrewmiracle.com>", "Heath Chiavettone <heath.chiavettone@freenome.com" ], "license": "Apache-2.0", "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@chakra-ui/icons": "^1.1.7", "@chakra-ui/react": "^1.8.9", "@chakra-ui/system": "^1.12.1", "@emotion/eslint-plugin": "^11.11.0", "@emotion/jest": "^11.11.0", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "babel-jest": "^29.6.2", "chakra-react-select": "^3.3.9", "esbuild": "^0.18.19", "eslint": "^8.46.0", "framer-motion": "^5.6.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "jest-watch-typeahead": "^2.2.2", "react": "^17.0.2", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "dependencies": { "react-select": "^5.7.4" } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/screenshot.png��������������������������������������0000664�0000000�0000000�00001440536�14467713645�0024332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� ������� niCCPICC Profile��HWXS[@@JMH/J A^\ ]Ql+ vʢbAEYu&$}s3gSL=�h}Iy6�YBx0stZ: tr);..@]݀P:+9_EW @B)!>�^ŗ � *V J<b= UJە8S$%p Ǔe@B~6U"K�q�_@}X~D%.K!�Vw*~˥ygi)|A"ʝT$1ZCA,P�"RD$Q vB 68Lgfø݂Np 6xP(g8lOW"7#rH 1bBqJ t]义QjE"ǸL$<Xŏf%|"17F"TNy\B ;yG(=@{.$'y>H Tkq4/Nm[ •zK=䅉xJܜ*~<KZ/EƩh! pd [/LB Hퟑk"(@$uBP_3-_ B@_%@ypayp(~@MÆhF15`I %#aDhx g>y|'<% '~rhaZd~_ rz?d̸n q臍BϞPQǭ ePۑ](y9lJ#sEY룊5sޜs�ޣ~b <vk�Lֈ`Gxpw=]Ʌ<}*+)wut+N)P<DT8[Td÷ɕ]1\�PkT_o!A7ݼ?w.�{?Mg@Gs YJ+//O0o2{~ H @,\&`(`X *l>� ..=%@/ $0#A7 H4!H6"AtdR@*MH 9@#mm!҉A>JEPSP6<ZGh5GOh;�`38X,ea2l&VaXU>D3qg#dOg |;^¯n+F0!8| \hB6a2PFJ8@8 RH4 YL#wۈ=$ɈD'ŒxR1i-i' ACS\M#L#]C1WLcQ+4zd/9, O%/%o!7/;ȽşDɡ̡S()(o555-5}45Ś55h|Kurc 6qm[fK hKh5t݅Υ z+-[kVV~KZ]dm[m6O{vA=: :::uvyKҵ ݬ{R1cX18 >cc 4Cg+ۥת׭?ER~f`k53Xj!CCC re{áAB݆ ?1Br57ƍ'7>m5ToPВ1AMMLl6i1153 75=ief`dcY9<\l >c3O1-L,",,Z-z-,-ZoEbYeYj6e=ݺ نe#Ycs潭mvv\"Z{4@I,\uQGOGc%'IΩma0ɰa7lBZ...s]\^ >|ÿznq;BwD䈹#FqstU]srot!Xq˓9sg/o/WWwwM+u·3G_/}9{>np䖑-y-yՁA[9W9!XHxHIHknhrhE0˰ڰpi#Q#nrM|n ;;rF(jTbTEԣhhYt(tT䨕HbbA,7ve8IqqOF$LO8H#]RpҤɊ)5)SCRW>ziitRzJ1cV9xqv㦌;?x|#&& df̋Uz2U| HJ)>Z<?{ev(PT&s99rnK۝P+ɕh6q6X>wIݲ(V9"'o,Ѓ- {O&L?EgdJTǩ>+ +e>?y9`49yլ:f>2'wos]箘׼yMMϞjŲ lX//l]h% e_y?-ZҺkeee7.߾BgEъ+G_\UV/(۰F<qek?W*WW2ZT~`ݕA6n(ixMm67n~%e_Xl5Z6ɶ Ox0ٱUv]uuv.(؛ƾ}Y~�@I=R?Aޘv0`s_ӁC.8\yDң+:s\zD}کSN;vYc>{օ^[<[ہVKޗ/\njvJWCƽvz7n{y_){w=½<^G<lycOO>wJ{ZYs;:/eoW:TAtx-{f['wK>}Oz'&}.k{}}}R)fef�4�oQ~V@~_77س__ q4�|�>8"rwSqQaBxl�|Y[e3 %T)D3l rxTΣ���eXIfMM�*�����������>�������F(�������i�������N������������������������x������ ����������ASCII���ScreenshotiB��� pHYs��%��%IR$��iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 6.0.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/"> <exif:PixelYDimension>1716</exif:PixelYDimension> <exif:PixelXDimension>2788</exif:PixelXDimension> <exif:UserComment>Screenshot</exif:UserComment> </rdf:Description> </rdf:RDF> </x:xmpmeta> *E���iDOT���������Z���(��Z��Z�F#��@�IDATx$e6P$ K1QrN "T@(#gD#/Y$# ` %gɋ>tWUٞ=go]zj/ՒF� @� @� @� @� @@S 6f& @� @� @� @� @�@� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -� @� @� @� @� @@c� @� @� @� @� @@ -@_|Eymmuί/?�9댭 @� @� @� @�' }D!:+tI[;t!38cDMTw#('p}믿>饗^JF1W4ӧf)mi91 @� @� @� @@{P@}:Eȑ#СC|Kt@w D;3vikNziV(=  @� @� @� @�A@ w %}vڰ.킝 ZcIw^(0 @� @� @� @� ;�v.xowDՐw1mVUC@n=<g_ڒ+ATrb3 @� @� @� ]tǴ;1~mɝfl{@`޻ml |Gi5HovSmL @� @� @� @@ vҽ] %@@;F9䐦)4  @� @� @� @�.❣krCr :#{[n 6MgF @� @� @� @rxZ}6 o\G |ieI~a¿/VX!-iyM_|Ez7ӓO>Yd4lo$ @� @� @� @` =` ݫ /pjr1�}M !Ъ[oVZiŜ}i( @� @� @� @�" ;X8%;6K_r>:[Uq?i$@� @� @� @� 6GǑGv$Ђ@n xf%PGGM[ne84 @� @� @� @$ ;.AhgŎ @� @� @� @@@nQ+ ԽFt@n Lio @� @� @� @&_~:=O_G}&x4䓧M74- <)%zz7^b)On4ӦZ(: -??9[o_7Hѿ[fiѿ}kyc<S顇?M9iСiꩧN3OkŸv4GNӟ/<f_ű>ac=g;odIʯ)_}tW^yeo>,}_+sΙoqy)%_|1iذa_zyL3͔s}b\#{_3>̰0>{jZG({)uuc5-_Ws̑{o|#M4D%^{Vq͍}K/eN,̒]z;3f6? ys^V\eq7|~=kmtwgϸ;~kM[`{!Cj-p;?ݷc"9rzƽs\G?*87J8_q_ ϭ߸Fג0Mb\X:y E\wl3gvD_c~\vykT\g܈s._K_Rv Ʊ7l^:}_âaky,3]9o圛lj.@ @� @� @� 0=nel_x{~'ӯ^e}Mkv#@pצ)BMe[Xcg.B=]}?,;mJ.lǂX馛u]2ƬćTjiUV!%fIsO:LJ4N:i:Ska~{:r׹^{e܉ẓ>ntUW5|<EPgu͎t ~-8io[n|l4{=wuW:餓z=uqǍ"�x嗧?m\C"pv]xWֹ+g9k67|sE> [uUS[dER3afw_ҍ7ޘ׵~v) :ц/q.G08-6foo']1#H-]r%+;O8gq՟xKs=2?OkE3P?Go܋p\ccEP#<czW/sZxxѶ +eY&}44:˜qOv[G颋.ۨ;쐅j+kmoqE@LߴnaDýܢ\qFmL� @� @� @�@ro{cB8SRZQ 7*Ex/ZTխzMz/<*]xiĈMz//G$Bl[lEV4hm$|;)rQ=4_:&ij\Evl:+7 hT,"}yp}֎RKeێa3<3;۱%\2)6ӊU=YU6O`gA]HTkcT+lG|+aJ_'\_ _7ȍᡇ؛o6d>afA;,=."/p@VɲCmYlʘ܌0g;}=#{!{pQuy]wm^A\_!=Fuvq;[\~_cQ=-ܲǰz_[ZR6]oY1<*[.)~4R/s>Dh8~GyqjmQV/Ah]l9ٻ{ox ؽ; @� @� @�H]?Vʴz7*iԨQeUjFAVFQ4ZT5QNp0gF7?Or^EafW>EEN78 2 [ ;Ѣ:tڍcȍ6@U#pZG;"'^l lW @g}JW],ȍkq;s暫 }sOL{nCM{fUY[&)"?o˃-λU⋶3o|q-kE4TE0h'4z8/{DHWUF9*ܧz*mVčr駟^XecoʱWt_z"pF;e8 @� @� @�v F(,j5R^ 7^GNSoEH8ĵ[ѺM[=>Ƽd[guRj= ކ{l稒Vg]py<.BVBo$PZtE 7Bv6R8Ǩyg씷s9'M34ywM7ea͑mUDТV&F6,m@s9 wE8.e+! ^veCs,sg*#G{ロn3ϴ5gkc3{fNnrw\e[!ר6T]@oі>TJ-'Voo7׍۴ @� @� @� @Q Fnkh[jr#o~E<"|.}_/PF5NU[ݑUW]5{x'!}wjҝ{ī 'YUo:=B|Q]tf*c,Bz:3J-8kƼ޼޼ƍZo=z=SDMTT7Qq?Zv>rcx0by=.*)*v,/@\~Soٖ^z9vF1ǽ0ݍˋ+b5blr:+WPn<lR9b[loF8"zToD+}'m @� @� @� @[.!6zryU.#ug9昣pm)*gw>ҫʿ?[@խ(,Y=m#cW@4_eGEUTcv"N8!-ywGgs1*N2$1VLY㚐v-o>Eʴ/ ]DH:^rou\#U{5X#g?z,@7o7?r-WŸu?[ܟnRׯNklrAn^ziʜm$ۻ믟 a U  @� @� @� @@]mvCQe0믿^jqQsL3OOSTʕe.43VTe җb_w}w/wU#3\5ǿ/)^/\E]t4le~7^z饗ҨQRTkEEfa,QQ-*unaPT2BMM6YYÇYj 7,/xZdE OoVy-B -ЋhnEUy9dȐo{.]~z9묳NVzXϭrUQM6}ҳ>Z9,KǶj_|EtMc=Vktaq.~[I'4}Y<kΛ92 :zP~ F*~:keYsW_nȑGYf>} h%nw4s',A\w˶~騣*5y"^92|e>;lA+Y&Xk80ΏVי87/Xno|+_Jvp"@Z^aҡۍ{Thz!tjO?}v|G)?پ)ۿ`*T/?7wZk{p^8}μ W^y%qq`O<q=r? qnı·~ZXaò3<Ӑsx$~#j @� @� @� @` @nS#>, !=imS]5&y{"Z-*FմW΅A֘L+­Q2kzѧ> _ fm)x㍳Yኽ+Eޫ#jeZL`9;C"c|Z 䖭`!]v%7\!oRd1mrlIVjE^)je[Q`3L 7OZ馛fW" Tv9dZӾ)S\" X=:YTY2<I^ }veA)qM'\*!?b`38fRmsO\6O0u#NSkd\k#*e2;/tL�1[q1S1Swf<PSAB<&ƅc+QC 1U rZ*wqwNV>xYJ<CeU>X}⚑ך9z//~o87Wqψ]~C87;,{ j{O{ۿկsq=ב2l%22  @� @� @�F]zN;Ũ\ W[m,x1-.azXodnkA38#7$U=}-N?Gk{&I#FȂkdTJPQ@bD2*Nשqrcת \ߕW^9|Ճr?_r%Y'wpe"8wycxfTs)H?~Ui4[g۝G,QEX:j<@~k3,…QO""y晕 *]0c=6{\p^kn kh 7m/|EW]uB)n?=%EI8 EPEN*/z|=3zU0#˶6_2EH(7BQɶ^*{xF|q~av=-Lrt<U&C.VPx!ηWo$g7j*,�Oe�|eFB]i*K� @� @� @�Fp%YyʞM7TZoQ�L@kQUxu>SkK;cq\TSMUTo;^ۜ׊*E7Z"iQ0*7<+N։@P ;4@nG}tViMh LQO8_]vٚzGFZArˌy!Fnma8z;k]܈JEUckjz/h[T: {,֗xX`E5g}68^λ6ȍ�V@{ꩧ҆nXG#S }h*p;r?2xT+բri<TN8ᄴKMg|\Kk^ e~-6Z~-,U9ƃDx/|ͳ�o 9*ˈuϻU-ȍNVT;WYeR͘kbߠ̸&> @� @� @� @`@n"L袋Zk;mH#ZTeB"[Ta6;jV*袋GQkc+ `3bQ|0iO"]p+_%w_ǶNשqr#}7v(Zk2Ur_Tܫբjine+VSꫯfUJ+]xᅳ Ɨ Ƶ/Oq]j9Yf2U#oiA#}pQ2Bnʹ2̨}\|@nT_ߍO>$^ yU˄ ] Q2`kqnV6ErZ9L(5f^s j嵸&DE/o" VD<1߇~8El3O?MlM㹨ozoO({>Tק0 A Fcet9{TtkE5� @� @� @� Y,dT׃xmzwZ9眓?zΆ7S-az([&Lp?e^K:;Tj 7F4E (Siy#5fXTqz|Ģ`;T:^G|.1ݵ^fا FP>K/4yB@f^0矟5'x"Eez-;3}5פF絘?*cJ2^~=f=SBd@n\7m瘕P&!je*IG2" Ezbkİ o3̽:y䑴V[5fXT/Θ>5?yՐǕ@n 9M7]_C\KcQ~ŸCL-_ Fe{KU5߃QMVLFoZ @� @� @� ]ȍ_P)EUz-MQ裏F׾dAD¨עN7IqGΪ05Xȍ믿^w/w^Zn&IyW+3 [L;)‰+Eb+X4Y\m ˛_Lkf$ٸU@nKo֦w1yצ2Xx?qV%kHnk<蠃W\Qcūw@ȫ:M?}^&LSN9%q5FvuךUƃ&K,DkSBaV6q {eFȼ8>[tϻ.2_{zm)HM6Yѹ˜?J j:rMFo^;KFuV|y[ l 6H߰fq5?R8o @� @� @� @�n@1ovzw/;}Ê  G hy'Ub˛./oy .?##4g՝4N k~);l̫lY\kQl[|ų�k:^މV_tM U2UJB@eX3^Byr㸌6,Eʌe׳kۮꪆ_{Q%7ZR}y9L wv*|Ȣ50/*I浼@n;\ȑ#СCs)Y&"ne<ouq:S{wi_^+ 츸DC)\D^ O?M|I2`'.uMnqs9ٜӖX/{>*\2z!j> {2u^˻g @� @� @�(] փꕻ{xoTClE�2y-FQS-B=Q;LQ1B{E-ϵLrJ_je|;Aٯibk[ L+rPSm9*.inZa6?Cˊ#j_&&V2 , r_46|Bhh:˄Tv+ȍ㵑su|vU9/[T4/gE9suInˬ|۳ݕ6[L ~)zjE^%j@gN>[e]VxhnK[n^xtNSvG}Ta뮻.M=}[|f;28FZ<p Y@n-9 @� @� @� @`0 te 7*lm 9}م,#9묳6ZGս�l^UZˬ7,z!f{z- mu;v*]D (HTƽX̾[ٌF'T=#E;׿N&)=L(LV&W_쥆>l| ;e:~c?/biON8azLS&]F})ȍV.zyVZS8ZC�bL `E]8∼MN~)*2/O=TzǛ:w;Xw}w52i7. n^#7hwT=wYy ߉,He6eNnq5< @� @� @� @`0te 7^+6[*gC lq+ElON=\駟#T>z̫#Anh UgrgqFV)-ݨC^z4dȐRʷkw^k&ih\($?!}K_28?¢V* z˼-2UtIK-L'?IlJ-S 92 :.}w/z;1STڌڻ ~h+s>@f-*bol 7*>)gm<86.ryl42rN7tS,'pBZb%LS|Z}KB=#ڟ{}W4L 7ATky: @� @� @� @`@oFZtodLU nᡢ@a & pꫯ]%\feik@nOE㫮6}׾rr-W:^7|sb)ԻkEU<nL cB}f.9(\U&{\kcE 3A/ӏgi5lmӁ2hW!O묳Nժ"]&8rxtgX6.rqTkh9{0 y(gG� @� @� @�ƞ@Wr ٫e5瞹¢:o~T"־r#@៼vuץ:o~'ۗ:,G=u*ܨ.8|ϐ2jk.Ĉ2?4sY@ Fot'vWD0?q+*Gvgi:=e¼Ze�`o˪vm:}\5-ᢨ+s>}&74VK� @� @� @�ƞ@r6(w+ݻի]|m ,y-/ۦz(oLP:w-ȭ0P SJ .`ŏ@nPWos>}h؀ѣGgD?S믿g1`]wMlIEy|ZHn6{s +F��@�IDAT̪s?8㌥B w}I7xc.o)rgo$ y@ +=м-$2 @� @� @�J 6[YL/~><W_gxv4gif˭Z ExYgm^ ˪}ookE%YfOGXc°-ܒ&|>6; kW]uUaL2=ܓ[΍*/|euc1oZk5fumȑiСMuLۭ*}O6ڨ5 )~\5c耸^oo|Y[N ܨ]ұ^zFNI'x$tA)~[ne·):JmEϼ @� @� @� @` t] wN{n"QK/͝ouIM7]4ꫧ⚩![,}k_KÆ KQY/BM4Qel)_^&qQO<@VIOSz# bczK+tI{w% + W;YO0jԨlGP4A|o})*pWn6lva>s@7r_{*rDs-ȝ]#S+|]&8+>Si 7l7K,DLܫ+&rTzja5+z} o0rg?RK-gN++g4[9*/ի9Q3Ϥ_?w؏?5 @� @� @� 0XM OLkgyfV%6oNϲx~a*կfAGj 7'Q4E�/:_n^To.3E9u*ꫯo),#K/u<n=n)¯ycI&)=.Ω?7x}&L{,E�;qmY Q!<cus q⋧�bT}j]c򦯌1bD:C*_kW:&c=RT."4Ԫ]oV/BSz nךy3:ꨚ l6]29眚Nȭ� @� @� @� A-j6VNQt,>[VƍPn^nRk~?y晧f^n;3p Lp<mE]cQe^A.M7ݴ|~PqѲreTus {)ɧvZje_j1?i-ևZ(Ck6Ezm)LlIa7r⋬yp 7ܐ7Iu2X86Q=|W, hk59};7tS{sj~.jѣ EfCU7@n @� @� @� @` @nTW絭:Efl.[/XON>ø1/㎕4KkV9C/bZs5kZ!vz/?wS QU3HT-lqx{T2dHdzq7q#_K.BnE'K-Xe,]*q nEhuVJkZ@nlOPfV/m~Gu2ح+s . 6)2>*QO2$M-3/嗧f͊kž |'χN VkL� @� @� @� Fե^:W>)zsB52$z&h4a~ǰ_r /{pNZarͫX~zMP5뮻nażvzu_ȍ Q4-iʛx_ѻ`ـՑGYfb[oe͢cws 7koRS뵹瞻i8_z3J|e^jU2pW\ѣo/ȍ)RnͿGqDVѳȒ#UZ<pQ+�brtk�V[m7I8T @~*xSϭr|=S> @� @� @� @�#0hA^&4y/M뭷^5jT"2[o5M6d=+/�e)mer/N:r[ 歿]Z F8lcIrǕ {)Bխ >z? B3\s}SüA7ێ>jȻ[hzN=UDB3̾Yc5/s9rd:th>#m֫>^2_R52UA;RKN5z! P=GNK,D$ٸq%[;@n4S՛/8:y>T[ Zg @� @� @� 0pU 7}'xb~TSڐ!Cr7LivHlME+bg5[L%BnlwEԘL+d‹^^&ێzeiZ FX?i꧝v>w[&ɂkq^Uc=6EP1"MVs￟VYe_/>˄>c{*pYpՀV?fm,SE9S՝U|pa ɗ r!iWFΫF շ»=wJwƺ3gDHb?K_Rŕn?O[4[q]k^?$u5EJ q&~[UFu8FIӵ^fu|^a=#)s^f|^Xq;IFLExmjtѦ'@� @� @� @�F`Pr~RZ2l饗^ʝKs5Wi1駟^xuw}I|ʦEm9Ȃϵ^o^oޏ>(mᆅv-X:-fx mc!vsk%]ֶ:\pZr}i/ u]}*iW]~ j8#\cVf@nl\B?[lQhQk8<Z ;SӢ.:{|[f#b:ob0ybZre a#8ϘawQG5{N1cxae׸. BT=Ǎ>m)aEm\ L뮻n*VOZgu*_KP~a*nǼ<VQ Zg @� @� @� =*e*tlIyL_ [q#S�jo\{ &Q 3DN8ay󾔭(8W_l׾!zUHl5'x0!nOXocs+O>$ ap8sҬ^s5)^ݝ"Ukʘ׿GG?Qa;;==z¼F~CQEwf골}^k@#ՐoZ"W @n<!ܨZ![Ro'=#Ӆ^U=TSNW=¸E<#Gl*]SToms>)ƉPs/vme&ϪGUzC:r5|&@� @� @� @�G`rzꩬk]h=4Sם<@F$KQ  E?<E* /¿yU`fT\&Z!/W>03Fx2~O<q;da{s'tbMȍ.{饗6l# K!CN?0 YӞ{Ysyߪ{|/Ik꒱[1u{ 7o&*V&?BQ5EK._"jsL]woVV^Ȼ~ 굁ȍGo=yRT}wDQ{N\];@@o!"Fx7xkͪ *7EqFE5\3E2-jI&;o{םzIJ.[XMCu_r5|&@� @� @� @�G`rOϪ ?R7 &|ZdB^|EUq+Y|ųM{2 ~a)2+OQ4[w}w?k#>,<}=SggxQY1 +~g}6Ex2e[V=1eZ [l2fD5=:+j Gic B^M7] 8|̥lh,y~zis=H}ʤ#|53w{ >J+Ramp S<p qcGݨZ@ᆲzxe4Q5*>aؿO?t-{mi=]@ Fy*㾰+gAЯ|+Y>keâhqc^d�[FmTy7wE07BQy?tẀE%ظ5:/|^fy횦[ĵ>gI<P+dB~-7u|^@n @� @� @� @` @n nUڱ"(Zsqof9r,  j ? @EAȍmd[q^ y"㎼>l*Vc:د-#FȭBsN-o6P ~5X#w vk 7@gy&צGu+g_:ȍmh!vmiYdu|^@n @� @� @� @` @nG7߼[eQy5*UV+k[/ˉJ[lEEڳ>ЯE&5S 7*Fۨ_mfKoJE|w|ۢ .XԵl|cMK/t՚(\6#VEE]v% m֛ãjT-j_yYuآu @nlK<kEu2\:@@n<[q!qC&]w]Y� ;y>T=YJ} Eo"}ѥW=Q#Ȟע^{7q @� @� @� @`@ @nx};*wQA2L*;&/1߰az6mKV]uүy^` v=SiwPn@odiN{onh[Tk-"| rqV;*VG-B43]#h(s<6V=O\+jAu?w2́�6.r:B'tR۠vXZ~KCu'r5|&@� @� @� @�G`Prc7D-qurcTvH-"N;z,[l~6xբ@n~QCI34Sm5QTȍc륗^jQ9HC-=OeѣG_K. jX qiiihecBne>2vE#<Ps/;rVmo>4|ҳ@nlM7ݔKohnim-=G' 8㡑vxpOQ;(q%[˳sz+PYGȭ� @� @� @� Aȍ]!o9s1_oyD`-BMQUmȐ! /˂^zi!dM㏟U=szOV{@n_dv2fL_ny:�@n ~'ˎQk̸袋uY';8k/IpmW(=mKZasѾ @nl[q=o֝>kZkG+-BkGuT۪.2Y+_JCȸWr)+lhMv6kXV'!=ܬ*~XPN<aܟA<t7 D 7ܰ\'χA Zg @� @� @� 0p=6B-s=w~aTUW]{챆W1l.-MzW^ɂ_|qQߣFm[n4D>뮻n̰zr+Gu#Fdn/B~Q7IV1ߧ~:zm ]GunmYgU*̍TGkɎQF5=aUVY%EX-hq>>k-BiVJkfse1ZTȭc\GjxzTCW_}kd"o͛8÷rKI[mղ\sUwQM<9rdSc<Hj򺐍�`'zk7`馛駟$ßy晴NAߟ'9~ս8㌆C<48{cvXe5%8;=t7M#zt믿aXO lPݧNVoؼ>&9z뭗 $@� @� @� @�@bo{'=7Kcؘj,̒4|%^K /sϥ'|2ҏ:3<Y_C=ˌ~]QY1DfZlҰaêg-9|w?O魷Jꫯ�R}K /pXouxwӗ> =:M2$iI'MO>y a]3ycVzS쳗_~y̿F,3Ϝf!ܨj~A8^ެQ5[iEI&qixx~qF?gqM 8cVoy%HM6Yǩdؿ /r, FQţ>fv1Z/Ĺqk~o\3c3ί /Ϟ⡁34S`#X_. qs9D 0}-V.D<~~nqC% @� @� @� @@_q6ۗCc75]fmm38u> qvv.k @� @� @� @`w-BO?=z꩹=;餓s1� @� @� @� @�{cޚ c9&wyQEw̝H @� @� @� @� @` ={k&<tUWJON;m4F @� @� @� @� @�cO@ w[3kQFJ{iȐ!I� @� @� @� @�=ܱgoC=v\g1]qI� @� @� @� @�]ܱo_Um~:]|?X|Ӊ'; @� @� @� @� @>r!iĈ on6h3 @� @� @� @� gmM@3ܯ~+LL28,g  @� @� @� @� @@ v>A L w=Hl z@� @� @� @� @�@޿K N;iĈv  @� @� @� @� ' c6 4ȝq' ֦[  @� @� @� @� INZ6 ni 7LO>9; @� @� @� @� @`[;H7H}YϳSLno~37|i' @� @� @� @� @`wM&@� @� @� @� @�h@n,-� @� @� @� @� @`wM&@� @� @� @� @�h@n,-� @� @� @� @� @`wM&@� @� @� @� @�h@n,-� @� @� @� @� @`wM&;x-i'lQZ6TJVDYf)e*IBjiRyܙgu}>g3gμgY>{HHHHHHHHHHHHHHHHHHHH s(KD$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$(›K&                    r3ǒ1� � � � � � � � � � � � � � � � � � � � d! rIHHHHHHHHHHHHHHHHHHH2G̱dL$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@YH,d                     7s, � � � � � � � � � � � � � � � � � � � @ 7 o:/HHHHHHHHHHHHHHHHHHHH s(KD$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$(›K&                    r3ǒ1� � � � � � � � � � � � � � � � � � � � d! rIHHHHHHHHHHHHHHHHHHH2G` r/]+g-,o殆1XE!SZZINn\UTP` '               ;6m5kȆ d۶mmL$@{!{+WN*V(eʔ%K󍌛d\OR zLu׹AHHHHHHHHHHHHHHHH .]*VhHHp\TV-/r r*30h!:AZ垞 RHHHHHHHHHHHHHHHHR%`Y~=RJRT))VX8  BL͛7իU/_^j֬WK􌛧PGNOHHHHHHHHHHHHHHHH !3. R/^\0%K("  ۷ˊ+d۶mמr\;Z/&"W:*M䌕HHHHHHHHHHHHHHHH _شi|6rD3nѢEH":L � !?b\ ծ][ʔ)'sA.}˪H%7n7/HHHHHHHHHHHHHHH8︕*U *XŊb\zȍB  CyDž(wǎ/k׮իW穗<^e&dH׵NxH$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$Pp ̛7On*|.] rq =eIH`W %KdɒR^<9} r;+o$fE9-;.WI$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$E`֬Y!/Q-Zb(B\! #�A-۶m~AYqaڞSny/`�t$                ,$W_٫Gŋ[Anb%� � H�\xɅuX&MR)aý�F0$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$ 8AnXb􎻋t$@$P K;dܹR(-wO�i$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$P` hA.<bq � � $Jr)Mjˋ#               P䆢  P�$fϽ敒� � � � � � � � � � � � � � � &@Ae  d P,1/(-ԷG$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@( E$@$@  7H =(͞{+%               M\M$@$@ 7Yb _ P[o//HHHHHHHHHHHHHHHB P;HH @An${P=WJ$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@�IH%@AnP P^^ � � � � � � � � � � � � � � �  7 w� � $@ 1H 7{5HHHHHHHHHHHHHHH4 r5 .� � $Kd1|&@An8               %@An(  H� @b!@Ank^) � � � � � � � � � � � � � � � hj\& H�cBMB}{yq$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$JP4A$@$� r C׼R               (4L$@$, r%�HHHHHHHHHHHHHHHH @aZJ~'{Փˇ^ow\R.\hmԨ,Y2ӧmذA[ڵkK }@  7s,S! @An!               H@a~SO٫ׯh"2zhy뭷 Rϟ/}gJnݲ �Y}y~pHHHHHHHHHHHHHHH�g rE(M$P P[ ӟQf'##               Cn"-X]vN:G� (5 r0'               I $@� 2H dT$@$@$@$@$@$@$@$@$@$@$@$@_-SNe˖Ɏ;:bŤjժҬY3iذaZq`  ( ?EJrBq~SO-Ze *T=>he۶mRlY)UTP-/aiN4m %0o<W^R r™XkWӛ,U* eGn&,ogfњЈ){챇OpmG;uW~KbBoܟ~]'k7li?R9bdž6a%llFRJ=ˆN|j_ߧTlQBL`_;E+4.iRrBַ-vH=S`}`Ͽ6_EJ+(+L ;p좀=U¢lgv~&_B)O.eN RdqC? Wu[徲K%pSoVg?٫L]dw6n.󗬵YdoS.Q3e<yi("MlS 97 C�6y|~r%rʱu&؂I7G.7m&ZJ!O0/^nSmxN ,}-ߗ(^DQ)< 9]@?y'#ƍI&I-[SO=5KľG}tR}wVH1P :6\R~'{7%#˗ҥKc9 1gٴiRndO9<yx @ w„ <~ ʭ^tM5ju~A.#G?+^ЫW@-D(S/xauQryIʕnٲExYb=RJ2p@~wmHS>3f?`uСviJhi͚5KCcӽk}r 'EɃ>k{`$H$?K9DH&nhEYz=joN 9|ߝo(in�͒_Gm} s}w-OYF�(O=/]|y sI:b;WŊ6͗>4@tSw]$?X>y\ G%5'U#Qռ^>3 vw~w qD'5:Hn] ;7 "zsm"6*םwqӖxdw{ h 'Sny6SE 8㇕2i65 ˻#r[~MF#P8oe.j[[9HĊ'}|1U&Ij$\\> й}opg%&,_K|^?aP*;$_}om#:18VԸyI'3L8Pp |iL" @hZ8^.ӿ-($WSFc3| 1YI�q_}U{;w237k,ywlݻwOSnӦM %jW_}|6̙3=,k5J f_:uɀ }Wd?[#p@繐p @O\|{16-?v\uUn- aOO<DTc΍[tiD7n~F^{ɐ!C\ ([޽{ רQC M'ma.͛7[۰?^=\A 6|+2giEX� NXR(7c(uTaF+e:$-"EDW$["#W]ȮuwYϦq-D,? r;F%u>K3״jKfe gm%XFAn,:ܷ+ ,^Az?=eJɨۄE[^<3ʰ1sl"Wt<.;Z* ƞ@ Zą 3-+2o&#|k|;)ݻdSqɵ֙;<6I~*rd) Hz!7&->!*xt1K}KŒ9U畯d_m>-m,Nʈ3F UAn;#Ƚ܌݇yw(;Ƭ-;t3< hÇxdyzWSLC9D. 7-|1ކmog^ rofO٦O.E:3Q8B$ 'A.ĪgaÆv2L<Y/;vZ~|P|y;e…n`M.]u y:<Bԋ? ʀp?xqr9e [NnYz @ ~wcAIa &�AH7oy睹RK㺃M^znR#w*ŋE*;O �`I};b` Q>=] rqG/| 3 r.HpjVY=4Jt&"ϿWŔ IDhHAn^ƛ,y]8:Ru&!,{}|:{ݥHrf?hbe څېѳ9;gw$5Myވ,3@dUb“GW FH>xdt+ZfP'40g{~'ؙ:0`DG2q~AxxobuSd6Brm7e]? r � rw!<8zLuSΨYT(%=3Ђ~H#.�/¾s)?)I�Sޱc 4(]1<nv)Vs=;w i:uMG&p01cy{ǥf.A.y|Ԙ(( wr7z1ﵽoM*Tz ureE zdĈjժ+��@�IDAT<Eݯ_?O իGk1[Z$ȅ7tq׮]kw!%Kl[Ђ\בG)}ީI'm.D~)MÐ@%& &D(ss +TS=fn.&C_%)(Hז=e}ɓZZAl) "+<^TٻTp,:rc;e؛e9 A.`rNc9CP;v]nniY?hX"MT;p/yo˨mn[n2& Ξ_]U@kv3m;,n'&{vth.An:iyK@ r?Q牉>7 ,=29� rs' <<yw^Zn~62 a9}Â2yr"-ȍ Ii!xS>&=;DAnLIn&{ޛz$1Trc$ 0An&.An&8HH EvU:\}vիl(=c֋+W u1FۦM!MϞv<svw :t]0�sϵGv+V7l`/'pztӦ㊷LAn<BO@"BDIP'fNf:bU咇&ƌ;{^N)3|DQr^50{!5+g=nܲ=0LK-_1V0IViذU6bF wgA./0k]+L\6LRdt+0rqLAPF]XaH2|.$iLj˗.MIy1Wm%/tnqWoG<6%`dr<E#oK3SÖ+U^\bւ\;'@Nʔ<zW r!|!6eay_fLG3eڻ)q<3ak3i?F]aGELAA燁dFh0lKq5Ӣ'23t|2ڛ.<=c*gjQdr\QSDZLO0d<f;K!T='V]+Xw ~Y'}yslʑ,޷8)nZS`ޣTHCES/C6oa<%tߥx d~A#gXMkU{z6#| 3\podD鉔b&\c8AhڃŶta:j'kS'NY zTKosx܃_@^8mrY JdD`DyPNsu";mGʛIj%TcZ;NH s(o\OV;uTUk7lrNTOZfI&_4<ƴy M;cY!z#+L?Q*߹DɤaL fî&SwA.ޯ5k>I0ˮؾ~z+B*[.]:BY2-[XURL219B'zcui /8{9:pNH A%\X}Y)_>x{MjժW r۷o owk_~ŴW_} /H"v,lܸц?~Kۻwoy7 M l? r^j#nv^(uTK@,-EWAyyܹs&M[Üu<3g' J#{!2>8 .7csDm}8!3@^kV.+=.Nex{v BK<[`a^!&G9|kYF�[|op,DX*)]r;'&U'8O3|x`w[][*WsbSW(W)+Ir1 xƇUͳ\Ld߽"ͯQ!`lt5oo 42�Dz.-/g<4*TӅH)##O1¹"^!7 w gݎg>4bmLA6e_`l<×u+-!~e}]kj)gM(w]x=x:l�9E ]5R�iVtuy<T"MNX@zz+96,}jU'L;<//3rv0%;FBȧ;ZEZx?\ޚwH&5+KScV{Op1E93O~y]GNjxP\Oe#=opdƜO̓;vw&w[6mO5Ӻ#_LU+,z0wBԥ tm>)|jY6 cǙ6�j3gC0<f5-=Wټ~rx l5Yӆ+s-4f5m#doOY>7eMF覝hy}"mGċ0N{߰);$A{C4ֶV3D:bJaD|-_}_m?$My @o?LS6�n(̀OrL}+7qrY;,'64M9yaˆTĻdt<\eM=FL3[ '.҅&_jd3{lY52"<ǚo` Y(b!xƧ}Ct2<z$-en7Y|>fv<sW?�A̠x2ljS �G??PVc5XON/Ͱu+6xu6 HU6ҠKQO \YeMqֹ𞢭;7Q6oH2xmqu�ą5ݻt4SnkiͦLr~q.mX4T֛,< m8a4v3wTTN2mE.npSF s<9?h`ʦwݵc&hKw:5fB۩6UN[l7j8Q'GC9~O84pL<An*e7|ib W=i Mƹfrѧ~%^]G=MlyX"nsRu5 6A\5JxPŷ<Ըy6n<WROʅA SٰTrq9sKbvu H??\^x{Ҷm[(V:gi;Nގ;JN(HrV\)Ձ5?O?-SL1uo} ܱ |P0A _Q@uAEsoL4If͚yZDt"sᄈ}q8On'{yGDfYn\{MYp~t펜wޑ/B[YYԭ[Wp;0}]~饗dĉ޳Ǎ''O҃)3sE $@w'/ خPxŅ^3$uz-ȅ]Aoer r]X[Y,_]X\yay1ɦ {GGkyذao\x -0Qn-( ĶSVk<;/N*:031̔WEDFC:FRձ!œ;%筁h;- b ! DP7?7Պ~%-Q Y CrS:J}W㿫v>-}Sx߫x\tA΍8#"0 :y=̤ pY;\ޛTӅLlZ8AAC:H9H&#3\_N;`8o*cc!fꬨgrш}>D#p!#w"A:ViCglܓ}+a9잞XϿkM@̔DELԅyqq?va\tvAT myLo2B\w#@pvQγ "<m9q~Ri&-sonEcWї ӂ\to0^xŽEx1m]3WwQfYT"FA592xn\ߏX}L BN5ЙK) V `)@.}\T 3 A 2:0q_ M?_]:LZZZ'i2jT� xic n)~n2^raڛqoq&W {kL1075j}Αеw\ $tj 0x'=wHdp$܆kPd,0x\\9\{"\=lāڒ͗0½0nii>=\A3k^mNlG&aY k -]mSk/c` 2uD yiҳeM&XiO_}TlH n~s@ۂ f0 DPOE}ym9cdpCΊ2=-B D?,3n<+7S ){qCDl ״�g\1@Y*mE8V5 ys0SGz{�t_�bQE;:ph%M̒lӓzȅmfD�f#sDj<ik|+8cLΌg~Ӳ(D{o$?S#Ƚꫭa.;{.4H:t` :)O}Zh!w_B\DO;40hII'Y'D~Dov!D- mG"]c /‹+~A1c<mnC_>G=wA !_~6z|Α=k0ԩvmaHo\ ָ|ǂ,LvZ1cFaV<&"ȅׅw)tZ۬Y3;pCw˩\G$@A&"ENrD?ox$qBT5qϯ.L(繋ȲjF7!q1}U 6x4iAݐ3[,�Db rr.Pzdu^~w^w.sw r]$OX\x9ٜ7suSM7B `~q,A2xBL# fBK5]8Vwbb bxr  Ffe Ӱ A U-~AgÅm NSVg ֩g3OڎXQx/vwtsrɶ[ D8G3y^m'Y/Ƚ̈:m7^_ڼQy|Ww#uA'_ފʃ`]9iAG!fC6!YC/`xט _/:T &xD1xV坕b7z_:&jB$0xgWfǔ7^\~(/pg<9ػND̉\ᇰtཟ%</.. b^B&Fx| / LO0xca0hvP2Vw\sT3͈sa^22л:ܺ7ַ8כ.CY�}̀_VG<AD@s|C nbs rxϜA t%W6.|Ox3_z>'wRɗ#Η𭯗uS÷B=if Pd@vӮK fg}#ŀTҎ8daM_k}לq3T)~5"SWWUM4V"eDDx^)s5<0 >N؆b<j}g rϙkx| uwNv36-0@ "(Z@&F!�38ޔOu\7<ft}9mQoofp7YmE8^5P=ڴ.3!Ӽ!-uǣYoclLȟFgz h 72K'_]?OC~vpt9Y%RWC;ϥ}}PNDz|&ۮo;Ђti,kvlB,tW[wf#亍^OpĈv]v̞=ۮ#jΝ"xWYq?V4kϷBO>]JK//.9Ҟ+lR4h`㏦xvuiT<,LxS-:#ӋbYlgܞ={VpŊozSC:>8/;Oݱ ‹p=dȠ$�l!>,ʻu u\vIFd܈>6}G}4 E r>cIANGuVmXz=gѢEw^8�iB m<AUW]e=r "yQפz\xQNmp8g¥JkxEĉ B6|8p]Ʒ[nvH7XDŸB r3tlF+x&i {ƻ(  v|\4ڬ(ϕ8A<b_ B\;a}^3|rT%1 O3:)ww㿻?_ nDo5T ܸ~}K 90<aZzᙄP[hT~x\֍NԈN n9AG:iV|ӼJ|ƓB(:8VsQ3tNh}sFwzmוӏ=z]k2%&y(/8C L7Lw80<>xϣ>x4;=0K r# uy՝B:՝dD N&C.Ҁ]xg<Be'>u>=877hw^j驇[I.z .!}\i.Nk}kEQ,'ioa9@ YO&o3 \ :Y{t䢓 ~bs". wxv/^{fC#DYܸu 1[Mt k&:0YΙ-F|=Omqu%Nz <y? !h:/I]^xL&EeOhwN p&ntXdzE'uaL_g55Bo}=@Mp<ʞܖ5gsZWT%g6| ^ ĄTq1 w~-͗VۉA_6V;q66hûg1k1>w^FI{R3`װޥ$F-X,r yG7_˜Z?? rӭa 7F\ :SځoLZ(r CY'!jnVoyH( m(t<mݮՂ\U!eY~'RIYI7fZv-',ƇU" ѽ:cP~; Էu(ն"Dl4h@ %q~A.^B '0S8u;Ietu,AmٱvpYî8ΛyK3LOg7{C9 shAn:4E+8%( !%D00?X%ֿ;G}dױyC<Sv[xυh xx 9<-]T8 Ql6dgY:9|%ap`Z@XކmbZ!Wĉn6zR{a�14X)ӑ<:)}8>L <"ÐG}T=Px. vH2r g8y`} @!%_ݻw > ?t}֬H駟nt#E^Bw:ץ/ MZnmA<cå\NZ M?Xb� ߺ |A  Qn2b\\1kO| ΅w na\e/6bL "Da ~0g<LWnv/T=E`K Ub^-~-L$W8ZXx ; zplpw:E XZIQ rvW6 F`mlFQ1c rIh%."L\݋༽GSWmBi{${A-϶ :O ۴HFqLl[]`$q, 0 6ˆX=sD]{D9?;۪na\4s<ٮ;q^^O0 xm|o(Lwo>AИ9ƳRK{+r<Wo<d ;=tAܴ͈Dlk7EzA+0xoә?D0:#‚WmgF8$Gxe#͉ ޒxs,r2>XogZ9d> bq 7o1{ W K䛞iVqg_ǜ R)29`W7[TWS4U~_8/LOunO~AYñ< ?p ´Nǟ=|. wo9I tXMaNϸl\Lo 0}E`HlK *qda] @뼧BS;G9/Z?? ruJ( XWOABR�ϳL;L ruLwXϋ¼^'Q7'e o7ij8+YoM r=*h#*7h ʋ_nĪ0=Rtڊ WW'.7f Ga)kA.D^{bk q An:e}Tu,](h?#:ԕ3)sk$z vhp].3^D%ueTi^\(UEv1x2aBa~֡Cbͱcz˖-BHiao-UFq,VBz ?7&kwފaDsy{Äa!b ^zyMfc8M{_DSOSND AڿKK{+ւ.]xln ڵ9� ~E<~|q+}m&_|T>vp"t},:wW_}qz-'t]oa؀)0|#k׮H~-eKDnڼ%oך5kl_| 穝\M$P hQnb\\9ypLɊiU^` S#6&&#qpNG+ w5;Lʖvâ~ѡ Nc =3Us 3U3:^@KaZPeW+s r!ó:QuB i3]c RYd<(`lGkZ3:<:׿ӛ, jT }]X䦓xћύet\63W ,i`D׍Hy'sׯ=0hьۯ;I /$"3i.Q}o_gZ o&g‚gÜi^<9uMibŚ.<# A*M0xG=kA.c9&"ˏ&x 2'/ZK4s-;i@:`2oc4ԃF�وA!;=15W~ZC`U [5<zZF- t-\L0ӣln\ rN<ϖ-93$e;)[_Oo6C0wm</;1΂V{Ã閯0{ `90AlC z<PI& [x.<s͉Rmry%N]d?%b_ K]x)"y?:eG}AtҮ<úL;vշNPdz4$L[)0(gDU?? rx$['%{i|oPVzJ23״2v\ql;v8?(IG r l5<óD4xVeݵ Z:VLN\iOz_VW@UE~h0086�njA.fLAaL~f [fI'_K6lu .ȵ=* u FiX)^]M{z?}0,!7zZع=fA%KSB0u^[E۴i#CfNdԩS'$9ɓe=  ^U1\G\_v;Qo0D r Be}N,C,/ȅ h6G\neBi؝O{1w}ݥxaris۶me \'(\~_~}v{Ĉt| b[mLuTTI\ r@^ à FѶ}vf}^l=z[vbÏ?( ^݀D;q H' tb?V!#( ʅ XuƢ}6x=LU.gZmNŮr"fZMr{B ӣ�f&ȅ2:¬X"2SnN  r!PY)ʭEj&q3:Tޯ9y&sp,:Lq:.37-+cScT`ԍt(qFtҥc Jt:$:x8w\E&}YTwzMurT^9 A C,3~:b=M/ tnhmLTwG-˱o~vC5 i!ׂ\=2Χ 1CKmYZ Bi3s׵7|f)&a05ONYL<CM@{~U(i�)˷ bI h3AopF'҂Q'b;u-Z1-<@Sf!rў 7o1R A.ʰ(CUk\^P]lB0aQ,6:uS{[/XOhZ*]$r;jhV݈2.s`�+'xaZO;͗b r_'y8DQ=F_㇃O%H'ZP3BdyሞE &ەS'J::~V"tL??rөivd{i4 a`zӛr;7a1j!_T:t ȡtYւ܋O#Ȑ%Wij.֛;kA fQ3�)ŲTڊ г ׃kAnX՝I cF X 72K:MTuD@@u,ht3ָ8t8^]M;ml..;|<ovF'Mr'͂\ܝ={ ė{kCh<>C8o^D ~7x~zo5kzq/?%q=}@QҥG5@/A.NUF y]N;|EYfB;g+Bbkމr [- d|1xG$@@~b:NuYv Sʸq;{h/rC FS`PGolذA-zK0䣏"=0'䦛6/ ,່k[n-lٲŲw]THH] c SwU=4']fJKԔFAxt ֮ZAse(bnb`QBr@;>ޯӅhɏv*uMBx֯K}9҈tҥF7SG~9dL_p :Nݰx k?I^3Z \݉=i){g)Y"zT9Ƈj: <Arn8;�uLiw$C<n:Z ׉ZjrG")愿k\9OBÇpZ"†lg GsCQBxrXz 7nYԒN`{\̠ .`>'7*ן~]I ra;g+xaZvgtAA\DoxFpۀx̮@nDuUطX?P^.%^r-y喓ں哈#1Z&%!st1xLsR,An@x20o=gxrw{rfЉw]دD»0c>$CzG#\{c%쀆twTDQBWPoy;q~åI]vN}P-\ An;^&Js8P79fR3k /0yAN[Q"m -)AKfYýLj_$MA [F*ܟ�ˬ-˵ׄ rjl-c¶zZ~nϟ]o=co.~][W>)Q"O 1NFMXxm1cHխ7Yxj?N|0* NrvxGıtcǎ6xuS  Ȃ/ȅ( Sy qQ2!".L!ىgΜijAnw` rcQ>( !RgoQO>trUW ZY w_~zƍczEm۶ɕW^z5jdV$"M7m^bXK/x3x؇G|a�iKXh[o.]ϣ 50ٰD;gp\F<<nk$-S502U<%N.2-= ƿ_-^^cɳ] Ɉ r7m!?8]!$ {Kձ^)AhȴB_l^/+Ӹݯ\ñC-3ti![KK0ӁER(yGqD;C\³?N0NZtQҽU͝%}5TFXF>7ޏtyASʴn_ j"6= r) B/W<2D:{w W ~ sbx�GiaÃ˵ C-wL /([yBpx3"Ҳ[MXDL}O yZo#"R i ոB ruGY|"wI.\!Ie|."Lp0xškx.,\k@HHM"?<x+ 3m'jڛUط8W*oL)Ra[Z7<.!{RţNH?VwkA`:bLKtfpO^g`?Ǧ/jxT8oa ]FNy7n.gwL-04b/=g+FCdD`H}b#$3?nWԿdDZ%7?7~~rSion 7XfgZWij~b7^Ϥ 7l7]ЩI(-MG.tug5MڠAt,: l[uX<~YI m/h_3M{&SfM 76[|Oy6f|83= rӭźn]=«?nD-ZDHs\ލwvnݺl"viYO~¾}ڠ袋믿lVZyQAq) ">餓ӦtARZ5+ut8cSvm8qC_x_6m*UVxJ -,ӧ[1�kbiOF C ? rqC >|`@_Z\9㎋wbc~>*YdٲeOFv/YĞs…6,Sloxr~޼yrwC�2e0G~Nt<,ZJ>9AܵkW{_~uʩjܻu2 @!'@Ann{7bx]z޿zNumF^uoy.$E 71S`tw~燴 3㇕2iXSCl  0-Xom+'L<TLa<e‚7LXjb rIn\s3 A#ܝ''tcЁkTN/}癢[att,}mL:2N{SstG͋7$?s7<x'jhG556%Ga y)󗮵Щ0;'tn"d)KN7 wպ-c'vs~Ü_-.;;+c>߹^0x|WN#.+;! q}k; `gHe.FRrY6擥^%upD\ZE3os64XĜE{ӂtň[< r]Z/ps"vٳ4Wl<[ß{8þ閯 ӱw){=oCwNet%l]v? atV#?aKqyMs&]c2 2[ 9yof�ZnjW)V9%;ttPO;Aj_>=3\)GD�sRa\"Չb rW,2 u̦Ӄ{EOFeZWijPl\V� dL*e Aom~4Sܛi, ;ȸiN\=CJ W;2z|]Ͷe]׈y H'!if+N; #*v& AJzu.}p7 ru9!zZEp%vA.nexŅXȉ5#.kٴo.C(s 7<h[F Æ 'mǏovg.{.<y|MG8;t +WF?K{|anڶmkz~@Sp&ىm"azu`#1Ho\}[BZdI']VreTRT7nzXbԾ^ٕigŋ[p@M# 0䆑IbțHeXӢ(UN��@�IDATva sֺ#1iQ~y< Wo3rS{WvY{L S!6>ݵxgv9L;L3[|D;hqxxs3A.^õG7ލb1^No~-AhGXrEna+0sAKwM4N=S "ʟuNmipm״\s3A\ ‡ N�$>�G>Gp+L_`<NW BX^7 ䷜$P /8 :ۗMrjF: 8x}gy܃/n&MjFXM9XͳeD u,C| 9҈<ioe- C~|F#2= BmKA;։ Wwߨzgȳ1 J(ӡl �l]U r#B-( rQv#stJ (d†^\4p`xn=D@9LcO|g Ŋu}t9n -V*;b OO GO_s;Kc.|ן G߉ ͗b r{�1..A<'7vo5j!>>kD*rwЅG1e ;ޝߓfDZN-saNxbL<;(ܿ+ ẽ{qƝon#`c]y rӭGZǹQNw۠t}5ͬ^\,Con)~;eioAxV9Maw1L ruOn7mh[gHH [ZKvH;dv9At,Bуڲc]UOp<L_}9ѳ&.wP]$Efƒ#3$Nn=M_? rE *'@Xe[;#{챳 hbp^}]+;vH^rkE_b`AYg%[1n:tiFFK/,]A.ʓ&E(;vf-ռ>lqϠ>.]X~؞ A.:{Wf͚n5W o/+~}„ 6}O>Y 7WH ',-yU$@$PPy b@gz?bA14ll#sIS)ѓ6tV0iY&=!HSt_f+ܢjdxŔqqs&*sN50֦}xEscEF:G@=ENM;ovylBM;A_}kr}kB\A yE8 rAAdw{a;k&uz!le<w3 , u.Zoފu,Fp3s~^-7>3Ůbk͔.saq}zδ721h"y8L?{YgRy}Gp>NA.<%cKy5'{5"t ?tRdqw?xvGzmM"m%~QD,pٺ 瘠Xbv".-yfD=O|-tɲktTԕxn} S[W2u~; 7o1҃os86['ޛGR%ޯ.;af!@y\@tƤag|ʄH^wW<uD=:tŌK`9pHD;e))8KHMNyek 䦓tOf-ߘmӌ<^ͭn!31A{z!S-@ A29[j\D ?J*S0K! e Bؙ{>ꠕy�l'MNr@PvZ%L~ Qɛ"եޔ7ψ5\]`'V*еmԭnzZ*mER VmHmh~ҝwܖ6 r32K,\udf1 [I^;%K:Z#GLJ8e,qΉ9A.өxZ!ĐzL>S7mK֌3^}VЉ0uߴGZx;72(O>ҳgOpy'=\AED7<CvB;J}!"6m=熠V΃ ug]LU֭+/m=/_:u"y !N Q3<czE٩!"iA)1]ߞyy'͘FӒ;1 vϑ֧z?p.ӧO+҆qI*U:.� PU  PEojyE(t¡3k5e߽KYGw<wQN;H?IsSK[UW<qDZ&E\ LGKR%씤<i ;2n\va t' WzLBn`{] Ls!ڶT8ѣn4yXPb=TĦӅc"?aG6x5AS>?Qa:q{nZk8RU-N1k;ƻ?&Oe&7}͗~ruZ]xm[3inU)jJ [4hojsݴzu <8x HھeMFyi70ߝ\Gk}F^O4TbԦ;0!M-35^xʙjxtX!vnxMd6" =ް"hcNDݶG£<b,'5jeYNz΁_}tsbu 0y^6 rg]Zmp1 |! ֝ȇ4} 4+nMގ!,Z`opL?e}K(!l"b'[{!@<Q ݤ+7p`S.!l6ρA"\̌<NO87榾[۱/ >Eyc-»k%ġ-մ4\ifp6�X^T)O~Ycp4yLw^ަXޔEfW, ΍pAFͪu[m]ʉq< rӭaw,q Rjt(]p}h?;g:y,-oB';:MJ"o7%tm @zĦlZk_i`6\.r/f*3VLw o҆__t<m[ݑƱu3,5u:\΃]mt$2KKW6j(2gs1H&f8A ޟ ;i3i]G= LN~x'48ֻshAn:4E+82% Lů^xaB H˖-`։QH>*/be-kzž:J ,=_)So$vXѣ|}d�3A:v\_FVti0`ԫWO6l K.]DI r~K4>0Z|rܹ= |nݺ-˖-1cX,/xw}s0BeMym[l w8 Wjժ%ׯe-V(u$K$'@AIH!@An2bM#nwA;mmw r@Zt2~AgظlVb.︸]MF³(F8b.l'~ycph(|x![c)Vto}6nN=k W޹}B_j5V=޷eީeKtj8_`:k1͛642�cMI=8p1WTlYOC.s�kc1bx³?^@!ϴA%:' �,ȜWo :6G:Un5SA9^cYKӡror"=oւUGɸ,fh'd¥;Oaxᝈ/qX*ފx, ;~uF_c prМ%= *#K#9sw_xE@ Gͽy꽉t"|Cw5>׏NDУ;u~מ8\>rw|qn>٫G$KHox9#k%M5x<=߳[*R-0S[{_YcłNN}XDZLF5aԉedo=̌lv8 o߳N:yɜ0 ;: JYI7rjpYvfFÀxX?pN[Ѯ\Ij%|]-ۖ}Kxa<ܣ<~X qwjZ0@3DX`&ռAX[xR4p9Ȕ`6J3䆝˿kPq`޽QF7_ ;}oQv'�Q\ܻwoիW(֭[gӾr\o˗//N0ۤIV+nY o8Xo6p'(D_?҃ aA#C.͟?ߦ_"`[q)Y\H|\ŋ|J$@$@( ĒFfm]S<,j f M 7X9a“ԳfiX t~/k;xGS<x?"2`3][X) T;G41M "LbEGTEp׿ة!۝4skAn<AC.tӰƻoOUj;/1b ƛ[e!TT<c; >nlҦP"'/uM�ƽO68B^/FgL8/vHI)H Q$Q"IȚ}$*[EOB$ў$DҾ~9wsy=˜93sΜ93yZ>Ai^l߼<=]05bGhú48wa:.j os?umUKvX,c:^P^+Ixe=`;  ǪuZ-ȽEMGp%γ^.<zߝp ocC=+tG##3ZgҦkn#:>.P^}QBo+g_77\x ?_$g^{>Q<B:͛ȯ?wBPxz##b?:1{rAr*p=V`:;7zǽ5N=0(T69^wd7bގ1mQ͒ ь:'?p zs.͛}rgLUnj?M֯v;$~Hf,ސ.XaÚeo$; bڎOOD]tiev",%ӲԂ<G"u{LJgyQp\T&N{ )3v_IyM<I{귷< ׄ6퉺]愥j֛unǛ{,弹B[cLjz(ܨ3^sS8a0/]MfJwj(Su rq>| φ 0 7fr՞�([k>ZXA^lW\")t$g{&աOFHߑ~ XHhtZXJ~ ;rDs@\}X>ڜ6M]/"E!e\ ]gG=6 "l,ukcoh@T}c�؆⵪OlO3J[""< �ڣַ>vQ|_!лwo9|7*_o%C>}HDOFl p 7gQ@ a. gy5A;h :ujAi&MBErۥUVN>LT 8lL]5dڴiA lGXxlkҠA!Վ<N0AbMjO<,^8H,c+Æ sbf͚ɣ>*¶maw]7][# wqW^yE&Mo_V-֭f;x`yɓٙ5nX!}u: @.$@An. � d" r36D5:J֩0[d(Nv}nN: ܁ h:sb0b1%ƈq*+s2<>Qldti<o}Pr4,kͱ xi[0%<!yWÃ�/tCxcMAlY4:OvnF9#|1{+[Trsn#]ٰr|Щ^u=R6wpf=Zy|Pg{lڱO]R<C F1epuxmYO�lզ?,TxQ' u+ *ULqo�m"p<ټRe:<0A>Q=p^ڽcM6ݡ/8UCǾ+w$~:[^chY\ @FK8+3[ZQ�DYF=\.7*NbE"ROa9DbU|nܾ_y-N_^nR3T7-3we OѤ/ܞ; d列w$(ѹ xY rQY9@bz=E%UES1:Kf~iNplI-Q~*Qu0նex;Hx.oc�5#~+Y֢M(i3gΔqI[oMd..x]jHŊ=hS7lؠOUlYm{e˖IjդL2!^b*UJV*E 5<B]dITIEt}q%:i Z{H$@ 72N E$@$M\o.IOTR3*0$S @ˁ~S!Լ1$@$`WM~+ O5J@.>$L,%f^IHHH 1@0xFYKE9f k dر:[ zʅrZy~ C$@$@ r\  �1@mPvE)Mc%7g9~)HH 75[g S?|u eȯgS=7?/ @*>KHHHH%@An>VoN\"LS޽)AQ#o1s;ו Õ!0~x6-"ѹn޼\r%� � @"@AnL � 8KSƔ4\"Hs$O<|N==+pa*rߕ'L$Lm+Sz%^m@di<=Y/ @�% $@$@$@$@ 7Zb +wIϡ?8Tb wO{ZH|y\H>;k,Yz>|8.�*UH&M7.<HH  7\)H' ruTQ4\"HWˢ^ ~^\)^@NL$@ؼs<,Ye1Ǖ**'O,;H YJ;'   P/+5]ՕJw2M$@$@$@IL$: � $� ӣ(?<LlO~+g)S3:Hق�m|*OjT,)H1n2L @fQYh}A){L\&E+.-Wcf LRNzL; � � � d.oE+Iy䲳+s':, ,KŤ?YymR/nR4 � � @ P@H�Ixљe               (Wy# '@An3r rsbRIHHHHHHHHHHHHHHH (M LFE$@IH$̲? rp � � � � � � � � � � � � � � � f˼� @ 7 9�9b1$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@&&" $$@An^tfٟ�lHHHHHHHHHHHHHHHr3 Tu֕ H<yrsv7  x4h gDGhĜE|3$!@An\hfHHHHHHHHHHHHHHH\-Z$5kJ)u* � @h޽[/_. :u> ƽe. r37F$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@مUdR\9T͛7$  9"k׮M6Iٲejժj r3+#M4 rM� � � � � � � � � � � � � � � @ w^YtN',Ŋ g*IH={ȲetZjժ%))). r3+#M4 rM� � � � � � � � � � � � � � � @!`*THWabC)% �ur Pa,'@An_&HHHHHHHHHHHHHHHe׮]: ˗RJI"E$O<Y.HH {8z߿_m&7nԉ+QԬY3CJAne"@AnH2               ȹܜHH -[VV᧥ 7 @An"(2               0֭[ez rxB� � !� ŋKҥ%%%_ r3/#O rE� � � � � � � � � � � � � � � � � � � $�&2�� � � � � � � � � � � � � � � � � � � $� (2�Ϙg                   �qQLLӑ� � � � � � � � � � � � � � � � � � � DL J;r41 ˛Gֽ$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$-d Ae햽"LD$PLyy93L5 � � � � � � � � � � � � � � � � � � @'ܡz`q5iwL$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@qpAUۥH"Mv/l&T=610$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@ٔ@ rozͦW?$qsEbIHHHHHHHHHHHHHHHHHH d {%؜丙hqRY߭I40, � � � � � � � � � � � � � � � � � � � d:L"g7ǞqscIHHHHHHHHHHHHHHHHHH d t._- "M:pz JHU䔪Ǧ-$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$ d 72`HHHHHHHHHHHHHHHHHHHHH fƌ� � � � � � � � � � � � � � � � � � � �  HHHHHHHHHHHHHHHHHHHHH � � � � � � � � � � � � � � � � � � � � �HHHHHHHHHHHHHHHHHHHHH � � � � � � � � � � � � � � � � � � � � �HHHHHHHHHHHHHHHHHHHHH � � � � � � � � � � � � � � � � � � � � �HHHHHHHHHHHHHHHHHHHHH � � � � � � � � � � � � � � � � � � � � �HHHHHHHHHHHHHHHHHHHHH � � � � � � � � � � � � � � � � � � � � �HHHHHHHHHHHHHHHHHHHHH � � � � � � � � � � � � � � � � � � � � �HHHHHHHHHHHHHHHHHHHHH � � � � � � � � � � � � � � � � � � � � �HHHHHHHHHHHHHHHHHHHHH � � � � � � � � � � � � � � � � � � � � �HHHHHHHHHHHHHH ,X@f͚%WÇuK*UI&R~$@$@$ ݻWn*wѣGsb66yB IťtҒ,q Eu=             lF`2mڴ IUK.;3fQpaT-[VXfZJ6nXgve;d'pTP!4,_\6o, 38#lڴI'iӦ1TfZVr<r̛7OV\);w^HH�˴C�uU 1'$@IKܤ8 � � � � � � � � � � � � @FgܱcӴo^4h=s^x?7NGөS=F*4yw.%Kƻ+C y9S<eƹsJϞ=#ڵz~IQgNg}V>#ɓ'K%25+Y3ovGm2I  @ܿk.KRH"> '2h~ٶmlܸQGR͚5yE$@NLG� � � � � � � � � � � � � $ W_}Uo^Ii3gԢի˭Wԑ rI-*w}Η.RMVAСCeo>1 Ax-T`gZ'2yŊG's@Nd             #лwo9|/nϸDBwGn r| O{բbeO.6mrر<:>1b6lذ,vGi&Y ^{M{ƳAH hҥ:N1nιv%K蠵jՒHc v(v "            -z!!3-ȅ5O<Ʌ y믝Fu:iܴ܋/XȫV*~i.� (;nr9*Lld֬Y#7np1 @6%@An60L � � � � � � � � � � � � @'(D פc{ULex_پ}rXXhc)P/^\y|(A]tyYիO:yyl<zlݺUJ*%y5ů FG#G8&Yrk׮-G6 m6"/`Zpa)Xw۲e(Q}})rGXhw{ō\uɽeHr5 rseHHHHHHHHHHHHH@~yHT r7o,mڴqoHzɓwO=T'={_|!ۡm͚5+Re֭O>DK`Ҷ J /7[{'[o%~r5HՃJ8!)Dㅠ"߳>[K/ )ʴO>w}@ZlYyz`!wu^G}7S<Ll4iL>]}Yxs(vYΟ?_~gX\uUJ,l7 _ԧLO-[믿ƍݹj֬)vIjԨ7 ̜9SU&}+WKo-+V{Wru{_wyңG`̙3IKr3� 4lLr[~q}qu� @N$@AnNjL3 � � � � � � � � � � � � @ (_f\gZ 'xB Oʐ!CfnMQo"DA4j (}2ĩv8[۸qc={<2<6o<h{(!)Bt?c@` am(Ov.L֮]7A܉mC;utx4c!u2a;ڠeچ\;s&} ֯_?h&Dsh;ʃ>wC 13>\~AB@:7 ȅֈo&},_ {7T碑@0�0�{ :k˜@ 7Y4I$@$@$@$@$@$@$@$@$@$@$@$@$%KxE駟ʀtnF-FĊ b{OT@ !ݻeڴiìީ}s-!pᱴQFsS0At/_>j r~$<.H^Om|~BRx_~Q#/۷ *?&guؚ7o^ Ç;pm9bرcUL#G˶ WoPa>== ai۶9T o㏗իWk/P׾8(39S-7f.H?ҥYkժ%;w{L_c,Ì ";^q_r`_ree/s*TH{ꫯ xFD<뜻/sG@d# � � � � � � � � � � � � @H`/?A^QN?AW\!VYc #FېJ/ϙ3"x*ȑ#rkQ/bE bޡC1Djo_|V^=G ~B҉'J޽1Z^ .^_~əg[_xᅎ7mJBl goVjs rpw 7`>}_כ6mŦ%JpC|{ _|Egfs4'pGm6_xP_O< {w۱oFRRRt#5@ N`͛-*?/|F }k8?af#.v rj =^% fI'ȝ&Q=p|RTQ)] [7ݲW> KVR`3~^YΛG>FYɗd嗙o޹_VnحOYp~STD?Q:luO?LDy{.ٲ,WꝐkvν$EvQ<eq,3eʞ*ܴASѤLRBќaO�Ղm+md}RhA]T*"ԭ( <qv};R@g&1f_սfRb9v)Vމ<0&[w"8㤲A)Qfڝ2g&YApOTecaͲQʥxiN/ˍN*'T=6q>Yխ^Z`ў3=:xfu(/*ms_YvfrLBPي)B% mB;B!M8,%S II9$Y̬lK̈L H`6}́-?A-E~\KmۦժU =z[-]vzRNo 0[(<غ R!5^qNxQ I"MkSM{UvhvB Lx"}{ʠAApZbEl r&#&;S͟?_{*Cz F.]n٣3}2INnA.ڌ%ܓjCHewu̘1CnA.ĺe˖ z~Rdɠ0=zj֬=IA'e0-qr- 5s s� @I'Ƚ/#LUZ aQv9(O)l �QB/g}Y/U;sb\O+_ӆ= ,[CߏN>F$:@~}Vd!;Csdҍ:ā:A;,;Z(a��@�IDATxX.զQUuE0GD{ӎjQ%pϧ#Mgws=<1zZ"M} kjia U¬7&,qī^Gرy xn ɟ/+Dzkm+Su U.u}E~fp<wV=務;q r"B ؀?˒UC†UgC=uC:9*Sf ̪?tX^lLY6dD3l̤?]o7ױf[v%cmG~['9 N.{-C%1Ay@mg es~ _|f5ZZ̙ͳ% dI\'smv>|k/Wdd[93r;˸I @i1/%*X r_xyu L�y鄹9X F?.=#^p3o|{W:ww{ Iw)e?nG|-M>]  ?mȐ!/"E=|ҨQ#Zsv;u$˗/Zjɘ1c؂\x"ҤI}wҤIb]ʝw^Z[aArVpD[lgq6[nzF8n rMBYق\X;-xGwe˖ɵ^)M)Gʮ$~d9i.53J�a.-79E404Bl€1t, ~p;1TgW?s d'i8s Ά[(g]:?W_ǸHϓwR4P^h'ܴp9 D R)3“qQA'1 joneKKO ]c5]Ar ?R'VL1g!OSh*E 3#2YCeO|+W7ƕI�/+1.csc9m˷mf.J |tzvijTy ˫7SmMq=]b%=q&[Vv;4Gޜ̄hܿHm;P<! ZrMAA) ‘cWbFY=W )<҂ {nCgqȶRQ,ǣI RF1dFXE OO>Ζ-FB$ڽ{w1S RJ ߸qcaԄXıh" Ds#h4qڿ"0;t…r7Q>zm9UV 5m ,<nݺU{}E|B<kg\-5j 6Lo0`@g$ .]hX 8 _#`k8 lǎmAz< b{RP"nއFAד�pBur\or#Q4hH[iqcwyv"gg YݡvHy罴O8bXF*oG[ Q,WW*Eę=S0h&xWym b\rC �5AS|P'}_囕ʼ1yFpܫi($v']O+) HrOm~9$fN^^7*$o#dX(1 c#avc^YZ+5*t<oW^sRޝ 왵K837\,ϟOePr iϸ&[;&fT0|MVYG}}bpۚI0M;W9x!ꩼkRFovx\a@)6v(s0c["~_Irr5mOX\νYUJNXFGvmus*--|@77魯jp45fP5+z&PBخBF%Ɩb?MH`|?Ak&=(O}KinUW]%p'O,aO=iEuYW/!ĉW|vc-3c[lՓ7x#HlSO= c~tO8!m [ %JϼwC/lŊZЌ}?eGO nfW|AkӡlA7|#^br r}r3 DI(91$@NPSqP/Q t{g3)xY7;\Sn9 !.5/g}3G/߬c4ie8cT''ۄ_[r+W>963fd#z8An,xL;!1xvR 9iF I\Eb ֮8F~X>/)t4yrtl! S5|#߃NQw$[T~K /a+/&9"۳TWdx[-;rev<to}WLݖ @76 z{u}A"{_(*ϧ!5qed+eo&YP7Pudx}v=Cnc/[x o\'s?O*Nqֹ3 rcS3-1( @ QY&*hn^z饲i&CjX %58x , nRlזּpa֭UzuR4iOW_m&hvZm۶ҷo_%$`x1g֭[巂x^(|8'�Z>Yf/j\\jUOuX/A#dȑ:^xAZhaM;|GpfpΙ3G{F:w,{o ro-ȝ={˗\C$ 5Su)W$#@A~H>BU-W\u'{+ O܃cP;?ZlODgx{y\`jԧrX<GW?VHksDqɶ ={3٩駉5L0.:-a\RGh6WoT9*;Q H)?ٕ7b๰:dDۈg^aR )HF)4vS_gm{1)@!IM'd4c-{Ax4iLC-}}nOw}=:7;2OYIP:Vyu Wxi*rN6M.NY@+;$<\m=}ތ{- Vn?~oἧާ |LwS/%8K?A q( ^r<t~\_MCE Ip�pz_\/#@uNˬuҍoi)ŋ~P=< ^y< %ݮŋ Mo7V~qm<)f}+o7_iA>[w,Bd\{6by?yCOLXyeA~5^]a_OU=PB1~I1ɺ#oΒj"X퇡Q{[<vσuh536 o<*T  7vi;FMktj3wచ)PT@"*?|?)QK~X'>%cN2-ZT&L E"ugƍ{oJҞwWZO{<u.7N~i'ȅ_x3ۻlϞ={: YBk~qDz}֬YrwC Ӹqc6l/^ Hm۶I=ީ#ȅG>}訐nDB:8 r׭['ڵ鴙ː`{=sf r\g+]tpp!˥SNp?I 7P37\yuψ!H7 r\4#`)SUˬ%Q5?tP"ZUuw)asUQYqx-{LݩnDPM=͂s+UTNQVOxU W<>TdN[4=GSM { JWM}u𡎧q47Ool"3l~^l̰^}1 "<R VSFH/<^{Ii 筒[>č),PZ.lX5@+ܾlQ<rM,C =í!0/IVS~tH'`q-<\5qbs➏~K1g O*+Qӎ9T"/3|ክA윫5#YVys܏g/_\okV8R+~z"HyMiP%.JT6to޹yN)1@G㹀04uӂ D |uI/gWwpkSxDYIK#ƖHdbewN|xMpEnSxS(P~c'D{^ 7%C92#/҇QvIyPV!nAͲwA*R&LnҚ~QR3}x밢1EYax&?F )=ޡJzhwOEGS?3ʬzIg_ޟ\ =n/̩Aݪ~^}QgtxrUe�?[Iץv\%P̕2y,WP>[ zBy~Gw"qÞD;`m[߃\u[ О8M8\|w`0Ț-{f{frijA Q>ج<nQ b`{bD]ύTLɪu|^f5I‹isud)XKz ;^u݂j0[@]nrչ'zS]ߖ7薳Xl87(o{ߍXnĕrC5u] R%@{ʫ"!)L{H,yѾpp8~5ueIw/DIu+z><S}R߻8Q}`mLjT*) T9jW_G}v�^rf5@ ։uɍmjpFR2ijtv-f A 0d<8rɥM/E71nRr|vP)?7꘸F-MU{$߄zn0k ꎰՠey&Gޘے!$ oU7:ߓMj~pk35;`wELkTFlzq}n]h;JUp< Qnl[Gx号-ɪwˏ7QFUm~p bP@D fb ^JTr!N s߾@{'pUW9 .YD{sEoQJ'Y7u]'K.՛ S@� T|zPOciC-Dsfxg H/!)ҊtD_|. va-]vs1|++Ҁs/DJ`wJ׮]uP[�-lϽ#]x\:ri^dFN+"M4YOBklرRfMkP L\! %@f6:gK� H^ ͌ٞd6_xd ^DoCcF9]J i,f ^</X<EG.YKY 79#x ,A>l;ܫw C>d::kqyۦg"~;f|tYաwBX,CLN؂\g햽6c 0 )*aŔk݇3FJZQU^ȗ:gQsD!A;SW{Uݐ*&AaZ??-@iGk{52 {7?#0qŬ{ (1i,YOy7hxP@0XA`5�۳NiwX "@`#zp~B8tZ;U G1 /ܲb̜�Cn% {*>kWKM HÃוOMOV?_GqA4LYՠi" a>:֗X~֍ 7 q/ۦf4; o?+XRmg u]`Df3u+ćo /= 1ӷ<7q3J\[GTkۿ�H=uO]BtJ"+W3|&=l'v}6UW 3<}o$U\"! (Q?0$t;:n?/ٶ3#;uQ(`P<#}(XG/|@ڃV`y tMحJ$v1J_ma1jQWA7f8@ |S? 6YE-<D''0s/`9zMQgReX2ԃ@ʪ{<^xwn5XLz5EjmSþMc;Nfğv:2X e0̼8lo<5Es{٠p}Ly#ۤ>v{_PC]U{by/:EV{bfwao["ɪ]3cɓi̫ 7K~XLLTr!`'\Lx-X0́ ҬY3N8Az-ǣo]f 3" /P >S̟?_nf'CYg!5Ilhݺjm~RP{Ǽ2|p,JΝSwv: W/GꫠFumG-Z8'٢R?a-Rmժ 897<K`@W~xeĈ[nj<YOD9Ioz_uտ9smfVeR|yNA $(p20$@q 7x_+Ohȇ*Xv{JxNcOF a6x*z'U�iW]JTg:Ѐ ڋ-ˇOCg;=LE376u0Ew4yyLǰ}N%kFC3X3aЈ /ʤU , t߯lK :b/:FWx$5EJ֤#~1ate%6FGhC T /8*} A>6A.2ī+/w'V,)萵sڞpA8[j)){La >sܬ{1)Uk c 5XI8iǗ^u "-7X6+)UV;'l )^+QF eO4w]x$]a6R+'Ķm-|妰vōz1>{ق\:> t{ 1 ƔX7OuStƒWdk0#8_9 b%ʵ˕D]*0q $g0v<fw"ȍG2:hE"< ʁ M#" W'7Ny-Ƴ6S[SՓ1PBiOQ~Dy53oR=7ɉ�ju ܟ{֪ΜOEzdVr!4uJ:xB![7<1x~L]B_xD =o=:bϲGy^4f_DL[lAqS-]"o*gz 8~fxlqN<_P&8MݷcUHndŀ&xȆ7M<pYUy}b";|v# 8].a+s,ҁ:*fs<?Fh{5\]nAyuMG}OpP݊4)Ԭ'o4=8m.6"GaP}c8ߴ}6^0=xGT l;ϼ71 ʄP1)T ȟ`d- "c/18j]mH$"vi7pH!UYf@~>2q!oZAPa zwnhVGx*06AԌh#IC߮k~X $J0kZ𾊾Kca1cFb\<8Ԅb큶VZ'=ˮ[Nm!!n AmWB ":?jH?<VPA{e䤓N-[Ta,-5q<rWU-駟yi!5Fx?xA~fΜ)}8w4?8q@fUymlk{qxr Ɛ_xíRP<m4[lO'h8w wܡ]v ; Sk2�8;9;\H F@SL5 % Sr]}6$%qd0NϞhj7N6h4{#D_pڇ f"h;%;h~ѫ ;T7ښsoQkIDgP%,DNЙ*:;?9uGs 5Fg4\FJCȄI ,g oBڽ<^½ھo@�!=ϖ"0+T;UOMh;qL[Dv3 vknw":>SbJŻhq q<|cjCN* cB_0H815Qζ/'ѩ9Wn;йVBu2LwjOw]X$۳_/~<1z[x|}xOip!s rnQCnhU+wԃw! 8м.Azt˔L+qϼzPNXOfE<xPAf_쇫z\]c<~luFۍʄ;ɦ<)! *~&/ Lky{>y|Y3u+ώr!V2C|ERU7%-awe\{ygfؤA^ubsGZ9Oy<*Cg5%oқm1[{PP^f+!Kt ƒ$<~F}`,\m%/nTyq{a5vyN#y )w^<#mPNxOes@rf< -/=3]Fx`_ԣ!ȷ l`vaIe`=2\}7ϧKzԿʋg!S^ꪾ6jj [cfomd rz_TcD=jЋ7ŗ9߯Dl{yKSUFQqMgԷj-X<Ͽ fn#:^mYU yk/v֯ '?,m\&�D fx&*~[w.{;w}۱'ݸqtq8{V̠`{W^y|ΦO?]{?=.D b_xuEX?!)-\P~GЉm^fǎvܶ~9眴Ymv&x}E ٞ/!-8"}?a {|QkH2�8;9;\H F@n?m/vÝC~>CumؾO*X0wK/>žp2_;<NT,boi9T_g1 OGf祵5{3kochv{C2籧Vhw4o &LBNTvAK /$>0s[vGZ n!_Ǹv(8x(ҮO`[j %}WE(W gCD 3-6vM,{ vx '":'phv'd$L|t UkdS<{KOӅx$9YyFGPɈ_/0Dn{Btl|-E ;P~]oy{'VeMVY מR֫ @vO%x L!N{ <G_$QJ%ȍU?K;(qoϗ9vz^m,vq,ݳPAD*OǾOa{3 K S xz]7`ݛC �y: q�!~1C Ryej g t"}٢ wa/mn+e)moى{�tvn'P/M�~M8jԁf~u; <b+0e΋}mgu8xQd;Y;xm7([3xyozjFq܎R)oa{vc (hO1e Q=[X-\@Zԫd  ^r{'o#  ;]TKSalQl;AmZ|Kjfe٠7w-ȍ]ngL4y^r>vD;qmKSOD[bVy>쇹sWǓ;=,z-0ۯ_?)TPB<xP#wO-*5k֔5j ' kN>O0;fCexÅ[xε ܷz+vxy۰aC1bҽ{wA…W^Us. %$E;wʠAdԩ{-"Mx:' �C@,l{ƿZM2%HPl<x#lRD qzm۶ҷo_gYXz 2D-x6p,x۲#޸omovݫI&ycݺuOV7F"ݾ}jJҥKo~/׫=zg~/_=c^|o$(L,qK(ȍ -a&x8Z0Em7czifG#ȝDM@}Loo2`Sb{$i{{F'WB!q<:.q;1u+4)I/ܹuuv#if-TvGi<t S^T@Lj/bnuN'6=u}l4<0ܝ-hΔr7/?hژeO'P ;S A %QMt괍v>9ϞjK<(6C}ia�FTQUF2xUÔLc$x$Ք :iز뀚xDUSF۱;zc o` 5!zy+?3c$\x5C-ط ,ruiϋƕu8ZA.Nϳ~w]Ht=.RO].&.m9+Jo??&)˱'tTvE[+, -vD%S"Ev܌IPw9$A=W*B �޲+ 4_I;@od| _*̈́kǟv/O[-.SymkyvE$r}E3 H4 0ËVwzoSztC^$6L̯es?Û~u;<s`p]OSa9xGᄅ~b.n <l/@�r\X]{}+5[ǷW^K!ք]4pK7e{|JY1l/ni r/H6k]=o#[eՆe>zj`M>V6fz|õM4X|`¡}U1vi[k?GZ18 fny,xՆwm/y1{іUiGoĐ]ޫ*-XeF$DW_ՂKӦMŻ2sL7nT^]nx!&޴iرC 9)_@PgB< /  >\ (^0xÆ Z$}'y=Eyf-LII+z^3Ƿ5,^q޼汦=+9B@{yVZ{,<8 Pr4sNRL'  rXm ^#._S{b]iPB3MTr?9qs8exǴNš$x xq%ҝ.乏~) m4�k€Aew c/|@Z&LS==t [{ 1EHS~XNY=$x/qClH_q~L  מ 5-t&~k7& :XP?*+r4a%ȵEDn9=ق.Q\fN_SN(>Cx/qGeNĹkS"#q\خ:~U޾UZrc a孩&ڢpWZ$lAW @4>_#d1LjH=kbv!ayGY"AYsZG'@g'9ήSA{s5N50e9b-PKgU7T0wp+wc:?]];TZr>[OM*A.80m&[tntRtޕ.�>xlvyߕҏ<Tˏ,3F$Ά2}@Br9mekgC}xOLYw^,pB?12;î{EZo S 63|fX e ;HzJ�jᛳ٩yW/"уPG oF#5IށfL﷑-ȽY7uPN^1o}TPȰݯ f=ȻÙu#޵.p< ׈lܿvTkq2ĺwV"*h8>亻e2I@d2vX )bk1."ԩԯ_IHH *+䧟~kʚ5k` s=W*WСCړ8vVREy Yu �{eSAG?wWnh>[(_+&*i8Th섡!z:31c30'V aA H#Ȏ)3ӽEǩJFsHFO|x=J{uÓ8&'4)Ak~ѱvmUK{ uˬ nUw'νt%ȵ=<{SS-0iub@!Sf(=tԺ;54NȌ&L Wr@6kz{# �sލv9EFT^\icQ r8-S es7!Ya3{=(v Sl^f~XAY3ykEBDd$ilr<H{. 0Fwu[J&Sxy\3N_ HX@U:h6Y+xV@'~v Q6J�U :CY8lݘϫ6^L"mAh5|A[%ȵ& ;r͖=ΔvZ#9ބ Uv0Kx24RgdWþPc<"}[> ',s:N;] {]4"A5Uev·Դ19Crxsz&QFog%2ǺvRZ[tڦQUuE`PX~uo6s>A8Ng{Qo=[d k:jij6vi8l{~fRʱknxіOOڷ<}٠l-xİ,]1 ?^M!7o.\rIHIHH lʕ+eСaߗ]vSʔ) ۴iuEz+2:{[IH vaNS;ԞjS>xBlT*Q"y }P;ԙ8VSZi~-Lj4^y1tvf#Py~ήyjH ^`yxn47^<k:y햽On3 kT,JJ WMj%rQ-~}F&}}6C( Xk"Hoْ~D rGA�(`OD#\lOVWSvԺNtvBH<&LB4nۼ'2<=9& `Z 9K7jhc,ZAA,\e{ 'ȵ;QuUSFbHa=#1,C]ri㟾DOCigNxW VYU?;Ȯ $zPv$T8>wؔx N2[@xMo絽-F Y+ydCy7V "w3̞V=/nx3rRLM_Uyb*rk[*JN My]8IV>ܗ+7m)մɑӻ �0[;N5R}k]ra*zKO u n;\.OJP/o(WþPc<"y E~/}n z.Up ߈΀Û/RiBa` ȿe%ݺn*+N 6(`-l0G&cPTɔ)M<E&2af!Ϥ8䆚=#sck{!55KYߣP3!a~і. eFm rm䗆̕7ݣ?OGe?;+mY==Ó4G[>?bI )w֬Yzj9|p\Hϯ=5i҄q"ɃIHr j_^v*۶-ZTVmڴ)[ڵeȑA) BJf^ŀ$@$ rTա\Le}�z=˔kuh<Bǯ=CO#I?zl]sn>KV/mV# iٕveJuۥcDb eL!;<U܌ WREmmOUZ o<E w}Ua/E wИ~mX4j O~f{,��@�IDAT{OG߹i{/AnFIP*,i sux<#0+to{hj7z{9qӠ)N0lXN OLGw+'~ylޣ3B^!׮Kp 쇪%pyߵ\D'H]Ty1> v?o,x[@'6sC>^@xA4«xK Mjod" l۬>ğ1Jb꜡U}Gae~m/p)+W؟eu:60v=VB% Pق܇i -:n>aߑ7NJt9MtOnGϭ-=xLUv['jP10#a'/v…z?w$,>B^mnoH]A ^w]>rl7Z�aw^7P4ghjP9h9ܳWz=0yYٮ`f-ŀPUk<>kXlAn{nt?=f{ݴ;MpWӯD XcO.{"0x߳Kۂwr>MM}L+.C}gy rіUiu5O6Y@ avՠO2<t/,v: � � � @2SٱcGY"n /uճ {qɐ!C_uUC9:(ZUH"$@AnP,?9<︬`Q-6sѣGOӨPl)h2kOz<wz}ܠ= 1aוǢ*z,2DŽ#uvٍ}^xbB;x\KvD";IHRTR*iZH)SD *JQ!,}g999~}}2g{3gs O|yRoM|.WF?,dov<y9II^ԸDfzMlO ^?9G[hk1"~˵zK,/,X͞Пt{$ -ܴ;1 2~(Lܫ`h@ZAv_?qG4Y7ɤy%\PT%14~k3G>NmL=YGy7cCJkkmcEk? J!P{" 0?MB8J@uT0xws=] b;#*4ܙQ^v=0rsX<Ҳgk#BڧvUShD}u̽<ZAn6\&Hęmq,LlP `$]a U~=ތ zQQ\G_H�nzm-(/UuXww)O^uƬ1{kc ry;|,Y={C~6<}̳}]*нxfs &3\GHC`^m; t=HC  MhaS} +ټ}XvԇLAөY._;^lyLx]0 ֎?r{7q{-v?K׾nd9c!s )kh{6VZ~> l}-ȵHmApgǽ<AmI_bFlmo/ t#\;i${QE8zn    jn۶M:Eʔ)SP!NZϟ/{vrxbɕ+EBA%*$@$ rBھ GNqj,Q/16L g{F^oVsNڝ@T8tZC(I,^]i=0<q:?g<ۄ;>a[.'uj*>[Q2Sg fOnojHNa8nC#޵Q`}w-t&T˞-fĺglA.۝(|'~mTOaS*\%U5xW]]Zt`je_"t�We-sm8|\lf[ S<W{=Ǣ$xF^.XTumxnö>9m>PwO5==69rkw UM)CGN_xB; F9d-}~(#ȍ>82h`x{ۯ@:<_6 NS$V@w)ooOa_0낹O~6Hynnڂ>\"-jh9or׻!>,Y$E>%P~)Oz׫ɇ>m'po}w Y7w�g"aA}xu{u  ݴM^W;[ލ0jx3 f~^~FռvzMC_"b?/nCb.6C/[S h|�wmGw+s{Qq9Q#\-_]v3Ӈꯁ>N,WnA.C5bQh̏9J4Fvj>`׍Xps-O</ahf=s_w}/_" 6G؃مp)?A.a#"KȴO/Ȇ! :?�rf6WGbHHHHb@ _}OnL=#4iT?%=yݻWXbJ3`Ç@ֱ&}I%o޼f{q?eU?H kA.4oK¦CU�O)%]_ԝfAT/-'W\x& <l֬\mRU-WDvDvGх$IM}ՠ/4a0}5Y@#1@;F%ۄ (5ؕq_ `z)3~d_DZ3lot 4:}R6Կ]{Z%t{N]C\(Hw"ck`ki!Zb`a]>^ٸzp@ZDA @toXy[#07-'SR1)ȅ(ҌEK+IbN&E0'5S [f=xUW#'K"\]#,~@]WfzWFGk5<1 1xoLˢs,ZA)(?ӽ8E`rήht|\Q_}K7~0[|7JzuӡWU+ƿD@aDmV<і\oF}3(q>P팺~!1m5Dp0'A$g rm,AWfo~VB~Jaەu2gw7P>[}סi7kXmT _ێTmJ#S6޽g=Pan1<͓S.W|3b4z73~<:nmRcuwo>e�5)xD>q}cY9s]hgZ4f;񍫕7+۾ǚ 6ⵧL:-mUJjJ6Ngɞ;ؽqƣSoVA> [Gγz z!=>l?%w[Q簗  m;˶UcjR `c?۔Hb-`vT'I?¶x5]_5T.g+cC{_8^d`>s rq<9_S16;* viq{ǾFCMam6}Mc8nA.ճe| e6}io3IQ}KȴャGҁ>W|>X{ڬE.o=<Ҳ^r � � � @$KСCu7o,{>ɓ'}ze nzK̙#atG}T9w!s+Vo8UVҩS'袋&;zhYhTPA  6mYfmk׮KuX|8L2ҠAiܸ4kLoKUH ĵ 7TKPk A<{?ىA?3m|Tx0tAsw~S0~Gߩ6 NcxyYu!XL10Z û- Ԉ6tBmspÿD 1f7k׫a rq"';>wAmDy` <c-|q o<:f`re0Tn&!sߞʋ]\F\$^%@ #'1/lls{ o =z=ls] qfIf>* U% ܻZ) ك^ vOGs+S􎛚΢5K#Qd¶c=f^ߨ.h`3+gPzFtNChãz 7I~Am^ްNKM�zQufˍ-rݳg@o)0[ !&ާGM ܞ((<BD?hR=kn qeF]&M7YD~Z!Ͷ@^clAϟg̴hv+=>@ 1mܻ`Aqf{p6T(cmF<5n1]&T;ׂ1l3fmqPt %xut\;(vxY]p2ĶP3jχ#f08J06c-`XuzM* vݘt_~u LyJf a*78vI#lҶ 7س}N ݳDzG+EKv5H?gh t4?%   %jBڵkW'鯽\vL� I&lٲTZs8{Sʋ/hyB[NgO<!sΕ9[N#7ovu/w}rw7zzse� =<:!++q]RRmc{L'٢]>X{3S!m-Rջj9j:)qifxu[Ze'`LfƒCM%&D(oo;Co.p:i&,^]Sn&NB7D8{ۦK]<Йh?ޣii `OLim T@ u6 pMfpk`k48]ΨHunq:+Aӓcb-Xk ^W0hb5(wPoNq=DvڱSݫ>(mf:RXǟލ1e.<Ȓޓ0w>A]E=U![ *j_)o{QqLs  BbM/^1@À&fj;e]L[o.1ϓU4CZl}]._s nx?"=fQ�S/pob3|pC2da6qEzk#}W;Τ;<Z h6(!Ih?vl-ѳZSW`kWh!ymrYfӰ 8nU:afᘪ<{wDxx0shkۢbxr?X^͠b-M<+6j*pψդVJdp?QExg m5U=GZnKY !2~i +Sck\]]**n >.z3Pk ^ca- Iy{^#[ޞGgN $rgXpg Nm|{~+k3LE=>5QYigD.lb eC3ӘeKȽTKU m75Eh^kPO*E^]7&(|(`E !%<99AgrV�qH e8G6Uo{C= ן%",Ҏ/?|k-{xA۔L$@$@$@$ %<v\q>Vj[n&%!&%JnA{]|L62d# 5k֔ʕ+eʔ)akEܹsˎ;}UVAIBw٨Q#iڴ$&&ʕ+=rw4MrNL0r &wܴ(mt,aLLJܣP8K)SjG'|QMk~1=Mwbў#+VLoȘ^OiiCv$<+/ÛAy!d9')]l -Gʛe٤D&U Ez/&<6DrO:p߯F_xV_~g3B+\G`P60RVݣzFhs-1Hy<TDb#.G `bנQ0H7O.aX9-}>b{Gqma'&@azg)Ykl0<?ZJn:yv05xL:;;#K8ChGE8`q~ }|znB=߬>ۣût%=: I ǟ:òOW.pꡝ.g^֏Q,Gi@q=f1<I!^rv:9/tmB D(%Sf4 'ndnώN‚~27s_Kۂ\)qꝶz_»g8N^aqό/ęQi}m O1Z$?GKǓ� � � � )Ԅnݺ9bUBT[~}-έW^e Amg>ߺuŚc/^,rҫz;fUWζyi߾޽[aoUc)KFk0gƍ;ayԩ  ͛v1\Ira � 8(uPpHHH2x,wҼsɓ;XK; ag1$@ 0@y6Ч>&&H F骑H?xnL L)y/GmO9*?AnZ� � � � � jn۶M&N('ON:r=Hݺu}¹ӧOeJmb<"_~Ev=z%KRfZ\`ϟ_v rx�ytXx9r^vϵ0^7,F$@Y�YԘf   lMԭͅJmw#LѼrnv5 \&foy{5 *<HbO݇Ρ舽Y# � @8 o~ _1Ue6Y&$*,8    V2J O˗/Waڵ~vA\r pzߖQF鵏>H*Wɓzְ<y|g>x}'wy K޽W_߬9rD4iW!޴*'OY3$@$@$@YI9KӢoT|.X0[I\9\ ~_ wٺN\&sH z*О Mlk'omVK$@$IdAg6ɢ5ˁ>X Σ-ΒdfBbIHHHH ,BCʕ+ v̙uc=tEڂk&;vXy7&[k@fYblܸQ֭[W%ȝ0aTVDǍ'-!!Yv/(QB17-sZ� d_f߲eHHH0_7g',SJ<t} )],ѽ$@ـdk |oH z^L''{4(g#HH2"}_y}W\Ϟ 1Y,YlL4 � � � � d Q{n0`,\P3E sҫW/'N ijF7gϖ$C,ӦMҥKC UXQe�  rșa   Bda߲lNپ<,W25aRBY4N]/VރǤdiv9Rj#$@A :uJf.C;!wz痐ys=HHҟWUK-Z]>]Q 0{^ƕ|19czٟsa)Z0\Y|&g'    VC of,UV#Feo>iѢ`:T>C'ަMJݺu\rL22h ^ wŒ+o_1c䭷]}:z% 7 DlvG9&H ?n%                Kٺuk[-r cǎn:^mW.rq~ G+}ꩧ/>2w\ݟWۯZ|I_/9S� dsffHHHHHHHHHHHHHHHHH +H/f߾}eΜ9UzW&M8h.\(yJ8z!gO>Nfɓ:m[n՛_^nV}Bw׮]-[Mٖ^My, � "@An :G$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$K9}ty>GpP ž+G͍5#Gh<Λ7Oqύ7( mرo:;ILL<"P=dɒ%:G}T/gm^圖y`$@M.HHHHHHHHHHHHHHHH25jBdۯ_?ՓKٲeH"o>Yf|g믿: _^FJvxx''NȖ-[dԩ/ 2D֭+g}"]ztʼn/\J,)ܹs9s*T V Ui~K$@� � � � � � � � � � � � � � � � � dZ)<|Gl ۓn4SNc=xwnd5k&{r=$AӦM;{-?^W;ӳcpFF$@ P˪@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$i P~AF=Q,<{nŊ}ٳGZjuYz߬;VY'Hr7ސ>H4iϟ_Z9tݣG֭[Ȃ\n:6l,Y>^nӦRJՆ.%_o3$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$ dPs˶md$%J DiinݺU=* 2eHΜ9S&''˪UhѢ9BX8y>_%ŋҥKKB82A2cF$(ȍגgIHHHHHHHHHHHHHHHH P3 R rDFA$(P<9 � � � � � � � � � � � � � � � � @ j}OY2'$(ȍגgIHHHHHHHHHHHHHHHH P3 R rDFA$(P<9 � � � � � � � � � � � � � � � � @ j}OY2'$(ȍגgIHHHHHHHHHHHHHHHH P3 R rDFA$(P<9 � � � � � � � � � � � � � � � � @ j}OY2'$(ȍגgIHHHHHHHHHHHHHHHH P3 R rDFA$(P<9 � � � � � � � � � � � � � � � � @ j}OY2'$(ȍגgIHHHHHHHHHHHHHHHH P3 R rDFA$(P<9 � � � � � � � � � � � � � � � � @ j}OY2'$(ȍגgIHHHHHHHHHHHHHHHH P3 R rDFA$(P<9 � � � � � � � � � � � � � � � � @ j}OY2'$(ȍגgIHHHHHHHHHHHHHHHH P3 R rDFA$(P<9 � � � � � � � � � � � � � � � � @ j}OY2'$(ȍגgIHHHHHHHHHHHHHHHH P3 R rDFA$(P<9 � � � � � � � � � � � � � � � � @ ˖-SNIڵ%Gr_%E9|Q4 Ȋ(͊4� � � � � � � � � � � � � � � � @Xj9rD.BIHH\W6:$k֬K+- @!@An)JfHHHHHHHHHHHHHHHH͛7Ν;dɒRlAHOپ}$%%IIH$ rd1$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$<(k׮ՙW;.rVjUILL~dH�qQ$ � � � � � � � � � � � � � � � � d]Kn|rʒu3Ô; ݰa=zq*\ Ȫ(ͪ%t� � � � � � � � � � � � � � � � @Xn۷OdɒRhQ)Pȑ#(d:uJ>,w۷ *THT3� 5 ry                :ܬb4$)_|`O$@�@                 C?ѣC�' bŊIbbbI<SJ$@P�w� � � � � � � � � � � � � � � � � � � � @0#$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$�p � � � � � � � � � � � � � Ă-[HrrrTQΝ[ʕ+' 6ZjE&       rcÑ� � � � � � � � � � � � � _f͒ƦM5\m4p(V.]Z *RhӦMm6nݺ3gLuΝ;%o޼:]"Qa&bc}TF$Ga]Kʱc$))IT]da}IQ+Jmۆ � � � � defcIHHHHHHHHHHHH25xƝ4iNcvvڒ/_|QYlL>]ӱcǨ=BAJƍ9,S}eܸq:-3f̐^zɂ tR ̊K/>wtnz a իW3O&B$@$@$@$2 rCFŀ$@$@$@$@$@$@$@$@$@$@$@$@$@$QFƍb\x -ZHr+U$w_TQ!cCuaܴ#FȄ  r!1    lOl_ � � � � � � � � � � � � @F߿$''<>3;wn4h{wX wر#GT9rDn*'N 68}]Q(MWA.T[N=z3ZoiWRHHHH -PT' � � � � � � � � � � � � � (} TL U wɒ%~&Ǐ^qW^7qݙܴ+x^}ղc)_L6-�3f    LML]<L � � � � � � � � � � � � @V&+X i7o<:Y5#Gz%Qo?t萜<yR:묀;q̿+N J޼yA۷OPB3gN6\Aݻ%111*o&ELo^dzҥK=e^\xWFY#±cǎXbA3iӦ2lذ!,GE .F[Z50aB(H,ϟ?ugځo\rv"   O\\HHHHHHHHHHHHH&+WBb2<<"̪Uqa5k֔wyG/m&믲ajժҠAiٲ@8 L29΄kVnvɓ'O?g}&˖-^K3!!A뮻?qcf̘!KDӧOؕ+Wj$UREcǎry/G?!ɓeŲuV6mH=@αXp r<(=##FL<^y_.wy^|~aoRR˩AlK.pB}z3S~}|(nMnFOO[l>@ڵ`PV-iذr-~Yz%=|?^Ɋ+teʔuqҬY3-ÇAM\XQּysҥ^ƿHѣeѢERB0`lڴIf͚ b=u{auZhQ̙# .k׮t6rHHHH d䆌IHHHHHHHHHHHHH <z5V!# bgyF' ^x'c>sϸ^OWn޼ޜjˡC2!x7LlIanA.Bhͱo~n~O`LQI|H#^zv2eq!A qi 0ĝ%K /ԩS60o&ޯJ{X_| ixSm/ cwM=']nz T>Sy.C ^v7O<wGSܹsyr\W_NC݄Pث;V~+ھ<s � � � ­$@$@$@$@$@$@$@$@$@$@$@$@$@$5X f &ȅ7ݻ;K!ꫝ$S,D \cw}gv ֮]YE\ڨQ#}leҥG9a'Lewĉ2l0g?<"_ڣٳSmA's1xrн{jQ?lvSO=%ڵsmA(<.\X͛'7nr#0[%`Eq0̕+{g}Vڶmblѣr饗Ux3f^&,-CDl{ԈXixS.V.%JhOy5tyc-ݳg OFz0k׫|Dgjޜa/ky+%ze(ܹs;oq>Ai6F 04izdD){S~W^]Q^9sU� � � � @ 1 � � � � � � � � � � � � � DB VYs*~[ n!Ĵ^ o!nذA'n )p֪U'U# X"Iğm"p,Fpi?gϞ>F9 9r{zv+D0 ~!LYyoРX'=|u|++ɶA@ݣG{bi{իWK.]֭[ko&܎;Q 0}nA.ҦLM\` 08;&:tp<b;el">S "jc;m4GN:C/Dݺus  h"\pVآam_A ܚ{=S8Ο(-hw_~@O#   �bH             @^'UFu9!^5f Ny}?V\Y{5"OĿ|r->E/~WȐ!C!>x; ԩSZ{n~ĈZs.\~a-PiGSl1(b+xbcm{eԩz'|"ʕw]fbP_~x~W|M;v^7 b r1faٲerU!8U[ǍNu ڵ^Cڑ^%c[m6txx5j;N,u_~Ҿ}{wu/An,[ xRROZef<ہP^(7<ޭGC��@�IDAT%i$@$@$@$@ 7tV I$@$@$@$@$@$@$@$@$@$@$@$@$@a`뤱o;/k|BM("\l!MNNA!dF+!N?c r! ak<4ڵK TjժumA(D/g"w.H?þY aM^K ;vQj .uԑz)njRzufի'M4e"=H-EZ&6l7yycc:ދ-ҫTTI/zl r؈OYvƢ^ق\x Wau"h<0x {v rtN$@$@$@ PC� � � � � � � � � � � � � @Db%:y7BFx,usj*G(<,^Zp<#m[n+Wo&ׯkjovX'Wĉg}gA*ݺunF۷1J*2i$EW^y}ܣG^\C.]իu|.\X/S/<Mu�?2_.yf6x5'L \?8ys{A3gΔRJ*r iРުU+_]wf͚%%K{7wջ &L=^f%>cn%ȍE 7c y&/:(C� � � @X( � � � � � � � � � � � � � @b%:c7BFb9rxROxE Hux#L<+#FpDSѤ-ȵ,G wܹ{2>M:.]"DH %{)P^͛7Y;>b[_tENGyD:u$_}#Gʕ+;`ZP!gY!0O<$;m4|X+ȅ7XLr,C4k,Ξ=[Lo(uϮC:@$@$@$@1%@AnLq22             8C V31.*p'OnI{QEjੴF:a^zUTXQ7nܹ#t-S@[jU)[+WN8 7psݻex7Rط~+gu^oС]F (<n6ݻ^رc:W|yG(D"=|\ve8\xȑ#ҤI-W_?x:u?,?^ݼyʣ>*}>õU;e8g)R6o-Fۇ "W\q^6;fy뭷~gQͦ ^X+[ ӹrJPq � � � Ĝ�1GIHHHHHHHHHHHHH @^<c2<<"-jUVجǴ/R+C+ɓuP~{1ɝ;ϡ6mb`l=>駟Ǐիg@ )rm&]w֠Ay76lp<}CE"H8ft7N{r8?JϞ=!2qD /@{ݻ}sF#ȵpرrhSO{Ŏ>@.c[k ѢETEKze ry6l n M$@$@$@${ƞ)c$             M VY/qP !.7)S< $F O4vEV^Ξ=[܇i/B`tzb8qBPMI&I*U̪ϯ-:WWla".RA. {eڵO<@!_x=ttA rq:uIǎ20aTVM/6x-Tڬ!6.C{s[Mޛzl rׯ_/z1wzo֭ҵkWe˖b-+碗 +^Q뉝;HHHH  7 D$@$@$@$@$@$@$@$@$@$@$@$@$]Q1:_Pϗ޽{r]w}iA, ZYbEþvi/'HrxbPجYdɒz۵k;+;t>^B<l"by̘1[oaQj֬)Ç u履~טδF\hQuMxy̙>RF ɓҬY3-5p~x@Α#٤ݻWڶmqAkÇo߾`B[xR6f->#ƲG}T{gir(%ű+ rC)!   AQL � � � � � � � � � � � � @6$+Xo8O(\1a!F8pD)6S.bb/ۨQ#9r>瞓3fex^qe˖;vȊ+b^cՓ\*W7;V|M[W6l(E5khj-u K(p +{Wg,=N}Wlڶh"ɓ' "Xx5֩S'yG̪ 쫯wM7iQnbnG%7o!F}NxS݂\x^؍7(_~}c/ C(kwF[(u: � � � d^f޲aHHHHHHHHHHHHH8X f0*~#dyBWVA?sɝ;NcǴrԩ^˔) v51Zz\6P ڂ\O>)[nŪo^{͟?&=H7ĦZh=H~u.smܸ1Y´id6x}Ku 799Ym᳉E2dԮ],΃ρz֖8:zEAnp A$@$@$@@\ r7/?.9$>$sRETi|aI)],1t,]:248G"QYuNY|!IݲR⩦ɐDEqW<&sK Exh+6#GСJn٤UCGpb^9왯C!нd;)ϊra9cCM{z;p丬c>e҅x3aXx˝+˓KJrQW^Gq),g+(g s^,,6wnsݲGv?*zтk[Lꜗ$y{D~ݰKv{X6{PΓÜRT[觵; м)n|f4/c-_S~QY# uhxa)&%hv'Et8c-qp?n_Pl)7 ƿSuW.8~NۦpM$}efze}J_H"| ^h? ǎKRksy䔚;C]u|΃ٕtvi]lW|:U ;nSZs%Y`xpm]r^q^ vL(iu;SR`>9a?زWz {:v$ɕ3kUn}O^i!@/qNg fs~ MxU2n'@U"Y{͗/}sGgyF a RzAhDr9"[vX}7o+-u]/Fk[p>jn t"[xZuQJQ7n>%<Ζ.]Z/_]~[UVբ-[~+=^6lp Y!*w[cz^xtR9/#ÇK&MR wD~a}ظqtAoy޼y+W~=a8'A:̵^+ ?){m`0b?nkӦtM*Ut{KLi EJݳ+mS?aٚF$@$@$@$:b٫0 6u/Ђ@ه^LΕ{ vSP}nDZ*6~F>v^ )=='%BٮmrVe18iși+.Y^|{(xWo{ɕ}Sʂ.x}ܹāu ` ְ.7\2%X(i7,B [ _n F,c-̡Z(|QBǼs |"Jx㳕٢N/(ˋ�1h>etɘ\n-̦~"NY~fZ~Mui${te?eKѣW6*B5K^av`V@vgrk o+],0ǘWlAv0Yݹκ 6Y{6|$sALxoz5% l/|G'64Gkڕ5wBd󣮛vn9s&9}jK墊E -nAhǴ9h*#OR;Ri^{MᴾÇ m7<qsjgvx^B'`wr-լjy5۷xyrŴOWȌ7itSn0j90$@5j@خ];iԨQZ13ӵdExݴi߿_J,)JкSK_\rR-۷o;O;Zkhʕf>={dǎ3gNP͛+hmҥB:{ltKLbv]!>OJJ_O< !N HXq6    ĝ LR!{vǔ/#<+zo㐽v~)"Dt9C% E3}K9=y/%m7`̋w3X Lx)F8`XsFx!{ 'ϡGBMYp9m#~y2 LÔxUJ�mZ/5G $otSE�R{$fTTx>zD(`B3g<K7u2aoU DE^x}?="E?Iu8w쏲L M5lx }N>nˣdx&> rc@OA!݂\;ܔu5'ms{4R lgW{A]JңEv)ȍ &pX|֊֮][ qe˴vQjժEZ6'oi& < � � � � dq'Ƚoe󎔩1hCyPV̤]07{fkmÊ1)U rc3 r=ݑ/CV\9#DL�_w~T@I6F}`Z ro9-DnOAӟU?Z)wd\3aZ`\}HqG Osm=uNxot[G{nz湥 Kd}NV/%t笛3=QR-Ǖ7GhsLZ_'xׁG ӸuAYy0f GY^LudxkUTQ>+I>qR6O)~ [_Jk !,1%dΛ'ԋNq�QCIl .(j%ЊMY u rq`m&Ƚs<1>ҮQ=.j^(N<e0SRj^,p`^y<YͼS t2e6ֺN9ؼSC8[[l0 rcAq� f͚%Ϸ7liӦr5,>Fy 8qBz)K,щ1cyS̔� � � � @|+A=)DwT[LHy]ۋ9./Eq.rv<2<n%Oڬ|h)xZD^C 7l &=2{,E#PSq@86ӾagpI&%Mѷ~vDٺ*E<u5F3wo~ _Z:Xy l]ahNu岋J{E) >jZ|BJ�Oc#^٠m Ug2yfO[P+}?kTI.v<wWWџֹ՛=J2hnk!-&`AlGYIh 'E4 $䦠{㎐RdY ">{sTlQm)ߧx6D%%xe˖-isrIÆ 7RY޽{g5kdǎ:m۶g}6 I%    O b9ꕗ^k,a[1JyQTP%Q5pa%y rjߡړSтx@' Gq&PGގ?)6_x:pϗK.ˈR(!*\A.T-ԿHG$B(M8~#ZĈ<cU];\<N;x-; ]SQ55]䑆HBo5%wy</K�^ 1Ç~[+")|yrx) G{Io,x.]]9;1_X9x5 Әs4p፬326 59^[{M[| -ϛKm)<>ו;uDə3y@ 7=WU[˗((ci{@khRhmSu U9N8xffAF6|Ã)1[Ok;_g0X%e<݆Ն>;c3JpiBH-8o$^Co.pû>u[Jx!z+$Iy5j]^JOkW^#줾&jޓR~Qy "mS>ŜmA.]2F~ F/uꞟ$6Y:M-zZyVIyX}>� nj G1=XC@4| 4٦ '0> 5 U^/V^YfwL@Y:{h3Äu BN~<5&([cDvBETvfc -jM77k ' Wɫ3wr<)+O\^4QqL$6.� @ Э[7_Ĕ(QB&O, v � � � � @+A 7ʛ3Vj< g6 =خ`pm؝&Y~5sre(74,M[G!RHKe4RM:n{8Ӄ֬\LMU>U[ 8_Tx[4q^Le 1:1גwD`SS ,5۝<pM/>GnTytJǿ9(+oU7D.MMYƧ-۽:jh V^夸SOY_B6RL0mJE4Ek, sc3=7\ZIQi;#]q_Kיw; ԙ+ {Ca`6R3Q /j~|S55<BXPNbX reLܢ:LM oY#") *SA>0x)fp-*a n.R:6U*H;u-<6z@ nͽ9/9˪P0S?Q*,5Q⦛?8 UWbJO`*GsuTݻD]u u]_]\S4Suܶp$>DT3ƃM<5&S/NYo[孚n&[Gbj隷xcsBVPye3}iecj%zٟt"U/Ɲ{8v->=<bmaSS:kQrҼu]a4h>/I{#ǀ+RmWǢ9 Կx^Mva<v<*.;Wj{U=ǵ ý_)u]Bn%eb* sw~@܋&T[ 5X;oWbHs{km}y㳕nzi;u.'P:]JHI#2v c~g+*clAđ[t</Ru|r֞mHw_"?[o6q|δ>z@3N0G?U_\7LǍKiM8}mA.޻'w>s~ƚF -/A1A|w70hTa] UQ;9L0xJ\:wΡ\Ѽ=VWXix{kxFի_  e:?#ys r_S=~0y:esC#/slV};eٺ7w UIKzaEyݲygG udxGxo,R}ٰPfcB{ !8ƇOGh5Vǟn r?V:; LJ/ 0w`m1\޷vПƸFq@::E+}!Ÿo~٢7j.HH2qdѢE/_>Ztܙb܌/HHHHR+A.:zga4PBHm?d<"5t:mA.D :̆h∺~ d6WCl7D8}Յ2rz}љ7{c[kś<㵏z&! WF|g3M 0Bӫzλ갵Ũ@a+˺\q֢J*/ (jp^O چɪ3Lm3˨dD;-ȍ|Yo aOY~CMS {N.@ǤET=38.Ҳ>魦T0UpR õ *j]~  bu <SpMK�6/K10qg1H{{8G{4b8s Frd-�^Sܠ>D e x)CqB)S`:S*cF 18�_ZQ m8 x{7ג'8ҾC7K^6ቖ`eQ-;N#5|?u_�n GPoj61u&Y66= mʻP $gnSB86vn|)ͪH+ go<g=Pmɘ)B(s♨<sX6nWоF;;T0�͵o8>g ނDa ݡ"+0F muWhߛiiHz%gZSg#lA.(<>k ASn|Xucx'L}1Ӯ4s=; cWe=pEb{Ry΁hU@[?Gn#՟y{>rDr{^,ށҋGzIzm2;d<h7 c,Gi<9>bL?<5ݐӳeXgfP?Vo~?@}M#0^L&NM3(}ka̺E~_g=l(paiax5MawQuF^& +1]wf+pq ~� � � � � � � � +A.ꠦH4@N35a ;ЏqhbŚ#x 0_#�:랼k' ^y):W*+Ϗ0A`cxL δ+떓ʛ])cMu@o\`*u^L#')Ѧ�A2w_;0e-x`Q }{F$e=�] KifמG[׿ < /xEQScdy1By30q b@2l ^-X uJ{ETZI;JS@c?:i %#3s "#eg8,ZSPyJqi FJJbgi1YnxH|,y[: xr;DT3y_'jab@x ;^W upŽ Lƿ9-sL]V#uk"lC7޻Ckfh%~p/›A,k[l}POsG)/ \gEsT<g÷q>Zg晖\ۋ{|#o<x8Gx"g6f3rx1刴YXEy ΥoT CAJ !>mI5o̴ I} ciyu9{7v ?zX{6M!�7&xK>,힝b ]lM /w2WGʓ?-'].ԙkJ g- 4>pBx߶')q1DnU! w`d>Er}Ja^T" aCԇق#@fJc< nl1xVߧ>z4"S9vj7^w'awcYE/A@+s6R#Gw-wzU \D`>l3y״YQ r#}wt DNȮ rqPuwNTy f{{U]ԵX׾w.km튽XPTED, bMr`yM2Oɔ譪F,.bJ my/~O4lOAkk8ކ>OD :Oim0DjhG+]YC'(L9n?["my zq *Rͧ2aWW6n0%}_V>CnjGjD3t8>>.+ZUfm@g=ݕjZ4ogI% Y;~ծpڇ?pJy˴ @�@�@�@@Yrҵ+\j: "鲿.N^B(&T60.R 6uдCM;BOqtḒv).}TO@f>D3ŅfjGuB|yx޴3NtV=X\jcw`QTUK5 ;q]0Yse㊾qv0_~f*VC?>ӎOCzJjwx)HJŕ}JxM! _.C>�n ~ېhإ\%״%}]2/4uA9Oq=CP(t?+>Sz;CSi%w_>C5$*tiV)>H |PӲnW3U8%oO(sM+,8ÁUB'Yg6i{wTLe}CP(}RC|Ff`{K7d 5]:Utﻮȥ`B\0|`sHTZW>mxa:jRwRⰫ^ O. 'ܝw]u3n0PkI4a~*oFQT;{�׼TIWytI{\0^95RK`;ϯen&^.tH܊]<߬xvuE}gOI2X_Me]×^6;_eRqb~[Yd}_HN׷ݪ XVtVx:֩iUuVL-�K#UF-wR<@~fCW/P)%!U )lb}ݦg;6~ )1iʹ@n1yʶ/{R;;ގ>|NWAPA;)pgwBW-ӲPÉ7Wt;긂7$s?g[>_=[msN(S@I>S]mIM/;lJ{]=ɨw3mf/ᵯ885U<[WSQҡh+PQ}vt'kj}>,59^}{|tW@�@�@�@�2 ] W ~iIfKae/>Иm|p}ضJ:<q|&`~\](o8(=aSwtσV=/@TTt+ *l*ۤ[|;QUCU*UU^DR.>.ٽυrU;_2N]t;Ub:;o@Dx/5L;`*zT*v =-Dhw C¯ޛ@n1vq W;uI8H;ϭ'mg#_WM^a_;[ E<? y껛N1nU[}d>S FP7T^v.g<w:USVULMUqG-bYqS 6327t҄3j׹Pxi2*u"] qjقa\Qeij.xq[7fxҁx F4KWʇw՛tPOM4Ww&*ʴ߿;b癷Um# Ob)u0ULUTL_|Oߣ_8M J!s;ѝl*dg[gþk8LuRZ1-,[**Un9$O']%sكÓK NR#[ {Zî|59~wEvcz{s\$-Uu >տgL\MKWUv</IRȍח ;P6=۱XɎ/L-}%[v^)- oG2E_pƾlz\tƽ4)>Z -ϓLs}ĸ϶Bw}NO26>WE*pajBāh5|}!ם볮iZ>.UYOo*}qv^}\/8K7߯> � � � @U F~)< 4mЗ_2B ),ڝiU.SS7ԙm 2',<=q)|ե|7g*{OۡRs J\t`VϽDӥC70*PQ6'|;vxp?vD k+ʼy;`VhXWUaA8D^;wV\8[]5E /}o M7 S"f)[{qh@PxJhzgwzyl6k<܊�A%Ɵr>RO&~!LǙRwM# 0]݆ Y|#~>Ӱg=W`Ty1vsQۺciW6aqp_UpU WM!UUKu?Ó7$[pޒQS'/s-~mMꉗEo@Uܛ\C,W/Ɵ8t>~t@6me(QUzJ=} KB:ee%NnR?|tŅPzu9 OR^l m{Zu(e8r+(uUp[Bo}aG~x+�R̲%׼[&<{qJ“'r܉rrs-|Joղ}ǵ*gɊ/[@&|-9).W+@n1پئׇَǼi[hӟ+N<% 'C_*fGrU'$ob5|O4ro*4t/1j-]</Nux.ԫat>7gႤ WIS+g:1Vڹn}iNW_v'<W%X-O;DЬ+MG-Ѡ~8D?Ui9T<!ſ6B&$� � � �%Pցܴ.[k/ _\5.ޑ)o8Od4x7Fv ?⊂wJU1]kxfレq 7̋v"~ͪXv60pWX8vtaUi.Ժ "P[3+*jw|{fׁ }V}!U]|)x]3pսƙ)[{WzNXnٿpt?w0hl0_lЈoNqe{N:Q!W 8[$L/(U 7۸b[bziqeJO/-??@>w(.fmCw2.}ݬqALxTh\9NƟLvQā\,ALo{ۆeaEM'MyIϓZˢvuU`U/٦垚*{w^Y ӹQuN@s|Xݫ; LS>߹0\Z:ExBr+淥eKyRl'NBS3}V䦥>jٞx߅d¶_: i\C.E\@d2,e|J` `϶ͫg&L7=)/+N$I::^8] nk^m1= 6W WCgv'W)ςNJW@nxU5+vHδ/{^S9߆ 2퓭&:BVi:֌qW2 LImgOn?m\ ]M) Jo|5_uoTeKM'߆xNXɴN{긴]?sNWyԸo~��@�IDATW*~C 7Hp� � � �T/@ 7vR>ȴ3LO3*d .|KVwc6r2(t�Wy7EuJ2w/vKY.+W f4Y<#Tt}vp2DԼTY]b@nyILa|{IL_}/43)=|1:X;q y3=]i?B+L/^v, Jȍ+\~f*˄IUI )w}UAS(-O|/]^ĕprU֪mlq wV4xo4Nu_w׉jN:_mYz5ry.^_5%\UN_zi{WT؏/A:O+?\!aO|<"]1p*Xg3Ɇ:W1-.[o] =^:􌫰*z*ŸY]]f-E;G'd hiˆMCuB8`tfk,WiBvNn~a*^糯"6&m<6a , ;CZ:smَ 5p17v_׶]#@nM@nMI9Iޟϰ+nI!䞹oJWv]\y+<3+~G._Vݶ|</ ANrupb񵭯wFuڴ?Y-&1.0tmаO 7c@�@�@�@ @rUwy0AUio}àO0b#~o$ us| 6mToru[BSXm=W2MlVM|kQm0|UHTBu\V^R @v$.OS(N]Rq֡e;8BGaMf!b jjq�w_ždUI*ud2]7~nvիdUl2|N0ЉZ88r]xweBc6]ys&[ 7^njdѪm}~٭eN'-8kQ@}u]guNZɧr|/߀8ǒNMqյ]ڮWuMMU*o`n]/O.kсښ6\8<_n yAb)iխ;5vJ!vWAOoc+Mz~{{Ur³{ޝ=egiߐ+*ReK?1A;?~9J.%~T!hL-u:@(KĩmȍhZa2~iPB6@nXml߁bӯشHr5d*?9 {ԝV =qnZbsM4ϙ7oM'oN5َl&0Չ>?{_mw*lT-uDž~CG}kZ0qmnN`+ȍԤ$lа~QGt>5 N2t#n{vmvYs@nw � � � @U ꥇTo%.;j+[} }bg~R YU U(rUQxw,5TW}Uv]=[w@ ;0" i)߹KOYE5Px߲rʆoB WcWL aefjf\^te:Z{i)XjCrsٚo:P0Aq 􅽬^G.>㟋XhT2:LiMz^-[ 7OV& w֐z޳g/@nޗx3[f l_D5"UtVeroSgζ=/|>an}HUZSҹ]zȦ~VUZha_5mw xk鶓2uwa4);A+IܙN</' ?۝Pҿk,e^S;O-G ׼DWxJ!{Y!'i e h{<Ll2{>\NN a]|߻~jR!ݕ"*N[zaaYپئi`;6N>\ Lmco<) W6\-h>9mBL@n0:L+^6Ds;IS;۶||Xat.%ݕf$'o ߣlMW~~nt})^vŹleg﷡m&{w2 ˕x{2>#{]eI|=܌o@�@�@�@�eȽwmЈo<񻭛mQu+\�L;t!\X!S&xS !bqXHWlPf<}]j޸t¶Y>;k}gdWM2Wˆkt\gkZuߓRN;\Z6[U?V'Ve{.C{JS啅akPVe@za,~fw0?~-ێ8ģJ'~~W/y.cx.Bcة7kSow]Xt�_-S b/WX=Wq}pPO=-xx.xmrxY.1νkhRu=ַ]gOZXhT:2P2 I$P9^s&S w M*DŽyo,.isruR`]] Xԁ8.|n|#P'l^[;Wl[XoVY+TUh{n뺁9m:kNOh;bυ'Bk.o=^qIP):Z*zX;xmm+WNCay;wR78<xixצۑꘪvZeI,zXU˧]»|=>oWa(W 'wvAm+ق`B[>U߳E%@AS?x *6j<-f9wmz(vl|wx5K}AŸ}{h8]qQ-v;m lb'} b#)LߢoiB W-r}x>WQ0UN^xUP7y~Lw"ۯn<' TWLMN Vc\a|4lm&e g � � � @Yr ҹm՗K/Rs!>`4]~]^BTy4ϣ& +*//Jܼ!|v 4Iv=4{mюS5\Uc _|[U<Uٌ/ī-~by28Uŀ ڸe` <?pVV*a,U UɴtG;YOp<w/-[ W!vK<e @k#eCL-ϧᒌ@O* .<U&VꧦEVD?w⏃z\'!Y貄.賢蕇onZ7 [URO.K4p�,W 7[eliٮQ.0)2|d M!rq$-6:e-u+SB3BɁD v/GoeS$<?o%˒sUr\>x{uaFKl_WNdARM'ğ[OܮQW۟Xoy+:&볅& ;Y/NOC+5-7i~te#z,a\g,<-XIT5啗o^g%'jۢY纝/7 MZlָ^j;Aaʼz$$EoԲCŁx([@+TzyȤhyld\ j7,_Qduw[/oa[; ߮lۄFAªZǸ|[^̶s@0۱X}}~w:)cSCX/䎝8Վ5L?;$f Wmlb'm;lG I/Cꇂa| *H7]H1w \x|5P|5^',E35;?};:L'y)a\:APWyQ]gΣO϶_VÇ}Jyw3?SO@g}xӶwW|fe֠d?N4@�@�@�@�*?<%VTLGO^xgjThqE@u/ǪK[c]^}Cpem:v[s%/&;<5 *\4bhhW:�Ěr'~?ÇutU mKf'K HtV^ƻ3O%A{kLP(8nO\%Qa_ՅY1SyW';㝶v+ j5~vraG*oko:cNلu[UaB#';ΛB2:Ѯ:|jЁ]}&̊2w=7r4??:@r2p݉߇w2|] NZ| C(a5[}K(bYLkzq58Z5oSMmZa^}Ӳ+YVnC2O*b\r(pA v7SJӍ $ qT,nZ*/f g|M$j|4~uNh6F f^~;C, 7/o;T^m-]^Ս䣃lkvlmEjշf??wX"x󩐭-~|u`Xd FZ}=ZtIL-~PCZW;U<ys532: ֩RѪmL˶ll_u?i-,o@n[r !m庾ϫkOoG_~TW? ]NTLW +EEwCgz NMvFdܕ<2L)| Jjb{+@vB!*+|v֡MӬc'h|{\M]Z-^Pw-օ=Ut_?I>q jj;klӳ+B&NqQ[m{F'k٨K<~df j$lb([ WV-oGkY:6+,U W Bqo7 rNm_|y]CݖWVJ[N.tMѰ~;\ÿJ+^x1[%! ~vڨ ?;k{qx4n Wgz]׾z>wy㣉~4{ܕ68,]O 3fSR!؅N,q\J~w^ۭvE0~n@�@�@�@�* U W/]#T%V&(S%]Yiz芐.$X?Ul W#Q]H1>؞/=ĚrulL󣝊`G6~p5]*pip ..|}V.LD"gia'soQov2~#80+o5b5 su ?ژ:jm->_Cg[]WPˏW۬J=>=Qy{j qx~8-Cu\j$.KLܸJxq\æ$a.]iq M@n Z<p_`N@Q5R`i,@./w)wI+` âuy* Un޸ *kY*if-in?a]ʷʤ^~u54UVRr5 c[m5WX*$E2?zq}VtN0w*qh<5]P}Т.PwacE*6wRsT=WRWhH'=f hwz|*BB +{oUuUYT(kqt9w ivlv[h WW:8rm/CTHo[ WҰ.?ƙm;@WӭDÖ{ Ww+e WWW!4OZ?e'*|7}%$u4Lt}OW~gz3Pŵ5Y\xB4aRo{tþv4^Eo'f@�@�@�@�?@ri0w nALM;URsӗξ+5*7*4¸ٶE[,e{uiOBҏ|UfڹuoK>|N/Z@&q"xe"*Kc;nv묻y5,ُ�UXH'SXŽv>gA\]A=iAWJ,>Gn iwi/kYE;~wppI&Ͽ;ttwTALT=LV2U1> j{}?Jnv*'$V@ j5y/4q ̅~6>R1HWknUViU} U8:KܪG1˒p�,S W:Y#,מkX7ڸaxuW M;nR.rӁ$U1|,GKJ*T6teТ,@]ߧv\yJie>kzGxUzr<~}ڪyüޫ]Uup4t_9Ue~pO~ԏ>+Qnd Kw QGVI)l΅犹IWuێzxtUUY@lu'w3[PUZWElߖ0ޚ,[°r>υҿaxwZaЩm|${%W"I[_wIz~V)t":Xcݏm*j <?o&W7U5_k|ɼ_ fMm6ou +_j'S&|٦g;6~r3}2E;aOrM{JYڗuUpUU6,75ZM5΋=V,x?Xx55a6ގ.mO+e 7L_;;]a]!^kVَyU8ӷxU1Yo{ǝ ٶ+/X?nms-[U͍[>/׬}NSU}[_M v>5 j:Zfi[M7Yt\$]}EݱpMx(#� � � � [G&Mr41kjjPNk:qt.{ct9G]YZEdlrnKª§EQB%BfI;:u nƬ]*&YNijK7kq^ @5/+.ۼy7U֎V:̅|{]T8}ֵ#|[Jj2{wiZڴhN隼E WNZny(Ų:Rz}TaMY' }&S:B'%k*&8`P'.dbI?nN~fk߀l3<U�Z/U~٦& ՆY!ˁstV#)$7v_rFZR@~ܥ?t"—7R:^vm{Yڶjb˻߻dR<jc&_~?lWDlBOK�%VT~ U ][Yۢv.fӤϷi?d\!&GbnKW~lgQ|OMN@{T7ۃNPe~ ڪy#k sM[ɓ~ŦuFXퟮ\^! %j<R䭫`i:x#� � � �,Pr~y hG_{ M_ �K�KǼ+Ϲࠓ�@�@�@�@�@�@�@�r [.4jLǀ /ovK>Oߧm^<@�@�@�@�@�@�@�G �a (tB�D߀2ye>9K$='/T'u:k/@�@�@�@�@�@�@�e @ d^" E߀,0t^qUq^X7k2<@�@�@�@�@�@�@�  [�  l2 F�P߀2|%=1 S}gCfey � � � � � � �^@nM# � � � � � � � � � @ -7� � � � � � � � � � Pz7e � � � � � � � � � �e$@ l^* � � � � � � � � � @ޔ1"� � � � � � � � � ��2zy � � � � � � � � � � [zSƈ� � � � � � � � � � PFr"� � � � � � � � � �^@nM# � � � � � � � � � @ -7� � � � � � � � � � Pz7e � � � � � � � � � �e$@ l^* � � � � � � � � � @ޔ1"� � � � � � � � � ��2zy � � � � � � � � � � [zSƈ� � � � � � � � � � PFr"� � � � � � � � � �^@nM# � � � � � � � � � @ -7� � � � � � � � � � Pz7e � � � � � � � � � �e$@ l^* � � � � � � � � � @ޔ1"� � � � � � � � � ��2zy � � � � � � � � � � [zSƈ� � � � � � �Tx߶qܹs+=W胺uZmM7_@�@�@`]@�@�@�@�@�@�A%z뭭W^%F6{l:t<y}֬Y3kݺZV[Y˖-K>BF[oWXa[q ~?`FSYguggO#� � f�@�@�@�@�@�@�{קOҥ5hР믿۷oI+媒逸j3g9GutAVv-'7pC?jJ4i͟?[jժs%uӦ Kwq^h=zHRs̱h � �,.rw@�@�@�@�@�@�@�?/0q7lPJ+d/z vmyNmڄ ҝm- .7o^E!W W!]7dlK|U w̘1>}v'c@�@�0=F�@�@�@�@�@�@�?gisb+㦭T)sαu_~gq p={޽{k+:g}fC rmӦ={({~^7tS̸[u@nZ � � @ e^# � � � � � �!?t/E2RwީTep ^Ads"y5l]R;M@�@ûkD�@�@�@�@�@�@�?DTl3_ϟ?j?c?c=<lL'-y<p@[ve̜9,X`M4؋2e[Ӫ‹"O?Yƍ~k:ͳٖ^z錳/شiӬQF޽vIG{ƌ֢E _Y($˲W\N1fg}ՅH [@�@�j"@ &j � � � � � � �!Plɔbr)~2 >>k9 v}w;N<D_ 7n>|5wܹuСC~ڴicְaC-S Sލ7؎<H?믿?[UVY״�qO[C=iM6W^ MUoP.ZnNnofXUͻƗ|O88 ?B ֥KkA%Ó;찃~kNݎ?n1b}gɰlz>`{q^x#Gw{G쩧JC׮]g{w}/رc}w۶muQF%:d@ � � P�"@�@�@�@�@�@�%PW\C T>#_]W+3A$yakV)N;wtgϞvTꦐ^uU>yW'~.gwz_g Vx6[[mh{ovZZQĕc̷}Ks={-L S�piU PW^ҁ\Ub>3W7wyO??ugC?@�@� [$ #� � � � � � �@BÆ /{V[-]XUU{7|%8Zymvvڙ*4nmmV֠A<xpfzҁ\Uk `U MuTQ66sno&ӟ ªҮ^׳>TU(;L*N<W hn>TU5[h8z|ǫ;1c{'i_~B!dwaW_TWj?s{饗l„ r@Ys5}e[ /P!CN:>l=rH_yWP47l3_ՊYg?ޚߏ � �)@ H@G�@�@�@�@�@�@� , ݻ'!QU5m޼yŸ =֩S'\ѣGҿ f6l0|񩧞j{WXw4O<UP!=-B›lxS?~סC0`;w]y啾ώ8 4N<?ã'tNOxv&;;0ִZh:ކʾq60}tV@XaVvt[UU\5Msαu&L6BV:}:tuQ)oϟo'|ra3Ƈ5G])xnŎ_!� � PS5c8@�@�@�@�@�@�@=[lE*y~w:,{| bj\!WϧzʖZjJ||U;wlwժUR?qR_:EȍCvLtٳg`_Ӫ2oLꪫQN;W\V%Wf pl) ,[Pa6O\9T5N~<zhw}}gU8pիW/ݛM:պutz ZkCn).[ q@�@�ȭ � � � � � � �,\K7|(�o0*k 7`ni@N;d]tQ=ꫯlwu{'υ;~~۷m6mLAl[nsM7d]tIz!bFJ=-rr_|Ekٲe4U_UU9s{i%}gvaֿd;q 9Λ7V~J-X>#S{„ BŎ �@�@�F � � � � � � @{ Wc]vI *ZHklر~'xڶm[)_eƍ]wwWU#8J? * {rXU84h3g&O]|ž nQv-dW_}mV nv5ăV?k,O?/‡a o 7>*!Wqx7{;rHʷ _Ǧ@ns� � @MDa@�@�@�@�@�@�@�<@n\6]鵺2ԩr'Md{eWy^!8TV< :|{VwtN;\C?m\{1?hucذavG~ӁW^yTIYZMŌy@�@�r ͥs � � � � � � @!4y1샖b G*ֳgOS2WB]y~w֣GI;{l||:nx㍭SNlK?l͛7;' uQv!$wڃ>t87pCk߾Sck~iO\pvu%NCBzrzruYi{-v~C�@�@rk` � � � � � � @uF)?fg}<䓶 +$ݙ?nرO<w_I jwe0au}Qz SwWz?~.8|{xU?X}wմβ{w7399}x[n Ɓv-w.w*4[> � � -T@�@�@�@�@�@�@�<J5R_Iz)?)B/RkРAI۽kW_}M6>HY~}xIviK/q}٪᪫JBzgΜi}^=klu׵=USuwr=(sO x RȍCzySN<jΜ9֫W䵆3lmJO<QeXuK t!R? @�@�< Eo � � � � � � @!y:h^j&M޽{'\o|ضyIpGnB2tX\z ҆n~D+P۬YJéjk\xI{{UGy:v B 7|g>~U}WSN}ONno6S5^{͚4iׯ{:Ȏ>hUV2>]ws=Iو*c%f^47<<mޣ>C)ƟL; � �@@n @�@�@�@�@�@�GTl*y_5LKAԩM8>#STve;3++@nf_E6[nï]t OA~T ֹsg_lСOɓq8W^SO=w?lq9뮾pl*rw>[>}Onݺټylܸq>/n]vm֢Es *vmg={_~=쳦PpB WݺwTpO0^u{A4U]n|s%_=0:=J � � -@�@�@�@�@�@�@�|J4RO>N:) ffsαw9ߎ?*( 뮻 yqUCs*kh UW]:[͗qSpώ;e~Y;찃]|>̙30"馛V~ڴiʵ檦@"au`;MUoƍ۶n[Gq6۰E]SX68{}Uy#c=|9t` oUwvJ (va|"� � P5Qc@�@�@�@�@�@�@ U;w)0ؠA<ȿ_W[?d>Nj_=¥!6l3S@vVK?>D W`t|5|*>Ӧ qS#޽{[zS 2 *ݞq }U=ꨣwuqOp��@�IDAT'̘1nF{衇i;[n y^ˡz?뮻T17n&tvO*p=;jU1SN5?Æ t$Ï1®JaUOŎ?w@�@�(P@n`� � � � � � �+0`�/O>k)}ҕVZ_Qq͞=Fe)`۴iSkٲuZhQ-#>}M8f͚e-jW]Ya[^jm۶YA#Gj}] -;ևW^yek޼y^Ι3Ǿ?+կ_ҰG5zCz9&S � �e,@ |^: � � � � � �,Z~?rtRt\,øq߾}m_/#� � � '@�@�@�@�@�@�@�h *n$Yz뭭W^Y3 � � %@ f: � � � � � � Po۸qlܹE9ԭ[ڷoon)qd`@�@�@trKgɘ@�@�@�@�@�@�@�@�@�@�P@nd@�@�@�@�@�@�@�@�@�@� -%cB�@�@�@�@�@�@�@�@�@�(Ce@�@�@�@�@�@�@�@�@�@�J'@ t @�@�@�@�@�@�@�@�@�@ .ɶ`Awa:ҍUVv=-cLپ:˚5ookM[SoS~e_L{^wV֠^/@�@�@�@�@�@�@�@�@�@ .O6wh6\ݮ5w!Eє Я*U۵|c#$o8fkvd?M~3?^e;w@�@�@�@�@�@�@�@�@�@�r [;ߨA];cVUsιsh9X ?]j* W � � � � � � � � � u [T u}=y}46;/[f+;<.ŝ[;s?CwZvjd&#N r�@�@�@�@�@�@�@�@�@�(+>w_-[}WsoxC{#5:L{G>ڏ3v5,v%@nI  � � � � � � � � ��jOЦmnl1^ͲMTi2<=;"y=qzK͝7~1M5mTURrg͞ggͱfn~ԫ � � � � � � � � � �ռOe^bU:.<pwn_Տȅk7Zr+޵կ[3{<;!6g|i_=j>`ۺE#;oW߯Mq 8iIwY׍mVޘ?뱦b =(`kҰ]|𦡳˶ld5/XPiCL/%W]8gluVkL; � � � � � � � � � ,@ 7wGPz=i]}2*^*xR-}g՗Їr2vt/v4[O?=';ד9t5lm:%Or{?>m5MS|xqW7t W݃Jx2K5{Ow;q7qvl/@�@�@�@�@�@�@�@�@�@�Y@n3Ck]g;*§}06)3쿯SU-3oǾ?֦ӆۢI}ʼ 믲UƆ?\WRr[/~yFm<ڤժU˚5i_UUxE{Ͽ32VS;@�@�@�@�@�@�@�@�@�XB)zC}[v~0.{`+ɮznzucSsj|v١Z'_*>;k1WqsNmﻮ<; ,z|[[ݒr;ƭʻ =wIJͲ䆹vZ͝y wF 6r͓繃� � � � � � � � � �,rxT_}qi~+6rA{5ubgzwVh̾]^rruizSu.غZp~fw0?þo 7~,8sU)c}}[5> � � � � � � � � � z)[>Cvٶn;mN}c:lO]/+;oҡVu^pLՌz6~t?Oijvl];MnC�@�@�@�@�@�@�@�@�@�lrxG_xw]Ͻd츆}v€7U%7[׹SwJmZ4sr� 厝4>}nĩS..ܗoW<^V;-c]gJ � � � � � � � � � MO힗G>볮ڤy ]:]w.GG%g+%l6/< )PΛy:"� � � � � � � � � �K�jޭyBWlS~yAFcSn~w[] ~jT][F\\q/dkthiڷij+jbmib81[@HWWL7MG7�qbuwmЇ瞻ժUϧ`n<RoYzobn<@�@�@�@�@�@�@�@�@�@�4ռcod3g`׵β}/}we쨿]͘>+{蕯&qOka_Տ~$g_.@nzGrՆ}:?աM3mӽ@�@�@�@�@�@�@�@�@�XxT{ÇV1ctE?ׅM]ԫ㟋͝NMLk޸l@LոՖ_q_Q&}l=3+8*zC|n} g;Aa*>=K1VN-;}ZarO/~!y=3%=p@�@�@�@�@�@�@�@�@�Xfx_`?nx$R쎓Y!{3Qn[lzikmEo9<=?ءK{;yrЪ֪Uy#Nd\mZxĩvu~x荇u<1{OAߵA#=ua/y|0vz`\=֯4]=i|3{>@�@�@�@�@�@�@�@�@�@�%U{m]{jņqgݽ_fϵ*XM:ZMmҏ3So sU-lK'rՃ* n[lv֞x \עmZ4W 4'O^OB7>=9b ݮ޾5qzmmy˹a[|uVw[5r46zOq:@�@�@�@�@�@�@�@�@�XR:ϛsָ֯A݌v=$ٌ=G.يȍ+V(zpk]yW m!ڮzh.*ˡ}ggv3=hLSf֪yLO @�@�@�@�@�@�@�@�@�Xb.gʱwIԕkn+.:ifkQ*nz=:s xz*Voۯf];2h\mzT >X{1U¾.eGum_m ?ǽʭ6O»<5bw]yi)ۢi{p4p|1[[g7_`?8||2_ o )w6yʸM� � � � � � � � � �,e]oSgل)3|vٖYzEMr6釙6׹VNmk׺կ[8Nj,mTV3ckҰojժOwY69VMR6-y}^#F�@�@�@�@�@�@�@�@�@�"w@�@�@�@�@�@�@�@�@�@�(T@nb� � � � � � � � � � @$@ 7. � � � � � � � � � � -T@�@�@�@�@�@�@�@�@�@�FE�@�@�@�@�@�@�@�@�@�@P? � � � � � � � � � �� � � � � � � � � � �*@ P1G�@�@�@�@�@�@�@�@�@�@  ap@�@�@�@�@�@�@�@�@�@�B*F � � � � � � � � � �Dr# "� � � � � � � � � � P�B@�@�@�@�@�@�@�@�@�@�H@n]@�@�@�@�@�@�@�@�@�@�  [#� � � � � � � � � �  ȍ0�}IU~ET콡KK%65Q4*b!vEX5* "A11**bo&Xvs={sv!~ @� @� @� @� @@Cr*? @� @� @� @� @�""  @� @� @� @� @�* P1  @� @� @� @W_}5^x3fLL6WW޲ehӦMt!ڵkW @�4@n) @� @� @�"#СCgt;v,gco4ޛo'OEY$_]sUU= @�hJMi<+ @� @� @�MJ Uƽ;gc=b6X`wȑ#c8,WdM /<S8k㏏aÆeFQWwf9qo[n]( @�h PwO @� @� @�*B뮋ߑ¸oyY<|,jőG9Kc _.-{i{KѢE@ @�̺@� @� @� @�5 3M{,Wƭ~T)3ό-[F^77xV^x9 Ԡ\U6KܪV @�msۊx @� @� @�墋.-s*ȝ-3 38A� @`ȝ @� @� @� М-eR@?Z*ZhQc㏅wޙ>7uHUXbgy|� @ȝnF� @� @� @@% +0[ʬ\J k#FB -i?m'xbL81ۿ+bxg[nN;>^{-R5c-:u矿п!;io=FJ 6 |p,n- RСC㡇_||niyѶm[o>^0ѱc8b.K;-Lݻw׿#[oK qd> @� и @� @� @�4crfKkY 1lذS07msNTM{niw-wS(7m<@i&۟<yrwyd[mU\| ۑƎ[mJivdn.{7 wq%ð-\xYëQ|p]w©cƌ=ܳ^}'gРAO;&@� @r-  @� @� @� rfKikrr_~֭[[lE\y3L᫯:;*|~{GĨQUVY%c~UMnӖƾˣEq]>u] RvUW]5R5U-s=]ヒn)>,ۥKH0aB6|m&.BnS5؝;wy'<|QGC� @@ 6; @� @� @� -Tcw|'_4ѣGvgϞJ=XmqYgEV!U=_]{Ѿ}B{m;gyfozBkR7U<xpv*UMV={uE] W^in2}ݳ!S 89zi륗^wx  @�>gkd @� @� @�*\\R8TۦJH߿6L vԩʐrJ<Sٹbe)К -P<Åj2mRh .(nq?UMe[ .kܛ!_[ouY'k/v5?uT8O>*z!ޥ,5IF� @`ȝ{Ɠ @� @� @� -PgG 8�^uUikǎ_qfSL.OUd85wR W^N?s TR8U{|q1Ti/>HUmTq@Ze~qAr-7CO>9 ȝ  @�MR@ I.&@� @� @� @))9;r?;iŕ`xXr%3T7UM[߾} ѣGǡORR[mjOtWXaR]7|s\s5~޽cv(矏c=6k~rmڊU}pggϓ Z*n  @�&) $C @� @� @� -5r?<@+{T9vv{?x<xp?{,REچn Z.{>M7ݴd?g}mK.$-I� @@ V�� @� @� @�f@\Ϯ@_|nmmYVo*;~I'T+]v͎^{q m뮱b%߿֧O>[?r8#W-I� @@ V�� @� @� @�f@\Ϯ@nz|5ܴݻø[buӇ &N;q'fugРA裏.]d5}wYSz,i| @� @P"@� @� @� @@9-,vr8c)3F)J+cy)Lo_*NK-T<ѪUB{~gڴiqرcc%ᄏ8~ůoftA٩[.R趦^}ѡCl_ X> @�  @� @� @� PFrfK=RƟpMUo'N뭷^t?!2?G~p@ѢE*۷ovn]w>J{M4v xqg}ڶm y7;n@駟O<D)<g> @� 0w) @� @� @�h ̖)Ł܃>jy_رc6lX#FQꪸ[귭[r.;c7tܹs1nܸ>|x{ゥ)Rw 6[oB4vۦMn;tB^۷/7f /{'{N:eEY$va!@� @rޝ  @� @� @�h ̖b*ŁR~>U޽{n|͏F3=:N:餬 E'N9g}Խ;hР83lVט`>s<r-i>6 @�_@  @� @� @� LzӦM˂ ,@YgweҖ-[F^fiT6Um֥K8MJ):+Rڶ)Sĥ^O? ϶zE׮]C Qm̘1qeE[}ޛmY6mp}߾};?Sbώ~8;*jj>vZ <8;/*Q?\sM6ĉkrgu� @@ 6 @� @� @� {GlecjőGYֱ&L}Q,Ѻu3ӧOɓcEVZ)Zh13C� @� ȭO�'@� @� @� @` qwf7H܍6(fRn;r,Ng۵k7&ad @�S@ N" @� @� @� 0<H :tʎ;.RKM @� 0'r焲{ @� @� @� PR /cƌiӦ͒E˖-M6ѡCqgI @�(@n,D� @� @� @� @� PL� @� @� @� @� P>Y� @� @� @� @� @r+pM� @� @� @� @� @|4 @� @� @� @� @@ V࢛2 @� @� @� @� @@rgi$ @� @� @� @� @� ȭE7e @� @� @� @� @� H @� @� @� @� @�( [n @� @� @� @� @�- @� @� @� @� @�*P@ ݔ  @� @� @� @� @�' [>K# @� @� @� @� @�T@n.) @� @� @� @� @�O@ |F"@� @� @� @� @�@ \tS&@� @� @� @� @�(@n,D� @� @� @� @� PL� @� @� @� @� P>Y� @� @� @� @� @r+pM� @� @� @� @� @|4 @� @� @� @� @@ V࢛2 @� @� @� @� @@rgi$ @� @� @� @� @� ȭE7e @� @� @� @� @� H @� @� @� @� @�( [n @� @� @� @� @�- @� @� @� @� @�*P@ ݔ  @� @� @� @� @�' [>K# @� @� @� @� @�T@n.) @� @� @� @� @�O@ |F"@� @� @� @� @�@ \tS&@� @� @� @� @�(@n,D� @� @� @� @� PL� @� @� @� @� P>Y� @� @� @� @� @r+pM� @� @� @� @� @|4 @� @� @� @� @@ V࢛2 @� @� @� @� @@rgi$ @� @� @� @� @� ȭE7e @� @� @� @� @� H @� @� @� @� @�( [n @� @� @� @� @�- @� @� @� @� @�*P@ ݔ  @� @� @� @� @�' [>K# @� @� @� @� @�T@n.) @� @� @� @� @�O@ |F"@� @� @� @� @�@ \tS&@� @� @� @� @�(@n,D� @� @� @� @� PL� @� @� @� @� P>Y� @� @� @� @� @r+pM� @� @� @� @� @|4 @� @� @� @� @@ V࢛2 @� @� @� @� @@rgi$ @� @� @� @� @� ȭE7e @� @� @� @� @� H @� @� @� @� @�( [n @� @� @� @� @�- @� @� @� @� @�*P@ ݔ  @� @� @� @� @�' [>K# @� @� @� @� @�T@n.) @� @� @� @� @�O@ |F"@� @� @� @� @�@ \tS&@� @� @� @� @�(@n,D� @� @� @� @� PL� @� @� @� @� P>Y� @� @� @� @� @r+pM� @� @� @� @� @|4 @� @� @� @� @@ V࢛2 @� @� @� @� @@rgi$ @� @� @� @� @� ȭE7e @� @� @� @� @� H @� @� @� @� @�( [n @� @� @� @� @�- @� @� @� @� @�*P@ ݔ  @� @� @� @� @�' [>K# @� @� @� @� @�T@n.) @� @� @� @� @�O@ |F"@� @� @� @� @�@ \tS&@� @� @� @� @�(@n,D� @� @� @� @� PL� @� @� @� @� P>Y� @� @� @� @� @r+pM� @� @� @� @� @|=;iҤ= @� @� @� @� @�̤K.9W~@n>Z  @� @� @� @� @�@ 6 @� @� @� @� @� Pl[]$@� @� @� @� @� LrB @� @� @� @� @@6 @� @� @� @� @�4fA� @� @� @� @� 8 @� @� @� @� @�D@ ,i @� @� @� @� @�4@n㸻+ @� @� @� @� @@3m& i @� @� @� @� @�# 8J� @� @� @� @� LrB @� @� @� @� @@6 @� @� @� @� @�4fA� @� @� @� @� 8 @� @� @� @� @�D@ ,i @� @� @� @� @�4@n㸻+ @� @� @� @� @@3m& i @� @� @� @� @�# 8J� @� @� @� @� LrB @� @� @� @� @@6 @� @]u\��@�IDAT� @� @� @�4fA� @� @� @� @� 8 @� @� @� @� @�D@ ,i @� @� @� @� @�4@n㸻+ @� @� @� @� @@3m& i @� @� @� @� @�# 8J� @� @� @� @� LrB @� @� @� @� @@6 @� @� @� @� @�4fA� @� @� @� @� 8 @� @� @� @� @�D@ ,i @� @� @� @� @�4@n㸻+ @� @� @� @� @@3m& i @� @� @� @� @�# 8J� @� @� @� @� LrB @� @� @� @� @@6 @� @� @� @� @�4fA� @� @� @� @� 8 @� @� @� @� @�D@ ,i @� @� @� @� @�4@n㸻+ @� @� @� @� @@3@~_}U|71mڴ>}z3YB @� @� @�W`y扖-[Ƃ .,HjժN @� @�@Er'L_~eaZh?c @� @� 0w T..� @� @b} wYU Z*o>q+  @� @� @) *cĉYT-wWlS @� @�TYrqZhX|q'i @� @� @@e`)SbԩRneY @� @�@ ~1nܸHq_~yaܦ9  @� @� @@-)駟fr[nZ& @� @�sFYrO/eY&Zl9g4݅� @� @�ӦM~䦟� @� @@c 4@1c"}CnWT1?ܛ� @� @�Y pǏhӦ@n} G� @� pf>-Zr-pW @� @� @�s'|=ߪ<`~XG� @� ] w~ax+B_D$@� @� @�&g?j� @� @@c 4@?}Qf*XZK� @� @�f@>*ļ @� @�u m @� @� 0 e q @� @�. [�O� @� @�@nS\5L� @�hwm͌� @� @�4[f&F� @�hMr<4 @� @�l^'@� @�msۊx @� @� @N:t @� @�sۭ @� @� @�( @� @�-Q @� @� @�9( ;݊� @� @N:t @� @� @�6ܹmE< @� @r+{͞� @� @�4I&l� @� lrҚ @� @�hwm͌� @� ryf @� @� P ` @� @�L@ w.[C� @� @�- [ @� @�sN@ wY @� @� P&2A� @� @,ea4 @� @� 0'r礶{ @� @�% [v @� @� @`ȝ @� @�*Z@  @� @� @@m橛Gc;K/d/b[5IxF:xIsGmcZ73y� @�[@ ܢ#@� @� @�f@l'v 783g/H,آq>{Q8g@]w}_s%W_n/ +,W8g� @�M]@ '@� @� @�( [E Ï?V߉O?Z-$kkrX}Us|a>q_;kۜ$P,p]SN?Tam5чXpΜHg>ϿR|ɧ1yO\0_|hJ9H� @6 @� @� @ oez ٦}Z:5}˯.D]tʳ1|죁@ vۤc|=ujIuZ]HA3=TnwĆ֯W_ @�T@n\o6 {g,Mp� @� @�̚@{]7]Sgy瞈+P:5m\x{cu_}4VQn{X+&nU}4_ŗ_t5,]E @�Q@ wFL vi1rXeU+ʝW @� @� @ȝ5鹷"1vzԻMW]ŗF:lܮ>_#E,%+aI1=R ,,p*Rs@o;nyq{*9MOV}B!@nC%@�T&ac3oǔ)S7ho34y2dH|1nܸobW֭[Gvb?^^ǎÆ > &LӦMBi::7KmG.4o߾t ._Us=1~HϚ~)=[oVZ)?d^5jT6+<[Q5 @� @�A@ w_zydA $UCMUQm_}h˖-׆B -XOc7{_,.LzڰǏ?Xrw) _|eі;揇ǩ'W|,pyō76 @�( D0n=~zkf`_?_S[nk؞?°}'x"UW]5?"pMQGUh:Sb]w-9蠃pj:t >ׯ_dwb]v;^{a2R< @� @�*I@ wVǭAyXcU| @oI&'u?:?斓3 '+ʫoa]fx򱁱RKdRz-~~YwjVM]\v߀ذ]"GP' @�\@ ,pmaP^-XT_k O>9FYeb̘1U/B?devMV7&M2^:H܎;pz 7oe]v'j ~qGTy4nV-U-Zkꪫ"={96r(� @� @�, ;;-}oOAwTt?E2< W^cN85gNhC~qRwqG wV܁Θ"kӧj՟W_qQ۠aYL ?c;zݎ8$g;}76:1 @�怀@@['OA]~gvr{S0G[DzKPn2{Ǹqs){M7d's?̽Bq1ĺ뮛UMIԷz+x };ܹ?rS-2.u5-nKac=6YgHϖT-TI8q 'gU w\L� @� @@"?̰]n*:xfs;2K/7(mrgn?E <bTL<9EU-c[国!!O??[w;qaG# @�5 2WmH.mg rS6_oYQ z1uԬnh-ގ>=ztvM6ѧOXqݻw 2pn5Kk Ƴ:+nB;š&o雸OvKƀbE7Wy}J9-o E @� @� @fܚ]s{_>]k3{b֮Is@̭ Ӹu`t?Oƫ:F @�\@ w.]9M }YޙԲ.w_jrKV7uJcS6|8Sv۳^לqYԞ%UoŁ4ITy7U]b%] >q9d};u'|roXc5wr<eʔ,"T9_|P*,}^zBkKk'~,~K|}o"_|/9L\pn @� @�V~6_ U⨮W\[Ssv]'l@`nȝUȝ9rM 3Ϲ n  @�9ܙsW5F7MT wߍ?ٜS-[4x7W^Y;x`|p|w}>{Y|ᄏPU8K<;ğToy W\]߱c8/O<hf*>ꫯV oGv\S=6 9qՇZ{p +PA24hPVa89kumYvN;?{zwij>c 1bDt9}k^|x7 cmzW:1lذHvF*\vRzm>oYf*m @� @� K4?]^~M<vzhPá~1˼(Rь~NR2ȴ[jm#Wnӹ-7oؖsC F=7o]ܥZ2Fl.ܸ6ڬ k^αjzV @�f]@ w =Zߠj0nD@nQ HC9$Ru~?/TM|]xz) /K!M[@n �~E]oyַC@n v֭ /-آpܐVc^>Dߊ_{|}ɲ_~V\zMtSԖ>r/xnrKk<UKkO>K/'LW_}B{ O<Q8WN֭3;ܚt#@� @� @@ w>v|%/sy>{ֿ%w-YMJλ=ԸcM7.4ʫv.tf_յ;};v|7>X`+F+^W;lv1Rrn_ muQ11cc)J쿍7 ݦ } f8?l(Ǝ.Xu7߮rا֟yU~>?ފ!<ygbbɹB?QqX&,T7Wxoro=A-k_NyU[maO cs_jKۮ;L" qDW_"u=Kp~U['z&FzϿ4vږXbkloulѢEkcs?-giJmNψfh٦yPꐞλ:C믷N껟޵1y6l1~'1n'1~YTus_#̾Nf6OsHA's7P|јgIŚm׈5lhW[,Wi7ߐǎ+\G-WY8s?8xN;g_56V;>ؓcc'frkBRn}r~nqؽN;iV^ϪgVmo;Q9ys_A>~L,,ŀ[2LCIHƛ~]yֱ:/[gbٜܨt]K{f}Wrdwطsgmj) @�ȝC_;c|gyfscqÔ 䦶:thͶT5UtMs'gѣ ӭ*z^>`LtR[=*>Sqgg㦊ko@n-N:U j %oѐ\U$!kiy*eSx]8P_RP5Y&69眓?̾Qr1d6m.1f̘뮻 СCq3@naN~{UB)+Gz*W2 ou:묓=[|w!U} @� @� @br)ȳ&pjMWzXz₋/kXS'.8̒nXcQ;#k+n1{Y^λ&;~NȠs{ŗ_oqc vޣS$m>-qO|ŗu[ƅΌ6+T޿Z8a~:;ukl˟ѹ-u?ͷ)Ҽ龿3N8[f-u'|lms]/u92~tFO?IAz)|X}g=`x)p{ٕ{uې-|@t;\p1'֐K7F۵kwt8c\W[ow׸ou]ڗ]v{N~cVM5dӠ{,J̺E]$=:lk:[.lMM >kVuw;0z=?Xe]v!L;lVL9z_tYWG ,srwgcU7I&g*U+:8ESO(Y5{3ι EW͸2Wsg  @ȝ0nV5r;@_~'pB;i^Sr6 706dXuUk >#Yta`{QGƨ/'odPk zQ{DݫܦT 7u׿) :5շM4k>_h+2‰νW]uUv*oonU&s=o7.s̏7dȐBgS[Jk۪U|׬ziV7[ԡz s0nΝ c_7[@|Sg)*ΛoGydvzJG @� @�T@n×'7(=UmKMok>U ho(os{]Rra]U}u5i"[S{ pB Zh8=wCra̴ `qG7d*3ME>\ЖNMWF{%R@-}.:\=צJq=^kZ 7UM6W]ӿ*?߲e\uB{ŵk;t_ }Q.؜Bd 7ѻ|Fjгu΅/uVVI>7;oNv}\5;+DwŻƱk:MoZoyOO5UXb 7W @�f@F߮8;7qsM_u<CYIf'm)yo-Mә|ZpMn雂)8Pm nR[ 7=_Z[ r؛^|^~fLz`M}ݗ|rSؕV?Ʋιw\5*;Lk)0)袋/);68\=C.4#GfGz_ջDn T 8f\aEӦM˪N뭷^ 7p� @� @�mc%/<I.Y{z6&{+Rvӵ[j/rSqFm k 䦷W?''w7q%Ez n8AU?}}J'ƴ~3}|٧p}ow/%R8V[ /*#f{VM).x)1j̜i_e_ NqMZS@tfm׈'~~aNrx Frmx U7ݯܓO=3x钏8ܞ;ܹAb_dﮝw'x|s^_|x|}Rt @�-gJqR(7S:B1Vu*m۶zSَ ooV}W |{u֊/< s)@{?U kàu?!://MUySP[n)T+ ȣG(_kg-rUہ 1azBqbmӦM\-䮿qW燭z뭷Ɵ?o *O2%:ue]SOrMAq'޺8{~K??l?"OS :4;䦃o>wy\S8ȭ� @� @�""zNImj 2(}٩=ΉyoڣS\y%P@_Oxۖ >ؓ0nGӃ )l5|\\~{|ͷuK,O>@t'|Km[?z{]piwC}EO}.zT=KL@nN=FR{ߒV״F_sYfrӟ_o smz<4Xdk>/< R%Y?gt9觢:2Nvvr\}j/3묽VC'U OlRj@2,=Sq7)?+ۦl֒6خ%@�@n+S2U-q/fuZo ){+T{M:t_? w=N<Ĵ[g={fr?RH6_5dv획Q@noʯÆ G}P7;#}CHUgӖBiv[tI5^UrNV[-=EJn-_=8J/|~K~Hշ޽{gsOS0UVջdk<mŁ|~7ߎ> }r^  @� @�. []o#8wN*V!CUE)ꈡ/Ptvs]+ZS 7U37{Sfwzh<{cz1^g::tjcԫK].{4,Ђ³RK-Yfn 0#~zgU۩)ײպ0U|'f6@nY6[yTA8ik 䮼RH3[ݴK.D<s?0gvrwc\py*{cgYd~rouf;zxSƽ b_wq7H՟m @�# ;_|ѣG"*UUMKgw7=r¹b_;V\q(pW\QS;#k>oVuxq~W8u 7D;@T /^x!;F;a„ܹsv}ѧO/g?ꨣj@sϭm'SyV\!wvr'OUJ~k|%\2&M H$ @� @�9܆}HR1<<N=*}VuTnvMU@}׵Ma!O?[ץYۭ;n+R$|?X7k;?6-\\9ͮ@ǝRTRrA孶?U(]tEbcsa֑q7cz}M\ʨ5r &7 RE[6>|R|G#US?v;kSxqyUyRXcX.u?OT*篾#/-u̞zx8G{2 6 "|e˖*??'Nz߹w˲KO >GL C5a_nm7X| @�-f cJ(a ~7'ꪫbUViKr8=ߠN؅x˖4aNvs9'_N;Tj|BTq6UMڴ [mU_W 7uJ!|�x5ֈǡUfMCM/YEt5\P7k,/]wݵzgcwy:+ggVF雦)x疱;FsnvUM=ج*nzTW. iT@ZB?% !%" % 4 )% ),tz/fw<ܙsΜ9󙻻e*U*I&HɥFz(@GA � � � �DJ?.ICKlϝI[R-_niPLٻsyuuK˕-%Sžo-uiQA}A3oBҭvɴ#3j)\Ю]9V}oF[4*j+]a,'3eDZE /A ɕ\M-muWj/ ?^6i%۵W 9MDQUT<yj7Q֦s$KTmt^ m 3IRRYɘ!$MX'xTҲ8xX*Ug9t\2x`oɑ=SSg{~NR㽻6؝޿S?m,7 �jLnb969wjZvԮΜ=U[]QUCiҨ]n ?q0Ԗ E=7W7?f̘RF'O؟�Wk˒%]][P˗N9G|o^Hh%*:n1cư~ͩ語٦5mt$U/c 1ƣ[OnI |ʗ-)ᅲ]Vl�_o~_0(}.U(W}wڣU) \b{yoi~ZJy)QA)X0\v]\Nv4h8س'-s� � �\ϭ<2(\K0Wq۵k'a„ ={v3vXQaHl2}ȑ'O}u65\>}ȺuTZ5+~Sf[}UAU+VGxU[C*0*ɞ={VUիWVh]j:@?>S9ukUׇǓ/Ե٣!C N \U5XSsHVȵ}*y:n;2#� � � � E@EWlgtWA3FF=di{= EWaAdSAH4Ths٢*'mknf-ڙ &a={^ ,g{+VL8n*mu_+yT |:rQ%ԭ]]Tb_YHQNmMkQz{w7vj&ٴqQ8wJ/-m3DU5ݻWk 6@ mi34 VZQ־r )ٖ A| Wm7oO[w׻i<}_GU%6/:?XHŴF~nߗ}ʴYһ`ӡ7rȵ=i-Ҩik&}wRnM>Kd\A3V\7\}oִEo<<ӲyckS0E<ec:sx�B}IEKc9F�@�y!o_Pøj+˷zUR[WK˕+gm>} U -aÆ}ڪ Z~zÎ Jj3f̙S߿x4lPW~Վ .\wwUVjI W V&MXϳݱ چe{eN},�p–SR֭k �矒X[Pm ]LՌ3d<3[ ;vT:U$H |\C2;qDQfq5D5ȵa@�@�@�@�qPS;a8FU[4~Ua2Wb_ or9q8;iP8e{YUٱXI㏨WcǏ&U+=pˮoWW q̔pjmP6g$^q/_6V6@n `]^TkOwiu~!Xcd?eh)W] z-Ͳ'.+7<y?kU>]8gra%`rU[;VŒ%ٵ:u훾mr'6I W=Q'NI5 ێױ=޹uJ¶) {ߪm\zvOԪk?̪ *@P yUszUgOM{OmƏS!UjQ*^Tq1t"� ��ܐqu9'\>|d͚Am n-ZTLj;׮]K.&ʰgΜMZT5XulTuբBhUewnիM]/VSJ:oZ6Oj̙3eҤISܥKʐ!C}BG}d=QO?Y@2tP}Ȋ+ӧu*lkj~e˖MT`Um mwz@?=Z UG~HruզϥK-pϞ=e۶mze  � � � �  -6W5hR6on8sECr$չc[ҹx#ϟ(W0/nܸZ5 >.vsUc=*kzVl @n˭۷ /]t :ya[r<)b,Ý^ݹD" ʯ3&_T5V@^g3aV_VFz?H -<h@m;^fKիΛK/ Úm,̙28 $۠~-R'[/?.1ۯSGLx@aZqGW٭V~ڞu~2{N!ڶK/SYm= &NH֮Z$I[<=ٳi2ɐ>ӭmTQO.lYɔi!JuLЉ� � 2rCpVPnHqbN<)͛ʕ+/~B*ﯯdɒzRۛPZ(l**fΜY&M*J`î[2Lffͬjݻzvx͕+{'N9r䈨 Z6UuРA#GKM W>?39um7nkwyjժIԩ߼L(ߗcǎ>c|un-Rf7փ/پ}:np=5kUrjիWtɕ+WdΝpBեocǎիѪ چsVg.ri=0m֢ƨdʔI:@�@�@�@�@�%@ ׳CGaY=gioҫ $Y$cI(j?DU@t+];~pxk:J!Ǐtե͝5ٮʭ7Yȳg Q[7iRn2qt& VVO<t=ۆOז}{HXd1~KOW :Ry�oNjN@n^e,j-uWM2{׾I WUIU.P>KcH*}]l*qm65>U]Us7ۊ)${I B2y(Sٓ(QBgf~ wM;mW=M}߿4i^6=N@�@� w dײqܹs-._U�rʔ)£muS>W*|¯60a̛g?Җss̩$q<oj>u\m WQcU16l6WtUWU||٩'H۶mcU)umK:Î@\V-kkHrU[oܸa ߪ޽{]F?4%`v@�@�@�@�@ R1rVr?&ߌ\tY -gԭpM NP vwD2a/Vأ,+Zm9tz1t^q]y"Cs��@�IDATf(V/vgԸm.ɧFz{Hr= ĉ[JX*/-TZ[_no"pLɟ/=Cپcۊ)FE{x\Us)Qєz{:5dxRebOFC"@qdVU[Uf@ oԲmJ~Oݺt+H;M5Sd11eST Ws6`VAfw'{G�@�BN@nٚl 0Zʺxb=(P@u&ɓ'7\ Κ5Ko1®ƪ6m$ӧO~[ˡ* 6jHxfUZr?S* <{p ŨSUlN*Gu>`R^=7mڴ.Ǩjzrc86M4Ү];)\/ܹϩ&T?ssϘ1ZewΜ9z_ہ*�;fQΎ\U#V۞KXo^j*7c9>}X oذAD9?^lbwTU;t萨eSapUA @�@�@�@�ȵHw@4Ɏ5DjTd<=ԕ17O.Yw7w(o[, iݻv.frY)^ڼMJ~=s߄W@<ybx^Hr= =ZT$Oa$w$χ$vlpu䪀у;fvȹ ݻ/wݻgZ;@jӪ׿ѦBgLtvM g v<lwV(f̱[ۼ K[R-_88FreǓ@zUV_=}TJp1äjgKђ? %G\ � @h  MmkPO?$zlٲ9ܡ ^pA.]W}wDC&LE_vMH[ndɒ x<e+Wŋ�U=Wq|3g9-cī ҪU ISv¨FkTcƌ[0vhmꮺ[o%)Rp XLվTn=*2X@�@�@�@�@ u{$SdEvxqN6|8>r8Ua*.I~_ړGx2/:kwGjkj:7ݾvm[qթF[Hr "~atiڣG.bE>5*{ @ntieݛ٠cN2_+ȑ͆z.,w3G u fr4VxX lIV4.duBuh${pfߑMۓ@mk5.J롻=r*ꭓ;x=s+YlC*{p� ��Z � � � � � /^U Ne>fNA Z7{e(J]g-ҨikKH_eeֹX-vQAc8v\?p M^ߛU}\Rҹc[QQ=B;m TACF xT|OK '9{^[YWu4;v&L GA 5*mo\پ֨۰]҇m͊-vC< ۽Q&Ilw'C q � �_@n � � � � �N@#߼e4h}UUY{g"Z`>( E%,]Rڴ2˴_Z'XzhzjgЁRvuW]m543\uQ a(?ajnU˦n?a1<r7l*|!>4|^/۷%gbܠ~-:;1:k{N;@vxptid 5x]lɛ'TG ׎@�@� L� � � � � �!#@ { uɻf̾ع[jou1*8k}#Gm!ȵ\st-yNҡgS@ڨYkQUaCz /ܗ/_J,lU(_Z&<ʨ۰JOdS[V;}Mk+Arh'x7pp=o6|ƕ6Mj!r8&;wЂ� � rC � � � � � >}Tr/.7B=ڷ]:|v_rUPUVͶwR2u_dI;={^d:Oͥg/MǸ̞ܿKo @eoܔ  ermKׯQF͐|ys.4ޝ wu ScX9,bƌ)3e I„ $~xP >㋪h4K WCJ˕ oP|iFEKTuׅx۱7%QDs':fڽ̙)#kv#kO ل@�@ 䆖4A�@�@�@�@�@� 5\jhx@OV6_+:C^u.svH NS0^c;?)c6:ga2~Tӵ.pg; $?wPi\<ݪW(cpxxN6Kzlx#;KvRzeg8Rr~*پvrgZu|d_Z0ڌ*}-I%Mg߫ӠFQ]brMhA�@�BK@nhIs@�@�@�@�@��\cʶ%Vថ:_P<07zTRW*٪[$^_RiUl{Ӂ\ǵ=BvGΙ@?8XU<ydj-];~I˲$uc,@sQ-Zu,ѫ[ ܽn޲]4ji:YOd@Nc&<e{3?ڞE<{̶n?K̲vvm@u6@�-%u@�@�@�@�@�@gr]Si|O\BM:meemoټ;!m3ٸyjը*?d龜6+MugM 1Nh+Y=w5rm*VHmv߻k$Kĩ]5@W$s|mڷ]:u۵/_ZZlx,{JZ6 "~aد:F $kVuC 5}j͆\)U\2EUkI Ք?wʾEܽ|'oRru%3LV.oo8s+Yr@K@�@�P *\@�@�@�@�@�|)@ ׵?J]wY&nc:<|(93 ߵuDh}\|ҥ[/ˡӫH}*Qh_iqȷqz+vpt6ǃo%O,c SÝB";e,9}㥬֮n=6a(=vYz91Ǔ㤾d^z]}T2vcQWhft훾ߍv_r++-'2SU=}7G>ˡWWPrF[2a$NFCoܔ%*Çm;c|+N.x~Ni׻MKwh~M'ھy:"s Ǩ͓0cPϸJ<mf"E tB ׉ $ � �&@ 7Ԩ � � � � �J@k&u\wiRyHl->n4":E Tt7!UWsiՄ>}jukʰ!]vZvŌSX#,/^tu-kweɆa@xa=h'$ Q&NntII(}Ĉpcĩ2p0ˡӫ 8[bŊԧTMUulS\du SUT3Ͷ/\RC(l^V= fW&Α=Z5 kk*;vv 7O~@>w}NuԨVIƌrx>FF٥1o\l9{|)-у@.rMhA�@�BK@nhIs@�@�@�@�@��\g۷%OaLܷkEuÖ9~mqp?1tD W]eNbߦKҹttyǯL+<֬QEFp]ғZ@T)Szѣ[פ?Yfϙ6k9)$^/lo׮]:n\]Upرeap:q^sv:B}mUUJ.+I$]_V~I bzrÖS^E&kW)3wsln w֯I9Ntܱ}+s{U?.={Կ6Nth>e.Ck࡯x:}Vʶx2aQU]mRy/$|+WS\g& � �%@ 7 � � � � �L@3'U֮.#t>ً7oIނ%MT &;׋mhԋK8 @hО٦Be[}*ŊUUm*@vyYPW5ì2d)}cǒtig/\$\5}mvB"<x`s%]U{+N;wJ mfgu'_*kU*>Wk:S|M9v%vU{NRTqU x$½0]e#ro:.\u~uQ3eS9gZ5U5O30i\xfx*Ў.qkZ6oWfO&ܹ{W8%Ӧ*;wq{y毅:u6@�-%u@�@�@�@�@�@gr)ko&;vvieOR\)֨Hv䩓H%LxR\u1&Gy M:ĎSN<6kT)2ruq2|8}6zqSC".gjJ*wY{5ۢɺ5%Ct6o. 4툥=OU6JԨRP~ݷj҉ɦ*N*}艓<I aeԘ g2E y^vͪvcU8xXj64owa/ƍ+!iӤ6<?"rl a=蘨UحTH4rMhA�@�BK@nhIs@�@�@�@�@��\{JU `+#:<gM"n:Mjd̨!c< @t[G 3{RڎSD6Cĉm촯k\ٳߩϛĉɊEU:5 MT WG2B4dЀަ,Pdo+?8@(P)QoU(WZVtO+W;sȠҰA._rՄcOACF˃F Z5N lRA MlP P<rMhA�@�BK@nhIs@�@�@�@�@��\{ʟePF#UVUvY)^<vmtDd=!U׿r4kN>r<2۲9ۮ?jq"`l۾Yˣc?2{D)ZbR\Гoxnoq%FnOS^UWo ux͛%:VkRW:$D,I0\;u,(QHvkn5&3o_l<ŋq# !lK ل@�@ 䆖4A�@�@�@�@�@� ȵX}Kz5Z~XLU=xi6*w @ZO_?}.W?sȡ%kw2ko=r@Zͭ&jgΞk)._܎RVu-۱jE}m9zܣjPhr5##Gvlrr_$e*Ԑy Z1oB{ji kdAޞlr͕?(?'_QF/\:o-*4n#,D ل@�@ 䆖4A�@�@�@�@�@� }Mp٦N{w$ F Bm\}̘5O+7oݶ4y:UJk'=Ihrde,*`4LҥK#];Zzo:C7tQeʘ^ztRʗ-G#<:Mr/]WsG'5.Zp1azug_UU X|ܸyˣF W-DUMGr5GDB4]ul#Ůt;YrxҮӃʠX<=E9~mvoI˟=y k׮.saRry~Keb%+[]uB# � *rC � � � � � />r 5uȂ3\iRL'=۵A$o:]/CQUeUka؍˗eN%M՗61czrƨ*Ϝ Z.{$]4n挒9SFQ>]mEJTs.>.:sS]Yϝ< ~~Q-W^s˺ Cy}-)Z­Y�jPW^ɲVɰcӦӼ@Z7dVyery#/VXz~E{cTP՗\5 QO񫌟0ETl @e ~[ -wY _%K*ukW׫g̐pQ\#v>E2wA3cǎ%+OגY=~B3\gZ@�@� Z\@�@�@�@�@�|&@ gLFrYr\r<~X&HW&Uq +5l2m m*<B[`]{>/ok$I$I$V7%Zh>]کK^tY.ikn׉'$BTe /UdLN}7NqW*Ѝ+'LBʔ*Wk5=ɓ'\}}^_G)SmI/{ u{ƽP?)ڷyUvċWM 5[wE@�@�r#S@�@�@�@�@�dr#?y-Q XbjE=JM_7� � � � ,>NF�@�@�@�@�@�7!@ Ms͐ذiI+өG^Ԫf:ym)SܸyӤPA?d4"� � � M� � � � � �N@n{d,@+r="ѢEΝJ-%={K࿇ Ǩ\9ߗe暎@�@�@� @�@�@�@�@�@  %LCe¤inK8TPV%ɒ&x+W gYz9Ԁ)FK2%= @�@�@�L@gNB�@�@�@�@�@�0$@ 7 = l'OHĉSeKQDq7~@�@�@�B@X E�@�@�@�@�@�!@ 7l<V;#GK&uXB2}8#C � � � \|@�@�@�@�@�uNCAKr _D2iH;fB@�@�@�!˻�@�@�@�@�@��pX>#ɌGe<,;WϯRƃA�@�@�@�`  6! � � � � � @h  mqw䗩drE.O#ʕF J̘1: � � � �\8@�@�@�@�@�ް�7�| \|Em%'7o<|P$/I'$IH$%χx?~P]#C�@�@�@ ȍ�@�@�@�@�@�p(@ 7>4� � � �D`ȍώ[C�@�@�@�@�@ MV$J(�@�@�@�@�7'@ se@�@�@�@�@��`r: � � � O"| 7c >b!j -4A:@�@�@�@�@�:$GTR^c{\[ @�@�@�@�ޔ�7%uCD@n2) � � � � Vܹs~TVͱɣc}\� � � � rCCW͐5G>s> q1@�@�@�@�0 kHC � � � @$  rdEis � � � � 䆥Z@�@�@�@�B[@nhsp &Hzv˕+k:N@�@�@�@�@�s'Oʖ-[mڴV&;vqڴiODbY=,}"� � � @8H?v857  g"� � � � @ f%7U@�@�@�@{ޛ3^z%/^Ș1]]@dƴorܽ{O 2d*sj � � � � Fg!� � � �x.@\ϭw2˛ѣ%K,rT8@�@�@�@�@� g � � � �DYɳ/d=t~ydHTi7&"r4EztVZukI„ %J=!� � � � @  Un.� � � � 䆱<zT-%CGWX~Y8r{+Mɒʿ!\eoA\B�@�@�@�@�BE@n0s@�@�@�@�0*@ 7>,¥RPq=ۺE[s"ɛ?,_C J � � � � ,d@�@�@�@�p.@ 7?@:zIU7(M//.OKdjF-\,K~ȵR� � � � �K@n8@�@�@�@  v'O_ɗI\uG$ھSG�@�@�@�@�|/@ ̈� � � � ~䆟gȍ5H^ Azq � � � � ^@{#F � � � �D\wF 7<}TҤH{TQU&M`}v˕+kmc@�@�@�@�@{ޛq � � � @ q;!_*䪭K/7_YZ)A�@�@�@�@�%@ 7X|� � � � n1sٱ{<~D.^(Μ3eʜQH$Mbe#k`@�@�@�@��`q2 � � � @8 G@n@@Ԯ]ێ/;JW2nh qp� � � � �Y@r3gݝn~6mZ(Qs� � � � @h  M7pUr7m(=cGɊ+uyrΓxY\+; � � � � @@�@�@�@�¹�p�-?2rIt ğ'Koz=z#:wr � � � � � ,>NF�@�@�@�rt|%Cvzj2qV6V v@�@�@�@�@�`  '#� � � �s[>:QZ dúRhaYw+\+; � � � � @@�@�@�@�¹�p�-@n` U6hb0#� � � � �A D8NC�@�@�@�r#c|}WݕsnYw-\iaaUkcYj~_$,ZzTȵR� � � � �K@n8@�@�@�@  q㧬86;WWZ6ة=7r}]O!2g6[o@@�@�@�@�@ Xr � � � �\@n8˟8}tcՓ9@adЀ۶{d̔A'ޟ8G�@�@�@�@�"@ 7< ց� � � � & ubF}{KR-qQI$Ԭ^KRL)ʕ� � � � � �\8@�@�@�@ ȍ8ϒ; g2lyjђ%KVv@�@�@�@�@�  g!� � � �D 9r rՐgϞk֭r=2Ď@. @�@�@�@�@ r  � � � �Z@n~|,Q] qr:vq� � � � � �\/� � � � FGo@n~= � � � �9oΞ+#� � � �yo !&S!� � � � �^ � � � �N@n{4;ɟ?#� � � � �;wNҥKg2·]iӦ???%o/l � � � �x!@ ,}aB@�@�@�@�r#s@�@�@�@�< ‰%r@�@�@�@�@�{!� � � �D.yG%17� � � � �aT@n}0, @�@�@�@ T 3 -=_ Kr@�@�@�@�@�Mɓ9sP8}~iӊD%Ԯͅ@�@�@�@�p (q G�@�@�@�@�p,@ 7?<� � � � l&d$@ 7,= ւ� � � � �I@ndz+ � � � �\Gõ�pX< � � � �ct@�@�@�@�`  6!%ai@�@�@�@�Lr#^@�@�@�@�:p@�@�@�@�@   #� � � �[@n ,  KO � � � � @d 6� � � � (@ Q$?}B^z%G@we~+o2{rRyň!Vf]];ޅq2e%f>_ܿ|Iή[6{z-V,__Bέ_'vls7G0CF69sZݣOvܒ(Sf}rzJ}?;H{)lYyĈ'Ueι5p~\@ZI7 \ kw_O[]/hqgǒ-]"ɟm+U9{ xV҄^w-=(>:� � �D1r � � � �A Dxdˑ3f19|<ԗ(ny/m iVdI<,.gkzIyޗg3{ZE{92¥4{>ǝGnɋO%Fܸ#^<n*,us}\;$N2knq<i-U&Mpjnysd}4ž+4n>q\V)g,[^*99*=:0p lY}^?^|% [ л?m?�)$y!q3 x}mjA$ |tµÐ5{UT%M*e>p1ꭇb9zn$?Uk O"� � �-ay@�@�@�@� !zog.2FE% ϝ=;r9?yBr7L By%5o>$ZZ=}[6 v@ ;~Cj<pBEO_(Sv%%[Dl aYʶӗ6G))?ˌ ܯFmf1|A -$OG"{FN0r+,@�@�@   %#� � � �L@(D=/͇OUp"N"qbFg.[ պ|1bVیܻg%Ö$Z8nm vׯb&2ÍOߖZHbҩ${hC`8U%vh!v-;wqv|7ilZU2رhwB{b}Jwh!� � �DYr' � � � � ,̞ǖĒ/s5I)ϓMz/f#8 ܠ 9ÕiP\UL)^/6OY); Q Q00$~W2SQY"SXoAY � � �DFs � � � �HZdx(i&]D;o܀˗gu-I]dYڮv$]:v`<ڴL_DݶI5-BWrqVy:vDʼn#I吴>x+77G_ط}M'*eK1?[?=I$RbE/w;w徔|ߖooJ٥O\u=G˹%qXR<OjTv*]K4 ۉ+.m9s[| M(eL"%򦖨QXs}nIʤq$oR\;gkӧ/'r<M_DZt4=ZTfkZl>#ݗwKx1%e8RH >%^g/dٖ}Rvh$A,Y>kI͡ӮY&\d+Y~A$Rv}յw.\|O{RƓw$9ޖTrԁ7Żzz~٩7Mrk{B|H¸1m5n{ɮMfOةݱa 9=Wg/{r8V[֫Aɼ;]}k%lJiFۋdÞK{]CgH,ErtLl}#;xqbHDD]G餰v/;/HhQJ {Zd; � � �x+@ [1#� � � �D$iOw$}2K#7gwx ^BVthv=%ק-ƮXĩ'Yrv_\2܇7oȺ)^ˍ-+UkE XN*u<y?r'aˎwÔ~m(CgZ Z_L2Aon֜CZj]O;շƢ ˑ,*dcǢ(}S/Bm *I fޒȧUsȷ[,;<umJ=IKqیOrKz7<f=6QӮ"-)@?;AݷRۭ@yZB*Ng=V;=;l ,93'w nۡ}>+hdK:kL^tȮrб~.i_7]YY֫uJeUq=rMweւ+n7L,_kWoŎ="R3௭mO1cQY<]9߃&�@�@�@�/z p@�@�@�@�%@ 7B=N㛹u>V\EƃqOX f-ZUn?y.Ly${}IWuIqqIa^6uplBy80 wk(kZM k2p~j2yz?^}I]r7q^ZFM}us*eV!7,rmKGT5:ڰJ:rz5ߧcNo@nɳ/�rA$s٢?}!* lfuTLܡnJ҄exi)dwBĪkoUaHb9Je~@BZa\'rJ_,ǩ-Vrhj?|*Nݖ[ϊ vj[x y^×jm[TFM}KSUUզm퇲FtE1OnX͹Rzu -U`Wm)%e A٫pnBiEU"ՎUt;o y虸 LIY+I/*K6UEVm_5#mk`k Ҩo~gÖf<VAٹ"u;%M��@�IDATKWfYmHxm=9 (y9}`U_Jf87UUA}tmGWr=d@�@�@� @ 7h�G/OvmZHN^yL%Wݐo%۷z㷡>EnCrqӗIOK/Dju7� � �A dukejJ̯\NW&/z>*~1_W}|L_x.p;*`&uus}Q q\ӛ@1dˏ+*T.ErS]T8Qw$ y#Dخ?~G]jhf ɳRxQH6k}R ԗ+F4oO$_Mg5B$~|]1e Z}]®ڧ l!H6ͼٓˤ%AE9{۪Z\TԲUa?T .mFV F\<U,|j3 Ԃ} ByBn=em%1FT3n bMIɚuT�R*;*ЬUPv{mPL܁lUv'(%{Zںnrmz8iFWsger]'ujUwL=ZT+Ҹ*}_UIv @[' ƎmsIo˵Ci{}` ѻZ7@rSI _;KOF_F'|rv@�@�@�F@7Z7Va?}%wד'+2un> mwd߭=Ya\r1I4ݵ.GҴmT4bԪauot\< H0�@�@�@�  2]9qsmJGWΟCS&,˕@Ku9<8X5aX \iN})90/XmU679V e}sTU/omZ7aP˼^m]G>c_1ZpTkkAӸvCkcUUU_V{\ 64y[_&} Vq=Snӂ,!L5ǩբ&lxؓ@mI)-믪oAk}Uضm wOխl�eLp^1YH^UdU}]}=1Q\3V!mu ज़ψzBʐ @�@�@� @ 7,<5ع[jof2i+c mP?q 4Lj)dۦUG חgd՚uɒ% J Fʒ7O._^�`q2 � �aA2.߾+G>v$KWf|Hފe& ky yUy.TXR˯QmOݕf kCUP\S$Iay8t,rVTE}?QkS1ULmX[R'6g'vn]MkPX?,_쪊'/ܑ$ bi{^ۋ$K/{+|N@rdH~}/cY<jCr<~B_ڿnc7h.q›zȵzbA2Sכ~InP_r-SyA5qFѹmO1y=WVtJoWͿ//O8}` ~X·{Á_[϶.L � � �,@ 7=W_-XLif7s}rO<%:yC+eJ ~Y+ OOK(l۸B/V"@Xπ{G�@�@�  a?ࡴ;_T(7N21E !@n ^RVo.ԥia `/XTf_<:}[uYf6a>eK 6gva[1}h"~Q%T\UEU+23)Oz롺u++,I6@z�{t5X1x6u:O`vik*g_E-Yr6F6$*@=[ s#=4U*tӗJC;%29T}` ں~^.q%5zu0  � � ��Pr?K@@ute0ak;+CJu]>ȷ7lP | @�@�"�<~*&.㗮w8Mə!U׷E 7lr>O?mI^?4{@d'6mwY[`$q${֛}lXSe}رrsfN* vJK@QUlR9"Jf:}}ukI\uOdxi >�tvZ!\Uk< _m8-_ܤ gOOX|+`)߹19M< 6J"fU_KY ݗrKZ/g fKHfm섕@mֵޗnZh} ˯ K ד@`@{AzA�@�@�@  ns2i۷L~4m r;,\lmE_A}apӏ+_7o޹& � �DYZ/ʁ3AͪJy@n ^ܶE7kM%|RfD~?zso&ˎxtYXf%ad܌/uɟm;�:VQs2՜7B5^z%g.ߓ.ʼ}կB'+ڎ7۾^.IntRŗ?~, q-' W?|Ӂng,0 ;LT,Lcױvw'v v"(3 ￞Yּk\|ZQ[}W<9ǘΥj!6,K⺑囹㏺4}?8\Sre|eL 0&�`L 0H\;V'ҦM Jxŋ׍QR?wHmJC}/(#e'~H|{{z-{Ou70'!uj0Iwʻ@CDѬIðkj9eR$IX-"W^#a„HҤyam(*% K,YRC&R bhpHh(>|~ƪ~FzMYݻbɔ)S<`L 0&�`L cfa?#Ù>bNQ<r>jv9)Bn6QapCyq!7"kx}V7[2Ϟb]Պ(м~QUuVϘ1u릔c:# ;l[)bhZgX!v]N_}Wȕ[%O3+XuSTO^-񋏨sh*!WwOݦy_Q125 I.` Qm4F1?1X޼}{`7&|m-1ATob S"sٛ.Zïȱ4cGHIu?IuynO@n s`B>Fakk9�`L 0&�`Lrz K+;uhca션9gؐѽș:R6A/\p-JM$ ےѿ_Rgh^ڦw.ZQH+V0̜waM8y"QB.7z( Ƌ^<s\.B"c IBY m[7ZC. 6/x"t*|]#n8ȕ3ijht?L I^|-r0CsȟG` \~Zp z(I*s٢ȓ'<L\Iݸi;n߅OgHRؓW=/: 9<ٲeen<_eQ29u湩_6 etAE/M\\^_nun߽OdڬY3PP;JTm[C8r]k/<Ϝ$˧JRQ<-No[l5?xo߾!Ct(Q(Zl*t0$$+V} YXXd1vl19}<,_sM iLt^'&�`L 0&@T`!7 G7+wŪUE҅q1Tlrvj'N ]U8,Ynrwͅy}v3P*|2KV<xqD.Iq58OD+_x3)K(/J937 MaJKC6 +$hUm˂rwy<'3WD9%4KjMmKOȕ%Ϫ37^‚W\%.uik5dw_Yrlkx/MI1~ EfŴͪƔ^崖yj=]:cBnx7 1fLr}ӎ) v^5kDc+GG�yjGZ8 Ľ!<ρ9 ,@}=ǬY3ѿ&�`L 0&�`kL/Z ݹIH$VZWC].=Wk%1Ϟ&YuU4nϑr˔9vxSegF5;9}|>r=1_O\hTu4vVu3lJ`ʅ"lۉ ɯ+Cx<A*uM۵E *#E+u# 4W}^ӧ: # 2lǏfP$nq݌".<tk޻jc\g0;bDH^@BUk{+H<s[h-E&1_7Q} ]hױۇ $e ʴ3\l>⼡ycV E{C0jDblzQ߾m iB#72&�`L 0&� Q�5=Ǩ5J_ g>ۅܓں5`HnV %3""zvţGK/a"I {*Wq,Sf-ܺONz2.22.Η"/P0ᯋ#u&ILB0B. MoA{өT"~ >ƚ}ѶN>43¦Cw1jebHHiN=إ甭F;Yn9kFᜩK{wXD&hS6<u5$viXV/ Ic}bɵQ<owbGaLȥ{Rê@+$LYe"S\e#tb6TITTPZ{Zb*vݷ{!|Ș& =XɩDz <,"uL 0&�`L 0&[k^'Uw蚺dpMdIm"=@zD8qU*"2*E蛖p1$NHe/on$LPHkUGrsQmI.$3NmP-pE?=6-|ԒI-H)nQE'K?DPKz %RGIu2dH3g/'^|-)"]Kh#00;w-^-o%#TN*w<4hJ,Y2-c OpixI,kIR;W%=|6%!ݕ^=:U #BZwϻsQ_-Iч[ܭ>*[gCeNѠ< gña]̛5U=j!ΘɦAӞn޼{4B2ȝ3V݈yrf ;.T@E=0N?ӊ!y"D'ϖU*lR{O}9@8dH4iRiQB9|Y?MCV0n`L 0&�`L : xVkV#rj{"axc^~hmQtV܅i_[9kNw6ן7ud]ku?1~ o\%$=/*Ș0`7nr -/QZ7NWe^!֣2>ɊUֻ,E5ǽ]kH~w\S?e]N ,>O̷{4g4O5,X*ɨRxDL8{(SP?^U*InO%人?9yc R} MJ9 'E6c牚_S6c25\\ X糗%]2g!Ubt4)c|t s`B̙31h`fϞ~4Q;J0&�`L 0&�0@\PbZu{+;0y(l\reK)m :]\0g)"jhMJS&FVE>Lr/ɣuV*D3ם{*d̐] KLJe:DEМ8~VZȥDwب%SQ>}"a߼QI%yYzr0IMm7":�=w7k;D<͚4K-=+mNRt[t28R.[6{vd9ƏfOE:S)eu>_eQ#:qaJͿ" uFk7_D/, U($ΝoЋLF-B&IճrR TG +P+G󖝔3K)ѦC!Rݒ3P,3 f>mV*lw݃~5,zo=Nu{T)Gz7 ԉᆍ[3sz- ]ݗL 0&�`L 0"BnTyXa-rew}ྐV؇_ɐ9e"^!w Jws;3'<kWW/+{6$X{r8>ћ*-kN-~իW_mgPrLf޼25_H2ܷxM cPFa3|.JO )*CWLn?v_oELmX9:/� ZYu+|XDv%2a-#Btմ,5ZVœAPBvѼ!VHdU=- %6%c"m^VnỘ0L6%@s>)Ƅ%R4Q)Zr$!iB.r_*a"RfHޝٿ"fKy,I0=^;I$)gyC*n;=/U UJf;h̒ZB(^"9d!ה]$Qy/N9=k! !sucl ..?޽R$\F�`L 0&�`L XȕIu?SbzGv"ʉ"*_]DO}uhW_ -OOCCCC,K9!wݪERڊP/uˤev9K0Ŋޝ1RnW n-WG{g4a ?`jK,<m.^!ڹ K_D)[?MF.|Tzè0E=t:u+f)Z \Ӓ2ӯY#LU+I*U'9g4v4ou>_yMc:X)j4ɵUBH $YiLmk5rC^{)tjSB.OQSH7&)ra={)$IXhն!#%XgXpXX]v1uf:IAXM=ǖ"Z/@}K1Iy?>P<`L 0&�`L * tyh'#F;\08?|&N2f/bpH}:_ qH*2N*_KYēZ/Ȁ\ֈ1SȺME�>0^HhR'1yH98̜&":I/Exh)k}33Ml@)Gq[]tҥ'/ `L 0&�`L D.r#gDg WUY@>ڷMo-: BtC/ �#]zǁnDN[?72L6U% FEb6RTVJ"TF}6qD{VK)pXqv8wKt!!\9%V#Ib7<L:X&7K$5E(\wklݴ e؊CeOYΌ7.n\=cPT+Uk(BR- $X~b% u8,Eg0hE ;otVJ-YҙJ$ W@4-)JGB8_U5+juϐ*)25e,Pi$sD$[kɖd{J$蓨OU0&51&�`L 0&"J܈qfI\<0k/zawZ(U0I`Gڵk(R2#)G6&�`L 0&�`a`!7,:v;:t-9|ztqޔHzW|:0M&MA{aImelVBVgBՍV'$=ivj|Ԩf'7;nm3'YJ?cb!E')[U+^j+u2+WǘSEqѡ]+aMrV>]%{Aػhڰv)*W,t̢E a߮_+?:W٤LT˜K<cXΚ"|eJ7e,SwYr E;>}e*ECj~t͜(U bu|TG<+UwĝD3'!KLJwcν3`׳{':@c(ӹ{?<tT4tE u:&�`L 0&@`!7J1Eܘ"2 }*dGY:& ~WQ0vNwVM{2&,X޽郹sDƴ<`L 0&�`L `!<[ط<yV*+J<7_ za8q@(e[$Y$>j(*)mmWBԑXH!E Kmg]v֚O-ꊂZ+a#%I1ph\&8)(}{w߃*eS2ė/~g]3&IJWYyL+iMۀY9ÆF4BD^>| Kد'JD;Lr+W* kMK>̙2)M Cu=HH'YYNޛVcrp7/CeaL 0&�`L D5r0XȍVܼkqIߔSjDJ3L D}aH(.]Fƌoq^ 0&�`L 0&b=rc?|@Rv ҃>s C}cUHH.^-\뮗*ۿOw(Ə^ҽ shJ#RbF,'cbqhӡ-\׶c+!/]FYڶ$ݭvڇ1#kvJWYΌmBnT4hJI \<dŽ {Ct(\ʘk?}|̞Xڕ QJ%7Ģ%+~,?4qxq_&�`L 0&@D Qr<, k›bZ,9hre6Ȝ6_Hc�`L 0&�`L 0&`^XȍXa J}/x']{^Cpp2U|yD$^tdB."Rذ˶8dBk).^QS_ti1r@yW)eϞ Ŋ6X寄\1oHǦF8]h9;[,9}85sTBnTKqࠛ§s67Z#3+I3ҭ?Dm"3/,Y2#%'O&7n?Ew"o3Bn8qln g wF׭`kS\h콙;)1Wsl*v12VM6'&�`L 0&@t`!7H:Bh̋0H!k( EHii)s$L 0&�`L 0&�`1Gܘc/L8)*' UrX~ϝ+٭w*(18ϘDl԰ΚLkBKQb9e2&OǒeEhѼ͘X/L(L)BnrK_u,&IJ} Nxn"-92 Qq.;$F}%VɅw [7E6Z 7n,Y0 utfsr)0aؿS^)ΪܣfӖ2l++9�`L 0&�0,A6"� ÑgaL 0&�`L 0&�`L � %<F*bҪU*bE\OpݵO۷k )1@\(jeiq1e srGn]+4Ij۷kĮ͘X%+Ç�H/y*c"c۱Kv;.߽cJ/V{#♣"ү< }./^BZ 5W`W޼fAW$IX&_`r"tfBvuae<GTKٿE PoU+O?kdIqŋ4p邇RO/HR^XsJ0&�`L 0&̈� ft'B3�`L 0&�`L 0&�`!BnDED;g1YSذ/'?zu)uhƏ;x_*Y3gQ@6kڍp]P͇w \܌ޭF# -:DtH2>*mL,CFeNuYS<L\.K*L3 !WɕDh݋zCGs~lmu:u3bK7YBlH>qꌐn=O;wG~ ^Z4Ŵcة6iTgLjWD9 �$m(-XS-֯s{S=|}2K<5T8w"=)֩ v2`L 0&�`L ehy BnLP5�`L 0&�`L 0&�`� 1X=>{Dz8 .$$KݻB>>w\e W}"00PDܿ{ [gSwyJ):(1w8~x\\`e~RčG/e^yZu7~Ѐ^зVBl9-,,e ؔ,5 4FęR4ݐ<^*LrT/4=1FVI7/?]bYff3Qp?f:uh0RGU^f *W(S| I$} Ӊ(Mf+$=z9lߩ[Vt)?zo._#f˖*U*yr={"Zwl3$y|ܼu];E:ϰ2g�`L 0&�`$Bn0$By 0&�`L 0&�`L 0?� 1wg^@׭󦛼a#.%sa_cnj7$oBJ"o\}LHxSÇ�g*r jaϾ(?/jV*vcOu8vx^ΰB1at,YZ0I4)jI˗+" /]Ųk$J҄S\Z.f覕*h#n_U/#!w jiϟh4IK~)7/H>-%" >7o\9aT%8&"(^ޗ~ՓMj %z?IԺe3L4P7Q9{!q, $X3'>_qp!WR e{8~Rz~ܕQz;kz!AV|E]F3-k0~LmǏIӦ ^gkަ 0&�`L 0&N,w7o,�`L 0&�`L 0&�s sg;زUl`yB"5u7kKb}\acpQ.$uRD\9QGc=J\U}x[0t~Յ,Y2a"ZaLTzaCvS\stclp.ҾFU̝=`fY,S6ڿL"Rp8|Mڃ"&H�tMs.$6j^Wo*_o -ǔgz]1"Uw/; $6kQa.B.i sX\u꽡趝Åtj/age8qq�$rbL 0&�`L Dr#$cX5cM0&�`L 0&�`L 0&Hܘ9tYܶ>I_qQ3ɛ!qTx}8RLaxH2UAׯ_ҧC1b@LU}躸+a$P|T8q"tjeS[Rՙ_rCau/n\T\@MʇGȥ))Eݽ[XK5i %S[yKȕsQݺ鴮!!!wh;wzI?'+"1|ZUT߷;ڴj&T9"9 $a~3a]{,ڹ:kxZWSn)*:ѻٴq2S7)w[x,E+(esRp 0&�`L 0&N,w7o,�`L 0&�`L 0&�s 瞭wFQB<nu_vqSLMBHX~9H_ڴiUkaa!7GÇ�EH͜)#2KkS˗`<{/^%2eJ/ИOLk<|X/=2"[2&U!sȘ!Y$sJu4&IVs 0&�`L 0&Xm<9`!לN�`L 0&�`L 0&rNϻWcBw|GL r#o 0&�`L 0&΋w ,73&�`L 0&�`L 0&� Q,F f^#Bv|;L 0&�`L 6r!O`NX50&�`L 0&�`L 0&D?L� QϘW`L 0&�`L v`!7vX nfL 0&�`L 0&�`L Dr,O-Xȍ̼F?@v�`L 0&�m,6B˷$L|7;I!q$@;{~<|r5`a\i3%sk >ytE!s 77o aPϬ{Hnl^Z2gf65l//y}+V)s= >Ȕ&)Ni)|^J7#e2 ԭ`^w)^{yȑ)|?&8{%|^CWb ѬzhXmbn@_TV$O  0&�`L 03'Bo/LK;DˍL h=|Bɕ3;zvX�`L 0&�`X/]\} ^SF.J41fJUmQ:tB-(HlGr3׽H]fJfKsEuDM93}.-[б(߯?k`YY{�-*]=GT 82/#W?76oؑq(ܺ]Tmy}]RYdxUel(?p {O`;/hVQ1̿뼰dudh fikޞV%2՛SKO4 }im+W84V�Mϻ}{`83`T"L 0&�`L 0"Bndy�`L 0&�`L 0&b#rcXr഑VMu*6Z\}bs# L{t 'ʚʛw0}d!7 ,!7xx?S88rgM1cBx Y~^c;x)?- eATѶN>s|xO1L 6=,3&�`L 0c,>:`L 0&�`L 0&�Xrw*Er@H< >~wȥ;Jil>? ?Y9S'J­F+,{U)sg?}CV m[] iՙ['D+r |AȕFUr¹os;vޏ0]~ :r8G5�`L 0&�,ȷ�`L 0&�`L 0&a,F *Ekpc^ M~ oZ`^Bnl?A wG?w&:= � ǹ/Q<OlV'E SU]Nu3/ B/;0&�`L 0&EXȍ"<-`L 0&�`L 0&@ Bn8d93ƪ-#gR3%6 ߃)~SAFRZ[Ճߝ(ڮ#ʏmxx~޺ϑ*w.P*8q ʐϟpo߿/OӤEbőL9P9/.JӤA\yvX$Oap(E1Im>SoDټ !ItZGhpV]dɐ\y:uᡃ&cĵ@`]>){inoߊg"=BL'JooЭFKӏx!CXX&URf̨f.[&ӳg9| UX>ir}}}!WN Dq>#;}ĴKeU%gJ2cQ0:/O3+!mD#zWHf VQp!Ǎu{=EPd| P��@�IDATZury_|"SrtФZ.|;ǭGP {*uȇD>yS$B n»`͓euKLD?W_#yNXxFdNRz-< ~ +΋|:7yI-P&\T2IZHdLDg(C2/!ȓ58o}pqQ8T!x :4shZeֱOA/_[!;l h4~xnҝ7|):EK7xAL%26sOH4PZ/!$reI<YR$M_Pu<ׁRpsWz޼,]:&wzNIoK:L˘&`[C$}jt ~.r!L 0&�`L � ŝ�`L 0&�`L 0&0,ajvHi8q~B1{c]cu}lrݍ#UA}r RE66 Sk'1vOvFll`P\]M6N6oC%ڏ[۶ $V;.uEe% 5uv<tL >!_&z^Hv,YQw*ȞC-VUaeÒz]nn1.u9k+hb\'_'I"tYKW~&LEz4}8ntALڒad۶mCӦ͔= :SNQʑ]!7$;Jٌ I Ӭ(Zʋ5典Y{|.F.<#[{k*2ܞ=%8Ek^Bժ  87x4)gyC*+!sOIɕiS%${e#T+09|i|l(TYO4Ժǚ}~=$@1h)\ $R:-2$gcb碑$:<TJvϨ+$s|ǬMdu3h\ZZ$wzS>;C#lYQ&7ɒ.$WAl)s#J_G﹜w-ֵE~tBW6_s0;on_S!\)XUPp 0&�`L 0("Bni�`L 0&�`L 0&brc1&>}&/lpu]-E[<F%=ڏRRuzu-5B#7i'"} EȽqN#MD$WW.]>S2hv#HCBR!R')b_qݣ{'RM[''ŵkE5nXfˆO wP_%+%!PB.ɰ߿}EMS_=} !_v~L)'13B5쑡LR0%[ӈ (| %D>=""!@HSJIv~pS^t))J UїSIL2}C-ʕ@/5bsmPi?rqu_yN*j(ܪ8u!\lZNt2Yhg˘xbAQyR-anS7z\DNbUQ*+ Hk?JQlo<AIRl^\b֦RDUTHd)zBnA`iKW}(Uַ^ r_ \|6P (rH| KQWI"&Ii))GI"r B*+S| ȹ6ES F%pJ&O0>Il>rO26JK+Ou\f{+F_sdq# aѿKf%)Z0KkJ cHro]H(=H&6(Gyz-uErݝF=PeJA f17_>h-ZfȖ! LZ>)IMI-8zwx?<!?IQrAnCG92'W)^<7FJK d\7ㄈ LsU/R%/eL 0&�`L!Bs|'L 0&�`L 0&�`'Bn‚'۾pKeef?m0ϯ+WLL v8kS!{FgPK%{tIb%َHnm-NZK+~yu* Q:K2K7nal?gr֪%2DJeh77 !TA*yCj|Ԝ5S((zuX Wi/# r}yAm`8(;3}.-[6={TA򲸽c "U8(J*9yHрCVlp@�VrgRQ~a?loXu2`я>t\udb:=[9س{(B~cHT&QX.!'Rxq$I0}?G,봵^Xꪑoom#昹l7B"m[zNq$j5_I"껏1#"䶴ϋ D.G^5le yKQՐ0Z,n\5S.!r4Յj-W0geLz)jHuWDhg׊*+k#HYNک~ oo+= /Sb瑅\j4\6dr=%ܩkl=W\lI&ɗ$Mg@14IF*_CyhX&U|&i[wR-1MJ+{~\KgEwry)%`;gP%ԭ.>EIGE_zFY=w%Z>$nV~6DNB71�$ݺ뀜+{3ThZ΋]Mu5sjL)axʳ[`&�`L 0&� *eL 0&�`L 0&�#Bx?$yzw`[$Ͱ7 VĤ\A_aME|Sc# S|D{q<PXJefmL"֚XDZ&ka]A{)9v2ev[z`KݔBD\Kҳ~H*D^E.!P^RTb{.\jKy9e"^!V ̹Z(ڱېY/$LJw )^_+)3k- )#:)BrmйAAa*!IԂƉRDڂQW4J=Q K\65B.Յ4R9E7ҫrt.F->#Q3<B:j:I.@r.E8͒*Q [&׆M~Ñtӏ] }N\?; r|hn;$JAi>NQs&bI2o@P0n&ߔHȪbrIg}@ޚ;$hx6l\X,?Rt?nHb(L)n;<}{eCKduq 0&�`L 0XEXu\Y&�`L 0&�`L 0H&Bn$5(B]Rtx$" $f;+&$ V#}M}y ;WG'Ņv]!W-p'E祓/p ݿDVVp܊w`Sꢜ2Wn5c҈P;z2@h_}AWUu 3r;]7́ $xdٖD]v %OTGR6r>?;8-6X JiDn[qxnV6(:6-D]nH#V~~~4H4tZ$Գ,jhީRd4c"+m9r#jZe{(=q4<r)Bۉˢ}ޯ4ςZP-YOcqQ<2!rdSCWS\u]*k[ K3S, 0kjzgx\JZ).ۺI-\n ͅf/ sXaShe!*yB_\-EXs;nSAOkpd"(- M#|)*/rajo^Q:/)jj? ›wY"R21%B-X-�`ش,_Y'~71K4Q).2[~8T^i** 0&�`L 0&�`L 0&�`L 0&XȍT9YO\҃9"mbzDT+ûmB{qx@q3N{!Un4e% [PtM5lVǭ+N\:ҭ\pdVZ1(~rŻtGC&_e!7, WW-Բ *GoZeqv4Q-IHDPTw.!W>gc{}!6Ҽ 6B.EA&QZ^]4}>�Ҳׅ(HLB#$:RӸqNAfxcy E3±JNԫd97<BAPW!q>\jIWH$&ۯtQn|M+A(*_TiSB:տU +$SՋe!R԰,CfoO\zgWtÚ765mWC.*o!LzVD"q5>$O_o*sʔ" H)\MAz;N %Yҥ|t?W^=aKN[F|i"_�`L 0&�`� xL 0&�`L 0&�`HHiSp�ǯjv|߸nH(_nۄܛ[}0aw$ϖMDOȕ4 EE՛Dxϱ1߃Cs YcH-;d hFp-& %j7 $6ٶ˔!z}+M܏DW֬ {GitvrM^ĚJGC^Bn+<Y ݏKw^UJf:cI棴mZϣ h G`,zO<T֐lIlKL'WGȝ;2*X+z]`^1炿@ %S\{@"=FS B>J922jR[C"iV4ukT)$]UԏRmKﲐKI0+r{SkE=y9ڏ?)BZ*SKd kH'IeN#*+T7*\x;QRv!&'-^z/rOKB."ڶ"ڏaӗnAry4$vz<f hP}T,YUY&�`L 0&@"Bn:.,`L 0&�`L 0&@$`!7t{_cbK8!_?/[lrp.ę4ݱi {Dԍڢ)^x_Dp/9ܒg5_M[<shM%"ju6PtŊz*BnFMPuyE}'r芐 >^޾!ּEQ" I==~֒:UزަKOy�]x-|HyJ&FeEyrWz sXTT!h3V3_Xw{켩B.[!T7KHԺ{㏺C`_F_X͊b@ 5#cBBNyo^yckZNѻ޾4_"W@Gԉ;zBȍ}˘劸[. gl,VSdE֚ L 0&�`L 0H Bn$@)�`L 0&�`L 0&b-rcхOxcSbMPZ?]g5MsyUOo^cuҢNWȕDVVh1GkA[yoe{Fxu&bZQw:)N!X4^qw.$Mm=4;u9e"^FhV98 @*\Tt95;ƵU3x~K ԏRL 7oĖ-?ˡf͚bo}=SlGȘ&޶ހ𢡊Ȟn #۔cp;+X& sri7DCL))@l! F6) ˠ}^x:mՓzS<]!iA\ ErAgQOO7KXBvTI~Y>'z5-A_vmQ8 ך w:E\VZxM-J\Z,:wKQr)93'|H,ޤ5d꿌d5 ///>9#^zuF`&�`L 0&rN 0&�`L 0&�`L@� DbqoH@[o'[ j߸nHBncM [PTC˵΂DPB) wtI-Ί>#I%閒?Qy I\ϙ <h߾!^„M !6ǏXnZsv@ٚ{Kpy~|n?ceS\9/ R֖)2ETeXXjrmۆM}СC1uj,::х`^zz57Ft#NUֺͪf#kPD3+!n\(9׈bXR'EUHY%$膈7z%ORfX)Ù ;qsSp`NɚBkLykIhSA]5B.푤k):oP.E<Bk0x/:E"1?} -F+aehj>*"?yUzT#&,+> ~$'QPdfuU,X޽(Κ5WʜaL 0&�`L "B!*\�`L 0&�`L 0&B?䤿/%:m*X%K`7X~ <w[65uܹm6!v~,\\0WHQPu[u +$ *H$><r֯AVmqSE[Z"kJ_#r>] ^.PPGw}|5fEu477ocHlvUR!4 a*$N$B>5ok(=<tM:vAN]XJ V74Lrb}5MTʔr޲H1#蜽/ДwC<}|A! z,X2^8w%Z>$FuEz OU$91kFᜩ]z?>~/$Q|\"QjX4.~ 37\>]ItiX(L jbhT%'YC8qDUu4%2neHGvW]}\8r}_®vB,)JLJQI,^L|6jbd(!'UlEO]6*m\bޛpR[CBiA\F<fW$sqsT(+TЭ>*<ȤCCg4werya!zN6/ 5[(Ir:)pdOy 2 2&�`L 0&N�`L 0&�`L 0&UXȍ*<,jٔIcEHmcKbF@LrE2K,srmZcd/NWKȽ[;D]Ƥj"aZEc׭VU|b?rÒ&R^kJjw |5r6Zh<{GTaEǥNwcZlb#׽Y%v2KVuπ&wIRq ̱OeFؽ,ZC$o^H͓j NKB=eH>RD@AT& M咋ʵBnT*Ȝ^z/W<z*áA"$ U]NQ8d 5!sOaZ雲_d{F]X&яxVW<W7Ԫ,Qޔ ŞJ;\Z]:*f sp5}Q)u&J B.wC }R:Ep}vt²ŘyC*N9ke<e=�IҦ(rJ"ک8G+{.D뽦{~=U7Ŕ;sL 4XٳЯ_?&�`L 0&!,uL 0&�`L 0&�`/XCN:wsgowTZٕD$!bYelr 1Iċ$VwD}s:G)r&8<L*Js(&Vܸ3)NИRb ^B Et=1~ p*<̠H!R'gGMP46cM5OX?o~ZYWrm{×hkR2"NܸZmطZZ6$>:zzv՝``V<nVF[PV= U&MEZUe5Q9 IAy[bL=a'-ر7Q6lLc23~ywKlFȖA#SiqFH'qdI$qOo(zl9ڨBi 6TZRK?+rB$$_QYK}', ylK2S<ZB&uT<#f I-tV7\D{1WJ\H㗝גAFEjM} MbQPd_ND%gIYPLVLU.L>KQ9a)JGy_tr $zJ6%+/DeclE|<x#FӞV.Ey-(쵗h5F]'z =G4mVGD`E+wEhY*a|.JJz]&]޾\D IHO>JVsKhه5DŘzCC`rU* jE" 7+H]:*SNpqѰuݻ\ *s3&�`L 0&Όw�`L 0&�`L 0&yXȍ<f3OR&C?^ҡol$ -4M$JeTsKgQۏOOIҦCҌ”MC|X?yMmLq}GU%l @ "-*"kȫ(*b eJ/.EEJ B-u&I̜{={F?>{ֽVwŋ:oDF*@-<OZ}u Pg~c7*kOVKs\ÇtbϧnKў\}rZo3tY! �-Y(DYn2,π}:ܺ/Z`[Cr\u/@w>Sw*a݌t?:t98@ ̖iE;к/"Κj0~M9tR/ZU[96ۿ=8>ẄQ ˯ӧ]'AK|2>y@�@�@  @ɫ � � � �X@n=϶qmX3-?c~R{7lؠU9ݣP � � �ܤdG�@�@�@� r3.gw$6;J 7Ht3O S{Ov;V}5ѣ?L@z!� � @ � � � � �Z@nr3ޞȽ=feyO[{~ׄ שDH/@�@�r3O��@�@�@�@ S ۟^@ny/4ԙ#9~ύLX2+jV\_maߓC�@�@�H] � � � �-@ ׿եP@n � � � � �H@ @�@�@�@ ] MƢ  � � � � @ M]_fG�@�@�@�o?.rSFw@�@�@�@�@Gr}4 � � � �R@n6�ܤdG�@�@�@�@�RW@n2; � � �  au) B0#� � � � �> #HA�@�@�@�Hr嶱&%C= � � � � rSח@�@�@�@�[@K�@�@�@�@��\A2  � � � @ .E'%@ 7)@�@�@�@�@� ̎� � � � r{X]  � � � � i@�@�@�@�ҥ�tm,:)IP� � � � ��ev@�@�@�@� R(@ 7`tG�@�@�@�@�|$@ GL� � � � .mcI MJz@�@�@�@�@ u䦮/#� � � ��\VB ;[ϟW@pg׬֩-V`N[f*$pbnYP^C˖Ks݇NjcfVR=;}gK Q*|֝NhʒE`Xb.\mQh9 /Y8D^xY9nE@�@�@�@ d"� � � �x Ș7՚@hrj߰Z|Q2i*t}zx}ss)b U/DE)E Q?D~v̙aӴ)Z6%S˯(nҤ<mv/zUMywܪ~i}<7=r3߆]3(u},:F{|m6*usuRBrPٯ(;ܺ˾e[4~HsGl%s+"?( � � � �L@n&p^@�@�@�@K@GƻzzXF?s =;m+Eܡ=z3Ƚvf@=!OԾ*ܫЈ� � � ��\� � � � Frf<rlzYa]:#Pr rBürc.\y[ouP.柧-@�@�@�HSi@�@�@�@�X@no@j>~uhOQ>hE 7 ^ݖrr$i%?{J@�@�@�@�_"s � � � �Wu箱CQ'[M 2e׀ 9|XVt7BN](R%Lo]>]rUT#q_T[OK4ukuj~,TXveKvGWjUQc-SM̑H^Jn٬3 U&M%k|=p-[]reըQùUaz_tzUMywܪ~i}<YVlԶ:sIeKUtWʒ%-{k#ڶ/ZwWETJW׃:qBaU`WH+~=ҭZkP"!]-~rT;Ё#gT(ߒO6 U@gcgj~䄵:y^ 5vh^Ω a 6kӚW˺h&U}tZ+SO@�@�@�@ Ƚ< @�@�@�@~d5VN?NSuԽe=5fn>!Nt ^8_>|+ ~Iպ4qxW= m\m_8|g)wYTyCCM?ֈHXU*RT{~X`|qLBVYxm/_rg̘;94Ho9ҹUF.ۭ>1aQ}yU펞g`|*k) kDosiwT1 mfJ%wWѐ+dzF?Dm,XbcٛekyjV(bܧG-MWoᕜ:@�@�@�@oְ0@�@�@�@� @ & G,\UM[!95mP7e {6!@W*Tuڪ;c,gu/]:{VMO_-ݸը];vV~w[rwzu仛ԁ*Y4+畻.<S'5mgWwS&ia\*u|؜k, y_NQi1[*U6sl>UKhw .rb7-:!_T0ePhR'.[wH=]]Cs0'bk_wV+m@]W0o:]A=m_RǔSuE}9g)_-sZ>#QL_V*.ieட։;UrV3^ox -[8f~k_lN\ 7NuyTEŷ\ � � � r| X� � � � @ MCxɳ1<j]]Url7g r%ʠfU@`w._2BNmeB{RAj>ӇjRmCTgoww|{u{v@n قYWm~=\Cj>mS?GפM`xj33ofl[8ք|ݍI9\Uŋ[@ʒ5=$ ]K9xHkX+{ՔVZ_w);;M@n_%;8k_߸W+N=߯EsM:cd}y9n[E'f3m}اi ;z4Ic6Qe.v(sn%NݴŸs7:>=w Qj/Yh;ڵODmϦDI_*ڳ~q!� � � ��ܴq � � � �!@ ?gxE,WJv1 7'JI ^^ݵR+sW>>6{\b; >8iJԭم%/ ֖M]6)[pNS^=S~SSvءۉ+&*Jen{9Ƚn7uW3(k~;Ng Ojy+KMqz I*k[<-.خ\'e e^sl|*%@nr � � � @Mw� � � � rc|;>0sMz1qL@5SfmPL}Ѱ96k75{rڲ:݋h~';ֲ35)::}ZS .X uu qu_yQHHʃڃ޹OULUN$bg wƨ6 NOeu#R n6Ϻ Š[)bk:sA_j*5-~Z>aNmU>̩OI@nJ� � � ��\#V� � � � zrS|e=W:|4y>\ ) ^կi&fY1[*U6e;zl2w}dC>|dj=tF-;o5zej' p,}][iNg 7g˵ha\;ԕ@•Ԩ%IM~`ךz}}io_E/tu Fk�ь� � � �3lX. � � � O3&vF~,,r\^,WJ”#{: 7n2oQw�5;ZG/5b;qo6)[pN]/U;*\EgJ~l}>3cm:ӚUL*dQv$;\ؠwZg^wG'W>lJ}5i A];-nӛ} @׋whf)XxۧV(ԝ<sQ5N5eϠ׀dM]@�@�@�@�t$@ 7mKE�@�@�@��\̈́߭?2g`ɴYl*>53rw{[ՖOh]ͽ}b}rn .XPW߬C+WnqPP#ukUv2{E]zß >jاڧZ"m{ryPJuBlu*mש:WS{{$'Hu OJ ew8{Јޮ5@ 7 � � � @: 7#� � � �ܐ�6Ԥ% c+OX;[P>w{y$rv}Bwl.vJo&Mbf<Nȵ=/R)/yi̘.;O%kY7o5jVZݬ_9+7Qa LRMjL03s*φp=\-مV'g4T{{$'{5Ͱןj[̩ ݁nm+jXϺ|/:̜9S۶N(ѣ-ꋩ@�@�@�r3O :gϦR  � � � rS/,C#d&TYCz[7iB6W'ho^xZW37U&> vqϱO-^<obcq7R1c:vL1h H> GcԠ+0ܶQ~5;jYOj_zr4,1ǎAoOZg~}\)'@}n#t R4uZ5{EYޛ^c% ܛ��IDATqH<EZpp׃||Ӿ}EDD8jNv*) � � � �\�bAc~Gl4| b?q!� � � �\[@}g |m4,F+q&6苆utY/dνg3=W.1YEU4u?Ҫ5 ={;Cߝeả]{܋Ok0yº< |ZP/[) \'QGYh_iu`~+IEsyrW^_Ü<ˆH=6l &zSȵ'[A|3}RE\'^]-{Z>QKVwN7?|Y{4p55}lߤf)Ι=^/'!� � � �r=5n~y<J j}fo56չs1HZ?%ϡo;^g~]c�n]9˼9 � � @ rr&ܻW_nuh]k# =Xqu]5\w=SN7-q,bmSLTS^ux+Sr;v8A\U Oĵv'ۇ9~v!~ ׮#Q[sF5v&@=x'+5y+@lzw8aߚˮ[=e3)U(_[FoIrF2:= v<j|S @fr&׵YsO@�@�@�@^/F~1q^~O~=h;fewȑbZ4ofw*"o^3%pxv{T0P � � �H@n̤^%:ِwVW'5oܸɼC*DکS&i9^kr#׮QDNK-^*w~T[ƺ7W©yk:sOν#=7-SƩEa̙!gkȔٙ  c~N=;`VFAW}3w^}{x+[`N}b U.[ GcԠצjX8;X;^sթTT4.GZwWy} WS5+|\P.17[5NnO@n|u}-[V[nQ{*y � � � @& @Lo;FA³WvھOy:0]L󅱀$.CYΝLC)OFrߧr%9  � � �7��"��@�IDATuTU/Kwwtt(>b+ "(%Rݱ=8י-0=?3_& s^㄄ G[L%Kܩkk_;;\/Qꜹ|oI){Jj>jB?svvݸtQ+iFykuߥÇu~%NB)dU9-^_݇*+eLDbqe;zqo:Ȝ27yJޘaA=U+=FZ=Kʑ)ҦJ{o cteHLy16oެRJ#Hu.s� � � � powVBm{}w<yN2|vK>}?BnJ<]HjPᨚ}/k̹f-K׌)}b]," ouz({gCܬ, J. J$j@�@�@�|F \  ~M#kе3g灚j2h5rL 0ej߶PbcC Qϛ)-[6+(((6bL@�@�@�@ A ȍmeȐ>n zK\߻[{xUׯSU1 }{% G> =^/i@�@�@�]^HHܰp_\ͻ}:@a?*O'-5p]!yi2M#Z+(0)6ܪUkof'e˖1 c"� � � � V@nn/r>cNPQ];v*qIJNM[˗/kʖ5rv5nڵ{Uh%O>ǏCUH!M&ұB pӧϪDbJkvw?v>j$Wʒ%=8|N+rUe/]� � � rwXy$ ){rFMlMhJt/ 亱}`ODg 5USPDI:tHKŋtOq@�@�@�@�*@ 7nwSܶ54oX_|~K.LŚvہ5i%:pizv+W'_iڻBCCM[P`ȧj՞ϻEY{L?+'TU+|KOti,FXCQӦ-dTWҤIծm ~H<qǟ ЂEK?iyˣZcdG/38½{y+U,?駂/e{q t`>Am[77uQsy(5NϜu?_^=޹:uh /?uШr<kf� � � @| vgQB ڲYZ454p]w|Nom)gj;uJ+nULX% fTGK ||,@�@�@�@ > ȍT yNrmA_}l?ŋTL5</bhκp Zҧ.uOL<3sXH}+Fַzk;D2O\=mRN(YW_#GEhsȗ7F4Zֳg~}@~΂u,ZeˢƏ=MnVh@[?]M8vg>t2fଊ{tbOfUX'fEy# � � ��\?,zgȽ=@�@�@�@�@� ud3E C54{99g3MGJNa^`ul-U}:{-_V͛7M{R5cxsm;xpsa:u\[**kZ^rtu~P_dn)R)kIVOuѻo>95Vjj:ʖv*X[Ukݕ.]Z^>OV ƍi̹ક+(8$D6lBٲfTlj e˖Rn&g;o$.\*گSϨvffosTk&d촶ڭ~8صݻ0s ntvt3]5 ~ݔ?26}\ � � �.@ w u㠀� � � � �xM@ר#(.BRH{Gjޯ̙2FO2uV`uTha>SR{u'U%utMPպv ZyZ)RHc~^Yf]~iˆYv>l)ZAPe}ԙzǿA#9zC*Ef O.hnc*Y\N>]߻O?8GCvٺ8x?Mjܰ[/bM+=Xqmi4?%͝[GGߐ~@�@�@�Gk9JQЀ� � � � �Ī�XV2eޗ9s&թ]˭O֝dRWGhWVw"h7x-TSN:i 9sԕ/W:x͘!#$<Qٲu.l谟ϝE͚6A%':_M*YUQ*&&zk/=j]RXPnZ]d2dHoWhh*Ty^cm[?Ïӧw/=q⅗^Sfysk™wtIr$Id]okܓw:epqq`: � � � r}xsX Ƚ{3@�@�@�@�@�<!@ }ܘTb9M0ҭrXÿ}J ddWT`deϞ֘V GF{:M&^k_Uc~n>xvv׋k?N]xX<h0}J,vl^-^km#-:MVpDbvn.n<Ov6K{7@�@�@� 7[Bc"@ 7&JA�@�@�@�@�</@ w3b\r'r,VvDNڨQú*V"7s[y] ڵ*\]Um.j/_O+טUTı?ٷZ67lwt\X`+$l5[kw5v囹|2([i%\TqM4n q5W]NQ\ݺę3+0u(zR� � �  c� � � � �xI@&| ZFʓ;>ѭݜ;/ոa=] V(j?\uԩTli=` 5sT9S}Ƚs/\ =v\׬u t YA+W*,,̾ߺS 7zo{ӻk wvMZkmvn.z?nn/ � � � N@nrt � � � � rvor7D2Ey2kMnrF'NF�~>eʘ!B_t߶nk1GU@nud[/r � � � F@nr> � � � � {rvO|5T Ւ5wBsLXn,OFlٲV/iBʓ;ҧK4iR+mڴzu)/uж;Zԯ[#Ɖ'6M%u./@�@�@�Z@n6�\?4� � � � �B@nnr\|Y -a?iMvsd'Z K*]u?qszr z長ۤ:<ETX^O%r)#� � � =Ƚ<n='@�@�@�@��ܸg :n޼j5ĉ|2(gyw Z'Ξ>ѭ=+H[L5oTr\KU?NښsLWuɴ}*}]/j=D{7Uq4xYK)m Dng@�@�@�b&@ 7fN~Q,@�@�@�@��ܸR_ ޸qC#~UaaaVU}""[pA-3٭=^3M]ĉerHܭOL S3eTm_J(Q%ܹ[?ju wר}S];e jujFq5 � � �  cq+e}2eJ ~  � � � � E_ ZߢugZHdΜIW֬Yd>M ee>?Z >|muFAv]L.< l_ux\:6o٦NO<SN;ׁ\k!=V6kNfzI{օuZqW{kɲ>[,ZdQ@�@�@�@�w\ .gLS LD<bK]J4u*iv[B3k9LES_tbz%ϘI[ϟy橎32 � � � �F j/rL/2e̠TS;vjuU''p=օu:uJ+C*q_QuhZMwmS\ UkS\yRڵ,Y2z۰ɴȞMVu5{WlһwRG׹'VhwԴq̌A@�@�@�@  ȍG~}:q^O&e2(>aK֕+}6㜞/hf4e*^nKZ4թ-Ucgp,#a*v縭۟?ѣG)W\[ժUݞ � � � � ȍL{u ul;B_|=XbϗWC\%K5N֝ yCOu> Or7lܬ.]Me-Z\~lʾȵv=Kn:~cµPD�@�@�@�FuғDIhFǟ r ۷W@�@�@�@� ㋁\-a/d?Y-U/+Uʔv[ +L;Ǒ&z ;ۯoo=ѥ}=ȵ&8x~CGPxeJySg_ru8qRFqйsK7I&5'RwY'B�@�@�@� ȍ_r 6VZҧ?hRK\ɭR>,>!K o>,@�@�@�>>'Oi=J:)dɒzsϝ?7RHq{0wʽSڴi<=Eg\|9ȓΞ- Kڤ � � � @< 65;c*3K<z= ܘ9ޛw#� � � �Os_y*@�@�@�@� ȍ_"+s u%ϐAyj>/誕:tn] -2KǏmcGpe*^Ryk=D?:RܰArTUr옒gΤ+ڷ޺=sfrJ#ƅ:Xx$Oiu-Yl]I72ϵ*Cu5RD*u:lmΣB ;D{ͼ~gvl׹ݻ:gNe,z?\WhΜсub(2];t0IsVn]bgvϜnm&Mtk֬۝Eծ][9r˱u1o<թS ̸ � � � @ 'C�@�@�@��;M]6q-ZM"|g̨';B.SП^v2ǟ)Y VsurFMЩ+5((Q&#~�OW2FߍPjmʼn [榮픙k1v+ ;q=:Pcg~z׊Sd&o#+a͗Ϯ>efB}oo4 |z6M)O|Ti:9/C| ӦMUƍrl]ȍ-YE�@�@�@��܄<% � � � @r#wZ@ntVy|Y3HjX%g}ܹЮS#<# Z!Q$Z%J_C˗*uu[<z)[aSLu&0j5\U~mNukFgׁE trFg7y:kͻnw['5m 78N]jN0&MךoϚt 9NolIW.< ?0}r;[Zy~U>DJ'\aN- 1Xcu � � � � OriX+ � � � zZ4s FuU*_ȚE]\rCnPXX% pDڞ eAਣz : 805=KE>pM^ iNi VUҚMɰZݵo\St τMuj>!=osg+gJ6IؚղB& ٳݵSc7;{mG O?2P}pkۧGȽρ5)\{+@�@�@�@�#~Y,@�@�@�@r=Nw: Q\Y6erpY 62R$M1wVT)n8s\r\U^ >kU4}::NxM+[+\sͪv ԭ{2%Mל;r}gvl׸G:_ Z]~VN:}"<|AgN7noҿ֩*cbj;e}ΞՏ*nc@6@�@�@�@�8 L� � � � rx<9[x嚲K6 G5efS߸R a>_O^vmd3g T酗†=sf]J1Xƴ߸xA#*5~W<}\R.?&_ 6>PuVlcpg?>nсM.Ry>IrbOaNtd V ҥK|eʔII$qc}޼yS߾ʗ/_ � � � �O@nS@�@�@�@ rcn=n~1'ZN_?OT)S騞ӪӸ Fǵm( Pgw& LSUA#nzR:vrϚt DXkŲi?VE{bDe+WAWNw,\T󵗵sȍ0*z i@�@�@�@�x*@ 7n,� � � � #1b>mJ,O\|f)UZ&N#ݰ%ue.QR:tD*ּx?f&uhc72Lj׉pg4' OIIRn gh֪ѧM^}9I=u_#_m3@n*@�@�@�@��܄<; � � � �:kF-Xcx]#Cx!l9ym|;wv8oF7x|<~تNnkgjLF WneDGSl;e2-l}B:eJu}ޏ: Z7lUPΦHWZ`ڞٴCIb@y钆W,mw5^xV{&A @�@�@�@�,@ 7!>ώ� � � � @ 7}z<MK5O wO ~S&3>th?_e{p/4$D#*1?!7U}__g*֢۽_7uqu 1W r[kt%uT;"t]kӧkժ;vP…rl]̛7Ou5s[S1. � � � @< 7GB�@�@�@��S~ǐ(CғƘ('<?0!rwNuu>wt4INB+do`(M;:](%JCKhꓝM9| תtU<>br:b@4f-<7בgړ]tpb%NR][IڷܼQ[63 9v.^|{iӦqv9.Ɩ,"� � � � C@ng@�@�@�@ rem~Pª[rgJ4)•kZ󀾜PWo4Q&zx|;-:!rBC[:i x=m>)K;w6Jub-[|ɺ ֫SϨZ7L(#ܹ.:h" NNGV0-OR2eeZU0?qȵhݰKs>8 %%N”CnU+Oe|^LSh75mV(cxs:H ); � � � �\> � � � � Y@n<o 4ZJ6CB Z{tfvv挽eVHrѧnܐ74ES۽g._~ڲǺ,w,z9_c^?N?T)oEƢL׵)_}"*(YrHo^lN=~n lchz/ۯ0M)X8Yc|g n@�@�@�@��@�@�@�@�.@ 7}�o,?V洩RZY`xU@>oi^}qP+h[*J/[u^=BVjS7irBC!ZnhAmڶ0mR"E>VHrtVh㟋ܺ@5uzGhͷu1B e=WBhnnX RO o~ƌjذ:b0o<թS o^ 9@�@�@�@ ȍ?{ɓ � � � �ܽ�ܻ7;ç/ܕzҦL*}>nO-Οj`O/> +qJ%RȩhzNoݬdɔts윞/DufܩD\$q6+N#hjSfͦ9rtfv(s|<*@s,Yĉ" � � � �D)@ 7J@�@�@�@�� r ד@'c,XpzbRN5/@�@�@�@�$@ NB#� � � �gyw̦# � � � � &Y@�@�@�@�  /BٯzfzƑQ@�@�@�@�HHrn � � � �r=}r=( � � � �$$ iyV@�@�@�@�rËPkپА+Q`<3( � � � � @ C�@�@�@��;�_rkX- � � � �g/y@�@�@�@� {fr}xsX � � � �kz{y8@�@�@�@�;Ƚ%@ ׿"� � � � @ 'A�@�@�@�{wo>,@ ׇ7!� � � � @ C�@�@�@��;�_z{> V� � � � � I@fm?|YG\ץk{dE � � � +gd*+*Jrx`r=#퀬iV� � � � � u5'4y :}-. � � � �rgJfUqŬ &-퀬߻!� � � � ? ȍu슾y@[]2ɖ.K7BuM]8!#r~X � � �C Q"ILi(E�<S0W<wj=0 gO?6OA 7Htod=+E�@�@�@�@�&@ 7nw|3ݎdq3Nbsve̎� � � � I ➽t;Hze!,1AMۜpYoϗpv'E�@�@�@�@� w;fqOmP2OjG}nݲUH:ΑJR'VK/@�@�@�@2[uV<OQsNoZ%P.\|w|#J@�@�@�@�@�w*:vE=m6'ΗZ v|0M⭥0 � � �$pnׅ` [IΞ2^ ȍۛYoϗv'F�@�@�@�@� 7;['^u2ԙ#͂@�@�@�U'4d~΢xkxmC 7^o퇻z㦒)(0 ?ޞuo^sg9s*gjv|$Q&]:`n\`ȔIjmt/gײ%?#pt*]<t,(J&>o[k- ΢Y  � � � L_sBL߯l:&4,Lq̈� � � �܀D_9~^hO+@nAY\CѳÕSPD*YogvҘLUʗԭ+WL}v}T̎n]*vՅ/X@ӟj_R)2g %ˎ//?n֑<cFTlQGV,_~2.j'7mC1W:}+=kT6)SzZF*ձ_=E�@�@�@�wzF:}M 3)uf+ x!̈� � � �D"佚EL#?Ə}"q5fn2.ŷ[dEYoI {< DIsn@J%ØȽv~^<_+CR_E6SϿ΋Ԍ纙bwWM~N ׯ"� � � �>/@ ׻[nݜk0c~YΜ8ݕ0 � � � }|4ZNT][K .ҕOX^.6m)jWќY̟{kzyEzWz; \Ǔ\牺ŚT?wΩ~zZA}ȵÜJ7\7  � � � � sPuL]}fC�@�@�@� 8Ou~ѢZvu'U?~]/VpZQ._U,eʔ&MaaaJ([]|*x; \Sܛ.ixǀ?*h irKZ}?ts A@�@�@�@�#@ ׻Wت.P}iSXߗ`6@�@�@�@˶ՇwaϝZ_t-~@[n>;Ǵ |i\퀬sݻ{ ܴQ6ݸpAK?\YYJI6=T.;/Nlܠ+ǎ9{+ qbuJ!|P7.^U+uhݺzE 6YutiK)2)P1}Fk g;M<x蠹/w Z;|.߫' E(cYq\>zTGVPԩ"sBBU~v/* ( 7n+9ou{|<mcޣP2/0uWzhf690[Ǝ֢65U]5 � � � � �t<gku-KX=)K$@�@�@�@�{8yᦺ|#mZ{wo%{s+{oL-ظK3ӯuV=7jod=K wkȟ\ Ƕ~;5Zҕ&PZzojqZjO7 E3f S3;u/ٴCI9hjdG[ f~볏uMmO] wW}_}| �;̞=;nVHzӯյ}2(Vsnu΂5dOpGN-@�@�@�@��*kJIxTV@@Beq � � �xG F~0/[;{y^4NPeԩvE-ټW+wkU0[&q[Lxv@~~n4k ԭ|g7+_I;΋ 'nXg7/]ù8֩WLTCgg~1yNobӁrhCoݒu.|d٥ ~]n3k)y8a7.>$+jdm J̾'hP]s® uj͘]WmZ .~]m=Ҝqn<gN7SɎq|Qn\jڬReˮuiȟM]SWokUXYZ/+\cJ8=S'/9?{][Ǎwok~3( � � � � "@  _6YnI@�@�@�R |A /?/Y:wZ_F˷ѳ"tV,<V_'*|(5SXAAvsȍ u=4NzEso+C Nz7\  Qz EG#:KE57u!7ojh 6q;!,4D/WՕ( Yg ]~Pҋ=U酗ut}Q4iReu㖱轷F^΋�_׺ߛs*m޼Z3xV J+VRQMsg5&|E5:ol0N y 9-SJ3L-we:? � � � �#@ ׻CwU @�@�@�bC |A 76>=q0fpHj6W0M[E[7jsp_ z{اU^U^ >Ц Q.۵qho g -ܸ0LST+$U*E 7[ J-]=]v :O46q};H}^5}ÜnsoiՀ/uy&Wns \,');� � � � 'zB1c$b.BO@�@�@�U=\_庮ݼ}w5\RZVjfrIeJ_.|O1 F5r\4רV9 x>X[3d{>cdǏZ͘_ﭲOvQ :c.;kɑ7cV~Usrg̨'1un6uO˵엞מY3Lu_\3Kvr � � � � !P~Ȋ!@�@�@�@r}CxK@7;#>_<*c/z{اUr]Q2f}Y4WjtJ7[[BL1@55+i^L3f*ա=ǵ__;ۮ VzirrΣ.2u^x-D{p"M{qsZ3;q=l۶[#k@�@�@�@�{ {O|w}sB!a@�@�@�|N |A >z}A-?A.\VT)4S:p:}чhR{ޞ/6'aը,JQ ԖZ=k_0/B[6fy4U UA3o-<)f4r&o69+WU+E JlyNǵNɵ^r9G3-{hM}[ yzp%݂f$Jb[Jw^ � � � �xZ@E/ � � �  { i<^[W,˫#u%`}YoӰjTs@nֲrQ etb:vN7[g*֢U Z٫/Uw4\'\PӺ=ak?xvz떾+Y=ȝԮ]+ΩxG�@�@�@�@rKP~*!� � � @l$1Ƨ'd⟚z}/:t?s##koe ޞ/6*aըv u'7oĖL}}l__;{V?V@o0h k`^D=c=t`mX8\rN+>?mvhls{*f0��@�IDAT7m8sKW:`xp) >pj*`݉ @�@�@�@�x)@ ׻ۚP~*!� � � @l$1Ƨ'\z~?MTD \1u߿ z{#_Wҭ+WTqSr`Da!r_!V*۵[ Z7x)_0^@oѪ_N(u\n}>y*s{_6c+iۜАz6auv|5mTS{rw@�@�@�@�/@ ׻{P~*!� � � @l$1Ƨ' Sԩ >U }xSݗ;Yҭ{iH, p?A7i|g0_^>~LӟR:`J&YfnwT.Q_[3'6<T+d){b:ֶ=}1<*={ oz*kkB'7mT)UTy ܛ.iưX<qA � � � �DŽCwU @�@�@�bC |A 76>=q8?XuMU2ov.|Ww]ŧZ-oU~C ~S&SVǩ-YґYݔ*[v%MVgvlΣֿMvԧ_<I^%|)}2(;rΓtБq\niBG֖Pa۽X@5e1剎~[]>WVUӪYf'uە\ � � � �$CwUg\K޷J@�@�@�@B@n<o?tB֡ݞ`Lzm=Y퀬狍}B?T`n<}hYCɴ#l@nY4 *{j>f[[d$Eᆳ֕+kJ{T2 }Rȟuv.}WTQ^̄_ 5@%wrerV_G: /ҋ=Msfi֋)]j?{?Ox�rEιpurf¿Ei2?oСCcOܹ]@�@�@�@ ^'?b � � �RB@n<_vC{V"ΜNi퀬󅅆Czn^Y(u\J&mtYGu~%KŊwo,&4$D6s'NUrT@``L߶c?~H"ڲebe.E�@�@�@�mݟCwUg6W@�@�@@~`8i4P@~}~z{bO 44TҥץK$cǎQ۶mcoBFF�@�@�@�iڎ@�@�@�ݧ6v@݆x-qF)S<cŵqIC�@�@�@��\ndB!˻3\+V� � � ~\:,Yo$ACƍSnOFUM6 � � � � rkrka= � � � $18!7Om~'퀬 a � � � � `zwW)Y 1ڮ]{4)\1ח;ӯ:~RL/>�!&%% � � �?q7rF>/퀬 ` � � � � `zw釬i#xz::|D_P``2gΤJ& TnmS93=LsSQuzZjʜ)֭^ȍ1@�@�@�|@Ǹ.ǽ>'퀬9p� � � � �#@ ׻!իz㭾2mBCCz}J>]亳u� � � =' zB1|FYo3,@�@�@�@�'@ 7H,}NKڴy-#{6.]Br#Gq=vnϝ+ŋu Nr=(!� � �)=dv@2@�@�@�@�@�"  J,VY!!j1m޲dʘAG5VP`}|nCUR~r8D ݃ � � o #IMƊsod=_�@�@�@�@�@ QR/5tOɳf͢qFPQJܼySLE kΌ`C צ0r=(!� � �/I9d8v@90 @�@�@�@�@� L,UY_PkǏAիUʭ^?i~?+5jP׾Nܳg)Cv ӧ)S&@qTרn̙ۡ2jEQuPO 7  � � �>,cx@E/N|q � � � � @4r&_!korׯ[[#yX-Fs"M:SV#G)}tPUv4;k<+3{Nմhr#Szjܰ^.|y9B)R$WTtIjJ/{cȵ<N<@}طvxҌwxHǥ@�@�@�_1<mD Ӣz{8er@�@�@�@�@ B3/i֜y6H<㧿uVZcIڄY7f͚Eݞ}Ʉ_}\۴zT_|O%r1u~fMϜgbpZaN:.'MT;ohyq@mӾmi_r#� � �~i;e8v@).#� � � � �ȍ'|%*իJ86_)Rx]4i*Sz\n޼)+;zD9{ ֫n{2u5m^7n0sd˖ETӵk״z:Y'wzҳw[Ot/plݮ };35jPO ׍ � � f#iQƋSod=_29 � � � � �hpbȺ|劊bXs$=k T0Jm+۲m*}tڴv[VIǴy63vnsY+$hˎ&$&MjkRHn*{E=)mڼUI$CRڵ\ � � �/~lrcC1LYogL� � � � �A@<?dP<<իhܨ{j@]h2fxM4mV9~ sv{ь[HaM4-hkOAPSGCvsd܋/]a%OL#Sw]_r]5F�@�@�u_#6Ɔ*cƙޞ/`@�@�@�@��;�y{5k<iF/<Ԯ\+:z(yXZS_~SfUsnK0)[,*S'| ҥd 7+eoUrE@Sw@�@�@�1bÍ@nl2f x; \ao^sg9s*g3)u:U&fCnЪ_*,+u*թK .p/_6և� � � � _r_Cֶ;Ua Qv-4bP\=^xZ#ʱH?iӻSj5С#f /^{(.\KLw֭ߨԩSiCU\H$)  � � �>*cP1X0|e+y*=S퀬sݗswiLz*uaK֕+}>yqTY߳*V'e_§7/_6A3FoΚEKDwYuA%v2P#9gc} � � � �%@ ׻?d:}F*2ʖI=au6ʱ.[aN:V ` 8"KZrAkS3k+[odn;Ҏ� � � K=Flȍ 83̑ĭ<􅶺/wz{>} fhH̚auhYB]Q?mY!۶Sfcv]n\/X.;/=Pgvl7Ȃ~~/_~.ֆ� � � � rgCVHH)PeΜIV-r,K:v3s8!Y{u.^ь_by>D<&^2 � � / E 76T`L`q:Nȵ" 4dNJ|B"ǵz{>׭dsj6[E++& @�@�@�@��LnjT;w6I*Vz7R Zlٲh_/7e@n֬Yk/͛ ҄1?Rr# @�@�@�1<MF Ӣ>:s֭Tѕ۲|:rc~BiΙ˕Pr8( � � � � pOro>b~y^}Q/LZ|6M jlr|_-7r}cOR7>~_ڶVQ_1Mk*}tv\r-ysu^S jp� � � =zZGUa/ƾE92ѕ۲|:qu|zVY.9N)e,P,LK.3u5}ޭǎ*qJ?[rY);o q�{4gQ#V(yƌzo޺H-ߺzE];sFSuJu5e?rZ׭t͛O V *G0ŋR-Y6Z5Imx_qv'(Yr^׋ӎ>'ޱMW*cbeeuA)#� � � � p7rFY7mUGژL.iڴib'0}^{`Or/X]9z?dk<di}W5ml6n_JX gϞS$+ٻ(>?[.I EPAATl " Kz %LRr-}̾'2$M2ܺ,4e.Jas'YO פ@�@�@=:Z {,'7IǮpZɑA̵*Mԅ K u>IC#h'TDR{k)2?/.;Y$]h,ի2|I:,J_&@nL%_ouy[$ATf7rUWQQV&jUNڔ ûre>.GRǑ: ~H6mMXRWoX@�@�@�@� 2j/;!EdMB4n Ċ+‡UrH``nR̳Î ^|Eh԰aɓ`QaGz@ P:+bf'ҫw]wݞ]&r?~,o [m7k,~5ؼ@I  � � { Gui7.$dIZRh7iԧ쀬dzqL[CeQKj,[fQ~rT$ϞѻѪqg̨:l\bHNR@a+;תuI"H,_q/I'4yeǯ'W,kohl%wuu 9ؒrh-ӻ>W? ޽|I&V(۩l.^eUGQc$[5Pց|Mr|-G agqu5vr,C/G_pZX~rxtywߗ=޵"=0;@�@�@�@� hQŝuV'l޴ Smֱsyrx*i@hJr5]|dɒf,uc?\lj5S6ڵ!BBMgV&h|[dvrU+WNre]@f � � { Gu5pBY︞!$^_x_hZ:{<{ XU_lg"`cP/;ud*td|ֲzхuqtp&`V2kPu~R?ݻwM_MCdq"O^i"*s@nkdwQMlfϔ< I<d6}yNS]/@nҠ/$-3 Ro2H>gI$C 2xa6.�s'ܧOdG}𼹺u8CF}~8@�@�@�@�^B@KEwCs$?uMZߠVhɔ1\tE>"۶YڑV 䓉cGJ4#i3f뮓%󗾽ߑ" H<}c'%V;n߱[[v4tRzeP<uZ]YXmj;wj+ (ڨ4o/oXS;Κ6NJ,&r-|"� � �xp!\GIi?Woߕ_ճkX|(ktQ/@t"plymZ7̗T O^% j[wJ5.'/U;N(-~)v=dxgȟdOf;[>\ j-3t, d^S)754_&`\?zDfVK_@�@�@�@�7 E?d-YRz'?UVĉ#*ڦC7#0)8ڵIk޺(@Pz޽ 4,v3ޏT=/O5YRL!!%VNӟ@�@�@�@<=#:Bэfz=QߔYҹl>5gd=^ԅnv[gNK`y;s>} I_9β Y\Rzx6;y@wdz뷈_@i-rx{/mU_WUfxȭ:۸o+}hRMWSn;*Ն<7en$_OuQӗh*UV � � � �n @ ׹):}>n4v /=[VynȦaI:2k|gH0tyy\u߱'eoe_ %xl9'NwUA-2\՟)$vȵh� � � #r*@_'Ʌ$SJҷr:bj:{<GNjr/. 2BHƲm[^O9hMYB%[RU$METwΟU+.+ $ڴ0{oD#:>h&@n~\벰·4{%_DDe*7^`s � � � � Nr;werypQUSJ) \9;n׮ѣ%}1c֮y*{|\xI2dʔAbŊd ur]*@�@�@�Hc,ܗv8'~gڭnyiQ:jStv@EM'#Ƚ}lXWݽ;]ț_'O.ٺ{l]`-g},V.-?}/Plcׁ}?-Z۔[_D%Yٿ3[H!mWọPG%ռnYIĉuM?y]~-ܚOr}Mכܯ< 2@͓'dZj.Gbe}ޏiJWCᵡ@�@�@�@�g uxLCsU=g4V@�@�@@$ ſ_X*KwQR%MOh:{Zr7ZvEO9%UoW2US}V N}^ [6Ac'[6U-la@dzz*C˞ ZBY s_~?8"}S$d^RLN@�@�@�@�],zhr=g) � � �\x<yDΜ9!{l,Q{.*;4Jws/bkov}kmXc-NVV&uGSe͠y\wO'*l|/n]m0VTP咕fr%k$Sfi|M^=t<3e\plHN6crGrUG*!\K~}@�@�@�@�O "\ow@A�@�@�H `܈~ <n= hSO*O;; "/b-N$ojp$˙+iwUAVKWw?i!a ^ڵSlXYyP߬EWWG/vr+4Pr<|(ʣפT2d<@NX.Q՟f~[-Y%If5ǰ> 6 s � � � � nr"1YUzZ1S@�@�@�vv Y#ȩ%A8%_9; ̫ˬF+!%yORͧ$J$qsҠ/$O/ݺ)+>#V@ڕ?@Պ;nxႬ9:dۦsH~ON,Y,^Y^EH!+u3(ZvUeՔǎFfIڢŌ\;rXUW5pT K2B=ᒮxI}~ysdϤxp � � � � d'\ow@A�@�@�H `܈~ <nm,=J*x蓼ux/.;yO̟-Т.uLQ٦M^M]\޻Gr,y ^-;ꪊ5jIGmO=iuciJ5;w}@[,O@ /ìo~}cǑ,Ure>}@(v„$c&}<{W~Dو@�@�@�@�,@ ׹1YUe4@�@�@�@ntϟ^#ֳ۫J3r:{T]*GΗkCU<T7ka^0* n+u4 &Le˛]ٿW6Zή,iQcW:u;Z=S̚a}@wn7%`6=󎐀e3_aU0 q]Ww5AY%wuٟ˥];aisːcmMP!k+5g@�@�@�@�I@sW#!˹� � � �!Scȍtevmrέ Ӥd9r]/?\(]:I!saj7O{WgL!chջ 'DiJiZp� � � � { uzĔ?d9W@�@�@�@ :b{ C.pv@ @�@�@�@�@�}cFw � � � @ ~2ux'G � � � � @FE)zQ#� � � ĔrwEAYgnE�@�@�@�@�U@n<!+ԃS� � � �'Sc_M&/g@�@�@�@�p�\ǔ?d9W@�@�@�@ :b{ C.pv@ @�@�@�@�@�}cFw � � � @ ~2ux'G � � � � @FE)zQ#� � � ĔrwEAYgnE�@�@�@�@�U@n<!+ԃS� � � �'Sc_M&/g@�@�@�@�p�\YĊe|>XΝ!� � � �6^`|^_,sjn:gd=^8M1 � � � � r][r#^QI4s'h � � � s.z(~iH [9wyf5\\7f�p`(F�@�@�@�@�Y@n4urə. +۵@�@�@�pYGw3%vR4:h[u;"� � � � �r;32gcΚX#5^I%fw$ @�@�@�xwNȲ]Ww˦53?.Ϭ&Ƭ   � � � � @4 ȍf`w%&q ];񽢒:i\"� � � �|롴achR4{RL(G%t\f4@�@�@�@�@"@ ".#٫E}び<yFB�@�@�@�XvǵȔ2Q82zdlL:<P� � � � �D� . O]rՎ3OJ:YA4a5 @�@�@�p[./NOX}7Ur@ e@�@�@�@�@�B  m⌒л̜X$ y@�@�@�@�,a\Uoygv1xxE9\XF"@Qdݺ-џ ԗ-Zؔq� � � � �x�\׬рoqE gM,{NrkJZWΨwq@�@�@�b)ɲ]W[UsAɕ.WP_/Ґsu mv2yd~_ٔq� � � � �x�\׭dczjיg5-_rO$)0@�@�@�@ƿz(4>bILo$T,#wr{}^jvۏ+ʡsUGRhiZ$\=|\|YS5i>' 9@�@�@�@�*@ 7Q_ryL?$O@�@�@�@Lrf1#F#Zd7TIɸ^-$i5rWr+G*#� � � � u +6*?yG\Pn{l2@�@�@�tn~2IIG. Rܷd\zcFzr#M (FM(TL&ޔjErg-k  � � � � � �Dup%zA=  � � � 9L)Ki^4ZŴOҠtA>~" f+lWH,#m\o[Q@�@�@�@�<E@d۱[r\@d~dF � � � >F1qؒ!E<ɛ1șTfOYu�t1xY밞_ߒLmexA]6N6޷4\%@�@�@�@�p�\Q3 � � �  uEy)gL[]>g3ɛv瞣g˞t/{Hl?ߗm#K@�@�@�@�@zx � � � � ȍdz* ='ݨlaya%8N_.mFL /@(σ� � � � �"@ SVy"� � � �D�Puas63H(T-KN^&;e&ޔp74賥g@�@�@�@�@ "P� � � � rp7:%;ԓ͘FP_A]o=z\ � � � � r} � � � @t ȍN]'T~[AޮGN7LR>x(ɓHTɜ<; G 9Ό� � � � � ȵ@�@�@�@ & {>vJD*.Il?_}t;O=ʝڷxӇ< \[R@�@�@�@�<D@,D�@�@�@�N(ߒL)eCnm+#ғޡ͛5Q F#.]#� � � � �ȍ�*@�@�@�@� %KH4JT d'.^O=^ j]o;zۊ< � � � � )r=e' � � � @tȍUy7tN|fq,ta.PtQ:TO/@9s2tQҤIc^s� � � � ��\w]� � � � Pvo 'WnJD dG%^l?g)#e#U 粩 O6n̝;\m۶JkN@�@�@�@�@�w +ü@�@�@�@�!@ NcU2o^=Z"w*8~\}I?a9>yK]o;zۊ< � � � � )r=e' � � � @tȍUx?H}?UkBr=R$6.J7 4o&Ŋ%Y@�@�@�@�@KzX � � � � )&itN\EnjYS'wW3O2s^ٳˡC%v޲<< � � � �x�\/^\ @�@�@�@rK <|$7n˥8~\I,$OPbyDz֮v3fÿ) b߾}RPajʔҪU+@�@�@�@�@07@�@�@�@� TWr;t(&Ly>H jS/"ݻUs_XM)C�@�@�@�@�N@- B�@�@�@�p�\'b3T :'lM?ug!oFT^@�@�@�@�@r` � � � �n&@ DM gJ…e55 F�@�@�@�@�(@ ׉ � � � � vrnIPT<9^@�@�@�@�@r]� � � � Jgl u8)"� � � � � )&!� � � �x�\/]ؘXrc � � � � j^G�@�@�@�p�\W3:@�@�@�@�@�H ȍ@�@�@�@�T@.lL},1uyn@�@�@�@�p�\W�#� � � �R@+rNJ � � � � @FF � � � �^*@ K6>ܘ<7 � � � �Z@W@�@�@�@�\)@ וp'C@�@�@�@�@ Rr#D#@�@�@�@�/ S@nL]y@�@�@�@�\-@ + � � � � J}v�\! � � � � )b � � � ҅E 7<ύ� � � � � `|@�@�@�@�W u>c;\@I@�@�@�@��H1@�@�@�@Kz"SWd7oʄ d% /^!CK.]<; � � ��@�IDAT � Ƹ%@�@�@�@�ZaxS=qxۣ< g<~@|đ\50xa}VMԬs..Wx$Wn3wȉeK|g J5 NbJ~z|ymʸ@�@�@�@�po>@�@�@�@ zFKz_^K\ӁdHAR,G&Y2[]4y{=آ2' <}*Ʈꈟ"M.;-YI%+_hkQ^?[Rgs~'npsN)VI˖-Iڴi%~3d  � � � � Y)!� � � �x�\/[᳗­}OגE[r=}g]J]V}aH0c iѢn{ə3g � � � u5aF � � � � <hio<=Nt)%}ruϕr-]7w+ɖ&Eu@ŝ%^RU[yhO!wҭ[wyn$Hml � � � }1/Z#� � � �x�\/Z!{O'0tWnCVK::o:!MgqD qqlO}0HbǎX zC�@�@�@�p�\Q9m;ef]{JkNp˗hHT{w+gυ@�@�@�p�\g(;iGU,|ܬfQZ&qȂϺO6^܀3 e*I_^Jm7K"H%i֬.E>SW%~rxuv:g$LF2-/Y*UX>ktYZ:(w/H %ErUNݓKjE }Kή[+DKcYT_p+OʹrA3I7dPQލϞDbŒH'riNN$2K:$e{ȍyЭ[P붒PaV*q۔ӫWɓ 8Kr++M!aOU!&ipPv9]H;dz^O .X@n޼e7kLsr F 1"� � � �N 40?q|2hYg:I<y'*dc=J,<1bo8W,S<8 � � @ %|#4~5HB=Eu~$Cxz'rW~Ga˓+ZNJ u>wVTꏝ$!Gմo$o&f}{dq%YIT:}Z֬ˊu.;~eS.Tw?:w##2}u_ v6ܖMEtVKV�_|.{&Oy߾bݻ6ʦ咰oixe^YҫgS?6B,OZYhwua,uT 7>r$d #:l젓oV{# TA�@�@�@�\$@ E 덁B^5Ul$еs{d@"3s<!qౌ l(7m^<qC>z(D8@�@�@�6^/GS)9<p@٦ Ĵr-O@AQ]]MbB_wI|Zr3)'7ma،ƹW{~&WI3} ~/W҅.ϖMP[QԎ:k)S;&N v߿XT[-MdZf�8{Zd)yxcYptPͽ:vVcpkWoxrq=WFw\ڽSưsոs@VvU nqnz}^ 2ѳPϞC{XݗmbK\_[~,}ՊXq<5>dvm*̩^G= Z@q'-a~*[n=Y(d'ȱœ � � � �/@ ׵kD ׵.M9ڭN\2=i 1ج1{Do @�@�@�o EYß.O4 Y?ް?ɢmuWK|٬ܕ'AAi(1qM`봂?~Fph`֩@ uv̬_[W۪]n@ZTԎ¾p[HpΨ1ڳkH{{@ڑ7ӫt`czgVKWK,Ye~׵~CǖJݤ<uR%^$>ji=/UPǻ?ӧrbPMju�ߵM瑸E50u3 ضU$ˑ#2Z`6RfݓB!;0kc'uV=ad,WNb<~p_->Ʈ#IK+׌`xʔ4ʔ)#7n � � � �&@ ׵ F ׵.r}B0 o! owITO%t � � �x�\/Zn#g3-$Il+卡̧RD~[N\}YC@gHRmZGrpL]e~:v^mzMĦetJHWunҦk$j[a=={Iw*0:HڥWk1M|.k'a@ .78վpȽeզGuebzʱE u`v#(_@;-[܇B Θ1Cs2uT|$6va?oTRt>"}#� � � �D�h~NȽpQN>+2e?g&aW_~C;.S,3O J {UnܸKvn/ cUӋ/3g$[:U[rqOD&~vNhGA%Oj~MB;!OKy_xLuڋTxҤqrgP]Ŋ[߰iKKB @ � � �. p.sgH-6(%Wnȷ o}/[Y'vKHoixgnR!آou}?~iѾl3]8qu 7{׫)7aTJUN*LDIB^}y2IU;Ӱ>ud\ROgrM"k}vo|-s^9_N_˥HLa J`ug0DիW塱KH^[xc7ߔAҥKgq� � � � r]nYA~9x$Ibɟ/jDY։ ޽O.^2ďOr):v} 2\&M ٤tϾ!l/onψNX-]6lߴR] FIN>c%K/})moCewf#crY*H[R^c>f$gn462{4n(> .;w|ײdJ 6NʳHG+uYx??)njʵ>J*!]:Z5Z¨s7S$iȿ۷ @�@�@�<@@,ҋLie#aRh^Yޡ͛5v\Ɂ\TM2xHƲmXrγjڈkpUZ?jvU;:4j ə׊֡PQP~RK7@nXdv :DvO|4B]61[-n>U h^+2ZA (Idċ)Sc2vXSŋIѢE=3 � � � r]@{d0] |~b}dJyrγ0oX ^_~1Pcg_ʄI}KΖULW;u},߹u3QujȘQ!Nطgr*U*/? l.(5koȕ+,Y?qJ4n*,=sX)T0,[>-^.(-7a-mi\<AΜI⒥%Mx́� � � 5m䯍{йm^ sZX0͑Io~ⱽZH=9@AysN se^q]T؍ {b}bez[en˦8f@ntI>w?o%V;/Z. :[4sT I</Rom+q`|a];+橎Ck*6ez)lʮ'[60.7m.}!>Q3~]u}v)a얬5jҥK\5E�@�@�@�p�\ F Grs&)o+J!ɕ3\6v]zܸqӬN:Ql,K64mdϞU9&7l{];OדΔ+F@<s挒;gHLNjT;-RHRJ!O<e*۔[QZ~ljw… {˦[uprSJʔ -~>Ֆ R)cR{! @8,<1S;nظE*[Tq=%]]T)eUvU;nV7oяz͛ c[n]:?\F9r_u[xDoo و$9%B5;珣$7Fj!� � � rxq:d'jɎC̥oIĶ";ȍo3;lkwTUցtk-_OQYWmuS'ɺJ)u 7{xSvl̯VN۸^nZ˯x@n/^Y\z{o8&gAoɥ];uyṛ <TҲuVm9@�@�@�@�<W@k\(-Uܼvj2|@inRwޫJE=ŬW'ۿ-˲g* .jV2y,],l۸BƍkD { ZvmE>�nikͰ%^gc0pC+"j^Vm #KL24I<V?< 3w7Ji5^=Jz8xX]nNZ4{C}q 6k\f-jSr]6m>|(:vu76>2 4h.7c&г?'>o+|w䐜7ޣ nl-y}S� � � 'Ur%\ɓ~mCh n<9ڶGD(}z> _ >[K7)A?ź!)ty%/[źv24Lx�lf-ࡺmr \=5^X/[\Y.5mw\6~;\v6f_e,GN&/u}yFC}o&ͤʗ_T?4rH|nvFP/#e+c)^/C�@�@�@�p�\;"{YYt~=aVD�k2vmӡ.+pZl5 -~j\d1k몺K4mEW L2cnC 5Mmn2<zHM*O+UdT9oM4F*U(gcȭW:;r2mlRTyάI6iUyqR38g)}? ل#Ĭit_z;RQ *kެ|`Ku>_&~CrfXokkHuN#@�@�@�\@/vq8yOҠtAGuVxz W-U8vmn-m^t\uz5Ʊ\I|^:>6r%W銕F %ցܰcoA_H!;ԚU3$Sfix͘�I\Ϩî/C|!rW:>:1#:L zMK!2 5UE,Or7_o^Gѣ[{ѥL � � � s:9Q or-_Y<RDQdZHU�TA_@I+:wݽ}H<Y}۳>^fRF˥cP<Kt;=:ˇ}zYeβߍZU@8c/˰Ieu殽^<c'IikJ9 � � �^!@ +C|7w˙If Iē o z(A8'oIء^<&H"Sڎ_GF)۷} ;*L uIկxuwԪ+YT eUh*>B|b;ݾݪh yիda׎:sRiI!VzA9L9n^yq@gZrIB3WI̡wv<2\N*ѣl6v(%þQx1@v(ZƚMDݾ%'m#CBBmw>!%㞐@�@�@�@�[@nt GܿɁA Ԭ>^ʖ)iNa#1<sIoJMcG ә;@H~媵Ҷc& $Ga r)\<[T޽KiݲaO6TwW^%+~Ԭ^ż>QiVGnoI~չ0ú];aXlizͿv R;ѕofkl[ � � �,@ V:c0^C 'yz b(m: R/]jաv}s|3ii>_&vg׺fv5Z 2ZQ^}dz\KTSZJ)\k?TMl^]v%KwR@yseEޖl>ߜ*PȦO㫸.iSE%aNmmU>6ӰTW9N&W}VMT>dg;~ZWrg̘!-Z\4BiҰC � � � �&@ ׵ @ n߹[vkG<"nݖwȣGB=} [Ҽ[oPmӦM-%ڵI$^X +g:I<eMIͲю{dr #{[T`x^ 7\rUlv7aH^Y@׬0N$ *c5]^)b:1 � � �1H@-3ʒ|++|ؤOl)OO+QR 4k)o6*[ a޹p^&WyU`X]/M7__MUǻήց?"'m[m'UM)wl©ze#{d_OM􎾖"XDN(׏׮ȝ^MPlI$Qg:ceۨPm9jՑ-Z٬ wͧ鵫ü'o&R6Xs@[7%F_nTy ҶmۈS� � � � r]8 \ޓ]FFeᢥr0Jd|Zo}'TWr7n*o`e3G6:((H> 1kYWrϜ9'*~í2W\1rw*@�@�@�!rpɹ7:%u2 " ]<=h,QaƮjܔ&֥ 6v:y\3I,YCq-64M2.+_Ki?{vck7O uI>}?߽rY> ֻ?ܡ?gʽWD0ujc]2zjw9r˗uIɒ%%k֬ҡC{SNNT � � � ��\׮#-;^cmdb;WvI*$5ҤIN~ar-wݓ-nmvs-U-w#,S'ȽѬ#syr…Kti0Rf@ٸ+,S:'km 6gZO qmF�@�@�@�[\y7ry |g\Ru.G1'<bķһwo@�@�@�@� 5rD wo&QYIC=ropQ,]!#GCjN]rC?wzuj?.UgU+jyÇթU~> � � �8V@c=rwFoLµkҥKrUc@�@�@�@svȭZuQ^ҳ{0jEݾf݋r-7<tDj}CԻAulWYUf}cɇ%KWJپN'Of^[lܴUl,Z|̑M_K0i>TL4lg}r)^lޤl۾KOJ 2y/@�@�@�$@ AtrwF/#� � � � r]zQ `l"eΝ@ ~W.̇ڣ,gYg=q,Zܬkټ$Ko^[X"ۮMsr@j)Z\rU,QT1٦> v,]J[ZeaNAvUxr:;vlWz:q;/V2=}y u3vi � � �-@ 7lJ=T>HΞ)ʔgdJJzO)Kr29@�@�@�@�p�\Y5} wƕF6iXMmT|k/YtW5{?ɓ`2q >*[LwnS\i1*j9>D7mdԟ ;wsusKBmDQ\`kϙBgχǏͩ:{ \OuY$W=K�]ZZ2z6\ � � � @r÷<1L@�@�@�@�%@ 7S keͧL%}<ؼ5N8Rl)Q;vBlݡÚyrG2y,>G%[n!=ڕWYdUIر{ԉ-kI>|姢#s8*{I\9dX@n\\qC-ˍ7{j.n=?{9lRb<d-暨Ю d@�@�@�@� ȍ<D@,D�@�@�@�@� %uD '2`6cvS@>aRf@wd'CtlI_JC|Ug,Y8[ k_浣3H?e֑$IbTim9wn\5>fްAqLU.V5e � � � �p`(Ln@�@�@�@�<_@k\\9nǏ':ow.e+Բ4@bE2zx9z<xd)qJ9sNMV^'W^;͑yrsm#kw?}Ç`jNՒ~+Yf2t@螽dde#=wˏɓI6-[m%QDb>@�@�@�@ r# E3 ,@�@�@�@�@zߚCG%e)SF}T3gɩg$Ct={6y?~,7nޒ.qy} 8xĘKlɖ5ċCD[wݓgK@EI8d˖9]mt� � �  EɏD 7&>ώ� � � � � J}F�@�@�@�p�\W�;Tف\gP,:C�@�@�@�@�(@ ׁt� � � � qr=nɘpD:{:@�@�@�@�@r] � � � � `| 8; Eg � � � � :@�@�@�@�<N@-HYgѳS� � � � �R@+@�@�@�@r]Pgd=C @�@�@�@�p�\b � � � %c 8; "zv@�@�@�@�@�W u>c#� � � �Z@W*쀬s(!6l~]=*C9{<� � � �x�\[3f� � � � 8t˞3I9; ޹#'-E3d ˚Y <8q$k N< 7'%-4AʔIn;˩U+t|o4x"lO\غEn^VMTOrq}敢,{L֬Y#+W* 9}48T � � � �/@ 7@�@�@�@}虝vSf-n<RG8{Ae9sJHJ,uGxW:; Ʊ2^M]Z 3jY[]}I<KGvMd9sIKm/N^% v, REiS>PSA=i4*<Wrry@󖒹beKG}.]8_Ϲ2}4Y'Pvn\!ss[`,YR&M*qu2)@�@�@�@z | � � � � ȍHDžue6ޡ͛զ"~7O ZשaK|싽YggP [?{wտ%;"i)PJ kq+Z܃,@H˻sv7dCvg7ɳ2wܹ;>%6ؘmsH4!X]I55ЦTׯ1_)[Fß~QƽcPqZk$xu%_JQǔ-^z}ŋR=K P�(@ P�R�]3Q�(@ P�(@ +@R*cqurGǮڶz-S / +聂9?wUc@G?'2ͭĸ>K=C:9 ,\dȐ7nv�(@ P�(@ P @ P�(@ P�(ȵw8p\ѽ^E͒ W+M(M :LY,/ ݛ;vlgVf5jdծn* 4.TFL`(ѦvTNN t3{ru8,v"r0�(@ P�(@ P Z֟)@ P�(@ P�,+@e V(eHU=gn? 6 r<w ys(]/RwNvP; v=)9.b�h{^e2N3PʹxvɧʱPupP 5?.K]ao?xx"!s1w N#1Ѹ�{keG%f-7g?+1w}%ҟ?{8Ig)^YK o갱o/<>unnpɞ77o@LT44i|kށ{ak�w]FS?aUM'^Jy`qjJb(nm*qfliѾjMFkEПСCʥҥK|ʹ9 SsS�(@ P�(@ 0t3A P�(@ P�(zM辰/n™[κ;&mǮ?cCw. rgOSQ퀬ߨr~? =}OkAN}#}|kV#g3;iBe͊Qn|7+}nQ6:۬ " ֞NLwPox̝P ?XFǟE�XvgN:X>9J!K-a+黹u}N|"l0u:3gQ}@uбc'eQFa)ʹpp}C9/(@ P�(@ PH�Ih P�(@ P�(@%@n x? v_A%ѯxptq)^L<xѿ-*˟>iKT; v=m iە"<ET|/74{8  T¹<Ү+]lK>U76o˫W{wq~NJ Wځ6:"ҮRTȐβG.+vwvjF 5;fG!Yl\{ggcQtb]ro_Ĝ}OU rO+~ivX_:o<Mlh^;+Hxy_b5Wnn-} B;JR=̥:vf`=u[Z/]Ԕ:}9\Ƚz% ?g@Lc@ɓ'QXܹs0x@N)@ P�(@ P�/@Y�(@ P�(@ PzȵFYܦC /㎉ݛn;G#_N|֢>N{(5RKC퀬ߧek�[{{rTXbb5yO[99)+K/Dz O nW\OJ WPqST фlwD붢/*<{m)T(<:~ack'w}F@n~XT0N({w8eȈ<_ZCs^RHVzir{:.'ODƂqf8LTmB_²E�;wJhBQ_\v5Z65E6/!Zltd8w҄ KvUn@c4;N{aÆ?�(@ P�(@ P` rL P�(@ P�(`yr-$cQh\1Wj^Ѷn<~}w-z槚pnZU9cêNN _'7{U.'؝[IϨui&E >=z> GWW$+s*/!j2?m@uq ",{kVb}=3fԬȐOwk)tv5H;)G@{uVԩӢ--SNXj&Kp2S�(@ P�(@ $CdV P�(@ P�(@/@n x 䆄GɸӴ.!-ka5 jPWc7R1f`3ot+j 0zjdծg4DVor?>nXPS�+bku#], o3 =:bNƠ 侹 !_CeV* "@nY3OJew9x�)!K;WGt׾g^߾sn?a&+2d�WMhԯ۷EʴÔ)ѣG P�(@ P�(@ 0kYV�(@ P�(@ P�71\iڣ~5([ 쭇'KF,;uvա!|*2~Jv@Vzx/ WCA\Cʧ☩PaY ezEƂu\Rmi R#xtv /? ^{)%={#MJ<d$r3/>]}}p#vC+}] 7nԄ_a߾}8}XA0o^V�\(@ P�(@ PH 䦁7H P�(@ P�(�Xc]-WȞ/:=+<?6>-]<Vv@Vz&bҙذMZ'Um֚)+qz/w8Kuᠩ_ 7},o\Wԭ>gNܨpl/]cV|5=;lDߣF;K2Ƚov~:P'lN W=8{iO`X <ڶ4ǔD.]~zG5.5jHɏĵS�(@ P�(@T!@nx�(@ P�(@ P(@©yO[K/Wηi?댒s*RKC퀬>Vrs+77maoenn}?e:<u0x_ WtߗE=\QcXCGΤPK7іDGD`gqqj@Ʈw rWȥRq׮]h֬xS3)@ P�(@ P 0kG P�(@ P�(`Nrͩk 6 fvu__[:'eu)RxC퀬Vځ\u<|ڷ]%;tFj_V!^aqPqSv#@Xݪ^n}?_ɟAV{zuZ6U 7_ںbo=��@�IDAT'>G4KBLxrU^>\77nl s:qo'aܸq�(@ P�(@ P@5rUf! P�(@ P�(@+` %Ƚ)>uP0ahP8&t3HԯȪ]GJF`weD{wh4WD1Qd1q{ค ;>{ֹW;{fsͧ3v葸a3U M{?s6i&lSS$:* v [;vRʌ5 SNQȐ!#@997(@ P�(@ P0^\8�(@ P�(@ P 0kM6::ZNj~T4FyDNftxj,LZ <?й/U9'k=}ս6S !m�.gƆpk%ZѤ>ܻ+vm6wd+Y: ><wnsv =@qT.:KQO ž7R5U W /]ChN)7\XݻZ" =wT`5r'MǛq8(@ P�(@ P@2Mo�(@ P�(@ PH Z[X{>{xP.i/n;\M5/|ަ.lll ]N}jdծg7(ܓ?sfR:E4{qmj,WWoйf$#,_K+72fJ_qfM&OqcF-^ r{wǕyX۾2s۷%<k JK[>齔_RׯtO)[h1bС5y�(@ P�(@ P�gY P�(@ P�(@` *ކ0&]~曏U{p+4}פ:Rg7QȪ]OyCMؐBU3KpcSL>-Sq<8n4Y*ʵ: H; >w hU~ܹ\鈉)vsK'r7#mgF-tN?&¯g)�@^WjhliҮ?C!{vaאAT0/߇C :�kK;?wY{zHN{s] /i|VmQXdoذwP1edܜ b(^8^.]:s�(@ P�(@ P0/S�(@ P�(@ jrS.^" f[ō}#Ȫ]/\}(}/_ <(s[|pʐ1{-1 <{t!j#:* ..p͓vvjW/? 5kD?�(@ P�(@ P` > Q Ghx$"#m}(@ P�(@ PHvp=9;6E?Or@nrx UՁsA@XXr$̙ P�(@ P�(�*AQF E&(@ P�(@ PPSE& Ic- UY)P 88~~~xB{rx8j׮K�(@ P�(@ P)_\x߅`e19vK;( lP�(@ P�(`R(08<2 a_3huoi@nZzU^x �(@ P�(@ P@ ` o\Phvƕ^^;3k+�(@ P�(@ )Vͨ)MDZy1V4jdծFF>&(@ P�(@ P�(ȵ웦3n&tpuqX�(@ P�(@4+7!N ُ||pjK�(@ P�(@ PH  Z]>[�q->2(@ P�(@ PCe@n*}ccU^Z}_�(@ P�(@ P 0kU@0CÑ>#]g�(@ P�(@ P m0Y2,ȵO`2j3'�(@ P�(@ P�(`brM jtڻ6cv1(@ P�(@ P@__I 2k˛V@퀬L(@ P�(@ P�(@ N\Y&ew IAX P�(@ P�Tw ΪյD!r-ΚfP; v=qb P�(@ P�(@ P` 7xA DLgm�(@ P�(@ P<!aΎȖ<EdVr2L#v@Vzy�(@ P�(@ P�(/@:~/"*:e:EY�(@ P�(@ ) oagk3yW@n|߸x]O~lKՕH P�(@ P�(@ P@_\}u={# ˙IB P�(@ P�(V` 7 njד-UW#(@ P�(@ P�(@}rE9O+?h*�(@ P�(@ C |@9>=bjUծ'Z\G P�(@ P�(@ P ꋨsV~RGU(@ P�(@ P0@Z\s|z8]OT]>�(@ P�(@ P�Q<&P�(@ P�(`pN TU kr})@ P�(@ P�(@ 0/yZAKMV�(@ P�(@ Pi rP;v=Ru<R�(@ P�(@ P` W_D:B P�(@ P9 9-&vPUz2wn yjuyIc"CCaֈSx(ܰ2d8ͩ+YXG*Q}]Dvkk{G̨\*tkG`b|9\Q3�(@ P�(@ P\ K6yZ +*(@ P�(@ P,V` ך?=u.\UP"oDWo;Al0اfjUծ'?-i,QA#4$,ww~CDnnؾ wni6d+U8v4sK.Ei;hO_{eR 6<" .psq0K&m5bgZ^7ڏW}JzMm Qe\(@ P�(@ PPU(TmTEe1 P�(@ P�L*V` פMv%<}ЙtGPݣNIhD$%‹ RqMw.yjmTUYRW\5F~Tqd ͸ .}* F2kDNA P�(@ P�Q4'P�(@ P�(`f$w?v_&@S.82$ Z.lMHa@W( *擗d#wȵ[P�(@ P�( r[Z �(@ P�(@ XX |@?hOX.ނ#׫Y2a⊝bhB\iWݏ~Y!Ur/^+ct N~@nr7GX2+ڎ Z;P�(@ P�(rei-Ӊq& P�(@ P�H+_0'ˈzE Ѳ'9:bFqgB/^cc ̟S aC,T =yǧN* ~ i.X3em?7o+X399] F-;: 擮,[ՇSL霿~ Ο%R,SVg|b@3gpuyJԯ_yQMal;zWL(]$h}c WsxK^㏃g DL( AO^?W*sM BQ+7/K Y/Eb׉R5n⭗ȑernż?8|r.7 vCB-GUO^KOqssCbЦNQٽ#+O\o=xMj9Q=;~|ȩYb W�(@ P�(@(@e޵etY�(@ P�(@S/5ŧs5 r RXK@]5dQ5e?'ƾM1(׷9}kyllĸޕDף]<9} o>й?Ch`12./DGDY3p~8פ ʰ/`k[Kd@!C1gyJl۶>>>ʹ JaQsa.gwMP3r}<rPcGqRq<|NhuVBڃRC-t~Ҏ/)l, ǘ0yaoVZTt .9E[K'#{VeDoqr 6(@ P�(@ PH ZMK+?hYFU)@ P�(@ P0@Z\S|Z<TU,a24jsއU J [’ExK{`zJ(PrmIjPat7燥u*Fϔ{@!9wJxu6[-e͊^Q&};vv2ǽ_ePsPŠȦi7Zgþb;jB'jM|3/v]BQS[m<U0]Y.&5)b'b֫]u#4;fEJ~QGtCO:J;J;ЦOe7i�s)|N ݕ_ /+ J7fvq컅b#령w!і2~\vVJ.mADT V!v jjN(}|Q�(@ P�(@k` 2HZA2J P�(@ P) b95Xd KՕGe;^^ [99)+}㭴mB[7aߗ!Wo@ru_;NL*z8<yځ\)+v HqZtHʯ'cslᄄYnLt=76o{?ä9DGF":2Bc \.Q@ndT4""E}gG{eIQvq:h9@a/W]#s:~iZ)hگuiSIRm@4A 7;Yo|V#AZ\Y]iz 3>0^z5H;ʯHTh6^)?Gσ|qMM^Wz9ّW\ P�(@ P�(`ar-,˪�(@ P�(@ B |@)>-f\]OT]~rI JޕŎ]{ޗ ]κub4-@ns>r=&:DS?P mWUmO+o{tҠWnbU&b|սr)jrV9*펻}f*\igܣ : CzݍY~c? .L=zqH;˟ m\qL?$] WI+Ŝ5D~ Wg O(@ P�(@ P@ ` 2oXZA2J P�(@ P) b95Xd KՕ'@Tpqٟ WaKc}v鯿H-5@ nxlwdJ]�ʍ:iv/As"gǒ;iﯛWlЩ|9<-}C:EۺEQ0[J%7;'Frб>~քjфk`ݔK7\e=h\g?G;E:4<�(@ P�(@ P 0k70e]V�(@ P�(@ Pi rMi1 vPUz{Lj kXӺ(hƯpi)GK-ھ'N/*r=D Yq0 4A_gu #hhY<WSoWh5bf茪sgsT)S皡r|N Mh_R _ 6]%gDםKĊ7uQq@#(@ P�(@ PA\˼i-~XKV`מѶu t&]�(@ P�(@T$V` 7|h5MR;v=YRu=&5+[ۮ%^\ 9�*ޡ|>rteɁj纴;Ks\eǛXѴ+ڴ9 ֮+I3׬T^};ߋU=saZȕ%5#ENtI:&5{nYWdtݥ8@b;"+y_'E7:<�(@ P�(@ P % 0kw~кp lUF  _$Ɨ-V-tU4'nqb6668vp' g4(@ P�(@ PD5 e xLjד%,UWr[Ćj{?/ab)]Bq%r=u@)\?=gNEr6l?ʖ}?CǹQzv{n]HЮ^QLZSwYrK'6Ff4i@1wE[zV늯fwm\m)@ P�(@ PH Z֬ۄ/F]\gz,(;PA 1S61{A.^O.ʒ ER٠�(@ P�(@ Ek\5 vPUz{ezAͱ.<0 +c\y_r 7WtX9Θ}_ͭ+7z:\_ZAOfؾ};N:ѣ;ݕsknHaz6? T{lax+r{~U}A{wYk {;!sVk/I~m|53W w̙"-1b P�(@ P�(`Nrͩv WZu~R]I \Qf]}ۖ׷g�(@ P�(@.`m_˛\sɚp^rT;v=YRu=n7=u=qqu*'Cr Wۮp^of>hv cB5FtTUW!CbΜٶm+|||L1*s|^>$@<^|X8QkK \h&<{`BʳEĠ7psg@11ؠ�(@ P�(@ P` \ km?hr5b(~6 \M-D(@ P�(@ PiLھ0?MW<EttlJj~T87#v(U NoU7u><|yd7)yfDVyjiTU>Y\?#OĥeK4kׅ[>슻s;q^N|^>,Kl CpbîӮzԪ&N3*z!we t1ڭXo`W!ȕBermݢȟ3?," G5AS'n]G։'-<ۯFF xBJJ!l?vOjб;"1o%sSKU(ؠ�(@ P�(@ P 0k7~2ȵǖ +PƫTH &Ë�(@ P�(@+`m_ \s&sڣ~5jӆ[{_zX뢭wCRtAUo{ w˛38M1Pw_פΕ>-qݣ]ԟ2=ޱځ\y}s| q 7l¾˧pHGҟʠ$6RB Fx,,}:ʝW|utV(YO[4QKi[r_R/ݝBz iҺ1xA>+2:g+8-:{Nأ K'սr%?o@?氳שru8xB P�(@ P5l"ZZ#+ZSOܠ  [lfWhh^~9.ѩ:Єx.3g2t}�(@ P�(@/`m_ \s&s^c.N':Y[:&[\C6IT0Rubwnes;B9 mg1}e+JNɁʟ C׸RaG/G6/U5?~gN'Hb>-Q"g@2: _}߱c;5kMb!_%]rջ"Ϯm}Q�y]&/EjX/-XҫO[M q9pp~.{yO+2 oUL^|R nqKuh>l*C?xFU.v8|`Ǖ+WݧO,^H9g�(@ P�(@ K\s&<ȝ8 6o)^ݤ1>;wQaKqc֘=| ǎ 1Nډhҩ𿮶b:OqϬSY$GĹ_gNE6-Ęoױ_{X,17n¥W!###={6,F Oѿ�(@ P�(@)`m_ \sr^TUjr}K}F}$ہȭ2sTt("CCe:8 k ;;(}#Y5W.ϑӨ{S i\?wxم6dKY\Rc'# x%ڎ.{A<_B7̟? Vˋ)A P�(@ P�%@d~j gA/ujy|(cRXvԘI$ʗ7/ Nѿvbl߹.]3N;+(U`@{Mc  yIu]fudS5S�(@ P�R}a.?r%y-"vPUz2-uq[+l[_9,!jNgٻSXveРA7onRnX P�(@ P�( ~0]n=wc'ѵg g{FdnL عk0sttDPv ʑG4u=OӋ@lt-7nʗE^lѠ~m-)KnĈŮÆ Dr^f7}ԙs]lyB P�(@ PH 5,絈AUɨ+W =f۷DNE:n MH)pL:6( =c} ~H׺4FdeDEE!s,/P}ϟߤ58(@ P�(@ POdom?h J0,\"0?ǁI,yN|:t/ m^b:}P^2֬XvVV z%u|B\:M#-(RNHg]gԹ'�(@ P�(@ `m_\sr^TUjr}5/ı?蔬TY Tا/vvT֌xM? 2˫j:u)�(@ P�(@ P(rb2 kA+@nxx87c7]5c ڷmX qz톸fyF:'Ahު3޻/lXi[-^vnY 'K!(^XF eyryI:Gi_i_UNKF(@ P�(@ P)Yھ0%P;v=Ruj/.Y%ר vޢQKXZAOPeTQpL!?s.$B2WVYû*ؠ�(@ P�(@ P@\˼V|\IG b߮ț'P W ֪#J;ڮ[rnobw֕jl?nh / JX _KWp.b�(@ P�(J s13k.YkjדQ-UW#(`}npq7F�(@ P�(@ P)L\˼aVB\Ih?]blmmyBu`1bG㻉E;?nAƭehKCzF'u||\i żŊjCIHY(@ P�(@ P 5 X2f \"jUծ'Z\G P�(@ P�(@ P ꋨsnm?h%ȍFh/I>P w0y 1n ޵h'22*xϋw+CkW.FjkIP :v?PJ9;;|2VԯreklP�(@ P�R}a.Sr%y-"vPUz2y�(@ P�(@ P�(/@:Vb\I?4lAppp-Qң8 0gbzPûjpM/Oj6 Jx9f[M[v͛�e]rýXtTvH P�(@ PH 5,絈AUɨ+�(@ P�(@ P�"[Zr%a_ $"cmRul3A?.fӿGmkN%< $$yr©aI &u|b\y!8p(Nŵ7![~mB]<R�(@ P�R}a.Dr%y-"vPUz2y�(@ P�(@ P�(/@:\Ig/e.5+l|Uk6Q㔱|)wjk..+mV*CMxcʂkx Rj\9(@ P�(@ P E Xc \"jUծ'Z\G P�(@ P�(@ P ꋨsnm?h%% gb\Cŵ:k`޽g?>8T޵#MOj6?4+/p xq*;{T�(@ P�(@)`m_ \sr^TUjr})@ P�(@ P�(@ 0/ι@$t t9�111:`\bpCcŨ\=IDDws/-@Hj6 񽇻u*ٳ)kny�5DW~lS�(@ P�R}a.@r%y-"vPUz2y�(@ P�(@ P�(/@:VRae:` '#Gvڶ`uol1G w޾vvI &u||NEN:<KaӺeprrR%7VZFO{vߎ/H P�(@ PH5,絈AUɨ+�(@ P�(@ P�"[Z CVqmP 7:::™qsDFPv ̑G58t'9#K!ܭWW)e^ԀmRȕj7j׮ߔYڵijU+`;ؼu'X'7Pb<P�(@ P�R}a.Gr%y-"vPUz2y�(@ P�(@ P�(/@:ևr%+WEp҅ׯ`qi1.?돨_v!I &u|B\)ٰQqκlll(e˔Vؠ�(@ P�(@ Tk\ KZD@dTKՕH P�(@ P�(@ P@_\}uέ JZ~_SgHb- n?]\Юm 'ޝeM:1}ܵ>Eanի*�(@ P�( s2k.YkjדQ-UW#(@ P�(@ P�(@}rE9O+?hŧK<yɝ y䂣c|í?44 75((t霭n\(@ P�(@ P i rI#獜x]AUZ߽2Eު%m N~s4?W9Sf4G \\AOt涱A_A'osbe!sbc/Vfrɚ#08{Nsj^H8:ءeJ9_aGb hg2ӊgE$\ (@ P�(@ PȵۑV~в.R�(@ P�(` qo<{(nX%0X14<Ǯž7p3 2t\裹x<0vTUX۷ҧXFl򒰠'"޽oU 5B'5ܖ! i/L 5OE3]֬"4Mk۵ċ+ wXw 츺z%#f5v"zWnbU&]Q43?odf1Q*ʤeq~gc3(5g#]D y~#oqĢNȑ9]c-uAS.ftAeK%5Mg/5<?�(@ P�(` ZJ+?hYFU)@ P�(@ P0@Z\S|Z0X~,{CgiBuB:}eqq`^kSRuMȕB\lȕ+_B$Z# x#9+6@rBQDS? bw 6tCJJbz)Ϟ%8�(@ P�(@d0 dܚV~Jo�(@ P�(@ Pi r-A3T]ׁ3.!@%pa(3+\pHsʯYۡ||i:TUfYrg% Y=~H W{;v`OE ,5֦i.% f>t9k_6}5'g�(@ P�(@ Z\S7_ZA8 �(@ P�(@ P Zo8p&L*"oLbXiB.`,T,'oWb&<MV_AUBk-\#J7.9HrG)H_ Mgϴ+l�(@ P�(@ ` אZd P�(@ P�%V` \d;oQdː-jv|ttłbƄlB Fl|d⻊&65^W;v=Ru?4 :)/ )$7<ڶWFO/d.'?x�Qaa:nn]CO>y~"^߹-Nptգrxcz1NɇǎuHnny"k(ܠҧמ^^LjvճhuZ4"mOgڵʥYYfʹ E&7{K|QT{8?Ȓu*E@P8N]y#>Aph$ψu"ggߛ/yl왜53헸(@!DWsqϦ3wJICO>o߅=&SWg8� dB5hs3מC2[ͺ vsU.y~f4w'ZDvl:諱 Bu\h[(}mG([z. -_ջpkqYP||L P�(@ P�L.@I0eQ�(@ P�(`i r㧻(SrO^A(# [$TU6Yr}®!'x7(Q8cTD; fBm8cOeafMH~r@+{gx2Ȑf()w)~~~ȓ'2o pT"a:!Gt:ǚ}PxvLX Flչ.dSvVn{M܃^+}kkzNv),~M9Oq &4>k ?݈O⣖Dhy׉q/˿HwssFE3皠mksFŰ} P' <s!uG:ɯ#f!Tә'�(@ P�(@ E\&:iZA+Q�(@ P�(@ Pj ZGL|OLλ,@*jTUVY2wkqW^8JA[߇/,Y$µK{`z:c Ԯ\+I'f̀zty6@ @%+;{q/)ݵ;)9&%iBCڑ7Sx.ߠCnϿ9se5pphq^kfE[;o_C@k!D Q2V(A;cA{ځDxTvv|7#vS:>~9͟ Qx t*a8v BãpqE7ސ4{⼶f 9Dh ԄN> ĕ=>+LRٱVJV dVݚî΀${>QF��@�IDATȁ\irGo鐯.'i[y DZ;+7.$v Α/ބ௝E`WhX%O;>:5tǖþXiP/خ%W Jc)|,B4z@zI6U4;G`ޛJg.6~Iؠ�(@ P�(@ Pl 䚍6Z ""(@ P�(@ PV-V` ת?3E bۢRPU x$-Qd KՕGe;}`2*, 11ѰTǕ>!MQc IOp~|$վ?+Pڗmȍw4mh1eWnbU&ܳ[OԞr-&: Q6+7P++v- Btt lmmवk<@;+:]3?e'_}8OJ W`ިhR|*IUmݢ/\,%;%Rw0|C9_wܰ<)$kv ѿRj֪ |O- !/i'[i6nph$} ̮M;;kDmY<Bbߏ@6nf'a3!EZ= BmGn˟ ;f{H P�(@ P5mB325 P�(@ P�[ |@u=y>ZYSFuhÖvPUz{L']O3QU8T{;nI0jr?tѽzzBϕbH֥1Ol;{Y"53-(z}~^jt+_O8{26<+zݮ z n~AYl{5ӟ^Y28gOYwʧqʯ}cfDBw3�(@ P�(@ X�y+ZeU P�(@ P�L!V` 3ϑ@WJ?]Hh[nzjדe-UWcj ^^O'xpeɢ58&㋫Wp~c!d_ R-)+4;g~'TߒG@nVеqqquqD ^;Ce]5LvMUAJDT^CbGKrV/_YZDd4<:.}{s#w҉+;<а(1Do)vDsowj m*^%=[;_-WnT.C߉8 EOj*ǎ_ P�(@ P�U\˼3i-*(@ P�(@ PH+_0kO@` R(wD\35AU^+O1rM,2ݪuUS@@^1?ևrp݌b Rgl<P\iQJQu.X"QR۷Jmg3AZoB+{N AkPi7\Y]ĽU}rV 3Kf%t|A>cYKx7cc P�(@ P�/@ UH+?hzvQ�(@ P�(2 䦀r߅cpss>2󤀧M]OֱT]~r5o縹e?D ֭tVmN�k) $W|1k}a{4*oVMkR%xqr7C!͎ |6#_^u5ܜ@@|n9 Žr w;[= sex B~ P�(@ P�H@ ;OʲzX_߻]@3v1rC*mRǢ�(@ P�(@ )@nhD$&\D<ݔ>-Qd_AUB+O1rO</݀cl1^~k/5O2k@P84-}RCXFJ6i>"f,?/\)tU?B ^7ҫH. v򠈊*"KDR һ :BglMf}ϓe;=ܼoʻͥnVb@�@�@�@g?hGY@�@�@�@ nyc$%-oT68VVҬJ3AUӥ5>Jz R>$yMGΉ%kՉ>qL{bh/b[& '֬enKKNN>ݗlKY_n޼)1]|yeРAF=5<9kpiԥiIt]nl}j EF M^ \q'J*t='kH6,dߐ>|tk^*ΜarAc}Jܹ:@�@�@�H�乥)oZ)uy@�@�@�p@ǜ@ntL|0WYM Nϓn4;j|k^}^-'X/6~Ƚ-ߔ <w@ ?x@f U4|#)׵篞G5ku& >1=W~$_ƐUV۷PH+\-Zr3<pQycI?Tm; Fލ]O]&CsE W3<u̝I~sXYܤdemVV-6o=?e@�@�@�H�ܤynoZb@�@�@�0_[~~A -f{XG+[*lYW*ͧʾ>>RPU־|h۰Kի/ O6eYI:h'YS6;j|OFS&a+7L6\m-˕%CH~([^ҧwjΨ2n k968O^9t9Am c}mZCCH9O{dI-4y4[cfHPﵯ7KR9eV ޫu %>MzVHꙫ7"e}߾ݿn]6lH2FRXpm[\')'jϵxn9uE+ʬBJNsYx:uWuZ"fUjU{jK\s?~ٲWdݎ3v|/r]X � � � {R؅kؑ7Gf/7;g3\ � � � @tt]fɣHޜ\@n*:3OrblhC$_<lvPq׼)^=qBhpz%{׵kM[|7I}.U ӫ6Im+̒oj,%B[KϿ2#oܐz٬7sBک}۶&1(@'Sv;E %na{ i0h1F ɚ)Pli'<d 4   C웓UOn w'9ి $k-U`L,S9վhf˜m[~jB6mepIډ|@�@�@�@ erSܧ/\!w"$$kFax@�@�@�x wJ$GD`P`-@nP`,oxOʉzB 8`u^&;/="{O#,ذ@Éjڍ7o{-n[B{a9 jj; ۱dD;-&}/ƍUZi-B|RN=ϝ;'y,'5jˉsui4xZҫˀv^އ9u/֗G.js6̕Z\2rlb$ܷo;N͈qnظ!#Y7X?KiF+I:TWzV3 OVE4-K:CяlS Ⱦl'>={Jzrj}gɝ=H._#{TmN%MSm~NȢw'nS OrmbҽE)յf&ׯYX19p`R � � �Xrmɘ! {Vì � � � k,H^2et/ێ95W fϧk^}~N X7/+Ǐ=KP;7S|>p[j.G K07W 65hcՂrIZؙrr͕=l={bJԩSGF � � �$_@nRd>G7GfIp<� � � �L s~ns 4s .a `vPtcwͫToF yZ-TRwa � � �*ێKWoɭۑ-`f@�@�@�p >@gIه@o<W젪;y"�*ЩSg7oZܹscǎ*@�@�@�T'@ }[b}JnL$8(}af@�@�@�@"pr=BYxڋU͗"`vP}r׼\@�O(_:uJ*U$ׯ%F�@�@�H}rݻ'7#"E;uFu^0; � � �.`͖9HUo0! EhvPt׼\@�@�@�@�@�{"ׯ߼-WoVg 3__~!`F@�@�@�S ::FY~>^2Y~>-޲^fU͞OFwͫ@�@�@�@� k/➺I `n@ %-aV@�@�@�ҴwA\텽d\} \ӄAU7]sE�@�@�@�@�ڋFc9)hܷfF�@�@�@�oJo=q4fU͞O>wͫ@�@�@�@� k/̍roGFITTDĸQ�@�@�@�ҔH`dq1o(\]k0;j|&k^}~ � � � � �\{ � � � �$@ כv 젪[y"� � � � �rE#� � � �x�\om/xWfϧo� � � � � h%J7?c؅ ___I.@�@�@�@�HL@nbB{AU7]sE�@�@�@�@�ڋPG�@�@�@�&޴^fU͞OBwͫ@�@�@�@� k/B@�@�@�@zn{T5{>} 5>?W@�@�@�@�@^@u@�@�@�@�o MjvP-t׼\@�@�@�@�@�{"@�@�@�@�I@7AUӷ]sE�@�@�@�@�ڋPG�@�@�@�&޴^fU͞OBwͫ@�@�@�@� k/B@�@�@�@ݾ}7J=I=7u9rZF%:Ȳ%uHGϛ-.\ܕu9XsٺE{J""zNg{$q6t>/9VN6m&*Xq5r]u?j9v<2qBnGFI<HQ=sO29髲|IIN_rj|7ƣ^cϣe%(_;^P) ~X,*7: � � � �@�@�@�@?~En%._W+ݴΟ᪏]vOѰpu'Rݗ-8LNyq T$gJAU]^>rXfnQI3 7A_LZA޼C7ڝ-j*H}o9X;y,2Xp>koU]txL.g8 wHĥK"�ipq+='.V],ʫޙe;o#oO GN]-T6YP}JOwU肄pu=ɘ_T/]G�Qk=;t,Zh>]N7GF:C7Խo)[U'Hˡko7rj<nB�@�@�@� {ϛ#� � � �Xb[,Ntt<{J`bE=p巿ڬԓmN"6mzem/uFfϧ@ntdLk8%G 4oRÆ]n_m>E j/fzߖ%*VWj%7  � � � G@n@�@�@�@�H@n* 75,@QR`ɑ%\u[6GV<h'Ffϧo@e-a㑟HtTy=|Z\˟;L S9 LSyj'DUX"D;LXsYy?sMrBnB�@�@�@CzFL@�@�@�@�"@ lw"kv�ѨϞUFLE PnT:p=f ^V^}hvPq׼=~,"rd)TXLWے@nĝ(lqWɴ[Hm&%v 휐 7@�@�@�pJ@SL܄� � � � Fɑ9<VdmGNɰ J &*>*'_ysȤOv7;j|k^Wr1NmC-A9rJ5P2c~TW6׋˹;u떄)+yהܕ*ܧWNY%w^Us=3#oLmx UQ ё}wl'K"dIWgs^тw_lEIrfmc%WJp`gξc:_)X;cZaŪ˂%zΜ.yCkVʎ:uJ֭[gt/_^Tb]UHI e݉oXܩer޼#>+ RDKj~8m9<R"eԖm<!11bR8Ew({ïޖռMj�_Xj ?i^1͑f?3orKXg毇o69!WA@�@�@�%@ 7Yl<� � � � FzF"{=ir-T4|5yҗhvPtw͛@%dC0%B[ʉ1wʟ_X"5_ۀ՘:*WO.V7 -Ǝ-BtsV?PZqG~W*_op6ϧ?u6ݮΝ;W:wb;|pFuWRm{,\-=$(S˲Nx huW'h"~ k2]yw5.U.~XKzF|8i[}$N%%|] \i ݎ 6QP|%되F@�@�@�H�d � � � @ [@[eƺ2mvC <"%T5{>]^>zDfjQY iĪ7탟i  nf Pe:W7G'hUd͝ONZ)a;Ͻ ՟~N/OI".^TU?yTUGjj${3ܺxAL"Z`W Ez= kV wKˡ ҭO7k}u՞Xpج@JgVkj^|3*k_*=>]nFU 櫇_줷mA:uk!JqgvXΆROiVu%%{ET\mBa=szui]2g Чۢk]|#w?@l}g@-*6 l77&� � � �X ȵ � � � � ur=`˓Ƚgy.11r9{KzOU4:@젪[ynGe?wȽ{1.uɀ'1tD)޺%|BS7o{}un{/&ZV\@\d_@[B?3X5۲SdŨk}sgI%}lFV;#8&yאfȵ<)=e_l/0X6O FGFo@=yXuŬ@6]ĝ(5&>h'>>S_[h'V9CU;6.!?[OJj$?̖A=wi0h k'j'ZRȝ1O5U7voF>S^U-rG>Rf,mh]PXN8~ � � � �\k  � � � �&@ v<Ɂ{_y5ˋZl<a fU͞Owͫϟԫ u-Zω5e~>gw9ed-RT-&=p!h lB&5˶ʖ^Ӏ=)%@nN\֖fS+KOT'u çHlz덢[`VY1M_JEe.Nf" O$sVv;-->� � � �L@(@�@�@�@z%9ky/#T'^ի,$?J2g=%T5{>]'zvv߭z͏S@SJcޕbÎ܉U+vbmpRS)}+o@/۱4hksMN W;-r=:r:m5慽˩ ཇmBȽc1 73g,F݅Ke<׵ K.)b{ZwYNK2f7 #vS�mVelMbmY,􏺽]b2z# A � � � ")a@�@�@�@� @+EEG;eK;)wx&AU7]'zdgcݖ%mO:u 7T<'5o,OD[CB_-5^<[u >ޢ?+nd +MwtAoqqt~5o5UیP:k}_ܙd$Su3e@�@�@�@r]Nʀ � � � �$@ 6+\ߙ}XU$2]ijvPr׼IjֵoZRp!6m N@dzx񖭤pqnȘ;|&@?o/ϘQt$Y LTy<p>K 71\"Ub,(ZKӚ;.@)%K"zۿ2UjsFJ2^} чʒ?/& 'F@�@�@�@ �э� � � � z*xdj&e 8�&DfϧOdI 1tQfȍ!*S5*5}>s6$%;us|d-RT:Y L?Um\ه_y}y]أMuebӪ% 8غa9)p4p|9u:v]7So@nʑSWZS#DInF %=C9ei"UҪn/u ԓMJ[7գ?[O:6.0#� � � � l:D�@�@�@�Hr=`]ȝ~[z㯞$O=yz ?x@f U5K)Q!n]8/?>\KYrԕgädǤ٘6%lX:4[7r~qg/KU} w^rT#?y2E#ՖX ĚUlpuo%%{6c9WAφ#\ڶo>5k1fzuyF=5>aLZO-w#9ヤr; _&;]PX-k9vM Ya]Ga^qց?&v926c3+j'ǡ� � � �$W@nrx@�@�@�@ -]t6yW2;|;wdؙr%տt ɔ!὞hvPq׼Ij!Iukݛ7H&jw6C{0f]koLcRͳz%&:Z||}jHbllٌe:کJKyvF!}$vQE k`qϒReGmܹҹscÇ7ҨBśj)ɖPn@8K'ΛhOI Oɲ'Dbl[cL0n>5a^Β;{VhA~_G\.I&?n-b3@�@�@�@ rŭ � � � �iN@n*ҽ'JLLZVOزT.{+Gs7*Z񵴨ZFZT++EreLAr~n&q_uo2EdԓmR雧lYfU͞Oq׼ɹnl:G!%ZͲ} s2jʬEJFIj5% &Is :Ѻ\>rX~lSCeųOɕǍ})[x_*tB=9v&ȵ1+5BZ#~ӋPܐI=,~_2,`Pxd<![7[jwג҅J:8{M~\_]ېHI ٻT[z,}ȚʀWs8 k9aW̝IzT(dSM%s�ծ}/}h|4iV'+'oϐj  � � � .@d@�@�@�@� Jbb[?9uMlA#sn~fϧoO5"<\txLn Sg(2u}L@~h/跈lڿԩzGB'&%pt2֜+ȅ{T} :@ݠUhXI[ j73K־K󯬛ׇyuaAb=%(Mh_UsnI~s2f=f]T">rQ9 j_Ke|ȩ+FΩݝXOz~덥IX@�@�@�@�Wu"c � � � �x�Tsrd{D[Nr 9s÷VhXMd?-4T5{>}5>r.^]HضZ`'j!}I4Gdۯ<i'hT7}ːo_9o 0C̭+ j\VV<ͳyאЯs~Q ; ۱h,iyfcuL*G-ǎڬArϟ/;v2ꫯȑTNtd:wfiZ`?d Ujڳ?n<8-ώ^'ZW([Hs~{3׬EO;qU[<:U]gb{nj=O$Yk D@�@�@�H�d � � � @ &%.]%oʕ?oNf$d?_`젪[ySz}\ܿO2d%KZOWGnI%8Oɘ+wJym+ǎɭ$[)9jԞ|ܹzUrVh �gvtmnz#RsYc$%Z(O&p{Ur=R*99ߺwD;%W[k�qvC�@�@�@�R*@ 7<� � � � r=yX{fϧ� � � � � ȵ� � � � Mri]=W+ � � � � `/@ ^: � � � 7 w5;j|k^}~ � � � � �\{ � � � �$@ כv 젪[y"� � � � �rE#� � � �x�\om/xWfϧo� � � � � ȵ� � � � Mri]=W+ � � � � `/@ ^: � � � 7 w5;j|k^}~ � � � � �\{ � � � �$@ כv 젪[y"� � � � �rE# Uh3i֤aظi̙PGFz?կ"� � � @ դP젪<W+ � � � � `/@ ^ļʙ)0sL2A)CJrb.WA\L% aL@�@�@�Hrz㫙T5{>oS@�@�@�@�<C@U.})Z@<dۦ)C@.@�@�@�I@7Y-@�@�@�@�@CoܞrSn � � �x�\oHcov@v: � � � � o3g^ _py c'T_ܹ$}</T1G�@�@�@� @ 7-"`5{>E) � � � � �L@n*ېӻYzUXN-J 3 � � �BpSXRȚ=_ex@�@�@�@�xrorGOI 7::FΞ=#R ^ɕ+K.$5yZč7>0P *(2Ov2m__nO:-.]( D*111r9vV"##%_</_$c?ٳ埓'h"+gD.[ܾ}G˫s܀� � � �:vCȚ=n F�@�@�@�@�/ :799˗?NS!Ջl^hҧWw٣g)Rz}}J7i٢a|0Sٳw#-eJGK.3a@Krҽ[GܱqW\&O3Yl2HZɀ=T6}ze媵2h0*7m?D~cї-[Vyg] LGEG9 ISС#Z!k,ҭs{8O6QA�@�@�@ zᦧW6; k|{ײeݻWk ҫWO 퇋|@�@�@�@�@�3䚩\I >|Tz",'&Q|={ۜ tk׮Ku7FhO(ߎL4ڻU=_n۩bsN lҩCvoA799e96Jvƹmůߠ[+#ZP7Of2>ZydumsIJm@�@�@�@ qq 5{>Vرæomڨ � � � � �Z@NI ^.ZS`~p]Np%UTNsHDb\WcՂ .-0n9XoŒ9RtI=u W;B jW-[C)8X?`TY~ڵیvNl'6N5)o]MY7} EƲbj*+J!ra9vsJ5ih#=)nnk'>\d #G}3g5.-@�@�@� 뜓:~En%.ЦwӚR:~1u6z(5X\:ԭy5{>{weҭ[wo+ŊGm̔s@�@�@�@�@�W ukKJ wS/Sko-C,Ͼ~cxkӨk>ͫZ;򃷤]1$τɨOE ΝQ ց\C{7^Zj=+Я+F]+=HЭyṧp֦zrnTt-gYbɒ%X@r'#5^jeY8oe|&M&oiԵw{mk-kw&-�3@�@�@�@ a hEvA5z)SĦ-ʁ/gtWYi`Z쀬%_ %*&t;} � � � � K五e9=~yQkc޷^Im��@�IDAT cԭ }E~^L5.\P6ź;@qՂ/ZJdd{ѷzRT njmݪS5nкmWٵ{ժQM͞lܢ۸E;zZۉ?6?x ӫQ?!W Ϝ:ظB~OoשZ4o6nwԬTΞSmZvm¸SϖWxOU5a˛G� � � � M�]]oT[Gr,i%{\]5ȝ6m<D)ϟ9s%@�@�@�@�pB@Hn@_OQP+L>Pj9w%m:0V,+˕1 y%KUvρiF׫/g 0&~)ZgdTWƠ o ڟ ׶#$aT[æɑU>k;ң{gcٯ=vmRdA\]GjJDmdGц� � � �c{i B{h˟9yzbŊz3YHF$2bzo'%;sR<r oȝ3gtUٳa;wn׾,!� � � � � M�Ǎ]r{}JV]RrhxWq+BVm1ftlQO(y:?X}>hc;\#r9>bg,2z'5kcs%76sTKhrեnf]dT(_.^^zb4[D+L$NM!Q/i8M[2zPG�@�@�@�rI ȜQUA2˶#djYrO_OVB4U&%ZOFC�@�@�@�@� :@nG;˞:L k<P Ur|%<Gmʮ{UWeެ۬m�?ց;}TW)^?h.ٳgonsth25|DL&)p/ � � �^+@ >\㗿_([#=א'֒Ưޔ@k7<r="Ŋs2 � � � � �pl fݦr&lVSW7M(y\B[650eɲLPr.E~ec}6I̙TI>9¸QaE]-B zR6oݟ4Yb)Q<H[KJjʲh~/Iy{@�@�@�FI |0W$3__hSS wժUҴi3'(zz@oͰ � � � � @\qMRCfdCj~~~\~TT{ʗ+#UdܟP Ur߲;(rYNݣYF57;/ j 6oQ?hH]U_cbU*#jG~V|Q{#$DZht"� � � @�\NHJ :jܺ)FJJTt ϩ)?H"޶m[Y`K9"� � � � �rm=RK@nރd j5Ws~J+$u<g?wݓjʭ[Vd¸ό]}`Y5n<dۦ Iډ'00Pn@|'#?\g9-j.c"  � � � .a|$%앲|~Z|>Z?);{OpzI&#G<RJ � � � � rS緀Q/^"cP{$ j@nɒe=Ҥe{}^<`@ǟ_?w=1}Q6r1lvU w<C\ѨS@�@�@�@�u@}S^|B =-UWˎ;=y:@�@�@�@�@r]- PhL:ҿoOn]°_~=Ab,jwB- r]5} W|Cd!:ݻw}^׮&Yt/Wƨ*!i{`6xM_Xax=QRfCt[[v:p|q Խ<\G֯g � � �/@ 7~TcdSHݾ%}L3JdPȍ岆dذmbŤ]v7oiذT^e@ � � � � �\{Qw6s'ejZX/>6ys/.oج%U j7bG\mͣ>!m j=gϞT9NN*qcx4!J@@jg 2[AFT[Œ5k9Wr|1N|>[ pP;w,Vcew}ҥUHR%( � � � @rI5=rٶ_FYR>XTL|0WUZUQ}rŌ{J쀬%OgΜ [*U$7n3&} � � � � 二ҥ%%{4ܺa!ЇujJܹȑc%{-կ`<ֺqVH,y=* -|U[NNhk^`TT޺Y\=y4kp&R۵0 mڲM+ZU62KZ5Lrʲn5]>x N@�@�@� Ou&p5N7(0@7=Ffϗ>]V5jndС N � � � � R.t`I jعK '0j D܏Sɾ+@+~;n8qRF~y ښ|T�@6οvKϋvpB߇oK@6yKeo=N죭ksnbЏ� � � �g>"Sls6і?Z@tɍfd͞/3gtUrA)YdB}ϗзo_I~  � � � � 3rQ2rj!҉$,/_Yt`` :D m67X*ߟyr[6uoG~jsltis-'VЧ: ~br=g\ d3h2o)_M^qu W722R&Oi ϖcOSԬQM^ziUM@�@�@�H\@nFnÙ@nBƯnX m =쀬%9ցܳgÜvQ,X` mVVQ� � � � �8#@ %Ϻ'**JN{ZNS /Z͓姦&g1I>P [zרhi9vVb# 䗠 E޽{j=gΜ7nXP@�@�@�'@ 7yn'Jd[-C+Se_)W(*'@nB:)KMYfIn Mپ4 � � � �$]@nx"r?2O"� � � � <Tcc@nDɾ!5rǏ/O=5D͛7,Y{iV/^lܻ}6ZQ� � � � �8#@ %q�\WI2 � � �J@$]<3ܠ�YDg赯}~H}~x fd͞/};`mLڵjӮœ5k6~j/V8?IeD@�@�@�@� J@$@�@�@�\%@ U*Ț==[o-v풝;wʿ(~;V={HŊSH=:@�@�@�@�@YJq+B1@�@�@�@r]Xn0; k|ժU;v]t/+r2*|72dRJ޽{/GC�@�@�@�@� uB-/ ߞRP@�@�@�@�45{>{۷˝;w$$$D#Yd%zNe޼yꞹsHǎN@�@�@�@�@ >Ў� � � � raȚ=| r)T_N|||\=!� � � � 5@�@�@�@� uB 5{>O֍� � � � �i_@nc@�@�@�@ ~fd͞%#� � � � 5@�@�@�@� uB 5{>O֍� � � � �i_@nc@�@�@�@ ~fd͞%#� � � � 5@�@�@�@� uB 5{>O֍� � � � �i_@nc@�@�@�@ ~fd͞%#� � � � 5@�@�@�@� uB 5{>O֍� � � � �i_@nc@�@�@�@ ~fd͞%#� � � � 5@�@�@�@� uB 5{>O֍� � � � �i_@nc@�@�@�@ ~fd͞%#� � � � 5@�@�@�@� uB 5{>O֍� � � � �i_@nc@�@�@�@ ~fd͞%#� � � � 5@�@�@�@� uB 5{>O֍@BW\Q/_!aaarYyd =F � � � @* 6 � � � �*@ Tn&{fd͞/u9rjʔ?U>lDݾ-R6F^sG#bM)_~سM-f111R~ٰarƌT^x6* � � � �[@nV� � � � `>X~:ݰK]ݴΟḧïsW93gL/?JYްGˌUS&$t{b rMUrѮ\*xH\+I zj+h7T8CHH[ƫr%R:F~ N i:sƔ|w۹sTZM-w!y 2ojX"k@�@�@�@�pR@P܆� � � � &m=vQ.ufl#ui+\~_ЫABYޣ1cepfN[6Kjn}5B]b߾0nu7/[)ي0zaVP ?x@UR5%fΜ)ݻ?r!)Q">u@�@�@�@�&n � � � �iW@n* 75@n:$OLq TӞVȚ=>2ݷe)i6[C'i<k>U&SO Q޼yC,A�@�@�@�Lo@�@�@�@5r]Qޙ}Xl{4&gcOu6sݤT\.]' fv@@'jn=W.&6nXr##[ � � � �) rCF@�@�@�@�\p-Crd(ժ eۑS2lR oY~{rݓ?7ɵʭ $c\TiU(WzqQrvF-'YP_EGFʑeK7GNo,BB+Z!8OVTDƌZU޼){Ga۷ٝ;0sd)\D,)Ք|aտɝk$Wrr]ʣl΢w`< ?_BʖJ`<k]heދKԭ[R^Sr[Ƶ`ɒ%r5|tk׮g?r]Nʀ � � � 亍@�@�@�@�R�T -@nbBȚ=7qUSso˞S$WJiBivjk Ӯ7TTy՛ٝeq* k4ZV!6Zn](?֫a*nXZEf.XHv"~6ZٰEr4/y1;Nezrq6fmyC.coJZ|Q 1wʟ_۴땪H͡ll]}Pt9t>\|IfjTa˯9!A)3. � � � `�\s@�@�@�@ u Mbr/ wFqRrJhrxix+fd͞Ϛ#2U3TY iĪ됃qhr6m NTj'f*P@ul 9N5t>koL%V'j%B[KI:_|Z(]VϘc<u;Bv|Q?j<NܻѮ-&ڴSmց5RZUY_ s2>-8DIuוֹTpY jqh=ցܲrR;ݩ]9-+>-G/Su-k:_?9ayT{^O?g<wr[j-zhN� � � � rS߾EEHH%QQ1Ɋ@�@�@�@|}|G$C�I DϤgu|ٳ]I"u6fgIZ`U[w?l}ܻc 7o`cqI =')Xa=YP9tjc m* _.U ֻ[|5jڴ[W6|XNs(6iݯON6m͢r޼)ΒmKaU[Цrl؟rw! F| w]5ew-Qo˄eXm.kQӛ7=TY q=KPu/ TտKTYwr-X\vmٴiN@�@�@�@�<O@n3-{me A�@�@�@�r3`.\3Ӓ9WRK2rIfauզ lA\M~쀬=(rZ-eaKYF=նH&FrmKRmjgcem'G~W*ӊZSCV6m47/km6kKG[{W .bV w̙&N+ӦMKLdEҠA C � � �g>ࣨھ_$BH tBH(UzT X]DQ RDtBM#gYv7ݙMeΜ9י~v@�J@Uu#c([g|~7_/^B@�@�@�\*'ƧP�ѿlȍR<8ᮮkFlܭ;7.#xaP1; kv=wg8{v?r1;-jjڊ~I:KJ5jl#ʲzGUPՏg;Vrqzw:E;p&ɝ/@nW>y\1Y>=ĺzSs5'U{>o'fvn'BIz>#X2D| կej{IcowA… {?Jrɇ_l۶vO?DBBBl}4@�@�@�@��\۵ 'kca � � �xν}?as j+iOxˇ@n6x u+zXq?rqDZgcfdͮ@[wFiԤwjs4)Ӥe ŋ׬%ڴ :sJ ک2=j{^%5 H3wl8Ci}اar~TU]R˹];5&7mVce-]З]vM&NCBS.^,YX֭]ny"� � � � @ 7W 'yMN)@�@�@�@@Du|-ZuxJrorE Wq6%(yA5^r8.wH5ۻv"UI…%D=#>ur:ro$&egK'~i+R#;Y xe?gW_^`1!:ۯվ>/}*_Pӧ6~Qk[sܩ:n ~ѽs^萴ju-yDI){wR8sC֭[Ajm۶e˖fi3G@�@�@�@�TcBw̙ WU%¸&S@�@�@�n)`-Y5 *2}udzF R^4$Y%au7a훯T&ŪpAؖ2^/@gO[Ԧ C})*Y ^:*3;UC=VvNb  ϙlޭ_}!?qE 7>&Z]Mppi89F͛%H ;_z%G+7� � � �t=W$*&V}> � � � '\%-Z`΂@'u#,{j+*ڊ9cv@zz^ǎ$jOl٩VMk|6iN3sU S=l>öߕ?|'zP~ $:<\ -',_pxg1__|4ie\c\plW_ڏ>p칡xwE WME)WU~?K9w*+W.yW$o^vcƌjTuccK<y̼mj!� � � �P@ 130!j3^Lx8@�@�@�,HUUoX%@/[zK7j3UJW$b9dȚ]]a寷TYL UblV:weF6rqumFg.khֻO=n:C;w=g-uF 7!6Vy:~{I =*۷2vUUo*{}xJ)X}#1!A ?wQU<hҥlwWcĉ2x5<\w)3. � � � `�\s\+1 > � � �xJn@ sr$K69~FUAJ T[_ᶚ5>VZժ"m!eK�-歒*娭Ya]ػG~E R4z _??6VwZzWSrW.˟#^+T8rUiE?W\|[ 5iYrlUҊ-ժƱoYD<;XuyI (RDD[V W?X#N.R{IJ֭}%Y:lmU]Wr#ϝ)ܥj+�=VB7Taar`\d9T 2@nLL)f@�@�@�@�)@ 7P.>/EK T.e8@�@�@�Ȣ@8 )~h,ٗ|D5cAz~WMy=m理Y1-99d%m>+Ǐ-W5«k֒sv΁܃ ~/?oV꫽+*m/h;ǹ'3:pqNVmo7o_m\\=<t3Яo?8U!VmWr/ʔ'OH\d 2ذ*;k,ӧͷD9#� � � �x�\kD z!E 5* � � � @BB]*! rV&1=ڀ~mw0jbY3iUO[bexҼz%C9j쀬p?~-&J|{TǶYW*Zv0M4if]arb]j϶ZCVj]ceϳeO cmۢ?-)`k;{CV.N)/RNj:*{},wOһg|}!^:*7R¶lvws]>gW~WU p�/i޼)S~ @�@�@�@D&bە:y+S"خ& � � � 9\y\2x-Ty%Q1R0>)] p>YyZV[-W_5RReMcU6"AK2]|>GHԅJqqԇk_9vL"Ŀpa ,YRyFDDH%9whذ/_^|T:v:G@�@�@�@�<N@5[~вF � � � o@+fh& VX!F?Cyl4@�@�@�@�<_@5[~вF � � � o@+fh&nܸ!rYpႶjn%)SƼ]|; � � � �x�\ke.U@�@�@�@\W-1fdͮ1L@�@�@�@�p bҮe'e@�@�@�@ \7< iYY'Ke@�@�@�@�@ mi먷.?E�@�@�@� xr.QDf3R � � � � @fe'{Z.c @�@�@�0][ kEAw 5;@�@�@�@�Ȋ�ܬeZoA+B\� � � �V xr~ӨRfs)!� � � � �. B -?heS@�@�@�@ 1 5^t@�@�@�@�p�\٦5@�@�@�@ 2 5^98@�@�@�@�0M@i-f@�@�@�|A 7[LVfdͮgܿUul@�@�@�@�@�g"{ZhR@�@�@�!-_uØ T5kU]>[@�@�@�@�@Y@99TA�@�@�@�wxr0efUͮgZUר@�@�@�@�p ,bξe&U@�@�@�@\w=iAUV5E�@�@�@�@�:-?hI@�@�@�p|A ocZ&`vPzUul@�@�@�@�@�g"{ZhR@�@�@�!-_uØ T5kU]>[@�@�@�@�@Y@99TA�@�@�@�wxr0efUͮgZUר@�@�@�@�p ,bξe&U@�@�@�@\w=6fX˝[rx\?f3Ĭ{cFPRqcJB_??ҥ9޼I88*V(h9ͦ=gkj6*'Tȩ+yծsG1TG%JT4Vgz<52Iעdنcj2q � � � K6q8� � � �,-_P۩rRRhno9Ȯaru~�iQ lXvNT5̬{)NMBq7ƔdR֟R#:<\bx`tJKasC%t"u_-ժ[~ǯkՂ]zjN3'o>Xwꖹظ 𓠀<nڠ^\({{S>׾Jd@;,WvwF)3@�@�@�@&@ Faj[~2b � � � Ro@K_ v8L_UjG;4Z޾ˡ}Cۛ]7q:~ Cw嘶AUʪ ^}:=)MG4n+Gl 1v,Ot.> L.@d@�@�@�@I@IIA�@�@�@�7xrduoi+8̭s#F]ۧE=nrLNٻT/3sf3^ 5@[82D{bԪRTZ/<5Y!2z #� � � �1CxZ@�@�@�o@pxsbY[՗҅eԌꔴq RD/^X>z-~hssЗv]xVV%k<ԷrSq>be y.O S@�@�@�@�͌Z֯. � � � `|A ת7,UAڮkH><%0i"@Yy=uԩX:*9AUOͪ F>-6m0/?-RR~QFM)Tzm٬ڷl%T=r7jYD⢣$h19zO?^v)ߪ-<mr>"UD;nٲEo )[RJ]>~,\nRba՞>o~ҿSTK>."$2:^KArORRqXE¯H!rJ~QRde4]J;x첬qZv HZ!Ҳ~iQ1f)uɝ۾_oϷ=HٰlwNZ}-*o]aC/KU]5JH*d_{G1)5$"� � � @v kSѥ* � � �B[ 늷c7k[hL{s-젪 Zf6{dY2l14^yMj|Bs#2Cn:by]�9v ~+\>Mo՞͛([NL,*:;qqӏdɎ" >I\6Y/!eߤsζ}W5ä#X'Mu:3i/k_ ʶVcxjN9q6BZ>Ͷ󟡶P k|+ۺBO\}E^6C)}2hd5[J&Fr8KH!cluw^WOMݦJUv\ @�@�@�Ȇryh5TE�@�@�@�Wxr]yr}>[<+=֖~_GjtT*YTjk+涮}{T5YUP٩FŶ7êQ EӗSH)V֢_okBJ֭op/mp wi@dDXز:k@ѡ9~*~)"W_??4]:9w.^-GC¶mQ}^<u9³6^J} >_`5 rC5~;돃ڄUt/$wkV(U@^u;dԷکjC=jji+V F -Zjq>}>@?_mݒjГWd33M׽Ul_-_m۟!U;\"gjuܟ3Qj_n!Wm㏯nU}-*J\ Z8/Y ~ub@կ� � � �x�\ke.U@�@�@�@\W-n#|+"ferd3kRP{ ̗7ٱavPz3^?>&ZM'wɝۘ$\.7n$J\>7kfv*x|oW?{S~-\'Jَr5>,+^}Y~S&po$&ȊW^V%AoISsH8uMAm '$J\|6%}uظW|}uؕlq]> bx|;zGJmOjӰV-t}8\݋MŅ1ܒEq]{JK׮K~25��@�IDATQ^} 'z4-l<][)8?"s 1|@nZ'Ond+� � � �X,@ ך-?hYKU@�@�@�p|A oHO 7>!AZa& Ԩ$oM{d3xdp);fUͮg<'H W�OnP[#|;7kmu[JIoZ'<ێHL3aR9vl~>rjW}h2~CeV{|ZW4 feFU_w25TVʸk'= ;nOo Mv; E_)r`YYw۱aV_m-6*k;7>|u8@�@�@�@ ȵyZR@�@�@�\!-_u1ȍo|eIF5[6[(wkK7É y젪cU]~V ־*;h^ퟴJ/{}%wPm#[U4[۶]71{gR*�X2D| Ǵ2s^jXaW4]&5>E?Nݱ}d#jajK䶐 j wP2 4Nh WcZ-\wk;4q.7u3[^.V}rhA�@�@�@�l.@ ך-?hYKU@�@�@�p|A oHO WBfRvE' o/g;?4]xNV5gu@Tٶ}&U:wUySvMQj۰M|BF F~ͷM{ۤä0DuJGfwK罹r4v9rQ )/~J%@4^VIi[e4ޢߟgү{d̔-CoL 3H5N8vMZv *l@�@�@�@ 'ȵ)zZR@�@�@�\!-_u1ȽrJ o<lV]~㧩k%5avPz󱪮Q?یrzszv{vQٸH iɦer>vdqUrϣ6I@br#2CWC'yKN%JJٻIp?x|>{hl\|=RH@cFGV߿qW.CیrM#W)N-ҧkeު*y?'FH˧QruG�@�@�@�,@ ך-?hYKU@�@�@�p|A oHo w?ɞg|㋏$':6[fzO6uT5AmU]~V y|-)To_rn.Y5.UH6-#[qɎoS'齡+1MjpsɮQ 6.A{Q?&38uBVdܳw;l@I!v#@G3˗sv_|rr؞# U\v@�@�@�@ ȵzZR@�@�@�\!-_u1rYy1$Sl}Z Q};Jڙ�AUV5gukrk{T~t {|۠:s/ʙ˱U+Dr)ar׬%<?9_zN6_KHmlT"΄I]Gj,ZH6ml+#K*z~%Fm0:){W@?kV_iw\ý"Tu]܏?XbU⋪ � � � ;S78� � � �.-_7Q_z羙]%e-aI2f3UuY.||_FnkZ:][ƫYT?Ч/O p;KOk_+`cĄ}+Æ=+_|qs> &;wvЦ1?dӷ 絪_F}MGN]CUӿSUyƶ{KqCzmlwN++޸q#a@�@�@�@rݡz1[Kp � � �x|A C=jI*=aZ5AJ TG+irJ 1v;˖P="#$鷗.. ->>ml0;jv=XUר_]SahokRn9YmU_zt8/0Сر^C:3YhY09Ou®Ү<wVs ._AZ+!%",L̟+;,=gj`vA!J -+IId uǝ_nݿ&q>uKze$( OC WEMyOy*(~%Trm4@�@�@�@ ȵ!zZR@�@�@�\!-_u1,]yKZQ?sKXy<(5n 礆AUʪFn=*۷Jqf#ߐK9s;zHiTϵ'G5vyu\7v%ORLYzEFZAvR!9r&<JY|y|Hs$N}M/gs4쪴}~2k5Lr/]. ;l:?K7!cW}`jLuynՃ\CӤf+L#e_uY!ׁ@�@�@�p�\7bXoA F�@�@�@�/zK@n@^?Y`άrecBۉͩf3Uu^:*gLŋ$:fVܭ_}!?}L)(i%۔dr.1/ɮi?:V'宗FCqFJؖFm{+w*uº.h |P/;`d ԭ2[(~JȈSl>yE-ޯV c;'@|/꼩oS.Jq@nAjb*l<.OYF>n^=y3&}_ zR{nՠ<Ni=d:7=uV=O6@&;#5jԴ]裏i � � � � .ٴV( � � �x|A ד,-">sAril`Zn]x�V5[]�9v([N^Rr:#3J|L߽[|"wT^k@ʱc& K`ɒx S)UhJD�H#$0 :3xyj}Rt.Tĉe!kk+i � � � � .ٴV( � � �x|A דBaf3@kԷj~`Rm'm?7@1X%T=Whz-sQ<X&L2Cq � � � !r@�@�@�L/jQНfUͮgYUרo6ueɥCJ>mڴ>r;,mT딒|ysKB Y Z~{uy.FBB*TX]=~-[֥5 @�@�@�HM@nj2ܫ � � � No@;"6]젪 PCɖjvKi@nJ*!3xyT~%ƶ_Dag ksEرcRf-5Ԑ!Cd̘]1,c � � � � .&-?h@�@�@�@4o@i0;jv=ЪF}3;LV%6[|Pt閮)آD F_CNBg£dͲj) YHt<קZ5v � � � Z-kt� � � �/ma 0;jv=ڪF} ~={9 �鿐3@�@�@�@�l&@ ך-?hYKU@�@�@�p|A o cxAUV5E�@�@�@�@�:-?hI@�@�@�p|A ocZ&`vPzUul@�@�@�@�@�g"{ZhR@�@�@�!-_uØ T5kU]>[@�@�@�@�@Y@99TA�@�@�@�wxr0efUͮgZUר@�@�@�@�p ,bξe&U@�@�@�@\w=iAUV5E�@�@�@�@�:-?hI@�@�@�p|A ocZ&`vPzUul@�@�@�@�@�g"{ZhR@�@�@�!-_uØ T5kU]>[@�@�@�@�@Y@99TA�@�@�@�wxr0efUͮgZUר@�@�@�@�p ,bξe&U@�@�@�@\w=iAUV5E�@�@�@�@�:-?hI@�@�@�p|A ocZ&`vPzUul@�@�@�@�@�g"{ZhR@�@�@�!-_uØ T5kU]>[@�@�@�@�@Y@99TA�@�@�@�wxr0efUͮgZU759R5ҥt&Ɣ$#~~RK7[;go{p!ҹ;J)%Lع|rI^<y]s#rf65TuPʪ`^nt+eikQql15FbrW͒=*1WSO{M{ʉT׽I@?>rl?p^QL*.hm@�@�@�p< oA]"� � � + x[8ƩrRRpiœU<\7֭T)3)fUͮg< ^ =$3;SӨЦt1%TEF!ԈX NII%|tE窃0"ΜQ|E.ӳ߳;iOlݥ@;Ξ)7Rr룤f}AեjWl^:|11~yj{_mmVKAqtRbaCQ;yf FM'j{f.=(O[ƛO6f[b � � � ȵ5ѥ* � � �B[ 늷 c Wmp}nҤjy>}8lSzholg~f3Uu]CXu{RH mFz�xrjNܲ̉I̕꼰-eM Wa% aV+io&5Cn,<w,+UEwhO_wρ@@�@�@�kZ-?hYKU@�@�@�p|A ofzrKΞf xԡbe+'Wjf~f3Uu=%el* K͇,n3ȵegT\rב6̹q � � �.@ ך'-?hYKU@�@�@�p|A oxsbY[՗҅eԌŪJj[M̥k%VdfUͮg<zJ pH@nzw+Bnޔ" G@�@�@�ryzaJBb- >L � � � @* vHH3 zsh-_6!Ȗ¤yj ||5ƬTxYAUBVl 7i9)aEɖTqq[j[FM)TCslJI~ݡ/(H4mg۵S.Uׯ\V횏5kmV%o`>̬%'%TNЦɟ~x;{HվQR�վx^+m/)q]3gP"Ecǎ}W5 ޸!ߋa9y.B.\bKJEzibxE؅([k׽4"ھKE2P٨-R_^}_o, Mj8evHٸ猺=HٰlwNZ}-*i?¹nG{vn/,+cIxQ/(OY 6irRtBr%] H΄GO{>z*ZH "# � � �d{<"zl ί}ǚIP@�@�@�HE z_RP`*gn9f5}/"n2S=]gnfUͮgXU7#˖Ȓa駹mkR{ΙTEF: }p3v־k!Z@=drdc([NjV+aaaRTi۸Փ[]հ*E3B̃dx:)U?'\"R^z؅xOꗑo_o)>t12v:ewdkm$j'o ?J>[Y T_W>˾k{n)TfM \ @�@�@�r�\k#iX3 "� � � �\evb`O嬜M 7<Ǭr78&|uo<^ֽ#uhvPzUuggvjZ}`vȁ=7[ߎ)߫pm5lz\Rn}>}gӧ9:lZ\}Eݳ;c]syr7a_<?s2Ƚwԣ1+W$W?|rF \uOdH !hgs[fr"|53w-zx^=Geظժk2l˧ʉ55+2Ue՘u& lh_Re>>G¯ĨKmmU\_\5GjB蛫 N6MeKڏyd`j~QTmڊ}ݱc+lUYCD>tjZ^?fL[|@* 5Km!IKadc_>~MreK1Z]ɏ{֔ճxFϵw*R48s,\O%em5?v|Սg-;(}~Xu� � � �C@5I>ꟐcD� � � �8 $h[EI{ Nr#j dN3X[9UfUͮgVDi#>sSƍD-t#yWô_cfvM<41-pl4Q .6P]&~+[el5troܐy-E>0W)Tm*Y]ګ}I7߶ jOrڎfn;ῆY\X?yr8z\$&-7{P'kd%;U 6"K4S[]h,\9 'mwNz\v_}yg FҨzw,۫>p+w%ȯHBTK׮K~Q!6 ˊ珍ǥ@4V!3sAy}bRu;UHVA3eL5)bBO-$C>د$|6S2ido2ê? U9@HNޝX?~ � � � @ kݳx%JbbY%׺G@e@�@�@�HAX7O ^OJ H^Ҫ)/ݧ+cvPzUuY@M~){},w/ղJE*]bK"&;3fr3>+MgK) wV\-b;}֓Ļ}=ĪY3"&P;՜_r+.{oCJW5M.w} XX_BPv>~C/ZHWx-+;l@�@�@�r�\랧*A$0 E)@�@�@�@["kI?zs% rg*_N!JBg~fUͮgXUרmN 9M֌zC++\X[5X[U=w[Bu=|([N]^KJE Vn9t^]Ӗ8u;WeΟ=]m%myi7WYG>@/m'Ұ"[|!+ϗGSwKO\cz2q�>#C{Vm#[l3·5o:!OB6nZX޵muzY1 =q:8@�@�@�șr}ѱAQjr}TG�@�@�@ø Lf@r)[4X_r?mvPzjU]~V95n;c9g)Y~ 'f%m95i9&ԷIZWˢuGU۸<ҡ s8cE WXϤ_Ș)[Tqlxv,pJqg?TG3eKiT}ǮtѮ~J\ v ۦX$΃__n.@�@�@�H@Zd\QɟO __' @�@�@�@+O@ Ҿl3~ zI9?gvPzjU]~V95X[Ll-<l[N:'d6{5oVּTPH -yF ~8mݏIڎD/(ɬdKwLG/wá~NJ@}S %HKdg55J*b$O\^t:R <=1?ѷp;C=HNUxKlUY-@�@�@�ȹr=گH#~} z#b � � �(= 1lA\ie\5$<x@ɲ՝21)V0Ѓ5S3;jv=CɪFnsj w/>U<O: ~iUx}fnsw[^0!Pgז OFmk|>X@mw9tv'J>Wr{\,[JȬ:8c@�@�@�S@<x}5mܨh<gf@�@�@�r@h+@n6x3Ƚ#]F]enN>Ef3kI%|t-xQ&7IZ!_Iv ]C H*)TY#22R>`\R!SO=@5OKe囑ʌ䍉TOma[3{M,/+J_t12v6#+~=w|0u㗥긫~^%J|@�@�@�@z׃Z(7&6^⵿ydF � � � |}|Կ/¸5 \Cƒ [S>Jջ:K<]75f3kv5r[2<\F7;±MG:=n5--zI+Ǐ-ձj?yzgbBz<3¤TҶKի'[n{B#ܾo,Uٖ-$+8T_k3~<0wu{CW5̾[x=s?2rNhv5_/e;_V _}D^/5GZ{*af?H`Wa � � �9X@n~ � � � -ޒȚ?#Mu=aZ5AJ T[OW+W2 ?M(ydܮ X:] Q?ۿ%NQô3yK J hZ.W)"ZY]rf|LLnPhKH/H9mι c cM ipX9i6E \6@-ʀRJTPP^R.X7Vwy.Ѳ˛[.G\lm@i4[Z#_o[Ok*+cX1yUKi!ZK2l 1+U͇./<\W ~1g|6{m> &$Pa条$<IVl+^eڊSm]1v4@�@�@�@4QS@�@�@�@zCѧ|gٚ&;O'랺2=ɩfUͮg<7rLo*a|Cjx/{Vt8΀5KɃϓ?yp)Vfnjνsf˪_1vm;KOFDowo'λ{iG}W4[ Vܪ~6gIs.\6XBO\V}*=j+J HbrՈIxzs^iXV6\}~PdoS|!1WrBzI8ڌ@M � � �9W@n} � � � Ȓ3W]قG*윜avPzsQKCexDۆL);s;zvNZK`HHSnܐ#,U+^<|ȡfz;V¶m_sWW$&$Ȏɖ UuJ;J>K&͜eiٳRR[4lP6i+zgc2tܪtM9iY9a{VvNֺpM8p쪯vz2i!Cyiqc+nG s{ej;gu8v\ZwSMj/./,3Ql2:#�C z, }Ps+`ˊP~}-*cݪIɎӁ� � � �9K@nz  � � � @f̋=\젪 ~٦S@ G?'="7ʽAJIn|Ӝm*zD�\&X|}s9~x-H!/EKlJ/e7<HeVȴӟ\G'x0)SC�@�@�@�t M'!� � � �H9zMT5dkg� � � � �8 ua@�@�@�@z{5;jv=ZUר@�@�@�@�p ,> � � � 7 jvPz#Q- � � � � ,@ Y}@�@�@�@�o MO 젪GhU]>[@�@�@�@�@Y@ � � � �$@ כܫAUЪF} � � � � �\g@�@�@�@�I@7=m/Wf3Uul@�@�@�@�@�g"#� � � �x�\oz^pfUͮg<B"� � � � �rEG�@�@�@�&^]xV5E�@�@�@�@�:� � � � Mri{T5kg� � � � �8 ua@�@�@�@z{5;jv=/x" � � � �dS1m@�@�@�@�u #xYy3@�@�@�@�@�:� � � � Mri{5<Bn@�@�@�@��l6 � � � K亄A<E쀬<řy � � � � �rEG�@�@�@�&^Ț] !� � � � �T@n6}pL@�@�@�@%r] "`v@z<@�@�@�@�@�g"#� � � �x�\oz^pfdͮ;t({쑐PO:v(>>>Χ� � � � �U@[y@�@�@�@z"NJ%Mfs~o ۶ms2h >v@�@�@�@�@�w u0#� � � �x�\O~:N_퐳QxzB,O(- {!+y}v>hv@z&..N]&퓇#'O+áΧ� � � � �U@[y@�@�@�@z:vA*90ñIw&-[q HsL쀬zP|:%>>N|}}:c � � � � K五@�@�@�@��\|`,Y/VnIqfir?#I]W(0@'M '/\߷5cmj.oٽ쀬z>ӧOGN9w+V,9� � � � �T@K9 @�@�@�@ Ųr! '/ ˨L گRҭq 'H'IXշz0ɕ+xNi5^ZiΜ9ҫWouʙ3aRDN � � � � R.d0@�@�@�@�l&@ ؄EkhU #[BO 橙}{RYuޯ?!nOȒTW5N;fdͮ#"@�@�@�@�@r- � � � �,@ דsKo wdoeWH:giu<}glfdͮ} PXbZs @�@�@�@�p�\r2 � � � @6 Xz;_GZ\+W.E7~j7QI9yƧhv@zirm)S Ot!� � � � �. RNC�@�@�@�frKo Ww'W* kWτ˶'U_d 0; kvױcǤ| ݻ˼ysm촮 � � � � Pd @�@�@�@�*@ 7<r{Q1yA;ZU kAݜ1; kv[=7wxU; I"MU" ( vQvQ|E@"D@J H La7$n\˞93s~g>c9W_}ռiӦj۶ .f͚^z{ � � � � @䦛@�@�@�@�2� ]5arr:}N"}% ӛtQ"2}NdYO=5Tk׮o4@�@�@�@�@�o (!� � � �d$`RMz{Bnk^O;4Qh|Ӿ=3t6朌P'RHppxM逬.1rH=X|bŊ[TDqjJ 4\G�@�@�@�@�-@ 7t>{0ֵ p!Nqqrd& -[R!F � � �YP@nXro1V92kw& XQL_d񈻻躪3ۧmNdÇUTiڵkkeʕ+WJp @�@�@�@��\Q^@F7:ι¸8-,&{x:mO=@�@�@� &k|:5=&{7rMe좛NKi/^֭ۘH 2$۹� � � � �xU@W9=XX>zpӍȃ^R %G/  � � ��܀_")531t㋣̷A5=skDo3yowƺ}DdNKi}[yyTJnM6M۶m+V>� � � � �F@nj|{O rˁ@p픛=,[Ly � � � S> RGOE@t?eE��@�IDATcʯ_IFw™Q:]/%E@#v]ӧO^zׯo@�@�@�@�@�R#@ 75J'~gs+S g0vM!� � �d,^Q\\9;f{`&S V7xg"X<o[*=ֵ7ϗmݣgi TlY르^SL2o!@�@�@�@�@r}1c.31/BQ  GR @�@�@�:-z-~;l#'Ze gu6ҿڣ:5nݒ>:]/5jx`y˙3ʙ3u.]n̙k֬5\R)!� � � � �&"qL9X= !Vl!ʕ#,q? � � �J@n.Wj94=Wv+5 IpjxUD2KY%Nڵ͓'Trz0_@O6+V?ܪP8A�@�@�@�@�.'@ rB;nogT(7Wvv'C!� � ��[(yEWT*^ ɥc@Nd?^xQׯ׺utAgޚMTVm_W޽s � � � � @jVʻE@Pe惑@�@�@� ,$t@z ok={ԇ~E})5>S yUW]͛7)[6 KɌk � � � � �ܤ]|yλ~E@ Qa>M� � � @䦛Q逬YF111*T/|%%=nw}g3u޽{s@�@�@�@�HN@nr2?}[@pP@�@�@� ¬)t@zdI5j],E@�@�@�@�@ %)ډѮ N'yzϓ@�@�@�M@n"N׻"F�@�@�@�@�|(@ ׇ) }tT W@` ȓ#&l@�@�@��\/b2:]�@�@�@�@�HZ@n.%ka�\oj2 � � @  a>W$t@zW � � � � 7 䦀å pK„@�@�@�(@ ׋ N03@�@�@�@�@� { Z)@ כ� � � hrmE 8u0 � � � � C>Mah)p)ܒ0!@�@�@�/ "&C_逬/ @�@�@�@�@�&^f|o &c!� � ��@[sENdwE8<� � � � �P@qS@n 8\ 8$L@�@�@rPp: t= 3@�@�@�@�@ iI@ߛrX � � �&@ 7V\Y]#� � � � �> C&N@n- B�@�@��\/b2:]�@�@�@�@�HZ@n.%ka�\oj2 � � @  a>W$t@zW � � � � 7 䦀å pK„@�@�@�(@ ׋ N03@�@�@�@�@� { Z)@ כ� � � hrmE 8u0P`= رC:w؟ ߔWB�@�@�@�_@ֈ@ܩ>s)@�@�@�!@ 7cSfy٘s3CNd&Nsͮ<JT; Slhb_#ORuWK:gvIAAAs�1�)^R^Ю3kdZ]n=X뵽1/VZ'ŸD}t � � � �^@@ 7) pBjԨuF|Kq՘3 � � @jVO:~RS_'N3ۮ.U4,ڰq ȝS*RkkJeR|6_t: t=9s&uжnskj3m{QǏ+ֵhX ˓'[)_ú*ZzLߟќ0vP՟sE ֎3͡{Nk͓'ꗗ3_xY eѭ[wM><5k6l|)<<ܺO@�@�@�@�:V*#r0ٳg]Hpi۷_]nں>y7bccձSW>aNKNz}IΏ@n,t"� � �d"i5Z6Zޣdj{GoPzW{eNs_+orP1V{UϺj;9?cnq>\!6㍌ȭQl٢~i̘/  � � � �\O1{lfQ?/\ 6)22vq ,ƍCժesG6lبwcj߮}w}荅.!<iO3[lZhkv_Fi(+<@�@�@�#@ 7=j>~9IVI)b>=eNJ֣7RBw uSc %9~Ft: t=h\%MMyF͛OO /W_}A9J!� � � �$%@ 7)Z >M˾-t=ի{%7d@o.=tEdeݏի… v| A 7V9 � � �J@d`ܗ&Ev( ޭTzyO)r[msE?xaHudVuߍMkt@zkE ]ûh_]xd@5B � � � � @ Κ}%;85ioD⩹=]d@c~q'P<A5kz]"뚴w#6.nBBBԧ6 � � Z82{ ͥ΍k*GXV<FO7GJ)b=7\SUv}þ9kAY/ T9 t@zK@n:r=7)qvn5k@*}I^mݢȈ*X*^SZRPo=rU[c۶ٳ*TJ4hbmwϝQgUZu,\D~Yիbu|6 ϗ߾j$ Ɯ:C5-{sW߫n<M]s=W򩡲Zȵ%UuJΦiZkuM=p~=jԨzlX;2c#� � � � z+o(گ+WNuT… iϞZa-qsWkʔ>53r DA ג@�@�@�{&{"nV5JTc5efT̷Y/jzaSj7}9չ{@Kg~O<(תھ(u3-ܸjQ7H<( ;I3l\[^R\2eu1fXQQ_ڎeslod>ڶWo& _qt7SNխ 7naZhh2"� � � �i 6/o(W^S71ޭjիȷTTDtozti■֭[ld@L^N � � �V@o}2/>S5矼逬INکIۛ]ߠ] +qqж==[?K"5m[Fl*^Gߦei#GB~_3g]MLr'Xi u֮9?U[dޟ+bjGȵ:Jov֩Sn,^p5΍{݃qNFNqRfcŚuih\Nɣ-w혻/Ӵ:9z]O<bY|l2I_|֜W_Q}vR+b ]w]sJ C�@�@�@�pP@n%{-={}wڷk6S槟'~nwv }hm7{\QvWΜ9~;rܵ[gΜUiWBʖf VZ1֑'OnX.[6oCTREUXA!Iډ's.=vL5WSre}^xQ'OCC)wyTTұ-tbu,^4Q7q9s.@o/Oa@�@�@�L/@ 7,qjk6Wӳ=ペ7iV~դZ˙t@z BtB=vju}xb罂-cR͐n{U!>ƷmaxK\C {i-N6O*>njFuFuޣ\s ˋqZ6#~ׅ<Je =EҗN<if[2vѵpl%fظ}ƷinoVRtꭷdq{N|ʙ/]<iyu7ppCּ5s2w9l�{oCy&l+3Ϻv}ÜԮ]S@�@�@�@aW.P 5wC/h^0[EM~#J)vm/m1c{U7t}ꫯλ]O=}\ UFh"^k`kϿ?̲Gׯ_~]/LaqAHӧ=Fnz>a<Ӣ奿 N<μoY&٭z瓽NIS@�@�@rƚ >7ڼ9*oNWHuuom 癥t@zXrWV9;^xLxmq7wuߵFIj3C+W( }<1?;kM7'={MfHּߺۭ.:[^]ָisO;\E\sԔ._7|h>u<{쨾jlWqZ(5:i51'? ݻW3gԩSr*mLgϞ<y+|ƙs; � � � z[4uJ mwi?IKMyZ}wwΟߴ ;BCC=.'ȝ;oN<fI+/Ubyzko<x(-yW@�@�@�\6R]u*__Uwijz:ϥ3z{unTӮYNduJK wK]s~4aN5onBtN94w5v֣g5PqTSkZD;wDza_A]#k~Ij]2?WV~02s{-ԏ7u*RsƉ0.ѠNƾޚ\{2ih?vy?fysٮ/:C.]ZÇӝwi@�@�@�@��\J wĈw6BҋϪc@}! _rk֬^ED1gU8&y7{\G}c ͚5ҥ{˫=h%KjѢ_r̡XZ{?H]J)[#5###=Ν̠sz'1`\S@�@�@ N(_ar2LoOj޺>.j$ȝNd狵IK ׺7x`N$y{jNF6GV wKVcQZv|w8ñFh-s5hҦ͝PkVcjߛc[ӛkb1?w ,ЪU?!O>)3'@�@�@�@ ϒJ w~!RHam ֬UCEI/WWwq6u[T/j߾-Oe/b\@qs 5tRD=(U {Euj2ók֮s~-zp}yJ\&W&eru+d H\@�@�@�-@ ۢ>/-\6σQZԬzh:R!:]pV=gS,aV[FM'{]^Uvԑ@=5C[J:\VI e*V\e5ϭ@n';Kq[R9 o= ϛzL.f}=Ww=9d/hӤ~0ozkzsMM6@;.\oΜҥ0oeZ � � � @ 럵@& "Duܵl--[$u +`;yDg^ޫΞjiqʕ+}x`"/<<LOFK_4Ve8@MC@�@�@� ?rWWp-GX5wz}<T0Cs逬|6i Nu"֮V u7W4r/DG:: ?V jj3DϮ}=-;N n~~v`-Vr̶s_Ut܅ؓ�9s;35Swߥ"2" � � � )gY)kܷ_-Su wıY3'OV]z5Mqw#a ߄ǤIhwWc>OxP]ŋiY9\ � � �-@ 7'~r &|>FQɂ4>K޹4s逬|V ]R,蹧u(THǗ++8Z6QUY {EkV3ݶG} .^B}~Yn_Oo8iF;qn=Few mtrkF>+5'Ɩ-[4e7M6_osÿ+zKG&"� � � �,@ 7e_] @=*#xܵ;W7bSw=e 7gZ/=1]ok.}0uVcPTzԳ<i7jnh+VT ϶ 4@�@�@�h<F wɦ]z~|7Otk.kf7O:]/"bVڿtIhROn<y#uU[싋wMꦍWfSUM_xF[l^=w/}IճwY+T=whP<|c']Gr[_5kF_wu37 yl7ĞLSNխ:txc}F޼tڵr} � � � @ʛwb o߰I7okqfŹb_{%&ߗڵki_ڵ6b]o7lcߖ/Rܹ[rGQa4z;]ʚ_=[hG6 @�@�@�Z@n.dRs;4Q %vkGe{eTb)͙]9%#r({h62ˉYb~}em?؁kWװ<y,u1.V즿7n0wmKk7{\#{\mzjoMrؖk%i?BU 3gKc_k󗯠FDK;DFDhیi0nMuQS> Bt=.i*V6Ho8xI>Oۧktͥ6HoMo=44!+/_Lì@�@�@�@r}z1= p 9g_nٲ>p}@noЈٵjtf:tؾ4oL(w2rm47 4? � � �d�H-~-1G5Cawܢ BIݛQ:]rj^MuC:}v|۟;uon}6L1k<G} {TWoTpdμFgh\[=x@ϜK{ ׺ܻ:Uq Ϟ>|HS{l[sQ5t}\IMo=T6ȭTvޭK匹 @�@�@�@Wr}%-kOs驧N7o^-u>_rk֬I7'8CSuʕ<%k@nx@�@�@  еJM y~7x}<]GqҠJY V'i2hYjYNکMkO Q+@)-688�]NzI?L;fϔ*VSzY1/>ի<#d[Sg? Z7X܆ Q{YϺܫk= 3Zp1_h]>{>/YqͰi;mUGqr5&&viӦ{]O?fѶm;-\PW]ucr`g_z36 � � � p9@FFFԿ̟/^;4_ I+=e_?o/f' ٳ}{wW_}mw=cK1oذQTD_uw{;KᮿY*N6MrL � � �H@nZN52*Fԉ3Qf�\ IKԎQs: t@[#P{AڿW9s*Wb]T7}!:JSdD,ŋuar ~T ,٣6)84Tl/]}y?{VF8)pjյ/KkJa{O>yG<yԬY3-Z � � � J6q!;uth:nF uѣԮ}'\0±W-U[0a60 ~>wo<`-]u@qWc>Wgc~y[Ə?<rW$62 kgD@�@�@  ̈́_逬ڦr3@LLxI}Gx1 |NN@�@�@�@�|.@ I@m;K;f˖M~;A+ULrF~Gi_P~}v:7>/Sf.$[lŋ ;~3k(~hl鯘sv#CT@ hyN8aFEfy 4*0@�@�@�_ ,E逬uD1ѣ:w ix[@�@�@�@�%@ [i'ƌ_ў|XXp:w餒%~<,H_]۳w>t[`k4{)~ۭv_3jҤGж]zUt):v;:yHM ׸ZիգGW5oTF_]诿6.G94kT׹@ mpi ի;gY>)}MIk � � �]@nF_A!t@z/e^@�@�@�@��\Qi@ n޼UDWbEu8Ο?zZ5嗟)<<=תUk<c .jԨVXiw@QNI1d0@ >MM|iaIwv^yy.  � � � u28u3ʸMy$B<</ƛ � � � � r(5~< >}:j'%zOڽ{OkV o޼yλ[]!}6αƮ111s ={vs>%#~j )ktqmH@�@�@�@rNʀp: t=R@�@�@�@�HI@nJ:H\-P解FkS +[F}V]^ݵ"\s2Q@~ uYcNHs wGzxYCr߿nFϽ\cFwܸ Zpcq^=3O_v"� � �8$@ !h8#t@z(R@�@�@�@�H�ܴy@ Z7hI=sF]!B NZ*_uk>/^={C*WJ.T={bbi߾}:{6pB{$\tf UxxX@̙@n@,@�@�@��\2:]?TE�@�@�@�@�./@ F#PxWr3 � � � Mކ+P逬20e@�@�@�@�"rrN MO!� � �d ce*:]/ ܆� � � � �8.@ qr \S5}rS � � �C@nX'fJN׳Uת' � � � � P@nBg :L# � � ��\fNN׳XUת' � � � � P@nBg :L# � � ��\fNN׳XUת' � � � � P@nBg :L# � � ��\fNN׳XUת' � � � � P@nBg :L# � � ��\fNN׳XUת' � � � � P@nBg :L# � � ��\fNN׳XUת' � � � � P@nBg :L# � � ��\fNN׳XUת' � � � � P@nBg :L# � � ��\{V]3Q1ʕ=LAAAvji*}NUgӧ{\syJRYSgBtBT.vVk$pxJ{`Q]{wҁNhר3ۻҺmGvݫR)X?.߫㧢U\5^ç{<\O=y+.[kOw D�@�@�@�|%@ W)K 7e�Zf� � � ]h{ׂ۵|8fYDa{7lv٘sd: {HjtUYXjW(LutPzb;44*m?ܚF_SSϜ1mc'Ո:~\),wnɓ-/9y<?6߫Y*\q;K4kiZNgըXМӤK6VU}2W#{|r S>ܠ]ͻfcmsۿ8vfNm0dپڲth@2@�@�@�@�l6 rS ^! #� � ���[RT(ODEv}ڼHkF~մZ$eNN׳_u5BXuWM>kV$ea <pRng5H^@@�@�@�H @ 7CrWzA@�@�@�T@n-{ uUlq*ODik[c[㸦Ri<fjkg]0oU:w/sqN+ّp:t=kU@M&rhjW)K'!oF�@�@�@�/b: 4�\S@�@�@ đjΚ?]aZʗ+ǣqqڻN|Jo1|yަvFYqe[v뙱k[}76L N׳_u Z+'m^g 7\@n@�@�@�@�Mڕ?C 9YS @�@�@yΛ_QŹkoczgGUo5eREkϏ%v94륁l_, N׳_uȍ<|XVoS*umU7EkRU̾PUf\ʞNtlfnwϝQgUZu,\D~Ydg\/Vʷn|B 5ΏU[c۶ٳ*TJ4hb$u]zO{6mڨdɒCYYKwΪQ1~IsQe^tlMk:wD]PUx5[Rx>zFo>b5:~*Z*m*FVB7b.ho)i۾烙? ;hjRZ/`F_Вu(W"Ozpvn^AъGzڕ 떖bۿm0߱\[T)EET5g kI� � � �Q@V@ܩ>s)@�@�@�!@ 7c=IkT=Zc/ߧز{W3Ɨܡ% {eN׳_u=o<5?>=ݚءn2Yս$տ/]KE*(8ļoLfj:j=ec¥Y7ĝ?WF<>o yL!񵬋>`}G֐5k:ud{q%\#L:end37q+iЈyJgn]'_juwfW/ԟwڡb|+{,<pRƎ #ll:m4pDWRk8ĺv4cj}ÖD<y5zkZӡue{4@�@�@�@  Ϣ;U'@ 7}n<� � � 1fugތ_4mz|sU8o.ZjPp6z9N'"Ϫvڰ]ՠrp:t=kUĮԱ9oP.U 7A/׏RϜQ5Uekϲ-Zxv=]m󗯠;&DFFDh\&<V1蟝;u;GBxB¬ϹCԮ9?jx6($<_kW?x.9 zQ];&w8}tans;亇B_XwݘxOwѭZvP2笖m._ܭzO#;s^Tcfnq{޵3o!nP7-]Ak^ۺ5v5v͕#ԵnqsٝOMG4&ٮg7S0k6k<X(_vuk];tYslMʛmϦmқט--+|EMغ/Q }wb@5@�@�@�@�M@VhWa׿@ T O%D�@�@�@ r+¶wBQlq}`OYtxq�nUrkUS~]顛QSo^K08Tu$kԿeN#8[eؘ]`I5&u ;;ߦtl<yK)Tn=}~{ Ϣe]}=kuu9m>yf[2vѵC+kFi:p/jOjی<.IspAqΛd w}Uө@8g͞fXhBm}Xy+a_ܪ9C/k*R ~bXkM\Ck~)ٶ{ ׸m2 @Kmu|#YS-^(&;ſω1jywfטuD\P㻿\;ߑ5ܔq#4[py � � � �Y@Td⌟@ ]ߋM 7!� � �\�+sظ8=Tm,wl_U>6oZ{?ly3u;_¹5 6ڃeAUYK㯺V+LK �iQf;]*yb:wʶhFtr޻vBs]QS[7SN~v]th >{Gظ5jc?덆S+h5vǝ=K@3=7Ʃ5r_:~UC?r;V._s?پz_Ϟiv<w#9}zz@= @�@�@�@  ϢE=u`P 6wH@�@�@��\AfO4aqϟRݛx.y§f_&upoӶ\?^o{ߍMԻUv(n��@�IDAT'NUgUJ?5j-}mYv-ʖ=~ҿXnfwSUٶ[UQ_Xa_A]#kis/j=zvu]O>4oֽZa=ӧO?(\KGG6p:ڪʕcM9UWصZ oJk cCW=Wox}iԴzkZ|;=,ľf4z>G ׃@�@�@�r.(*&׹3":ᡮK/^.@�@�@�2� V.C\bδSzG[%c-~`ӶU^Lɂ4 cԩa iAUYkտϴrU,TSg^ƯǙ{VUHЪȭy]jҫv(x;>L;pVW77wMts2e6S/'s5vo<> ˮ5뮎UըF1kI\i wMԳ]l_Z+M߬7Ʈ6vMk_za M-QP׺a_i4<%k� � � �A@V16=TE yseWHpRÕA@�@�@�� cLm޺?y,UeEp}X甊˭"{>V,e:G>nYMUHrtPzUJ?5}ۭn$+�{!: Ξ?sF uO>hZV ހ\ןNt%8-[ݚءWCGkl'GbUY.gO)޳qz*^(gkVǕr|Z^߬1S@/.rx/ex o_juwf7܄:#� � � @F ;uN.oTF2aB\x~zG� � � @ Kl=U+oQvN~6/wi\SOtkc^E#.0?{6U+s,3H頪eW]~'u-z.>T{_;x9gQ*W'ȭڭ +UUg߿eCBt!:J׉=CCG=Gڲ|&ۮ3Q?׭u%5ngWjZۈo2u dvL 6>]xy@n׌;@�@�@�@ owɍqM&AeR\쎛@�@�@�2��]Il*UT\SEӖ7ߨ@'G/OI 70g|5 p:t=kyUתV ]R5ܹӧE潍y\GX}Xz>eZcXܢjY#>sr/>,kDG"TSgߩٳr*ܝwV*U@naLS˾5Zܾȝ<7s?*zef#GTki ?n@�@�@��\_^~??}7r tVxhU)� � � r7l-1+_>ʑ{"z9NgcΩm.;^F頪5W]~W.QVmKp_xF[qaojCV x9?+7v}d_s{"+_޾ވ5wuF룏.g֬ԩ7vd_%_6k׺~i}|T-#rw:}oOUҽwxQ?7Gkm*l4/ys� � � �B@/T6f =F Gx%돾ʨ � � �G@ܓzI `5nzWɗ+ϫx\8paf*(2q:h5l8Tu^kտ__{YǏ51v-עxT\~w[7KlTX}։{ H,\X4wNq4izкȈm1MƍQS FIڪ7vX |M'[&|Rfo5x M~BF/lԣvUt!6NLݨrm  � � � "kr/ƄER쌛EWF�@�@���[_6 _YmH Z>v>oLtPzbUJ?Oݫ 7NrϾ:}I9:syjj3duZ7ۓ{XJ;uakZ ͕KyKѿ3vJ;7M|#Ϛo+Gʗȫͻ{]T|>]v{s@1jsgek|y4hbv|/f?FYo]m6?y<WGqr]mc@n\\BB<w`D@ � � �@@P9dlEEv=w!6#쮝qC3E_'@�@�@�2��[%wqS55/C. Su4딙p:t=kAUתvjlE\ wͧ1pI*3>7+!>yB~YuW>1T!!։1/>ի.VY4ú/4 yD|=ҏ?֍7hBk4v(}N оU"Iw<MhFƿrKP2}S-S,߅yuQ}Kysyr-6f@w$n .^sPƻcnPZ:USAz-+ؼyj֬eѯ_?}N@�@�@��\_ɦ\#{ʽp!N:u' Vl uq z�q� � � f>u&J;"P*WDv:t=?WյsVڿt))%_rm4Q5xp.DGM  U*[=o<wj>EFD({]r-qOV=1vɍ8~F']sXY#<{^s7<OËݢ%\z.5J<0~t+X^bE � � � +e\@�@�@�@� @ 7#sLAUYkmjJbm0\D!0mr%Cszӳmox}@�@�@�@�4 M7#� � � �d2lA8Tukw36&F"#f~]ع,okõ[mJܔtKO꭯ֶլnIIb~k~ :X(PPO6ݿʔ) � � � �$'@ 79@�@�@�@��ܬY:]ZJյ;~Z%[zG_R'rR ;듳ReSyby۝?wƾ}TVmsA7{cX@�@�@�@�R%@ 7UL܄� � � � If҅ͪtPzֺU chW͒e6SnM]R5q-(H y\ =g o9~VƬⵇt&=dB9uS zW]s\ @�@�@�@ + � � � �[@nx0:]2W]> z#{22FdWR w"� � � �L@n[0� � � � U^d0 8Tu믺V}>@�@�@�@�@�rp� � � � ftPzUO@�@�@�@�@ �܄"#� � � �d%Yi:Tuk@�@�@�@�H(@ 7 � � � �YI@nVZ,NUg-ZD�@�@�@�@� M(9 � � � @V V; AUYK诺V}>@�@�@�@�@�rp� � � � ftPzUO@�@�@�@�@ �܄"#� � � �d%Yi:Tuk@�@�@�@�H(@ 7 � � � �YI@nVZ,NUg-ZD�@�@�@�@� M(9 � � � @V V; AUYK诺V}>@�@�@�@�@�rp� � � � ftPzUO@�@�@�@�@ �܄"#� � � �d%Yi:Tuk@�@�@�@�H(@ 7 � � � �YI@nED(W0l?=N׳U=9<JT)i珳t!:Z!aarS#ʞt0v"DxƏ<P~oܳ[G֭5*V Tl=KVFzqy[TܺVq{K*s v?1c5rxEroj:)mKT7`Z^_q5*|̶5u.Jy6"� � � Ζ@�@�@�@�_@n�ў#ǵ`v-ߺG"3T׽ZݛQxh6?ƅ8-ܰ]}GQa!;R. EzQ_ņ iJBSK^BwK${?dwfggfsޓa##E[?PS3;jxbkˇ4J6i*-Gէ$jV;aacF}B'/J5f˖P$B-9KKHh b8{Vpr7n߻'^Vw!fNT{wTK_:tPfiK5m.-FNHi+兪/*cnltzOi_"G>Vض_:uٓw%Kvy޸-5{Lw2ydYt~j ~bU9Vkb{bWk<}Aywz5}*� � � �$@ 7`@�@�@�@+z2:s^ fYeK$$[ju~N,۶_&I_a\/W8rg'fUO_7w@޻B՟͙cJZ�xbT׭F %5IvSk[Wv[6˞i?s" ̉tQ3]`ڔbǍB'rM'g@@�@�@�L k 3 � � � �x�\[@nHbpH.Wo]Ψ,]Dך^^g/_gFΔ7nUƑ@Awc5r[%(wnڭgk@}G*K_yAUM] DuY=:1kQ7$G}r떔ByA)`)0suS?@�@�@�<C@g@�@�@�@�p�\':dҶvUɑ%ء]ttl{򬪟FO)'Hyj4Ul1ٸ[NvKOu׸M"MXSCnb=6yqj &5Ϛ@�@�@�0S@ڌ� � � � ir=mEҭ˧Vuo% 18yuq+ͯ�/\' ƺkro9#l`rh!֑ mI*U%WuZ?%*"¡>0[6)RC^w.|*F\*kΫv)VӛcF%SvBjvȽsZ\<_4l KHRISɘ%fNTC{wTK_:tPfiK5m.-FV ̞=۸"-[4ʮ:qw śaY% &eʥBὅnĞ75ܿ_Ƽ,RD.U)T+'a?U,[ [O}$ST/WWDrfޥN_T~b=B6>+[W3]}oPZg˺ݡre~GJa-șaqo/z<Rt̔ @  � � � @ Vg@�@�@�@�H�ʹ3?FU.L&ɓ ƺkr.["K^z)o#՞z:^q5ȝ0%JJץ85|(~<vҽ'6) ߻[\;u2^ًS<*:\sE 744T *l[fMٺuQvՉ; W׆4 y!ɕ=~rDF7ӷ˘y{0Οk_Uw/ {3[Ҿqٴ:wݸG;)?Lx _X _{ߪ|/^/1S&r- � � ��\XF@�@�@�@ rS ۆ-\%T{MȵpWqvz 2nsւ~Yl<AkV"42굓bH:iMÿmYuzZlR\mGs;_7¹ڼs-t,bw) ^طWfmcܮțTiv4^k;}m7k|mUm;ڇ7wbV jf]{N0ۮgPD~4yh{CZ'*zo僱U!$GtjZV /ȢGUU ԏ'yJ/ Y%;n=omwNVۮ.奎.\CハճZqHUkϰf\ 7pViרWOۉV{xSB?VmGzBgn-ḰnW혫VH&gXU~eԮIo2lW|XvP~ڠ~H9?@�@�@�@;z:1K@�@�@�@� > WUߕ_8r%JSwc5y+\d�/*"BbbmAH?ϔ[7-hZw_3`ч'~!Ǎ}_(ܧZAJ4jb9s112{' ݲYm $W2Fmr=b$mU ~wC7wbV W.<"R1aֈ;Q#~~$]);8Ƚ|-B<;W}ﭘO l"9\~HZ UgZԭO=RIunX+WQWi/Ee5=ZƵ7mj/m;j/pl̲`Hɛ+X]|fLAZEEAWz_d qB fSm?Q-=3:rS2fZ$2*Z݇WP`\oCK *G@�@�@�@{zZ1S@�@�@�@� ui-/~?G<z)7WcM(M u׸i²Wg6m=:'}x7R:t٫/~Qݾ[wD2frS>p6;rNfhWR x3[.^vߵ7rT69+% e%><<txe>n]Ӻ>- [ۭ.e /@Ֆws~u[hNYjH_TM^\]/˃g^c\O혮\c2 � � � W c � � � �i F@nZrGH=zb ku׸Q@Sdnpܶ]m[j+PUWEsWB+m␐Gg/ Y%;A Z²d 9|ꊄM: p6{OijG^mX-ĚИZ(U{=Ѥ|b]c8=w'['6TPW /p/<*J8xldm\rZ~f6RtuƵ*Їt!7%crMp� � � �^-@ ׫#� � � �Q@n͸}2bj5TZMٿě@nU];c9yLf̑5u/6t6sܞS:vBξVH&jj4[=h'c/%3KPdBZ5n^|Uud~/Ҕc7OHܙk% VXN혮\}@�@�@�@z1{@�@�@�@� M_߽l~d25CJ=ZBf~NK iT5tW0] )|5rpč;VoX=|[:)Gi�nKHVm]`kTFjL ?W鋱k٪N iPpB]um֫^(~mȀC.kÄ7W:nrG-_MݦmEgqO 2u>̛1]&jR@�@�@�@� K � � � �A@nֵ'-VS e HѰrSĕ ƺk%rr7&GWO?e vl_U)E GDJS8/w&t1@ne˗ƻۙ;en6;y}Iʲ 'd⻶Ԏ51&  � � �x�\^>&� � � � FiL۷9%/W8 N<G 7V(_wc54@== ݮl7Zr()].ڱj@?_}Z%lvv^]~].JI]zUɗ_1/T<3FO :␄eby&m,e.mӳś桒2hxMl%VuQjñvn/ULxw}r5ito&iӕkbL&'ϟ~lٲҡC  � � �/@ |sFD�@�@�@�L<+~7KK-#m/9uF#'O: f ƺkT2Ż>Raci=f|U4%W 0P//3m~4X*up]/\=yB6m:v_w?xi B ]ԬYSnb=@UGaGzXR>NTTlB~m Q]ZcRh΄;ˌյG'.@vK9{߼#ջMSuKȷ706p;7uy0W5΋I.wwM혮\ ';wkw<#hB  � � �/@ |sFD�@�@�@�j&/\!7#n]ZHYe٥@.ǿµ0 thrg9NMB!9$$[젪KqzAɪ_+7lHi WkZr1  ߍ<+K@PPR"o:mڬ &lsȘ9VVQ~r ~=m9i2YrƟ 'ȍQ]/msmT)W .pB&_z $;ޣ-VV't.KR嬶]s3])uV% e_+ a2Q>YK} r^ɓ3X#"啯VOn|Jj˫w) j7zL[z@nZҫMEruummἹGjt嚨@�@�@�䚀 � � � �+@ Öfޔ] Z&Kf:4fXڡ.BJ:$tɫ=8W?ǫǏZvj'vlwKkzɒ@Η|-^VļErfϔᆬcٰFOOf/ZL]vѮcmɗ_eWr WL.^epi^vˡ [p6@vsoE'?tm^^/μog^2-[4V[1A>7B\ӋN js}BkAFWkFl;zZthKkr<c`|  � � �/@ |sFD�@�@�@�j&wũY=Tӻa$kwE@nmB%]Xw G._>rXLI_hܛP wzfr!MR'=W o#G/U;^:raLgZ;' ۶mhڿdeԷjW]ky-rnRvݸT>w૿jժ%l;zuE*h{O<2Hdzmtfxm� JIG+9V"**F.#?9|\mܬ^T#;߯9k-d桒*7/w&WGȏ/ӏU7{+o<)~>dp}}2ڳVp%\VVm˗JBZt՚ěX2cƌg}h5y$ٳQ@�@�@� k9#"� � � �x�\Y ffk\}|N Ba+ǎJLtڹ7[Bd4KL@ Ԟ8{M2e|pݟH9z]B/g d3'ؕ}Kuyc5sd %rKPH9|ha2ErH,1몡~^N:ˬYʕ{H@@1N@�@�@�@|3" � � � `&.0;jx:�I &ݚ)s%ׯ_WΘ1]:unh� � � �. bPC�@�@�@�*^\L69f?�I M'Ww%ժUWTTIvi9}wN뜹@�@�@�+ȵ* � � � � MLz0;jxk\}| �ܤ}zu̙ҷo?ԩSGIk܏� � � �. D@�@�@�@�Z^tL<!f?�I }zxS^ZC^x➤s@�@�@�>< � � � @䦊<U젪W# � � � � W@n\ � � � �V kնT5{<} 5>>G@�@�@�@�@ �ܸ"@�@�@�@�$@ Jmg5;jxk\}| � � � � @\qE(#� � � �XI@VjvP%t׸@�@�@�@�@�rPF�@�@�@��\+젪Kq9"� � � � �q� � � � `%VZm <AUӗ]sD�@�@�@�@� ȍ+B@�@�@�@JrxVf/� � � � � W2 � � � Zi-fUO_Bw@�@�@�@�+@ 7e@�@�@�@�+ ȵj[Y=W# � � � � W@n\ � � � �V kնT5{<} 5>>G@�@�@�@�@ �ܸ"@�@�@�@�$@ Jmg5;jxk\}| � � � � @\qE(#� � � �XI@VjvP%t׸@�@�@�@�@�rPF�@�@�@��\_#$KPdȐ!E%111 Eyscfƽ}]TM#[R?K[(e<jԧ[3mHz AID &eZŋ'ҙ͛کM%Sʱrv6uz U>P`/@�@�@�@W\ � � � �uF6^;ʺɑ 摦K$S![Z=+}7սf ȓ/ 3fƽ|LoLMdrX}J2f8fԧ_q%gu."YsmKv\>u~Dݾ-YJ`lIN 2n-զRQ$_\rŪ%O|iwyIosydT,ޱJ]/11R4ӦoZ}`,琄ߎy }%+Km,)i� � � �x�\oZ-� � � � jMcΜ>ç'KYeK$$[vsġ.nᙖu[{VL젪 q LҫRWtz=jAkm}+u L9B󶮐-RZ&o2ůbE %V*o]u*@�@�@�@�o 덫Ɯ@�@�@�@�\%@ U.>۶=Rɶmr5,\&Q#,]DV2dןwTprR"dΔQ3v:cßi'5J1ʾtbvPr׸=/9}-UY\v$K W{3s]y'{+@S)}Ɲ%o\`.U_d@�@�@�V޺r@�@�@�@r]>^&KJ,=GG ϖ'Ϫio"yrm)5 NțbNK>u4;jxbk\O u$K W{o}<3#6v}QG| &}oHYu`wTwJ2<&&Fڍ/o\Q/+dW@�@�@�@�]@ G�@�@�@�H�ܴޥ[Og-W#Խ4rf*}\qSBSma^_|T5{<}5njv+GH%ƹr%KRh1{l ݲI,$:v춺+l٤Huq"^eJH rf&۟rQ]nBr)k:wE ͛rj_r~ܲ.,!+J&M%c,ƼqiضuK(/?xjQo?V%_{d,gmShsc<UY`}uBUtTjx)Xް^޹qCB*TT}dqe*vTY1MV}: ڽ~KSdժUF}ʕFFU'Gϟ/ՋUPv= @ni3}%eSs<'Foң#F@�@�@�@z1w@�@�@�@� M/~@>Ti6Rr)g~9ȗ[~_wfUO_ w@_ O8HZȑ%uY KVH@pfN;W s]Pg_ּ\9~L-7Άʑ_Vm~$5pOk ݲکj-lbhc ڿ.["K^zNUyK1P Ys^}Ͽ$[FPm\{ُ*QwSwcmgmU[ǶfقEzvE wΜ9~  QNg-pmTtt~ɘbeeN@�@�@�@�o ͫ@�@�@�@�*@ 7&?l*nu;}$O;m&4ä'եvuɫ9=&2US5RM`>'h-Z!ۮY`֠`/Tی(7TMÿmYuzZ󬳁\c8h 7r/+ڶ1ڽ,UZ<);'3+.n@V j;j=g kNJheܧܧ\ZiE֗gN ArpSvT9o*RA#՗XRƽzQzeN]$[rrJ ݶEUWCDWlCeUz(U%r^#A=W_Z%IkʄK`@F aR0g^u � � � d � � � �i ==}tr wwLn*C!6Q;V+S4[AU]jG W )ITDDK ~)Q\mw+Vk3mBZvQBl_/CCFKJx[j<faypU~b"[q-Ձܘ߽z-taUC2��@�IDATeF7jv0wdΓWuԸ jbm]unNXK7GFsߧb5*;޺h!Jظmr@nsntT,~[;)ȸ%Qoz@3;zz we9jc@*,)\W~Sսس2m/rSIoLg@�@�@�F޸j@�@�@�@Ur]%hϑ'ϪCԨ7'<ںV%aFfUO_wң-ݼ4v}.6cbw]5];}T{}DIi W Z^2f4vLiR_[+%U6{fFYУ!HGc^}Qhݾ[wT@nÏw޲;Sr)+]~Yf\ZgOMFWo0S;9c*G lGéګ;4@Sd)o]p;sT v{KORߧڬz{d � � � r}? � � � @ZE{VܪF|Ҿn5F?s6]nFܖ9ʏu,AN덍=&W?G=[m{iPu-Ӳ46Rխ9iThA6$aRȵF߹#Sņ|._Ju w)z{mܹmrbN-X5X{r;-MBWP-}+&6Ȼ-vk=5R}vlq6fl:2=Pvii,( U"l1_x&{5kV']Fv{Nf-s_:6IX~+y|xɬ燪{ߘl<j d^+ߚ ~y!� � � �.@ W#� � � �E@nZLw2bj5ZZMKwE f(BJ1i젪W?G=[K7i0u·ZpT ڇt+jzK݁AYF/qC!W&1:o7cqjbM(8c8Y`njn<@:) T5?o}BMoL.>${: o^ RZ-6whwn۱K(\ r'5_&ݕ|X欯vyIxUIcѶ8/S` � � � @rv@�@�@�@r=|m/̈TJ>JܴnݖWΓ|SPryuf/OQV]Xݮ[}Gi4 U񛡲uw.x~xvu wjƃ7^܊ KpHlH>gɔ=C'bU#jx)Ѩ\]Od2Uߐy ˤ~"׃!Ys9Q@�@�@�@�U@F�@�@�@�p�\W(Sk>&oOZz´C<.A֝Hy}ujٓH݊;&{70;jxk\}<bl9\<:M@N܎R~Ci3nbvM(k Iq͛-}_sh õ}?U\2C]s(!Ж � � � ru7 � � � +B1v䔼:v\|2_;|/2*JYͥi0C젪W?Grq]rW_KeJm w NVo�o!Qp&{O'w?Hr7/\Iuk6!w߾}2s,cu֑f͚<q&{E84>Jm(=&&}ʏVo(|Ҹ  � � � ry; � � � @ZU0w<]lجD2#Kp#EEG'3;k,>P%|AU]h@Փ'djӆR ja[-t;JJ7oiqQN*s^rrj)ް3޸'wr̙#O<q7:`�ĭz939tfsC`μƐ_-, {(e7q� � � �x�\o^=� � � � Vit/\!7#nBȒ(sf׆/Z%sT嚥SM0ٟd Rd!O{T5{<}5>~J-RcD/_ Ը׸~}hUt?W$c̪uٴQvO,ArIφ6c:~Hr#4T|g{1FRܿ>$6[)^f/F'+r]('/r5d,}/RHemٹZu*WT_Be{P2@�@�@�v޾@�@�@�@ -rӢ}XޛS=jriѶې-k'KPFǿޙ<AU5>~Ji N԰V, Ӛ7+ǏUR[Ozؿdrl9y17dq^~I]J/6ʩ jZ?6WyZFWϓkϞIWGˑQ2`7OFxW**e_9 � � � rz< � � � @շ{D}v9%%Su׸ɂ$`'ʮ&I={Vk?TvNA*v$>\ml5B=<<tCF9+IւU}گwȭ?cҥqeC 0m4;jQQgo{oNX][J.ݤHƵc+o/<}6Lٳ״J3˘%?ya^P ݺY=Rv"cG˞i?~1v. _$k z)1ȫ;cNHHüy}Fgo|`ʓkĿ$ K:8O{;k;~5)?6p � � � rx: � � � @䦙<I젪W11f ^9vTbν `';HyάQFVj\m\^ Dr1T)\Vrff$@�@�@�0A@ � � � � r=viXj=nq9z.OH-R屟{ę) � � � %c � � � �. BLrAUӅ5>>G?o۵C?VU&~y+\%[FTm5)ѨgM � � � ��\ZN@�@�@�@ rSFs0;jxY;' k?ԘTpH_hK5m.-F6ʜ � � � � rC>@�@�@�@�E@tJ젪Wg ٴQ)֮qX%z~RN"28\� � � � Z@�@�@�@�I@7sMV젪�Wg DGvXdɗ_<s @�@�@�@'P � � � �N uf!`vPUp׸@�@�@�@�@�rPF�@�@�@��\+젪Kq9"� � � � �q� � � � `%VZm <AUӗ]sD�@�@�@�@� ȍ+B@�@�@�@JrxVf/� � � � � W2 � � � Zi-fUK#"� � � � ҅c � � � �. F:f)@�@�@�@�+@ 7e@�@�@�@�+ ȵj[YȚ=GD�@�@�@�@�/ Ǵ@�@�@�@�\"ು3gHdd*U%Ptfd;VY"� � � �  B dȐ<3 � � � l … rMF3kfd,GA�@�@�@�@�R*@n̙%O<rSXG�@�@�@�pOr%,,LP.;=5{<gr � � � � `iwr0n,YϏr-@�@�@�@� \ W#wܑK.Iܯ L0; kxq![h){ Jɒ%gҲeK>mK@�@�@�@�HOg%wܒ1cF?\XF�@�@�@�pJ'1119ᩍbl ,A)[w"ElA=\>/f{m۶9T3ZPG@�@�@�@�Ho$ @ɐ!Cz?#� � � � r]rPnTT\zUÓ" � � � � �x@ppȑCU/ZxS2C@�@�@�@�o@.ZW!nݒ۷o:o[(� � � � � Um``ILTW;U<7 � � � Y>՘Cڎ � � � � �xvc � � � |:-øz P<# � � � � ha\@eg\_Y]@�@�@� jˤp7@�@�@�@�@�@@Տ<! � � � X"kz8׾s@�@�@�@�@�lB>@�@�@�V_p@�@�@�@�@�@�@�@�@�@r]Io � � � � � � � � � � kq@�@�@�@�@�@�@�@�@�@�\+@ ׵� � � � � � � � � � `1[p@�@�@�@�@�@�@�@�@�@r]Io � � � � � � � � � � kq@�@�@�@�@�@�@�@�@�@�\+@ ׵� � � � � � � � � � `1[p@�@�@�@�@�@�@�@�@�@r]Io � � � � � � � � � � kq@�@�@�@�@�@�@�@�@�@�\+@ ׵� � � � � � � � � � `1[p@�@�@�@�@�@�@�@�@�@r]Io � � � � � � � � � � kq@�@�@�@�@�@�@�@�@�@�\+@ ׵� � � � � � � � � � `1[p@�@�@�@�@�@�@�@�@�@r]Io � � � � � � � � � � kq@�@�@�@�@�@�@�@�@�@�\+@ ׵� � � � � � � � � � `1[p@�@�@�@�@�@�@�@�@�@r]Io � � � � � � � � � � kq@�@�@�@�@�@�@�@�@�@�\+@ ׵� � � � � � � � � � `1[p@�@�@�@�@�@�@�@�@�@r]Io � � � � � � � � � � kq@�@�@�@�@�@�@�@�@�@�\+@ ׵� � � � � � � � � � `1[p@�@�@�@�@�@�@�@�@�@r]Io � � � � � � � � � � kq@�@�@�@�@�@�@�@�@�@�\+@ ׵� � � � � � � � � � `1[p@�@�@�@�@�@�@�@�@�@r]Io � � � � � � � � � � kq@�@�@�@�@�@�@�@�@�@�\+@ ׵� � � � � � � � � � `1roݺ%7nܐp-5� � 2d ,Yf u=G@�@�>xR0@�@�@�@�$,=\~`h  � �L Sg˖M͛N|5?|tay,@�@� m � � � � 䆆]q.wܒ1cFvM � �$&Rut7m܂ &|2 � �n@�@�@�@ E>wʜ9ȑ n4F�@�@9W͛7;ù @�@�H�?Ңǽ � � � �)ು[nə3gD7q]D � �о?w)PBd)>XjyX@�@�7 X@�@�@�@  ȅ 'O HF�@�@�W DFFv=\ />XayF@�@�OO[� � � � pWgN+X ]o@�@�H7-~!hѢ #Vt� � @V  � � � �!h9~ h;sB�@�@�sΞ=*Q3G?hϛ/_>7φ@�@�?XguyR@�@�@�@|.u'NPQ@[f� � _/^\r]|_^] @�@׃!� � � �V@nTT<yR-\y~@�@�3/ċ+&b@.?|1 � �ws� � � � r=qU � �^*`/ĵr z雕i#� �x>x� � � � @�@�0Sj_5X � �8 XSB�@�@�@�4"@�@�/r@�@�^j?~x�@�@�@�@x � �)`/ b,@�@�)!� � � �x�\O[� �  X q^fe � �^/`^`<� � � � r}|y<@�@�r|w1 � �V@�@�@�@�<M@A�@�@8\/~2u@�@�_0�@�@�@�q>< � �f X qf @�@�G}p|zJ � � � �&@ V � � VB@Y: � X/� � � ��\_`@�@�38\3]� � >8>=%@�@�@�@�O i+|@�@�b}!N ׋߬L@�@@�@�@�@�|\@/0� � VB@.B�@�@Qj? � � � a> � �xվ'oV� � V  � � � �>.@ C�@�@L}!N wc!� � (`OO @�@�@�@zڊ0@�@�Xj_7+SG�@�z}@�@�@�@� !� � `վ'k滋@�@�pǧ� � � � ir=mE � �^,`/ z񛕩#� �x>x� � � � @�@�0Sj_5X � �8 XSB�@�@�@�4"@�@�/r@�@�^j?~x�@�@�@�@zߺuKL"m۶/|� � VB G/_.=z_}\ � �^(`^DL@�@�@��\/[n-[oɶmۤXb2|pB^L@�e}!\-/A2h B0φ� �x>x0]@�@�@�@rrhøSʽt:tHZhQ)TM-[HTTJ5رC"""T]Z^rri9s挄KW.UV՛/[lRR%Mg � �/røJ&mݺUN<)׮]K˖-.qD!((H}ɓ'O  � � XG 4@�@�@�@�p�\;?xBa\ngCk֬Zn- лHآE yjtR 6wMN:fWXX7NkIj֬)=/_>f)ֹsg�.]L81s � @r roܸ!߿_]W^PB~%=zH9'._ldRz;@�@�[ &� � � �XL@,xRa\}Z(wԨQ={v*@;w7ސm۶9E"ZqW3g,Ǐ… Ui>M3! � �)M*5j$~^LӍڿkg@hئM׫]rLuj*ɐ!K@�@SSׁy!� � � � w3a\ f^frG)fRѾtvS:-}?fVu'L`Q @n@�Hվ@3a\mQbE=ztϧzJ9I#Fjժ\3eʔwgbCK!X-||qgÆ ry!ڵk'Qv \W( �x>x0W@�@�@�@r=xSolٲI>ف_87Nʗ/Μ9#{V;ei Ǝ+*THmJ+ T � @/r j_K֬Y} -*SNM76&+mXX 6L.]j<pʕrZOU@�@և"� � � �V +0fr_С͛7̝;7II&qFm&>22R\"rJyM,{ �Ϙ1ccŽxUvM}z?ڼdɒ>ޟ~楅#\pD�@�u6͖-[RoB/9|좫}F߻{ijXŋճ&5g<gϞ !ڳ\~]\wԏ 䦤} � X󇧸3@�@�@TGVRvaiبV "VxWl;VTQzQP* J{o3$d٩/ϻrrrMι  � -إX&#'T%KW_m5W_ɾu#{ti`>y+W;OڵkW0ѧ $ÇwFJ4н{w_Sg?,Cv԰aCiРnZ4tf͚%oYu}~'5gq)7Ȅ D_ekOuԑΝ;˙gizj/믿ve۴i#͛7W� �$]o!0ܹs_6{=X/2^TCߊ 5k4۷o/5jp3ӦM>,>Ӳk.9s}M7{6eoh/^جw]9sȰaLv[~m۶rhKrqًS>ss{:묳cǎr1ǘ{לNNS>pWaS֟oG@�@� 1~� � � � $@ 7$˗/l 7Q¸z^EZ5kp^uUҥKGmn>}NŮ jJ*Z;Ց.\l 5\tT-}`#*U`N]we?H }9.6cz=뮻νnA.@�H{5+VGk0K5Ԥ?Jk?Giߩ/|}) >s;cBt+MhٲeN v/h=E}oB:s9Ggͤa`^ϛ5t ~cI2 � %?dO[@�@�@�@� IR>lPn2øzREȰ'OY3S:mFZje \r%ަ4iDV*g6aW-WóUv W?udZjɪUdĈΈʕ3-US\t%\bB :՘1cUKrkRbES5+?r3zh3▽ѿ>h3zӤI3=_ 筣x≢޶m7!}=" � @@܋\ >C2~x0 4%#6/̧~nժWhBo\s}Xꨯ駟>W^r;vKW<[ہ\{իK˖-E O=Se^F֮]Y%oQ}u+k5:2Þ z?S'xh舺9t4_w.]:� �xQo/^ڄ� � � � G@͹A &;-@MowB{KÆ BZ6V׳T֭[Ed{1@n `Fm:iXAuc=ls4u- ړ :ԬWvrG-(|믛WQ̪AЀ.̚5KM6&hav`V]@�@ ~{ @h߱e;0n:ug5N_|滶L'~րQĞ>2?|uڇ2dy.tݍ7hvAHjxV8hOёf^{{z t ~F,\(gq Pkov}మ-[_hG=G{ZFҡ}?3+?o' � ?N;@�@�@�@�  [KX+wr",@S>\>c'0'Jç:RվlvbUdIg=~#Ayf;[m-4p@Xx~um^uU&4_}wru_||74:jo=mi}:۠�ttd^U7xz70y|.2 � h=R 78k_PnQq֮];SO'l79ߧ;c N_ྖ{7nl܁\O|'RlY{3g]\ơ߳,A_/:ur%pBL:K/dO)[.40?2 w@n@�) � � � �-�%Q׫ܛnɌbd?P .c/)SƌL~5-md~!߫g2#gH\'otb^;k舳,Iܱ݁cY׮B_S{-E=LGI\=b r ' S zM_y]f;竁 nX`ekժU \@�(=J 7T׾07,*-"k*f M1=C5{?{fOhrA#jw ׽n+WJΝ͢}v\d\}fU"`NaNo{J)S)l6oqD�@�"Wi � � � @r v{6IøL n>^tZG%vpT˝r)O]GiӦf>?v 7\="5k9vVfgI-Z-h.A_/c}CfjZ5;Y4xa ;O]mҲ@�H{%N~~~HS@ܹs͏P!XV̨`;yw WرcGվ<ѵkW֭[p=[S"u'G.^X4kS\{X@�^q � � � � -%!k;{EùNK6xøziӦI޽MSZn-}YxjxpӇyyyfYWX錆_z-]UGq_ fֿ+Rn]L$3v >x?wxҾ}ࢅ.|f?}zS&M_8t؆� �qrjPzM6 wY{[ aPvI&Ol:¬4<y5VvDۮo%j{9@n< � ?`N@�@�@�@�B  m-rՓYp\wu4ت¦M6~r4Ȱ%T WkU'}|A9k(P~k9AXBrmfFնiu9t'J5>B;y'Kjդjժ'N,tp6@�@ =R W;]1`"FƵ*;k,;L:H=]86oܬt@/(k_/r5_>S滼.<2d<4i"wW\ټMdȑLxw  � ?<N3@�@�@�@�B ձrټy{4dIg}žEk5e:(3"{P'xBFa>sҠAnοK#dr2u>o׮5+W_}U/՝}MInwXG<vc@�DoĽkK(7a\mK@'JթaÆWCMҥKiӦ裏yw _c=v*ȝ2e :ԼdڵNG׿ RЛRz!3f9h/`V � �,G1ssx@�@�@�@�BфrƵϣm۶n:سgO M~n{%;W +V4ۇ &7-[ﭷ*?JuN5k ^}Ϛr۷oۡpH\V+zVZPX��@�IDAT?VTrl"si5hР&姟~ZK3O @"V"� @@܋\фrv (gu1W4|s:b W7p?nv ͼmo]vZl&2 � P~7G�@�@�@�/@ 7OBF0'<ȄۮLGY<xYQtZiҤIҷo_g?.7vu&T 7''GJUW]eK(shUGzqIɒ%eǎҹsgsAj;:| pFLUrgϞ{;8Q>`s…ruיr_|a!WI^aYnSF_d@�H{56Pn2øچP\|۳f2o2:i_F߈S*r5}aC=N=:G-ǐZߗ7xCgͤo=9蠃EqpرRT)g["w*c@�a � � � �!䆀Ipdqn*GTuSOJ*颬^<,P=U<| jr]duYI<cuMvif]{.&Mj[Auʀd}5r޽{˴iL]\ۦ׶k8믿v_ (kdr~fHǭ[Xu>} 2D9^v9  � `=r W/mPnøzp\u{~i6mdI1?{r7M{E:nFg=oQguY!?xZlsl~-w;{{ !]ؓN-]vɯj~1c >Z lٲfYꢓUC~B%� �xHo@�@�@�@�Ur"kׂ L~m#:l.e5gr+k6v 9[#j8w6믿_~2w\΂f4g9ف\5Uppu^{W" � @R@\r"-20냧6mH=dw6y14.̌Kl^ӧL:5iڴ=)A#LhhW2� �xAo/@�@�@�@�rC$u;[a\tW}(<udoO p #(Q½əҥe} #O:| ƍ ,kUG}ѝBM?W/ޫzYr!Y "۸{aΜ9.ꈸ:{QiȑF2jt5ט}Qyuu?4nXW=Y3HÆ mׅCʳ>k駟rpN:r뭷vmn:կ__y3@�@ Y~{ \Pq=jOdWдemĉhv9n۹sg93Ug$׋`uJg}v>h/RF ^{T\dvϨorޮo5뮻L(Yߐa?w v W[� �xIo/@�@�@�@�mRdk4 /H߾}̓";@V_㪯Q *W,GqTPյK̳>Κ5kL2f*UDرc'fq322bnW4;9+UphڢeBGӇʒRJfҥfgg26� �$XoS%y}QXQqc4@owے%KRMW^m<z~)_oē] � z? � � � @r&ח@�@�R W7"'� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ ţ � �xMo z= � �~[OזsE�@�@�@�RQ@n*^5ڌ� � G@@GoD� � ?|qQ9I@�@�@�@ >׆#� � YYY!OʞC$ Fe@�@�@ ~$V@�@�@�@�-@ 7Ѣԇ� � �r@�@�(~?_ � � � �H@nΟmi&0zΨQF1N � ϟ/ .͚5z~y ȥ G_c@�G޽*]By_1! � � � @ -2jT</ e� (*+Wٳ>\>~~y N 7$mvѰaô1D@�@�?*+UQB/YG� � � � -޺&Nx")g Sr# @pc׸VX!s̉x!ON@n^^ivvvu3֜hv?8K@�(nݺE}r@�@�@�@�HrS䆣 ȍ̉R js XFmӦMAnݺu_F:N5jdOCV .'r# �@Qr_z%G 4@�@�@�Z ùre@nٲe6Z [ �5ҥKeڴQ7+D|y/ tN?Rr" �  @�@�@�@�;K 7N^W B�GlsTo @<׃@nr}^;_!ڇ� �E-@9 � � � @QD%[Wc@+rW{/?4GVZ%6lzXrq @ pNRLɽ`r ?||/*C�@� � � � �) .K 7. M\ ˉN͛7lRNTX@�RGm\+ZZ|<O=zpǟW^J@�@ .q3 � � � @ !])z k;eW?W#gˮ]{/,l[o-Ϝ'H9,D#@o}p9Ť@<)NrvcGuo>?1 � @ H+!� � � � N'mݺM>:S0RV9͔ {9:*{~˯KC+ʼEMW ~~ w�^ d+DAɽ~/]33v@��] � � � � Pr<ymhf^{ (_u(A�T ntxEE˖-iӦ_R.WDPj"99feffddd8AĽK;gN(;Ǹa=Ӟa̘f>˔)m>_s|14j0ayfe:f@�@�tNWsA�@�@�@�зi"FW{s7gtfӣᧇwuA R7m,Cv:\@HΌQFNyE[ρ~}$xD?~b s[u(A�@�4B�@�@�@�(!] Q~;nj% tNg Z@nqߝIנil+cO6us̱|5Bʕ+yרuRn4@ n?#Ve.cٲe'Ti7 �+@#^AG�@�@�@�VK_^+O 7@e񌐛b/E�C0ZwD(^FsNc s@:B:\!M`܂n!� @Z H!� � � �)#P\!])sPed$M w^s0~oժ@�!Ux ܫM 7ȭgr`ѣ##VYA_u8 � @ H i!� � � �i*.4Q"[ƌ#tg;WlၸC  @YS1]$v>UV9,_c%LH"@nѹcsGۥ=w:H? f@�@ M@�@�@�@�|@n(~ رC믿GlrZ5d7äB U灸C  @*ZS^t<Hϝr ,[Lj֬Nq5{gff*g;;:>'#:Ba{~cƌ| jc؈R13-[+ � �>ǴiӣV动 @�@�@�@�"7ZD͌0ўܨxS7o/8ź[52o=|, � x5 vEm(S|rkvw)r{U@n{v j}Zs7˝wi?2=sY&@�H#it19@�@�@�@ ц]ܜvQ1^a?ru)'֭[eE2Q'RtiBu(A�"RpKm) 0Zع=j*F/_crW\iλF"o8Qߌ6˧;@C  �?O6곋u\?e@�@�@�@ B^xJv[ z$M~ *_ՌbٲeWߔ7[t*{"kK�D&P)mZQ [@-OoK 7@y:Y@o_~f}ͷd\@�HSiza9-@�@�@�@ E`lq5@nqq 䖑 7H죍x ou(A� ( lq[Š�Qȍ+r ?uiy͗$3 � rrZ � � � @ UP@n(5@nCKe҄Ҹic:|F ס`/O-E}DnD?D&l2YfdP*''Ԓ)RT4=*ߡgήn>Kȑzu/J{1cƚstCW\z2y9ɩ2dاhٲ@�@ 1}QWtzo @�@�@�(T}.v-8A 7Ƚ 2lrf Y/:-EuH/i)r{/=Ɓ@r+@n2 Fko/nb\@�HSiza9-@�@�@�@ IxC 7+c[㴪GeYΟR= g.W:,VuVcYPerO9dPLZjcEц8FaPXٞE]<@feejܕ+WQ#;=ogurGT/=gjҲጐ[1(S6 SN]o * � @ hcڴQ].{G46E�@�@�@�R] pl"?6Mx mѓk^hT+*{d;IZ5d̩iu(A� g@4NfIQ+,#ҥKVZrqR3QdBDPSvȭ^'˜Cٲ=s׽Fl2cs~r f@�@ M1}Qܨ@�@�@�@%mpֵkԳE 7jNoIrO6;P?/=qv4`\zP�T8:fu_8x̧R[9O\G5rK(!:#wK꿹]v=Bnvvu66 -{)!xrU&Kcǎ3M�yѧ6 j0W';ۢEs@�@ K +]!?, � � � ,Tz\mu@n:-Pܟ-㴩MBraۋ#VZ:ۘA�]8^2랬zҎhMyo W 733S222|ݹs ;?eFȝ9BӚHmvA סa@�L~ � � � <d@nq^UpP\=o#|Vo :uuDA�t(g"}r &˵34/jLNs}{<|{Nj׮--[p1� ��t  � � � P v&:.¤ٞRz"۷o?S֬Y+6nJ@ 72E�X2c%.Kt}]8FAe ,]TjժUЦ[<ԛrW\iλF줸R7@n:YeFȵ[k%krm!>@�@ |@�@�@�@�o $*89plK9'sͪVZobH+ &X^}C$m:1v%ܨ#vFȍ.=#F"eƎgN,T 7gϜgVh<x � @ZHI � � � � Z-8 $]I 7Ǯ kB@*[G_D\\TDZǧx ~ &˵r˔)sf7 eb# ��x4@�@�@�(h®4/ UxzN@. B�b(g"k|YUOQ|'p:o~ȍ1Uk3fizvjL\{ܖ-[)n@�@ �<lD�@�@�@�Q T�6U]\tvN9V"5*(@� $+T=fq>xK]_p,#+Z@X0})n:{ffdddN/ z %m#v+M V � @J HF@�@�@�@� 8mID]r(u^B%PxWu kȺ36s>ʕ+%+++ sfQQ<%b x)y4@�(LGaBlG�@�@�@�r&X!̧ȍD!7Z1#:xW͋{D{'s,~Oɽork@nm$@�@ Uʕ � � � @j-QO$u-Hu)+@ 7e/ G�2?}cϾoף]/&P׭[g(QB"v^ޮw%Svvu/_ƍөȍ@�@ E � � � @^zo[?o.vyMÎ=7H@�$ $3OK|<q<ne˖I͚5ݫ:k̔ _r!7+?i_ݺx4@�(*E%q@�@�@�@�7[Sg%[Еa] MKG@ Nd9c;V}Im{_wXF G}YM 7ztك@n\I@�%@#Qԃ� � � � e?ckyܷi%@ 7.''� $3KMh*_cǾT78fmexr { ~1;昣Lچ� ��"@ � � � g &3}#݇@n".uxF@g. A�"HV3z'*)ݗ5uszXF �C$f@nb,SFMūF@�@ ?K � � � @z Dv-c'•'[Ub{J MEc@ NDBKiDsNK,dz]G"?֞Du,|rQF67w533SJ(+DĄVv%yyyի%~*�#z:@�(zEo@�@�@�@�D &XO{b7}ȍR&e̥ @2CMY=HWhX%[кDW1X˖-5.kP5@.#PgH 7 @�@?z9o@�@�@�@ @pp5|·S_4FZ.G kG B7ޔ%Kիe۶mh+<pB iFSw2FZg$")c_h>іLDG � %o@nb,Sf׭{L*66#� � pR*D�@�@�@�|#`Z9h눦|$e s<;eؿoiWܥ_%;W2JqNjePbv_ζP3vU͐+r L+V/j~Ӫ$w83d[X\~GӠJǟ j26mcFUJNN]-4iyY5o^X@2CԝYv[6r>lAíKf˶(WVF_͍QzԺAZQ8G]>Q<\Jal-p?V;W-Ԍ?VϚ)V7bV G8.fիdf^~a˳;V6 :zrHv`$m7KfH再ћnqvTx4[ioWvHɒrnvW~:ugo"SI7{n>緍2vf9G!+ṫ6%jU*^3?2?fyp,#�?EXF�@�@�@�!IX5VxfHʆ+C 7֫ݶ]#cZ$ u1,wR7p$S0<qM*@ [qQsRo!Ka; J*SVWˈɚE m.W\6btu +&Nw3NN<ԛ{5=KҥO,6cy]gɷ)k,3Ν#?Y{u\2{MOwŕf~2fFrz.b:tiW_ FIٲee?B ^ `FSoeUы18}.p 0B[#o߯#jcƢ\0{,OYe.wrtf%tVC]ģ{ Ӥy2lt] ,:V?~7w\fMi?|VNlN+zzRꠃB?V}?C}s {,kq홿ϓx,}Ilz)>L&?ϴJ:KKڙfͥ3/@Ue]g89Oeiޠ98f/[#O\&s9kփ()M,5)Mr z)g4l+}n#>Dx{Sw׆@{izi3`Ly#2 � � � � @`k$uIJ4Vr#r)RGy¶sH3O [&7C W/6ZXrRdI9΁fk*܏k%'tV[ LT炶e{FGof:u7grZ k׮;o}*56gsHq")[X¶GrHꈤ-cOi?c?Ϣ<V4l0BUrߛr8BFɴ_Tp aˤ $'{Ow߹'gR@ľe**}TntطxءRNi ͦc& ~vI[YlUNNE[}I:j{β=rufq>Re֔r7n|76U;rOȝquؤr߫3ž{5u/j ~QHv wr+Q_ (rȭ*N 7"P !� � � �@A!dqNJfHVN 7YwC1{d@\GmqB^_IJ^9i_$kTui&HG]x4{.φ\Y< Ok}!\TI@XzN'Jj@n>b[(SlڴI+>x_lI'#dM-2Eq 6XvY3}}3u1 \)bw<4f:BnGʷ s5 YjIJʼ19Wnmlo.46/rYr`�J`䛯>_yg]lr[+@r:Zde3YarGہ{ k!|;{h!_ Wog\w @m3p{Fȝq#XygqoxԭY^,^^~(#3Fv=Bn Y7=#.˳es4 5 � � � @q 9#'eݕ6[U*/ keUE+ >[U&Vz wh|a=s)?_lwQ:\!@F~竏@n>b[P.SrԌH'L:mS¶'}#9]e{h?XѶE'PssW@n%|ݵk^=J͘'Y~wv<kC֏{^ԬXG嗅(G}T-!=dٱeYy͏Ki/h5Bnm߼Y~){ƃJ8KYܥrrÌ;cjQοnV i|O9&UG|L}_<z+ǸFҾY_YRb6!]O:<ZOzs>{픳`햭ۥR䭾-$R|߹s|c0{~z!WI=L53Tp!:Bߛ2p+2A�"e@�@�@�@�$XIXM]}MYɬx|سK 8&b ϹskAl۰A>9:wÎ;Aد!R ̙-[Vv3:Q%?`ju@u $o)W tXk\Y1ilWٶeX5zT5jrϽUt5k)EGvO{_Glo/Lfl[i毜Tpg~UO e夣SG*>:rOv[K.-zϖ6 %w] G4lݙ?7mYP-]"T G-[JɃh'5v_?+,p_d :Ѳ1g?Ϝ*Ts9YN d;Qh뉤|enĻ=:"-쩰vB}ƻzY?z ^jU_H'?r teRBYy +ۋwܓwv ^gV |͟'sum(>ב^{Sj,3Λ+|fYe 1'{}_dZ6mg͒_.۷nCj4߿̗SUv+|]ϴ{{iٺvTntHc*vrT͔B'!MȭdfƕM\ZRfm'R,T<Tn[*'"+&O'HR9rx;mƷ?h+!>O3*aF}$fV +;xw 7,+93Zt[y_ٲebq//Fm;z։U@nV r?F}Yf#O Nˎ=k6lCMw!'ԩ(Cf- n#IӳU/keMRRҸ{m?/k^ ֯s^s_r2nW*z[Ѡ*a3@=^!sւ?dLG*U=U@ !»@nU+', �(�U � � � �F k8h|"ʸ  ٶ}[ڰY[}ivvI@ԇ9[pe#FUnmuw&P޽<=O {H>|f3xiVXe֠BkDPS?6G7w~6j5!̓]+Wp}Z~xǫvf3idѰ=-F{1ߧ~^u?/5<Nؽ5T[1(@ja~{Fk`=׵s7$;v쐒%K!7Tf4DR2nu?+lHDR})>~ҮH\qFM{$Y-͒UvsdX-rvȽ懹{tQfB y>tʇѐ% [&X}<u5 V ^oyʃdѰ!懇Mz'C/oo.;g˽b:ً0rS)vbGն}׌{۝Nf\;kK#z73MϐzD4lO9ȸ^w؋>vL[?sO>t Xu%~ KW4V~Y)v g#v~V#a9ҩ㏗V8ѓkz{Ǟphc!ww w{{iYfQ/5T[uf7FȽaȯmWRk)+>ѨER ~?ɉ2u*iqRi:ua?ʰڦ+ʗ_y_jϹRz!w G2 U)똥 0UGȵwwi('hw {#x1X� ( � � � @ C:X>-lw2@n䱒��+IDATջfL.j|vψ2kj\b 08At(msu4<4ՇYEHN/oV͑Ǜhݵ}5j.Ցvlj,;Uvo|:H&mudCg˖?_hW8KڼMn  qt&#k^|ܖϼ`F99SیQʛp/>zߌ[ lVu f^ϡu]Zew W].>l?~dl%sh5rg`$_]l6\) r79zZ_kWj32󅍐[\3fȩ66m| 4K hꈤlaem/mlŽi+3} u(⌐>֛9:=!'+7w.ʟ9Bn@;0{ǃ+0ySȟfm7\ _Y˹[? U7z} N�[o8Ԭgʃgr?)vl-.>ƌwݷ){ޮpp?SXV&VRF>0Z=_S&MR7c|aMg=unk/rf= 亍= _G-S5真Eu@TW&IRzSʂAUwZ|Y,Ev,cxZ3}ɼKxtsZzjޢ#$vrF�>NV 7緍_5khCos )=M!n kY-l<; /cro=ap]@+;ZXsݝO' ޖ;wO.hY'TrUe<3Z7.rr{8,[` ,yRrwW׹ú\P.kUGW!`sS? @ap؄� � � �X \0h|aebN &۟||<s6\{4&g43z]zZB2]Y}y健k;s_}Sh4{G\M >^ζ0VAH9m`$0 aJ<CժI_{aW ]{\ f6n"or)̇ -YOp}I,GurLn>lM�@Gg分Bk*3Yw QVϚi^ #C k:)zW``?v픝۶RWHN%-io_3_П }<Icƌu#o83#)[XpCm ^ECm ޾ n'\e k_ph]| Hvvv87w9#'4`df/mt=_gߓ Q9B.뻣(a}?2Ji޲ɇ-?l�:-nM"oT*2BCk`QݩJf{<;WrƍZ4v5mq*{њ@ꁇC_5h?z;5ڭ%:Nȭr)Aro`5?IǴWa!ecꈾ cer/z՗$3_xFR&3ꏼ&?ZoTF`O?h|Hq~uΟh7轣Nzh?֞:}2Kȝ4i9ni0iF=7y٣֑fO ?[S3jȃםlo*s!wO w`r|kuY 0eOc`jȧ0BSeϫr3r?D{gG-NmOs^<Gn|#6#N3G h+:z;l|uNmؖ*!.Z en* FG6!� � � �)*PX85ӊh)l"ȍnHg,Z!fZz^cK7,WD =Ýg] 5#~jko%[ dW �k2{Ի*3޸(Ǭ&߸p ` \rوf۪ᅮ/<oԳRM;gm=z꫅w.|Qrssseaf^ܡC4c< \د`xIpem3 =QmPkC$FS&>g@8F 67 @jFS4k$Oksi?/@nVEeڵa3b 4rPV WGթ7虅0|pe,;( SM]ܓCr<)5[-=_~0Ptˬ0p);!ww q/+aO ^wFR=λe3Bwkf1j4Ų隙MA(9O/3% ̇ZgqOOY>v9+&#utdrD1xz;g1rs#{m{ܳO&horߚu_HF'Q>V@ I+;@nk>jGϟ8O22"[w~|[6i<Ӥ-k%ٗOH�$S= � � � d7 =6,@n ޠ4y ɡe,ghJrc!?d cMt5zEfso5Hsn^JZYi@Ӝ_|t& v �WMLdoMCM}p͍Y#q)7drNweL籓Ѯ|"h HC~I}F!SΝ;;I@<HMDpuzM> UgõˮŽ[>KV2`^.1//m 7+9H^_^b=Fm}l{zTf{}.@n#> r?EJ.S&-KG=3bl; p=BݿiɗdCMg=ysȖ?A=t:;+XI2#o\SaE ^-ef'\}7#Z˕N'uGkn+D{t}4Qukr T?K:7u)RJU3??%מJOʗ/g/炜uҩHӎ/:Vn踈ۤ#6)|kCآv}OqfO'G칗u܏G/YIV w4o5=�-3_t\;I5.pj"sAGf[&A�@�@�@�E@jKSXxڗ@nwA n?DCWJ^8<</Qȍ-v=^x~bJd ʍNʷXZפ~?4AX}iukaN9S[݌,|(g]A3z*nlN7 ߮2IyeC}Hf|'FRSetCʚ5keر2sLӾݻ/䩶Kc VF$•e[}^hPE..랏u?w#Uɽ)#o*w~PTT>kO@Q볌bg^gD%:Bn 4rwдYz E|4zxi/#¦V wr;])'Vp WGȝδ5[m=, vkѷbVԠ@?VwSOȊfvտip]w9gXϝ&(Yr'qi2m3O(0Jz'DZ<~9KՒ>#Grbk6l7iҬQ ܥK~cLU<z ׮I!w0ً5ռLirv~U=X=r|`Ij@� H*/#� � � �)+*Z E_aecnmr )}˿?ſi.zٕSl"o6WO.6K_eGrSSS~xO wÊkuTRܝ֨lC/o/ UUq9CľvV_TP 7ghr5|0.c{nxh',W;)rǎr饗ɐ!CLZ.M4I֧F3 dF$• kjS<)\vg= ͻ U(t Ztrz#vlr?yUR=kF={w r!wcV r@P9#?-_*?[*#43|D:R&gyHNj#Z?޳;w,2yw 7#ꦍן]x;Dȁ'gܝ۷ˈkC'mWN*VǤ3[6F3ow]@Я̺&-Ǘo6[yKuc.ܟ&6\[m]>1UѠ<{iW#}S.[#Wځ\+ӓ(L |9jf!wjkܪ-MS~^%f-mh m}JtNjHS<@�Q@�@�@�(^j"ZmW&&nXn!wYeZX kerC 7@nş^͕߿,0|$۷l1uCVO W+{mz`&Qd!wյWg<Խr3oe=0:f1Qܙϛ:H209R9\swQ\[XP{WP=vTbW,^bc ]OT/&g!֨+1>=,TAXPwfvvٝeas{ιη#aVYcZɚZk3KO{zo8b)?i:b-jP|H|흐íh݌~AWs`X[' 8^R!w Q H ]n4{{60bnԩ349W5>{C w)CRŤ'Og2`񓘢d!7⏳\"R{Oc]cn3t8J8go %rO \"E`;r dBnUI]&'Șx(\,ʾ(D ^Ʉ\ -!)-鶲psl>t*-kX= rBggA`LaWն@=35-üuW`G]n5ti^^?9B$t$ B B B HZ5wUZI_=@R,xXR}QD~~8M/*;߉k]BdM^-ul,':Sa]$ M4t66pd^V(R!v0Ex*'(9!7.G/Ȗ=;T $R\TE%+,*Y큟ߏXeʔ 96!!q̙ ӧO@#`_Zr5F9vsbQx%Zlj8״_r-)er3m#@ Us xףppԭxֲ@Ƴ:!͓'}k6Hm :B)ܳsܚ5k{ wD>&ٷ<gj}AÉ0r̝͞\!]ovi "[!4 }x?,C.\Mq@}{q?r Hv~T=3?$uP!د!'rOK|c bmrb{t2>>^J* R;3Tn[9ɞШ6XV$(z'+(qH؊n)`h3j7<} ~cH7oC;x{`0_g) @ɢyv¢x~tSR_j%S:#@BZ�!@�!@�!@�!@P#jN`hN>Sj'\MfbReL 4aK2{D8B.nCC& bi;FqrÁAȉz}++å% `[8w ;-E} <0zϹCՓy%;{%KTT),[.\zEjg@Dȵ ʦHZFђ#1jJ6\]fXss`<μT+&:r-kME& *)�F+! w7 >qζN Ʉ\Sȝ0o[G)/g.i$HP`DU$5B22m[e?r}gq|=\4 9⥑ϷPW_޼gi%ٳWT==g&}/s_:WM& ;y)RClyQ!W 侈g.<OݠtIGtt4T?ZjXia}  Dڕ F͓;gGCR$;*Oh=oe\BcwawdgPE4\cʸ V.z Gb v:=8 dbrB~PL? Bn˞C1yѢ%6X;!@!tM%�!@�!@�!@�!`jVc)1ċ*ljr;r,R=;]竩[x5P\Y65?*îY!7 FMJP,%2%sg]}hd, ܏귮=!WzYyr;Gn$67 - epy<Sy?46bpcp,\Zש٢?%3rgϞ3fҺF{ouZs3W)ٕl%V9-9Ģ4GkHV[#j0>P{?앐ӡ?`ś|ѯE=EQ͵T<:!+~چ[$F!WF5* ο̸P( T ',1-D^:&n@y~^ ɶxɕOGDW-Ŕj% 7lH)(rUɱFb Eڟ/u;e23%G\H=(7#/\܁'J.X 76A#!@�GtPw{�8*ͦ :@aiLm_x:y=X wF\\!wo?#6OFҬ*+x';6}Qr1lH FeoN!1c"<>1 zv1ysq;^2V o9XPB-x*0qؽXz?kS  :~j B B B BP#~-wsr5yJ6K\-;m#1~Ꮯi߯!*Ι8`9h*M;nJS+=~ݥSkll⣣ɉ5@{V*6Sܟv-Sdt= 0E=@#ܤw`{.{;]X ޻8?gIBx7t aX,ʖ«Qnob{Fr+T2vXX"$ȞZ1ђT1OɮՆk8sƑ4_)ou۴uSLBfЍ!o,qg,~ *sqqٳf2ˍ?RlDDO*޷7W˷A&c;U5 AyU(ӧU$PAXB댅Hek]$֨ ~YSkl^>z9:lr 6X7>:n �[_ąÎ^]ݟg -CB.v>8+rYpҷq޼=?*+V|HnǷ~`|H)(膝>  *."!w {cnM<6##%[O;@s%*HȭR,{0_іo&p|\ 1ɋ7vx<rK9Z"!|łk B4AYpr s]VV %>%wrUwȗA9z1$r/ %u؄x.܊5fc)Q**II$SG& Bm8- B B B $j$TK.֜1ĪŨŵ(ld7!WD6 -!hZ r5d7OچZ ʤUqbkĦ;*VY/)\)tmv=Z`Q=J$J>S8WnW?owp?^ɉq!wû]+bdn>s?PjEFYhˋslډc71f!84f$'?,JA86Q5peR \x)6Gxxx%kҚBʕOFFΓejOs֨%c~5=3CQA *XQD[ U_ҝ#Qĝ,Gl?[P!72fOQ+C/n2$K~!r=-^ @&Mnl6#:=Hx~g7U:^+߇I\yp:u8WnW? Ͼ ; Y, 1Bn_$3%SM[1D?t hlr?!r�u_D;0A:܇~ G BOqv)Ⱦcnn ;s L�%&`@E'?nm 2%w^xUJr{Z111PZu);9rXjg p1zS�r5$Ӹ-*6O`u?)V,[Hꋕq0~iI mxF˞[phQ11RTٝ^ ¹lUYr.;v)>wŋ|Xyz|w�^ys3pʥF0#7k\޷o_XlԦ !@t=�!@�!@�!@�!!YU-Ю(pJvF\ݤM#` >r_FGÛgO A2e̸yXtEVw̓=}ɔ1UL9ϩd)2*'FiӦPD X~gaC)F]bRS6c"Ī v~ŋbHɳB08Qr9 !QI!׆>$4T#` ^xtDWA`p*U +31=$^DC܎PR%V)W'T8/NV*L q/g>1 J .%Htִ dHL�xRO2N'0\'6|s2 6d}%puuT!CbB B B B/D⩥V585SižDȵ'd )&a$$$I>|rצqH{{77ǮZ#ҪbNkIK/ k? ^ \{Rȍ Irah�! 6?; e'L�?2 B B B BԈjfDZ|Jv-6"(m"Ѥ+r�__[h\,t[T`Z3קoIa.6bŦ%FůxIQr`11|�q>u!Z-kڶq튐Zζ?04{ \`Bb$&&BU >>,((dUrB\a.bO�!@�!@�!@m#`HHMj0S<|ZlbO�ɴ!7n M 4 FUjX~s}JigcƵ J1_Wc{ro͉TבuJFe1BBBj ={vC&cgBRR Dȵh"f͠}-;mV H:d=�!@�!@�!@�!ViN.Sj~Kؕr ۈ](����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022221�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/AddButton/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024105�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/AddButton/AddButton.tsx�������������������������0000664�0000000�0000000�00000001064�14467713645�0026532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; import { Button } from '@chakra-ui/react'; import { AddIcon } from '@chakra-ui/icons'; export default function AddButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ uiSchema, registry, ...props }: IconButtonProps<T, S, F>) { const { translateString } = registry; return ( <Button leftIcon={<AddIcon />} {...props}> {translateString(TranslatableString.AddItemButton)} </Button> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/AddButton/index.ts������������������������������0000664�0000000�0000000�00000000104�14467713645�0025557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './AddButton'; export * from './AddButton'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/AltDateTimeWidget/������������������������������0000775�0000000�0000000�00000000000�14467713645�0025522�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/AltDateTimeWidget/AltDateTimeWidget.tsx���������0000664�0000000�0000000�00000000777�14467713645�0031576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import _AltDateWidget from '../AltDateWidget'; import { FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; function AltDateTimeWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { AltDateWidget } = props.registry.widgets; return <AltDateWidget {...props} showTime />; } AltDateTimeWidget.defaultProps = { ..._AltDateWidget.defaultProps, showTime: true, }; export default AltDateTimeWidget; �react-jsonschema-form-5.12.1/packages/chakra-ui/src/AltDateTimeWidget/index.ts����������������������0000664�0000000�0000000�00000000124�14467713645�0027176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './AltDateTimeWidget'; export * from './AltDateTimeWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/AltDateWidget/����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024703�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/AltDateWidget/AltDateWidget.tsx�����������������0000664�0000000�0000000�00000011232�14467713645�0030124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { MouseEvent, useEffect, useState } from 'react'; import { ariaDescribedByIds, DateObject, FormContextType, pad, parseDateString, RJSFSchema, StrictRJSFSchema, toDateString, TranslatableString, WidgetProps, } from '@rjsf/utils'; import { Box, Button } from '@chakra-ui/react'; const rangeOptions = (start: number, stop: number) => { const options = []; for (let i = start; i <= stop; i++) { options.push({ value: i, label: pad(i, 2) }); } return options; }; function DateElement<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { SelectWidget } = props.registry.widgets; const value = props.value ? props.value : undefined; return ( <SelectWidget {...props} label={''} className='form-control' onChange={(elemValue: WidgetProps<T, S, F>) => props.select(props.type, elemValue)} options={{ enumOptions: rangeOptions(props.range[0], props.range[1]), }} placeholder={props.type} schema={{ type: 'integer' } as S} value={value} aria-describedby={ariaDescribedByIds<T>(props.name)} /> ); } interface AltDateStateType extends DateObject { [x: string]: number | undefined; } const readyForChange = (state: AltDateStateType) => { return Object.keys(state).every((key) => typeof state[key] !== 'undefined' && state[key] !== -1); }; function AltDateWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { autofocus, disabled, id, onBlur, onChange, onFocus, options, readonly, registry, showTime, value } = props; const { translateString } = registry; const [state, setState] = useState(parseDateString(value, showTime)); useEffect(() => { setState(parseDateString(value, showTime)); }, [showTime, value]); const handleChange = (property: string, nextValue: string) => { const nextState = { ...state, [property]: typeof nextValue === 'undefined' ? -1 : nextValue, }; if (readyForChange(nextState)) { onChange(toDateString(nextState, showTime)); } else { setState(nextState); } }; const handleNow = (event: MouseEvent<HTMLButtonElement>) => { event.preventDefault(); if (disabled || readonly) { return; } const nextState = parseDateString(new Date().toJSON(), showTime); onChange(toDateString(nextState, showTime)); }; const handleClear = (event: MouseEvent<HTMLButtonElement>) => { event.preventDefault(); if (disabled || readonly) { return; } onChange(undefined); }; const dateElementProps = () => { const { year, month, day, hour, minute, second } = state; const data: { type: string; range: any; value?: number }[] = [ { type: 'year', range: options.yearsRange, value: year }, { type: 'month', range: [1, 12], value: month }, { type: 'day', range: [1, 31], value: day }, ]; if (showTime) { data.push( { type: 'hour', range: [0, 23], value: hour }, { type: 'minute', range: [0, 59], value: minute }, { type: 'second', range: [0, 59], value: second } ); } return data; }; return ( <Box> <Box display='flex' flexWrap='wrap' alignItems='center'> {dateElementProps().map((elemProps: any, i) => { const elemId = id + '_' + elemProps.type; return ( <Box key={elemId} mr='2' mb='2'> <DateElement<T, S, F> {...props} {...elemProps} autofocus={autofocus && i === 0} disabled={disabled} id={elemId} name={id} onBlur={onBlur} onFocus={onFocus} readonly={readonly} registry={registry} select={handleChange} value={elemProps.value < 0 ? '' : elemProps.value} /> </Box> ); })} </Box> <Box display='flex'> {!options.hideNowButton && ( <Button onClick={(e: MouseEvent<HTMLButtonElement>) => handleNow(e)} mr='2'> {translateString(TranslatableString.NowLabel)} </Button> )} {!options.hideClearButton && ( <Button onClick={(e: MouseEvent<HTMLButtonElement>) => handleClear(e)}> {translateString(TranslatableString.ClearLabel)} </Button> )} </Box> </Box> ); } AltDateWidget.defaultProps = { autofocus: false, disabled: false, readonly: false, showTime: false, options: { yearsRange: [1900, new Date().getFullYear() + 2], }, }; export default AltDateWidget; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/AltDateWidget/index.ts��������������������������0000664�0000000�0000000�00000000114�14467713645�0026356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './AltDateWidget'; export * from './AltDateWidget'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/ArrayFieldItemTemplate/�������������������������0000775�0000000�0000000�00000000000�14467713645�0026556�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ArrayFieldItemTemplate.tsx��������������������������������������������������������������������������0000664�0000000�0000000�00000004556�14467713645�0033606�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/chakra-ui/src/ArrayFieldItemTemplate���������������������������������������������������������������������������������������������import { useMemo } from 'react'; import { Box, ButtonGroup, HStack } from '@chakra-ui/react'; import { ArrayFieldTemplateItemType, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export default function ArrayFieldItemTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateItemType<T, S, F>) { const { children, disabled, hasToolbar, hasCopy, hasMoveDown, hasMoveUp, hasRemove, index, onCopyIndexClick, onDropIndexClick, onReorderClick, readonly, uiSchema, registry, } = props; const { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } = registry.templates.ButtonTemplates; const onCopyClick = useMemo(() => onCopyIndexClick(index), [index, onCopyIndexClick]); const onRemoveClick = useMemo(() => onDropIndexClick(index), [index, onDropIndexClick]); const onArrowUpClick = useMemo(() => onReorderClick(index, index - 1), [index, onReorderClick]); const onArrowDownClick = useMemo(() => onReorderClick(index, index + 1), [index, onReorderClick]); return ( <HStack alignItems={'flex-end'} py={1}> <Box w='100%'>{children}</Box> {hasToolbar && ( <Box> <ButtonGroup isAttached mb={1}> {(hasMoveUp || hasMoveDown) && ( <MoveUpButton disabled={disabled || readonly || !hasMoveUp} onClick={onArrowUpClick} uiSchema={uiSchema} registry={registry} /> )} {(hasMoveUp || hasMoveDown) && ( <MoveDownButton disabled={disabled || readonly || !hasMoveDown} onClick={onArrowDownClick} uiSchema={uiSchema} registry={registry} /> )} {hasCopy && ( <CopyButton disabled={disabled || readonly} onClick={onCopyClick} uiSchema={uiSchema} registry={registry} /> )} {hasRemove && ( <RemoveButton disabled={disabled || readonly} onClick={onRemoveClick} uiSchema={uiSchema} registry={registry} /> )} </ButtonGroup> </Box> )} </HStack> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/ArrayFieldItemTemplate/index.ts�����������������0000664�0000000�0000000�00000000136�14467713645�0030235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ArrayFieldItemTemplate'; export * from './ArrayFieldItemTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/ArrayFieldTemplate/�����������������������������0000775�0000000�0000000�00000000000�14467713645�0025737�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx�������0000664�0000000�0000000�00000004443�14467713645�0032222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Box, Grid, GridItem } from '@chakra-ui/react'; import { getTemplate, getUiOptions, ArrayFieldTemplateItemType, ArrayFieldTemplateProps, StrictRJSFSchema, RJSFSchema, FormContextType, } from '@rjsf/utils'; export default function ArrayFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateProps<T, S, F>) { const { canAdd, disabled, idSchema, uiSchema, items, onAddClick, readonly, registry, required, schema, title } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const ArrayFieldDescriptionTemplate = getTemplate<'ArrayFieldDescriptionTemplate', T, S, F>( 'ArrayFieldDescriptionTemplate', registry, uiOptions ); const ArrayFieldItemTemplate = getTemplate<'ArrayFieldItemTemplate', T, S, F>( 'ArrayFieldItemTemplate', registry, uiOptions ); const ArrayFieldTitleTemplate = getTemplate<'ArrayFieldTitleTemplate', T, S, F>( 'ArrayFieldTitleTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; return ( <Box> <ArrayFieldTitleTemplate idSchema={idSchema} title={uiOptions.title || title} schema={schema} uiSchema={uiSchema} required={required} registry={registry} /> <ArrayFieldDescriptionTemplate idSchema={idSchema} description={uiOptions.description || schema.description} schema={schema} uiSchema={uiSchema} registry={registry} /> <Grid key={`array-item-list-${idSchema.$id}`}> <GridItem> {items.length > 0 && items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType<T, S, F>) => ( <ArrayFieldItemTemplate key={key} {...itemProps} /> ))} </GridItem> {canAdd && ( <GridItem justifySelf={'flex-end'}> <Box mt={2}> <AddButton className='array-item-add' onClick={onAddClick} disabled={disabled || readonly} uiSchema={uiSchema} registry={registry} /> </Box> </GridItem> )} </Grid> </Box> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/ArrayFieldTemplate/index.ts���������������������0000664�0000000�0000000�00000000126�14467713645�0027415�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ArrayFieldTemplate'; export * from './ArrayFieldTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/BaseInputTemplate/������������������������������0000775�0000000�0000000�00000000000�14467713645�0025607�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/BaseInputTemplate/BaseInputTemplate.tsx���������0000664�0000000�0000000�00000004601�14467713645�0031736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import { FormControl, FormLabel, Input } from '@chakra-ui/react'; import { ariaDescribedByIds, BaseInputTemplateProps, examplesId, labelValue, FormContextType, getInputProps, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; import { getChakra } from '../utils'; export default function BaseInputTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: BaseInputTemplateProps<T, S, F>) { const { id, type, value, label, hideLabel, schema, uiSchema, onChange, onChangeOverride, onBlur, onFocus, options, required, readonly, rawErrors, autofocus, placeholder, disabled, } = props; const inputProps = getInputProps<T, S, F>(schema, type, options); const chakraProps = getChakra({ uiSchema }); const _onChange = ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onChange(value === '' ? options.emptyValue : value); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, value); return ( <FormControl mb={1} {...chakraProps} isDisabled={disabled || readonly} isRequired={required} isReadOnly={readonly} isInvalid={rawErrors && rawErrors.length > 0} > {labelValue( <FormLabel htmlFor={id} id={`${id}-label`}> {label} </FormLabel>, hideLabel || !label )} <Input id={id} name={id} value={value || value === 0 ? value : ''} onChange={onChangeOverride || _onChange} onBlur={_onBlur} onFocus={_onFocus} autoFocus={autofocus} placeholder={placeholder} {...inputProps} list={schema.examples ? examplesId<T>(id) : undefined} aria-describedby={ariaDescribedByIds<T>(id, !!schema.examples)} /> {Array.isArray(schema.examples) ? ( <datalist id={examplesId<T>(id)}> {(schema.examples as string[]) .concat(schema.default && !schema.examples.includes(schema.default) ? ([schema.default] as string[]) : []) .map((example: any) => { return <option key={example} value={example} />; })} </datalist> ) : null} </FormControl> ); } �������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/BaseInputTemplate/index.ts����������������������0000664�0000000�0000000�00000000124�14467713645�0027263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './BaseInputTemplate'; export * from './BaseInputTemplate'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/ChakraFrameProvider.tsx�������������������������0000664�0000000�0000000�00000002670�14467713645�0026645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { CacheProvider } from '@emotion/react'; import createCache from '@emotion/cache'; import weakMemoize from '@emotion/weak-memoize'; import { ChakraProvider } from '@chakra-ui/react'; import CSSReset from './CssReset'; /** * __createChakraFrameProvider is used to ensure that <Global> emotion components * can be rendered within an iframe without changing the styles of the parent page. * Required for using Chakra UI in the playground. * * We have to define ChakraFrameProvider in this library, as opposed to the playground, * in order to avoid conflicting versions of emotion, which breaks the styling. * * NOTE: This is an internal component only used by @rjsf/playground (no * backwards compatibility guarantees!) * * From: https://codesandbox.io/s/p98y9o7jz0?file=/src/frame-provider.js:0-650 * Also see: https://github.com/emotion-js/emotion/issues/760#issuecomment-404353706 */ const memoizedCreateCacheWithContainer = weakMemoize((container: HTMLElement) => { const newCache = createCache({ container, key: 'rjsf' }); return newCache; }); export const __createChakraFrameProvider = (props: any) => ({ document }: any) => { return ( <div style={{ margin: 2 }}> <CacheProvider value={memoizedCreateCacheWithContainer(document.head)}> <ChakraProvider resetCSS={false}> <CSSReset /> {props.children} </ChakraProvider> </CacheProvider> </div> ); }; ������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/CheckboxWidget/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025113�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/CheckboxWidget/CheckboxWidget.tsx���������������0000664�0000000�0000000�00000004274�14467713645�0030554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import { Checkbox, FormControl, Text } from '@chakra-ui/react'; import { ariaDescribedByIds, descriptionId, getTemplate, labelValue, WidgetProps, schemaRequiresTrueValue, StrictRJSFSchema, RJSFSchema, FormContextType, } from '@rjsf/utils'; import { getChakra } from '../utils'; export default function CheckboxWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { id, value, disabled, readonly, onChange, onBlur, onFocus, label, hideLabel, registry, options, uiSchema, schema, } = props; const chakraProps = getChakra({ uiSchema }); // Because an unchecked checkbox will cause html5 validation to fail, only add // the "required" attribute if the field value must be "true", due to the // "const" or "enum" keywords const required = schemaRequiresTrueValue<S>(schema); const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, options ); const description = options.description || schema.description; const _onChange = ({ target: { checked } }: ChangeEvent<HTMLInputElement>) => onChange(checked); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement | any>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement | any>) => onFocus(id, value); return ( <FormControl mb={1} {...chakraProps} isRequired={required}> {!hideLabel && !!description && ( <DescriptionFieldTemplate id={descriptionId<T>(id)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> )} <Checkbox id={id} name={id} isChecked={typeof value === 'undefined' ? false : value} isDisabled={disabled || readonly} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id)} > {labelValue(<Text>{label}</Text>, hideLabel || !label)} </Checkbox> </FormControl> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/CheckboxWidget/index.ts�������������������������0000664�0000000�0000000�00000000116�14467713645�0026570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './CheckboxWidget'; export * from './CheckboxWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/CheckboxesWidget/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025443�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/CheckboxesWidget/CheckboxesWidget.tsx�����������0000664�0000000�0000000�00000005524�14467713645�0031433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import { CheckboxGroup, Checkbox, FormLabel, FormControl, Text, Stack } from '@chakra-ui/react'; import { ariaDescribedByIds, enumOptionsIndexForValue, enumOptionsIsSelected, enumOptionsValueForIndex, labelValue, optionId, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import { getChakra } from '../utils'; export default function CheckboxesWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { id, disabled, options, value, readonly, onChange, onBlur, onFocus, required, label, hideLabel, uiSchema, rawErrors = [], } = props; const { enumOptions, enumDisabled, emptyValue } = options; const chakraProps = getChakra({ uiSchema }); const checkboxesValues = Array.isArray(value) ? value : [value]; const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement | any>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement | any>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const row = options ? options.inline : false; const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, true) as string[]; return ( <FormControl mb={1} {...chakraProps} isDisabled={disabled || readonly} isRequired={required} isReadOnly={readonly} isInvalid={rawErrors && rawErrors.length > 0} > {labelValue( <FormLabel htmlFor={id} id={`${id}-label`}> {label} </FormLabel>, hideLabel || !label )} <CheckboxGroup onChange={(option) => onChange(enumOptionsValueForIndex<S>(option, enumOptions, emptyValue))} defaultValue={selectedIndexes} aria-describedby={ariaDescribedByIds<T>(id)} > <Stack direction={row ? 'row' : 'column'}> {Array.isArray(enumOptions) && enumOptions.map((option, index) => { const checked = enumOptionsIsSelected<S>(option.value, checkboxesValues); const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1; return ( <Checkbox key={index} id={optionId(id, index)} name={id} value={String(index)} isChecked={checked} isDisabled={disabled || itemDisabled || readonly} onBlur={_onBlur} onFocus={_onFocus} > {option.label && <Text>{option.label}</Text>} </Checkbox> ); })} </Stack> </CheckboxGroup> </FormControl> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/CheckboxesWidget/index.ts�����������������������0000664�0000000�0000000�00000000122�14467713645�0027115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './CheckboxesWidget'; export * from './CheckboxesWidget'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/CssReset.tsx������������������������������������0000664�0000000�0000000�00000012540�14467713645�0024516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Global } from '@emotion/react'; /** * * The reason we need this is for ChakraProvider styling in Playground. * The User Developer would be responsible for styling with ChakraProvider in their app. * * Exact duplicate of `@chakra-ui/react`'s `CSSReset` component. Except for the following: * ```css input { border-width: revert; border-color: revert; border-style: revert; } .array-item > hr { margin-top: 16px; margin-bottom: 16px; } ``` It is located at the bottom of the styles string. */ export const CSSReset = () => ( <Global styles={` html { line-height: 1.5; -webkit-text-size-adjust: 100%; font-family: system-ui, sans-serif; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; -moz-osx-font-smoothing: grayscale; touch-action: manipulation; } body { position: relative; min-height: 100%; font-feature-settings: 'kern'; } *, *::before, *::after { border-width: 0; border-style: solid; box-sizing: border-box; } main { display: block; } hr { border-top-width: 1px; box-sizing: content-box; height: 0; overflow: visible; } pre, code, kbd, samp { font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 1em; } a { background-color: transparent; color: inherit; text-decoration: inherit; } abbr[title] { border-bottom: none; text-decoration: underline; -webkit-text-decoration: underline dotted; text-decoration: underline dotted; } b, strong { font-weight: bold; } small { font-size: 80%; } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } img { border-style: none; } button, input, optgroup, select, textarea { font-family: inherit; font-size: 100%; line-height: 1.15; margin: 0; } button, input { overflow: visible; } button, select { text-transform: none; } button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } fieldset { padding: 0.35em 0.75em 0.625em; } legend { box-sizing: border-box; color: inherit; display: table; max-width: 100%; padding: 0; white-space: normal; } progress { vertical-align: baseline; } textarea { overflow: auto; } [type="checkbox"], [type="radio"] { box-sizing: border-box; padding: 0; } [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { -webkit-appearance: none !important; } input[type="number"] { -moz-appearance: textfield; } [type="search"] { -webkit-appearance: textfield; outline-offset: -2px; } [type="search"]::-webkit-search-decoration { -webkit-appearance: none !important; } ::-webkit-file-upload-button { -webkit-appearance: button; font: inherit; } details { display: block; } summary { display: list-item; } template { display: none; } [hidden] { display: none !important; } body, blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre { margin: 0; } button { background: transparent; padding: 0; } fieldset { margin: 0; padding: 0; } ol, ul { margin: 0; padding: 0; } textarea { resize: vertical; } button, [role="button"] { cursor: pointer; } button::-moz-focus-inner { border: 0 !important; } table { border-collapse: collapse; } h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; } button, input, optgroup, select, textarea { padding: 0; line-height: inherit; color: inherit; } img, svg, video, canvas, audio, iframe, embed, object { display: block; } img, video { max-width: 100%; height: auto; } [data-js-focus-visible] :focus:not([data-focus-visible-added]) { outline: none; box-shadow: none; } select::-ms-expand { display: none; } input { border-width: revert; border-color: revert; border-style: revert; } .array-item > hr { margin-top: 16px; margin-bottom: 16px; } `} /> ); export default CSSReset; ����������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/DescriptionField/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025450�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/DescriptionField/DescriptionField.tsx�����������0000664�0000000�0000000�00000001035�14467713645�0031436�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { DescriptionFieldProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import { Text } from '@chakra-ui/react'; export default function DescriptionField< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ description, id }: DescriptionFieldProps<T, S, F>) { if (!description) { return null; } if (typeof description === 'string') { return ( <Text id={id} mt={2} mb={4}> {description} </Text> ); } return <>{description}</>; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/DescriptionField/index.ts�����������������������0000664�0000000�0000000�00000000122�14467713645�0027122�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './DescriptionField'; export * from './DescriptionField'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/ErrorList/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024146�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/ErrorList/ErrorList.tsx�������������������������0000664�0000000�0000000�00000001531�14467713645�0026633�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ErrorListProps, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; import { List, ListIcon, ListItem, Alert, AlertTitle } from '@chakra-ui/react'; import { WarningIcon } from '@chakra-ui/icons'; export default function ErrorList<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ errors, registry, }: ErrorListProps<T, S, F>) { const { translateString } = registry; return ( <Alert flexDirection='column' alignItems='flex-start' gap={3} status='error'> <AlertTitle>{translateString(TranslatableString.ErrorsLabel)}</AlertTitle> <List> {errors.map((error, i) => ( <ListItem key={i}> <ListIcon as={WarningIcon} color='red.500' /> {error.stack} </ListItem> ))} </List> </Alert> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/ErrorList/index.ts������������������������������0000664�0000000�0000000�00000000104�14467713645�0025620�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ErrorList'; export * from './ErrorList'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/FieldErrorTemplate/�����������������������������0000775�0000000�0000000�00000000000�14467713645�0025752�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/FieldErrorTemplate/FieldErrorTemplate.tsx�������0000664�0000000�0000000�00000001551�14467713645�0032245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { errorId, FieldErrorProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import { FormErrorMessage, List, ListItem } from '@chakra-ui/react'; /** The `FieldErrorTemplate` component renders the errors local to the particular field * * @param props - The `FieldErrorProps` for the errors being rendered */ export default function FieldErrorTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldErrorProps<T, S, F>) { const { errors = [], idSchema } = props; if (errors.length === 0) { return null; } const id = errorId<T>(idSchema); return ( <List> {errors.map((error, i: number) => { return ( <ListItem key={i}> <FormErrorMessage id={id}>{error}</FormErrorMessage> </ListItem> ); })} </List> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/FieldErrorTemplate/index.ts���������������������0000664�0000000�0000000�00000000126�14467713645�0027430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldErrorTemplate'; export * from './FieldErrorTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/FieldHelpTemplate/������������������������������0000775�0000000�0000000�00000000000�14467713645�0025551�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/FieldHelpTemplate/FieldHelpTemplate.tsx���������0000664�0000000�0000000�00000001156�14467713645�0031644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { helpId, FieldHelpProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import { FormHelperText } from '@chakra-ui/react'; /** The `FieldHelpTemplate` component renders any help desired for a field * * @param props - The `FieldHelpProps` to be rendered */ export default function FieldHelpTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldHelpProps<T, S, F>) { const { idSchema, help } = props; if (!help) { return null; } const id = helpId<T>(idSchema); return <FormHelperText id={id}>{help}</FormHelperText>; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/FieldHelpTemplate/index.ts����������������������0000664�0000000�0000000�00000000124�14467713645�0027225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldHelpTemplate'; export * from './FieldHelpTemplate'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/FieldTemplate/����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024740�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/FieldTemplate/FieldTemplate.tsx�����������������0000664�0000000�0000000�00000003110�14467713645�0030212�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FieldTemplateProps, FormContextType, getTemplate, getUiOptions, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; import { Text, FormControl } from '@chakra-ui/react'; export default function FieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldTemplateProps<T, S, F>) { const { id, children, classNames, style, disabled, displayLabel, hidden, label, onDropPropertyClick, onKeyChange, readonly, registry, required, rawErrors = [], errors, help, description, rawDescription, schema, uiSchema, } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const WrapIfAdditionalTemplate = getTemplate<'WrapIfAdditionalTemplate', T, S, F>( 'WrapIfAdditionalTemplate', registry, uiOptions ); if (hidden) { return <div style={{ display: 'none' }}>{children}</div>; } return ( <WrapIfAdditionalTemplate classNames={classNames} style={style} disabled={disabled} id={id} label={label} onDropPropertyClick={onDropPropertyClick} onKeyChange={onKeyChange} readonly={readonly} required={required} schema={schema} uiSchema={uiSchema} registry={registry} > <FormControl isRequired={required} isInvalid={rawErrors && rawErrors.length > 0}> {children} {displayLabel && rawDescription ? <Text mt={2}>{description}</Text> : null} {errors} {help} </FormControl> </WrapIfAdditionalTemplate> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/FieldTemplate/index.ts��������������������������0000664�0000000�0000000�00000000114�14467713645�0026413�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldTemplate'; export * from './FieldTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/Form/�������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023124�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/Form/Form.tsx�����������������������������������0000664�0000000�0000000�00000000712�14467713645�0024567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ComponentType } from 'react'; import { withTheme, FormProps } from '@rjsf/core'; import { generateTheme } from '../Theme'; import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export function generateForm< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): ComponentType<FormProps<T, S, F>> { return withTheme<T, S, F>(generateTheme<T, S, F>()); } export default generateForm(); ������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/Form/index.ts�����������������������������������0000664�0000000�0000000�00000000072�14467713645�0024602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Form'; export * from './Form'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/IconButton/�������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024305�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/IconButton/ChakraIconButton.tsx�����������������0000664�0000000�0000000�00000001266�14467713645�0030250�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { memo } from 'react'; import { IconButton } from '@chakra-ui/react'; type ChakraIconButtonProps = React.ComponentProps<typeof IconButton>; import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; function ChakraIconButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { icon, iconType, uiSchema, registry, ...otherProps } = props; return <IconButton aria-label={props.title!} {...otherProps} icon={icon as ChakraIconButtonProps['icon']} />; } ChakraIconButton.displayName = 'ChakraIconButton'; export default memo(ChakraIconButton) as typeof ChakraIconButton; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/IconButton/IconButton.tsx�����������������������0000664�0000000�0000000�00000003277�14467713645�0027142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; import { ArrowUpIcon, ArrowDownIcon, CopyIcon, DeleteIcon } from '@chakra-ui/icons'; import ChakraIconButton from './ChakraIconButton'; export function CopyButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <ChakraIconButton<T, S, F> title={translateString(TranslatableString.CopyButton)} {...props} icon={<CopyIcon />} /> ); } export function MoveDownButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <ChakraIconButton<T, S, F> title={translateString(TranslatableString.MoveDownButton)} {...props} icon={<ArrowDownIcon />} /> ); } export function MoveUpButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <ChakraIconButton<T, S, F> title={translateString(TranslatableString.MoveUpButton)} {...props} icon={<ArrowUpIcon />} /> ); } export function RemoveButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <ChakraIconButton<T, S, F> title={translateString(TranslatableString.RemoveButton)} {...props} icon={<DeleteIcon />} /> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/IconButton/index.ts�����������������������������0000664�0000000�0000000�00000000114�14467713645�0025760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ChakraIconButton'; export * from './IconButton'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/ObjectFieldTemplate/����������������������������0000775�0000000�0000000�00000000000�14467713645�0026067�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx�����0000664�0000000�0000000�00000004320�14467713645�0032474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Grid, GridItem } from '@chakra-ui/react'; import { canExpand, descriptionId, FormContextType, getTemplate, getUiOptions, ObjectFieldTemplateProps, RJSFSchema, StrictRJSFSchema, titleId, } from '@rjsf/utils'; export default function ObjectFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ObjectFieldTemplateProps<T, S, F>) { const { description, title, properties, required, disabled, readonly, uiSchema, idSchema, schema, formData, onAddClick, registry, } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const TitleFieldTemplate = getTemplate<'TitleFieldTemplate', T, S, F>('TitleFieldTemplate', registry, uiOptions); const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; return ( <> {title && ( <TitleFieldTemplate id={titleId<T>(idSchema)} title={title} required={required} schema={schema} uiSchema={uiSchema} registry={registry} /> )} {description && ( <DescriptionFieldTemplate id={descriptionId<T>(idSchema)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> )} <Grid gap={description ? 2 : 6} mb={4}> {properties.map((element, index) => element.hidden ? ( element.content ) : ( <GridItem key={`${idSchema.$id}-${element.name}-${index}`}>{element.content}</GridItem> ) )} {canExpand<T, S, F>(schema, uiSchema, formData) && ( <GridItem justifySelf='flex-end'> <AddButton className='object-property-expand' onClick={onAddClick(schema)} disabled={disabled || readonly} uiSchema={uiSchema} registry={registry} /> </GridItem> )} </Grid> </> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/ObjectFieldTemplate/index.ts��������������������0000664�0000000�0000000�00000000130�14467713645�0027540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ObjectFieldTemplate'; export * from './ObjectFieldTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/RadioWidget/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024423�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/RadioWidget/RadioWidget.tsx���������������������0000664�0000000�0000000�00000004620�14467713645�0027367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import { FormControl, FormLabel, Radio, RadioGroup, Stack } from '@chakra-ui/react'; import { ariaDescribedByIds, enumOptionsIndexForValue, enumOptionsValueForIndex, labelValue, optionId, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import { getChakra } from '../utils'; export default function RadioWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, options, value, required, disabled, readonly, label, hideLabel, onChange, onBlur, onFocus, uiSchema, }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, emptyValue } = options; const chakraProps = getChakra({ uiSchema }); const _onChange = (nextValue: any) => onChange(enumOptionsValueForIndex<S>(nextValue, enumOptions, emptyValue)); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const row = options ? options.inline : false; const selectedIndex = (enumOptionsIndexForValue<S>(value, enumOptions) as string) ?? null; return ( <FormControl mb={1} {...chakraProps} isDisabled={disabled || readonly} isRequired={required} isReadOnly={readonly}> {labelValue( <FormLabel htmlFor={id} id={`${id}-label`}> {label} </FormLabel>, hideLabel || !label )} <RadioGroup onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} value={selectedIndex} name={id} aria-describedby={ariaDescribedByIds<T>(id)} > <Stack direction={row ? 'row' : 'column'}> {Array.isArray(enumOptions) && enumOptions.map((option, index) => { const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1; return ( <Radio value={String(index)} key={index} id={optionId(id, index)} disabled={disabled || itemDisabled || readonly} > {option.label} </Radio> ); })} </Stack> </RadioGroup> </FormControl> ); } ����������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/RadioWidget/index.ts����������������������������0000664�0000000�0000000�00000000110�14467713645�0026072�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './RadioWidget'; export * from './RadioWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/RangeWidget/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024421�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/RangeWidget/RangeWidget.tsx���������������������0000664�0000000�0000000�00000003054�14467713645�0027363�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import { FormControl, FormLabel, Slider, SliderFilledTrack, SliderThumb, SliderTrack } from '@chakra-ui/react'; import { ariaDescribedByIds, FormContextType, labelValue, rangeSpec, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import { getChakra } from '../utils'; export default function RangeWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ value, readonly, disabled, onBlur, onFocus, options, schema, uiSchema, onChange, label, hideLabel, id, }: WidgetProps<T, S, F>) { const chakraProps = getChakra({ uiSchema }); const sliderWidgetProps = { value, label, id, ...rangeSpec<S>(schema) }; const _onChange = (value: undefined | number) => onChange(value === undefined ? options.emptyValue : value); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, value); return ( <FormControl mb={1} {...chakraProps}> {labelValue(<FormLabel htmlFor={id}>{label}</FormLabel>, hideLabel || !label)} <Slider {...sliderWidgetProps} id={id} name={id} isDisabled={disabled || readonly} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id)} > <SliderTrack> <SliderFilledTrack /> </SliderTrack> <SliderThumb /> </Slider> </FormControl> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/RangeWidget/index.ts����������������������������0000664�0000000�0000000�00000000110�14467713645�0026070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './RangeWidget'; export * from './RangeWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/SelectWidget/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024604�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/SelectWidget/SelectWidget.tsx�������������������0000664�0000000�0000000�00000006371�14467713645�0027736�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import { FormControl, FormLabel } from '@chakra-ui/react'; import { ariaDescribedByIds, EnumOptionsType, enumOptionsIndexForValue, enumOptionsValueForIndex, labelValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import { getChakra } from '../utils'; import { OptionsOrGroups, Select } from 'chakra-react-select'; export default function SelectWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { id, options, label, hideLabel, placeholder, multiple, required, disabled, readonly, value, autofocus, onChange, onBlur, onFocus, rawErrors = [], uiSchema, } = props; const { enumOptions, enumDisabled, emptyValue } = options; const chakraProps = getChakra({ uiSchema }); const _onMultiChange = (e: any) => { return onChange( enumOptionsValueForIndex<S>( e.map((v: { value: any }) => { return v.value; }), enumOptions, emptyValue ) ); }; const _onChange = (e: any) => { return onChange(enumOptionsValueForIndex<S>(e.value, enumOptions, emptyValue)); }; const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _valueLabelMap: any = {}; const displayEnumOptions: OptionsOrGroups<any, any> = Array.isArray(enumOptions) ? enumOptions.map((option: EnumOptionsType<S>, index: number) => { const { value, label } = option; _valueLabelMap[index] = label || String(value); return { label, value: String(index), isDisabled: Array.isArray(enumDisabled) && enumDisabled.indexOf(value) !== -1, }; }) : []; const isMultiple = typeof multiple !== 'undefined' && Boolean(enumOptions); const selectedIndex = enumOptionsIndexForValue<S>(value, enumOptions, isMultiple); const formValue: any = isMultiple ? ((selectedIndex as string[]) || []).map((i: string) => { return { label: _valueLabelMap[i], value: i, }; }) : { label: _valueLabelMap[selectedIndex as string] || '', selectedIndex, }; return ( <FormControl mb={1} {...chakraProps} isDisabled={disabled || readonly} isRequired={required} isReadOnly={readonly} isInvalid={rawErrors && rawErrors.length > 0} > {labelValue( <FormLabel htmlFor={id} id={`${id}-label`}> {label} </FormLabel>, hideLabel || !label )} <Select inputId={id} name={id} isMulti={isMultiple} options={displayEnumOptions} placeholder={placeholder} closeMenuOnSelect={!isMultiple} onBlur={_onBlur} onChange={isMultiple ? _onMultiChange : _onChange} onFocus={_onFocus} autoFocus={autofocus} value={formValue} aria-describedby={ariaDescribedByIds<T>(id)} /> </FormControl> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/SelectWidget/index.ts���������������������������0000664�0000000�0000000�00000000112�14467713645�0026255�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './SelectWidget'; export * from './SelectWidget'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/SubmitButton/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024660�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/SubmitButton/SubmitButton.tsx�������������������0000664�0000000�0000000�00000001172�14467713645�0030060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Box, Button } from '@chakra-ui/react'; import { FormContextType, getSubmitButtonOptions, RJSFSchema, StrictRJSFSchema, SubmitButtonProps } from '@rjsf/utils'; export default function SubmitButton< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ uiSchema }: SubmitButtonProps<T, S, F>) { const { submitText, norender, props: submitButtonProps } = getSubmitButtonOptions(uiSchema); if (norender) { return null; } return ( <Box marginTop={3}> <Button type='submit' variant='solid' {...submitButtonProps}> {submitText} </Button> </Box> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/SubmitButton/index.ts���������������������������0000664�0000000�0000000�00000000112�14467713645�0026331�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './SubmitButton'; export * from './SubmitButton'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/Templates/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024157�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/Templates/Templates.ts��������������������������0000664�0000000�0000000�00000003011�14467713645�0026460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import AddButton from '../AddButton'; import ArrayFieldItemTemplate from '../ArrayFieldItemTemplate'; import ArrayFieldTemplate from '../ArrayFieldTemplate'; import BaseInputTemplate from '../BaseInputTemplate/BaseInputTemplate'; import DescriptionField from '../DescriptionField'; import ErrorList from '../ErrorList'; import { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } from '../IconButton'; import FieldErrorTemplate from '../FieldErrorTemplate'; import FieldHelpTemplate from '../FieldHelpTemplate'; import FieldTemplate from '../FieldTemplate'; import ObjectFieldTemplate from '../ObjectFieldTemplate'; import SubmitButton from '../SubmitButton'; import TitleField from '../TitleField'; import WrapIfAdditionalTemplate from '../WrapIfAdditionalTemplate'; import { FormContextType, RJSFSchema, StrictRJSFSchema, TemplatesType } from '@rjsf/utils'; export function generateTemplates< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): Partial<TemplatesType<T, S, F>> { return { ArrayFieldItemTemplate, ArrayFieldTemplate, BaseInputTemplate, ButtonTemplates: { CopyButton, AddButton, MoveDownButton, MoveUpButton, RemoveButton, SubmitButton, }, DescriptionFieldTemplate: DescriptionField, ErrorListTemplate: ErrorList, FieldErrorTemplate, FieldHelpTemplate, FieldTemplate, ObjectFieldTemplate, TitleFieldTemplate: TitleField, WrapIfAdditionalTemplate, }; } export default generateTemplates(); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/Templates/index.ts������������������������������0000664�0000000�0000000�00000000104�14467713645�0025631�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Templates'; export * from './Templates'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/TextareaWidget/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025142�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/TextareaWidget/TextareaWidget.tsx���������������0000664�0000000�0000000�00000003122�14467713645�0030621�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import { FormControl, FormLabel, Textarea } from '@chakra-ui/react'; import { ariaDescribedByIds, labelValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import { getChakra } from '../utils'; export default function TextareaWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ id, placeholder, value, label, hideLabel, disabled, autofocus, readonly, onBlur, onFocus, onChange, options, uiSchema, required, rawErrors, }: WidgetProps<T, S, F>) { const chakraProps = getChakra({ uiSchema }); const _onChange = ({ target: { value } }: ChangeEvent<HTMLTextAreaElement>) => onChange(value === '' ? options.emptyValue : value); const _onBlur = ({ target: { value } }: FocusEvent<HTMLTextAreaElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLTextAreaElement>) => onFocus(id, value); return ( <FormControl mb={1} {...chakraProps} isDisabled={disabled || readonly} isRequired={required} isReadOnly={readonly} isInvalid={rawErrors && rawErrors.length > 0} > {labelValue(<FormLabel htmlFor={id}>{label}</FormLabel>, hideLabel || !label)} <Textarea id={id} name={id} value={value ?? ''} placeholder={placeholder} autoFocus={autofocus} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id)} /> </FormControl> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/TextareaWidget/index.ts�������������������������0000664�0000000�0000000�00000000116�14467713645�0026617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './TextareaWidget'; export * from './TextareaWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/Theme/������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023263�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/Theme/Theme.tsx���������������������������������0000664�0000000�0000000�00000000763�14467713645�0025073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ThemeProps } from '@rjsf/core'; import { generateTemplates } from '../Templates'; import { generateWidgets } from '../Widgets'; import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export function generateTheme< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): ThemeProps<T, S, F> { return { templates: generateTemplates<T, S, F>(), widgets: generateWidgets<T, S, F>(), }; } export default generateTheme(); �������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/Theme/index.ts����������������������������������0000664�0000000�0000000�00000000074�14467713645�0024743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Theme'; export * from './Theme'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/TitleField/�������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024246�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/TitleField/TitleField.tsx�����������������������0000664�0000000�0000000�00000000667�14467713645�0027044�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, TitleFieldProps } from '@rjsf/utils'; import { Box, Divider, Heading } from '@chakra-ui/react'; export default function TitleField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, title, }: TitleFieldProps<T, S, F>) { return ( <Box id={id} mt={1} mb={4}> <Heading as='h5'>{title}</Heading> <Divider /> </Box> ); } �������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/TitleField/index.ts�����������������������������0000664�0000000�0000000�00000000106�14467713645�0025722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './TitleField'; export * from './TitleField'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/UpDownWidget/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024601�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/UpDownWidget/UpDownWidget.tsx�������������������0000664�0000000�0000000�00000003251�14467713645�0027722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import { NumberInput, NumberDecrementStepper, NumberIncrementStepper, NumberInputField, NumberInputStepper, FormControl, FormLabel, } from '@chakra-ui/react'; import { ariaDescribedByIds, labelValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import { getChakra } from '../utils'; export default function UpDownWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { id, uiSchema, readonly, disabled, label, hideLabel, value, onChange, onBlur, onFocus, rawErrors, required } = props; const chakraProps = getChakra({ uiSchema }); const _onChange = (value: string | number) => onChange(value); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement | any>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement | any>) => onFocus(id, value); return ( <FormControl mb={1} {...chakraProps} isDisabled={disabled || readonly} isRequired={required} isReadOnly={readonly} isInvalid={rawErrors && rawErrors.length > 0} > {labelValue(<FormLabel htmlFor={id}>{label}</FormLabel>, hideLabel || !label)} <NumberInput value={value ?? ''} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id)} > <NumberInputField id={id} name={id} /> <NumberInputStepper> <NumberIncrementStepper /> <NumberDecrementStepper /> </NumberInputStepper> </NumberInput> </FormControl> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/UpDownWidget/index.ts���������������������������0000664�0000000�0000000�00000000112�14467713645�0026252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './UpDownWidget'; export * from './UpDownWidget'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/Widgets/����������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023627�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/Widgets/Widgets.ts������������������������������0000664�0000000�0000000�00000002010�14467713645�0025576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import AltDateTimeWidget from '../AltDateTimeWidget/AltDateTimeWidget'; import AltDateWidget from '../AltDateWidget/AltDateWidget'; import CheckboxWidget from '../CheckboxWidget/CheckboxWidget'; import CheckboxesWidget from '../CheckboxesWidget/CheckboxesWidget'; import RadioWidget from '../RadioWidget/RadioWidget'; import RangeWidget from '../RangeWidget/RangeWidget'; import SelectWidget from '../SelectWidget/SelectWidget'; import TextareaWidget from '../TextareaWidget/TextareaWidget'; import UpDownWidget from '../UpDownWidget/UpDownWidget'; import { FormContextType, RegistryWidgetsType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export function generateWidgets< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): RegistryWidgetsType<T, S, F> { return { AltDateTimeWidget, AltDateWidget, CheckboxWidget, CheckboxesWidget, RadioWidget, RangeWidget, SelectWidget, TextareaWidget, UpDownWidget, }; } export default generateWidgets(); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/Widgets/index.ts��������������������������������0000664�0000000�0000000�00000000100�14467713645�0025275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Widgets'; export * from './Widgets'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/WrapIfAdditionalTemplate/�����������������������0000775�0000000�0000000�00000000000�14467713645�0027076�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������WrapIfAdditionalTemplate.tsx������������������������������������������������������������������������0000664�0000000�0000000�00000004011�14467713645�0034430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/chakra-ui/src/WrapIfAdditionalTemplate�������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import { ADDITIONAL_PROPERTY_FLAG, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString, WrapIfAdditionalTemplateProps, } from '@rjsf/utils'; import { FormControl, FormLabel, Grid, GridItem, Input } from '@chakra-ui/react'; export default function WrapIfAdditionalTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WrapIfAdditionalTemplateProps<T, S, F>) { const { children, classNames, style, disabled, id, label, onDropPropertyClick, onKeyChange, readonly, registry, required, schema, uiSchema, } = props; const { templates, translateString } = registry; // Button templates are not overridden in the uiSchema const { RemoveButton } = templates.ButtonTemplates; const keyLabel = translateString(TranslatableString.KeyLabel, [label]); const additional = ADDITIONAL_PROPERTY_FLAG in schema; if (!additional) { return ( <div className={classNames} style={style}> {children} </div> ); } const handleBlur = ({ target }: FocusEvent<HTMLInputElement>) => onKeyChange(target.value); return ( <Grid key={`${id}-key`} className={classNames} style={style} alignItems='center' gap={2}> <GridItem> <FormControl isRequired={required}> <FormLabel htmlFor={`${id}-key`} id={`${id}-key-label`}> {keyLabel} </FormLabel> <Input defaultValue={label} disabled={disabled || readonly} id={`${id}-key`} name={`${id}-key`} onBlur={!readonly ? handleBlur : undefined} type='text' mb={1} /> </FormControl> </GridItem> <GridItem>{children}</GridItem> <GridItem> <RemoveButton disabled={disabled || readonly} onClick={onDropPropertyClick(label)} uiSchema={uiSchema} registry={registry} /> </GridItem> </Grid> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/WrapIfAdditionalTemplate/index.ts���������������0000664�0000000�0000000�00000000142�14467713645�0030552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './WrapIfAdditionalTemplate'; export * from './WrapIfAdditionalTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/index.ts����������������������������������������0000664�0000000�0000000�00000000656�14467713645�0023707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Form from './Form'; export { default as Form, generateForm } from './Form'; export { default as Templates, generateTemplates } from './Templates'; export { default as Theme, generateTheme } from './Theme'; export { default as Widgets, generateWidgets } from './Widgets'; export { __createChakraFrameProvider } from './ChakraFrameProvider'; export type { ChakraUiSchema as UiSchema } from './utils'; export default Form; ����������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/src/utils.ts����������������������������������������0000664�0000000�0000000�00000001741�14467713645�0023734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChakraProps, shouldForwardProp } from '@chakra-ui/react'; import { UiSchema } from '@rjsf/utils'; export interface ChakraUiSchema extends Omit<UiSchema, 'ui:options'> { 'ui:options'?: ChakraUiOptions; } type ChakraUiOptions = UiSchema['ui:options'] & { chakra?: ChakraProps }; interface GetChakraProps { uiSchema?: ChakraUiSchema; } export function getChakra({ uiSchema = {} }: GetChakraProps): ChakraProps { const chakraProps = (uiSchema['ui:options'] && uiSchema['ui:options'].chakra) || {}; Object.keys(chakraProps).forEach((key) => { /** * Leveraging `shouldForwardProp` to remove props * * This is a utility function that's used in `@chakra-ui/react`'s factory function. * Normally, it prevents ChakraProps from being passed to the DOM. * In this case we just want to delete the unknown props. So we flip the boolean. */ if (shouldForwardProp(key)) { delete (chakraProps as any)[key]; } }); return chakraProps; } �������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/test/�����������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022411�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/test/Array.test.tsx���������������������������������0000664�0000000�0000000�00000000150�14467713645�0025201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import arrayTests from '@rjsf/core/testSnap/arrayTests'; import Form from '../src'; arrayTests(Form); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/test/Form.test.tsx����������������������������������0000664�0000000�0000000�00000000145�14467713645�0025032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import formTests from '@rjsf/core/testSnap/formTests'; import Form from '../src'; formTests(Form); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/test/Object.test.tsx��������������������������������0000664�0000000�0000000�00000000153�14467713645�0025334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import objectTests from '@rjsf/core/testSnap/objectTests'; import Form from '../src'; objectTests(Form); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/test/__snapshots__/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025227�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/test/__snapshots__/Array.test.tsx.snap��������������0000664�0000000�0000000�00000545470�14467713645�0031002�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`array fields array 1`] = ` .emotion-2 { display: grid; } .emotion-4 { justify-self: flex-end; } .emotion-5 { margin-top: 2px; } .emotion-6 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-8 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-9 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" > <div className="emotion-0" /> <div className="emotion-4" > <div className="emotion-5" > <button className="chakra-button array-item-add emotion-6" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-7" > <svg aria-hidden={true} className="chakra-icon emotion-8" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> </div> </div> <div className="emotion-9" > <button className="chakra-button emotion-6" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields array icons 1`] = ` .emotion-2 { display: grid; } .emotion-4 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: flex-end; -webkit-box-align: flex-end; -ms-flex-align: flex-end; align-items: flex-end; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; padding-top: 1px; padding-bottom: 1px; } .emotion-4>*:not(style)~*:not(style) { margin-top: 0px; -webkit-margin-end: 0px; margin-inline-end: 0px; margin-bottom: 0px; -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-5 { width: 100%; } .emotion-7 { margin-bottom: 1px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; margin-bottom: 1px; } .emotion-10>*:first-of-type:not(:last-of-type) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .emotion-10>*:not(:first-of-type):not(:last-of-type) { border-radius: 0px; } .emotion-10>*:not(:first-of-type):last-of-type { border-top-left-radius: 0; border-bottom-left-radius: 0; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-11:focus, .emotion-11[data-focus] { z-index: 1; } .emotion-12 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-34 { justify-self: flex-end; } .emotion-35 { margin-top: 2px; } .emotion-36 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-37 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-39 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" > <div className="emotion-0" > <div className="chakra-stack emotion-4" > <div className="emotion-5" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> </div> </div> <div className="emotion-0" > <div className="chakra-button__group emotion-10" role="group" > <button aria-label="Move up" className="chakra-button emotion-11" disabled={true} onClick={[Function]} title="Move up" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" fill="currentColor" /> </svg> </button> <button aria-label="Move down" className="chakra-button emotion-11" disabled={false} onClick={[Function]} title="Move down" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" fill="currentColor" /> </svg> </button> <button aria-label="Copy" className="chakra-button emotion-11" disabled={false} onClick={[Function]} title="Copy" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" fill="currentColor" /> </svg> </button> <button aria-label="Remove" className="chakra-button emotion-11" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="chakra-stack emotion-4" > <div className="emotion-5" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> </div> </div> <div className="emotion-0" > <div className="chakra-button__group emotion-10" role="group" > <button aria-label="Move up" className="chakra-button emotion-11" disabled={false} onClick={[Function]} title="Move up" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" fill="currentColor" /> </svg> </button> <button aria-label="Move down" className="chakra-button emotion-11" disabled={true} onClick={[Function]} title="Move down" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" fill="currentColor" /> </svg> </button> <button aria-label="Copy" className="chakra-button emotion-11" disabled={false} onClick={[Function]} title="Copy" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" fill="currentColor" /> </svg> </button> <button aria-label="Remove" className="chakra-button emotion-11" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> </div> <div className="emotion-34" > <div className="emotion-35" > <button className="chakra-button array-item-add emotion-36" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-37" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> </div> </div> <div className="emotion-39" > <button className="chakra-button emotion-36" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields checkboxes 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { position: relative; pointer-events: auto; } .emotion-3 { z-index: 9999; border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; position: absolute; overflow: hidden; padding: 0; white-space: nowrap; } .emotion-5 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 0px; overflow: hidden; height: auto; min-height: 10px; } .emotion-6 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0.125rem 1rem; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-overflow-scrolling: touch; position: relative; overflow: hidden; } .emotion-7 { color: gray.400; -webkit-margin-start: 0.125rem; margin-inline-start: 0.125rem; -webkit-margin-end: 0.125rem; margin-inline-end: 0.125rem; position: absolute; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-8 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; display: inline-grid; grid-area: 1/1/2/3; grid-template-columns: 0 min-content; color: inherit; } .emotion-8::after { content: attr(data-value) " "; visibility: hidden; white-space: pre; padding: 0px; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-9 { color: inherit; background: 0; opacity: 1; width: 100%; padding-top: 0.125rem; padding-bottom: 0.125rem; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-10 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-align-self: stretch; -ms-flex-item-align: stretch; align-self: stretch; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-11 { border: 0; border-left-width: 1px; height: 100%; opacity: 1; } .emotion-12 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; height: 100%; border-radius: 0px; border-width: 0; cursor: pointer; font-size: 20px; } .emotion-13 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-14 { margin-top: 3px; } .emotion-15 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <div className=" emotion-2" onKeyDown={[Function]} > <span className="emotion-3" id="react-select-2-live-region" /> <span aria-atomic="false" aria-live="polite" aria-relevant="additions text" className="emotion-3" /> <div className=" emotion-5" onMouseDown={[Function]} onTouchEnd={[Function]} > <div className=" emotion-6" > <div className=" emotion-7" id="react-select-2-placeholder" > Select... </div> <div className=" emotion-8" data-value="" > <input aria-autocomplete="list" aria-describedby="react-select-2-placeholder" aria-expanded={false} aria-haspopup={true} autoCapitalize="none" autoComplete="off" autoCorrect="off" className=" emotion-9" disabled={false} id="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} role="combobox" spellCheck="false" tabIndex={0} type="text" value="" /> </div> </div> <div className=" emotion-10" > <hr aria-orientation="vertical" className="chakra-divider emotion-11" /> <div aria-hidden="true" className=" emotion-12" onMouseDown={[Function]} onTouchEnd={[Function]} > <svg className="chakra-icon emotion-13" focusable={false} viewBox="0 0 24 24" > <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" fill="currentColor" /> </svg> </div> </div> </div> <div> <input name="root" type="hidden" value="" /> </div> </div> </div> </div> </div> <div className="emotion-14" > <button className="chakra-button emotion-15" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields empty errors array 1`] = ` .emotion-1 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-4 { margin-bottom: 1px; } .emotion-5 { display: block; text-align: start; } .emotion-7 { margin-top: 3px; } .emotion-8 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" > <div className="emotion-0" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-4" role="group" > <label className="chakra-form__label emotion-5" htmlFor="root_name" id="root_name-label" > name </label> <input aria-describedby="root_name__error root_name__description root_name__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> <div className="emotion-7" > <button className="chakra-button emotion-8" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields fixed array 1`] = ` .emotion-2 { display: grid; } .emotion-4 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: flex-end; -webkit-box-align: flex-end; -ms-flex-align: flex-end; align-items: flex-end; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; padding-top: 1px; padding-bottom: 1px; } .emotion-4>*:not(style)~*:not(style) { margin-top: 0px; -webkit-margin-end: 0px; margin-inline-end: 0px; margin-bottom: 0px; -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-5 { width: 100%; } .emotion-7 { margin-bottom: 1px; } .emotion-14 { margin-top: 3px; } .emotion-15 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" > <div className="emotion-0" > <div className="chakra-stack emotion-4" > <div className="emotion-5" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> </div> </div> <div className="chakra-stack emotion-4" > <div className="emotion-5" > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="emotion-14" > <button className="chakra-button emotion-15" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields has errors 1`] = ` .emotion-0 { width: 100%; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: flex-start; -webkit-box-align: flex-start; -ms-flex-align: flex-start; align-items: flex-start; position: relative; overflow: hidden; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; gap: 3px; } .emotion-2 { list-style-type: none; } .emotion-4 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: red.500; } .emotion-6 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-9 { margin-bottom: 1px; } .emotion-10 { display: block; text-align: start; } .emotion-14 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-15 { margin-top: 3px; } .emotion-16 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="chakra-alert emotion-0" role="alert" > <div className="chakra-alert__title emotion-1" > Errors </div> <ul className="emotion-2" role="list" > <li className="emotion-1" > <svg className="chakra-icon chakra-icon emotion-4" focusable={false} role="presentation" viewBox="0 0 24 24" > <path d="M11.983,0a12.206,12.206,0,0,0-8.51,3.653A11.8,11.8,0,0,0,0,12.207,11.779,11.779,0,0,0,11.8,24h.214A12.111,12.111,0,0,0,24,11.791h0A11.766,11.766,0,0,0,11.983,0ZM10.5,16.542a1.476,1.476,0,0,1,1.449-1.53h.027a1.527,1.527,0,0,1,1.523,1.47,1.475,1.475,0,0,1-1.449,1.53h-.027A1.529,1.529,0,0,1,10.5,16.542ZM11,12.5v-6a1,1,0,0,1,2,0v6a1,1,0,1,1-2,0Z" fill="currentColor" /> </svg> .name Bad input </li> </ul> </div> <div className="form-group field field-object" > <div className="chakra-form-control emotion-1" role="group" > <div className="emotion-6" > <div className="emotion-1" > <div className="form-group field field-string field-error has-error has-danger" > <div className="chakra-form-control emotion-1" role="group" > <div className="chakra-form-control emotion-9" role="group" > <label className="chakra-form__label emotion-10" data-invalid="" htmlFor="root_name" id="root_name-label" > name </label> <input aria-describedby="root_name__error root_name__description root_name__help" aria-invalid={true} autoFocus={false} className="chakra-input emotion-1" disabled={false} id="root_name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> <ul className="emotion-2" role="list" > <li className="emotion-1" > <div aria-live="polite" className="chakra-form__error-message emotion-14" id="root_name__error" > Bad input </div> </li> </ul> </div> </div> </div> </div> </div> </div> <div className="emotion-15" > <button className="chakra-button emotion-16" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields no errors 1`] = ` .emotion-1 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-4 { margin-bottom: 1px; } .emotion-5 { display: block; text-align: start; } .emotion-7 { margin-top: 3px; } .emotion-8 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" > <div className="emotion-0" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-4" role="group" > <label className="chakra-form__label emotion-5" htmlFor="root_name" id="root_name-label" > name </label> <input aria-describedby="root_name__error root_name__description root_name__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> <div className="emotion-7" > <button className="chakra-button emotion-8" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description array 1`] = ` .emotion-2 { margin-top: 1px; margin-bottom: 4px; } .emotion-4 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-5 { margin-top: 2px; margin-bottom: 4px; } .emotion-6 { display: grid; } .emotion-8 { justify-self: flex-end; } .emotion-9 { margin-top: 2px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-12 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-13 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" id="root__title" > <h5 className="chakra-heading emotion-0" > Test field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-4" /> </div> <p className="chakra-text emotion-5" id="root__description" > a test description </p> <div className="emotion-6" > <div className="emotion-0" /> <div className="emotion-8" > <div className="emotion-9" > <button className="chakra-button array-item-add emotion-10" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-11" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> </div> </div> <div className="emotion-13" > <button className="chakra-button emotion-10" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description array icons 1`] = ` .emotion-2 { margin-top: 1px; margin-bottom: 4px; } .emotion-4 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-5 { margin-top: 2px; margin-bottom: 4px; } .emotion-6 { display: grid; } .emotion-8 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: flex-end; -webkit-box-align: flex-end; -ms-flex-align: flex-end; align-items: flex-end; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; padding-top: 1px; padding-bottom: 1px; } .emotion-8>*:not(style)~*:not(style) { margin-top: 0px; -webkit-margin-end: 0px; margin-inline-end: 0px; margin-bottom: 0px; -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-9 { width: 100%; } .emotion-11 { margin-bottom: 1px; } .emotion-12 { display: block; text-align: start; } .emotion-15 { margin-top: 2px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; margin-bottom: 1px; } .emotion-18>*:first-of-type:not(:last-of-type) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .emotion-18>*:not(:first-of-type):not(:last-of-type) { border-radius: 0px; } .emotion-18>*:not(:first-of-type):last-of-type { border-top-left-radius: 0; border-bottom-left-radius: 0; } .emotion-19 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-19:focus, .emotion-19[data-focus] { z-index: 1; } .emotion-20 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-46 { justify-self: flex-end; } .emotion-48 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-49 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-51 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" id="root__title" > <h5 className="chakra-heading emotion-0" > Test field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-4" /> </div> <p className="chakra-text emotion-5" id="root__description" > a test description </p> <div className="emotion-6" > <div className="emotion-0" > <div className="chakra-stack emotion-8" > <div className="emotion-9" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-12" htmlFor="root_0" id="root_0-label" > Test item <span aria-hidden={true} className="chakra-form__required-indicator emotion-0" role="presentation" > * </span> </label> <input aria-describedby="root_0__error root_0__description root_0__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-5" id="root_0__description" > a test item description </p> </p> </div> </div> </div> <div className="emotion-0" > <div className="chakra-button__group emotion-18" role="group" > <button aria-label="Move up" className="chakra-button emotion-19" disabled={true} onClick={[Function]} title="Move up" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" fill="currentColor" /> </svg> </button> <button aria-label="Move down" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Move down" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" fill="currentColor" /> </svg> </button> <button aria-label="Copy" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Copy" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" fill="currentColor" /> </svg> </button> <button aria-label="Remove" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="chakra-stack emotion-8" > <div className="emotion-9" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-12" htmlFor="root_1" id="root_1-label" > Test item <span aria-hidden={true} className="chakra-form__required-indicator emotion-0" role="presentation" > * </span> </label> <input aria-describedby="root_1__error root_1__description root_1__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-5" id="root_1__description" > a test item description </p> </p> </div> </div> </div> <div className="emotion-0" > <div className="chakra-button__group emotion-18" role="group" > <button aria-label="Move up" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Move up" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" fill="currentColor" /> </svg> </button> <button aria-label="Move down" className="chakra-button emotion-19" disabled={true} onClick={[Function]} title="Move down" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" fill="currentColor" /> </svg> </button> <button aria-label="Copy" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Copy" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" fill="currentColor" /> </svg> </button> <button aria-label="Remove" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> </div> <div className="emotion-46" > <div className="emotion-15" > <button className="chakra-button array-item-add emotion-48" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-49" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> </div> </div> <div className="emotion-51" > <button className="chakra-button emotion-48" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description checkboxes 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { display: block; text-align: start; } .emotion-3 { position: relative; pointer-events: auto; } .emotion-4 { z-index: 9999; border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; position: absolute; overflow: hidden; padding: 0; white-space: nowrap; } .emotion-6 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 0px; overflow: hidden; height: auto; min-height: 10px; } .emotion-7 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0.125rem 1rem; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-overflow-scrolling: touch; position: relative; overflow: hidden; } .emotion-8 { color: gray.400; -webkit-margin-start: 0.125rem; margin-inline-start: 0.125rem; -webkit-margin-end: 0.125rem; margin-inline-end: 0.125rem; position: absolute; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-9 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; display: inline-grid; grid-area: 1/1/2/3; grid-template-columns: 0 min-content; color: inherit; } .emotion-9::after { content: attr(data-value) " "; visibility: hidden; white-space: pre; padding: 0px; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-10 { color: inherit; background: 0; opacity: 1; width: 100%; padding-top: 0.125rem; padding-bottom: 0.125rem; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-11 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-align-self: stretch; -ms-flex-item-align: stretch; align-self: stretch; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-12 { border: 0; border-left-width: 1px; height: 100%; opacity: 1; } .emotion-13 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; height: 100%; border-radius: 0px; border-width: 0; cursor: pointer; font-size: 20px; } .emotion-14 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-15 { margin-top: 2px; } .emotion-16 { margin-top: 2px; margin-bottom: 4px; } .emotion-17 { margin-top: 3px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <label className="chakra-form__label emotion-2" htmlFor="root" id="root-label" > Test field </label> <div className=" emotion-3" onKeyDown={[Function]} > <span className="emotion-4" id="react-select-3-live-region" /> <span aria-atomic="false" aria-live="polite" aria-relevant="additions text" className="emotion-4" /> <div className=" emotion-6" onMouseDown={[Function]} onTouchEnd={[Function]} > <div className=" emotion-7" > <div className=" emotion-8" id="react-select-3-placeholder" > Select... </div> <div className=" emotion-9" data-value="" > <input aria-autocomplete="list" aria-describedby="react-select-3-placeholder" aria-expanded={false} aria-haspopup={true} autoCapitalize="none" autoComplete="off" autoCorrect="off" className=" emotion-10" disabled={false} id="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} role="combobox" spellCheck="false" tabIndex={0} type="text" value="" /> </div> </div> <div className=" emotion-11" > <hr aria-orientation="vertical" className="chakra-divider emotion-12" /> <div aria-hidden="true" className=" emotion-13" onMouseDown={[Function]} onTouchEnd={[Function]} > <svg className="chakra-icon emotion-14" focusable={false} viewBox="0 0 24 24" > <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" fill="currentColor" /> </svg> </div> </div> </div> <div> <input name="root" type="hidden" value="" /> </div> </div> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-16" id="root__description" > a test description </p> </p> </div> </div> <div className="emotion-17" > <button className="chakra-button emotion-18" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description fixed array 1`] = ` .emotion-2 { margin-top: 1px; margin-bottom: 4px; } .emotion-4 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-5 { margin-top: 2px; margin-bottom: 4px; } .emotion-6 { display: grid; } .emotion-8 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: flex-end; -webkit-box-align: flex-end; -ms-flex-align: flex-end; align-items: flex-end; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; padding-top: 1px; padding-bottom: 1px; } .emotion-8>*:not(style)~*:not(style) { margin-top: 0px; -webkit-margin-end: 0px; margin-inline-end: 0px; margin-bottom: 0px; -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-9 { width: 100%; } .emotion-11 { margin-bottom: 1px; } .emotion-12 { display: block; text-align: start; } .emotion-15 { margin-top: 2px; } .emotion-26 { margin-top: 3px; } .emotion-27 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" id="root__title" > <h5 className="chakra-heading emotion-0" > Test field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-4" /> </div> <p className="chakra-text emotion-5" id="root__description" > a test description </p> <div className="emotion-6" > <div className="emotion-0" > <div className="chakra-stack emotion-8" > <div className="emotion-9" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-12" htmlFor="root_0" id="root_0-label" > Test item <span aria-hidden={true} className="chakra-form__required-indicator emotion-0" role="presentation" > * </span> </label> <input aria-describedby="root_0__error root_0__description root_0__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-5" id="root_0__description" > a test item description </p> </p> </div> </div> </div> </div> <div className="chakra-stack emotion-8" > <div className="emotion-9" > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-12" htmlFor="root_1" id="root_1-label" > Test item <span aria-hidden={true} className="chakra-form__required-indicator emotion-0" role="presentation" > * </span> </label> <input aria-describedby="root_1__error root_1__description root_1__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-5" id="root_1__description" > a test item description </p> </p> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="emotion-26" > <button className="chakra-button emotion-27" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both array 1`] = ` .emotion-2 { margin-top: 1px; margin-bottom: 4px; } .emotion-4 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-5 { margin-top: 2px; margin-bottom: 4px; } .emotion-6 { display: grid; } .emotion-8 { justify-self: flex-end; } .emotion-9 { margin-top: 2px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-12 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-13 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" id="root__title" > <h5 className="chakra-heading emotion-0" > My Field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-4" /> </div> <p className="chakra-text emotion-5" id="root__description" > a fancier description </p> <div className="emotion-6" > <div className="emotion-0" /> <div className="emotion-8" > <div className="emotion-9" > <button className="chakra-button array-item-add emotion-10" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-11" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> </div> </div> <div className="emotion-13" > <button className="chakra-button emotion-10" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both array icons 1`] = ` .emotion-2 { margin-top: 1px; margin-bottom: 4px; } .emotion-4 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-5 { margin-top: 2px; margin-bottom: 4px; } .emotion-6 { display: grid; } .emotion-8 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: flex-end; -webkit-box-align: flex-end; -ms-flex-align: flex-end; align-items: flex-end; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; padding-top: 1px; padding-bottom: 1px; } .emotion-8>*:not(style)~*:not(style) { margin-top: 0px; -webkit-margin-end: 0px; margin-inline-end: 0px; margin-bottom: 0px; -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-9 { width: 100%; } .emotion-11 { margin-bottom: 1px; } .emotion-12 { display: block; text-align: start; } .emotion-15 { margin-top: 2px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; margin-bottom: 1px; } .emotion-18>*:first-of-type:not(:last-of-type) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .emotion-18>*:not(:first-of-type):not(:last-of-type) { border-radius: 0px; } .emotion-18>*:not(:first-of-type):last-of-type { border-top-left-radius: 0; border-bottom-left-radius: 0; } .emotion-19 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-19:focus, .emotion-19[data-focus] { z-index: 1; } .emotion-20 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-46 { justify-self: flex-end; } .emotion-48 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-49 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-51 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" id="root__title" > <h5 className="chakra-heading emotion-0" > My Field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-4" /> </div> <p className="chakra-text emotion-5" id="root__description" > a fancier description </p> <div className="emotion-6" > <div className="emotion-0" > <div className="chakra-stack emotion-8" > <div className="emotion-9" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-12" htmlFor="root_0" id="root_0-label" > My Item <span aria-hidden={true} className="chakra-form__required-indicator emotion-0" role="presentation" > * </span> </label> <input aria-describedby="root_0__error root_0__description root_0__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-5" id="root_0__description" > a fancier item description </p> </p> </div> </div> </div> <div className="emotion-0" > <div className="chakra-button__group emotion-18" role="group" > <button aria-label="Move up" className="chakra-button emotion-19" disabled={true} onClick={[Function]} title="Move up" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" fill="currentColor" /> </svg> </button> <button aria-label="Move down" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Move down" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" fill="currentColor" /> </svg> </button> <button aria-label="Copy" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Copy" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" fill="currentColor" /> </svg> </button> <button aria-label="Remove" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="chakra-stack emotion-8" > <div className="emotion-9" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-12" htmlFor="root_1" id="root_1-label" > My Item <span aria-hidden={true} className="chakra-form__required-indicator emotion-0" role="presentation" > * </span> </label> <input aria-describedby="root_1__error root_1__description root_1__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-5" id="root_1__description" > a fancier item description </p> </p> </div> </div> </div> <div className="emotion-0" > <div className="chakra-button__group emotion-18" role="group" > <button aria-label="Move up" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Move up" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" fill="currentColor" /> </svg> </button> <button aria-label="Move down" className="chakra-button emotion-19" disabled={true} onClick={[Function]} title="Move down" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" fill="currentColor" /> </svg> </button> <button aria-label="Copy" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Copy" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" fill="currentColor" /> </svg> </button> <button aria-label="Remove" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> </div> <div className="emotion-46" > <div className="emotion-15" > <button className="chakra-button array-item-add emotion-48" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-49" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> </div> </div> <div className="emotion-51" > <button className="chakra-button emotion-48" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both checkboxes 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { display: block; text-align: start; } .emotion-3 { position: relative; pointer-events: auto; } .emotion-4 { z-index: 9999; border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; position: absolute; overflow: hidden; padding: 0; white-space: nowrap; } .emotion-6 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 0px; overflow: hidden; height: auto; min-height: 10px; } .emotion-7 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0.125rem 1rem; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-overflow-scrolling: touch; position: relative; overflow: hidden; } .emotion-8 { color: gray.400; -webkit-margin-start: 0.125rem; margin-inline-start: 0.125rem; -webkit-margin-end: 0.125rem; margin-inline-end: 0.125rem; position: absolute; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-9 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; display: inline-grid; grid-area: 1/1/2/3; grid-template-columns: 0 min-content; color: inherit; } .emotion-9::after { content: attr(data-value) " "; visibility: hidden; white-space: pre; padding: 0px; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-10 { color: inherit; background: 0; opacity: 1; width: 100%; padding-top: 0.125rem; padding-bottom: 0.125rem; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-11 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-align-self: stretch; -ms-flex-item-align: stretch; align-self: stretch; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-12 { border: 0; border-left-width: 1px; height: 100%; opacity: 1; } .emotion-13 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; height: 100%; border-radius: 0px; border-width: 0; cursor: pointer; font-size: 20px; } .emotion-14 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-15 { margin-top: 2px; } .emotion-16 { margin-top: 2px; margin-bottom: 4px; } .emotion-17 { margin-top: 3px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <label className="chakra-form__label emotion-2" htmlFor="root" id="root-label" > My Field </label> <div className=" emotion-3" onKeyDown={[Function]} > <span className="emotion-4" id="react-select-5-live-region" /> <span aria-atomic="false" aria-live="polite" aria-relevant="additions text" className="emotion-4" /> <div className=" emotion-6" onMouseDown={[Function]} onTouchEnd={[Function]} > <div className=" emotion-7" > <div className=" emotion-8" id="react-select-5-placeholder" > Select... </div> <div className=" emotion-9" data-value="" > <input aria-autocomplete="list" aria-describedby="react-select-5-placeholder" aria-expanded={false} aria-haspopup={true} autoCapitalize="none" autoComplete="off" autoCorrect="off" className=" emotion-10" disabled={false} id="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} role="combobox" spellCheck="false" tabIndex={0} type="text" value="" /> </div> </div> <div className=" emotion-11" > <hr aria-orientation="vertical" className="chakra-divider emotion-12" /> <div aria-hidden="true" className=" emotion-13" onMouseDown={[Function]} onTouchEnd={[Function]} > <svg className="chakra-icon emotion-14" focusable={false} viewBox="0 0 24 24" > <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" fill="currentColor" /> </svg> </div> </div> </div> <div> <input name="root" type="hidden" value="" /> </div> </div> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-16" id="root__description" > a fancier description </p> </p> </div> </div> <div className="emotion-17" > <button className="chakra-button emotion-18" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both fixed array 1`] = ` .emotion-2 { margin-top: 1px; margin-bottom: 4px; } .emotion-4 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-5 { margin-top: 2px; margin-bottom: 4px; } .emotion-6 { display: grid; } .emotion-8 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: flex-end; -webkit-box-align: flex-end; -ms-flex-align: flex-end; align-items: flex-end; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; padding-top: 1px; padding-bottom: 1px; } .emotion-8>*:not(style)~*:not(style) { margin-top: 0px; -webkit-margin-end: 0px; margin-inline-end: 0px; margin-bottom: 0px; -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-9 { width: 100%; } .emotion-11 { margin-bottom: 1px; } .emotion-12 { display: block; text-align: start; } .emotion-15 { margin-top: 2px; } .emotion-26 { margin-top: 3px; } .emotion-27 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" id="root__title" > <h5 className="chakra-heading emotion-0" > My Field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-4" /> </div> <p className="chakra-text emotion-5" id="root__description" > a fancier description </p> <div className="emotion-6" > <div className="emotion-0" > <div className="chakra-stack emotion-8" > <div className="emotion-9" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-12" htmlFor="root_0" id="root_0-label" > My Item <span aria-hidden={true} className="chakra-form__required-indicator emotion-0" role="presentation" > * </span> </label> <input aria-describedby="root_0__error root_0__description root_0__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-5" id="root_0__description" > a fancier item description </p> </p> </div> </div> </div> </div> <div className="chakra-stack emotion-8" > <div className="emotion-9" > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-12" htmlFor="root_1" id="root_1-label" > My Item <span aria-hidden={true} className="chakra-form__required-indicator emotion-0" role="presentation" > * </span> </label> <input aria-describedby="root_1__error root_1__description root_1__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-5" id="root_1__description" > a fancier item description </p> </p> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="emotion-26" > <button className="chakra-button emotion-27" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema array 1`] = ` .emotion-2 { margin-top: 1px; margin-bottom: 4px; } .emotion-4 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-5 { margin-top: 2px; margin-bottom: 4px; } .emotion-6 { display: grid; } .emotion-8 { justify-self: flex-end; } .emotion-9 { margin-top: 2px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-12 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-13 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" id="root__title" > <h5 className="chakra-heading emotion-0" > My Field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-4" /> </div> <p className="chakra-text emotion-5" id="root__description" > a fancier description </p> <div className="emotion-6" > <div className="emotion-0" /> <div className="emotion-8" > <div className="emotion-9" > <button className="chakra-button array-item-add emotion-10" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-11" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> </div> </div> <div className="emotion-13" > <button className="chakra-button emotion-10" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema array icons 1`] = ` .emotion-2 { margin-top: 1px; margin-bottom: 4px; } .emotion-4 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-5 { margin-top: 2px; margin-bottom: 4px; } .emotion-6 { display: grid; } .emotion-8 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: flex-end; -webkit-box-align: flex-end; -ms-flex-align: flex-end; align-items: flex-end; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; padding-top: 1px; padding-bottom: 1px; } .emotion-8>*:not(style)~*:not(style) { margin-top: 0px; -webkit-margin-end: 0px; margin-inline-end: 0px; margin-bottom: 0px; -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-9 { width: 100%; } .emotion-11 { margin-bottom: 1px; } .emotion-12 { display: block; text-align: start; } .emotion-15 { margin-top: 2px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; margin-bottom: 1px; } .emotion-18>*:first-of-type:not(:last-of-type) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .emotion-18>*:not(:first-of-type):not(:last-of-type) { border-radius: 0px; } .emotion-18>*:not(:first-of-type):last-of-type { border-top-left-radius: 0; border-bottom-left-radius: 0; } .emotion-19 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-19:focus, .emotion-19[data-focus] { z-index: 1; } .emotion-20 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-46 { justify-self: flex-end; } .emotion-48 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-49 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-51 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" id="root__title" > <h5 className="chakra-heading emotion-0" > My Field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-4" /> </div> <p className="chakra-text emotion-5" id="root__description" > a fancier description </p> <div className="emotion-6" > <div className="emotion-0" > <div className="chakra-stack emotion-8" > <div className="emotion-9" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-12" htmlFor="root_0" id="root_0-label" > My Item <span aria-hidden={true} className="chakra-form__required-indicator emotion-0" role="presentation" > * </span> </label> <input aria-describedby="root_0__error root_0__description root_0__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-5" id="root_0__description" > a fancier item description </p> </p> </div> </div> </div> <div className="emotion-0" > <div className="chakra-button__group emotion-18" role="group" > <button aria-label="Move up" className="chakra-button emotion-19" disabled={true} onClick={[Function]} title="Move up" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" fill="currentColor" /> </svg> </button> <button aria-label="Move down" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Move down" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" fill="currentColor" /> </svg> </button> <button aria-label="Copy" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Copy" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" fill="currentColor" /> </svg> </button> <button aria-label="Remove" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="chakra-stack emotion-8" > <div className="emotion-9" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-12" htmlFor="root_1" id="root_1-label" > My Item <span aria-hidden={true} className="chakra-form__required-indicator emotion-0" role="presentation" > * </span> </label> <input aria-describedby="root_1__error root_1__description root_1__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-5" id="root_1__description" > a fancier item description </p> </p> </div> </div> </div> <div className="emotion-0" > <div className="chakra-button__group emotion-18" role="group" > <button aria-label="Move up" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Move up" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" fill="currentColor" /> </svg> </button> <button aria-label="Move down" className="chakra-button emotion-19" disabled={true} onClick={[Function]} title="Move down" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" fill="currentColor" /> </svg> </button> <button aria-label="Copy" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Copy" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" fill="currentColor" /> </svg> </button> <button aria-label="Remove" className="chakra-button emotion-19" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> </div> <div className="emotion-46" > <div className="emotion-15" > <button className="chakra-button array-item-add emotion-48" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-49" > <svg aria-hidden={true} className="chakra-icon emotion-20" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> </div> </div> <div className="emotion-51" > <button className="chakra-button emotion-48" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema checkboxes 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { display: block; text-align: start; } .emotion-3 { position: relative; pointer-events: auto; } .emotion-4 { z-index: 9999; border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; position: absolute; overflow: hidden; padding: 0; white-space: nowrap; } .emotion-6 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 0px; overflow: hidden; height: auto; min-height: 10px; } .emotion-7 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0.125rem 1rem; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-overflow-scrolling: touch; position: relative; overflow: hidden; } .emotion-8 { color: gray.400; -webkit-margin-start: 0.125rem; margin-inline-start: 0.125rem; -webkit-margin-end: 0.125rem; margin-inline-end: 0.125rem; position: absolute; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-9 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; display: inline-grid; grid-area: 1/1/2/3; grid-template-columns: 0 min-content; color: inherit; } .emotion-9::after { content: attr(data-value) " "; visibility: hidden; white-space: pre; padding: 0px; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-10 { color: inherit; background: 0; opacity: 1; width: 100%; padding-top: 0.125rem; padding-bottom: 0.125rem; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-11 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-align-self: stretch; -ms-flex-item-align: stretch; align-self: stretch; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-12 { border: 0; border-left-width: 1px; height: 100%; opacity: 1; } .emotion-13 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; height: 100%; border-radius: 0px; border-width: 0; cursor: pointer; font-size: 20px; } .emotion-14 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-15 { margin-top: 2px; } .emotion-16 { margin-top: 2px; margin-bottom: 4px; } .emotion-17 { margin-top: 3px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <label className="chakra-form__label emotion-2" htmlFor="root" id="root-label" > My Field </label> <div className=" emotion-3" onKeyDown={[Function]} > <span className="emotion-4" id="react-select-4-live-region" /> <span aria-atomic="false" aria-live="polite" aria-relevant="additions text" className="emotion-4" /> <div className=" emotion-6" onMouseDown={[Function]} onTouchEnd={[Function]} > <div className=" emotion-7" > <div className=" emotion-8" id="react-select-4-placeholder" > Select... </div> <div className=" emotion-9" data-value="" > <input aria-autocomplete="list" aria-describedby="react-select-4-placeholder" aria-expanded={false} aria-haspopup={true} autoCapitalize="none" autoComplete="off" autoCorrect="off" className=" emotion-10" disabled={false} id="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} role="combobox" spellCheck="false" tabIndex={0} type="text" value="" /> </div> </div> <div className=" emotion-11" > <hr aria-orientation="vertical" className="chakra-divider emotion-12" /> <div aria-hidden="true" className=" emotion-13" onMouseDown={[Function]} onTouchEnd={[Function]} > <svg className="chakra-icon emotion-14" focusable={false} viewBox="0 0 24 24" > <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" fill="currentColor" /> </svg> </div> </div> </div> <div> <input name="root" type="hidden" value="" /> </div> </div> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-16" id="root__description" > a fancier description </p> </p> </div> </div> <div className="emotion-17" > <button className="chakra-button emotion-18" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema fixed array 1`] = ` .emotion-2 { margin-top: 1px; margin-bottom: 4px; } .emotion-4 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-5 { margin-top: 2px; margin-bottom: 4px; } .emotion-6 { display: grid; } .emotion-8 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: flex-end; -webkit-box-align: flex-end; -ms-flex-align: flex-end; align-items: flex-end; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; padding-top: 1px; padding-bottom: 1px; } .emotion-8>*:not(style)~*:not(style) { margin-top: 0px; -webkit-margin-end: 0px; margin-inline-end: 0px; margin-bottom: 0px; -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-9 { width: 100%; } .emotion-11 { margin-bottom: 1px; } .emotion-12 { display: block; text-align: start; } .emotion-15 { margin-top: 2px; } .emotion-26 { margin-top: 3px; } .emotion-27 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" id="root__title" > <h5 className="chakra-heading emotion-0" > My Field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-4" /> </div> <p className="chakra-text emotion-5" id="root__description" > a fancier description </p> <div className="emotion-6" > <div className="emotion-0" > <div className="chakra-stack emotion-8" > <div className="emotion-9" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-12" htmlFor="root_0" id="root_0-label" > My Item <span aria-hidden={true} className="chakra-form__required-indicator emotion-0" role="presentation" > * </span> </label> <input aria-describedby="root_0__error root_0__description root_0__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-5" id="root_0__description" > a fancier item description </p> </p> </div> </div> </div> </div> <div className="chakra-stack emotion-8" > <div className="emotion-9" > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-12" htmlFor="root_1" id="root_1-label" > My Item <span aria-hidden={true} className="chakra-form__required-indicator emotion-0" role="presentation" > * </span> </label> <input aria-describedby="root_1__error root_1__description root_1__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-5" id="root_1__description" > a fancier item description </p> </p> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="emotion-26" > <button className="chakra-button emotion-27" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off array 1`] = ` .emotion-2 { display: grid; } .emotion-4 { justify-self: flex-end; } .emotion-5 { margin-top: 2px; } .emotion-6 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-8 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-9 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" > <div className="emotion-0" /> <div className="emotion-4" > <div className="emotion-5" > <button className="chakra-button array-item-add emotion-6" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-7" > <svg aria-hidden={true} className="chakra-icon emotion-8" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> </div> </div> <div className="emotion-9" > <button className="chakra-button emotion-6" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off array icons 1`] = ` .emotion-2 { display: grid; } .emotion-4 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: flex-end; -webkit-box-align: flex-end; -ms-flex-align: flex-end; align-items: flex-end; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; padding-top: 1px; padding-bottom: 1px; } .emotion-4>*:not(style)~*:not(style) { margin-top: 0px; -webkit-margin-end: 0px; margin-inline-end: 0px; margin-bottom: 0px; -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-5 { width: 100%; } .emotion-7 { margin-bottom: 1px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; margin-bottom: 1px; } .emotion-10>*:first-of-type:not(:last-of-type) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .emotion-10>*:not(:first-of-type):not(:last-of-type) { border-radius: 0px; } .emotion-10>*:not(:first-of-type):last-of-type { border-top-left-radius: 0; border-bottom-left-radius: 0; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-11:focus, .emotion-11[data-focus] { z-index: 1; } .emotion-12 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-34 { justify-self: flex-end; } .emotion-35 { margin-top: 2px; } .emotion-36 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-37 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-39 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" > <div className="emotion-0" > <div className="chakra-stack emotion-4" > <div className="emotion-5" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> </div> </div> <div className="emotion-0" > <div className="chakra-button__group emotion-10" role="group" > <button aria-label="Move up" className="chakra-button emotion-11" disabled={true} onClick={[Function]} title="Move up" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" fill="currentColor" /> </svg> </button> <button aria-label="Move down" className="chakra-button emotion-11" disabled={false} onClick={[Function]} title="Move down" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" fill="currentColor" /> </svg> </button> <button aria-label="Copy" className="chakra-button emotion-11" disabled={false} onClick={[Function]} title="Copy" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" fill="currentColor" /> </svg> </button> <button aria-label="Remove" className="chakra-button emotion-11" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="chakra-stack emotion-4" > <div className="emotion-5" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> </div> </div> <div className="emotion-0" > <div className="chakra-button__group emotion-10" role="group" > <button aria-label="Move up" className="chakra-button emotion-11" disabled={false} onClick={[Function]} title="Move up" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" fill="currentColor" /> </svg> </button> <button aria-label="Move down" className="chakra-button emotion-11" disabled={true} onClick={[Function]} title="Move down" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" fill="currentColor" /> </svg> </button> <button aria-label="Copy" className="chakra-button emotion-11" disabled={false} onClick={[Function]} title="Copy" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" fill="currentColor" /> </svg> </button> <button aria-label="Remove" className="chakra-button emotion-11" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> </div> <div className="emotion-34" > <div className="emotion-35" > <button className="chakra-button array-item-add emotion-36" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-37" > <svg aria-hidden={true} className="chakra-icon emotion-12" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> </div> </div> <div className="emotion-39" > <button className="chakra-button emotion-36" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off checkboxes 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { display: block; text-align: start; } .emotion-3 { position: relative; pointer-events: auto; } .emotion-4 { z-index: 9999; border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; position: absolute; overflow: hidden; padding: 0; white-space: nowrap; } .emotion-6 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 0px; overflow: hidden; height: auto; min-height: 10px; } .emotion-7 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0.125rem 1rem; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-overflow-scrolling: touch; position: relative; overflow: hidden; } .emotion-8 { color: gray.400; -webkit-margin-start: 0.125rem; margin-inline-start: 0.125rem; -webkit-margin-end: 0.125rem; margin-inline-end: 0.125rem; position: absolute; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-9 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; display: inline-grid; grid-area: 1/1/2/3; grid-template-columns: 0 min-content; color: inherit; } .emotion-9::after { content: attr(data-value) " "; visibility: hidden; white-space: pre; padding: 0px; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-10 { color: inherit; background: 0; opacity: 1; width: 100%; padding-top: 0.125rem; padding-bottom: 0.125rem; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-11 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-align-self: stretch; -ms-flex-item-align: stretch; align-self: stretch; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-12 { border: 0; border-left-width: 1px; height: 100%; opacity: 1; } .emotion-13 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; height: 100%; border-radius: 0px; border-width: 0; cursor: pointer; font-size: 20px; } .emotion-14 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-15 { margin-top: 2px; } .emotion-16 { margin-top: 2px; margin-bottom: 4px; } .emotion-17 { margin-top: 3px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <label className="chakra-form__label emotion-2" htmlFor="root" id="root-label" > Test field </label> <div className=" emotion-3" onKeyDown={[Function]} > <span className="emotion-4" id="react-select-6-live-region" /> <span aria-atomic="false" aria-live="polite" aria-relevant="additions text" className="emotion-4" /> <div className=" emotion-6" onMouseDown={[Function]} onTouchEnd={[Function]} > <div className=" emotion-7" > <div className=" emotion-8" id="react-select-6-placeholder" > Select... </div> <div className=" emotion-9" data-value="" > <input aria-autocomplete="list" aria-describedby="react-select-6-placeholder" aria-expanded={false} aria-haspopup={true} autoCapitalize="none" autoComplete="off" autoCorrect="off" className=" emotion-10" disabled={false} id="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} role="combobox" spellCheck="false" tabIndex={0} type="text" value="" /> </div> </div> <div className=" emotion-11" > <hr aria-orientation="vertical" className="chakra-divider emotion-12" /> <div aria-hidden="true" className=" emotion-13" onMouseDown={[Function]} onTouchEnd={[Function]} > <svg className="chakra-icon emotion-14" focusable={false} viewBox="0 0 24 24" > <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" fill="currentColor" /> </svg> </div> </div> </div> <div> <input name="root" type="hidden" value="" /> </div> </div> </div> <p className="chakra-text emotion-15" > <p className="chakra-text emotion-16" id="root__description" > a test description </p> </p> </div> </div> <div className="emotion-17" > <button className="chakra-button emotion-18" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off fixed array 1`] = ` .emotion-2 { display: grid; } .emotion-4 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: flex-end; -webkit-box-align: flex-end; -ms-flex-align: flex-end; align-items: flex-end; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; padding-top: 1px; padding-bottom: 1px; } .emotion-4>*:not(style)~*:not(style) { margin-top: 0px; -webkit-margin-end: 0px; margin-inline-end: 0px; margin-bottom: 0px; -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-5 { width: 100%; } .emotion-7 { margin-bottom: 1px; } .emotion-14 { margin-top: 3px; } .emotion-15 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-0" > <div className="emotion-2" > <div className="emotion-0" > <div className="chakra-stack emotion-4" > <div className="emotion-5" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> </div> </div> <div className="chakra-stack emotion-4" > <div className="emotion-5" > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-required={true} autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="emotion-14" > <button className="chakra-button emotion-15" disabled={false} type="submit" > Submit </button> </div> </form> `; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/test/__snapshots__/Form.test.tsx.snap���������������0000664�0000000�0000000�00000401470�14467713645�0030616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`single fields checkbox field 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { cursor: pointer; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; vertical-align: top; position: relative; } .emotion-3 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; vertical-align: top; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-4 { margin-top: 3px; } .emotion-5 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <label className="chakra-checkbox emotion-2" onClick={[Function]} > <input aria-describedby="root__error root__description root__help" aria-disabled={false} aria-invalid={false} checked={false} className="chakra-checkbox__input" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} readOnly={false} required={false} style={ { "border": "0px", "clip": "rect(0px, 0px, 0px, 0px)", "height": "1px", "margin": "-1px", "overflow": "hidden", "padding": "0px", "position": "absolute", "whiteSpace": "nowrap", "width": "1px", } } type="checkbox" /> <span aria-hidden={true} className="chakra-checkbox__control emotion-3" onMouseDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} /> </label> </div> </div> </div> <div className="emotion-4" > <button className="chakra-button emotion-5" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields checkbox field with label 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { cursor: pointer; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; vertical-align: top; position: relative; } .emotion-3 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; vertical-align: top; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-4 { -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-6 { margin-top: 3px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <label className="chakra-checkbox emotion-2" onClick={[Function]} > <input aria-describedby="root__error root__description root__help" aria-disabled={false} aria-invalid={false} checked={false} className="chakra-checkbox__input" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} readOnly={false} required={false} style={ { "border": "0px", "clip": "rect(0px, 0px, 0px, 0px)", "height": "1px", "margin": "-1px", "overflow": "hidden", "padding": "0px", "position": "absolute", "whiteSpace": "nowrap", "width": "1px", } } type="checkbox" /> <span aria-hidden={true} className="chakra-checkbox__control emotion-3" onMouseDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} /> <span className="chakra-checkbox__label emotion-4" onMouseDown={[Function]} onTouchStart={[Function]} > <p className="chakra-text emotion-0" > test </p> </span> </label> </div> </div> </div> <div className="emotion-6" > <button className="chakra-button emotion-7" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields checkboxes field 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { display: block; text-align: start; } .emotion-3 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; } .emotion-3>*:not(style)~*:not(style) { margin-top: 0.5rem; -webkit-margin-end: 0px; margin-inline-end: 0px; margin-bottom: 0px; -webkit-margin-start: 0px; margin-inline-start: 0px; } .emotion-4 { cursor: pointer; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; vertical-align: top; position: relative; } .emotion-5 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; vertical-align: top; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-6 { -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-20 { margin-top: 3px; } .emotion-21 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <label className="chakra-form__label emotion-2" htmlFor="root" id="root-label" > An enum list rendered as checkboxes </label> <div className="chakra-stack emotion-3" > <label className="chakra-checkbox emotion-4" onClick={[Function]} > <input aria-disabled={false} aria-invalid={false} checked={false} className="chakra-checkbox__input" disabled={false} id="root-0" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} readOnly={false} required={false} style={ { "border": "0px", "clip": "rect(0px, 0px, 0px, 0px)", "height": "1px", "margin": "-1px", "overflow": "hidden", "padding": "0px", "position": "absolute", "whiteSpace": "nowrap", "width": "1px", } } type="checkbox" value="0" /> <span aria-hidden={true} className="chakra-checkbox__control emotion-5" onMouseDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} /> <span className="chakra-checkbox__label emotion-6" onMouseDown={[Function]} onTouchStart={[Function]} > <p className="chakra-text emotion-0" > foo </p> </span> </label> <label className="chakra-checkbox emotion-4" onClick={[Function]} > <input aria-disabled={false} aria-invalid={false} checked={false} className="chakra-checkbox__input" disabled={false} id="root-1" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} readOnly={false} required={false} style={ { "border": "0px", "clip": "rect(0px, 0px, 0px, 0px)", "height": "1px", "margin": "-1px", "overflow": "hidden", "padding": "0px", "position": "absolute", "whiteSpace": "nowrap", "width": "1px", } } type="checkbox" value="1" /> <span aria-hidden={true} className="chakra-checkbox__control emotion-5" onMouseDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} /> <span className="chakra-checkbox__label emotion-6" onMouseDown={[Function]} onTouchStart={[Function]} > <p className="chakra-text emotion-0" > bar </p> </span> </label> <label className="chakra-checkbox emotion-4" onClick={[Function]} > <input aria-disabled={false} aria-invalid={false} checked={false} className="chakra-checkbox__input" disabled={false} id="root-2" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} readOnly={false} required={false} style={ { "border": "0px", "clip": "rect(0px, 0px, 0px, 0px)", "height": "1px", "margin": "-1px", "overflow": "hidden", "padding": "0px", "position": "absolute", "whiteSpace": "nowrap", "width": "1px", } } type="checkbox" value="2" /> <span aria-hidden={true} className="chakra-checkbox__control emotion-5" onMouseDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} /> <span className="chakra-checkbox__label emotion-6" onMouseDown={[Function]} onTouchStart={[Function]} > <p className="chakra-text emotion-0" > fuzz </p> </span> </label> <label className="chakra-checkbox emotion-4" onClick={[Function]} > <input aria-disabled={false} aria-invalid={false} checked={false} className="chakra-checkbox__input" disabled={false} id="root-3" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} readOnly={false} required={false} style={ { "border": "0px", "clip": "rect(0px, 0px, 0px, 0px)", "height": "1px", "margin": "-1px", "overflow": "hidden", "padding": "0px", "position": "absolute", "whiteSpace": "nowrap", "width": "1px", } } type="checkbox" value="3" /> <span aria-hidden={true} className="chakra-checkbox__control emotion-5" onMouseDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} /> <span className="chakra-checkbox__label emotion-6" onMouseDown={[Function]} onTouchStart={[Function]} > <p className="chakra-text emotion-0" > qux </p> </span> </label> </div> </div> </div> </div> <div className="emotion-20" > <button className="chakra-button emotion-21" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields field with description 1`] = ` .emotion-1 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-4 { margin-bottom: 1px; } .emotion-5 { display: block; text-align: start; } .emotion-7 { margin-top: 2px; } .emotion-8 { margin-top: 2px; margin-bottom: 4px; } .emotion-9 { margin-top: 3px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" > <div className="emotion-0" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-4" role="group" > <label className="chakra-form__label emotion-5" htmlFor="root_my-field" id="root_my-field-label" > my-field </label> <input aria-describedby="root_my-field__error root_my-field__description root_my-field__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_my-field" name="root_my-field" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> <p className="chakra-text emotion-7" > <p className="chakra-text emotion-8" id="root_my-field__description" > some description </p> </p> </div> </div> </div> </div> </div> </div> <div className="emotion-9" > <button className="chakra-button emotion-10" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields field with description in uiSchema 1`] = ` .emotion-1 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-4 { margin-bottom: 1px; } .emotion-5 { display: block; text-align: start; } .emotion-7 { margin-top: 2px; } .emotion-8 { margin-top: 2px; margin-bottom: 4px; } .emotion-9 { margin-top: 3px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" > <div className="emotion-0" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-4" role="group" > <label className="chakra-form__label emotion-5" htmlFor="root_my-field" id="root_my-field-label" > my-field </label> <input aria-describedby="root_my-field__error root_my-field__description root_my-field__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_my-field" name="root_my-field" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> <p className="chakra-text emotion-7" > <p className="chakra-text emotion-8" id="root_my-field__description" > some other description </p> </p> </div> </div> </div> </div> </div> </div> <div className="emotion-9" > <button className="chakra-button emotion-10" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields format color 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="color" value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields format date 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="date" value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields format datetime 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="datetime-local" value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields format time 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="time" value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields help and error display 1`] = ` .emotion-0 { width: 100%; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: flex-start; -webkit-box-align: flex-start; -ms-flex-align: flex-start; align-items: flex-start; position: relative; overflow: hidden; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; gap: 3px; } .emotion-2 { list-style-type: none; } .emotion-4 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: red.500; } .emotion-6 { margin-bottom: 1px; } .emotion-10 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-12 { margin-top: 3px; } .emotion-13 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="chakra-alert emotion-0" role="alert" > <div className="chakra-alert__title emotion-1" > Errors </div> <ul className="emotion-2" role="list" > <li className="emotion-1" > <svg className="chakra-icon chakra-icon emotion-4" focusable={false} role="presentation" viewBox="0 0 24 24" > <path d="M11.983,0a12.206,12.206,0,0,0-8.51,3.653A11.8,11.8,0,0,0,0,12.207,11.779,11.779,0,0,0,11.8,24h.214A12.111,12.111,0,0,0,24,11.791h0A11.766,11.766,0,0,0,11.983,0ZM10.5,16.542a1.476,1.476,0,0,1,1.449-1.53h.027a1.527,1.527,0,0,1,1.523,1.47,1.475,1.475,0,0,1-1.449,1.53h-.027A1.529,1.529,0,0,1,10.5,16.542ZM11,12.5v-6a1,1,0,0,1,2,0v6a1,1,0,1,1-2,0Z" fill="currentColor" /> </svg> . an error </li> </ul> </div> <div className="form-group field field-string field-error has-error has-danger" > <div className="chakra-form-control emotion-1" role="group" > <div className="chakra-form-control emotion-6" role="group" > <input aria-describedby="root__error root__description root__help" aria-invalid={true} autoFocus={false} className="chakra-input emotion-1" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> <ul className="emotion-2" role="list" > <li className="emotion-1" > <div aria-live="polite" className="chakra-form__error-message emotion-10" id="root__error" > an error </div> </li> </ul> <div className="chakra-form__helper-text emotion-1" id="root__help" > help me! </div> </div> </div> <div className="emotion-12" > <button className="chakra-button emotion-13" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields hidden field 1`] = ` .emotion-1 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-2 { margin-top: 3px; } .emotion-3 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" > <div style={ { "display": "none", } } > <input id="root_my-field" name="root_my-field" type="hidden" value="" /> </div> </div> </div> </div> <div className="emotion-2" > <button className="chakra-button emotion-3" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields hidden label 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields null field 1`] = ` .emotion-1 { margin-top: 3px; } .emotion-2 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-null" > <div className="chakra-form-control emotion-0" role="group" /> </div> <div className="emotion-1" > <button className="chakra-button emotion-2" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields number field 0 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value={0} /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields number field 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields password field 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="password" value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields radio field 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; } .emotion-3>*:not(style)~*:not(style) { margin-top: 0.5rem; -webkit-margin-end: 0px; margin-inline-end: 0px; margin-bottom: 0px; -webkit-margin-start: 0px; margin-inline-start: 0px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; vertical-align: top; cursor: pointer; } .emotion-5 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-6 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-margin-start: 0.5rem; margin-inline-start: 0.5rem; } .emotion-10 { margin-top: 3px; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <div aria-describedby="root__error root__description root__help" className="chakra-radio-group emotion-0" onBlur={[Function]} onFocus={[Function]} role="radiogroup" > <div className="chakra-stack emotion-3" > <label className="chakra-radio emotion-4" > <input checked={false} className="chakra-radio__input" disabled={false} id="root-0" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} readOnly={false} required={false} style={ { "border": "0px", "clip": "rect(0px, 0px, 0px, 0px)", "height": "1px", "margin": "-1px", "overflow": "hidden", "padding": "0px", "position": "absolute", "whiteSpace": "nowrap", "width": "1px", } } type="radio" value="0" /> <span aria-hidden={true} className="chakra-radio__control emotion-5" disabled={false} onMouseDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} /> <span className="chakra-radio__label emotion-6" onMouseDown={[Function]} onTouchStart={[Function]} > Yes </span> </label> <label className="chakra-radio emotion-4" > <input checked={false} className="chakra-radio__input" disabled={false} id="root-1" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} readOnly={false} required={false} style={ { "border": "0px", "clip": "rect(0px, 0px, 0px, 0px)", "height": "1px", "margin": "-1px", "overflow": "hidden", "padding": "0px", "position": "absolute", "whiteSpace": "nowrap", "width": "1px", } } type="radio" value="1" /> <span aria-hidden={true} className="chakra-radio__control emotion-5" disabled={false} onMouseDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} /> <span className="chakra-radio__label emotion-6" onMouseDown={[Function]} onTouchStart={[Function]} > No </span> </label> </div> </div> </div> </div> </div> <div className="emotion-10" > <button className="chakra-button emotion-11" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields schema examples 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help root__examples" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" list="root__examples" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> <datalist id="root__examples" > <option value="Firefox" /> <option value="Chrome" /> <option value="Opera" /> <option value="Vivaldi" /> <option value="Safari" /> </datalist> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { position: relative; pointer-events: auto; } .emotion-3 { z-index: 9999; border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; position: absolute; overflow: hidden; padding: 0; white-space: nowrap; } .emotion-5 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 0px; overflow: hidden; height: auto; min-height: 10px; } .emotion-6 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0.125rem 1rem; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-overflow-scrolling: touch; position: relative; overflow: hidden; } .emotion-7 { -webkit-margin-start: 0.125rem; margin-inline-start: 0.125rem; -webkit-margin-end: 0.125rem; margin-inline-end: 0.125rem; max-width: calc(100% - 0.5rem); overflow: hidden; position: absolute; text-overflow: ellipsis; white-space: nowrap; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); } .emotion-8 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; display: inline-grid; grid-area: 1/1/2/3; grid-template-columns: 0 min-content; color: inherit; } .emotion-8::after { content: attr(data-value) " "; visibility: hidden; white-space: pre; padding: 0px; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-9 { color: inherit; background: 0; opacity: 1; width: 100%; padding-top: 0.125rem; padding-bottom: 0.125rem; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-10 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-align-self: stretch; -ms-flex-item-align: stretch; align-self: stretch; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-11 { border: 0; border-left-width: 1px; height: 100%; opacity: 1; } .emotion-12 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; height: 100%; border-radius: 0px; border-width: 0; cursor: pointer; font-size: 20px; } .emotion-13 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-14 { margin-top: 3px; } .emotion-15 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <div className=" emotion-2" onKeyDown={[Function]} > <span className="emotion-3" id="react-select-2-live-region" /> <span aria-atomic="false" aria-live="polite" aria-relevant="additions text" className="emotion-3" /> <div className=" emotion-5" onMouseDown={[Function]} onTouchEnd={[Function]} > <div className=" emotion-6" > <div className=" emotion-7" > </div> <div className=" emotion-8" data-value="" > <input aria-autocomplete="list" aria-expanded={false} aria-haspopup={true} autoCapitalize="none" autoComplete="off" autoCorrect="off" className=" emotion-9" disabled={false} id="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} role="combobox" spellCheck="false" tabIndex={0} type="text" value="" /> </div> </div> <div className=" emotion-10" > <hr aria-orientation="vertical" className="chakra-divider emotion-11" /> <div aria-hidden="true" className=" emotion-12" onMouseDown={[Function]} onTouchEnd={[Function]} > <svg className="chakra-icon emotion-13" focusable={false} viewBox="0 0 24 24" > <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" fill="currentColor" /> </svg> </div> </div> </div> <input name="root" type="hidden" /> </div> </div> </div> </div> <div className="emotion-14" > <button className="chakra-button emotion-15" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { position: relative; pointer-events: auto; } .emotion-3 { z-index: 9999; border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; position: absolute; overflow: hidden; padding: 0; white-space: nowrap; } .emotion-5 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 0px; overflow: hidden; height: auto; min-height: 10px; } .emotion-6 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0.125rem 1rem; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-overflow-scrolling: touch; position: relative; overflow: hidden; } .emotion-7 { color: gray.400; -webkit-margin-start: 0.125rem; margin-inline-start: 0.125rem; -webkit-margin-end: 0.125rem; margin-inline-end: 0.125rem; position: absolute; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-8 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; display: inline-grid; grid-area: 1/1/2/3; grid-template-columns: 0 min-content; color: inherit; } .emotion-8::after { content: attr(data-value) " "; visibility: hidden; white-space: pre; padding: 0px; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-9 { color: inherit; background: 0; opacity: 1; width: 100%; padding-top: 0.125rem; padding-bottom: 0.125rem; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-10 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-align-self: stretch; -ms-flex-item-align: stretch; align-self: stretch; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-11 { border: 0; border-left-width: 1px; height: 100%; opacity: 1; } .emotion-12 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; height: 100%; border-radius: 0px; border-width: 0; cursor: pointer; font-size: 20px; } .emotion-13 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-14 { margin-top: 3px; } .emotion-15 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <div className=" emotion-2" onKeyDown={[Function]} > <span className="emotion-3" id="react-select-3-live-region" /> <span aria-atomic="false" aria-live="polite" aria-relevant="additions text" className="emotion-3" /> <div className=" emotion-5" onMouseDown={[Function]} onTouchEnd={[Function]} > <div className=" emotion-6" > <div className=" emotion-7" id="react-select-3-placeholder" > Select... </div> <div className=" emotion-8" data-value="" > <input aria-autocomplete="list" aria-describedby="react-select-3-placeholder" aria-expanded={false} aria-haspopup={true} autoCapitalize="none" autoComplete="off" autoCorrect="off" className=" emotion-9" disabled={false} id="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} role="combobox" spellCheck="false" tabIndex={0} type="text" value="" /> </div> </div> <div className=" emotion-10" > <hr aria-orientation="vertical" className="chakra-divider emotion-11" /> <div aria-hidden="true" className=" emotion-12" onMouseDown={[Function]} onTouchEnd={[Function]} > <svg className="chakra-icon emotion-13" focusable={false} viewBox="0 0 24 24" > <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" fill="currentColor" /> </svg> </div> </div> </div> <div> <input name="root" type="hidden" value="" /> </div> </div> </div> </div> </div> <div className="emotion-14" > <button className="chakra-button emotion-15" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice enumDisabled 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { position: relative; pointer-events: auto; } .emotion-3 { z-index: 9999; border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; position: absolute; overflow: hidden; padding: 0; white-space: nowrap; } .emotion-5 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 0px; overflow: hidden; height: auto; min-height: 10px; } .emotion-6 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0.125rem 1rem; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-overflow-scrolling: touch; position: relative; overflow: hidden; } .emotion-7 { color: gray.400; -webkit-margin-start: 0.125rem; margin-inline-start: 0.125rem; -webkit-margin-end: 0.125rem; margin-inline-end: 0.125rem; position: absolute; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-8 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; display: inline-grid; grid-area: 1/1/2/3; grid-template-columns: 0 min-content; color: inherit; } .emotion-8::after { content: attr(data-value) " "; visibility: hidden; white-space: pre; padding: 0px; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-9 { color: inherit; background: 0; opacity: 1; width: 100%; padding-top: 0.125rem; padding-bottom: 0.125rem; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-10 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-align-self: stretch; -ms-flex-item-align: stretch; align-self: stretch; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-11 { border: 0; border-left-width: 1px; height: 100%; opacity: 1; } .emotion-12 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; height: 100%; border-radius: 0px; border-width: 0; cursor: pointer; font-size: 20px; } .emotion-13 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-14 { margin-top: 3px; } .emotion-15 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <div className=" emotion-2" onKeyDown={[Function]} > <span className="emotion-3" id="react-select-6-live-region" /> <span aria-atomic="false" aria-live="polite" aria-relevant="additions text" className="emotion-3" /> <div className=" emotion-5" onMouseDown={[Function]} onTouchEnd={[Function]} > <div className=" emotion-6" > <div className=" emotion-7" id="react-select-6-placeholder" > Select... </div> <div className=" emotion-8" data-value="" > <input aria-autocomplete="list" aria-describedby="react-select-6-placeholder" aria-expanded={false} aria-haspopup={true} autoCapitalize="none" autoComplete="off" autoCorrect="off" className=" emotion-9" disabled={false} id="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} role="combobox" spellCheck="false" tabIndex={0} type="text" value="" /> </div> </div> <div className=" emotion-10" > <hr aria-orientation="vertical" className="chakra-divider emotion-11" /> <div aria-hidden="true" className=" emotion-12" onMouseDown={[Function]} onTouchEnd={[Function]} > <svg className="chakra-icon emotion-13" focusable={false} viewBox="0 0 24 24" > <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" fill="currentColor" /> </svg> </div> </div> </div> <div> <input name="root" type="hidden" value="" /> </div> </div> </div> </div> </div> <div className="emotion-14" > <button className="chakra-button emotion-15" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice formData 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { position: relative; pointer-events: auto; } .emotion-3 { z-index: 9999; border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; position: absolute; overflow: hidden; padding: 0; white-space: nowrap; } .emotion-5 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 0px; overflow: hidden; height: auto; min-height: 10px; } .emotion-6 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0.125rem 1rem; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-overflow-scrolling: touch; position: relative; overflow: hidden; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; vertical-align: top; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; max-width: 100%; margin: 0.125rem; } .emotion-9 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; } .emotion-10 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: inherit; } .emotion-15 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; display: inline-grid; grid-area: 1/1/2/3; grid-template-columns: 0 min-content; color: inherit; } .emotion-15::after { content: attr(data-value) " "; visibility: hidden; white-space: pre; padding: 0px; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-16 { color: inherit; background: 0; opacity: 1; width: 100%; padding-top: 0.125rem; padding-bottom: 0.125rem; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-17 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-align-self: stretch; -ms-flex-item-align: stretch; align-self: stretch; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-18 { -webkit-margin-start: 1px; margin-inline-start: 1px; -webkit-margin-end: 1px; margin-inline-end: 1px; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; cursor: pointer; } .emotion-19 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-20 { border: 0; border-left-width: 1px; height: 100%; opacity: 1; } .emotion-21 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; height: 100%; border-radius: 0px; border-width: 0; cursor: pointer; font-size: 20px; } .emotion-23 { margin-top: 3px; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <div className=" emotion-2" onKeyDown={[Function]} > <span className="emotion-3" id="react-select-8-live-region" /> <span aria-atomic="false" aria-live="polite" aria-relevant="additions text" className="emotion-3" /> <div className=" emotion-5" onMouseDown={[Function]} onTouchEnd={[Function]} > <div className=" emotion-6" > <span className=" emotion-7" > <span className=" emotion-0" > foo </span> <div aria-label="Remove foo" className=" emotion-9" onClick={[Function]} onMouseDown={[Function]} onTouchEnd={[Function]} role="button" > <svg className="chakra-icon emotion-10" focusable={false} viewBox="0 0 512 512" > <path d="M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z" fill="currentColor" /> </svg> </div> </span> <span className=" emotion-7" > <span className=" emotion-0" > bar </span> <div aria-label="Remove bar" className=" emotion-9" onClick={[Function]} onMouseDown={[Function]} onTouchEnd={[Function]} role="button" > <svg className="chakra-icon emotion-10" focusable={false} viewBox="0 0 512 512" > <path d="M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z" fill="currentColor" /> </svg> </div> </span> <div className=" emotion-15" data-value="" > <input aria-autocomplete="list" aria-expanded={false} aria-haspopup={true} autoCapitalize="none" autoComplete="off" autoCorrect="off" className=" emotion-16" disabled={false} id="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} role="combobox" spellCheck="false" tabIndex={0} type="text" value="" /> </div> </div> <div className=" emotion-17" > <div aria-hidden="true" aria-label="Clear selected options" className=" emotion-18" onMouseDown={[Function]} onTouchEnd={[Function]} role="button" > <svg aria-hidden={true} className="chakra-icon emotion-19" focusable="false" viewBox="0 0 24 24" > <path d="M.439,21.44a1.5,1.5,0,0,0,2.122,2.121L11.823,14.3a.25.25,0,0,1,.354,0l9.262,9.263a1.5,1.5,0,1,0,2.122-2.121L14.3,12.177a.25.25,0,0,1,0-.354l9.263-9.262A1.5,1.5,0,0,0,21.439.44L12.177,9.7a.25.25,0,0,1-.354,0L2.561.44A1.5,1.5,0,0,0,.439,2.561L9.7,11.823a.25.25,0,0,1,0,.354Z" fill="currentColor" /> </svg> </div> <hr aria-orientation="vertical" className="chakra-divider emotion-20" /> <div aria-hidden="true" className=" emotion-21" onMouseDown={[Function]} onTouchEnd={[Function]} > <svg className="chakra-icon emotion-19" focusable={false} viewBox="0 0 24 24" > <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" fill="currentColor" /> </svg> </div> </div> </div> <div> <input name="root" type="hidden" value="0" /> <input name="root" type="hidden" value="1" /> </div> </div> </div> </div> </div> <div className="emotion-23" > <button className="chakra-button emotion-24" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice with labels 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { position: relative; pointer-events: auto; } .emotion-3 { z-index: 9999; border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; position: absolute; overflow: hidden; padding: 0; white-space: nowrap; } .emotion-5 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 0px; overflow: hidden; height: auto; min-height: 10px; } .emotion-6 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0.125rem 1rem; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-overflow-scrolling: touch; position: relative; overflow: hidden; } .emotion-7 { color: gray.400; -webkit-margin-start: 0.125rem; margin-inline-start: 0.125rem; -webkit-margin-end: 0.125rem; margin-inline-end: 0.125rem; position: absolute; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-8 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; display: inline-grid; grid-area: 1/1/2/3; grid-template-columns: 0 min-content; color: inherit; } .emotion-8::after { content: attr(data-value) " "; visibility: hidden; white-space: pre; padding: 0px; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-9 { color: inherit; background: 0; opacity: 1; width: 100%; padding-top: 0.125rem; padding-bottom: 0.125rem; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-10 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-align-self: stretch; -ms-flex-item-align: stretch; align-self: stretch; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-11 { border: 0; border-left-width: 1px; height: 100%; opacity: 1; } .emotion-12 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; height: 100%; border-radius: 0px; border-width: 0; cursor: pointer; font-size: 20px; } .emotion-13 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-14 { margin-top: 3px; } .emotion-15 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <div className=" emotion-2" onKeyDown={[Function]} > <span className="emotion-3" id="react-select-4-live-region" /> <span aria-atomic="false" aria-live="polite" aria-relevant="additions text" className="emotion-3" /> <div className=" emotion-5" onMouseDown={[Function]} onTouchEnd={[Function]} > <div className=" emotion-6" > <div className=" emotion-7" id="react-select-4-placeholder" > Select... </div> <div className=" emotion-8" data-value="" > <input aria-autocomplete="list" aria-describedby="react-select-4-placeholder" aria-expanded={false} aria-haspopup={true} autoCapitalize="none" autoComplete="off" autoCorrect="off" className=" emotion-9" disabled={false} id="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} role="combobox" spellCheck="false" tabIndex={0} type="text" value="" /> </div> </div> <div className=" emotion-10" > <hr aria-orientation="vertical" className="chakra-divider emotion-11" /> <div aria-hidden="true" className=" emotion-12" onMouseDown={[Function]} onTouchEnd={[Function]} > <svg className="chakra-icon emotion-13" focusable={false} viewBox="0 0 24 24" > <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" fill="currentColor" /> </svg> </div> </div> </div> <div> <input name="root" type="hidden" value="" /> </div> </div> </div> </div> </div> <div className="emotion-14" > <button className="chakra-button emotion-15" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field single choice enumDisabled 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { position: relative; pointer-events: auto; } .emotion-3 { z-index: 9999; border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; position: absolute; overflow: hidden; padding: 0; white-space: nowrap; } .emotion-5 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 0px; overflow: hidden; height: auto; min-height: 10px; } .emotion-6 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0.125rem 1rem; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-overflow-scrolling: touch; position: relative; overflow: hidden; } .emotion-7 { -webkit-margin-start: 0.125rem; margin-inline-start: 0.125rem; -webkit-margin-end: 0.125rem; margin-inline-end: 0.125rem; max-width: calc(100% - 0.5rem); overflow: hidden; position: absolute; text-overflow: ellipsis; white-space: nowrap; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); } .emotion-8 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; display: inline-grid; grid-area: 1/1/2/3; grid-template-columns: 0 min-content; color: inherit; } .emotion-8::after { content: attr(data-value) " "; visibility: hidden; white-space: pre; padding: 0px; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-9 { color: inherit; background: 0; opacity: 1; width: 100%; padding-top: 0.125rem; padding-bottom: 0.125rem; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-10 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-align-self: stretch; -ms-flex-item-align: stretch; align-self: stretch; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-11 { border: 0; border-left-width: 1px; height: 100%; opacity: 1; } .emotion-12 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; height: 100%; border-radius: 0px; border-width: 0; cursor: pointer; font-size: 20px; } .emotion-13 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-14 { margin-top: 3px; } .emotion-15 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <div className=" emotion-2" onKeyDown={[Function]} > <span className="emotion-3" id="react-select-5-live-region" /> <span aria-atomic="false" aria-live="polite" aria-relevant="additions text" className="emotion-3" /> <div className=" emotion-5" onMouseDown={[Function]} onTouchEnd={[Function]} > <div className=" emotion-6" > <div className=" emotion-7" > </div> <div className=" emotion-8" data-value="" > <input aria-autocomplete="list" aria-expanded={false} aria-haspopup={true} autoCapitalize="none" autoComplete="off" autoCorrect="off" className=" emotion-9" disabled={false} id="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} role="combobox" spellCheck="false" tabIndex={0} type="text" value="" /> </div> </div> <div className=" emotion-10" > <hr aria-orientation="vertical" className="chakra-divider emotion-11" /> <div aria-hidden="true" className=" emotion-12" onMouseDown={[Function]} onTouchEnd={[Function]} > <svg className="chakra-icon emotion-13" focusable={false} viewBox="0 0 24 24" > <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" fill="currentColor" /> </svg> </div> </div> </div> <input name="root" type="hidden" /> </div> </div> </div> </div> <div className="emotion-14" > <button className="chakra-button emotion-15" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field single choice formData 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { position: relative; pointer-events: auto; } .emotion-3 { z-index: 9999; border: 0; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; position: absolute; overflow: hidden; padding: 0; white-space: nowrap; } .emotion-5 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; padding: 0px; overflow: hidden; height: auto; min-height: 10px; } .emotion-6 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; padding: 0.125rem 1rem; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; -webkit-overflow-scrolling: touch; position: relative; overflow: hidden; } .emotion-7 { -webkit-margin-start: 0.125rem; margin-inline-start: 0.125rem; -webkit-margin-end: 0.125rem; margin-inline-end: 0.125rem; max-width: calc(100% - 0.5rem); overflow: hidden; position: absolute; text-overflow: ellipsis; white-space: nowrap; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); } .emotion-8 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; display: inline-grid; grid-area: 1/1/2/3; grid-template-columns: 0 min-content; color: inherit; } .emotion-8::after { content: attr(data-value) " "; visibility: hidden; white-space: pre; padding: 0px; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-9 { color: inherit; background: 0; opacity: 1; width: 100%; padding-top: 0.125rem; padding-bottom: 0.125rem; grid-area: 1/2; font: inherit; min-width: 2px; border: 0; margin: 0px; outline: 2px solid transparent; outline-offset: 2px; } .emotion-10 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-align-self: stretch; -ms-flex-item-align: stretch; align-self: stretch; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; } .emotion-11 { border: 0; border-left-width: 1px; height: 100%; opacity: 1; } .emotion-12 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; height: 100%; border-radius: 0px; border-width: 0; cursor: pointer; font-size: 20px; } .emotion-13 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-14 { margin-top: 3px; } .emotion-15 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <div className=" emotion-2" onKeyDown={[Function]} > <span className="emotion-3" id="react-select-7-live-region" /> <span aria-atomic="false" aria-live="polite" aria-relevant="additions text" className="emotion-3" /> <div className=" emotion-5" onMouseDown={[Function]} onTouchEnd={[Function]} > <div className=" emotion-6" > <div className=" emotion-7" > bar </div> <div className=" emotion-8" data-value="" > <input aria-autocomplete="list" aria-expanded={false} aria-haspopup={true} autoCapitalize="none" autoComplete="off" autoCorrect="off" className=" emotion-9" disabled={false} id="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} role="combobox" spellCheck="false" tabIndex={0} type="text" value="" /> </div> </div> <div className=" emotion-10" > <hr aria-orientation="vertical" className="chakra-divider emotion-11" /> <div aria-hidden="true" className=" emotion-12" onMouseDown={[Function]} onTouchEnd={[Function]} > <svg className="chakra-icon emotion-13" focusable={false} viewBox="0 0 24 24" > <path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" fill="currentColor" /> </svg> </div> </div> </div> <input name="root" type="hidden" /> </div> </div> </div> </div> <div className="emotion-14" > <button className="chakra-button emotion-15" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields slider field 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-6 { margin-top: 3px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-integer" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <div aria-describedby="root__error root__description root__help" className="chakra-slider emotion-0" label="" onBlur={[Function]} onFocus={[Function]} style={ { "WebkitTapHighlightColor": "rgba(0,0,0,0)", "outline": 0, "paddingBottom": 0, "paddingTop": 0, "position": "relative", "touchAction": "none", "userSelect": "none", } } tabIndex={-1} > <div className="chakra-slider__track emotion-0" id="slider-track-root" style={ { "position": "absolute", "top": "50%", "transform": "translateY(-50%)", "width": "100%", } } > <div className="chakra-slider__filled-track emotion-0" style={ { "left": "0%", "position": "absolute", "top": "50%", "transform": "translateY(-50%)", "width": "56.89655172413793%", } } /> </div> <div aria-orientation="horizontal" aria-valuemax={100} aria-valuemin={42} aria-valuenow={75} className="chakra-slider__thumb emotion-0" id="slider-thumb-root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} role="slider" style={ { "MozUserSelect": "none", "WebkitUserSelect": "none", "left": "calc(56.89655172413793% - 0px)", "msUserSelect": "none", "position": "absolute", "touchAction": "none", "userSelect": "none", } } tabIndex={0} /> <input name="root" type="hidden" value={75} /> </div> </div> </div> </div> <div className="emotion-6" > <button className="chakra-button emotion-7" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field format data-url 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div> <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="file" value="" /> </div> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field format email 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="email" value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field format uri 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="url" value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field regular 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field with placeholder 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="placeholder" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields textarea field 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <textarea aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-textarea emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields title field 1`] = ` .emotion-1 { margin-top: 1px; margin-bottom: 4px; } .emotion-3 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-4 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-7 { margin-bottom: 1px; } .emotion-8 { display: block; text-align: start; } .emotion-10 { margin-top: 3px; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" id="root__title" > <h5 className="chakra-heading emotion-0" > Titre 1 </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-3" /> </div> <div className="emotion-4" > <div className="emotion-0" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <label className="chakra-form__label emotion-8" htmlFor="root_title" id="root_title-label" > Titre 2 </label> <input aria-describedby="root_title__error root_title__description root_title__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_title" name="root_title" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> <div className="emotion-10" > <button className="chakra-button emotion-11" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields unsupported field 1`] = ` .emotion-1 { margin-top: 3px; } .emotion-2 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-undefined" > <div className="chakra-form-control emotion-0" role="group" > <div className="unsupported-field" > <p> <span> Unsupported field schema for field <code> root </code> : <em> Unknown field type undefined </em> . </span> </p> <pre> {} </pre> </div> </div> </div> <div className="emotion-1" > <button className="chakra-button emotion-2" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields up/down field 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-2 { position: relative; z-index: 0; } .emotion-3 { width: 100%; } .emotion-4 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: absolute; top: 0px; right: 0px; margin: 1px; height: calc(100% - 2px); z-index: 1; } .emotion-5 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-flex: 1; -ms-flex: 1; flex: 1; transition-property: common; transition-duration: normal; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; cursor: pointer; line-height: normal; } .emotion-6 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-9 { margin-top: 3px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <div className="chakra-numberinput emotion-2" value="" > <input aria-describedby="root__error root__description root__help" aria-readonly={false} aria-required={false} aria-valuemax={9007199254740991} aria-valuemin={-9007199254740991} autoComplete="off" autoCorrect="off" className="chakra-numberinput__field emotion-3" disabled={false} id="root" inputMode="decimal" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onKeyDown={[Function]} pattern="[0-9]*(.[0-9]+)?" readOnly={false} required={false} role="spinbutton" type="text" value="" /> <div aria-hidden={true} className="emotion-4" > <div className="emotion-5" disabled={false} onPointerDown={[Function]} onPointerLeave={[Function]} onPointerUp={[Function]} role="button" tabIndex={-1} > <svg className="chakra-icon emotion-6" focusable={false} viewBox="0 0 24 24" > <path d="M12.8,5.4c-0.377-0.504-1.223-0.504-1.6,0l-9,12c-0.228,0.303-0.264,0.708-0.095,1.047 C2.275,18.786,2.621,19,3,19h18c0.379,0,0.725-0.214,0.895-0.553c0.169-0.339,0.133-0.744-0.095-1.047L12.8,5.4z" fill="currentColor" /> </svg> </div> <div className="emotion-5" disabled={false} onPointerDown={[Function]} onPointerLeave={[Function]} onPointerUp={[Function]} role="button" tabIndex={-1} > <svg className="chakra-icon emotion-6" focusable={false} viewBox="0 0 24 24" > <path d="M21,5H3C2.621,5,2.275,5.214,2.105,5.553C1.937,5.892,1.973,6.297,2.2,6.6l9,12 c0.188,0.252,0.485,0.4,0.8,0.4s0.611-0.148,0.8-0.4l9-12c0.228-0.303,0.264-0.708,0.095-1.047C21.725,5.214,21.379,5,21,5z" fill="currentColor" /> </svg> </div> </div> </div> </div> </div> </div> <div className="emotion-9" > <button className="chakra-button emotion-10" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields using custom tagName 1`] = ` .emotion-1 { margin-bottom: 1px; } .emotion-3 { margin-top: 3px; } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <div className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-1" role="group" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> <div className="emotion-3" > <button className="chakra-button emotion-4" disabled={false} type="submit" > Submit </button> </div> </div> `; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/test/__snapshots__/Object.test.tsx.snap�������������0000664�0000000�0000000�00000267107�14467713645�0031130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`object fields additionalProperties 1`] = ` .emotion-1 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-3 { display: grid; grid-gap: 2px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-6 { display: block; text-align: start; } .emotion-7 { margin-bottom: 1px; } .emotion-14 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-15 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-16 { justify-self: flex-end; } .emotion-17 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-20 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" > <div className="emotion-0" > <div className="form-group field field-string emotion-3" > <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <label className="chakra-form__label emotion-6" htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <input className="chakra-input emotion-7" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onFocus={[Function]} readOnly={false} required={false} type="text" /> </div> </div> <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <label className="chakra-form__label emotion-6" htmlFor="root_foo" id="root_foo-label" > foo </label> <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> </div> <div className="emotion-0" > <button aria-label="Remove" className="chakra-button emotion-14" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-15" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="emotion-16" > <button className="chakra-button object-property-expand emotion-17" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-18" > <svg aria-hidden={true} className="chakra-icon emotion-15" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> <div className="emotion-20" > <button className="chakra-button emotion-17" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields object 1`] = ` .emotion-1 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-4 { margin-bottom: 1px; } .emotion-5 { display: block; text-align: start; } .emotion-12 { margin-top: 3px; } .emotion-13 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" > <div className="emotion-0" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-4" role="group" > <label className="chakra-form__label emotion-5" htmlFor="root_a" id="root_a-label" > A </label> <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> <div className="emotion-0" > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-4" role="group" > <label className="chakra-form__label emotion-5" htmlFor="root_b" id="root_b-label" > B </label> <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> <div className="emotion-12" > <button className="chakra-button emotion-13" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields show add button and fields if additionalProperties is true and not an object 1`] = ` .emotion-1 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-3 { display: grid; grid-gap: 2px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-6 { display: block; text-align: start; } .emotion-7 { margin-bottom: 1px; } .emotion-14 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-15 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-16 { justify-self: flex-end; } .emotion-17 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-20 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" > <div className="emotion-0" > <div className="form-group field field-string emotion-3" > <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <label className="chakra-form__label emotion-6" htmlFor="root_additionalProperty-key" id="root_additionalProperty-key-label" > additionalProperty Key </label> <input className="chakra-input emotion-7" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} onFocus={[Function]} readOnly={false} required={false} type="text" /> </div> </div> <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <label className="chakra-form__label emotion-6" htmlFor="root_additionalProperty" id="root_additionalProperty-label" > additionalProperty </label> <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> </div> </div> <div className="emotion-0" > <button aria-label="Remove" className="chakra-button emotion-14" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-15" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="emotion-16" > <button className="chakra-button object-property-expand emotion-17" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-18" > <svg aria-hidden={true} className="chakra-icon emotion-15" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> <div className="emotion-20" > <button className="chakra-button emotion-17" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description additionalProperties 1`] = ` .emotion-1 { margin-top: 1px; margin-bottom: 4px; } .emotion-3 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-4 { margin-top: 2px; margin-bottom: 4px; } .emotion-5 { display: grid; grid-gap: 2px; margin-bottom: 4px; } .emotion-7 { display: grid; grid-gap: 2px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-10 { display: block; text-align: start; } .emotion-11 { margin-bottom: 1px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-19 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-20 { justify-self: flex-end; } .emotion-21 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-22 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-24 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" id="root__title" > <h5 className="chakra-heading emotion-0" > Test field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-3" /> </div> <p className="chakra-text emotion-4" id="root__description" > a test description </p> <div className="emotion-5" > <div className="emotion-0" > <div className="form-group field field-string emotion-7" > <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <label className="chakra-form__label emotion-10" htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <input className="chakra-input emotion-11" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onFocus={[Function]} readOnly={false} required={false} type="text" /> </div> </div> <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-10" htmlFor="root_foo" id="root_foo-label" > foo </label> <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> </div> <div className="emotion-0" > <button aria-label="Remove" className="chakra-button emotion-18" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-19" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="emotion-20" > <button className="chakra-button object-property-expand emotion-21" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-22" > <svg aria-hidden={true} className="chakra-icon emotion-19" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> <div className="emotion-24" > <button className="chakra-button emotion-21" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from both additionalProperties 1`] = ` .emotion-1 { margin-top: 1px; margin-bottom: 4px; } .emotion-3 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-4 { margin-top: 2px; margin-bottom: 4px; } .emotion-5 { display: grid; grid-gap: 2px; margin-bottom: 4px; } .emotion-7 { display: grid; grid-gap: 2px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-10 { display: block; text-align: start; } .emotion-11 { margin-bottom: 1px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-19 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-20 { justify-self: flex-end; } .emotion-21 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-22 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-24 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" id="root__title" > <h5 className="chakra-heading emotion-0" > My Field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-3" /> </div> <p className="chakra-text emotion-4" id="root__description" > a fancier description </p> <div className="emotion-5" > <div className="emotion-0" > <div className="form-group field field-string emotion-7" > <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <label className="chakra-form__label emotion-10" htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <input className="chakra-input emotion-11" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onFocus={[Function]} readOnly={false} required={false} type="text" /> </div> </div> <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-10" htmlFor="root_foo" id="root_foo-label" > foo </label> <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> </div> <div className="emotion-0" > <button aria-label="Remove" className="chakra-button emotion-18" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-19" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="emotion-20" > <button className="chakra-button object-property-expand emotion-21" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-22" > <svg aria-hidden={true} className="chakra-icon emotion-19" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> <div className="emotion-24" > <button className="chakra-button emotion-21" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from both object 1`] = ` .emotion-1 { margin-top: 1px; margin-bottom: 4px; } .emotion-3 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-4 { margin-top: 2px; margin-bottom: 4px; } .emotion-5 { display: grid; grid-gap: 2px; margin-bottom: 4px; } .emotion-8 { margin-bottom: 1px; } .emotion-9 { display: block; text-align: start; } .emotion-11 { margin-top: 2px; } .emotion-20 { margin-top: 3px; } .emotion-21 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" id="root__title" > <h5 className="chakra-heading emotion-0" > My Field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-3" /> </div> <p className="chakra-text emotion-4" id="root__description" > a fancier description </p> <div className="emotion-5" > <div className="emotion-0" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-8" role="group" > <label className="chakra-form__label emotion-9" htmlFor="root_a" id="root_a-label" > My Item A </label> <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> <p className="chakra-text emotion-11" > <p className="chakra-text emotion-4" id="root_a__description" > a fancier item A description </p> </p> </div> </div> </div> <div className="emotion-0" > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-8" role="group" > <label className="chakra-form__label emotion-9" htmlFor="root_b" id="root_b-label" > My Item B </label> <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> <p className="chakra-text emotion-11" > <p className="chakra-text emotion-4" id="root_b__description" > a fancier item B description </p> </p> </div> </div> </div> </div> </div> </div> <div className="emotion-20" > <button className="chakra-button emotion-21" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from uiSchema additionalProperties 1`] = ` .emotion-1 { margin-top: 1px; margin-bottom: 4px; } .emotion-3 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-4 { margin-top: 2px; margin-bottom: 4px; } .emotion-5 { display: grid; grid-gap: 2px; margin-bottom: 4px; } .emotion-7 { display: grid; grid-gap: 2px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-10 { display: block; text-align: start; } .emotion-11 { margin-bottom: 1px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-19 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-20 { justify-self: flex-end; } .emotion-21 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-22 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-24 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" id="root__title" > <h5 className="chakra-heading emotion-0" > My Field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-3" /> </div> <p className="chakra-text emotion-4" id="root__description" > a fancier description </p> <div className="emotion-5" > <div className="emotion-0" > <div className="form-group field field-string emotion-7" > <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <label className="chakra-form__label emotion-10" htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <input className="chakra-input emotion-11" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onFocus={[Function]} readOnly={false} required={false} type="text" /> </div> </div> <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-10" htmlFor="root_foo" id="root_foo-label" > foo </label> <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> </div> <div className="emotion-0" > <button aria-label="Remove" className="chakra-button emotion-18" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-19" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="emotion-20" > <button className="chakra-button object-property-expand emotion-21" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-22" > <svg aria-hidden={true} className="chakra-icon emotion-19" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> <div className="emotion-24" > <button className="chakra-button emotion-21" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from uiSchema object 1`] = ` .emotion-1 { margin-top: 1px; margin-bottom: 4px; } .emotion-3 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-4 { margin-top: 2px; margin-bottom: 4px; } .emotion-5 { display: grid; grid-gap: 2px; margin-bottom: 4px; } .emotion-8 { margin-bottom: 1px; } .emotion-9 { display: block; text-align: start; } .emotion-11 { margin-top: 2px; } .emotion-20 { margin-top: 3px; } .emotion-21 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" id="root__title" > <h5 className="chakra-heading emotion-0" > My Field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-3" /> </div> <p className="chakra-text emotion-4" id="root__description" > a fancier description </p> <div className="emotion-5" > <div className="emotion-0" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-8" role="group" > <label className="chakra-form__label emotion-9" htmlFor="root_a" id="root_a-label" > My Item A </label> <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> <p className="chakra-text emotion-11" > <p className="chakra-text emotion-4" id="root_a__description" > a fancier item A description </p> </p> </div> </div> </div> <div className="emotion-0" > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-8" role="group" > <label className="chakra-form__label emotion-9" htmlFor="root_b" id="root_b-label" > My Item B </label> <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> <p className="chakra-text emotion-11" > <p className="chakra-text emotion-4" id="root_b__description" > a fancier item B description </p> </p> </div> </div> </div> </div> </div> </div> <div className="emotion-20" > <button className="chakra-button emotion-21" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from uiSchema show add button and fields if additionalProperties is true and not an object 1`] = ` .emotion-1 { margin-top: 1px; margin-bottom: 4px; } .emotion-3 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-4 { margin-top: 2px; margin-bottom: 4px; } .emotion-5 { display: grid; grid-gap: 2px; margin-bottom: 4px; } .emotion-7 { display: grid; grid-gap: 2px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-10 { display: block; text-align: start; } .emotion-11 { margin-bottom: 1px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-19 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-20 { justify-self: flex-end; } .emotion-21 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-22 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-24 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" id="root__title" > <h5 className="chakra-heading emotion-0" > My Field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-3" /> </div> <p className="chakra-text emotion-4" id="root__description" > a fancier description </p> <div className="emotion-5" > <div className="emotion-0" > <div className="form-group field field-string emotion-7" > <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <label className="chakra-form__label emotion-10" htmlFor="root_additionalProperty-key" id="root_additionalProperty-key-label" > additionalProperty Key </label> <input className="chakra-input emotion-11" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} onFocus={[Function]} readOnly={false} required={false} type="text" /> </div> </div> <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-10" htmlFor="root_additionalProperty" id="root_additionalProperty-label" > additionalProperty </label> <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> </div> </div> <div className="emotion-0" > <button aria-label="Remove" className="chakra-button emotion-18" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-19" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="emotion-20" > <button className="chakra-button object-property-expand emotion-21" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-22" > <svg aria-hidden={true} className="chakra-icon emotion-19" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> <div className="emotion-24" > <button className="chakra-button emotion-21" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description object 1`] = ` .emotion-1 { margin-top: 1px; margin-bottom: 4px; } .emotion-3 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-4 { margin-top: 2px; margin-bottom: 4px; } .emotion-5 { display: grid; grid-gap: 2px; margin-bottom: 4px; } .emotion-8 { margin-bottom: 1px; } .emotion-9 { display: block; text-align: start; } .emotion-11 { margin-top: 2px; } .emotion-20 { margin-top: 3px; } .emotion-21 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" id="root__title" > <h5 className="chakra-heading emotion-0" > Test field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-3" /> </div> <p className="chakra-text emotion-4" id="root__description" > a test description </p> <div className="emotion-5" > <div className="emotion-0" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-8" role="group" > <label className="chakra-form__label emotion-9" htmlFor="root_a" id="root_a-label" > A </label> <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> <p className="chakra-text emotion-11" > <p className="chakra-text emotion-4" id="root_a__description" > A description </p> </p> </div> </div> </div> <div className="emotion-0" > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-8" role="group" > <label className="chakra-form__label emotion-9" htmlFor="root_b" id="root_b-label" > B </label> <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> <p className="chakra-text emotion-11" > <p className="chakra-text emotion-4" id="root_b__description" > B description </p> </p> </div> </div> </div> </div> </div> </div> <div className="emotion-20" > <button className="chakra-button emotion-21" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description show add button and fields if additionalProperties is true and not an object 1`] = ` .emotion-1 { margin-top: 1px; margin-bottom: 4px; } .emotion-3 { border: 0; border-bottom-width: 1px; width: 100%; } .emotion-4 { margin-top: 2px; margin-bottom: 4px; } .emotion-5 { display: grid; grid-gap: 2px; margin-bottom: 4px; } .emotion-7 { display: grid; grid-gap: 2px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-10 { display: block; text-align: start; } .emotion-11 { margin-bottom: 1px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-19 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-20 { justify-self: flex-end; } .emotion-21 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-22 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-24 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" id="root__title" > <h5 className="chakra-heading emotion-0" > Test field </h5> <hr aria-orientation="horizontal" className="chakra-divider emotion-3" /> </div> <p className="chakra-text emotion-4" id="root__description" > a test description </p> <div className="emotion-5" > <div className="emotion-0" > <div className="form-group field field-string emotion-7" > <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <label className="chakra-form__label emotion-10" htmlFor="root_additionalProperty-key" id="root_additionalProperty-key-label" > additionalProperty Key </label> <input className="chakra-input emotion-11" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} onFocus={[Function]} readOnly={false} required={false} type="text" /> </div> </div> <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-11" role="group" > <label className="chakra-form__label emotion-10" htmlFor="root_additionalProperty" id="root_additionalProperty-label" > additionalProperty </label> <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> </div> </div> <div className="emotion-0" > <button aria-label="Remove" className="chakra-button emotion-18" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-19" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="emotion-20" > <button className="chakra-button object-property-expand emotion-21" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-22" > <svg aria-hidden={true} className="chakra-icon emotion-19" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> <div className="emotion-24" > <button className="chakra-button emotion-21" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description with global label off additionalProperties 1`] = ` .emotion-1 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-3 { display: grid; grid-gap: 2px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-6 { display: block; text-align: start; } .emotion-7 { margin-bottom: 1px; } .emotion-13 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-14 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-15 { justify-self: flex-end; } .emotion-16 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-17 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-19 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" > <div className="emotion-0" > <div className="form-group field field-string emotion-3" > <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <label className="chakra-form__label emotion-6" htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <input className="chakra-input emotion-7" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onFocus={[Function]} readOnly={false} required={false} type="text" /> </div> </div> <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> </div> <div className="emotion-0" > <button aria-label="Remove" className="chakra-button emotion-13" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-14" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="emotion-15" > <button className="chakra-button object-property-expand emotion-16" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-17" > <svg aria-hidden={true} className="chakra-icon emotion-14" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> <div className="emotion-19" > <button className="chakra-button emotion-16" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description with global label off object 1`] = ` .emotion-1 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-4 { margin-bottom: 1px; } .emotion-10 { margin-top: 3px; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" > <div className="emotion-0" > <div className="form-group field field-string" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-4" role="group" > <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> <div className="emotion-0" > <div className="form-group field field-number" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-4" role="group" > <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> <div className="emotion-10" > <button className="chakra-button emotion-11" disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description with global label off show add button and fields if additionalProperties is true and not an object 1`] = ` .emotion-1 { display: grid; grid-gap: 6px; margin-bottom: 4px; } .emotion-3 { display: grid; grid-gap: 2px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-6 { display: block; text-align: start; } .emotion-7 { margin-bottom: 1px; } .emotion-13 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; padding: 0px; } .emotion-14 { width: 1em; height: 1em; display: inline-block; line-height: 1em; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; color: currentColor; vertical-align: middle; } .emotion-15 { justify-self: flex-end; } .emotion-16 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-appearance: none; -moz-appearance: none; -ms-appearance: none; appearance: none; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; position: relative; white-space: nowrap; vertical-align: middle; outline: 2px solid transparent; outline-offset: 2px; width: auto; } .emotion-17 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-self: center; -ms-flex-item-align: center; align-self: center; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-margin-end: 0.5rem; margin-inline-end: 0.5rem; } .emotion-19 { margin-top: 3px; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="chakra-form-control emotion-0" role="group" > <div className="emotion-1" > <div className="emotion-0" > <div className="form-group field field-string emotion-3" > <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <label className="chakra-form__label emotion-6" htmlFor="root_additionalProperty-key" id="root_additionalProperty-key-label" > additionalProperty Key </label> <input className="chakra-input emotion-7" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} onFocus={[Function]} readOnly={false} required={false} type="text" /> </div> </div> <div className="emotion-0" > <div className="chakra-form-control emotion-0" role="group" > <div className="chakra-form-control emotion-7" role="group" > <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" autoFocus={false} className="chakra-input emotion-0" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> </div> </div> <div className="emotion-0" > <button aria-label="Remove" className="chakra-button emotion-13" disabled={false} onClick={[Function]} title="Remove" type="button" > <svg aria-hidden={true} className="chakra-icon emotion-14" focusable={false} viewBox="0 0 24 24" > <g fill="currentColor" > <path d="M19.452 7.5H4.547a.5.5 0 00-.5.545l1.287 14.136A2 2 0 007.326 24h9.347a2 2 0 001.992-1.819L19.95 8.045a.5.5 0 00-.129-.382.5.5 0 00-.369-.163zm-9.2 13a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zm5 0a.75.75 0 01-1.5 0v-9a.75.75 0 011.5 0zM22 4h-4.75a.25.25 0 01-.25-.25V2.5A2.5 2.5 0 0014.5 0h-5A2.5 2.5 0 007 2.5v1.25a.25.25 0 01-.25.25H2a1 1 0 000 2h20a1 1 0 000-2zM9 3.75V2.5a.5.5 0 01.5-.5h5a.5.5 0 01.5.5v1.25a.25.25 0 01-.25.25h-5.5A.25.25 0 019 3.75z" /> </g> </svg> </button> </div> </div> </div> <div className="emotion-15" > <button className="chakra-button object-property-expand emotion-16" disabled={false} onClick={[Function]} type="button" > <span className="chakra-button__icon emotion-17" > <svg aria-hidden={true} className="chakra-icon emotion-14" focusable={false} viewBox="0 0 24 24" > <path d="M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z" fill="currentColor" /> </svg> </span> Add Item </button> </div> </div> </div> </div> <div className="emotion-19" > <button className="chakra-button emotion-16" disabled={false} type="submit" > Submit </button> </div> </form> `; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/chakra-ui/tsconfig.json���������������������������������������0000664�0000000�0000000�00000000754�14467713645�0024147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": "../../tsconfig.base.json", "include": ["src"], "compilerOptions": { "rootDir": "./src", "outDir": "./lib", "baseUrl": "./", "jsx": "react-jsx", // There are type errors in @chakra-ui/menu type definitions because of which skipLibCheck had to be added // @chakra-ui/menu/dist/declarations/src/use-menu.d.ts:986:61 - error TS2694: Namespace '"node_modules/csstype/index".Property' has no exported member 'ColorAdjust'. "skipLibCheck": true } } ��������������������react-jsonschema-form-5.12.1/packages/core/���������������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0020516�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/.eslintrc������������������������������������������������0000664�0000000�0000000�00000000164�14467713645�0022343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": ["../../.eslintrc-typescript"], "plugins": ["@typescript-eslint", "jsx-a11y", "react", "import"] } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/.npmignore�����������������������������������������������0000664�0000000�0000000�00000000005�14467713645�0022510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������src/ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/README.md������������������������������������������������0000664�0000000�0000000�00000007264�14467713645�0022006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[![Build Status][build-shield]][build-url] [![npm][npm-shield]][npm-url] [![npm downloads][npm-dl-shield]][npm-dl-url] [![Contributors][contributors-shield]][contributors-url] [![Apache 2.0 License][license-shield]][license-url] <br /> <p align="center"> <a href="https://github.com/rjsf-team/react-jsonschema-form"> <img src="https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/core/logo.png" alt="Logo" width="180" height="120"> </a> <h3 align="center">@rjsf/core</h3> <p align="center"> Core logic and classic Bootstrap 3 theme for <a href="https://github.com/rjsf-team/react-jsonschema-form/"><code>react-jsonschema-form</code></a>. <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/docs/"><strong>Explore the docs »</strong></a> <br /> <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/">View Playground</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Report Bug</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Request Feature</a> </p> </p> <!-- TABLE OF CONTENTS --> ## Table of Contents - [Table of Contents](#table-of-contents) - [About The Project](#about-the-project) - [Built With](#built-with) - [Getting Started](#getting-started) - [Prerequisites](#prerequisites) - [Installation](#installation) - [Usage](#usage) - [Roadmap](#roadmap) - [Contributing](#contributing) - [Contact](#contact) <!-- ABOUT THE PROJECT --> ## About The Project Core logic and classic Bootstrap 3 theme for `react-jsonschema-form`. ### Built With - [react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form/) - [Bootstrap 3](https://getbootstrap.com/docs/3.3/) <!-- GETTING STARTED --> ## Getting Started ### Prerequisites - `Bootstrap 3` To use the default Bootstrap 3 theme, add a Bootstrap 3 CSS tag to your HTML page: ```html <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" /> ``` ### Installation ```sh npm install @rjsf/core ``` ## Usage ```javascript import Form from '@rjsf/core'; ``` <!-- ROADMAP --> ## Roadmap See the general [open issues](https://github.com/rjsf-team/react-jsonschema-form/issues). <!-- CONTRIBUTING --> ## Contributing Read our [contributors' guide](https://rjsf-team.github.io/react-jsonschema-form/docs/contributing/) to get started. <!-- CONTACT --> ## Contact rjsf team: [https://github.com/orgs/rjsf-team/people](https://github.com/orgs/rjsf-team/people) GitHub repository: [https://github.com/rjsf-team/react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form) <!-- MARKDOWN LINKS & IMAGES --> <!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --> [build-shield]: https://github.com/rjsf-team/react-jsonschema-form/workflows/CI/badge.svg [build-url]: https://github.com/rjsf-team/react-jsonschema-form/actions [contributors-shield]: https://img.shields.io/github/contributors/rjsf-team/react-jsonschema-form.svg [contributors-url]: https://github.com/rjsf-team/react-jsonschema-form/graphs/contributors [license-shield]: https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat-square [license-url]: https://choosealicense.com/licenses/apache-2.0/ [npm-shield]: https://img.shields.io/npm/v/@rjsf/core/latest.svg?style=flat-square [npm-url]: https://www.npmjs.com/package/@rjsf/core [npm-dl-shield]: https://img.shields.io/npm/dm/@rjsf/core.svg?style=flat-square [npm-dl-url]: https://www.npmjs.com/package/@rjsf/core [product-screenshot]: https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/core/screenshot.png ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/babel.config.js������������������������������������������0000664�0000000�0000000�00000000126�14467713645�0023364�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const defaultConfig = require('../../babel.config'); module.exports = defaultConfig; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/jest.config.js�������������������������������������������0000664�0000000�0000000�00000000336�14467713645�0023267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������module.exports = { verbose: true, testEnvironment: 'jsdom', setupFilesAfterEnv: ['./test/setup-jest-env.js'], testMatch: ['**/test/**/*.test.[jt]s?(x)'], transformIgnorePatterns: [`/node_modules/(?!nanoid)`], }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/logo.png�������������������������������������������������0000664�0000000�0000000�00000266117�14467713645�0022201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��D�����ʹ6d���sRGB���� pHYs�� �� ���'iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xmp="http://ns.adobe.com/xap/1.0/"> <tiff:ResolutionUnit>2</tiff:ResolutionUnit> <tiff:Compression>0</tiff:Compression> <tiff:XResolution>72</tiff:XResolution> <tiff:Orientation>1</tiff:Orientation> <tiff:YResolution>72</tiff:YResolution> <exif:PixelXDimension>1092</exif:PixelXDimension> <exif:ColorSpace>1</exif:ColorSpace> <exif:PixelYDimension>709</exif:PixelYDimension> <dc:subject> <rdf:Bag/> </dc:subject> <xmp:ModifyDate>2019-07-13T14:07:27</xmp:ModifyDate> <xmp:CreatorTool>Pixelmator 3.8.5</xmp:CreatorTool> </rdf:Description> </rdf:RDF> </x:xmpmeta> x$��@�IDATx Uŕ[B+Q1:1F%Ql3f3Y&q2ٜ,N81mI 긏ƨD.n-{k4֭:S}9=UuέeA:D?$at0b믏܈p0UV [ }_7X)[tO/aJ2m\i?, :K>_U$HH !sN!fo5'85Qd &|ڵe;T~fqWD@D@D UriiE;" :R@ԡ. H`qoc{*mbﭜ0\Qz( 9D2$}nIr}VBG"&2B̹=RB .|:j'[;3!" " " !!j%N o~>p5#ǯҀ"uICUCGJc*=C7;ID@D@D@! H#j~J*;kBjP)#dF`Ĉ(;v03\F@7*:'" " " C$k$ yp/a9y?E �w755iCrwB7R?U~U" " " "P9DjR# ?r憔Pʿ N9<eH#@"䭀!@TrDߧ[s+yL 35R`�oCDDЇYJ_濱Ѷ9N! OU1Ť"鵕ЯYEi%)"  yT:%${+Fz!`::D@D`bV!\Ge[4![?Odid#i!"7[$=goΥ%"y" " " " C$6s1ͫ" E$`#BJui*bTD@D@D@D#9Dj'o%k,ݖa3t.auU/nY[W& H8Fa i|6]BGIخ1V_Id@x \|)ΛU߫ E@$#YTӨ0H0I%(%)NgIr%HFV9_O'W)lib0XQI c%IP" " " " " "P`X^oժU_&'tIC&W$wޑLR%" " " " "  i!&: @@GgTx0?~4Fk,ݝ9DRBv:BἕQ!fb"@kk4:Oi޴ΐ4E74:'" " " " " K|;Xan u0A =aV" " " " " "6*pV}Ѹ%0SJ6Q~A!LW`菝H쿂 P! mmQxjp " " " " " }_v<NMQ!YT+."J] " " " " " "�N!sI@f enx|6ҎM H.~-yĔr$cr*㪻ZWE.֣KMKO@Ÿ_(\_!X2E@D@D@D@D@D@&SdCF+ |I@kͰp.@�Ȗ`?H"Z22~~I�<NI+# H`8#C.22}U@q~3-reue(DC'D@D@D@D@D@D@&`9~#V!Y78RMD@D@D@D@D@D8E&\"КW!v <s(<*S^[R+" " " F'J(tYjJYuҵ6-]YT~0Teu XlMxڄ^{aSG$1l`! U <=~.R#]*F@!2` TQ|zG3c 7g:} :Ͽgi:T  pU< @(J._NX-:U|z׎Qp0'p4'&]Yfaq=E|1r4/\~N#.iT8Q,$Ov1,s| ϗ# 6lŋ_9@tC6K.ݕK L R藜O}��9D0B7vm @_tROr?˃\e" " " " " i@;v#iO4ݍUTt kN?NG4=_p|t:::6o8{lDFl %---/-\~uLnkpN{{ Q[2bss:N{MCyDj>+eͱma#A%]CD  ϻ?6$fh3x_\ٿ^>:�CD {؁h[6|߆NmmmmOa?F9~#M"!"P|)SA=#ɶ$.jcN|ڨ; w? E&"P/Q؟Z>Fԕ̙/;4n*w pEt %)"q[gg8*Pm]@XYA];rml tw~ewBlU[l7˵+X39HBPV"P39a')6Jl$eKtJC$koaDQ r8fرi}3Hh B]32BQ<I0Lj9J'L"@!GA[\thu%&3z9G]RL6.9vHneJ8i(\]S>F~4[7CD {6 S?S^g4zD!"@kkH:䇨q:7}glYtڶ>}DD-"�t>&oDt FcZ2k\O:9"@E QPFw!iubez[4F._ϠOG 馎QjgY[QCY ؆m7AܲHX{3iԴC$"m=$k[U@p4ˉi(PS6:0[#f(Vz) wz) e6TJgNѳ> M)ꘅNEO".Q9Dji>hP<` UD tZ!]ʚPʃ:Ɯ#vɤ, Jt#i O< PzCaVs1rutt,'#" PG,YҶ(§#Gr(<m;ƜBz~LP.adNP(;|.x/T';}u fMw'K !NP,8~:'" !Si|&i 'D^rKC$m>eljQGB,"Pd[h(r"Hur:xx�"N!!0t|IBn{eH]r=4Ho(�Po+!$b5:"`> XQ9" #a>A@F %/P3:ƕێ^'[W@Lnk.<<Nr`f�_jGN@.eqaqF֑#vwQd);t?;i MG뽧E@&4JP7W*QOɛޟ"PʋO?BPG!Ws8,ꅏN@&Rr#贼IΠAr[LN=54N`-w%L#23Ä3ZZZ~pGD 68Q?O(Q>l�k\U)M"x(Ev;t0*j_S896ؐ">|3$$e]:O>t6]ΐ�9�~꯯9�gE;HmD> d؎aˈˁD(Z <A;i_)hm Fo&  nKH4/4BG@ssHvG9κבfNs!#rH9ys.1\Nްy:'pgZhImys|w_]Fl){{!iF!9#+</rogSq|"i!ŖaK j 9Qp('{c͠. \8C:ΔC$gYdqT66,흼^D"7v*/)J ؎18BEM'B-Fqm+l![_K[(kU:$?+jL~WKbܶYlHr`;]:D@#`ΐ#.JŔ73rCVq*M6]_&@}q'"A( `/m{wYWJ;UV#D5ܮޝ! |oޑ3$qSKjZC=!yC#gHk}lGkZnT2 `Sf>%ף3j 2C5Q!R qyZ2b I<z lu+^LPԇټki{T:S +xi"JC) :ki굣MYC7nj`̘1/^HiH8ʖ2!MUh"kBЮ4H?cm[K\м߯\\0gŸ {oJ·MNvơ}i9CYMLv"!)[ݰ}3W"'|R/:;V:D@#`Sg> "]"kcPp;"й,!,"`;D̛77-eSKu8;KkN8,?)뙯^"=ө"9m=6Ki9EF59#n~N"%F O:$Rg>šK D[C`(@;<s[ʓrzv-*WʕZJ0s <x:c,h8F?H� (zE+e$pʘ𲤙zskll#f755YHE� 9CBTwBF])"hik};x.Fw"9̆"N<mFD@Y\g^3%[ Jb,?\D޸`[(m_~埖 JD))S.Zqu@[%kg-]ZӬE@%0m(gG26=X>V/#Jt%z p*>cH&E1)TQ"rWɪ˴HjϷ2nIRkVy" 8'@]`[jĕs;6>FXLNWG P,!jc8( y#6$3gbSDp9jaT$~gK[ PsC`[_w Fu)978q vUΐLMM>;,%#0v؋(w˼%qnq+ 2::oC" s>_LGhuJ\kUz`x+9_HЋٷG L%�VZ;E9C."<3p*uE=`ZmlA\<C\)-eE ]'tZkG7NHGqlKR `o%ݵcS(b{i֜NA;),H`cw,"H4~E:]EZ2 }diVrk$`3|eXTMy<0!ܪBX6(N>1)\D@2"y=enIF . + -'#[d.ab}u4@HQDk(1|4u𹂰mSG{#>7Jؒ:j$�pM5ު Lh*lA^7GH}f3fy^@X ;{$m.sZ1egL3'Z8@]Qz+ť8$@]k㜩~9әnԕC$~#ËNָ.F$%VŰ* s_CG>:'s&vf-Պ6a…gⱹi;ybRk;t?'Nxʼyt[qdOFno 6;0${ c$OFz[n!UH6.ȱW._kx(J [TڿlM[K!vd9d`{c栱<Iф _V:juL7?Ο(Ε6m;nHF]qcq(}XE$Q!I: 738HriS )OYB:E@EOn }mՑ17!t]e2y H3;at.M9M˩Fi R[P;iUSKݖE5ReT7 CZE^}WW/ᾫ6.QvD*B}(�;s}$IE UwΩ*ׇ^6z_i9D76с/K  6w4u4n!:4gBDSѵ˗/?PKcR1>x`CdE@B*8ȓ ))pVªHc8YINAw3ia6"P,?T1Z(?xً(TM#zt3ěoRxhMOB}&$ 1C2y3i|l硜>Kvۚpy֑JG_#PT*e06裷~64egaY_BCDju7SI@P-MY;xً!R_ y֨9-XuvK-tByV>6}Ňa84Bi)0ůTG>!vlMqfرH�[oܰy6 `pE)~'Lq'$C5B$ȸFH3z.!q3cBD>K9m1joDгm;B{㳕V f'N~tSG@ <AS̉#�5@튒;뻇O*nJGHˑA]ddSQR1e:?V nuXi!t_A:2&0yM`|:gJ f|,j Od7zt^NnL7s}iduC"�u_E&b9Dp[@\WGKCUƥbKաi]Jo!{PJ)#M6=aOdкXysS -dO3Hg[Hl[܇ YcPGG8?g2 (#ED(czJ~'xG4+_"hpO2uy_c<XCOҬACi4=y0^cN`z;<[_"D;|{iNgi?`#ϒ8vՎL* Pϩ$.NhԒP`J!Ƞ,8wdDK#U": Vyā.Q&~^`f o^;pC^Qȣ N+(= G O(|DͩX8|N9 ȇ*1nMpwuߤYC%>9D@( a@Qб` A9>RgHF)a>[_cxKT:;=t'p-L#.~d-[EO*I܊B(_F9r?}64w( 0 gIC$ �բĹjAUӹS'C C#uyP{&N-|gE ?nH\=;ihu2̮!,7Wq8B>ͧ9BN#Tc H(&V':KXgPW@f] ! m L MJ!=Kh1]a.|]vIbx|(V8E|n[_;VFF(rI!NQFY=SB ^'4G8Z[W?lZ !1Юx;;뻇O*XcIЙP*I,]ʼ@0LjLWW{O ܀@w}mcʈ5v9s_U''¯tNGJҡph=,Q^!RME$ZBTj%#tB\O曟"ia}/AjiڨB&DEaranss)uk({&k qQDERDKuڥcniRR{Jrf *R(8 k& w[쳕V N=H%=A@ iDz,"l$x4(򖟇< xds Oy;ߞmƦD@V? F0"Z4D\eX*P(Z(4:3RH z=nHA:0qĞ_i!UDQl:tf޼yVFo!3 Em#+@#GV:Z.63jwe56H9DYբ7TOCE&O IýΚDul:M;(tЁoh$�ϑ/w.u7v0M*w HXa[sVkezHjI/l7=yxCtGz[#^GJUNNֻ(Vΐ- zpl= ,{c:Ӈ1;I׻ ކWkR;Ne$uO'i:}eI^a 6qI6i:HzKы^pju11Ր (F�j+;#Xc74DV޿ٍ̿ښxE϶-(:7A&gHY;䟳xaojFכV'9ٔF"L="\CvVϖb+>mm!yg!]S 0iDڿa{δ0ρ- 70IT+n2 Y u?)pWҖrZg{۹'ځݛ/_^QjѠJ FU9D˜ʸzb޾ 'ӁIq)9|tv4_# }gXDHZn%E[/B3 U=A <˂J"rt8t@mWG5!�رc>b(EfQ,0aBFzq\?`犑5 7c֜qDZ;+BFz=ĩmt[c<_xK旓#V"Pb+7;ʡLU))d=9DXaŮ3Q4B$@>P'!B'"]Rx 'm77V&]/nڽ]܄?gw!:e%8O5jN6]+ZI6{uUdqL6:1-$4>~rL!&(ւh;yt�[_M==  y7miZ=ӝ=mZ0FMBy87#^U]).Bˊ<z׃r+ea0(V(&;q!te1՛Im|wESOTtS|>N<'tJ_wEoWJxc -Z/@a_hb]+"?K"mڌ !!nQy!"Z_E tZ!kKDs>_)Xpr:M'1�lT"8lMh`iag– T*SgsnAo}OP DN~<!?[Vߪgh% D,VoA0X!@8C=/FW]j 4:-BZaKlXkIË ^@QmkH�KbG|[tdCl-sTAr1+;M k HQ�ˉ ؂ԯ^ 1ZĦ,[VOd/ʡdG ON-#2* .ҐiLHl){W@sj1,l8D^,f55vG QPˮͮ_E[nƞiSCg3VrC""3Afw>o!Cq!Gގ {ձSPD`  tAb{g&o]uYIg* 'Z@Ix#o( $2Z+t!<=a8DlY+9e#(,`bBL0"fWPE߷t@9D\D/qJ\yh!Rau3&:R[[[od7D&%mH~NŸN$d݌&P\ 3rm& uQGQQNu\3F毐 4SV86AL"UY]q@MhZg&AgO6 0g_D}p#8gv92w#aɬ_{&,?&ݙio5>,D-u$Yu9-r믿.H|XG`<ёuvMtQ� |Cy_ w{`SIin!{<o;'Y"P`Û'y:Ӭ(F %=D.SID KֱqભSف5JQt6o#.{&N݋EpzL[o [L-"zҢA@:o@I@7ro'mz_c AtҹW ,"!Hq`4F[I?sOzu6؁`j�)HUF|9DdD`� �!¼EVjR&@fׁ w;]#!xgiQtZ~�~8Bk/kߝq7FɎ�1J6>,!Ms"aL-bbSYSdBؖ'ѩvJ^UImf;Vy}.PoG*(2#020hr}.oxrd ct9yo`!;AShȯCpho/w�%7vZNz?Fz?]5Sau'J@x{{|ZQPՋTO`;:<QL|U,�p.4Qol#e Gψ>ⱝn}?a>ϳWV fM֬#%>ʍFL׊@tg";cDmgsaH]qR2t)ɤe#dG!RzV:n2䶶Lr3!jjĪ80z„C4カKT"Kp?\ c֓ez |]TW�b"@}1KvT qC>XUƄ?SmB4SIϟ[6eJlrҏzvEqSʏF4d~Fde&:kr( XޮSd'csf_yS]?CxwZݺ` /DsRRF1bӂ1UrD o)7#A"| !mbj91Kv25jԾ䇙hT"8EБEp(~;p䇨KI""Mo UF季ABV1toL{#}4s[CjM.J[u! З[M)D@'[?U?~w $q񶨪Օn l6q8"͵ߙC} SAּ&t$=I&L,I%T4䋨;R5Z%XA[?I"ls| (`q1SCl1âd'K2Ǿбbp]#~dz+y u:#s+`RVDQ+@M@yd[FU>򊧐u s ib%jmJb%+njD؛7j")%ؼQ>b]E 8-ꭟơp2baXEt&W.yX/E%`[NnkNIVy5ΐU!2HLe!y%!sDE/E'?Rf"$\ei]Aosn;}u|x<_qȟDX:h=!Ϙ.t,$e5.\heو:~>ELD@&\f kZ!~S>Zb1K/h:ž4ᳳ_{"@މ洶[[[Gz%]E@'4oӝj gW0&S"7:HQU)3}GNv:i{4w>k2FSC?D Ǫ,%͋ Z)bȇ~ҼDNJ HCxm(A?_"C"d{RV:gq][ǽgqO-C$4jN7[Hp&rd1h%:oCZQ"OR'[l0@y" G}/:Kt:<uczF"P7^qc,o;0@mm~6 %@T `aa;'5*FǕÇ?Oİd�[GCn[JNC2+rS15D@"c1*}G>f]tߪY"ځfР>.^H/v)U^e)0PzC{)xl;!/t^_?Z qI*46BF>YKkEq>8:>rI@86᭏邫:mh<,(Eo,V[7}?^ t@ԣ7ΐ<>ƽ߯~#ՏnKDoC$9 �(] gMa0(VO^64!?89E։.#Lg/[�ӯ^&E[r "P7O o;m<oC$ mWU#DdZ ,"0R.NM3uٺ !J)I@eU)XS)C@Mxz!jMUC*L5_do <9E4ef놲r"<2pn遅 Y@x#n ,Jы@i3QS28'SMC$ؕSuS2Dr!! tx{?N )$i8G-[GmaUڜ#G\)xZTS23Hp=-ziX8)f�Sʆr:S 67aTj8EN"|]2�q SYũxD`�1Gl4n[DoA}O9D9^!((B3Ӕ(�0opg_T>) ,({XD- xy_r2)3> D}szЧiGs#rԶΛ7OCqI�G"}"4O d%9D@DɃ7$, ~{J;8±祝1:?};R{"Pi(!OϺȎ9D7kn<xQ E+ P>bvS7ES4' aY輻'k!!2ghBd#%"#kL^R}xĸ{ XItE *OuI]uS:*s3ѨvM$ TݺC&uݝKX78( xEg")x9Dr3SEy @ vCd�l Έq&Mb! ~ab<-$db/o%W"i|ԑhYO-9DYS'PpS";ʕ")q#0J2%DhkT)LN@H_|Ւ6MV!R%:.Ta " ZOn6qbCf 74mMcKDܺ|+ jq!R5/Я^MWf*Z!R -][6QWoz߂J|'퀴K G~()72f9iFv&mzЯWi'!BcQ'JjF!7o'jIh\w Nn%Ŕ[ZZ 7 Ɖ ʠfgHrҘ9vKsA+�IJ&JOVN6R$AQߺM:mH%0RKN.\mmCCW+r2M9CY\#Dd7 @CG!iXh)~H+~=){#FؔD\3d+18EukM@5bJF&6ŮFӘjV4f-0eFGrjҥK1]CQJoi vHYQڬ7@Ո_]#D0v_!{๪ 7bD c7k&`𹄃2b(I\ bRXrZSC$\>P tOR L<Gp8F,F)C?d>CD@D8Kr2e7hS"?84ry.IOf)![njj:tI vZ#D4> !'.2i7Sfnj= B(rQ"u̳翚i�3:[C_|"2'{&!O2D R"  �բ4PAe BV@)3z�(VpQ?%߃\" @m<+%Y39D"@]6 W�L �P+Qʰ*pS"6v`muK#T}pGg?vG:#^lIQvL M0Ooii$r3)3ކk��@�IDATbnj,zXwCq T:?UV‼ˇWy.5xVD78VQF_D@"(؎̪xFpBU"ճJo�j5 ~lԠdl +cKKv 7M&YyZotYN n�/<tר{_^dt"Y h G o g͂'ͲOj9֙3mb"P أb?jakE ]nk2ЪZ9DjU˥`Z kD vY.SH1N{STΙNǣ,uf@ɨ7q/ 0BS79B@ LBd5E+o/4zWdO8B~D~GQ6RWݺlX8攙ϩZ-&8>>)}1/C$4<y c4rc74utl2}b Ag6}ũ3|=n=* s4pILJ�/<!)3"Vu- !M 7o/Ʀ_yAykDq2|CĕǽpƐꋑ5Y�[F̺:޷} ,rwӯ5aC$hyiLRLiHL/{*s7*z~Z.yxNv4r۽'u/*h#D(G(E5;&ptܿrϧi@yz@y6d,5x볾\'<g@=MG݄[[Pkݟ0v<u&3"0hy9"hh{<+K!7<7<BLQ:hF}��TlDssH(\JƯ><+?^d"4BO?FE??nO?9DZESfU"@ggg�W&m:;8o1!?|-q /_6rd|VFXvюK"~!֪29taE`mQ"t(cu\~%A3@$G O\y8DN'dMmǛ9Pd+ce=3 ;H �)7t]Rkt}uS]Wyأk7uM"R!rdkb=wpi=mZ˨r߿n"Eϩ*r#027I ޹ DO3r5^nb: bT<}/9D]nkjj:AkX=?i=sRraz˅@ԩzZ.`$D' 9De&9DDBk2.d(̇PԆ:4t"IL+ b)P\\wUtgT#/5* TE#q"#xJSG#29DDr3LSD:VwYFNmk̑2mkS@hNΐ' 3SĦh<gΌ9_e44$G/"�Ս(K^t"-i#LQ@=9a=+45*ĴߓN9Ք4t|"#=Wm{tyFȡΜ`qDu ?>yHA臀NLCC6"^0zڤ�ߥ&F!ִF�:K9 8BVBǹYYK^"goN@q+ PF7%^x;;;=+`]"aiʌiX)vX�؍ͱj3% )Ӊ#dCx}=+ GCğe8n~}Sq!fZ5U!(K!EFO(!0/(j *55d~XM.Qqb/,L7k\EX\`agTK4J0O9D5x!N{ʸ2M؍:?N:XVh<6uCRwTI"ṛzaYbl,غH~~{::W$B9@8>=+"ZI7ܺ'iw] obɨlz)u򘔡$L8D2OʢF8tkҞuX\Ȁ V2H腀"@ox2 ZTՅ.)3ئ%K΢3sjzuׇxKkkG紷h]Ov'Eϯ$ʐf'sDS&GQ@xy1!jn"<=U aEV~ǩjH;]T3yE[#D)4wNatxHr?<%}" t~M؟r4Ư߻[ZZ<y4e_k2 ?>|LpL'ɷCYLrF`4=lqs.Lj("ݜ4@:<"I)07[C$`FC$ ܅ .APDQ[%QU\hyQ&e,;Nosu0PP : o1$]Rq¦ ۴8Hjhř"JӖnfx,6<Cg=1% @" hoP5no:,;%RYb8|+ mwgJ:R&^a-%%zmũsΫN~S6Nid `TD wE2w#f$P@à=U _"="Լ9T)Q>:̑W<ys\pEE25MH*T%u#|u7-l|><?U%HUf"n*H&(jaQ+!ջĜ]ՙE}L sD[赚T׵j5|]"k(|=My%d'J!P4܌Ֆ[Nы:K.ft3C͔@Gru\PNV{_rFC/̺uer }=IdDJFfF{ڨ]NC$ɒ~c#<=TOK=Z{@tAӉ 󺞎\7ӑF0*Fܜh<!̈́?677 )GqFs'8j:#"0^q0C$U<y<yJ[ND`m /2r<4-:: "])r7~g#0x'utt2W0hӍ)C%L@ x!B vwYG&m f?fS"60ެܢEN繰[jz`;$nv1K4ގ<p$ZӦ#QM>\JRHj#E0Y<-PZF*̄U ݚ52/?IYY:X)8ns_cJm{@'緑HL$1tR.J\j 5ٌfCVh5\/H ͔gs4n ,y<Y}]798ilQJױ*b3SfWuCM z|W:vFd`GEQN�p3B OzMr{O#D<U -E`]4~#BWf5KgF)0UeyV]T_z=A=lC<1]\Y[d궈Z#DLv uKmBdwލCՖb* ĞMCJ[%tKڎ2[&Z0mZ7RM2OU?7Qag}kD@ E0e] `FCzU]OsT U%"@ԅ&8!ªa:v;4cON6KwHI>C{}(zmyz<C%5DHdHJ9DMbo9Ih>T?y]%Qg_:TP2t97!}Qߜ:*fʙ~UD- PLQv-u/ l2LqMl^z%@y~?r:I[Xg f:ДA\A n;y>GU[ye8a&;LUGwŽ<; }ܼf%<9D[S֔A|x(t1u Lmke[%z٩*B9|xgБ\",$dɒeK|!C3(,].y t" H ݢ4BdX7UD`]hGK몥3)u̓엒Nua-u?WOV9ElTاRUNz�y(j]L8=%]f 9D›d o&I~+]dT'bTn6:hBg:֋o×Ci$~?ġ{!CX Ʈ)3""///=%rLKK'Mы@xuaUG}+'aӑ!g+Nc)k0HvyhC"nN>bMI7{H3(. -Hd-ps~…)p.VmǛr#a"1զnSdN`Gυ{"ʨk,z4YW rt&6·[҃br[[k""P#z&Hr9DϞcXMRDtRCνS <|_e^Om9{Z"Gӹ\jSGۗRկzuttlG]^?2],F4DEU#f 9D1S$Ez!r:Sj}nө.p "AOa;s$*e;z" &1:䉹1K8ƽ#f 9D1N.*|L&)";G<E]R;ng9tPbH&ykf tmM󓩦z=kNUDzE9l̕^Ț�N["k!BK 9@yl4)|8ΥlIϞNdi{ S.9sˢME�[:uԑ9'WD YK?X/4Bnq&F~Ej(xtNtPowAKŴLyd*VMMΟoz{f n`qXfl%2^~)S^nețM.75?>?MEA%fqiHLH{,<\zK?ޔC7*ٟ!= ( 1ۇJ]cɖ5)_}iw6$j҉E59d7&؛2DFU~w926✽M[s<kw}!|a˰0[UοWqg.Jm ή4.6u*:ތwtD `^~-#^-[~wKdE�gț+x# 9D튚X]?SC$eHd)Fi4}vG1Y:t)`-[|찖 %3Ku'6Ls7=ww;׮tw{5Yt5j z5 | ģUɕ4BCKA@sD/^:-n*@A}yKupKçahS¦NN%K~EՏihQ!E\JWܼb-<,9D&{|^!һtV"ӇhF}CRJ?f#B'\@KJJ)FEu ?C>SLp~d<k6(YSfX핹\:x6*QpH U-cm,U)oEoc/\ l¸-cֹ]f:#-ZD,JSȟg?sY?B޴:iSy_h88żDQwZ'Y"PP"ZC$p&C$0J^ !Oh9D1XkjjښnEr ϢC8Z7Yc׹5'E"@m&LA% k.9{>y1&Q́bQ<CQaO?U\vO5 / آ᱌X3*-8JPpt*(:<:"`;lCkVc`'9߫o]Z{-络%Lp|>0GOzdi̾NǠA .FF&erd#![H`r\ޓg|')" : wY"At!wmwM56i-MMog٥CW(3H]v2}tov)9�,1FK<F:}ΐbɗ\( ʒ  آ!Us�;8G:Dl Im%LgWW$f@&@)9ržV֬'SGVrF<G(p\t?uyc "P<M)9FC$ ZhX "II Y c`1AL;|D1-[L@:(6ud8Rw*^o%!'=HbEȿ-<). қp$QxzoBRS,3SF676SHdJt 4"qg Gv(3]}GBk9bv6p(^i̮7s%P7<N$t^Z :(R/#mRr\ܯA")"� IRB|O:6t"1Sچno3o_vF]쌞;.kPu椾@Qf%F,z͛9%Qn7ںy<JTLy#X"BRD ;<nBH@l8zmAɢ tdv3-]4úY$P.'VwXA]bm1{[l;6$Vʦ(<q2&&#j xY"@;TkCx5]Cͩ9}A$@Y-v262ytPvgQ=H'jlYVq%dS'FX9In&t!pO˔O.oŌ$!Y΃ p]Xm] ) ~<B>e*[nb#?6 EuuPD@D?ݺ5[y]KdN8ꪻX1c5-&2ʁۢP( PT)~C$+!dDXyWau Cczo-ǡ/Ώ4w)f'K}@o*N-NNeKNkn^Pss_|d<n)\E`LC$'H+"CF!dYND8 lv4IFѱ55yMjOt ı ED@Nv@w9unnᜅjC qDk3JlQ/CD ^;@=pRpxz`)K@Zc;Aÿ[}o:TE}r3KgvΉ@PV^`pFM 6.ځf=(Zb$X `Njlԛ wM<̼x L`Ĉr<0>mBs܂꺞ρ+D@Dp7kV?V[HZZ$7owYK/uSEmՍO7@o\8DPK7n!4eY~$ҥK]`[FF9h(MykmûPX#zJ6f).�W!ۦfȎA#09D &f5}*X"ݐ[{t"@jl4yl" eDY&N4z}w/kxg9I`Ucu�F[D@DvNY6" ;'EK\#D᥂r#UvUaE" " !rv  mICQe zRr!p'֕HF Jh,!ghB WD$!>\Rp_Ҵ+" " hJf \l"{y:?!xxL$@xi3Up%" " 5г&\X"!‚^^W=Ջ2x8D\T9MbDjf^@y'"P+!3l!-b󒡵LV"z�;jKw DXC&S`9Dr\b#Y4B$<!I 0bĈMG$$BQ*q%5D\�C$ܦ"rl"los֐->\Y|c-[v XC IWE@D@r"`A;"n,L�AIK :͐mrg/Zy"<!Il3GMr2C-�}vGxCDz.Fަu_ojŔR)35V7DF88JI*\Bu~*gF\[:;Nc7|6N"P8,oQ?tO3 i'"9^RAd9)!m谵<J~%)+Qݜ Kn/W/0Ӯ߫x>u9. AMԳ/Yȯ+*}p5'9T455 eh7Q \n|nDGu7ߚi<ym\L9HJSci% tQ !;Lmg8@+v3 UFI'̠asnR%Hz!@9N? |>O|><O@gaNe---.\ʾ6:',[l6h>GaM7Rm7ỗ7(G/C.Rڔh�G;ͰfK>HZuQ&WjPݘIda#w +B@|0*{_#iPtNn&Pv|0{C瞛¢ 8S̉2F|zւ!ޱYw:X ]C$cǎxFYό6' *[w@x>A4miGAx {pSj!0^Znҵ"(Nu8dϙ0a%ͳf:Dl aؙJFl: QsW$gܦu$ImqTC C(%4)tH?J󤔒2"@Njx#n*U2v-AٴQ,zqrEQh~D[@XݺK"`侏<IIi&eJI!QLYtFO[|ꩳH^r%G"2xqrDJD99D38D=$Qn% yQqM"�ÇO}QMԙ=D#PYb`"Q -ܭ#0u-f;~ؼ-SWR@<8Ds{)Olm >�0;BrӢu,- <c8B±8s{:;w@V|&a8Jv_m _u})!(E$`$-eOs}rsdKW YȦ /1t2?NgbJJ XnK|91zn3K>-[p7?.z�y`:{rw>}ăfٖ“ нkvJH]w}�uÄ!_lo">\Bv">PEDfSh|j냨]34o6Wl{{Ajwc9{I-u&LyvE&}!`ۀ/[괖tZ=kyxwt[^y3[ o);QB&Uq.q@`Fl훳չ-E;k;.~"7s<L@{DoՒ^-§j= T}#N MR<my|=֖?~黨%dҸJd")8ĩq#:O|Nmk:͔)ΔU RK�7?lGFwttO%ÕT}."uF/H- :v&Nw@'ȗ& "A#@]݁9; .G&ίR;$'I�yvHjVYeމ:ba22v״,![.†?F9u@x;LdQtC$GKxF >u`FED7rZ7B0gtf3 rPs "ixtԨQjI2JI _J~ �V/kvh=;=`A#%}Dff3KMQ\ -\0uia1@|[롣"U[TfI2-XS'N2nŕ-1[ÜVw d+U}u¦`N=Z @`΁d(st MnkpN{68I\MAsHG)5yIu!QU"!b]!xx?!z&3yP*&i1 7/k,xkbʹV:Hղ5S;~/C�'O4Hbʺ$[QFͦۘDN2 EX/FGjM,Rl b@O*! y 0؞GQ-v_$KKjC{<=nz3J̰G<= \d=sKd".|n'PL)ѩ`6ޛ,hDr<u uw}"jIrv+zWQMȃ[(fQh[ F  J^FHjHxI(ƕu+6lq#S_fERοEcSvN*azBjm3p~ Vj7r?1ANPf&N9 ֺv/NTB[';ӽ=d/<灼CWc[f$u8;JG@`}p8i;Ӡ7'U&58ׇg$AboͱmTWGe=Pz¾ylD"Q,gQ$l8DxHxwp)0HogWF@Ul7oG^R/yp5a+6Lt:µ.om>F}=){#GWւB}nSSd:*S}l^Ձv$ϥi)-.䥭ϢHaU+xx7F3bɒ�q}mKR[R|-]4|.'o #khѢU0hm&<u);?|饟6(h߅ -ɛMh{"/eP�\dUv+M@Y,My?V5Ö`ؽ�(&QG}9t˨Y %A摟ZR('SrZ9ѯZyV5vs X⻈Ij@VP7IKTH<єSޭ`s|c4.gҋܘⶆ&o%9#}3X>kImIYҧׯn7$o[|q#+v htu7隸6WW{Z<ԘhyFY|Hi82M Gi[]N_B3I % :@<αMskc :NO!ڷ5VD u|OZE扯䶶 iF#4RNSfW+t罹:]TsRK�y<g۔&uGiRJU -2#q1lטJs/B0Gޘ}ڒ:'"3_q&A8VFFʄ i( qx鴜J^Kj.9iTt+n{v9_NaY Xjj@%r5_6ID5ዀGߋrEy(d| h\C:pojjڇNSCN_C%} O`MJ<|jRJ D:; |H@1򃹷\uULjFJ[iF;/#Y(*|-E|W^iR^ C0= m6 NY g4#tG3$^Yagel Ab>]mltAl5~íw쥍9P*5I52KKg L$ b[AQ5q*t\.fŠIA!˗/{Lj=佤F#Ulqҡzcڬ |$H*eF_M <'lޙ4rG,!o;"X^x}CĽ M�g ؆䅇<OIFGh>ǥ.m݋-}S #2` ~ֹuޮD +OUdYCqmU|ⱑr6^:;g/pe<3N[rnvd:]gV5+:INt"0yO5u'P>ߢQaU4\ϲvGJvOt}ӧ]pa},P;($EJMݾ΢=%Vf)?JItraoud ӌ<Nu^]?9>:�v82!>mGUYOxq(IIu|2  x&YJSvCiTզtP^l;UD+⺠TXzB2(콊`sSu<4اSw]>SDU̢S矨P%8x=L_Q-ѐ ` ))9P#DO_55A O9C4ls.AI~__3b}ѧ[`#Lʢ8gqB@]ou@B"o>Ua-:da`D"X&9'y(7C:ZGyc[y#s5Oْ,:`%X0Œjpmoəɽz#s<8M~o*aO`#vS^#\Iwoe 5@i}5 =璘}FTlXuv 477|.]* zR;NS?lŇz/?0$Z :qΛ7gJ~R~Iؿd诌hHF —zdxWW r];۵62Dΐ^ʦl|F=Qg* aYť^B*䪰K+6% Rn?{EqIQb@lT8_chbLb4jc/X@1h4"5C@wzp[vwfvy{;|<;3>(D`(NYp ڦSoݗڮ\|8(ኁ!cڭE0`"+ iks|Z^$�% =:C8D:z9FG+2(,$/l`t!L|K8e7/SY#|@ PWMV'$)9Y<g~} __e6$.r[7:jZg5$<;f4vY/LHNbӮ'y1`Sf򢫸1i7ыy;6`R' l5G3^x#O^B1$w}6!Yw�4]ɕI2 f`cDFRjȷ~vk p ^Ov|2uxsWB7)^4%tu%T.ܬ tD FDLh٩߹\ a/\yCS%>Fjΐ?zJ̱;wo❈3D(ȿ֨ 6݅| WgH⋅X@vQs79~ :Bͥ r_;PI)55hqkW2 >]M3 !\)vŰMN\BVfK"e䈌ި< +rhJQ ҨF.m08щN`Y#=˰D6#:u1rOxI`t#.*iB;|GXL~/<HJHCEͲezǕ [@ C$ "ѭOttq7i*1[xrh>|Ҙ`p6atu'.e5`qj�葉t &K!?x v<{~lGG[Oǁ,mBHH&CN&!�A HB? izS@AwЗ7'N\6aN ?$^5؋vn` 4|R-ϵs0Rŀ#^rZf$9 l f~/;b-rYbo;Er51HBeAIHTb U2mk FbWLc 'W_N5mȻ|"hWA@JxCr)?kv{]H'<['Ǚak!{PGka�-r9E^$!Jc6zbf"1\= "ȑa;VTai"ӻosh[̙"ކi3ϹwS/NW;bo(90^ULQY/!ϫ7 H]0<#^Uӆ:NM;5rӎ$.?^bkg!P b[%$(1t%NkLjAR$ISk r4%%;"9"ʧl͓vv;Ȃǐ<3w1dmY3@�⣉ nB^.g$Ee*{= z|4:qS?4ډ^|,(ÔC@$˙l!F!#uƠpЁ.n-}X<i_b[(͠sv:bsI��@�IDATRzےjtq>$;4X^|QE[pchUWu :| .5\\TX| QFf1Yd> ͢i;H޷I>bdJ5QEK (Zˀ3m+A8zdpCZQ78k%qĆGbÒ lkBuuo00:JgSĤ2GQR=α'|8K;P1s~@b!2M FԐ~"FPG9DO<WSd\7" &9/�{zka]4 EΪQy4KwDͰBx5/wlL _*>}h̹>O# L$!)[A^O7uOhx|\h8z5)N>i3[`WDn}$bqż7pB̅n[0PN ML+e UcbK\鸍t(/"+ߓ\gy�pGq3ݾI|9:շ=o;1niGf8}hnt\ؘn}&jJ;|b�;]Dy?!9bSEFDf#y%N9C*`8C+*}yvNwjg6׵z`82n -_|G|AjJA>^c Y7Tۇzx�fH̀Rh3*>`co߾kswz�y;l|�6"FS-Ā9Db"6[FMEC>y_F}y(pE~Δ:U-tN6�@wANw%G)Xf-_cA[7 DIAs-!Y{][ӆ_صw-9^ؖ-Eϛk5-4ʦK96C\E0`"%'|}Cd^.:=0PBz3Ht$S!yH)GP\Rxl1PgŐoYbo&MXBc ,fў\dsXbJsxy'8kYT^./ܹv<da3Yxvb`G)]=doW^AOC$¥7feO`,<TO(<Slhje|Eښo3-(m#Z?IcqR֮t[[.>oifSN0'~ ^Lw%o 5ws Mیv| @[7r nZ%S8' U"W xED;CytYN20t{gB;z\U35悚HN� hR/̃>ɛ 8r+papY]녦t@ gG>aYtGюZO#)y Hk\Q2`ӽ=Jӣ[!B(ސ9D" KJJv7E=v)~L$~QKYB|;7#B*{:9?馗%ͭ3<a>I`Y (S{suJfU9FYצ"N`SS2("K/>yV'GE2ܼ順I_Ө/45"TŰ&4;I}T Gȷx&wy ́W\3 `mF<62)_1}U(ESsyaTxe<o HQDwr{M_< j=뉗AQSFXDÃ�HsT`]jx3~5NP/VnRNtv&r}5o6Kw`?7/i3%oE_R@? yƏ"b@Um۶vФV-63Oӟ={l)ªfف 9Db*&CͩIH[Orbs>%_ /]aK. !݈㒓|;9'_&6wLp%?sƀڵkN7 5gn2y&w@ٍy fl{… �f"|A<ދm<Ikvs4PaףBW;@Z �-ycܸ\;AƎ47X zBJ=^r a;W8J.7<f7 12pCDSz;q(ϺL27wwŁ@_)/a|0}M\/'|bjסDcG?.(%js4JMh޲O\<KHׯL)W ,�Waڌچ1*}!/%tJ:>?+F'Kk ^>IHX:ۇJd7�[&/㟫Q;\ћnYt2GYX`W#.xdD"d"YW_\jq5uCdO6EPD4TrΜ9 QγvNq<݆GRӹCbZ��7 1_BC?|Q#/SG)rJh;:= >(NSmhcEbGbJTWWO,46.`էl9qUT9C4TpXAx y1ȱ:!-JkY�ϭq?@[;ݠHȬh'3 lj{P¥)zJԔX 1E]9ulI)$Yn!$]kSPJKTBz؉nG5 y)nT$5ΐG|rU*'f[0b3k!CbEMHqgFf`  3p>ʆ/%gv0J?!;vLn)I۵wdz<WG̰׾I؁xY�e|B  a~s礘3'QAjP̪lׅJM#CsL"[Iܝ'!Ԇ<yEL-(9W7^B#o<E~;:ѹ;L20֫mxyv/$rK:h+ 7lL}ltڧ!YPueDM5E %tѿIrϝOPsDW7e\NM% :|Y{(<)t Z4#J7uOq%vd8'!yܟĭZI0MQ{7%j)4:lUD jS:>c w,²Cʾڍ2dRu9EСCPc?{K5xEetR{!#^t ,53TV֒u6^JXaS@朰Gւ Ck o栉]o}6&nDF&i]*bH _ `߷o߭rŻSGx?A]R|1 8ǭnh^a6(y{򒋗dA;grp�/.zպ EϵSS*Y_ 5b)IiV eȵaD\5ֺ7ڮ0:QYėħȑ5u%׿!ȃ1qjQs:vp22Ole41bi+CW`3!;ZwikSf/ōX|6nr8<ѱpK dMXmQ.}LDDTӱ&A\l?#tvTyyJg˧Q<�; u^@G⮜q2_?nTsn}4!qrbGO] hؾM_nكx0-y<Aqّg a+p;oqJw;LDxear~\6`Ĉ9 Q4aƎA: '45R}* qHA8 SaG`cǀ8hM m5r_,r^t)whLٵ\f0\ 82 u Q35]ia3_y:‚6Yk Zw<N9y$=5G`bڃ Ijcdo–_׽A`ltWWW?�9mTM|&4 F(^TOҜ<rOI^B a@O'zіŖzE_/H)$GC-�܉} RHxNѨS؝E20Z;؀,ӃUp!R |S.0xh9{$A N%zс̓;/l ɓoǞM}w\CRNggi*,;W &#g(2"aܯ@[w ̠`i?m4Tyu�5;\̳XEǦO!#IVy'DM@BmHGfo>LR-r�xہ!´2ŧ\Ԣ\ 1.' O_VVo~e˖}TS:h|7=qT11A<zނc[mj$ا:)u]PA-2tu*-ONf9iؼv?ZxJm`/Vb7˜46B$Й#!tg:4対h!7)+yC>v YMY5*8C4U֒Gqg<M1gc?g@d6nI]y$X3DH42dWl(ޑClG6,:E];}C&:h&3\{s v!`&27 D4}<F)ā+ɏ̿ѣcǎYx]@0 @!H4q� -<GϞ=U^X'ǟx` Pc?LʱH;Bv4wݥHs~='!+`};.{SB7]F/D]yyUA UZyi&)3MSdv»(hZ<rTWG?5v,NS'a=ξ'}15%kɒ%EZ^4,\Ö."(�F(ȴ<Ā^3zSy9RtV_#?S?:kys<ǚ7\'FxLy ><c%sw7XH ;2Pf�c} }/ٕ: ÃQC^SH }^O2֧ORxOQÉ8ʕ+?1DrӲYKUVo/FaZ,P)d@-ї8xqkbS[xnڐgO+mlswa3͘q0�ğ{טp ]0y32smO(mFZ�qD9U-@%d$W}-#y<CyJϤJeqTЀZ= d`Œ%i'9=X AOcs!Gb͎M>3~6mh~<+ߏKq 2Hΐ(n823fXua&c>n=ǭA<ެ՘*`l `4+'N܁y|R"kKx .TM-BU+1@ey" S(˨7]wA7s:ZhR2/80z` @O!#ÈZ@5!zҦ,AۛĽW1GZhy� x1@ @ qrPYٸFyӶ56u!=v8VkM.L,MQKB,<@34HׇӚ"56T{al l=,5@9WH K%30 q"7ǵظ[0 e@ÉP]MmM%^Okm<i<b0&F_Eh(('`.yQ (G\^wٕ"RoyTK@޻aK䷯mNb541W2*P8b#N7 n%7{zP J"ڵMP%h`}c@/>ݩ/F]%^Xd }AuLh3.^&!eʳ<ZkmϪQO F7>s[k;AnY:LBi,\37X*Ӳ7sUv"gH8l5i/re\b�W,[0JOԋC8jdH0i[l8^s~Qgwl|QSؼ Ȫ�tߙб7Ei_li`xr4xҶVxIC`%JkJj &}R⨯nNJrdlG| l{m .C'h9h|3k�`1N@XH')㝉t? 10@8!k 7hX#81e!v'>䍑_ [K€Klmv)Qqɨ<3bK***2CNdMk3R7N?�;҇MU A Vќ|> \ o+/ LXT^nkJ;{W5CQ W +%~vyP:3:DUH_Y5o7)R)j1Z/l 9^4PQ2P|O6o nÎPB_LWi>xfzR@/ mM4 4lPo K+@UMt׶Ynt h [т)y[U؍<*YRh_+x�Q)ȕ"Z}Fq/)2G8H/_~,oƓ|339B 吝 OvO h$S'GT/u�s^yINVlNsi78$<-rC@? R9pI]SmtHeɚ #9 w9C+Xs,N{:ٽqʰS@+E]i2rlK4MUp=Q.#z1er>zgzt)dQT,b>3LҨ|E'$t~FYR$fk_:8N|.+OD ) ۦQޗxܫ003жmۍ>2ųdxo@.]dѢY:JPxɒ%o`#"jWAe{BإޯCTvs]ӳQ ;3\ zn)RHs|UsӨ'j50;<OK:CidHyc|رxl SCyB3$ݦvmڴtʕkpidvu_v9C6hn^ǜa͂YWc;کϜ!^J`>&jڔW9&O T̢. .ZӦ;އr4t9^ Reͣ"Xܾ}-5cv"W}kk B3Ꟗ h|}MϢhEjժ}3&9jꌓ@%2e˖y ٳ{7 ]zFYPIO%z5:Ν;oa;Vz|slϘg;'gR?!Q[XW,F`W4$NpMMec/P8C&V @ 8z 1tZ+tlѢţL jL#Ĝn6r-5wEj2Ea`(3DVRWm9^.̖MEz񟼻h&/w m*K|bqPҜ!Q79R<gojΐiI4@oWȋ#ϲK7Aԙpѹ5Cw[n󝃊�Ǣ[*tit il]{|#:x+-QSoT`z/SxwoÛ'}~:t<<BDΚJ:ZO��c{!sڐ k0!wP}c jLjv{VAS,J=zo2C&6JUA7hI۶TUV||Mv]+bqaC~Z/nf�-w黒J79i/3u c$bkb`>9DzP;ylO0!dž#5Xl7mYj8E\᡼'EIOe 4c,xjvz˳- =R6``}u#jax&v=W<}`q-;txjٲPoM1C(ҨT4 FmE^'d7/E=p}hzUtBuH\<q;Ѽ(߉$hh |nȏQ[Ҷ(7^-L Y,% b>|UԜ Z`c 4�M?kx ]?[SUU5RklϱMR@r75>$ұMd8aF>K"cz"8m�z=v"J~(F<obZnjEu_qm'?XG6̮,))f6g_CDz7H/@-+[ *x>7W QS�L֬0?}}╟M3_o䲝6@ NF8sl9CY P w]b[-x-+)ùGq4ǂ1 \ċd쿤?i pQT?g"bb!COZ-(TmI9:NEG9vaHUNMgN#/Gw*pxU, :W%OM9P:, 0<vcCҤ9-ڶmەk+rȅa5"M!Q<GpI+ O&nKjh/y>sG^_s%Rz~Q9d@HW�%_5h_/eӁ}9N0MT-gh^Dtw7vg` O M C5C!i| ׾KڷhTl45JdBH8}0l̀FL15�19 �YBqd@ԩ/u&$FXsD>8C /O`ΐh50z~:EQ:roΐh<zţ [9ZK>p>l;Yq52Ѯ IEQ&D5#-)MYq 0z3{!jRLD C$bBNJ_9:0I@ @H h~*әԿB"߰&@6m?[9d`yo7s [r3Ӡ464a:$ʀF%Q9?QfىF*bQs~\:M`a˪B75KA#!N Fhβc /p :<> !M!ZDuP9|\$kFg`ۂι0e@M7`:Ik[غ_Eݡ]·cRN9Dq_d!a; lL,OyC}lg~ؙ<G'LSM _@�EgbVZmK`՞!Z3dGzp%Mi<5u&)|R6 �O!7XT^>w֐ig l`څɋ62VU͗5GPr*AHX#4JRyVe 3{0}"T՝֧̺$nNK$"8M\NbhպuVZ|;RWpMHHI۶*+p#az'g(j;wܷf|Fc% 39 ԗdog�Lp(Q/6B߲Y*U3d Z"~42Õ$3gHY`ѬH͂y@<xuO(TV-Ю]Ҫ܏E"re7 Y8qfBuez9C,O/oq"T'w"Kej=6Bt 2` emHTө؁}BNɭ\(c-gCt R}R 򲫑-ӾQ%3:t."~u53ܜLjG~w f-O &mܯF"rW8۲e [ rCq-:W[*7꫹.j\b0[ApQ<c"H]8TbI|սfe[]heC-L憃^9B Hҟx(xM_rّ`~IC:nJ<j!iг5}׿EV\9g:p^Svx AX<g0vȃ7'N\F}|ڍmmE#ycQqD|3b`Tȍ۷Gqb3h>l υNmU8}ZЍV`"`'8Qݙ:4 dņ0ҙ?~k4uiD4PV?m:t;ݼBHskûz1P(ٷ T>t.|,h`j@r;da4Z.0`b؋'T.˖-( $b<c C]iǖP¥�f;RNQN[g/'(GyM'R6Agp!R(Ux<`;ږ5 :\;\䦒8M}\g-XN6h#-ڕnt|yN.^. \C'cxޤn3<Q7(Rgȱϑ!)ܯ#!@It  EA<taݔE`K]ehѢB2*YI絤 ɑ\*in 2pϢz3!⸈k ta h 26v k=??FU9ean(!~K#CHuڃ8)7&9 a=Mf#;ÑuqX&�DY"7_@W١CTn7raae#6ㆁuIC@,$@![ 2|4XnnzpV02dfq7khYӯg ^ǠsQHg4BkKA}AyM6=Mt ^ZGGpJ 0Ŵk [8AKYfS62p#:MairIܒv /)!X"`ǠՐLSpp=<C!Ig`I47/\mv#܎@~Ă!kみ{2~5zAS;V]~D|^aVZ]jps)tdk"pNԔn^F_ta]Yi_^X-5+`&5 PGߎ2c\)D_s7dOv%@ Ć:4ۢf(Iip n.Pץ|zQKp%^Ĵ:vXZ 9 }!F i-zGͨݕؒJ %+ke u`ɜ!PL C*&RZH՜!qlCGയk&PZqlH>Sk8Yt1AnwJ ",p:*1PJꢛ8{^+OP7jZ._|Oq-:}š(jj|JWm_F8dE'd6aT{Gtч^uRk.c30)L9_ gkʴ?[o D�uCMtt hGKRkH Nk!OlH5u;8uܳz*i\#/Iw~6S]Ki%3Se6Fx⩻5M ;RgRoN2Gr.v{z!?sqݓyճCL!*k @l P8uR#+'dlDg+{T5qvQ?@Sk~M=;#[T)?m% ?B[[>"r.\{+]m23<+-u/Z,i}W[6NR{GR^![F)ݐNH0・e@%׻8'@�ا <ض,"MFk]7 @ ,[@36.@N5c5Q|r$FHTۦB:PMh8H46>Wrc � Ť2-un}ytHO^o xeLc4zFoZ?ZS@y iG\6 *+>EA%`1fu_O#,@ CR:Ey)͗9ܚjrgSlʼY ^`ȓgI8̻/)%qB=~kd`Z @j:ņ=jpv{) cܸڛRNNw΂t E ؔG�tУȪ<4ς1'y<8eIpP_DRYpLy).NUsOcʑZl[j%Ggg*MHdldX7$˝ׂCIB~)nc /\;D~ˋ)Ppuhvi +S!6eb+ 5t)st{%"Ȅdyf <X #!�Wc+sqL\[^UU!{[9 rTIYM="Vb 8FPz CīRIl3+EjƵСC3"b[7%.iB-WP]Fr<J V5,?5b盺`;7\Y@[2m#6l. Xv H=(![8Cc0Eq`x!O{EdgIsd�e`@m0qu{#VVVj㽴b_!iR4I]!'&2<[H6r:A2mK<v_o{ƒH!ڛzJ;x}#ẓ/KT;GW8^ojcpҎ.ÈZh5M P="\;hT:Sr7G>]T_ZRG�ۙ>b3L`w!.5eK&p4'@] js{(Y$co*Өh"9c"1!娹5+&7 2m'fBK@ _tXegC# ģ[vL4OSF!o $0j2؝>jL$:u74e/GҌ}ԯ_NvVjI{uQh2}Ckߥr3it[p#7RxZ!Z1[ ,!ϜK+vfȏ׾%InwIVj"V!eq,&sRn�8$.0ڵdΠ|G#c�ǸD5/:D|A|vvH֯* C)a>mt;w>c4la2 C/g6*2d/[k>{GR~>|LHuAvz@j-(']QMG@_>\8&\J @d Prz[X?V{.EG YLTGSFeh^W3ACp?!%cѪE۶VWUI\j},p/9C4i 8!k +}(<9qIVυT@ xŘ"Et "}R[m!!lHDcxCGUlt ؾֺdavuII8TAݭVdBg GSĶ(9>r>8> /; Tc`06<9qKVޣ,1PMt?әprD6gSVj-$̀9D&C1wy�.#.FQiwe3!`|HgksIؽ}KNG'*S;ԢE F1s#;#?/v4:%8C|dCo,=&- ^<b@˕li7]<䡄@%N1RPλz 1#9dMGyZz NUe%֣==$OIy=]L^'>DQL9 3{Zj @4u m;<CbX&}&Br ɉ+^x5\_9Y:ZH# lU�Lx]6FC[tJi]`Ymk/< C鐞 7pW/_t=8AhD1l 9 ?,(Kd |~t_a-?x#B:BވuE4%�{YQj#}JOϞm;lg+W%[ғVeJ\f4tؙ-'+رƂ1P Hs\u:т[' �VtJ N:S+^ m?|ay&ۋg2p:mF*yQX:rxL(ɧ8~zIWǃ4ˡ3;g.챼/?@%W|-}4Mf&ΐj YE$ 3>޶MT)>ݹENB`VNѪ%[lEo ":ڦp⿉Zg! jT .>L|ћ14}htH 68 <״_(@uRwYFT*5yC+n`6ܯd6|/6$T7f�۸vb#hҥoaC?DeM[r6XJ#!X-a`kI J ÜڃH VN <_GN@L"j7y]4`Sk쨉D/Ȑi(ŋ:O]a4Q9ᆚf9Gr4sC}@xxQ/�r,;1!+袠a b:0LJ)ޫ(1"u.1q�",P98t /{a8L~ `4|=#d^Y]]2m7+9'؏Fy@< q~=|qa054 5pQ|p0 )#!4_т1/CM8l-8m:OM Nض[ CćRhîTp>jwZ<Pޗ-+"Fl5Dj)r''S~>,{ҡ;L#[]x)Qđa`;Fidw h퐠GRW kGc W^rsnS��@�IDAT9kEs_)QDH,G#-Q4S,F/rRτ9 ur:k)89m±GC>l9壺. G1G94:C)u7@~_h7ĝq_kU9I\%`yxЉy|,8b~vΑHbKUUէfl3xNAAzpd^}` C ˭<{5T�M.XdB*4ChVl`ĒL fp ޕދ(0�FO \f=VoO+ RfͱW}} (ghzg@ԩ|8WM@!*8-bQò,D@EER*G"̲тxGϞ=;g V&�MoHMKIJg)|Ү])t >  i?sP$gH(k3 $5AeeA"=,@4;_!S؜!{mr<6gH-#mH` sٲe5Z/R{<"N{ NDe"cܹ|EE-o:NST4Rv3*NS~H/n|߶ft8 GLG}=,W'84M_ӛXԨFYiJm3llU:<{u+xK%';,dt*ZN)cL:cצLZu.cwA?Y9駟ȊMIb7?N bb P&w!LӽRx SĂ1P&S?y XAi?&+8OhJPer,z |>wmbs^L2ޛ4z9q)K"T2 @"dڒHPVcwcke<"_zeGEl/׉[y)2(}%QkRPێzHj)%銍PTMmT'H_y,g` *ы¨.tw^y[~3]}!p u3zODoay:w}7m]~+.$jGdau԰u 9v 3u!cwi.on!ϱ 0,gbk_Hٵwh _ CP\A zSw8oQmmւ}8[YlTer'pb]LƗĒe$Z~dO `-cPr̛өHiCU| #[IiHyJ7a(Ea8Pv�bEPC~8>k`Cy>K>]0nmgyvft;!I/ڌ- z6�y4=sLբM]{uwS>YR0GoƸq~ߎ1@<w{#d'o�u}:UO+ԣ/hA4/FiM͹bn8w0 FX(QuS.}.~"kk毖cY;l[jU4RDk4l1+f/Eʝt4<YSl_?( ŃƓؼF yj-w[v%`oFGaD“ ;5jKO/zAR?:=BwitvH9I%  pe_H`Ncݔ\y>u>`1 N8 S ^(Z-[˄OT jyXRM{1a0DRChzEM&]e pv{:`o f@S{i5o9!v{,j:]ymji.Ľ!x(FhZxZ O9k1RԿ%2UgDZv8taۅD'g`æp $lF"o!.ftK423:DeMjq>`2:^&&i{@ٟP#AxA .xiTDE<ػ{W Lbz)9vf&`~ {1π ^۔#(S5$Nˉc`e"ѫq ȸ$n9 쏽?HntviC5-"1S]c %ށ=s/R&1@0-|@~.%P%<^Uó0'kz.SR�uE`l{(3JWTNepЈɞpґX�Ϡji2b}?6lbEoPYٟ͘yR,s`ͽ&P7 X >bK&=a t)X8W293+ УA}EqQLl}as?kٱ0kIyfaMEhغ1RSyz!R3=SWVڝ~pMۂ:6>:iAXRFOdH5TE}9'430zIb{>bK 5)%o5_7yBh#D*)'A#G^"�5:MN+᷈wn�6'bSm]t|LB#E�q\IaIMQ߰%GdFt9Ra/ܫ3A}g9iQœs=L39ϤSzlQlqE>^$q)e?Ipț,~揨5HAI \Ckg%AJ$&f1ǘCi/ŕq/rؿlI hz>Ǭ9dr{y)Q(>�<7Q SEࣄܴfN^]ćMGȉo0y^I4%VzDʀl c} UlQo]e_wn,l!֦I}{g˥tݻwWP�G閙S<b :݌Eehw 4u"?ZUh͍w+ " gT5!ψ<dv vD{G%*Ԅ%iغv*.nzYdH^8>#+bttȆ w:+qH[|*NO(؁EeB ̟1C8<^D 2pXH8C~:;HT{tF}ˈ'Lx_Km+'Z|x)Z`'HވH%Ѿ\C=c0[YQr*KRڦ,XU;w.[rPѧ ^?1=ތ)]f:O{퐿:,qeagc0bDgVlВ/V.yTR-NDӼD(%_r;_8_1Pg"+-5Ht�Sk[X/O^"hn?Bf2x;.!V*=}I/~ٲeZpIo)$?P"I"鶋gAd!pq/W#2z?9I9,|/ɠ"F7m=e&:]/pO'LzM< 3@?ZSB <gjc-@iii'Ez? [L<�ʭoݝK{ŗۜsMՈӈE^zFtNƌ/t1: Vu*ۖlk<tcnxdHT]WGkygKuM`z{$&@PfA /Faˇۈ Mv,Y\(?pj]̿h*qZ+] Gb4T|5j\#&*bi=_g*E-ŀh~A{Q$9Az pn}Xdɟ(qkJ0<rM}`ًBrB˛F}9GLO\�JֺG/62u mnM# D~֩Sz"8жOđy yLyY Z5 _>N#!jWju 8/uT=jǩ䨗t nHbnz>w^ĩ-za;V.pM\JgdWJoTH:QbSr8,#HrQ}?|1gHb%Q Kٵ.<Rb?ϑD}]΅Ԗ%.q*w _fjgg�5rw)Mt4iDk{*OYNٖs۠î)4l KC 5n'5W C^ ꭠ~s./1 Rl&Z8|A8.]r}U#oQF&d䨱S3Qڹn�N@`€9Q݌Hol8* _6IPtUޓt_t4+'s4PlƥszMU81U U}0)\٩ж[Lz lNi:Ӏ/ZV@PG^NGS+p")z(/r'k<0a2Ї2<LJ_PP<<1  %ShzK8.\)'$.<r^D4h`n~ha`Fb09z1T4l]4lA{=1\)-#;~&h#EZyoxM^2[¹ݣȻ<ђؑbJaz BZ"wDWc) 52Ũh[`C@uZ<|":os`@oص+,8`~ABGά{~z_0(.tшkF֟|ɡkewdpO$nMdj$eTV_=E|wnr͛,7.F5s;n&NП K AOOS[!<S-EdG> ƹ_plHmMs;r;e5_ O p@F6 [kD0-5%0HԽ:/uUo.kv 2УGhF'`l?֙"qp; �0.M/n9IC�_-^k:Mr\S23rD쵚:/_pm G+JڕH[5|c< 4l[Émg!fhF,"쩷gҾfZs"!ċI&v)NBc+y1e͜T\Nbk!`׽q=Kcpɀ#Xm=WB29jK ؼ7"|iCMs08<OgyECxuW`V!<xO"`Ow�FJ M#?;ز6*`OE*9>(!QǞZc)6!)"< oji༝*~DT[�oNAO)ACo-Z=0ؠWGQMg\sr[9 OZ+w"jHm8~B>/8?wf$J(g%x~%G9caY!}cmUKfYFM Z-CV[ND9,HsIԻ<[WT!:%7Ke|7%aKOFY8_ %!܋NwK{^q~>"FES,!v{ӱ>E &gQ,KySxpDhz(wp26){C)X< ~$% 6%6?<k!O )(=IS +7h.5S=RXDnUQ>9 a*Xw "nP0)l$2mmo=1?U{xk:EZ3d*^lE#C<6c[>=ϝ:eآ 9ӨCvZ@7XW{ "o+yёJEh€FM; E _ɑ͙זsJcX(G!bSzB:h6`:3?ZV6}ih b.NcoG&ߒO{M 7dhCl'#8}i\ĶpJ\1M. VO@Ba'`gxbxU|7{c%&2�9w17S0,ȩ@h:PmR vMP�n(@8\M{O''IJVF\޿ Yw_7_1$d]BNo4;oid\ }gȫMxV}%r7q6KFgcЉ rId@ڧ晉`R]]íos7 0]o.ꔌؤQΊ-w˸)cCAvHbuS ڵ0H4{SNc-d=HA8Ecx-yui&;>tޚRwX{W9"yK#(ԩs|tLԚ 9=8[՚!b(r;ak)>(3dϋ]+5}BL Sj.78; =rLJ:yд  >;H^#,ABYrg%%%/cǡ@ޣZјt⟉=4<c\wD!+rPUUu4G} ~#d}< ::}˓k쵘1F(B.NUp14}Em z!zI/?rTceh5D3Uyj]:]� ?ݞTVV> #PNO>as+8:LCn O!:7RRCY%t~wI\pK|p'dؠc3uШ,Zj,K'I428;\DCsiY:M 'P16r~CW`}׉\n3B q1,ڬF0eWenT1=}'4&uN#mP${V?48ǐ=O:P\CwT5`8ӈ;`HCnRluEM7=kŒ%yS '86=kX-/7g.? zT1h1H<F-MCV*ﯞ^Ԕoc[C]Hl/ΆSԸ9աn U\Bҩ~?hs4JaZ^ST`i:$b5 i=Z5r G:并Ph~UXRQqR`Сi-0}қ51әaa 8l# !ACoxK}уLBOSVhLTe1r$z ШI}LJK[Fh 9-8d�۝ ]Q$gBd&)e<XmdL#1U!/SCM%KH/]kYԉ Eؘ<fGI}^u1*5]S<?Z{キGg~vr ;dɟ!R' sq#6tj-Y x1\E'n o;xR;S�"=}QS*Љwer=Q "49zK"23e`cz| . .\Ak)ۻ|-tr\)oΐ\JlDE%B;pYsDH*DƞCƼ qp@tGBgFuˡ%omޜ)g[|wL77^xbg[+mE@/903@|τ7#4) Z()68a_~qQ놤&j)إPT)"<'pg4"ed_T_q= ;4tt�V!kl Óذ4:mw5|%K_*޻x$n1<5zN=)QC C/1`Ĉ|:wBܿ.R3A|�kTyZ>1ВG[?>1ax|2N'xr C NsA](bN'+/\d[8?Qц h,\0_Q /mߪή7{ZIzȀ 23Gu<rD yO6( 0>Qo=4ڇi4ҁn{ۣi/:| 41S$ *?Ey%*Є5ٟ\5LC簳8F.W3r: ݗs[@׺S>c7.퓕(M<oΔӋ20dgs-ZE~XAب,$?f$N!N#Gu딻:+ k8^H)P [M! 9Db*-Ʃ)8X+Ǒ;I0M]u،G|Ҧ^_:1D<JOTvؠ&b $@)qrr}@so|z'Q'Ks'm]9W_;Q?GY;mw2.<s02xW !3% Cd :"g%{w9Ƙ Ժ̾Y",uS-.v,2dAަN:Gc`\s0hjK\/ "`{r�{ T32l/JR',Ĉ'=i׿[L&jDj~MlٲRhJY?H);52DIRp\ut\g@;PJ\4hC89[DKοT!:kߑ8M4:I_--Y``{|R<1݋ Xꚲu1k�l?FGQbV!ut,O(A-Ā9Db"&0?^NEn*TS|x^B߻_?^bWJgbG1/" !.cs ;s?b:uLv=f ٘e4=TǧϭGcgmۮYrRp;ܗu2vҴٿg`(uEj*dh4s9q6zmUӅ0 �1x9,#1ea^fc 0xI>.ћ'.?LO:Nn3r 9BWs&{p?о}{m\Mcp<ͅ7=1xh(YDdك5!2q>|ΧC{0-e|{7dVZT~&[y�-lwWlm_?}~)b>-VL?}:' ,{c#F43kɦ(s}Ҙ{^"e_ 㹚+!u 91\:,g'TO͎֫w}NH`SyCn? Ձ&`W;o�c B.]z6:ԋ@}5=ML2}632AՏ:sx91Sei>#vd[;nK) 9k!F!#ʚ[1*{!Sμ=p\mcW=[$}p^cogewxy20vb32=-zy6/㚻'gL }grT@�6ա3U>y(덓9Ì0HfMg Sj-Џ5/"]| [j/#ՖGsƨa9a-12RǴEJ9Ӷm[MYܵf8mF=NbS!kG^v$&ffr^$uF!"  HQ Pb"c`26b]aDS[j7-:3b0 :NaKlZ:ߴ9bKl<)n D�/Gb{E]$fAZぺ/&x C]?S۪6VmmiSu+}W`[ߜ*ŲL#DRLY*:C7300/鴜@Ź4i{aT7nX�z#6Ѯ] ՗6". dFƀ%2 #wzqMY'f|H.05mԞɉK6QC:CS xb'%%+r!@ D-CCȊV4V?BrVg%7J#,y8%Ar7oXrbj05_m/l Łhi DGᆱ/^R'u"S2ό|6lFMH'sU5-FmifZHcBbBϦ$`wIdRMt"Բ"EAR}ߛ)\fGԖ<lN5jdkt>s]O_z})^Z!Ȁ^M~Kj]bSݲݟi#˱8�_Z�wS0&<Npy;N,0HB@#FBCe2^0@9\E&y1Q#OsF<1Fi>4)~{ sMiii'ܘxc /y,zYl0/Eb v6Ift*nRmCܦq,ld!CYZH)qT/N8ChJO >zhRFIGGEZ!g be!G٧%"i g9h ?᫉u=:V٩qK?>.]zX 1+ow\O>(Y<H{tP$Qm]<w;'cM\ѷo!nfG\Y̻k'y2??gouy-PiLԊF:C 餎|wuL}ṠfSxԚ*3t]TwDK ]E#6!!,4KB , ۀ(  AqpatuPQT/4PFD BaK BC!aibЄ[Ow_sN}kUV!@Y@HO5j[i}JxR�)82τs?L2:*Bp7N)' R,iHq9ç"ŕ"5=MѸj�tl$n71eC!7bE9HN`*cMBT(S.ly3fVd�}M�Qfq!9CF$lB-ɫ-=dR&#|r!gȀ*K\}f'9C qKafC.Eqi QtN3p 6h_>W.b Ջ@b֑Y:_l@#3pv=X}TH9*{{:7x.%&G0-ʃM{{ȥKy6m7KG~ Rڨdfd{L@3D'I*ߪ~S׃4Uv^첧"q#؍OmZ'ר#H81H4oaȋ AwIzF~ 9H urCd@lO"-UyRsXjoz=|mE3gz[~{ yWr Ela9Cpi "y=r8uMkCit.\o-"`4yK.yDMC\2O-u7kKnU:N)ԉ@&^u"eH)\Al|¿~:v.|ձ俖;A_ׁ{f|Ka{MВb8 k1r'C%`㴡Re46kTʀ.ebx=�j-n{XQEh_B Amzad&{r➛QTuR.&$n. @<pL v0t W[E*lS.Z `'kZAVdlLgXFӧ"^OWd>9%߸iyɱmoo-zǩ ip;'F)B۴)8C`#_#g'6юzν}3A$ޭijr64{;P^a C�e"y&gehQcU&?6Ɠ~:SӰSe567D;<[S<f)fO R+˗)*)ړڗmq~J6ճvq,Ov}ۍ|~ڝ)#0{?i͹o(C| LZRKedL)Vecڸث/_U]bL|RS :=[l6dUHDo,K%Os"P$ڛRR7ZVFpH-e(6"AC/6DgKFqRdzxPXx5i}>mqIY2KdiOfͥs6!{ /]:: D*�=m5qO$Gg=r3HOV}nUb~v<)gHg} 9CXKu^[|\9DEReYSE v؆\޸]M'M} d2Y^5~LuzC!p0|Sv_~*)^E]KuU (sPvx 68$HAkj<T@=,Lxf3DΠ'eDgNcRmʕI6e^:>IGM)9)#[0Gs lW)B@WP#r:5FAD_!8(+ۏldT2d2w+'Azqn92"˔6٤ne#ՁŤwôb DSފyI~sD1,?_KQ)6bg'm k OgrW~)r $w0"|2Ԭ$>e,*#{kuVkwΜjKWWJpM�}q+mVuqW㱂 @ o/v{V:+SiG)yL*{=!7$u`1hjRFɘ2hcyb-q%^_Q\rF[E;{Pi :"" |"Y.9*ϢRc3 rE=:7|}0c Qig"�HY5صV[{25iȑ#pl_9BvriYi/;IQ&';&]*DޚcĞfR*k${ <HH3۽wt$avȟZ"(8ܤy-===OkG4FKT"{\BXDhns\Z'@^[*rut_jb=)25doGPD{wx;zY.N;gwsin'?Z=7]o%P'4C\LA8 Ӄki]9JB?IxDؤO@8n/$l|qni,ayɠbt@^>ɀ%,9!4du!@p9>Jf@U $1&Jr2ޕn�" iH:cر2p,)`�F%g5Ks'vw*nMq [p}P\d=OfSgNq<Dvp|6Ale[HP8#<+w>;9 gH%+ 3DHHR3G3D͹P{*fS4M%P'`[C :{ŷHp r3Ϋ3ꋒT1;MsO.@rg'n3Խ=qΎ7lc o[O!%3 0 UW!V !2<<c܉]H"Jl]3=tbmɖ7]sp?&Щݖr'adJRDod:ߖ8MQ_Iyd޽e_ Sb%[^%@YD8w?ZxW"p4knvV-ŔC%|] vh(U.`RLbp 䟨/7,}ZG|9Jnc;~2`~ 5d T}< Eڄuc;_&6cb6HW7"\Õ_'q B oJBWM>nS T٬*f\؛PXC9`]p@6l<'[~Os jNS+'XNY'!`oM?9(]LG<j7mI) CbCsyбD#`oz$o&텤#0d/D'7l`#&gMo9QOm0;7Obm3Y@V@㘎ܛ myKeOw'S^P/TY%|6<jNvdٛj جwfƨ_ oBqN3ohdo8D9u&O`s_ c:H >B:di w0غ;ݗ9A!!m`9%{$`GHmO{5ۛ!f}0@ގkwB}؅MK-ͤ~@6P]9vl4 x:�sHz/lur8p0+|+ >Dy=Ԭ`94fi!$/<>TrlCFyHYFZVvECٯߪM޺5{+#ko_5N%][bMzV0iσ  _/ C˃\S"@mo'2Գ{j01si`S`o%1P,"5u'h;u3`||^9؟~?{.X5ssqjIqJSCUe{Nl)5�Oc˞NMMwbK]G�ymo;]%KS_ө'vՖ혺eOs ;7g`Mcߠ@,R%-0@0e@^2Uhͺf`?ťeTeevBHj$nvo;Bjo)87lje}S[۸I{:mv>9D E L>68"0XG9>얩%&@"aIT'`KVٲ*"�JW9cn  ?~åKYl⨇P:D >?lR?q|C͒��@�IDAT Pp]tl%pڌ^_$)9r!9 p }?<vv7 iH�g)+M!R\) ^\bX|Ϣkw1ܥem_eOL $ Cep'�1 M=US?Ǧng r݋/yMAY&5"`?Md˹ѼXd*5+oxSvʾl zKVXԒ>�m]<N ^ ~jOǂ2J3D /;/.:D MF 9@ic} 5=r{ƄM gYgmڡ|hoV|~&W*"66^POG@r;@ p.ůbTohHl*-R)5P쩕 Inʤ}>@fH Wc# 6VcpXF-)F|s&)ydmLa-,� І[~CYFmtڈ@%@J %|$a"$T=X4@<Da*؍Aλ S'v2k7>K 3c;g$,gnI~* w[.imY}tҤ{/@^6fOtvk9/Hj'}K-h6Qe+&25 W{U3=sԗvkcU×9D3`O' ă4SOv@ۣ»<AT@tl9J&}62)mZzz0uXk4 9o0~3rKyU]]]!"0KuIƲ!r H3ؙxwe- B "6-1plʛjC/Y'" #@?9v,/"  PwO[aԍnֶO˪prq&M")}7yv:rc='kpy̯Yu12ky*X=SA½oM5Q�6w^'p}!y#eAQ!Ŕԛ褞=i&+D@D@@{ˍuvy?i gH2WiF"觧XW+zz:D@#8ݝ]" " "P�3:*>#"ũaF'_m38bxƊ%YHʞKT7j^O"MS1 Ս1m4]/ \ۄV"" " !쉤vBuR@!̈@L DPdeR:kSUv@2'h:W rهJ"̼r1C1m uޛUfj8q@D`Mț�7-SD<�uqCR]xL6iɌJE@D@2!@6.L䁺٨'K209D+T",CD@*CD}T2Dv˄ׂצ(饁((F2؜k{$" "  bvOnE%3!2t>"`$ąC!);I^%{;֗wa0|2'" "(kSYr94ބ7*#3yGD 2/#eZ Y xqxfx"�'֙~Zw{EH#M&gX�mf6pBM{>sQT#\CCܣʃ<ݔ!R\hXKJ�9 _oÆ˕N;vLOOϞ!s d"  cvs 8o$዇I\"9FhF,"�TQV�~9D l*t^ iA9'5"0<s0 +\ :~u-zؖ)ػ{ Co" -'Xir3Xi#w|Eѽ6Xݛh*2"Nu~ \S@{i 9i LjE;x9Cda8C/|~Y$8Ṉa:iڋ0~!" 0x<ڸ?by؎Lkgc:D'mb9utF8n7j-: 9DP'|)Hd$,=f4tw!V%fy -m#?> 0 l֪.]/" ]2|dv͛6Ͻgd2o.9\$[6#H8\^�{ruɑCs1CN iq&M"04:Qu.A¥&]l=9Iw" "�m=v)ݶV[ݳx8CB_-/g=75#"0(=I9D 9D l*y6DH�7D$t yz֚dsfagX¹itΉ%@MNڐiW`ǃ6;z{{G +#6lDQ@\ٰk=ɒP: "$3gw<γAQ-lgN$q~'nLDf$" .Xu?m]w>mVmFo3?td\޷e*vƍll" M} &ٕ29DU{0x+H8&p9[38C!5Vq+a}I8oNہN 0#*XD@f k^u;gڅ'OߖX?ak4pl ^NH"001n4GbnPhH%*p kc&ޞӀ&t_ W=6-#tL巩tw l҄]""P0�B7Yյ%/#b;[J.p1CTo)!R�ot*.<*"*nT;*p/6""k 1G}&Kj)=mKd>O)E@z^Pn.b~/iz^_68C,G7>},tT�햗ShqY) pX.SC" (:2(۫&~,#pЗP#͞vfl#e;%SplK|L" Xzz}E_`_- JwqcCZpꚠ4y* lBbuT1jZM^oi$T�eI3hqӒN!|16e[w@nklMf y6[ϓ:D &1>S7lbbʃ8=|L h?9DmU'BFcnf r,lrO_ .qWa>S\ʠc�!=8ճhf@{U>DnA-% ?COsao~ze!ÔNڮONC9<=tX~iԨQp$YJK r":P/ ~f7~|Nnt ۧR>=^�p]7 쓰ݡ , go29K`"9=(Gpv<D9}!<:$�{7;cM&A@ P==�4tY)&<y<5䞴vt1g Uab`7äMsߠ:Sz�nZa/h Q?tR.-xe  h#ix7ۓgOjMIt5yi.y!2}o;J6/GW@(grjgHBtaf/:< "-ho<=XMCit/d*FcG)H,0c`ǘv2C+z @h!eS nIi{-K_M_좌DuHS:䫐Jc x"6'镞fxd>Ep :DhWjB$۾<٤{A?n:i҄':;mC9_G:ZεQ?Z>#$lP |^>dO5:lc{�c2;q3a`ֿ ` `o >G>zIf?K:Mi[ C޶+Vȹ ﭽe)9bevX~DY^zE v|\/?s&пChGT' :ㆎW:+g̞܎pJ$y8Heش>]}{ yowTAg=c6ji% vSumǑ̚31x_2? wN"  44l(R%3{*p1Tv@8C{r^J 'CǠi<]BÏlt:9+[cg SfiH|>COGd`d'fFqdH("d%3t쉧1.LHo;4t30;Կ$eTư\@iMb<§Rjvm?smjKM*iH&H`5M=J1+L1haLҽ&<s)q,}4Uk[[?!L{z`@a1j?9rD�wM|/xZiP!R@Q󴞮 �u: Z0e:W=ޣj& Do؈0n8h^ h{ G{=2sODs9~l,f.Vx.r{^"s"# <"IW&)fHzU|ɷb>W.J` c2?fk!cft{'eܣ"Kk7*FMZ4 -'TDoo.eig?Ғ]�ן 8D@Ǿ_N<YS8o]&MDz"#Qg{%  <^"y!ipHx'5u:ZI=]8#f~30 bO" ̆ؽ[(ɵS=մԖ_xXupF!RMAxeB>D4Z>zʋ5 mZl6x*]LF}*3NtƗ>`ۿ$l_hӶsº5+znQcotPD!B]<XMC#Lu2u\�O9DɗN+9`%y 8 NҸFMqonPMվ!",zsW:JpMN Ox/և'h 9DgL{{H:>|�D_E` :Qg0Ce@=IW֜Imm۬sr2Ϸ\suxz -yDŽ >ղ (�jʋRRR.=3߂@ OlWWD/SS '@4 k}ޜ=g:r}sW jګg+p\|3No7NSR:Ú!RN^_! +(�!HpYa}vYt6h}`@KwwOg32'tuO:!@?IMK\4](p1Cӣ}DV~CzٮC$' 8%莽_T8cjά$@RS \/"@s0kNɮ o K1gѿ>o۴m"" ȻYq౔!><`M _1oN4Zɠ!lp2}4q6YSgm?[rșI'$!bƵMH("P"$xdG'K$g�S֒_E1Sӌw?*44:emlж6t%$2[NuԽs46EO�0 QKidh8yZqP Zi^K=9D<Mˈ_D ?< %1~tE*ؼ ^IŞv8Xes~<~ǁ-~NY%}jD`qX"Qg'-"Pvn]{,rkQq0؊#pVHLUg ZfXel^r)2pm:x7J4'Q|CR1=K![nJP0q4X kܨx>!<H{[FNA'^s_8A˩& <y�F3\j_/Ġofi�9CAݤƭ" 4ђEVpk^7& "6:QıA"kg3<À?R6ASmehG"_~vF|0ɔI1Kx%`7{xz<!>FW!J *#:[J ASKov5 WjҎDK 'pudn8MG<\vFr쥌6sQ'%@'{_+0R +ᩥG 0m3]` )`6\wtG8S4bloo˰wb1B^&Jj_WD]2C{=R_V^=c˛ S&H< 5؞95 0ݔgii@7wm{)p.g?){l#|&]q=jYW~E{%PJNnfsvcC$|yrx9i5 Dp2[9VwJ9-8EF`Wm볉,ۣl)TY\[DS."@#A%3@"y/ǓGύ>n"a0Ie@x�O.sR&`cecu椟[pI>10HF hYe҆DugSD 1kL#H@&$y95 f%&Jz9m~o;8_]3d9arh&RhBAGu0KJ+e'Ar#H,4CDA8n&c`(e𶣟cct tFX7U^mjKyjʇ�"vy>)xֿ*H,󴇈"˃4%_t<#d0DcQM8B~KHzM5yMzO<,fE]YTz*CӸGRpFh*rSk%L#@spqBO/XXX4!bmfZYIъw!k)d%r8-;2;i !q{"XY{&[-l"08^=MP,ˣ0:=Ad~|P'Ol`c{${<}ҤIK@;lWBHvjLE(7{| OR&#pZun .7SO^rE@s"w8ij]�j}a >gFN={ŋY){Պ|:K~&&쩕4A D]2EϘN@d^lCf8p^&9! FC$lq4lI% bwB,mNCL?nkk{SK~gcz|9?; QPcYeԍ .e"OxZy_ I z�G3DM}$hyze"ԔYɪ:Hnd85|@sK==J[|p4cUFG(*k@"cf7rO Bb}@!%JIج}q}6G5s}i�rا'sp |NhoZL)n3--k }EiI"-b:rn"ӔWȟ.% Ode#`}`oy9ḘHs{L#5)YIFVk#RH6KIy =Q@O@`kb=ܤ>&I -vG-ԯe'_N=ظ6^nuGOniƻHs;:4*6׹8" @%" ꭧӃd8!rdd:"n<Mf. ~\p!OɁw m/ SOY{%adi#$NZF38۞*Nښs]Έ Cٸri,HpɣAe.a`h/"0b=8SG=el֠Rޯ$:äAE07vb�e>Iי垀"お"XnN> hU]ў"@T&3T>y Tb 0U6MVlB/x 6c 2*GȵGIۇP>7R*K ٕ27{(:Wk&ZHr=$HY/ae"M(v].Oe3&?|̺K.ţGGՄō;ܿb!=o H�(O3==hO<4O5y-SC`] !Iybd,`o YL4gHOO9C֋匄)Fu.DAf@<TӸ|_9%!܀k� *Dh2}sY?[&R)i<F d?naRK$CȖDOENԋ@+܌iH+9=ĵr '<\OSr Ŝ܃[# ;쒔vK?[lK8wsIi3YfpIF�˨by _Eyn"$Ӹp"a914e,lIM 4EO7Lp;ΚI˂+A >6{z8B.$ƫI8C$,7LukC@cwzc7c!U9D5jѴ)J`Vp}Nv v҂xacǂT6k|l!G6- qās/H%ceG#iA{lN"qzS=2U<A ~@ bwc ,^x9K:3Dژr@TկeTѫI v[q_W@^AC$lv!W7 B,tX�7 >[9+ C[-` 0aa=?릑NVGs;)k"Z2VsB|8֓:kyE f]t_rX@PŠ( ك)G CfNSʃӈ)H|X7Rm,H!?y,I9{PoWZr6ƍ}-d6XE@'E5vPn5�TM)Si9D *Du:&@sp6ാC6eFD"\WlfH{k۵WPƼm$"j .7%ok95j ZA>kC[%)̲l.im2Si F!Wr^ .)u!]]]Z6lƩXn6T%ULhٳc.15 0S�ΐmcڡcW@"X&Ȑ٣E`-QY˚O|@7uNc!.\-f+ ܎#} "gsrGpy:#d9CP8 "'T DAbr4,Kt5Y(5'SFCQb_ZY.i:3 )2Il:Y8B-kG"Bx@"j@ qR{J"H]4-j 릵d,2` 2Ki6|\N;6� E/˦W׏_D!g4d"6CD�V�PM$O\Mi"ʂ&6fL^`.BXoc0HW2FE4:" #"S=C$@yC$�Ԛ؃RƮҧ",z*"͚D`08 tcΝIZ exEh%3@Xo'א"8S'7W[,b?$ E`Uu_~*H@ vt rRWo+bi3:iZk<MirdïX"vjL>Y))k3ދSR8!9kIk7ȇ�|$5-% ׅ"<pw!R6VeSS̙%:j'N9Kq.ӯ8Cooo?Wi!@!ī+YJqH!U)2t~ t2=X9DOROR"F^9Z/kGeFԞvh7ͬX; 9DPj.'5Ǻ6`؛WJb\g6-g! ;^=\*Q)`%ܐ-"'Kp!BgQO•IvN`{~Wvݕ5CIײMI@쾟sI 8O&vxV6g"qrMUxFWȓs<&dkt4L�i\/L!]ļ%(E`"ЌrRS AzHL!�ciڤ PI%AUe3ڒ;Κu^VRg cqXE#0yIkZ@7NVqf(rZɃ!c, ܈ѓs>Arq]Aⵯ}`uJXxq } \%TBr()4HOڹ$2WFT@e3U`1,i18En>:Gv@卼VZ\!qL< Vpx==u.I! Ĝ-~C7^Wm:i?eiIDmq%)IJF<3EgLQ G͒^.$Ysn~BB``{p;{'z ܝ23>O=l/O O+ܔ9Deu T$4˦-Iad2,ɔq*>l̄#lfjfʴhkk99S-"*Vxd�"DzZ KJ p\S"a"P8n&lS?_HDɏղ+fn3#']E%!RV~"s"yP H b€n zbJ؟?eJ5䥗^*S$ DuvJ27dd'f4-Ξc!U=y4 .| vGSDrG�΂d]I0[@3HJ8%(8^٘"zpI>")r*O<O AdO?Kv!(>b7 x~%" ,V=DRYJF1Z^z"bi$/O3Di=%0>9y!9ʨܗ 2gAW'M&ߙ1{vH&u :ipP"=rfW/HvV4"FAqE /Q"3?Ǽ8JN<S>9[q܎Fu�[x043b;C|E8H�@�P2C$L9"˪Ĝk2B\ -AiϏ�}k//5$"i=DM9D@7nJГg4@I MvFuo-ԯ"dH%GGɓ@չLe$S*D<m꡻"Hvᩂ @I Mcu3`0 m$}h'5n:ADmyM 6^>J1x@fcwshMܺaiX0,zqe'EQ:,ƇW2\F."M,Irt?YԋWn"5U2%H"0&"P�{ <W:??MG{bp%RPVǡkI+h{Ϝ9:ice\rGF!\ɐAN!sC$g5q 0$UJE ,I"'`za wΜfBi-Š:bޣb"qPWWkua"aUAFMUÔI-:JQXiަcP)W'A+V V�wDu`rW˟3既@̢Vw"9@D]yFS"PhZR]ghTh0?51վV(\mJ}Է 6T Wr@Ւ2 ɗ!9Dd" 0@RKD1L.9Dbfݔ M2SpGCOMX@�_6CD "9VP5C$L9`JC1ÔlMߏ>2z)1Bx =pɓOj)34ΚYhLE8H˟ &.Z!Hjɡ3]#Y6xSHŋ_{E ]7[:qjH+yU"!{eI0Y䪠25I!8ûj|ܫ~KҏfM5Np:ݎ,m)`-)Ǵ~\gL- xyۚ!!H,[C&$U 0nܸ9OtwD%8 + ҧWAI&P•KapFXauIgKTG�-3(H@wwr։/*aIKoRN<\C,)2C=Z0鮌$ -0ꥎ 1-vqG;/-Ѓz\�9덫�@"G}1Sœȝba7mPךS$AENtNUǒ`I";A}!i>=b6H8'3d& 6p9ĩC+"�A7Ș鯸y晛apW3߆S2i!2p3^ [#@.S淖]-" & H/!GB"0:Q"Uȟdm4Rw`? ]]]+͞}vnShڊ]/)w [L.6҃K"95qt^ToSD AKrjf̞`A۽*p̖$<>/#ѹ:ɑ2,Uyu3 !BR79[ĉ�ExKX)G`Wι'ǯXs�wg0k qk:t2*oo[`(og.6j⋀@R fKa0H ֢n^4)]Z+AoacԵ%&Ys-i &GQϞowjmv3gN877-Qy8i⋀oƙP!!d@2St#`Kd~:6 _e0Qm/D2Q'lŧ3:>-DN|޳pRGz/)Wbx8&t�q URE :) 2_|}6(`h܀7ZrӖ]F5DC؞$2wdx" u hVM5~PϮ:6LId @ тEA02 .�m{W["zH�~;'w#s/+w$/B#dG1BJs'@MaIWCD5ޖDȹ5i^j&RXRB0?jz0JE`N?b|  *4,%#㲜-~8E~Yb1笓E6,7on<>|*߽T i7Io\;$( ,bu6CQg<W.gsÐnl քߣtҴ^XmmK>c(YnQg,fSD qqx6OЄ}W9O2 boDPȌ 20˓̍68q? ?q9+N"|.N/&mf{V9"{zz6" GuEHǽ9B֕1E�@"Kb6֛+bfBs'1syXOtv>:~G0\ ]D:sTc pwѝҔwB~^ 8LNr k* p1cԐѴl&$ݜe~ݔs]8LXq(/~Wذ7BHYe4rr78;B*}(')W{:9Vxd!"@]^-):ı,FW+כN\y-|0ȅyÜ3"do71 2?wND^Mm}M _f%_I"W;n<f@lGcw4z]WxI4Y 9|Y!o_z)Orϸxj,hFPVFQVEJ&#MGmu m@ItWLl KmU�!EjHH]J \>c.]J5$\{1, )srٳ霔jږ̑fˬZk oFrvؠ2q) IƙCOG9D )R3DBҕR? $l f,`P[%MGL܎~_2O}y[>!IECD ޖ>O#E|8sGݛgt o}~{EݝNwx\my5efD}Zv^|{Ax$s5uϯ7NYC>$ᄦ!,H}l,5߲o9Dsa3 @V0lln\D`3GTW]-e{%izͼUf=l=ܡDH>ꓟyX{`$3vĈ6APm#%~( رҲҙɛ+H,z6`RCCDqW6~IWA?=-_Ywߊ#,:Tg(xo)ORu0jY9u`{=GۆU7ۧFGXw$yI*UE_5:)"wnfu3J2 ܕFa0HocxPێǠĖ\O@`3,-J9|1:fdI1D<L^%}IA L!BFȆ=Qb\1pC$Zc��'IDAT@N*̞�bCt AE 2zy A S4u!+u_3h,'x/ߦ@X5GS;,gcO`R%x;nl}l;_B}$ Oo\9DdW{бz}� ) @EQ JV< lod3C6id)N#@z]&bho yCG}|a~&Ki{.Î2ʆ 4;rH�T�P\6kbdD@!dE+Q 3 [ܫ듾(^ȯ%mh=ʓ@KgB<2:/m4}Trsւ kt| RHgM' H솼5^6CDeaՏ"PmܠkA?aUjl-<|!gCٖnj`pu3wMPh+HSgKBeesfN.{=GLkR(\FQWh+XD_JDf.xZ9(p*"6"}6ʙ3h-R:H{{p2}-kiml$9a'];(G$̖\i-VEeǣ"ԅ.=C$�{9D@|: ۃHP�:wLn0@ x6Nns1=a8Iۓِlo_._0vؽ8'?ߐ?+S JK7 5a#)@CW?O6@ED@LdƯz+iTRR.kGgşa{ZۆW*D6vؤvʩJ?V{9Làpy>)~WJ[ S)Sی<#~\kD@$0i_{9DYWSxCGIFsւ :Б?Utg;^(y%}{:KΆǔR!D a8<>m#Q<|6o?TBv�m<%Z^! {9DWnX6} ^H!q<v쑂-06s;&jc.fQVc@?P-N/ɧs+uI}FIDX&@S  �[�Pk"':$I@lsJ:]}^VV,ӶV`uerOf@W-p+P+G_=F ߎA}_bRoű~(!Q/W/~m|!(P!@0PJ#z?}ϔ˗'!`oAΟ;mA9t4Fl Tumcd.ӱg>|66y$]*K`G)ġɛ\^!B`۠@$\A Rz`d5ЯJᙜlзv-#[dN?*Mm>zsiԑH/I9'd@Hu 9*7]W I?4Evn.tm˨C$�9D@5Liz8 b[)\M BBEEԥsZ@M\&,\6ƼI|W lP['oH$Vo!/^lo9 3 ȎS*,@z&lCM͹&PD@^!@rp%W+K"2ңop8$YA`?&d*ƠS);3xΊ+:&HOrb)oϓǟO@] ]?)S@%'iޮű:k3Gg&,t&̭tҤ P"�mqm£15n,gͫ26keM'F1s)ōt%vkJɮmiYI>-ry9p 28F3u@<J]!QoXe263$)gH-΁)$ B`?a^df˭筢d:9/UEzھ+RJ9H>]l7^,؝WBΐf Rs|u.}umsR9>io9%ahCn!$ }T,~l2vw,C$`~Q\#wz@-U"8烙`lj-Ow*vAOHRo-]p8(JB|J^rbPw#EYWp|mIw/3[JlOr4.5=>$<` osf{d&lN ;7UmFK.}օ2R&`ςz5*E3=H"MѾM`Q `vO"MNI(.Rt%0:}NucTs[fϾs~GG2�ڬ!g_SS$l}(L] F}6xg 9{tf s MTSl_OǛ1OVH�mWөgvF] ^Neoe6]lTjͼ"ytevVz< ۰]!}6^|~hsH'@tSr/&~n"M@kGJg lCDEY"&ivàr]ޠ0Gv:ӛ!5 hVȚ<Rf~}Tq! -8bb}&Čٳ7upI2IIQFMy*)d{j[ڰil3. Y IwĈ ڰ*r~ zܡI A_'7\,1s\k6;gNOFsNdLѱ'oM~Vez-G4+UlɻOQseyc K|n]cv1e%YͦO޲UmI;~/ι:|+e8#@ژ{2l!䎞ld"asˣy*=~>,IhFv7a)=6a!tL3 { ؐ6MmI6wyhVHL 6[>uH6h%",&6,[Blw{ဆ~O9_~U%iY C$l&;{'O[1:OVH ~2/8ű1J�F/|~c>M>')or~G>cOxч*mg%EH@Ss9UT9)*ݡI(Do\g,.� [|K�RzI?د%h:D`PKAΐAG7ib#? 4"M1wuPhJN@*dR'<df�){y !ؒ�"Irf+iJM(O"㣭" 5|$cܞU%1JI*rOca` jx駪@Ov9͞=KIʭ/}d0, lsw^w}Yr2SmC$pZyU.贝` 5֊0W[Bq crҷ%ߦ-8Z;0~(sNATs#SdI@3D 6܅ 걨i+@T@|3UZzE  h9 ?S&4;|"`ҕdBCQ>˱d.r9Dy P`5F=7=w("qԱ:< Խ܋YWW'JP@L+qFU^$Iΰ嫒4s;%maGj:l:ڼIΐ4c1MI"�uk!Nq$b/  WљDGxn؋RV> 5$ǔ[ Z\R@~|Vy%G<,U - UQ$"Mk2q>tNm0."� Q)z:2{ni2dvqPV}6hM필(Z@ L'oq~[ZkK,u$ H@D7ґ O?`*btfDh;P~I%JR�TYaeʒ% rqCVM ?f1n9D ȭ[Q{ܼߋ[I*Dr{,i3`7eΓ## ]Dږ2u2ڈ9r~<MTgvww/oUL/s"!R@hjk*>ũOS!ߟDI@< %Aov�W:ϓwii{Y6"0z荟}OQNe%l{mf8@q֣n~{}׿hH�ĩ`vy Y";4^FWF|QȯV_6<>))r8<gZ٢FYϕΒPYs+s �9C*[ Wn!8sMΐ "@6td~_j|#`ܼIPG|H~kD-}rԨQ[RI8s-a )DV~sp\~O!R\nH~8ukڟ?T x"H6!I*JO6c3r5gL,.]+e꧄<q=v!Rln]:}Ao}Xl&#Q۹ d9BȊ6} s4}5< kؒfKY֯:Q(K63BK~a(lIm_@FjHp=8CMLտ":f {ҹzM` e1(Om� !*"P0Nb~G3mAkj./V]m1Ps&/  |NTKG`n<O,@R%Mm{e)>>Uv`7Wy8>]!x u[W$bG%̐ClbU母_$ sMgy} @�ҙ:eر,5�g,@/N՟Pwq GԲ|I@v6oI5mYƕ.9D U*Y"46ѺtzoG*I`[o)/ #n!C@`_})om)stuuicN\%F ;kc&娶Nd !mW *[WzsjHM ]tIHm^YnXwڮp%Tb)F1KklltM=#p"t@kӎ]=9,A_8 aTͥ>P5lAZIKDA^D۝N5l`wM&N܆b@miKg?lh eBN6{Lΐ)E�,!SK !=oFHr lrE nЈ¨)R]-tK;r6oj>:5.AW@ l:i҄':;E*{SZhGl J]-~&Reif5 USz_́(=I4 M@1q?Խ㨃҇lyOY"Q{*xY)q L]9+ZRS )<3k!"P< !U\Y&)y"([8paSj[XȒ.ؖs_e.BeupjNx\JA N@!rʻ tͿѷ�7Eș�p&K�illǹ@Tߩ<Y9]0'맸M`\.5i.LV;G9.p6Ŝ 9Mؒ|β$N:>ykstL@?~˖-{n)`A<ӆ}9O($,оutm ZAD&z~%e"0bR v LHKiu쁕E+C* nl'+ǎݽ|]JEIe TU{Re#N7n c1jǗ=4܄g3gv2SBfLC}`öykzU0S&>}'OmP)W $\dZB:RWZv"TG#'S*G6"zk)X>윋ġN{FrK j˝:L2nJsފmgyӌٳ7pZf@LzI]JJ=6>ߧ-3h\JO賈t" t<B者ў袻س(Ejuڜ$+=5@?G' ̹)SG_ Og-EU^Z<Zo)ʕ? `enGǶ V@܎bv"s%lϤG?E躟6{I,D`3NMDm$˧9/F91l 'LsΞ*?u?}Y:D =;SgM=~/abzcmmQZ# `T?{TWڸiV~BX2/5."0{rSfm&gZ\/6`;zشg9ϰr7#اje9LİfcA_󬾉@5 O+7EqF3ۖCD@D@D@D@D'mLZ6c釉gCC,50s+A~#}%D" " " " "qc};k}k6֑�-I j&1' KhP3F1; /t'I 'c 駷W_. p{nۑ*-)N kI Kgw�h@!oe{Ə`ҥͲ^7˵=sbz}ec6c klSk#{ :r"kf ݜILi`ΗOƨ̦= 4 i餡y}m b4F`K4vImlZ67#i:ar*AMPei] m@#'ܜ앟K9+¸|q</_^ u~5Zz :D@D@D@D@D?-p_`LxdoD_0P=?6\lB*dA3LvPF4}1})5!}Hg=.9DT;g/Q'EU" " " ""1駯LܓC$W$f́�ΐ X0D@D@D@D@D@D@\0'ȱ9CF9D3i̘1gY#'D@D@D@D@D@D@'p*Q>b H tj, QED@D@D@D@D@D 1Y29DH_ ~5RK I &|x1:m= 56"Tor\H6UM5g"ݼ ^AT6@@3D)j/z߭D"їZHq8C#!Ō&HLu/Rʥ3SL(�Ulyp o(LD@z<"Uj2a K/a#*B2I&+2sb)"E4!Lz! H>r.3T(]" " " " " " k`˜=ՙ !z bߪUN)r ?@j{* B"! I8E,T�/0;e2?p^_CQf 4i." " " " " "�3C#ΐ0$(rE:G)kHszooMBៀ"Rpӵ)Q*D@D@D@D@D@D -.nooeikP%I`g"cuɨ MTD@D@D@D9[r]R'k%ΐSX"m} xQFMS7TDfw9CT&!/y  |Ofoʶ6HUlA7EeS4u)KNE)mR6R5M@itPD@D@D@r%%3.F,(Ȁ4C$( 8F^n D 0fz}19Cͧ<͒C$OiZjժPߓJD@D@D@D@D@`<w` bUKUD $6JO1AȲ"" " " "  ؒ1`\wgjN`s�5~x/_D@D@D@B@G}jA/0o@CDq�\BS's\W 4gpEЌ@2E)K[+'NC$>4(q7nܘҕ<%HD 71o(H rx h"<[[_K9E@*G`33hDr9FeP@I%ǵaC hMY"_и#i1pTd"ɌS^d֜ G޸ԥL˝kr(e% ;p$Ξ/NVY " " " F" E1<BK/t-Z,-e#UrخG|SZi@@w�}H 2ET'"U2;PR'0=@( l&bYZD@D@D@D`8r G(8?zϛ 71fߟrEh@.Eٍ YZjվ4`{ ѫϪ-ӥ" " " "#9Dxa9ㅻ?w1 7!N@4j.h9Hv`ɛh,diM;$" " " Clszp| {{{q~YtZ !U!7\t.|{]I N433̨QD@D@D@C>md$|>A >r~ 3=!$ h@dT(ۨu a)8JИ-,[T" " " "P( hiS"W O*vޖXxBǟe3|>-C\ЀuUqt V-i 4қ9ɦ|nj:D@D@D@D@Ds(�@EbJR9A-d ,s PD5tKTJ] R39g#ʝ\{]s.P@P@PCc����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/package.json���������������������������������������������0000664�0000000�0000000�00000006254�14467713645�0023013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "@rjsf/core", "version": "5.12.1", "description": "A simple React component capable of building HTML forms out of a JSON schema.", "scripts": { "build:ts": "rimraf lib && tsc", "build:cjs": "esbuild ./src/index.ts --bundle --outfile=dist/index.js --sourcemap --packages=external --format=cjs", "build:esm": "esbuild ./src/index.ts --bundle --outfile=dist/index.esm.js --sourcemap --packages=external --format=esm", "build:umd": "rollup dist/index.esm.js --format=umd --file=dist/core.umd.js --name=JSONSchemaForm", "build": "rimraf dist && npm run build:ts && npm run build:cjs && npm run build:esm && npm run build:umd", "cs-check": "prettier -l \"{src,test,testSnap}/**/*.[jt]s?(x)\"", "cs-format": "prettier \"{src,test,testSnap}/**/*.[jt]s?(x)\" --write", "lint": "eslint src test", "precommit": "lint-staged", "publish-to-npm": "npm run build && npm publish", "test": "jest", "test:debug": "node --inspect-brk node_modules/.bin/jest", "test:update": "jest --u", "test:watch": "jest --watch", "test-coverage": "jest --coverage" }, "lint-staged": { "{src,test,testSnap}/**/*.[jt]s?(x)": [ "eslint --fix", "prettier --write" ] }, "main": "dist/index.js", "module": "lib/index.js", "typings": "lib/index.d.ts", "files": [ "dist", "lib", "src" ], "engineStrict": false, "engines": { "node": ">=14" }, "peerDependencies": { "@rjsf/utils": "^5.8.x", "react": "^16.14.0 || >=17" }, "dependencies": { "lodash": "^4.17.21", "lodash-es": "^4.17.21", "markdown-to-jsx": "^7.3.2", "nanoid": "^3.3.6", "prop-types": "^15.8.1" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv6": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/lodash": "^4.14.196", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "ajv": "^8.12.0", "atob": "^2.1.2", "babel-jest": "^29.6.2", "chai": "^3.5.0", "esbuild": "^0.18.19", "eslint": "^8.46.0", "html": "^1.0.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "jsdom": "^20.0.3", "mocha": "^10.2.0", "react": "^17.0.2", "react-dom": "^17.0.2", "react-portal": "^4.2.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "sinon": "^9.2.4", "typescript": "^4.9.5" }, "directories": { "test": "test" }, "repository": { "type": "git", "url": "git+https://github.com/rjsf-team/react-jsonschema-form.git" }, "author": "Nicolas Perriault <nperriault@mozilla.com>", "contributors": [ "Heath Chiavettone <heath.chiavettone@freenome.com" ], "keywords": [ "react", "form", "json-schema" ], "license": "Apache-2.0", "homepage": "https://github.com/rjsf-team/react-jsonschema-form", "publishConfig": { "access": "public" } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/screenshot.png�������������������������������������������0000664�0000000�0000000�00000436763�14467713645�0023424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����}�����BiCCPICC Profile��(c``H,(aa``+) rwRR` `Ġ\\T�Qk .ȬͫOp`ݦKcG\)@$000&�% v -Rt=N׀I g -d?uӑP{nP021H$XRAIjE v/,L(QpPg^(!?�#B,)q.PP!%VC20(H,BxKqͽu5^.c`` �%am���VeXIfMM�*����i�������������������D������à������}����ASCII���Screenshot3��iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/"> <exif:PixelXDimension>1219</exif:PixelXDimension> <exif:UserComment>Screenshot</exif:UserComment> <exif:PixelYDimension>893</exif:PixelYDimension> </rdf:Description> </rdf:RDF> </x:xmpmeta> ? T��@�IDATxxEHGz((@c`]];Q {"U)Nf憄|yww̻{w=L�:" " " " " " " " "H SC(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0$SH S(0d]|c*Y)SL&Rʕ+ͦMbUlYSDwM.-[UV… ]w-Z4uVG&" " " " " ")BVPOQɴ mۚ+v8g}c5Zzi~As1{}Dj8tPϚiӦ;ۼ@! ϰp^|Etؖk/ӽ{wM@P#޽{Gڵk#k@ 1l/L<9N:I Є6B" a}::dH KʈH*N;̔+Wά_PEE@D@D@D@D@D`g$ 1,AnӚE ̛7/w}}k@# 1,3wĻ{>=r6Ee8ve" " " " " " @Ű-[[j[HSP!N$#YQpaӵkWSJXY?yf3k,3i$|rSR%SF ӢE b֭s?ݶab{f{DM6ٳgQSʕլYT^=\ئ7.v}ۍg$l7nYb?9TZ0:^2ew5k̙3 a=0 40ժUK~`Ekʔ)fԩn Bj׮mի7V(e˖mԙQX1WԦ]Dm'<??ժU4ls|Fκ 69/bϟbs9M:v"6@H6իݶ?lrhI{];I.Y93;pݏ;,^]52M65e˖ VM^|;\';�*a!" " " " " @7?]~mC7oFetb؜9s=c~t:gƾ?zAdzi<t b ?ߴl2]:*Æ KWrBaLV;v̮j59qDꫯ>,6/jOvkD {{.n}9:t0_PBW8!,\Э7a„I'd."'vf&K;︎}hQ+Eޙ iFL <3'Xj ^rUE9ryGS%❏#F;\#>hIu]g,X ӣGs;q9 uK4&B7N^o_y׃bGz̉'[Ď. }vi_6=Xl~۶mSO=e^xtch߾} G{79^hN=TSxqW^D@D@D@D@D@D ?Ȓ{RЋWK.$r1!C̱W ·~p ΫyQ_;!#3!u;'|Qr8М~ 0 =s\G2#wG9�a23>|f&ą~?xpHqė<Ν;oNa!G'QQOqpIdxQa/(ˉv]vE aAT+K/HÃz\z ܹse]愓 Ew}\qqҥKݵ?OcaA/ #PDBN7# k\O 6B=6|q7XAe<;_y9|AǺ2$EUO_5jQl^Dx %k_|9s]Tx:tгj}1G\"ś~:<Og!%+F2K,ɰaVw\d<Cm3̛oHgyf\%X! O[NNx!|mG <zȉs^TgD޽{d$Dd N"k( OAmV !ﺼܸ..BUTY[nQ08l4CD@D@D@D@D@R@W'!8x[a?.B. Q#?T8'xu:|Fu #lUV. FW_Wu^JmڴI7!/#tat? LB$2޻o`.0-#SNK3=DhkXC" †xF7rCQϝI]~x8 ̋7B6PӋsXc"<2lw ٤C(&aAySo/'nf\}2dzĠ}<- iKk~ͅ08^p~iB!K.1ts4†6Ͽ/K(+ax! fs!p{[c\yˍAsmDz,4bt֭I⅂Rkk\d<"n:a=7|҉G &r34:rtf}Ǔetl#n}uo<*D,ˆD| !`z#T-#yGq/>?)hlk׭[7OBI �1eN@[/hQs)n)I+aFC3?쁈H0^ O!IITDl Os͐I&.<jA1cF)my/2A 9&j r? zHF#W}#J +h6<`ud^-n{ NaA1>r`<ocSqƱEcqk]t!q>aA seB aTDxNY ax= a;_c兆IPe=8!~踇0MDD+-G>ƹC;t<"6дXD '!< O.rB%2@w<<Qa.n~}/<. 0?F BGP`b9B/_~ ˬ"D@B7b\6 i?>淁P0= Og}6DՍA!̗!_E'd_&N G<,W\a:HHM2wo-<FV:thԢ<$ /;;cƌ-*VXl:S+WLj5aBcf+!d=p ^sA/Fg ދ*j=MQbcѢEt:aSbsEHhp|C.xU_X <z衇:a#|[aOհ0|g1!UV,,Q35D>`b}D(Cs11ET޻u*VhJ*(ܼ.8Fr}rxL oGE@D@D@D@D@D ȶ@W3(q! xipzA"!@EpySx*hIMRO03vYFh! 0AOHaᵓ2 M~*U'~N֏ Cu+ނ|"s]u%4c-2>#nZ*k+,-J`jԨhfp 8h"wms}s]5*89ݻwZa^s ^<1xLi(2"3D@D@D@D@D@D`g#m1 ρph4}t?>ڹkK TNx@P̠7P2eb] z$sp~qf#!jc +w8t*x\Ыd֬YQEcSb+ <ǏA(eƂފbx~n <YxB G$ G@KdQs yE}fر<ļ 6lfrUˊ<Ԭʋ@*vΰDao9_fڵ1v=}{06>a> 'U߾}]`f@"v׮]7/HgG".¤v} .`0ssI<dE2s2Ǭ2" " " " " " iÅЩp{j͛7 {Ű# U2dyXiC)b>WGn\0rL9EZHp=8%A=(ίObK\0F#u 7 S]EFAzE&z&w,c K58y29EԠ9YmKD@D@D@D@D@ lav: O&Z%?CxI@ KdA-32e bԡCV\NuFLƢ(Hf=v?5yd'D=r.|0JS-(G؃)* ~ ds%ߍE#44(+F uȬ#"QxU 2,QNot!/<FgKƂ!ɔeu_" " " " " "P P1,ad>}%!QX!@4s=qGY Waq}G k~G}4]g?#G>۴ic|zF$<{yK/<ȥDb̒Ǘp{P 3m8qb- 6$Hԇ?ߍ&4'])4/[N[@ CPK4hA`:I[ m2QD%5hdE[*^GD@D@D@D@D@D ءbX8!=Bׇ~hN<Hƌw饗 D`s6мyBؿk ?3||w]"v_&S+ϴ̌cM8#9xNp a>g8f̘غIעF6l0x£r~5ja<C a^(ʭv0zŰ/ҍulvONMF{]䵅k('g=7-\DB UCq~e| ^~s=Nc~Ϟ=b_4BޢFۺu3T.˼z<H~nli~s;bBZ|y䮢#4zի}"ZE +H~;sczG n'0Q u6vTɉO͇6ޭޚNLE{8w1gB{Öۂ3EC=Ê)0;9:saz$FT*Onn4A,z.Y:2[lq(cJ<+ ~9vCQ tE#իX .0[vȝFwUVoo1<(x;<쳱r~c�<0q*r/q>vEyQ@܂Gj _au7lGt;y睗6E0&x'۞{dytA[%GCD_37,?\AF`a@Awbx _"{ zc;A1/}E2$I:^S C_Atglc/lQyay~H1kLN*Kd'pB01 nm/nXD岳 ok6f^~enAKPeюh]f+bؠAy@r~Kd#^H14#g%~W ~]djZUD@D@D@D@D@vZ;4LSC4פ>ITiGk׮ION:%U!=B,Dsd=XwUتT fn|_yC;!]tP.Eds/۱cǤ9!^rbxeEqG'OM~.ʉ@A!%1cxO!k ٙg6߻woH>;8Od8p`wg4B ?#,3CHzꩧ[?cxHٷo e #SXy~skmc$#�!'Ŏ +WAׯ_BkK(av'w m+Q&dxdɒYt^_y}KE@D@D@D@D@D 0l$3g q\d}]n.vIHhO~/Zɶ͛gƍgVXոqHA={>ԨQqDƍ]Ŋ3[mۦKN(B�o8ZWaŬ03f|ml$#;ɉpXB4rQer]deY)Kx?'s._׋-rɑa_kBa˖-F%w`<17Enq~D@D@D@D@D@D U 0q1P@8q?Q"_ 0ɜء} 6<d" " " " " " " "  d 1qy-Cv!yHN3D@D@D@D@D@D@D@D E(L2END2ѴiӸFiH.O@a%zoΖTD@D@D@D@D@D@D / (L2/o&s'  (L2QFu֙bŊZj5kŋPE@D@D@D@D@D@D@D o H [ڻ@.Pΰ\]-ay_{Erv%" " " " " " " "$-]D@D@D@D@D@D@D@D  H Eڕ@w\$ 1,akW" " " " " " " " yKHVv?~JȩK͆M[NYD¦^UUGmU~*%" " " " " "P0 [,XZlݺ`BPS.bʕ+gj֬iJ.Z2%º=:B"X,DA"A,f?a&L0ժUsLR�B-uŦI&I bI{&ox4WD@D@D@D@D@D@<*T`/nIZ>Gԡ 6ol+BmԨQJ5)O@|EHİRJ **-0-j .ByKƒsWXbⓘ(QBBX9eHjliKZ +TUq(GX<ʴSk&1,YR*'" " " " " " " " H PHİdI@' 1,ߟBU@D@D@D@D@D@D@D@D YÒ%r" " " " " " " " İ| U?.\hxŊf„ IWpfڵk~" 1�lUUD@D@D@D@D@D@e]fa<3欳27xcR͠A\cǚ^z)Qq-ۉ H ۉO&" " " " " " g}fuf>Ɣ)S̐!CrtX!P$7 ZJ9e3׬ݰB"V*_i%~2x]Es|93(j*.npYfS)T(ݢ\y[~YT;=JeJsy':<]fѪMc6lb+fźv]s|۩k7szؼ_Ͽn%}Y.\ y٭dQS^Qvw{н :oʿͤ5v*Qss[p4f]M]?͔Ekw3%oR߷`_Ymo-ߪy;/Wh^y<cV/Z+;�Qo9sfc=)bUyLM2e2#lժUzŌBj֬ilbS؊~f^h)W)U*-[֔.]:/}K3f#ڵk#=W_7MM_"Z͝;ό7<fٲen;{[]{GM…%\5\c;0ӹsؼGy|71g}+Lc5:x sqǙ]wM߯믿G}dN;:;vm*JعqxC}?sۿ7G6 5\\Osol;>{n'45g8LWiw'HSsVSimO'4Mjx |Bs)8=43會;NhgǑJ;}Js#_CU5^xp:!͠E~2 N ,Ifݬ& f}_ 9mc馿mt7=9m=s{Ɩ'dAtx65Os@\vm WZhE ^2ݞ-}$d~ {3jWHw, u /4i<q:A7\fRsߺ\ui^'suū֛^G1W;s70_| l_v^Ce$C#ok;F.̂E�!UVYͿ['!Od]t1W^y9s3̵^k~ buNf&M"f^I'<8SNQFn^hzBۂ4]l޼\~f֭3t믿.OakSOu+bxsG7|4lдmn."n:3p@;,Y$h0f͚#бʕ+k:Epo{ ba7t5k;rE .M̴%k)VcFs޻2|<&of̬)rr05><h{lӨn-c6hXO$oĔ*+M<+돰w1'P7WWvҶAڏ+unZڛ;m{|?}9I5Gq.mx͐k7w LYbnyWqęs O9xWDn"+qVs>҉뙮q ztaf?+ãol)ln9v߸'}<Ts=;<ށV.O<d"�<2<>ؼv}"2۵^ - /11˱miyG�3쳏;</{׬Yc<>:=^?9;cڴicXu\V-Wz6K阕ZvmnYYWes�a?0/(=+JAZi%㭇ʲ5q~5i#6U˖0<ڦvRBL8/͑V7mg=˾}!9ix7 P3|b',ZĬ۸<D'EA;Ǿm63:?h;u]֏s̱kCpetbj 7g9q5׹FZ~3[VݧF9sgV*lf%摞vV|nKյy-sEF.D¯e^n hװ}`O6mma/͐jt137ַSñSjzgFL^bfӢnsI-Ljp}O #y,U o{U !<ymc!x 2||aq '.0sֻO 5G[hCZ 8Z}fyzNF[կd,٘p[ټehԶS.9;F|A{{H<{&#<ފt^E:?XEʼ9z9ƶ'<c Ӊ ]=Yc;^D̴kL}*|o5 cæKך +k ݬmJeR+8f/ÛT7w{D*t9%ݳ紉yὄ7Vw[p؇߅q owv~ŋ~vc~m;7nwx>=|+G뉏czX]m{,r #xpp<0N~㵥3,1pvypCLQh}Ϟm=w_k""fūv^֣͟D֦lySg3=�_{㞀w^5N[/ 4ejs9bWvۅs{?!ؾ_p/ ?Kݹwsw|{/GE=w/k=z|!F;�^'xuQO>D?Sp; p@Gi..{Mz](GN ƙ(y 7Ë*hp {_~qHV˗GndɒیqwuKPޱcGS~}XF^;t{キj??76mr!x?<w[B5jٲeΞ=U`#FpߤIҭ|4!6qDC4l#{'Ж0XLBkkeVXd;'_njHJ'wH3>֓#!Bea{vp[!N'^.%mt&-\vP:Z(lW=ތO9ώe=R wHCscbyv u|rTCŭ55<(W /~#ߊt/ci˵it}j;[-lotB b^�7*'jm*[˩f\{U+kżA.V8 o[AEĿَDE+6Uou<eXqN0B?͉U<\CT4x ͝w@W0d?3MѱFXI#ܶc#@}.oױvγmƮڐ?xA [qm\g=h ?8ĊGymG\9ȑ6/1ߡmk=0D#v{鶓z-dIEˁkkeړ[:1O/k~㦭 dV }?tw̰ \_^~"Ro;>4x,,|? 3/dKSŠjx'7Sv9 r2/u.yG6_Lqs='XW+0lxuT5ꌰwОU!&jKx"@ԺEgGbE^fq {{uPJwhSR͏ʊ'5cB}7'F>4^N`g۞|cB)5mEVn<72X{2_D= !4zvO[kl#|@6佾yo!޼p�΄ : #d ϳ ip 't+믿??B Nl#o#UӿC8dwk'Ov49Ə&Ϻu>m`{+F:MzF~24O< /O>y尜eY>x^1ʶ� 1,l~90D`B!bԩ^͵B^x's1˰W B�r3qm?�a-.<m;sxE,?4#suZ&{&T|[r`exϱ.�/]r^!oqI1z\oߴ5Uf|Nxe=6;)D(uC Ƅ `A`d=AX}L#(k.鸗y nug;~XfFz?") 9ox)<U[lG}2j D66uV,=NX켓c'w0<m$QOiBq`CaOhֈy&1!~ʊEcB"|vGyn8yq.Tb"4G9uרzYWwBZs4/ /DKknޟƊs (+ȁH2^ N3||hE4 ^5B!<1kN:QFIžl~c'9Е~n<lx$/~cfEuhXe\xMjTG~8&BMN%(Y[7tr3f[Ya.c/m溙`=OLJNu>/up3$j<wU&e=b!/�O?sﶿܧuMcǥv){_/>v͙p / {3+}uX/IuN[>o+D Hw_? BȅOS"+^A7mh#4?CHv7'4hРdƛP12yD:2 .v0cSx<MKAy~aSX1gfڴi΋п|KJ;{HA{"Xڵ]VjFB*I/<1o 73gd#>W0vG0/:x*a<,kY  9^=mHrYþ<,۷slQ!S[\{*L}?džֹZ\@AuC. !_,ӌԆ=�&8k:;9$5Mӭͦ-5Iý83X@?h'"?z,>b;3Ǐtİlh)J'uPgwp߹=mq0yr I?:$9v{y91]D[ ^xSGN72nvۊu0:[oP}3](+ĥJnp7aa5;kBGP™CMЍKh4F »i95EhzrD�dXv\iYG)8`ܞzmT?/8m~g!Zo.oSl{\Η ~r>|׷Y;joamJ^~DJ[g3+ݙk{#"4so!oC5y,ǻjU]FKk.:uo W:c3ўdȇ gE< ZfiS=Kj18pp[.ZhFC C“ /p`FX"Txy'H&!$"駟g_%(I&:^cCwlgΜ9|C=}ByCC9fFM< kAoE5%l^s!sN�nYH k 1!/xVhQa煈QԨ'1O9lvĺT}te !"oÛ!so: O~Y!'w<116 U=#-/ $QqsYE!3֫\=~wQrv0)?/̟eQ`9a~|6-uPܜ~HN*OAsƹ| fumr6I"iBmIux:C,o,yW&/3ηzEW" VD#,QC4Ǽ4һ6Ts:f~��@�IDAT<Fن~KeݴH?ƒ,l>4Hu~E4,? TڊT;RAVP2+umì<BK 2rqq_z9W 6\Tov?mky{Gh]zHնo g)x3rz;emK%ꅘ2~^VȵW~[y Bgm2ƃ7?`=IEq}ئgFg&5l0C C|3p05-]L2Ō9yH- 7W֭ zyۻ]úC!}y ZGnnT+aԔ0\>.b Qsn}<h^nӧOwwynIZJ2c0_hO9!QÌn;$oDWN!q+l!taExCyk;K+Cc%T!3xTkqxxM쭮͹^˛ָz9ˆ9vIϼ֩!û'yuF!ß*FrBHN{o3_\Bwr0= ɧ=-obovGv0BVp1o:^̧d|\6ov= C\_ڼV: bp Vy݊bxugkf<'*^ I{WҮ6^0f,sN:xY&@F.[}qǶA/j0qf!? %9 Q ogG}sUۼ.Wf=mNAlϨV�lw~^2uyD#ץp83^B;rp^նk"xﳙcuOZVl:Ũ{ p?O6�.׽~p~M>fdkgo]a$>8OKׄ`u{8 d ^yQ-x _!m{Aw|n>x3D H0BW ߱uOD�D-f+flGx;PIʐg O1:Þ~i 1niOI?l1PV0 rJڈ@4*dH;,h}Qk*U\-B,a\/xOK:8o ,`vɍfsx㢃]Utpm^0rY JG9l#&/u9<-O*UŰ6 }a@$o;?oGmŰ.uovBwjٴjPNsL`x £B ?ͭ7[Qm X.< <gOua^ :`Jn|P&M"}wMΰHBRve-Mўnα64v/9'"֮>:^n~0.DFi p0*'Q;S {Oڽ͟]o5>#*UU|yųM/j8Nƾ輭E䵝`ÐPHozW[x(Qp=DGNvE<.c!Č{)p_\ec~*a͝e֖(X鬖z3B-<d<-F[Vnע)8Ay~ki󼌸=| ׄ7^t$@49sE_%3{=_p_<:2r$82A9ȏy}eoyP1ں={ M$<1]wٶm[(2۷wzF}dʩS~Bڵa4J<|z_bIuֹ?<W 9tm3,F#?l8^Alj',@saq*Xmr?E9/1AͧP工ςK W<xh-mVm$IH$/>ΏwoڇK­.>l/^Pm.TPT{a:q[kd?�o #qMG<h⡇u% Nϯh޾̎uНCr.nMo;KFg(+f|gC偕=/񝷴$z̚^o@xzyju1jMV޵yl73ޙ;7߆|hW  <,nI4Fl^݈H›gP FQJp<sIvۼ7hne~y- %&1>lo; S V-#0G;@{Mq<<sN ޓn\WzlZqN$ 󃟙ݯɹO""ayuMs &Yew0ya4&-X3ܦ8`?k;(fwO<rӧtt/ o-%Iٱӭ q ~�ꈷeI08 dw3}p?,޹p SVy6^Pr�O=o{^߃mx[{*fK� 53a# ʇH\G= ҥ[[]vYxwwK'WN\n&3v( pp} ~+vАv!FxCb̠!qw.[h rD@D`G(ds،K[+˼P%ȳvWPpX5nD r\h72"dFQ"ᓷq-xGNl& yXH|6RK®ŝWxy;Pa6 Qƒ  w2<ɿUM<CۿzAU63hOl;r v񶙨݅QL~5oV|#,8H/H0ŁD,嚦iL[˸C;d-aN֛QAAP%1xIx'[,q&-GV]asėwOmͶ^oe{ʀ䧊ޞ:r,*GgZ>p/-o;>4ʿ7PbNdOTVC=F`d4̌cǎu2+b4</pm϶D{%�mʲggh G,5jQd8_:ʴo#wf#W<ÂGAe<�N)!,2< G=?FJj}ΰxkP;˼E 9UxAfwFxfFJԶ- v A /Z:}c=1ZyA0WӖFy<)|~6~}"*'{|ܯ>^ʐtAv ؗ\Vǚ{GVyp~98Oǻ6OݼGOQ^,Pn{/8߂6ͽ'0:a4ry뭷2x.EaGanX2LT6;ewJq4\rlo};7('6ҕG<?v~]"p Y-fCFؤfQj^@z)?6t SGX'${LD@D TV-=:(&u;˼ Y" " " " " " A@aqt`d$0y*)" " " " " " " " H 'P/" " " " " " 9M[lj{"^Ab; ڰO |r7:i `]k@<$ihZD@D@D@D@D@D@DԬY̛7,YDbj)M�0)vI&SQH@ҥM&M̂ ܹs e"#JM$%CIeD@D@D@D@D@D@D@XhԨQ[(L eQD@D@D@D@D@D@D@DHZ +Q% > hŰ{UMCN</:*HZ Ƚ |d" " " " " " " " Mп֒=WlFN]j6lڒj;m9D0<U~*&" " " " " " " ; ,a;KUI 0ɂGؙH ۙΦ"" " " " " " " "İxPD@D@D@D@D@D@D@D`g" 1lg:@BBİl." " " " " " " "  H KG E@D@D@D@D@D@D@D@v&v$$P$R-ŋ[oefΜimcs)jժ%,;o޼… J*ŋ1UVի/+W47o6+W\ufŊf͚sbM kԨaoV-Ǹe3m4SJSbŬ^巃û \޺uvlA'.rʹ_ҥa%URD@D@D@D@D@D x衇LVi [3vXsUW%,۴i ԩc.2sGB /\{P6+3cV^mG~!$v <Ԯ]N3;LjץK_kƜuYIW�B؄ ( T$PK{EoҤIFgX*I@@L;D0{ׄw9S ^K˗/7cƌq%\b.B1nC 3'7߸B?)Yd+D wd c" U!-V6QFGnT@D@D@D@D@D@ )Sƅ!)8O8qPW^y%K/(հab~7Զm[W_m֬Y[aswC9s1mƍ ֻ\YO0>Ӊy?uTs'#F6v{wuٳgǖM>?e@G5(/bW9elGu^a{nnСauiO?4<_W_}ꅨƾXs=ÔmKYRLѢEgaTkO)vI Kʈ@<@WQP3wa=z0=!7eC"owB;?yp ^3-^]t 7`;8Ogy}֫WωKSLq~W3ydw߹pfֿs':mܹNcҥK EHc޽]X#{OHWD W<9F+'7onu]ͱÇpIrԯ_tMfȐ!n5DHw}e˖.lzx裏6W^y/LǎsMB0'r~>h2HUO)5J:\sǺpT,m/s}m4k-.]ݼ{=r ,oǭbL9,ocf rhmlh* Vmv7wܲdU/W*nlf`ߦFy+7o,/SӮ[$=<\\XS^#ܠfyXMMXfw-[|7(w k7JtlkqӤf<WF YW7mqgw& , Ve&/Z{fFo^^>i*[bq2Յv9eKFn!.2)x'`"aGy[aVjUCbyD3k!?Aë|n^ix,hJpC>q?GyYLO~D&r>6=&}֭[e˖yx!a?|M-ʖ-҈xFh(~XF2~r!զM`QO?- m:ur!xuQ Bo6l8[nq"1c0`;O$'1$2<$%S<Ē\3M:wkv+<=4d/3vߵo^(d9,$ݑU:44;)Q4Qqt_MAL$|?}9QfJ/b88hE?<gq/pˣ͂{$Qgg^NxSRc͌'Gn84[B@t_vF3Š(;Lƻ/)-cuf;;K6;8-?G.o^ HY$9|R^^a(@TnSe3|?[~Mf>i3cvݷwa=c6ߠ۾L]62/+"/`[ޫ;fXk7HWy䋜{?&}D!;ڵsnbq V>㏝1:^{6k,ƌPGyCh"<iS A 믿މBd͋a_;/eƼClH'W0xi]?z !Q2!y8's>E`%b(yH9no8or}@Nh]xC̄+ ?Xn^s}=6tPݞU55ZK(_Ҽ>jVL kVy h;עy9fCM[Z\sTؼ&rDO~5՜m[x ?qfk7bQbEv1x?\oB؃2[q/ ~ꛓ'?>x߸{͙V8q`<s}k~:9Qq Y$'=~Vrfo88bRs?E [7[UzzwKzʮNl6Xo,1bޕؿYo=8s²|ǠmI&}ӉaxrHQF9$hXF!bBâL8_{mzc!:aCTû^xz衆C8Nr /( 0h pˠQc e>1?UC+M&"PLFAsƳߙ6ie2<3|yMêe?1ON)c<zNm[Ͻ#xZBԥfjec=0ocM7tN{pֳߛ*1Vؿ?L-rFv:~3c[U$&,դŮsEE'#BnRiQ>݅Mp-]o]CHgG{ocp[!}j3=c=||a8 _r%]HE*eͱ7ClN{83z`բnsI-0PzdieBHѓ_M1gv|}|Ӹ5*2 TKW)ݟ7v2Nhz9y-N<znt-GīO#{T-c*]ʮJb`t ψxCkY£nA}NtE{>9X+=mKZ̬Ώ~7v`*6{`ܛzHOfl n9/}ymO ZvO!ooi+1 n#/gӼa H3׆s_y'SZ~g+_^y<B 贷 ATb"v&٭em7g׫h,^mƻ*5͕v!o=SgS3Bqw6aC˾_ϭ۝]~w6pXiNy[sm7q^MtO K9+oemye9`k{W+|;x;&aE=9צAeD(CLrYfo/ʔ(|6u\ Sڵ5ֽ{wԹsgH*<ȅGK4hP:~ ۴iS,(FfΜ9nuu N]$'0lxPaiѢ kEb#ʋL3iӦi5h"#Gc{OFCD7n }9 /6̋~>E@DZ"V6?ytM?B֢lvylӠ^Xs}p~ܶ1ƒ|ʥ}V̙_ ey(9> Q�lҢU~-m`@-V47۷oY!ll07%�M!Li k{^օp!=hOJ|[!2ئ6Lmy _^9 CxTm"~}gtD\؅M9rkF6x}}6fNJcmΑve<8s |rTC |;m9׆A3<xNcÏii<컪aGa!wBeG4rB a=aڰ{Nj7:X*#:'k>"8o[|!lta2N:숝]x-5Lc96؋s`τp")ބ87IO2bWLbX/ =3@+b]n|>h_QҮas`Mk6go,DEWhۿT3]eWw,L􃆠v&F uyո>[1a{۸gtBڮ<gx ֑cߵ t$O4ZM:+l6~* gظz3?Wm azuhE>={V7s3#5ݳ$}K rU{[D=NO~Ʌ~SO5"UF*DD ; ъF~=.{ ۷wII$O"ϟo†wOn0 QTFyXw<d%Kc#bz %eaHȤ|xO>ļsΉ拀@@Ƨآ7A0p Cb&W둄"7đVwI i[3?]Ή]ճY[3Ӆ|#7zeCc_N6y[T<.]޼8rkSWཪ7~*i8?OnOÔ~{8EG4oxJx)Bk[d;2xTa8lSXe"n/%6vI !SBhG9m{Zi Nݟ溯x!a˗*nNzWmjQb7|w3? 9y5wZ6>W4!͓F =m iG1|Po…rK(Vi9A Ao#Gbu*xuB˗^v~5</ziCS'L<ˬݓ ^B~2srkiXsd^O^ : n<0[a?f'/Bǽnj~ m^ǼiK/l=wanc_8_>Ώs7ms�-V~c'|{QKd_}<hE#7>g/_kӪfkWt^EDPG:wo-'va<.<tOi{٫?ż~ FBx3RdXa9L^z)_xI'$ ;|38ykC»cqI=hF!"+v-a?DU\h$`>Xfbpy o80<H!1d(ww;^xt%ȗQ#V^m+~g>;=8ٱjZD`''boO (D)<̵ -аC5iXHR4y敵 ! a!޺؎`x34<;zsxxscEogΣRgڎX!A8Y o `Bvx1,'_>U? Fkx m!Q6s:7]+6p>_*,fVkXF:fWKڧdIGҏTϷ۳rl5795`Js,jíx0Ou^pms|^cI0¿QX}z2X@e{XOgZYGs>Ĩ-<٫6G y~CC',r"wwMGFLˀO +h"fcKϋ6FٚBYV0�:l@ -5+m^o0ˉaO؁6G_h #ҏ8}1/Q^&Uޟ<KR⡺f?*JA6i<KRIJx#;lW8< ?y%ӷ~gv &Wޏo9З+ $$'#O+?O'B1!e|$;bRm./e1r||?og<(0|H ]RIE(b 6)b;* X�E+ *Rol6&MIٙwf= VrÇML0 eD,2 uvK:(a1XkN2($ꫯS?g~\rUMsz[@giةSL`(QN,>\uHk׽4CNš5q}e};S]`Q<3 9ũL3>n<pq 냗>zxc+U*}Vpr9tIִ w\WX8h,؇�\oIwqߜyFgX*`b[L-ϩ%:VN 2lLPН/ǥI"VX{\Π{^cA9PC'p U;eYǹew{P9 VEHu`2c2Ywױ/\(xG"ew9{(~Ҹ]UWuP}{<;,;>䁢"|E;(0и,j;ru'& O ;C30T 1V6oѮ0`%8H{Us[A_|ِrUY<8P֮E8o8 N罓1/JGo#ЩS'?~L0!`Cp Soco �oqyNݗ[窗WॗҺ7Ft|em,9lŠDW_v-odA{Yf2L/{'SNy,H(cԅ 3% $2_5Ӊ%~5Rej0(#q*x81b, g1[*eΰajUHR-ˆZ]Jqf6H5&  n ;A]Gw2+x38+:1⏓Mi[ei.z41ATB�&X"8bD9hK;D2 y^b~N mWO D--] `7VX@`Z ss /-] tNF VD iSP8]]4Y TN3̓SXn-)QB+$ 4.:36p#+F[vq/{F "ؙKd!$D{ͺ؞g{b5X0_賃SLV`)l%8s22Ec]JH:"') ̱&bBV{P㙤nL{ -AZJb<o b܎P/azRS(M�Rt$ ?~ܸ֯_X5'&BӦM3Vp9Nj_*Ò^lQ/Pf19hi [^ X !3aGeL<1ɍJan* E+ *P(c: 3Vc4~"gIɘ8%Î�7ceHȆ= G`N[I�  נ+ZɦIe9][Xsv? -,RX-" (=fq<¬YT9wa_|j~L<(}Fu &pD@g[oٗn'<jytobY�+z$@VaXvJ uBxBPM{|k*:`%ka܄H>7k\:cu =ʇ_- = 4.:.$X�/-lb T <sn"ٯT3o{<C@ň~ 1.1!U^;,̫➵718yBю)HNUHOT~pA|G)] !: Xiu}(,an%1EX 1~ Q;쵹% L�#@Jco|ꩧ;-VPopcƌ,*a8a ĿC||PO9zyGyD*>cO>1r̚5$B ,޺vj_|az۳:* % @9l}MYqmt~'?'b , r܏>6zÆ 6;͓(?`a Y<ñJXA n{Cc@b.]YW;D�l,UW諣 6(k,^mc ++?SE1?b[εL:N -&.x8zY`"Gm5&w3/NqpQ~}9ʇ݂o][F2rz\ 8Jnzq]aD!M/]!틿aXL'P.ܰ_~LۺַmG1yaƩ3;܍# rE}e1 o+֍}mX!16u0(A0Dl`kY̳x&PO1�+  +c2@|x]tYqЦ53%s4NJ3tecuE]H V۴F/9שɘڿn~|'he殷oEHw` ,n`9e10*: XApxTA-&3L$PF¢}u\:ƙbMҸ`ֻ@& XVVEe]|#Rn?>L1ՒҮ(+l_Q]jq=zOX%y9g 0C[^;Y~& HL2F %ڵkA5DC$0zٳ;w(7|caݺu qx XW.wrukfbb BY3;#X  ;/_^֭+_|Y`׮];PO5X׶+"=S(Skb7Δ[\{ҤI&NbXzXݻof&zs10W~gҷo_0õWZeVoʕ&,ѰaCACo)?n:Dg(h"XEb R;!jϑSQ?:05J.\(+T><Jc?Iֲi8"ywQjq)>#aԜջ~KG>+NZ_$OՖhW|Q8/s ZLҰImJuCq- T+#5l#z?`\E$AA?h�(]I6E e\t^$ 'VI|~{1ؼe8^oOQuD[!.5}m薔خx&Sj,㮏;goΤ泿{($@$ r(J\ER(]ʟخ]<RU*t4~NsL_Q/Jg}ReZ7;sLW_UYVXa:w~,7o6uÇGmٲ%jƍ>[A>g]|µq\]3>qȐ!̉j߾}ٳZO6U.YVU}Bk&?Uҙ8'ѣGGJ?n"@W5uSk(|>8V_џd I[J76*˾v% +c;; V$&�㑺w0&pa*p/yW]%t'/NqF4:% jH +:wv3wO)Bn0rr cW_u\6G'-v(3H�| '_8'> =Uo[ugZ뒉ڥchRb"[01~罟)X|YGqPHH#Ppa/X-^X]OF!8cP [ iUy$?paj۶E[ `Q U"X}VZҹsgAA#$õaɤ4= @e]f 9i5իWEr:z]2SL&I͚Ӭ;> 5}5F8g(Oӿu4,ޛ]jX6FIhX 4JbmxW?+bQHx* 8c4 H$@$@ !�C2"6+W6m۶5b\U᪈N"qŪPA `>CixbpM7x`ɕ+ B(܂r8˹+g_eXy&MHR/CշofD֭C9CiZ}N�G! &q=q ))3m*B$@$;vG / x^(3 9sF/K,ϟ?J%KE.$@EF" bŊðC8\o۹s ʋ`uϘ1CsyN[A]#bwjz˙.gҪU+ TSPZa0[0'wB eIEKl- � � � � � � � $@:u ]zE&6jȸ J(p.օ+DbEG-Vgeƌ 4&<e9J*& XSauIo}3J;ws *D0a)8W:t)?/͛77[99BO*W ~yٳH>換;m~ Pi2,R"      N _|ȑ#eȐ! 6\'UfKGy|䣏>Io?TTXA6ydD]/F ALz㊉|n��@�IDATrOM #( fwWnĥªX+\BզMPti .*ެ9~xObe_#3' >],4s}}y?#{;}$@$@$@$@$@$@$@i… ^_6~c'o­1L>8p@l󖏍9(O,bu/8WI x;>\y$Q&, *&-|~       D!�eN )ׄ"VX)PP:}\ә>g3fXjjMօHHHHHHHH/*A        DʰԚ � � � � � � � _TÃ$@$@$@$@$@$@$@$@�a5Y         IHHHHHHHR*RSk.$@$@$@$@$@$@$ҧO/.\H $ W`$T4$@$@$@$@$@$@$@@<yd*JnaPb      HCJ(!۶m={B, {J*,O_ot=7RLC$@$@$@$@$@$@iɓ'erxb95aPeϞ=S&&"       H 2J$@$@$@$@$@$ݻei&̱eJN/ Μ9#ׯ}IrdɒAqvC8Mv8;x7oWvH ueXlW֊HHHHHA`ȑRfMiذcϗKJ^'p셂mС="ŋ7xCX/Ν;65JnXbY.yB ri1bs;eԼysixHJJ� � � � � D<XCE. wyG|M0`@?/kז;ڵkťm۶s~([l|O;>5k,Z(> �aAbB     &a3fSnVɝ;KNJ.-/TTIgϜ9Sz-}o^4i"PBAYWݺu宻 ?d&pwakϛǎX_!_?zhtb9? υ -;FzX 2'O(TbW0g VZzAQx dc믛|M6{͵GS6o>&KnHH dT'� � � � � u֭3ZhEvL1(=*3f̐?\xiٲ@t}5\cfvrBka9r^4h|vR[nrJyow}(reM,Y;h .zUWy{2p@;wnZ-[&k֔"Vp.} >(;V>S2eH߾}3+PzdɒEyrK$@`�P1= � � � � @'gWP PlYA bŊ__~\ҧOsxҦywY^}UJ40XW-ZΚ5q߼B�s1%J"EH=W.\I& qȷiӦFa)S&_Qf!tNA|:}՜ CXA!?:o<ٿ~ݴpRK � ć�asHHHHH4EB>[lqXE'O͞=Q JS|Z Kp1ܱc`eLXA'N40۶CFc8Zj?J_m6sizAf'0_|1Ic$@$` MҒHHHHH$�++Ȋ+B(˟[2dwaB`Me YVIٵjժ׀Kb%KSܹs搻^κcMX\$y_ٙ� @ Z+� � � � � @jԨaOUfMq*`!wA b!%G~H=\X 1obq=s&=OVN)^9ۿ/M'L`EP~,po}6իW_؉fXjժKec$~ pe� � � � � @�puDl]|Ic8bp{$_|f  ]7oQF A+#",s&j?QaKq(A,0 cL\1mfC2D+fUH, *qӐ6u6l9A`EzYƓ$#  $2dˁrXE>1?wb外wRL}U^]kC}#ߡ[v>%DZ3˚=?;d0;#NDVL?_[R|Q;,$`1b7Av-qw=z:ج5]jG3[ >_Of-}gŎ#IOC'~]xӁ$-{O4L;>ykˡ4LJ%4-} ߡԷ~>}¦]mڴ1*>3q W>ڈtv._P( Lj ia_ , qx`7xI3gNc)/"Hge*/^,pۄz|;iܸy睂dPمp+_q@u% PSMPv5ϫ來d<Sc2Z|a-f<ifןlttxcR#I52d8׼f)yE)_8:AI6 <&\ LYOGDMhy~~?ȓ7]-/ɫҹp+KI;ޞV^2V+=@#VBg%>٥PD~OOcv}9m|}~RPNœ_.LvG: c\lc֢rd$F׶'eC{4;ݿƽK*[SZh\>αZQ3=X[(LZUEdTڒ7{fs)(j5^psکJ>]v8GW>ߓ�7pg7T7w^<z^KRH*J 6lV7Mz &@@=[õBcb%b"4qSNM<p<~qㄢ J1ojzoyp � 8 \rw g;ʟ]>m+IދbadS_M޽N EFK^lm&_g]ɨkTI"쓣`kn`c:REJ꽙eF]5*q{!D{=0>eOmE[25,^ɭ0G\R$eeXZz$^ e} _fЋZW(#AR8jfωʚj Nق)C:Yʥ_.m^-4Y3ɬU%`ϖ9S^9^a<ws 34wyeZvwW|27|OR<o6Un3/n_ZR)KJA@źnsNd( H P y6+R*l $?E :.s'=N BKۺ քGKWgȴtZ2%B&.b4b R Z:oǦǥnTkR<a1uw-3Δ!<ۦ>,wg*;ՔrskNk0(#wU }}<܌Q˩+oj,0ir>4rWJ`>h?tAsͮ۾?_먹&bzxuD=\ҏR9�M,J>،]𯾱%Y3eRH'U7\%,딒ol5mwM<uX z|SW믾\0m>_Ok?y]EVM(Fm?'n(-D[6M]dhqm"v+V<"EPNeU>m0W7Բqhw-!{B*ZX*ءо56_7+-_Zy V9/$w^w*ɠo x+e @mZFX@ОC:V7͎dIe|GO'7:2-& +؉6?i;߫nKؠ]{WX>uuϕ;kz}ConIHHhvELݶP3ta OdX/_("!Ɯצ{gZ20s;W!c0yé KWưbqo1uGuZpܯs_,zX~,ذόCv|FoA߅UVѿ/X3kF9zLkSXZË+Fi,?rEk=[ q~a㯼 ۽1GkSY]0_Q0G~q5^{}\Y$RǓ[=8z{]ͲXfmwîZGVc܁gޚk Frzx<�9u]_Baχ~={8ߠ㖘V*+tS#jĿ_-5fH9]&rY(=N_~b镄EHH@œYPcR\`(./5'L^kC(:*)wkN$Ϟ(U)7a0P׏~71$U(,gkcJK?4aePT= 񰥓jf5 ,oC L( q(T\o CkjRI^^];<G (P7U|4o@9VG ՙrYyA0xA't2v iҫ⥣*0a q;kߨi.4ǐ/R~P* ,oS7"-+2 ZSSI bܥom;dT.e8&o*w"ùqP hl*"waLodzFp5fi2@}LZ6[ 2k:A{XA aPR^Da TIiPbE6 ZuA0'P,@ee]H#Ul!/[cI@xN'jXUE!Cyp)  m{JnW)m7S uvmƊ3{y@A߄@>t኉uR*Z0�ps{_KgU>^Q@cdU%^`\Q0ܮc]֌bf끓&iz<"au(lH�(j^9&鋨\f\?XAS!oʛc@_N;o㨿=/Kuȧ7p:R34򻌗4[xa(k">wx s'+|~>ؗasAz0ۥP.Cy)ϦpK?sKLzSHH X'OkʢEd…uCQWJ!adcb|5FZ?ޠA XU@`} L' uoyzRJR V%5D)dxhCZ}}0soyGb<YG`MUD>JooaI |*8]Re4[H8}udsN>ׂL?Xr! ҉+ì@* -{?ɧ7h=XkX6�>?7ξqu" k+w1g ~ Xь1L BsрV�F${nO9ux5FQ8?</j>ȗ]nQcUm~z/C*h 3(ȬP�H_}3AݿSwL(7(%5J _m&Эo#2:N_Rn*{^/#ֿ5ׇR)+<Ua| qn;IGjY'7wKZu `r S([?V񍕋ctoQE71[Ph l?ZV)jJȽ >l\nwT i[yY*!pQP8# z(f6)`(R ,< ~G@_zPL06l:l X]ݧ/#'o]ByX׽rm|(?oX <X8f bR`<#@9jf9Pzú݇p✄T8<֐sE`S:&G&eĨ+c/Tm=x|φI̓U^zB\|?Tm5v%!~_0n fB V/H%�Њ+tR|y�B禤tLQʕ+]IJ&0X@V<j&.DGYUl<p!Ac+++m=Qݣ2kQ RRLP@ _L~3_e.e5`J Ń1[p/={EXU5*q%%>V0Cӝ h~N PV<2l*l *ZCMròi n4A}M <( PNLo3-kY" yG@ M= ްt ۰GZXTe!&zV4>H*|yLuw.ba.IGe<Y'5O5A+6omI$s;kĜ{A!_59X uX}t{F2vx PC_yVf%q(*{/ںarg*} FqJ0c׽E1.V0 V]'`yO.G/nlͤTnEc@cMh6۪JںZx^1Up;E0.#8o^n y`˛*[\ռi LxI? > w9_f_ 44o{Gr\*1.гsu^/ ^0y?� ۍ"HK3b:+FK-c=4~<Qbm7 ZqE}(MU;b|MΊ-bcj9C3j`Y<7P@ > U A)g9J:L~q4ɀ!; F# }Y2F[)̜P'TV0F<L9iX.mXmÒͦ.cvUz|A�hW dOBA}` UyGq &֯qgbz u(ܽzJ'bE6cuJo8XW[`E_uC> S 7Nty=|wHcOxB䂸@c v3Sa(w{ܹ0LRZ:1d ӂ-oBoLzzno̯h#0Mzy.qԟCyfuO8Z­}}&@s|k"}&v<X+gxn_cwR@^TH#GEX /E"lْW咋@* :/j Vyk;rVŔ@]=j{ \<�;)L<'|1Ʃ&H@"k0D?6ŕ K[La2CTi}ȭ5J1oC)ORuNPyZ- BBh 9-'ktT76FX6Z�W6On fh 4lˋ6V:R&̾7.ujmW-7NmJBoWZ\ ;A|] ܝXnͩ� &P8rTӻn)h+,LŶ}P;y^LoZ@:DW-?  P$q(G|Eu { E?E%E[ˬ{Ͷ%&7 mDq/%-5boA0fپhB'g2)J)+CB(W�2~{<Akbσ-oBoW}׈;Ɔ? ,X `H]Ev7baͱ`= [X ^¹C3`&Br`=lVUWK~_ca&XZ,\p($@$_% VSiEPWԙ6x7SSlnܔ 1GosǃV-링3{*Cַ褪τ?MAQ⾾W6(g|5s+s=:vP07Fc!3>`պ1=GJ"<jz\ E `=$+/�Jvdf?b!(4&Ҙ.Ǽ? Z:'n;Չ./#bO+Wn/{Z>crnPT ܶ-VĵJ\饟><#OL:Pw=&\xvYpYWD3m :m536ݮPaBXX?_ y%VH{Y5 ]Ai >[IȽo1vmg(3(DՕ!m4ShB e~u{KV&؅J\Vq6² qV5` !ۈErT9{qc2C)obf Vg`In32g,Jʼ8{--؛k&[5l�^aHp~|϶Pn;**_0s{ƬnAcg+(@3 � � @4$ 2x{,x# %~]5)pk992ʋxPueؐ͛/<dZx+";^UR ;Չ<b+$ |oteuʎ 8VjK$&tX8#:մ'TYP_Z [;Ոu>c+t? c N+nFi<LU/uĊa$y@2H!qյLŇ Ϸ6_>@_h#i } liֽb}0ņU9k-ȁ'tRK-%Rʇ6GSDm'E1`IzH:@S Ʀ9%&8a8^U7 VK{u pXvBroQy~}6wu"y $bZ7SɘX뙫vȻjI/KXD X 4ƹ㱇w7%k^fc]wl&WJw]Ib[8 `uU?=&OmB=~o.+tb%B0m5X %9%g@CH;}5)/4VQ` u:BiI2)=3?%- ~_Gs3ު=%gyp1l\Isf$@$@$SدSHz!*|jbk#7 wV4(c"`:gL LYfiaV;ºґZ# *E mO$th;"1)<}n,D];|_N;,/˔1ֵr5XzH&WN Z9g3;V gLhu}8TV:տro`XH|]'5]~Ca1ݼ{ki['Kqb܇;( Р*oRzv9LeJ.2}a_cMI[;X!&u12z{\a 1 .\(ճ_6-9M4J)sC2^a]R N,EUN\N @l\!_uɩxνp<`;9\6!fߝ@@%>@݃}P&XA4G>LѾ8PWl>q(#\"殏{#ɞ뤆1-m _qI<|"cIw=>z),'mgw~ϝM; � � @l}=~KOVGk6аM>RS7mt흔IW+^HHH 5Hn>@$@$@$@$@$@$@H - :GbK2L')Jk� � � � � � � D3gСCR`ATdɒŔܹs{n)VdȐ!¤TfMIHHHHHH `]SOɓ'%{f/_>5jTREm&۷SJɒ%ZfNuIHHHHHHH X'NnݺI6m(&Md,z!.0r,. /_N$@$@$@$@$@$@i={L=+Vhe˖~ZNc%fAҶm[c-v͛!<yX&MUŋ.]ҥKeȐ!cM6Iݥnݺf̘a "@e/2O$@$@$@$@$@$@$4+B/.Aܹsȑ#RD y%W\F!v uV6l9l2߿\{2rHi׮|?Ew֭e2k֬P[-Z?�c; � � � � � � @O>{OLj׮-=TV͓'`PA;f^ 벦MJ~$SLR~}OeΝRzu$1p̑#+U@h(ƍ']wI$&@e� � � � � � � ċ@…_^֮]k,{dĉFVɿhѢʖ-[? ֭3q< c>t(u͚5rqimذA8`rKqM2        ΃UWʕ4J0_1FonAL"y'x"N"Ex>}Ze&PٿFIǎ=ih&$@$@$@$@$@$@$@!{o ϟ|A~o &@G?sLd3^Re+WNO>t͓{z 2MIHHHHHHB&`=zŋMm۶/lB@M0 K{Sr-|`?$QHKT_)HHHHHR8ݻweӦMkRlYԩ\~~b7o^ə3gtN2�BdٵkY)$PPW^16?/"=o޼k7hqR +K}+U$/ :Tz-ɞ=Yeov&gE j]b     He0Y4l0`ϟ/K.^zM[Jٳq͘1Cz-˗/s,vmV{[W_}%]vr,'pBW^/tQٷo teX;?^>lb!؅ ̊P>X%3k9Khysd7Fv=X:     I�a(cAbz�*Æ $"!Β״?س_DHr-˗7*`'HP8'kX,xP |<HHHHH g}f Ɯ{ /`v;v|nҤ <73o2cƌ1֭+?YƓ5NjpK.}vy7Ek5ʓ~ҤIzj9sݻw/ғHH 2,(C$@$@$@$@$Zr)bAti.U[n&O?-sJ; 7  0V\{NJ*eرO\Pa+V7n4K(!765k&+V4HR#*RcN$@$@$@$@$@Cy,X]աCbjѢEFM7$2 VegϞ5#G.=Qll(0|ܸq6t2Ν;Ç7 sNjժڱcGk!nIH jIY!     H"U)\={qSDի V>})*, ɓ'V]*eiӦvY9\NWI._ɒ%ͮ,YCܒ� @%@˰48 � � � � @Rh׮̚5KJVVX ?߿%[lw99%k֬r.w�qwzOB~  4JaiYm     #p #`=VwHҥra>8f7bŊEfC̱?S*T`qK$@$�a�0 � � � � � "yf?bF /ɓ<x`ǂ $527qdСW̙ceJ1b*TG 1(+m|d==rVZɇ02dH P mUN KǢ� � � � � $/)Sx`6ps֭eܹI+| >i$GLyA x kԨI+vUWF9߼x^'�.)R$W&3%mH6Z� � � � � U#G5kJÆ "@KJ^M'NXg!X A1Gp| �׊+K.,S, +W6<#�a, � � � � @޽[Əo\ e;u$XBi�b۷o#GӥFk$,J(AEXjl`u2&       H}ҧ*F$@$@$@$@$@$@$@$@$@)NwA8!'ΞUsM0w9%NsL~gqD;|s3l!}qme&78k!5p}7{_kx;~^ h[HٷqT5�.9<Oj?#9=}<-hoś?skԔb(&lHHHHHH6e_K!թ+c*#fwW6JpSWfC.7%ez'Sp&HJڟ\_kk)K4sssVz6']W;Yڽ1G>*U|w^#AkӾGԾ'\" Il>\gT:X+~o_ܜO<me9|"]G /0su ?̕[UhB|vi`4_-AFr bsluOߝ^[     H4-2uTnm[Ie(#]&4 4(+fjۤۧۯ.ʘNn]Im^!7),1M^.U3ܿ]UT,,cj ҉:R"oدxꫥ2Osɚ)C$/ŔîZ}(say|~YycƆW.Hڹ)!Xbk3&8sX7%3duŎ2nf|BLL$@$@$@$@$@ a0[Whci |tY2S=iP9nV\k[ٳnM#'g&%ז'O}q l&ٸ٥'}r~TWvՋK) \}X>Z(�1M[%>Nz_;VðG ㆫD^+,&R/T2VUXUcWJ3{nyE֨PY׍Wvu}C-iSk)n{{tm\^ZV.jԾeo2Z+k&`'iLG 굥ɫא ق e <y='h"sm*ueYݗ~|a)Czy:̵qZ^[:*+KyLUNGJ!p̞jy_I=t]Y$ PU&]N }cˋg +ڟky}U*5yΘ|5klұnzk״7]-qWoiw\UK-H޲eKꭧi7-W8)[@j QFi 8c:meVxfo_oPc&؈ilZ-X^S, X=ɔHHHHHHq(@7幤*>W%U3&J\[G_Zѓڪ|^'"P<ؤQ-g5#9bVeU.a6VU WW))%zJ-m؏+urNoTN\E߫6 'Hz̾z("D@P}~y}jbM<,yE*3o?<+t?b~Ùs.^^h~pǣ2#~Z%]3RJ#o1mgIy2 YrCY^݈]?]_QFI4U?8{θ9C٢ۏm4}+P.š?阼һ*zxQ0]P̄"(ӵ XwLQ/TE|/_HFYS] S{?>bY7P#(/ѯp="q⺨%[z5ıU1q dRWu_}5Pwhq(v\9܇M(/9RߡC1a�� � � � � @2 aLh>~)K ,``*˻eJ=+᪄hV7P{NMȤی5Kj+E\QkX.%;jcŰqEEgjyYhÌɰW<P'Ұ!{]��@�IDATezHsGW*ŌrK&@ ATNcATI4 ._iPX &"{ConZtyr*QQjy9B PB �s5ݬ[HˣyQB?W4ʓybS^]8ygntFisPZkSẃ~ɪ0z۵KV,ځv~_ݎ*3qqfX.vlNݕ-`. "kUp`un}еj}k@bZ"R;CeT͒FH4, � � � � I dΣA'N.R~*♀͢ J\?jp m%)˸i_gus 3}LW*Qa_kzae Z1ߤհTuŕy-pOZ=n (>UB {s)<.h1E(x`NeX6eب.NN6=h.� Q+nR+FXY*°<w RWǪE-nn@>Vs:*e^RB�+Xw\T@(Ü9wLƭu=bR\ٯUiTn,Wҵ5"m Bjj_ g;d )ơWRi!    '0L"$X~+=kXW?uEkLL] Ds- D'užr]Y%_K1yEIȬ }׏56qs7צ-1N&3*{˞`HΩG .t t :J3dP;ܥx$VdRRHN(e-VY^s b[+ "Ϋ�Қꪈ@tyn˗r*1ԸxTk*wwp#m#k;+-1F@)q^B!pqҸ"v"KX3_zDxx$@$@$@$@$$2 ,=!;X{!i;rV&nYJm`kOV(U2X[lܐSұv)ciPΌ^KVVXg&V!�K+k] GU4nCn8UE2 eJH[S@bc 2R2P.ڜMi#2Z ?(@QX]WZ9nv*'JuM|(v9mb|ٕa:D[(vaW\Ay2&X?~1w' wp,6r',#u솕(RY�%5>KӧX_p`+_]4Y]+cQw[~ς4$@$@$@$@$@$,#<&h$X\^pi~(MB͆t |I Mj(o[%5maވc w8CXʀpG\$XHA)CmVeXxl\a7xr9w$:~ؘ9ɳn^2_\ ĬC|fDq] + +}T.8ɾS@E)/sJ(m</?up}`0R\];ܷwқWk;(gp|ۿM&j$bMANCtX^fW @:}@,0{hB|# {FꕋU3W�V/|LSh|4 /3,ugmcڳ_Gު)Vrb ۭ.nD/#n<HHHHH@ 08a1(X0>&'g|GwLBmvA?ѷqA~+畟j&[ɖ˽uyjl!}cX[ E�,V-R˽~w3~o``XAε$ZH9vUS_7CCp}%ʲ4DZ H5L%zyXJƧuBXaCNQŹE+J^V`4yz7 #LX)l WIXF=˖5KP< Nh:nn ewˌEX!m,OC flpX ՛`OO~7`)E`a Eg(Ac\!VXg Ǹw~gWwU  #P;)51c.ĊX}"}aHHHHHHB!NcD~ jxVB`,@2bZFXp A*g|oBwW4ok<jё%cJ~)Q7 A筎GF5Ġ8V.gu0l*OJ؏{*ˡ VЏ8d\2aUθv?#|B@eO+lJHIyn}1PqʡmcW  ;}qӶ\iIHHHHR'T KZ� � � � � � � � $&XbfͼHHHHHHHHH PYҐ� � � � � � � � �aaˬIHHHHHHH"�a, � � � � � � � @ PF̚HHHHHHHH PYҐ� � � � � � � � �aaˬIHHHHHHH"�a, � � � � � � � @ PF̚HHHHHHHH PYҐ� � � � � � � � �aaˬIHHHHHHH"�a, � � � � � � � @ PF̚HHHHHHHH PYҐ� � � � � � � � �aaˬIHHHHHHH"�a, � � � � � � � @ PF̚HHHHHHHH PYҐ� � � � � � � � �aaˬIHHHHHHH"�a, � � � � � � � @ PF̚HHHHHHHH PYҐ� � � � � � � � �aaˬIHHHHHHH"�a, � � � � � � � @ PF̚HHHHHHHH PYҐ� � � � � � � � �aaˬIHHHHHHH"@`s`2 � � � � � � � � $9 f(HHHHHHHHRIFdHHHHHHHH#@eXpHHHHHHHH 2,4"@$@$@$@$@$@$@$@$*ÂT$@$@$@$@$@$@$@$@�aY        P'"       H K*� � � � � � � � Gʰ81 � � � � � � � @* @eX*hDVHHHHHHHH 8TljHHHHHHHHR*RA# $@$@$@$@$@$@$@$@2,8NLE$@$@$@$@$@$@$@$ P U        �aqb*        T@ʰTЈ � � � � � � � @p S� � � � � � � � TFdHHHHHHHH#@eXpHHHHHHHH 2,4"@$@$@$@$@$@$@$@$%Kx3gɓ  � � � @'.]:ɞ=ϟ_f͚y� � � @`T1vaw6)3f/.S� � � � @�ӧˡCH"T$@$@$@"I&y av$@$@$@$@E�ϖx̗/<p0e>$@$@$@@(`0 � � � � �5O:' � � @*#ve0/\@TqX   $sgD�j,$@$@$@ veX<SHHHHHHHHH , VfJ$@$@$@$@$@$@$@$+[e"   HԞ={L=*ɐ!Cٳaɑ#.]:,mرcRLɖ-P}޴i]V*V(e˖Mr$@$@ 2,6~#    D!+]we,X(y;ݻw>Ժud֬YT5Fmʾpp]:|UVҾ}{yg믿\&$ ?*ϘW    Hc<(3fo|NN*O>,Z(lLk$'N;v,+Kh<HH  M2a2+    �~ɀhڴ/oR`TD 4idʔ)pz]J…N}^=~Izm^HH 0*3b     @TT2r=He/|?9q℉}5kVsΖ-[̙3&СC~zɕ+TPo\2fAjAG .H<yL9o޼y%cƸ\Ν {AާNӧO'O-K,={vw#C97 "Es.^(۷OΟ?/3U6Zk\veo޽qFɝ;+Wq|DQ>An*E51qq6C۝;wF='beΜٓ+ۥXb&>M=uE|4(h[06C+4mbqK$@i@:1 g=~1SHHHHH \0d?]tDP.[(`4}t3gq,^QA9H`MOzi*wyAs='K,ս+r^ү_?cLܿ7n of@Pk(~`!駟+W:O7X/Ԯ][:pX1Ӟy>||oˮ]74 #F 7`*ONRix@8rHi֬'?Ӕ̜Ҷm[*X5j0BywnhA�|oaa„ vԨQҤID!Cxp/S :W\!l &UT~8S(Đ� @Z&OZ� � � � @ L<PJ5h|G )(fjժr*ef w[n(j*UdQaNƎkZ (i޼ eРA>&^lC*UA0JWBizj w5^ob#XcwQE*U-]Z(miJj-JլHDIޛ)Y{}}zO9)V2 xo!C4تU8;;ˆ Qķ~" Biƍݻz ;vLVZe-LMZnfȷ~۳[~~jԨ=˧Cd[dnҤG̙3M}m�`KիWÇ |V~}XlڴI7xCҢ3HM ݉aa5~|i$@$@$@$@$`O&gڵ]c+DC(Kٳw x@aaϞ=O>zf=ICāW2#faÆi14yS sk<% [ <  60hQɘ/\PXl2Wڇ[ ~|0ĶJW^;؊8`�ϷthW!b}W޽~^xݻwOxF?xf|ajر>cС)/vZWa {1B (B B Lu:H2"}r\}q7<V`p 9m6V K`nFM^c"pHHHHRq$<<==Myg50L}'Rn]bdaG`` `ba@/q8h0oF{7e-߅aۦ`^n̸7N 1 ! u[Oaì yU /1fx ah [(mf?l;G: ! t( (:HH H7aqF )d$Z*W,X!0D.?p3+a&MMS-tӧO  ďK6 VП/&ӦM3$1ALH0� � � � c~m~ eR v5x `ԫWT[ |ڌ'N F .l=jժY'EGy40bbNak>hm$Cm XƖN ^a5ƈֆ0is ^j憹<'5AaxV[-17yM0˛ |& F ]aB^"~㉠ wb Vf�Xm Vq < n!6po>} {XyW^?/uR 0M$@$@$@$`kdز˗[ C.s0Pa~|.he͚ո[!~a a>0lD,E13ɼ,v8`Qwǎd[+szxx]F, /777+̔ΐX{itgoHǷ'y:DxO$@Oy1̖G+ 3g�`Az饗1װv0L8 4:3\'c' [ +$̈ڎca$`(&&X ֭ 4Ha܈O�9&ԠA]<&R88XI¸?\3ܬ!v<pc1   H  6aP Kʺ6Eq0?[hyQlٲ魐F"&ױ}Cp->?~\~wh)ǘ7ǬPn|0̱ Q'$!.m2<Ko;悦yإNs7`k  Ȕj)S  xM} 5�±~cLR&7 ػwo}qǺL…ulI9#QH/+<ȑ#|';w4E[!l-X4q6PWi6&4! AJ (.ƍb&)t � � � dTXOX$D [c~32=q?9%~skm2rX0TE5eAvN$ B ɛfMlX`}s/9=̧aV3ym,,ч-0HI# H^iF CO@B́##3D0L^ [&qj ,xBU\tcUu n AIħ˫j0 A� cXmNJkB̚0aW�o1=c 9z~Nc<hm۶/�gHC=] <0ΦMj97fHHHH #\/k׮: F|ژJG+Qa"aXP<y^5bdaNs+;wQ5o8Vء`I 6<`ƶnm4f$2Чю1E  E\0ðaԩ0x# Wֻ5l � @H$Z0 V|yٽ{~!!gb "L P 'AFc@x[q %:ùO[o飗:}A}$6;AMl2Ԣ-pDwM"=A~3@\cL@la-10HHH20|sc.9! B Ɣ3,³cǎ:n$ / 0gÖCs2#4"C`O! #Pa׹sgS5ck"Mb_dcQM6:/ P,j2dMx' o4̡ *1&U:DC,xC4bc!̉͗T  ҄gVu! 5kDRt ګ$q\4{ƶI#FCL[O<Gké0{l,ϟ?_aTbER 폘XxЙf 2kxA 3>MԱɃ-+ &c4   aKq`LR7lyp+橆01,";c6=,Qo55T(9_|!�ALR #d "bb["? JAvLw0̛C~c'BL}b@8a @a> s1f$i%B#jbfyؾUhj� @j!`[H-o0gm?E<>a" Q8gWHlj,IBvdٲez<%ܮ ;Ҭ3#Nرcܕせ4VE4lb[101Xb3<NA\[t &0} ˒� � � @z"SkebksExapk`F؆-ay Q1 ͆yu Ae9)vI ž Ccˊ-cbn 1i 6i,LƈAB38 oaxg7bd|QB`k�12o7!`^$@$ 0@71s1C1]7e`][�!<o2+x~L:+#?†Ojʰ=&43gE 0!0s tr~\zZ7<sB -LR 0yAHHHH~ FAbQ`A F1F}C2B5j, /̩1ǴW>*l4PWC0fK^raƖ\}]  (i3xY _! mK=hR}]VRc!X'b= a^pi$pG>0xY2  D|.1={_Ռ1Yaa#N~Ċ 'A;zU] }�FWX � 6h$@$@$@$@�ZhЋ]۷o׃d؋8   pPBF-OFFjJTSpl?kIRʠcェ<3P<<J+C2 180\sa঎q f{`4}. � � � $�eIb_BIkqronaD� � @F"&Ű$@$@$@$@#@1,fNXaO8 �1,1 1  H6ɴ$    E�q~Fѐ� � } dowHHHHHHHHR�=R={&   H'O O'   #Ӌ(%']M$@$@$@$!$=C@C� � p@        '@1,G@$@$@$@$@$@$@$@$`'ݐ� � � � � � � � <a)8        ;f'HHHHHHHH P Kw� � � � � � � � ؉�0;f7$@$@$@$@$@$@$@$@)ObXʿHHHHHHHHN( 4!       HyY5+Wث+C$@$@$@$@$@$@$@$@6 M ss+`s�ə)o% gJ?yr%gmoݺMZla?+Q$>Em)־jX_RxzJ-"HfREtD<KhyMu ]MMY\<-.eKK~LM̏%2"\#7KTyդ� � � $͛75taQ   JnbX֬Y 9O&wh*Y2eLj)]@ JyD3.5 yx|D;b>rD\*!/K9<ZEv|Dt'6 I}s~?~B/~[괪c_%~>zTJپ}@x欜^'N@ɞ+oRr/&Î[kb lι%jROoɜ=9v07n,.^KNZx;2?v\%At 8"(Hߺm?$@$@$@)F wuuMpHHH C%ݺ2H߀ ɑ-߲㬯)Trn Yi45)1SdŗgIFQM(J<V6o*;$_JE RF~ŗrMiFտH&tS_Ηנ|D>z]8>ZέY*a!sKJ"J:*x8DD=~!f!/Ih`dΜY*1>P"X,ų˳yRo 5l G>*Ysܿ+G>XZfQes]K\KxP~� � � (c^`$@$@$@钀*Bdϥk2neY6|LsvJhho!İaVM+SEdnN0/80ϖ<%K[hcPT8ɞ?^d :w^ܪUl9sJBMy$>jqE(1̳[ԡx'ʣ-Byo2ťSm?v]GZS:/2$DU,+Wc*TUݹ-.][{IQ#Q#VRzHZ5Moc)$@$@$@)B $EFNIHH#a6E{[Nl^kQW\s8Fե%r3(D i)(11,1PJpr#?R♓u 8~k3Q}<]>W կ+5ޙ$yJGjøEEBUq.RDn)jK$DFڶ$%j[qE-啖Yy/SqBʰr9A*y-ў 4   TEשup0$@$@$M sPj>9%TŅʮ<0rT1pH/`!WbK_lcґ-OdT<h骼Gp[=Y}:SoiH"[a.⹩5xoPi'TϬ麝]ߐ`M* LcU 9)H%UPE9`qc2R5k,B$@$@$l5bk4   a gqi^*e2auYOJsj+&1" &tó qlґ-O MNWenߡŰ<KsbaUիN*нОkRD2w)ڶNˡqcCwoje c\T[Ɖgys?zk<@Ȉg   $$`=׈鄖=� � � _vRa5r2nvW|5JH>.[!2l[T<ΝR'2:Ѿ#Xq:@>2W* ?iQνQCqW6i)UiA̼PW_bVncpYᩃiL޹cdG$:8 eS\v+EJ0NrSpHHHHHHHs-y}Ѽ+W6Ũ)O[A;0mt0a|=jӔwrdR'<:M;U*N'XF(߶mlJϟ'CM`,N$@$@$4ܱ\eF`OpC@$@$@$ k0eQB)!goSr ma  0 UYHHHHHHH P{h$@|s;wVxO$@$@$@$@$@$@$ P K/C'       Ha $@$@$@$@$@$@$@$@i�Ű48t    GÇ+<Huaaan#ׯ_V$ּ;t72=xթ4  EbXz � � � @'wIǎeΜ9~ӧFl,?slEb̛?4o\^x0Cx8F$@$P K]!   H |re˖IHHH&w2}tNHJ/QFɑ#G6M$@$@GbXMі^cy1r~/s)SzzAz{V> � � @ w^dxmݺ5ց-ZHZn-UT] ҫW/ٱc_ׯ/ƍ[nرc3<#t-0`<x0Ʊ`FW_}Ulyb+wɓsY&M z,=z/Ɖq3 ܬY3Y`x13g_x.]6U:T>S}o +>>>:/Xd<9^uqnw=b' t-Mc8$j`Цl[K6A3^4лrߓr&SzR\t\ߵǢGĥXYvEARHHHH�~tҶm[Yre`v%f͒ݻܹsTR2f-r!VةSg٣Go)۷^{M6o,-[,o u?cW2g, sED8uԑ{OeSN:zҸqc^zIl"C Ç 8B=]P~_~Yڵkϊ+o-W^l,Ml(xH7o;vLkm<c ]x+ @>,_~ x…z,xWNaG# ?,~=ҸU[p\xF5灚d$]("ҰAQ%?JWG%q5u    #=y Ν;+".\%KFAѬDRV-)Xr<< /gg}&2e|ɁdTHe-~W_}%={"қ4i7J~LEu_|! 6evܩ=VfM]lٲڳkZC"DS걮ZJC;E6m<Zh=ސ ourG}E6b>C D'>.B4 ^g5MTTIu&۶m3@< Ax+WBO8D!  t-9;f|`Qoئ]N|7nSK8/.eJ#|DLn>*^t)3ԻWN|8(.-~*ܴ|)?hdΞOl}nM"Պ#sOkN>tXO,9$Wz?|UX   G0l1qڵkMB8 (͛W{[^\ `;Ah1 < rZ7a WWVoxo غhXhh2c3gN sa#<`ضi! 5kV 4Ì1; ?7|Y`%H3 E2et7p1A}E-[ausIa ~� k1̜Ꮃp_zV/on5G\+z>qps׳F*Ѱ滓ĥB9{l7P\Gx~=*s]H}`)٥dobbI:ʟldT7F s/kk%ЉlhTTg|"gWG&ڦN,xA$@$@$@$� q lذT H1bI12!@ {nO/G�~k3/,K˩>D'27K0Os=gӛͼ.B999 5ܬ梶<h+5Drت O;lŶLvӺuj:b3,1^N0X@$tqq1Ӟw4HH,!۷]{[PBX]:;u9SOGbb(ޡI <agj1̼cR][SEM4rt%LypP+qU^%H<"/>5PfW1Izu%X7YCCvrwR e`18ސ� � � @<U.]Hnǵ"ƗA9O UdӦMZ1/k8vlٲi [40lZ\VhQ=+W< DIbLխ9SF/3^lUEL5lĖٳg[o= b#bϟD/q [Ca;bn 4 w}' 2/k  ;H ~eɁҿNe#18d(_EL!Wj0\vjʶO8yCKѓ?Q'^ZEfl}`&5IYV]e?ɞ?畭߻L%Zt   HFk֬ўU+[7eWW;bAPQ C+Z$@Byq̬ [hP1g+>"Mfʹ7pak(BxGe&6^q8e </NDzp%C0Xéނ,?݌":6sL y7Hx HH@ [qRڔ/DPԊaMIK=u˛'eT=R+;+8`Fr׏r7ҌLYHC��@�IDAT^ciԷQN4yf{   jG|^_ 4 ]]tZ#G4WflqzpH1!X /OD> [4!nyzzZv qJc׮]u>N'kf<F[bb#NvC~7I] 6̴=Z4^amG_-Z9e8i0^l_)^q|  pP DL|;1Dp.W.u8ƂɘQSujnzڴ2axۙRkԈrߎSe]BN~@_=(_4 /c "$nT"׷~Fʼ[*d1-4dEn:Wjk?YkK=3ɭh0_UMZ-A05KiI)%aqھFo|*8L$@$@$bej ւTB۱wy_TrvvUOUub8N,\r(QB]@-"%B!jlb U9a/2bF.gׯ_Ecǎi2G`q!X<y*|  d"I!Ǯޔ>KH&iY_Y_6Os O/\,T<.cBrlhA nAYR xr6� Ɩ(k61*+2)+>˙Ɣli2 烏edIrdg6/k   H>lI #x@%_Oo/!i *#70sz& adWaao#7!l%g\}D*+uCw8IHHR9ԯ+w5O>؞8d8)t֬YA$@$dai읤pd)a`Q$[qu*sa> � � � Pãgɐz � @4~d'f � � � � � � � @%@1,þz>8 � � � � � � � d<2;� � � � � � � @%@1,5ґqX$@$@$@$@$@$@$@$v P K#'       H a $@$@$@$@$@$@$@$@i@"#E<IoeV[:u&A� � � � � � � @j"ŰYH_J>:33R8Dzy&gY        @î 1l9[KqҨ]=v",7K,HHHHHHHH k1=MaIɖ9)^X|nKXDӓc $@$@$@$@$@$@$@$@i@v9]])&Co6KʗZח,ҵr$@$@$@$@$@$@$@$`/Z sp]K$\.åIb~HHHHHHHHRt"-~{\~LiX^ET8        ;Hb+,jʕ'ݶZtqaٺuڧCB$@$@$@$@$@$@$@i@'/l:u^B7g'\@~eC<yjZ-3xG$@$@$@$@$@$@$@$@VLlS_/Y/7 6]/5o(ho $@$@$@$@N \ŦrJ-ZT._=<<$S;)B' lٲȉ$@$@$`Z :6:4[AR9=&iuԕHƍٵkSJ.- $@$@$@$@!ʎ;َ;L[lѢPcXrݞy)[l,%SOVdd_b/_^pHHR@5MBƾ>|4 M2f>IHHHO~j1rLsJ*1G}Μ9r)YvɓǂoHHH^2f/QFan � � � @,F!UT(m{iz#GȬYZj/_>YpRB`ˢ1cHrdZC̙3VSt9eƍ k 9q>.vq/رc08ptAǡ:uBիWK֬YeRpa;w;wNwihŋy=f͚ 8dɒE-Zd!;BM$@$(uI$@$@$@$n @d 2=(P$d=zHݻ OVBR0luٳG`0.vZv!xM4IիcG76gggͷzK x(1&Oډ`#Tnj3(wuԩnxZ,`rY-A[`uף0HH�ŰdCˆIHHH2"ӧ[<6.]XtY2#}РART)-6 b-^X﯅*xj(+O:(s% 6[}/.y-!>Yɒ%؍7e˖_ڡCtoVC5j@kӦ[NEiӦIrRvm ~� � @"iZ%v޹sԊhA$@$@$!ԨQC{[H7gϮ= bA޽IÒY榫`%'[ a6}]A@l6[3aeʔa 4F~EsN ӂ4!7o_HHH P K99ݤNع?ZHHH2&xmY  _`؂o.ںul2^V%J 7a'O޽{[ZYvhQEo b2eʤ? 3e}sttC$@$@�Ű684G�;bܦIHHN�L/*lAHj*G.7>|hTK75>Nz~~~Ҷm[6ln fh$@$@$d1,<"RC@'+\EOT?Aܛ45{R陲E٪BcǥpI[U\ŊQߝl$i"؋ɶ?FJf]6B$@$@$q @4� ˑ# bw ?\Bᩅm8` {qB2}˯J\"h~lvO � � 6>ΩmtI0Ssr$h>M\l}$4 >'C/׭Ecl)s[oagx.jrvl?z<,o;V� � � d 56%NN2Eo)%ѣGKJt =zwh< 8GvkO44(my}[%{q]V auԑs-`L# Hq3�O R X^^Y?Gψ8uZ|/Km>[iӹl8_!ݥ`:$  Hk-x3dΜ"PBF{NoayDDD[)[h!v풐S|.._{51O[`@^;v"iܹo]k׮L;7YT � � 3lgūP~iVu.U 'IPT?<{N6n!'/K=˺f nUίY6w!<dkcueר1jWEԶ?؁wߓH"t]Rno j=7Ɔg~\( wfwUcԹy})͸{>x,'Q7ݻwKժԉJc+f3/,,ql6D   0#�]p fA�{۷gѾ-!,zq`|  '0W%~u H{% zo 7n(\[43SvIV+Hҥd$KQSJؚcuش^׬1Kn'M7O\پC=𻢷z , fN?ȍ}tޕmja y(|'\Ŷ@G>T*& 啼*JgPeX3l~rCFoO|UH#9*XNd.mxqj"8mB,L*TNH5%      H6v<9s~QP>۶_# MK,3Z*oڵ$:2{]VJdQ+CX5j:_lϯE6.EZ461uior}-b]\\*H6%b=PQת!'}#5ߞhԿ7t[%0 _n,%<b[(6<387Êog\qRٳ\r.6m$/p+ ?$'      HeҵgM6 [+]F KiT)SZgQGZՉVi#[-+ɵByS:\"Dz=s)_Nn?޿xI"vJt~V‚-= 5j`ji/bA7Te֬eedK^[.}xrm.PSwHf%ĭ\SLŘN$@$@$@$@$@$@$J k00TzO<tBtO]]#gIɖVDb9dWR!2vOQĸ{fyxR!sɽ8 f}j*k"kTђcKO6*8 ӥwAbcjwvA)\TR%bsM}7 w޲ � � � � � � @&=À~y? 75%kg,G⣾BW\8Z~Y#A~~rs~clPT_*M5yŞi'mk=�zq]\Q*C\Hu:R|,>Uܴj{')]Zr1q6:;t萴o̜9FnI:F$@$@$@$@$@$@${ϰṴ[QLmlE] A飙Ʋ6w%MJvl*L)6*Razv3vަ[SG=.lt!7l k*x}$GA79l | {ܩX|Xv>teU3M'%Ԝs5M^=ɝ'wB< � � � � � � @ pT}y<*^Wre0t%˙Cr9fU$YӦM.&O>pjfū%q*%Bnܔ9rN 4DC!H =-c q]kߺ\RاrdR1x֮]I>PtlA|ԉ㕸ؠNܹSrwIHH CN7oreo   O {eQA֋絊ޫSz"[BP%زLٲJEme%[Z}*dG{[Nuz%PmQ9c!?       DHbX"*jN'=?' w,)Lma%&  HbA*  _|$#  4I rdrqq'mÒp2@F OF$@$@$@$0_}Juz � � @` Ǐʕ+' F1,~HDk^� � � �#p*% A$@$@%&~e)_||&-+:tXjԨ`ba  05]WgW% HYf̙30׮]Kco۱a. � � � � J:;Ç=BXI$@$@-GMzE{L #cM#  Hy۬0|0!RÛHH"3gZiB|%A 9c.ʥ %ഷE~\sEZz?9v\?Rrs$}ޚ&ÙaFI.#      x:i^ PJ׺ga'rv 'I3ulBh^otE.<ߞ1=Ys] `%8%$\\^-hbCngJ8}r\1KLG5$&44T>Y'ٿs%YlHHHHHHH Ҽ!JuB$KǯW{+k'Jy_HN-xծ)va7N˭, W_#=0ڽ{k֬V&      tK ͋a Jz^q-F{Ix_iVW՛Okˤ5>*k�o9{L6v*:w=7׬ݯc3?^c:][מ^+6ya&;ݸY_;[revEkM6bx-,/'+?n|xyG޹>88XV&mڴLLI4       E wsv_})Wg"U7&}D Nc25G\+zG>qps3=װR kvRqRnbo0{u)4"T~fr)ܴ4;K{p9`(Ѧ rE"B*JʉyH:"uc<ɽx }YjRӉX=᜙Z<{k5ߙ(^ݤFgeߛoK~'%Şi'+YL -5 HEXR+;&nf-[$W\RH؊1HHHHHHH y1,6fB$OvGx򼜸v[~[a!Q[b<?gzbۙq1HQHaq.Y&Sm]4bH%=zM LYrڵ,ɒ##{APduR}XS=\@sP^p)["zu`zNfMŵvCf$.)Tܲ/ OYâO8::ٳ$z[-[6u /8#  \~]45Xpaɒ%h yjD#  @ MS9sȥ2roG W ,OT4ʴ7W B�a Gفf+ԙ+UM{W\ŊJ*%DM8=̤0'2gͦ=]_|`(qGOQSJ*ɪU+壏 Nܳg)$@$@$@$+WŖ aAnĉ*lCU/R/S3N3fo^^|D$@$@$k1Yn窖~7퓖^dKy"](߄IrO88HDD{#˺1Č>XzK&(IU'fWMW|e)S,'~K٥YfDuԩIU֭[//^  � � LbʣW8plRrέ=-Z$&Mo6=?>HHR@j岊{Oe٨y0i).9w0<-\�yy&yJ[V(7xma[E۶ʌ<J�74PT]N|ܸ)Jܺ{9k4wHHZ!}Fzk9[՘aԖP � � � DO֬Y#ݻwWIyۗ/_^yiܸ\|T}ΝKǎerB; 0@o4 ޽[^z%VN<)#GΝ;K=dj2| n'i$@$@$ ϰSM/9oJ.ls ~~S<ȖW.n�g]0=b7}¹Sn1T,p۷uիJg{ްmR!ҼPW_ѢVncpY᩷Bit Q[W*n:B~,{r"1^;(/ĚoRD6z$@$@$@BG &s+V^s}ٲe2sL;w<R ߆ʍ7-D} "gϞ ͷFBeF{&  D ]abU:AHŋ܀kC^'Kȭے)Kfq̛׺}EzXcd~4_$ u"f ɼ/LgI!X=;@Q7tDFF_-U: [+ =ڶm+6m.{   7oj k.]6^~'?B*!`Y{#3rH� � @$.İL)D!,.JI X%9*ffo2kL wHHH 0N/-k'\oNaיqzj}W-hVPH7 � � K"fX|3|4O�pq:HHHl0 Nb ҥKMy?\( L ]dΜY#�|r^� � @#@1,S> � � � @ %9ren;vз``[ !WiӦرcMi]t>}H:u4  H(7"   Hf*+W`Gq6o,s̑bŊIڵ|T >D,:6 k߾_Oܸq_ҡC)QFO?Ԕ   Ho2D̰zCK*|    &ЩS'/ BդILV3Fpu&66C^{ 6LS;vODzi/l_7ZviӦњuqq89o<-0  � � 7ʒ<ܲ˕+ݤڶMV'x|O#h=MHHHH x{{c#e˖R+?Ej{`-:%\ uݽ{W)b>:y8![%pxhk  @DDݻW4hS$IgX`d#$@$@$@$@$tp#>5i~bu;2{= � � U\էMrq]?Y@JA*ŵBnݒGnˡu;/Ȯן6`;ub*w/l9'}}npLřN$@$@$@$@$@$@@"ga'rvK=tZFp_<D'pd,92mG5 B#%M亹wy=H �ޏfxJ͌:)>>>ӷ5ĉNw~>,s=i;7(J7$@$@$@$@$@$@$Q y1 BX;4v+(Xj~͙Cr9fd ! E˅kym=$-~VB6s%5F$@$@$@$@$@$@$Ҽ֠\Uײn4Tyr8#d^϶⢮iOGeC#W6n!gՍ<;l\yN}'9YUMVV-Wl**|0U-,/DxRj5|r\Eo_ġ7RUglڣ~({9<P]tsͧu>@ޚ.\_Z_OX/3Yy!GQvt!      74@)Ƈ͖9c>3@D5&(kZ}:U_W xU?F EwO7K?ԝ<}G()֡dɑCmFsgCL뵱RNM)־7n(\r%i8gdOcOcǎIkvh<lRJWr7Uh5l_vr[Y&%;|:?T ^^m$rKLu-.;qݫJ"vC_Ym.s+3AlzһYiPE~?|E(AmkM[4S(+Ki&% :sc� � � � � � � &0ۏpoT@k\8vl.:-Wb\Ɵ5KRr Rž#H溎QLpRi9|A 0wh6ժ)VbK,S_3uqFLj5[V+b\JnkK%LsJ^(/ÒJ*]8)~5{#O$ɞ- @ڞ[\4/+NPbX%`oɧ7uܛ_F$@$@$@$@$@$@$`Ib%%:\~reR{ԛEk%8ֻRE}REIu.Y{ioyji,Ru5W6R8èV*N|9nPnue%VEӌ|~� � � ؗ@V5ɤUlU|HHHG^~2|-[1J>E^X>--8>xx ,Ys2mZJD޽{%@0٤IqrylB~Vj5ya6Vh",r;=:iQ)Lj"msӗMY~R%>K.ٳgTRRD3HHH \\\֭[l'YV!  C�"޼ySܖ..{{n #Rww <.o]xK5í{{Θ9{v/V]ߍT:Z=-գi3 ʮۢnl7FퟑWV,yݓ*NX B ɑNYī{Q> 7G>RU"吟+?,ZիW'˒� � � $ +ׯ_b ʢ$@$@$ # 8hѢ#]x2u7KK ' | 2ET~Uu2{HxsS{6Ahj-\yh7Wv#뚶2URQ}lUIiK7֙P ee7{)#U0ZZٟ'n?Ef]ǸoSC)߾VQqg (`1Fސ� � � $\rIJOt%  Hf�a+W9s&:(7H'g_iӦ˄ <CK >14uӟy_}-gm3Onnjq-_^T0h'B;:LٲZԷMXx\,dxØd:)~\ckԨ9sFM/Jv+o2HHR;Kp>RlYnSL09V   E u_~b.ɐ7_\ĘU S11xQq,*%ݑv5=顊vQEHHHHHH;a 2W"lno{*?q NߺzOo\4Y v=� � � � � � @j&@1,5446B+bq!/Řnj >؋-^$@$@$@$@$@$@$@".Nד � � � � � � � @'@1, �       8(ew'%       ObX'@�$@$@$@$@$@$@$@$q{1,2RyqyO;ǎϜ$J_ݿpQίE<zߗGK0}rVT }# DGa1 A;?Ҽ<NJ]0yIHHHHHR14/E(k3R09w;5)6K)kgshEtGf̒#f ~]߰(>RBnܴH7罏Ihqлrߓrۦh1%ܿxI~G;@}κu{/JtS7C}삿8&~E3ݧ ħ }.}ok[X:ws%P vNx'gU      HZY9!_튲U+)ul*V*-!עٶ2{kH 2<\.^#ƽ!9bt|ɚ+g܀S%"/jσW-S;]p'+pJZ= -/~V4Ͱ. � � � � � � dxi3AIѫ2eh/^bJ]Js5+O /Z<eC-&*~Y+vɵұmeO~@|7n׸x玩Llg$o"<d۱/jjvZ)?x}298&8'uF"]ljiW7ɒmgڻY;t6RjrG؋3KQvooCW}\ʢNWȊLU침~?]uTQMƭE/7ۨ}+3'F&      =ܜҢLxψ+<P EDg`'"cIoJh@;j�CU@APD555̲l_RԲMղLM-,sI۴$s% AADYdYwasN>ss;tE/'þjU;<:< u׵@5qzuiя8>g쓏Ue6m\ܴ;FF_©Nm*8:Շge9 vU<hvjB9 #GxA;VƢw:&kTĂP6ȯsw:X0z}7?O4QqYS+_6{;S^hڴK)?k$HarouC>-64d4|y-Wr~_#WpA]6od;l?fAj@bwh/^lz8W Pz7gbMP˶c'=!я5AQi 0vX1H8)/o7{\m7Y1-q�(@ P�(@J}0P`͉8?avۥ~[6l<a䨎Ujj[R3kk֪3n;/{Kт`a.^DŦ~8՚|0^<HJm^zM6*nU'KJUW;<sjznjg{KK(.?:Լz׍/[ګ:.SJ5-6}s{"&,9KY<kS lo$ ۩ ;6􀵥bSЮ^%i$lӂjRZj}šIML(ٽo�(@ P�(D0LFt5ֽ:>&|6I/y.YTF%&¢ϲM6׽.`-gXQrZ`jKj?=(w;گdPV|2)5ojOJō4U',MaaVV꘍U5C.۾W;7] P�(@ P@I0` /Xl_tVR?Rw_i&߼6.##%nѝ{%i9* ĹsP^=xzzxV6s~xLGy%{5R#KӦ6Lg4I/Yڨo22)-h@nNYK'K]`ԨQޅf5(@ P�(@ P r-1ו̅8/;D㬥x}H2sWcK5;)|nғ ̹~]\޵ aq)nZ`X^=paZoۮFIn;7-FϞq;O\FKFSISBҭʒ|^ϫ) z0 by8 :>YM~)D Dw~^N"19M&dېb t˗/79P�(@ P�Q 0Gy29]l z rF=}}?Mp"|:/>}kF#îB۶{Xپ3R1h�ݲrfIg7inmBA{ ?5�マ (w?g'J;NDx-?ؤgo3Z:w`4|{@-(?G6hw ) )>{1ڡO6ň9;U 9`d9Ϋ別:ᕙ0GAxߐҜm(@ P�(@ PT$S+\IAAA&*eʔ/0n"?z@Ae%Y/wsnQug"raf{+aY0k3pEKﮍ+j *8X|z۶pi|6�(@R/ ijժU m?#@ PQ 0pJ9켼ZCJjHNar2%ʡ{RR>@XaX�(@R%. h+_Kqss %K CKJ*i Y�( P$H /=P�k#l%M[hƌꕐp/dH ؜9sF[X'sc P0. 3ϓOC P�(` Փ=Ӱ-%i#q9s&N<+W|F)(@ P0VZ>)'(@ P@r劖*kl߾2LSÆ )8� I]) 4ѣann>@Çǀ0h 1_f5 k޽:NNN>}Gٳq3ɱϣwސm'k $BΓ/2<<<0k,5QF1>}J urfffX`@د@`P`0�(@ PeE`ȑ8vjԨF+VyPjUtEĢW^ٮ]sϩRv# UqAKG˖-!l%��@�IDAT2DUj X~={=xϗgr?Vw؁Sbڴi@߾}U<L?K/�X(@ PRkS�(@ x5"M6OVYYArkJLMɨP"ټysFFUXQ>oKM\_FoM4I)dٳgUpL5V1vetYUp- @5ԻFcݺuSꫯ ۔)SгgOԯ_͚5]�(@&`)@ P�ʊd4͛pB�_R$j$05p@xzz]vj*dEfC\]]Uڵkk۶->#lݺUMQ`rEVZ$ֺuk/*Γ>jڹԩS$&cǎ7kF PxF о\D^OR΅v1B=h6 iC+5.[}}CZKڢ/wwSBY_m!(iH&.1OEE-WXaKhPlrt17RfY'0vV[)Gۻݑ{]>k8דЦN͸O P=` S$`%9$w($O׿-[ c*o ʉ'0x`+A-l"S+H0)}"3)(@ P%MAIl#.j"gbG.Ep`LCy7^84eZ3v|[_{* 7<hY52T ·nöao"Cj=.X0򜷝ρ3qj]ELBquJZF Gag>P3Wޫ:e[nh~U7oI0mkx�(@ (7nx* Ɉ/Ir/e(*1&?Vү)IﳗoK~0)_=)j(9tsQQh2*�(PJ0 =xiV_Rtn0|0Vvŵbn|7 @cxTr'Wn(_b4)_E]u,�<#sN'me5j/H P@ HEHJڵk_r:&,,,xb/y¬նnd;:t(z(wZH-Yqƍطo~TXjjt]Oi~-.^gjʧLd�(@ DR?2u5ODLzc:Wa-=`mnѮ_&}N׎2* V싅{o\=5_z_q[ٮJzaZ/hǾ#3T bwԶCa%r~6 M'F! 6Bn A2*ӥH!MPLԔ5n% Gq`|ؒQRy/N5j Ax뻬#R##ۓast=d*f#]sWq�(@011)Kf?~xHHrxI�Y1a5LVa e%GY^z$uA6YR.yCcѣGc޽�(*ϫ^rM8Qݷ$&Νiy(@ R?2VNDs'"0gA%f< ~y} ʻ_d oN |RbsTr-O>;9~66_OCll4fVV9:,3#M>zk!Ilzy8jy,<vFhuÑ`!|ߝEE?yHԾ5cֲ|y^sJ -%U'򧊋�o7{[&5]MoOdl'տ>M\Bm/G\KB`X+7 S2ue|~5t@6ąhh;!V[WsĠ5Ю{ΓG P.W~'W22M}H]Dˈ1]׍Q+gU$!4kE0k֬KBmdZ䣏> w-+{ (@ P$ `!+bO] y|Ԑ{_(\xmQgwT[>5^JE휸sQa:u`W 7[8Ti/IU{Tu2,]rhb)%vLZ`]ǪJ/KA) :v+<5k%i};J hI)o{ :OU1C$ߣ%`XA%)%?;GrvL|iSGaޠFx{@}]F-}V(@ P"PB`@%Y�8ŠC2L|,�(@ P&a D6TfM/~JilJ=Fه*np_O!5b)>4 V/6ߚWsȓH3`KaG�Z}{{#U[!A!ȯ2-^Yj+jr\-k?~ZֈYdmqaSDs�(@ P�(`e"&h[ 7CD5J?b}$ ~Ňq9Xj#Xkj Ln.'S[[a'B6=1tBVtu]uޜ> ݶ+eFF~ Y|Æ j =-vZpN:d$ ~B|rXY_5Eҵ|Vrc!Ѩ"˫H3!? ? jՌ(@ P�(@ PeB'ЗO)Z,BcBtڗ-/`繋%~?y*fn;K T:: po7"6J~qy;up1Ҵed׹?Wm}<6$pf抔X5U]Sn)E^VUQi疯@j|<2tŹ~]\޵ aUMwwYg^x55¬68В ǁQ/y$q-%:?Glݛxbq=M%ݗ l,P=Q%D,�(@ P�(@*`#ü'~g/Sۙ3Ź1xaj}]5v 7Gߐy xt|믶U} Dw{CE& m4Tq`1:U2EI/+A١RVwr$Lq|-YtNmަ5Ve<~ΣwƈMBmږ&s tWG~W:6П/F_nBa+9w*93kb<5exfF 9y�(@ P�(PIV jpuҽ,\֭wgQOѦ]KQaLƍ[h<9n57.G)211<f6ְtr2;FFs%]oJV MJ695Q2rE 9YĒc Ii`ÀlG P%R 00PXihrmEQDB(@ P#Y(-w iȴL{sR~m WAZRJ)|$dg,q P�(@ P�4Γ�(@ P�(@ PeF2QA)@ P�(@ P�~$?b P�(@ xmU배0 CˣB Pa崔K򂭭a'E+zK(@ P@I@رcȗz P� ңG~c0̰υ(@ P�(@%̌`|�(@{, khh(|}}rv`XNKMM<�(@ d5*Ĥ$.�(P$~ajj qv? 0&&ꫯ=U)@ P@T_ޭ+#9�$)w2/GOմE09DLZSկ?u.zc;7o¼yp?�(@ PE_9"jlO PC R @ؐEғ_rk`F秞166蟕H P�(@ P� (<1M"kŗvʳޘ|[))))|6 P�(@ P�(`@"DS2XׯG^#9�(@ P�(@ PPR +A'b1s@WhW˒%`OR E>3(@ P�(@ P u0쓵;м;RR'zQ=ѿO4Xl)Zje�(@ P�(@ P TY22pZ`_(o'+<עn$''cʕغu ڶm1CBB5j;Gw(@ P�@hh($s &%%!22^^^lk׮*Tq-P�ʚQ ^1gw!:/eΠ8kg@<äȰeŊҥ+/_�(@ PI`ذax饗㊇믿b9*bǧ~z=T Pq0 sFvwF``ztbb...�(@ Pg̘ &E{ qB P(F 3$eZ3 yK.E>}~cjؠAn P�(@'ЬY3۷;v@6m򼰌qXJkƨQ+_|E(u}G#55W\AӦMqyL:2MSJz> (@ Pb1} Yj*my&Ç&^]P�(@ ܁@Æ ѡC|W} -#�!'TAÇ#--M]|^ٺuk{`49} ˗ryR֢R'ND\\gU͙sk<O�(@ VjVT)߫I�|YA P�(pdTΝ;1k,{9..#$LQ]R|||H-[hy`c4[`dK t=^f׸qctIp*3IB P( V>e>#(@ P@%eߟ^epSSS} L*eZZ\׸[n*ۗG}4~gϞ:2LFIO<񄾞�(@c`0̘?]>(@ P@uŗ_~D}/ V.å-GkkkHkVl۶-?=:<F P0:Ì#Q�(@ V~[wSMy ) 33˙\K^2_j9RM|G((}ܠ�(@ @B(@ P�(P\]]O@6eĘ gΜQ+AJ09kkȻL\z5f̘p,66V*X(@ P.`|bԯTb�(@ Ig0`�$x矫)27P+AN4 vn$Iٳg/cСسg%ߴJCf; P@i0|fqިtZ|2%)Sqc|׸N߶U®"퇥+_y/ũ/V }VwGfgM.y>(@ P7VY\*rGE<Aڵ -[D~See\>6VH?;;;z_lG PeW@VF޽{7Zn]~dXh5mLF|3Q1z19{}-@_o F?k#=?-?nrt ϧbЗcWVRިN@_ۧa/i+01v<�(@I L&A *bŊ V�(`$9l‡@3Wfu%˖18*<7{[hm.A^ .sKγ2ЦTL)3RRKK$({�(@ P�(@ YR?2u5ODLzc:C` vtEX\X+uBWOhǾ-¨ Zt;tElU'+pgןp{=IIc�yYv`$(m}}]=|DWUΝ;Ѱa#|Dž 555!S�(@ P�(P J0W{B=?FsC)ޠݷ3TZ[Ȑ&ڵ}$$ϮUk;ӢQa-tUT{?*wϿjw>(gnd=33OFA׼v8?KBduuVS?Gco&asȑ#hܸhҰn"㡹C P�(@ P(,ͱ~hT{CfLծӌQgvaU{DzJ dUzrJ{:XòkY^=Y:9B^fְvs}5o}l+oO&擃rvM~cqpkZd-{T?!N[@t'~N@`a>ZoƌEJ;w\3xP�(@ P�(PJ4ɂeJ`u᭎#,y ^ 6)SqiV&$6{%ձ1Hͻ<V:juڂ) YXQfYLT.>4 VZWϋnF9I13ox{{%{0<X8p@ۯ033…(@ P�(@ P(F=2,%b#5=fYr)K\JqCșD4 <Hur,JQh0 Dڍ^}}h&37ʙ7qd,}͐kf#m5,{!QQQؿJߠACNQ-!!!5k6&OdylD P�(@ P@0a!b\K%_@jlz�jVa L�nZU*(&Se,E0ҕCu0LQQ7Ey%$ջRyM .5xB[ak>?~N-\_se�_гg/L6=wU*UB6m�(@ =*]a�(@;K.~ s?+uLɈ(4ߞV '{vbXޤ[Ke4ȣ3Q O.Z>.'Fd~%ɥ}Pj=LJQ&Ɩ_m:䨓)V_Y/\3{;!Tާ&ϝVjM,}G.uϗxA CLLLAXG P@pttĕ+Wr/#Ǥ�(@ L-UwSh+Z}PPܧ%RRy=2Eum)_`ܸEDϯh"t%%F\$Зֽ*]kXkI k~Oe%-ZĉOߓ~ (@ P@```љAȹt}|78vV1(@ PeI@FI LRկ_F3*TX?ܹLyW]+蚅u,S-m+{i+Z;v_vF P@S#|FGΧ]S�La#&wl{ . :;;;^#�(@ I gCS�JQ +MW P�(@ P�(@'`؃)@ P�(@ P��a~\NP�(@ P�(@ .`&<B P�(@ P�(` Ǣ�(@ P�(@ P]ânb)Xczj{:{|B1Ƈ!m*7\-[zW=x& QS1q"4 ='vq)X؄e8(@ P�(@ P `XFf&Fi`2st7.}뽿NNCSД`⟱c9aoNjk't0hcr~wr?թ֜ ӶMrj:| ,3jWP3qj]E/t (@ P�(@ PeZ$6dh>L-8+i57t)&ut|t[Rl8%=#K7#ƝPѯ80�(@ P�(@R&`Vm]DٞsMA!/u)L˙>x0GPn|iZY?M= /g;싨֯=(V ~8YTd+/ II3{L sgqaZ7׿VNa_4wA-OG NgMXYbHLJ0~pcu6!Mp%3^mBG>fծ{/|:q/LLݧ"_?崃i3kS=G; |̭q�(@ P�(@ 6ŃtjS&}\O+RA6*-= W~y:o-ֲ^wE]ɰZޭU j4v4,}B׬C@RUk\9p^*{!01-ށK&ҳ۵AoV}8ׯ635u7v)9rZPfߺĠ5ЮT Z6kV~MjV~- fZ.kd4|yr@y[ I#箩@ؘ QbT}UW{,|#f<qsd#4*^6[2a&#6aGL|v<ݩ:�o7{[mg P�(@ P�(+$@8 ^:=t{wiߖ wX89cvUږ?.~P:B>Cƹr]O? 8\H0ީ~WnHk&8*Xb鉇u=-\|+ܨЯgE[8[jZ�!}]4ճR$dX-}ҧEU5Lh=(1iQ o'Իs]|d?P�(@ P�(S 89lD~ܳ-xjšcK!^@'O ii/Z2й^]DBJlR|.YQO<x0F GǬ@]> >,!e β^ u&6QAlܩtYmAnP�(@ P�(`Q swUf7߳7Y ְܝr 8B˳kM/cϠΰanoyv )wPvލm&iEçh8 @>ust%ϯ8ܚ:_%?X^y-W WZ_FHHQF x{{֜�(@ P�(@0a!bs]}P R:x9p=9 vQ#ĪU7#Te^6@oi֮.ҫ~hjssDbx.YRL\\53 "4XvĈٳ.]d95<i$OrTqHJINPPw\ץqe,a՞ ؠX]tˋrR�(@ P�R(FyOp:^3g֖~%fW;rd}NāO'\W|h㸰z-kD[Y+ 1\%ڗ6M?;F]3TjZ_І,щhͫ`X:}ِ#GY -amr5빯`[n+5Qjdst<UV {6vqqqܡ�(@ P�(@ ELKAAAu3 zq^+22p%>YSkWǧLƍ-r%r7sW۶)a,tDp`W*w6 ,sw3pj"*+ EIFW{'/ڶmӧO#$<r+\S�@``ݱV/-=iީ!O�(@ P(J/fZ3- aX%plmexx޷ޛc| P$Tŵd܋T-  $>|_=0؈�(@ P�]LÌC, 'S *zp,lW_S%`h5 vz\{f0(@ P�(@ P +.2֯M%7}|+/[NJ$?>7b-(@ PT@IcmMUPY+ޓE._ sss{"$,,LiwL)@ PH 3E P�(pz)\v- ?γرcxիW٦(#Soζ�(@`0?b> (@ P@q 1B@RtڵkZjX*U{^8r+/�(@ �ag˞)@ P�ʈᆱݻwQb׏Z}mۆDnGFŊe8<OqrrB0|p_~5kйsgȵ<V|g;wqE4o&L'% �~-?m۶vڂFRoذ!,--_Aa5jL|Rd/+J=�(PR + �(@ P(/ɓpvv[j 8矷=cDDWZgΜQ+WU�L`LWobѢE^ϱc7o 7NTLό?G>wm,\ ҥ #GjOyIa@L1(@ Pr%x[Hcz䨺z`DW;ܷ7rsqv}!6ׯҖH4}#0$2^T՗cn`}@R2k^%(؄j.X�(@C6lؠa~~~[BPJ{]~u襗^׫}꛻aݺu{M&gyF>|zoԻ*i@ݑ#Gh}ȯ{^z갌$_9s6mڟ={6$? (@ P `XFf&Fi`2s S6Vxץy<:4u:M#h1#sϾs`$\_Cj*.XxD;COŅko!0hΜbjNw}]:y_kדԾ~LzCZw5 f{)qgIXh1qrO(@ P8qB݊LU6l^uz鈹nt }&NoK�LK1(E52E5Ծ?KpKnv)w##Ϛ5k+++.Ǯk?H1݊?ŋKzWm�(@ DR?MRa,^g?:aHӺ]|l?vc(@6h۰ԇυm1'O!B(j=l~ mI^222#Qhl?o-kc P@i'k`QwԬrh+9¤\m0)...=]{^kߦMDw銵oc666\]WWW)A-]`dOIK🽏m^S^LKK]�(@'Pay"bқ9۳r-- /)Zc@ZW" l>R?rOGQo'SG*zm6kX$\ vlI~,~=[�>[MV$ݗ 䓉Ş"95C؄u#]<z#k9i/y^~0fF%Cbu_]Oi}TE\ǣӝjb#W _Mjf%di�_sr՜1 g#L5ʭK*k1?mg�slW[_ /Q�Vٳyv=V JAooouW.S tD%RK5Ԩ+k**)9$vuLFw(3 FI2|)R\95$La2qϞ=T  IW_}U`Տ2�(PRJ}0>W€_@Xu j[X2]_}Qe֐z9Hֆw芖_Ne^a8׭ǝEE?yH6cUgYM~7mzpSGJ%FaYmfN]Om$ڮа~#ԗ ԰2Q5i\"YAՂΓ) U!MP &,9'>ۈS\yL}3�8iRͰn~<oفgTxI϶c;ic6.le[Πkpס37~ގkthS|x mQ Z|hT߯B;ef{ks  P=x7eذP^UKV²eÞ|IWLVzd^K7RN#FP-YDghz!&+K?jjLktQ\SGj ͛1cƠW^jܓLg`�(@ TR 3v#x\ U-<`hνݭ)z.Mr<;,1;mȼ}5Z$0iCUg%$v^jB %h_+6 -ڵASo.hڴPuURu)i`ma-(Ԭ\o$ifگS%ڏjaciIfEo6htK}⌭SG=Z}*R⬖&+׹Qe4^j}=wnuH2G[K<-}Պ#\YV*>(@ P H>.<[jպ-ԺukL8_|V\7owyrUVb_СCH7ntSu}QKK/) _d:e^Eׇ_FRRZ}Rq2Rb^^(@ P`ص$,w^}F $⿛'Ȉ4-E#$o.wbڐ[ؾ;'+I}3rxwP#n ] -P6Ӣ ܮ.Vi&%UQ bIIFx>;mTKsS2ׂt2S$ɗ)kbDHHJݭ\%:S�(pK`˖-vnn5jHK`+ʤL^ XEFF$]|}}1w\DDD]@r2S49^t}!/y\OtoJ/S#%Y? (@ P `د'a[2$)6*##=g4վP%ƽL/U2MNJ`` Ν;~|Yw@ԹT֝{`^֬S5l^t5vOMلk= BJb%eū APb W`=&8)@ P;GǬQ"# ˽%m .6ȳЃ�> Q�~/z{@}\ELʅ8~2WK/+KksXN@<:A HON3Wuqy$]D5wqkB� $akm!-}US_h1z셍7N*$q}a)Kqn]bRl?-,{KȬGՂ9N]KIK9Zk %.{cʧ(@ P^E*P�(Pt=a;JF9]u`eCѷ >NϣgIQQj;r>z{Zio8u̽mi;#5>-koiգ;"&T߶M1h bOUװS~EKy(iQ߯=¾+zjzkykLӒI]_~ l[]W.fۇyVRg:TrNj_e;8Ni#ɺ:Gw }cnP�(PlSL^,�(@ ܙIVTΒeeZhXLƍ-_"''͹wtpRFJ*/GJ[LKZU,nϙ!# UdY_FHKtK71V>؞�(PTIsiӭ|/l5IILK<nS�(@Q = ߍW9eKCqђWnXۭdy- P(ʶ �(@5Gn{�(@ P�(@ P( G P�(@ P�(p w�(@ P�(@ P 0V?;;M'9�(@ P�(@ P4 0~ix�(@ P%V >>aaaAFFFO(@ P +Wγ-c0؉RSSann`.ΫR�(@2& cǎ.../,�(@ & ?"ɿGE= V&a`kmا`  n<�(@ \&0'''XZZ̬L|.�J@ZZ,,,=׷X+EV gvaK5ԨGymދhVSu@ǚUƺ[lAǎ0apww7GsQ�(@. S#fbb7@ P(-2T/.ƐEʔa`7Kx\<F/fcж'k3)@ P2ʊ!�(PG$I1 ޏ"b���@�IDAT>ֺ'"&1[\Shm,c2TRRRR;P�(@ a˞)@ P\m`kwx١f|-�݁YIh*+0`>bθ߇OG P�(@ P�( /s`:XMbQ hWA]ݒ%`OR (@ P�(@ P@:EZ~2zCK^tҤpuuŲeKѪU0{ P�(@ P�(p~5ɂtG-WgլK-o~<<JpK{]rr2V\[m۶9'$$Qsq�(@ P�(@ Q И3ٗͷ´kOō4,w c7? "#r+VKX|y*S�(@ P�(@0a?γ̙+wkgBDL@emd ]\F`P|�(@ P�(@ Pl E0L_I<O{ǕD4.]>}ՈAV�(@ P�(@ PXbdaN9mYɲk_-$%%ɰVM P�(@ P�(`F12̸?;{J*{_˷�(@ P�(@ PX0c\�(@ P�(@ PE`0h^lM P�(@ P�(P +o�(@ P�(@ Ph ͋)@ P�(@ P�J�a㭗|ԒC P�(@ P@(L\O,C+m;/gܷASqvuiֻOATAvpQuܻ^Ĥڴi{Oeg�(@ P�(@ ܝ@edfi&#>Ǚ"_l uLԝ<WsxFEOs<j3 HIA^ LYXsO|2hxht2UugV?seG�(@ P�(@ ܽ@I lȢMidj1]8-XL\|jTtĨue=)* Hh׷H畵qqqꑛ4iRK P�(@ P(>ֺ'"&1[܆X0T5 /lA|rmmʁ$w#FCb+uR/ݴtmTӁO':/L̴4xd}tϓ>Q3cN6Bðꚇ ^ޏ~=rη -!A4PycQDk&F\֗^Shg~_3Obb"6lnݺ<G]0SSǹC P�(@ P(0W{Z)n K Ea KcQmj|:-Q\5U!w8_PhW}ڼ)n^ͱQʁ�݀v~ g`#vㆾ>P駴{ >oD~l\ܼGfRu鞑a=TѶ<2RY?>|$>~yy%ݯ|8^mdh9r2}rÆ�(@ P�(@ R +Gꈼib|ij{#ӌTW=K=/LL`_0R۲ofkO\5Q6m3un/OVQNܹаJ}O?F#U :]Q}@x:qEe&%tkОg.`oy!2y>!O"|vU' %�Wu+$\ =jT}Y۵{v[Wc g̘I;T޽{U~??82P26�(@ P�(@ w~xA5-�SDȥHǻ(=J|.Yݸ*84GqiU&kj4mZ8r"*ZmQuƽRbbnbDjs!!]^VMnݧLvQǝ=yIqkBN!1rBZ嬮Ww-6];s6(@ P�(@ P\a۷~M5'FA2Ge/vj׳[g|iiZNEj L=Pr|J6 ΰu@>X9;Yhڲ-믢|͇rW 6J=סCBKh'OB pErŠ؈�(@ P�(@b;jQ엽И q}]q6 i8u*k FغGw(.܍L-#EX53蓧1 ZEl9ɵy3\=rQWA ZXM@۹?W &fj+# +n["b.5z5ͱ6ղXW͎n\T({:SU -YϞ j[ʦ 7g6(@ P�(@ PV(FyOW<{ΜzdFŨbb<QLiX@%POo4#V^嗟R}hې%(SS%λ=}VrtyiytD[]YK''UebR9ګ?J4Р>{'K݈0{QB- ߫[|i̝,*'kSK:u j(@ P�(@ P(&Z)[PK/8/GiڪQclagiG=4e7nl/%k\ *wXL l\ " -2܅NZRmCV~%i5FʹM,J}ŗ?{Xv! (@ P7-slE'޽M4e�(@ PRSSql:0,Vгi jº<ԊyTxHM=mcxgEy|,BF1}4k#X(@ P0~GGG/_OH P. "##!wafJ&˫Li888#`R�\.\ٻ𨪼㿐B NERARD,"vE *򪬢 HGBB-${!d&<a{xs:O6!!� @;CwءȰӓ$μ@�@�RuFշmV;wԶm۔,AB�@� TpfaڵSHHH F.aGQ@�@�\& ʬJB�@�2-42}yNsf} � � � @Na9M؃� � � � |rZ � � � �9|"yLB9w49ٳ'5kza/Y#'w$:{|ev~cl=wi{OV3vaT^SIJKϴ{+;@�@�@�(^ pjyMKƼ_QZƉc<=`||5|e%zZ0rt:o%fs4m-לw= =1qgu3%-C^I{ZiMzeB_M{c)zW✀^Ǿp @�@�@�r- }5%<Z?Qo\_5At{_~=}|1\_=c2k%%nU^[ތD4w{l8kϟ#� � � ^ s]Բ*Kk\f4I?Dmwu?[*iء#L0E{Fj%lnYzњkzGy<[?zL+yCgmr;oFJ?;Ԭ?q-}ڱcGAY }֩ȯwxǗ2SM|Wvo6w~O<s3B䟺`=v}0ko0u[ay%zd]0[2O:2^';#ooܣ\yE�@�@�@� .w?w蕫KPd  Sm&$Z`8)aC0M:ݺ{/V*qcV U&QX[3gۿeXB17t`QKPV9S3M^-I."zvW߰uToV|UAzj8A¦Wqjm#EMqhړ}թEM-> ctzgD5[EUCe)/Ӄ׵WU<ڸv>zVv1;bhOn+Й 5]z _/)<O7ia7 zI0U ۦ$@�@�@�]ga&~3r65Yl&Uf'Fsha&hF] gZ:Fz n6jMVdzUy3mf"oَ+SoTʬf[o(Q9/m0,ȅI 茁vF_S͚]ءnjOިY%XWĽAUh7uPgԫ>ut]fYw)8TxgS53Vm`5 NΤ O65 yuۼ'!� � � @v =;kfۤe Q3Ȥ!P9[|2zdJǃ)xwZ~~jy`m3i:Y^x.[۶Q̊qYJKLTJAqճ;\c-Y}[a]U-7Uvh^]~J<yUN0̕6Ĝ4q^@�@�@�@ ow>b-5X  <L-սYJDT [#mM\O<~d5lu%n?WMj}j4Bݙy iѢEs0٫W/U\jY::h=酟tlӝJU*:WWp.-kkOA:r˚m۶iƍj޼4ikv"� � � P^ⳝ*JwN^ g-qs8ўхkjUq^N5,|^x˩RZjtߴOٝ|5MG;_6KΘ Bw{GK/ݻ ]&Rg�g D;k%&xrdjݨ/ڪԌU{.:ufةoo(iԩ袋5eʔ#/ � � �>)#æfowF;&V aoYpGNs7Z67y2 f4W?>3^}fN/ڟcwоys3Oh4Eoq}~Nř:ץl<:lP)Ý=y ye>z_nYlkWɌ ;%S(͂P qqGժU+[y� � � @y;椒<qS}ttZzIWZa'H֯zɇy+/ƌyUX::ҟJ:^2=ms]OYw STU+ v!Mfv3ݱr:+͔ݱGTjHLh^Nםv/_Pz 6h۶ >i^Ae9� @iDEE9;,rQQъt`}"WH@�I)iKiJTIvk[8O'ϾWX`hOYH&Ԩv6YoZ~ujP(dgUV7^'V(12!� � �@E, g@6S.z9ް,t`byőڸ.9aTBV3#{9a@�@�@�JJ`XIɖz+׭6+ϳ><Ɓ`\&"� � � @i:K2!� � � �  �@�@�@�@ +7E�@�@�@� � � � � @`XF1OTzffp%u׬U5 "72%Yr [jϡ?\ZBvϛ LKG(t2n۟~e;+v*5~s>=t$拴?hEOGRI|RS\s@�@�@�+VTTme\رW7LZ~>Kז+]3_kZ6wO`l%3RSutlYs=笻*jG9ӡj/kw8׎4g ޴ S ޝ\E[u3c`B~\K~ɿ\M$jXOZ=.Sٱ+&I=7 eJS*iak+^qN@,c)E!@�@�@�<- }5״QW>R u٭t :_lV >ϲR߱ m:<8Z→АG֭Wj9ljv {weMuc ۭXEiU*݁7ygƟ% � � �׏ s]Բ*Kk\3dVޣwUM:=_pֳּ͚>]閯iF~{mfڤ{kYvۼOuocs{ 4w0%=۱zKwдiӲ?7AjP3T RU**G׹;#d]F~ =չq®>XF8NI<;[?f)prSxsZ[‡f8]0[[͝_)G&,MON\c'[wNZܖ5w@�@�@�ve�GS4׬mFկ5 9lZ9jreuzQw=^mw{i|Z }^cHIu]mc6~6e+VΓƮiv7k2&k͛ҠB5pFejϞZz:m~of9yMM[UC+gv:AkգM]=3ie;b}6o]7~۪֍i LS|4iOU{նk *h+WOzvJぴ1z+5oC}̤o~l:O]^K޸ZGRm^sQPkҤN*N-jr� � � @Y`?r]]CUl"zPD:uTkz kľmnר>^ZF)Ng#RVWP*vP,ݍ&Z3ΒvRs:j')35MUbEڰa֦ue_9眓m~o4YՐ#U)N]Ŗ֪6>N-j:agD#J8sϬV_vVim4{lǞQa}[ߺ/A7vu??-3onw]kgnuVZZpΎC*j@n_o$PJ5U5؎3>&0FB�@�@�@ gY 4s&-{`}&%%MHYl׏'FXkG((eݻwDڶ/Q+iV@Np32dOt y f:#L2.MɕL*eRZ^4Jό3S5ьT3upU;ē,;4?̬_#DSl^3,=㘻?f +)9MAL9H� � � > Jb-5X U m>^.)33ݕ~4T#ϙzk/=DTTl٢m۪ATGa թvGT\J+(9턃k˝QZɵᕑyLe_Y5W#xj3B̌JMϔyd*'Yy}rOA;mۦ7yjҤIA9� � � >6uU&g-q  PDP/!IGҕ.lo=zUCe#]Ly o(q#9kiɥh31i.)~snW~!\^ii.9Z{~Uu;W)qqڻ`\qy.-5vXM 3C19 5jB;cFhX-f �+@y-3ZbiE.BTw#.h_UNץ&9뉙ׂhFN#h܍XP&q.;5`B{6+=>uT5Z/F]2dB�@8Ǯݫ|U^S]g狵GS9@�(k'>?SVFٜ'~.ѻE#q|a'}~d~:S)iTם o>?;Vn~Vy'=_T G?$c<Mu5` USxÿK5ӹ6v/?af_;Н:Vᤀ8a&;EmLKk҃"k H_Nq^vݳw+fbG2>s!s$Y8/ԕO\oGwQI3*Uը-EjC6`W`X\kժ. �,`aWIaΗ`9gLp__9,;@�;椒솩>::Z-D1‹3"cdz\8Ԡ ۫OLw~WLh03=()Y;̌Š^ٽF!8իQ9i'gWifZQZ;6I5uYԣGOmذA۶mUpp @�|W,sвe"`TT"##/{<fE9Olk"w $:GrF}ֽ� ^?2̛{*8S`O~RdK{6qհiEm9 8ܒY/̌ +j29O<d/"j*N2 �^)ʌ#qX|FB�@ vE' 5:*<֌KH86i @�0,ҝVg]pƣ<V9@�JK`Xi.Ԣ @�@�@�N_ N>j@�@�@�@�@  +!� � � ��>@�@�@�@�2+@0^:� � � � P> <j2s8QLQ%8Ǝ׬U5@ڿdiLٿtw, W=m.Xky{=o2=\N@�@�@�(>\Zc^SR1kėsq<(t5zmz >LZ[NZkZ'~#GYbiܟ ]n4 2sy,Gu{Ybfǎhu7c-לkޢLH9R!dN.{w( s 'rr#� T ׀uo:Q5OAj_ry`?u^YC5NE �xH/ﯯ]G7ꭟіό{uɻ56^C巙WM�f^)mfF)ɻ~NMvWiܢ㐧4w3yJJ؃� �^'psO hU[5άD:g[]*oa25 7:7ulv{S% �^#;E-rP4P65MtkROtijմFv:S}\ﯸV3/ZzusW4o?ͽ6g*ᯮuk4g}un/mzz8Gha2A,kUUŬXisۋ.73m_e2}2?fʣ+egD6r˭j߾vQ"z h=GWS:էY;N8h}$@�nZ3%y{z=b2` rFiy:MNӗiMQte~H �ò^)qkV?nQ[էEc{6r 9lZ9hreuzQwkP~ѥ}uᤏl ぢzWq+#%Uɱǃ6±hçe3jvmCR!FiL0o eM֚7߶fLuܿhLP&ު.Ϭ"u?@L??;.*U[G}-\lG=o|۵U7_UPߜ _^WVӿ¦T/?x7ڧ6Lwuys+foC�@�hY%Vu8Y)r&5hD=j~?tD5*3eqEj^݉Ahξi-5VjW& [h\3ʖ5۵]r;ζIՃQiU8$HukbpUV �eXga&2r]]C|?7+z8Ǝ={(WOVjtNt"zZ;ӭ &<X-\U#[} C`R96%&𖭹e˶oɪLU]Tgo?~FQ{fdZ< j7rz?š6QHm> $DgTk52[F| 茁lY u^5լY3S>t4Qa+'o]pb/= @�V`qLҝWUhۜ) *i#ov9J]fkxefԣv~ޟw+ h\k@>ggW 4Ι <f>I)6vihmUq13KMc%15kl#� ^:n=0D'q`F6; j\I%y[ AAhGWr&Z?ne ?~ 'tm:]?u5#ҏqڲݮX{ fRM̋š5v 8GŚqcaj[*jֆߵ'v~OS-_10u@�J_  vmzzv$5e~iF xs=_'ʌZzs>oGRt2IhΩG~ߥeI6hjOlpcpf c+wٲ� /D0lo+ҏp`5V%uY}.~{&z.iUHxsQW~C{-(xͬ+fF}%nߞa+h"9Oի*W>56U;wVHٷ] êw@�JA`3E_7ۑ^针*C`JJԑ^P&m9D/13U0MY`fl3S2M $ӎI/` �>%}|UQszg@_8oӞÉL68 M҈^d7 i&pL˯vXrlNT^i߰Q9ʘ闦}-up;w.2޽5$):v$R3l:|ڛ4 cП\ k_ # �9jȵVQ'5sW_Cw,jzekt ~eMm, g?,j'?f-6 �GGMYe߸Z4wMbە,>Ǖ!ଇ@:E�s2Ott=qZ8!o:>:毆N֩Ϭ5su;|uN0kS͚]M \JK]/|pgYO$g+;kzעH;'Z1B럡%wgtm/Tߏ;kG{_] @�:@Y,fo s%M2A\+L]<9_'L_^@:G u@�_s>b=gS}ttZ: /jɉEL+V.bO)5Bi:oWϱ}AKO>牓 W.-({=~y䑴 INe"1@�brvlY亢u5MQ"IhE}t^Syd-'@6yyKS bZ[)f}zZoi,vS3vdٿuywΨ&=ݾL_*}8yt7><Ʈ٣bO9yԭKiMBN^ծɈ� '~d'h*8S`C6,RGVR(7}"oHZ*% @�|C`zfn>=-kdFoA?;#z94k}Qdf4Yg׷z`oaYf5͕= N=6B8 wS �x�0tt خɌ pG⌂p@�{͝9:AhgQk'9V WW+c #O/gY䪜뚚Qfu,\yxE�@yգ  @�('d?x@EƘ_}C�@WXEW,� � � � C`Xq {s � � � @( � � �   󡋙T^s"k>@�@�@�@�$ ѻe:{8I)9kN~~twirn � � � @i.ZS~ЊAҵ^BWO܁mk\5Ë䍙Oy 詧TDD7}F�@�@�@�UGa(qzzuE9 ԑWgQRj^aQ:vh_I@�@�szc^}yP@�([^ s]Բ*Kk\3dM0[zUԳyC۸l]썿(4)5|M-ARF�@�r8ze%\#d\#-� M^ ˊ4E7ygݭ.^+?-uv̗߄(22Rg1g4 � @<6B Jt@.sx<ڦnɀS+ �!kzakh׳\UQZmjUVdžȟ|2QC o>x_\rI6 � �@JWs]WK&9v*!135Ҍ30BB�@ L0Y 4s&-{`]<?+;y~Ҁ _+wd==7Vk{ォrr � @i g=fh@� !K?.QհZ\OVMܥڟpĎ5LIIѴi4<ÇΌSA�@�@�@�NMaf 䝓,%6N΂UB5ovu`ޜLT3| 600 � � � coG2ʞ߸OwF;&mwI=@G_uܦJG˕@�@�@�*OoB'4YԹNRx`9K4fM4IWDDDy9m@�@�@�WBG}`]G<e{啗uAM>M~d$r  � � � P^?2}uzm8 � � � PR>?2@�@�@�@y5 � � � �(4S+Jآdyw!W޽{^؏� �x@|aO^}t@�<&@0cEoyڴvCى� � � � �}h͚5\WxxUeff* et*@�@�JA 66H0.M"� >fXFFvSzz_]_tn:̙= � � � �E`؇UgPUxr3r <ַkrfGceuG箝u65mT_Nv~!� � � �^#@}=JZ~G}=l j^lM`PڞVq⼥@�@�@�(^ suQ֪\)H]7U>giOǎ]NKp gͰto6E�@�@�@�ʜò':.]z{miZ~[xo:E�@�@�@�ʔOMRd::E>p0A<|F)"uꢾu3uCT � � � �'Nlzֳo~jٷ+0ߞ3o|cN&M╛?w]]kNxj'5}ڿ}"� � � �eI'a'KgiG07y֝14r{jUC4}e}cOu^tClW +F@�@�@�@ x}0l+tkkRQp@;3220]ҳ{7l$''N:U� � � �iM}7tn4w޼aBZf͛yiw@�@�@�@Lx}07)(WбL} r1T  � � � ^ Fu6uUQ]-F>@�@�@�@�<SvWX… � � � 3<t)cbb,s*Y@�@�2$XS.]A�@ i2;� � � �xc%mS}ttZ,f@�@G$]X��@�IDAT[l)??"� � T9S@�@�@�@�.@0iiih&@�@�@�@� `XF1OTzffA[*ǯ:g~y]>"� � � �?\Z#ĔTV Ґ*п%$c]뷮Dm_I>}͛ .裧zR%$#� � � �" }5״QW>R u٭z4NX=Jsa(]; +ynZ@�@�@�@�r`͝۸OKk\3dau(J*ⓅIn� � � � aX3e4E7yv-/j‘l<&$$>{Έcjv@�@�@�@�L0ėakh׳)V gCԺn\Kۿ,r䓉0jԨLP� � � � Y&zv\Ib7͂;iSC1IGܥz2eƪvzwվ}{WyE�@�@�@�OR/X G VjU\Q;3s1HIIѴi4<ѣk:@�@�@�@�x}0l(9{M_!A�`PF]5nrn0s!L0$32� � � � P:^ 2 [掸II߹wnoޓQQYJ#<B�@�@�@�ʣd}>::Z-[FoRj$)5B*J Y&MR_ϯTA � 7/[lYFEEۧwV(� @Iuɦ5K-f+/С>}.@�@�@�@�x4Ivu=:�@�@�@�@|~dQ � � �  +y � � � �(@0@"2 � � � ��0_ � � � @ $" � � �  +y � � � �(@0@"2 � � � ��0_ � � � @ $" � � �  +y � � � �(@0@"2 � � � ��0_ � � � @ $" � � �  +y � � � �(@0@"2 � � � ��0_ � � � @ $" � � �  +y � � � �(@0@"2 � � � ��0_ � � � @ $" � � �  +y � � � �(@0@"2 � � � ��0_ � � � @ $" � � �  +y � � � �(@0@"2 � � � ��0_ � � � @ $" � � �  +y � � � �(@0@"2 � � � ��0_ � � � @ $" � � �  +y � � � �(@0@"2 � � � ��0_ � � � @ $" � � �  +y � � � �(@0@"2 � � � ��0_ � � � @ $" � � �  +y � � � �(@0@"2 � � � ��0_ � � � @ 2 � � p:y:zE�@x$\~D9S@�@�RoRaQ@�NăaUz F�@�.7'ü[@�JCJጌ >|X JNN,S~@�@�2 `_fDXXXT"2+� �eY#0`b,7@�@�0 au- �&` @�@8Yԁ� @NJi@�@�@�@%P @�@�@�@� VW@�@�@�@�<&@0c4� � � � PJ > � � � y@�@�@�@�J[`Xi_G�@�@�@��0Q � � � @i  ++@ � � � � 1jB�@�@�@�(ma}h@�@�@�@c<FMC � � � �-@0�#� � � �xL`Ǩi@�@�@�@}@�@�@�@�  5 !� � � ��Ҿ� � � � 1a!@�@�@�@�T$;vS Q???F h'7}d#/ /rN �*Ȕ@{nլYS|7sB�+`>edd(&&F+]~!@K׈Ro@�_4I*T@ ~k8S|`ug}<"\]3"76& �xGaG#¼Ї.#�$`F{_i%%O PZ澛t$]@�"o\?^BW@�p̫Sis=@%%+ �$P:q@�@�@�@�<%@0SҴ� � � � PJ@�@�@�@�O  4 � � � ��Rt�@�@�@�@S<%M; � � � �.@0/@�@�@�@��0OI � � � @  +K@@�@�@�@�<%sLm߾S~�{W��@�@�Jas=[oU˗/q!;;wѣ9}昩äݻw<xP .ܹs~z L}G)lv!�^!P}uvZ%''vkjj{ٿ^bR1 � �x\fΜ=ZbE a0@&iٲe؞={[nE&Mrgukztmiذasogh$@W s5d]xᅺ;iӦ? 6ߛJ=z34o޼f' � �xOò~ s+))^MPwߵA_~E;CXꫧU7@�o(}|ѵkW:3=v?M/Bo7nl8:dK.0@�@�@Kn_>zw:۶m۴i#Si߾qmܸ]:iff*PhhﯡCB1ǭ[ڑ Xzt} nGQ 2Ė5ʕ++>>^fRXX^[ƌX۷o:w {t!]wݥ.W6@�S(}׌]jmo_$io1ftQ#FPjdO?|I700GuEkF|{zdF@ף>͛OWV-~:_|Q'O^iiiAAA[ݺl � � ^52|o>(R~zvگ:uui`g\7p=w^;u%>\OբE !zzꩧ9<L`|2]vmg„ i[v4͇;3 .Ryv1>i^P&MO(--@{=UN5lP_&?LL9_xnedd{bTT~a70~oafʹ {?;s=?OeK\~JsY'@X~ l  � � Pffd i.&dF4j.u/3bgQq̕2m?^&8|@2ujԩvlu[lfȑ#{32LZneÌ<x;رc5jåI惢YߤD$Sqf1@�}+#*U뮻ދ̈+СgafتU+7#k]^zc>ˎ5/ h؂RժUm3j6{5\Eّe_-_~s@�@�#ٳg@a3Ot4 %q%W .p*׶mW^됙\fYxߌ0B@i|ԨQ`RڵmMϕbbb'<ڵkgafL4Lt%3utK3iFQ,R +PR͛7/\0ӟ֭[)> ]})&* 8&Fm}l\O 6S(z,j1@�@�(=&٭[7EFFL@TaP;wtp\y\_~)T1.>oG߿No4WX럼I&@1h?�c~~~%[rEmƌ0ӏ֬Yc1H @Q{r~۽Ќ3]ɵ֗}ne}2̴Ǣ+w^@�@�@l D)J*v},hkfDYl0#L^3,BoFe &dֈ99fML`YDDjjР]8?kYI35w9ML2k瘅M2mfZhQYsO>S0oV[ON+J;E�(Jf!{3ELv2#a{suS tjFfyQE͟W؏� � �/# Yb@Y?ɬ_c>Ŗ.]*qEz6Yd:b惚YL;4O~4^u;rˌ۷ `5Bs̱#̺bݻz̚`fԚi,|o 'q߸8w?ͱجYF�(nFS~͔Gs6AB+̗Y*hی[|]죏>_Qafԭ+w4ӄ͂K望W@�@�(^ 3Y?J a8tPpbf4YˬOs]w,9Yӆ L˔3}]IFؤId^6Y&Е_2 3k 0ayv'�]^u3o ~~|*~@ Wfm^f#G4h 2Sqڇs;~>=7Ј#Szg]yv-E+̽Z 3{ҼG�@�@;E׏dMfjS\,l<sNt`sօ̇63L_m 9_s<<<<u۵<L*L\er{MNN}ѣG( <#`"4Y9ޕeZ4}uM?'^Y8@�u=@�@2 (e% j"� PZ]o � pBI6[ � � � �]`X(� � � � üm@�@�@�@�  +%@�@�@�@�T`^8� � � � PtaE7 � � �  G@�@�@�@�.@0f@�@�@�@�Ra^z6 � � � @݌ � � � �^*@0K/F�@�@�@�(�Q@�@�@�@Ky酣 � � � �E(zS+k׮S+H)@�S{JlB�@�@�X0eHMgo<(;V#<k"""rovy94aeQ[eђ>!� @Nr6]~4o"nZ!>v @ SRRRKNNu?;KWn:+}t)� �  OU^][ZZݮY{ Pvbcc4|\;xw쌊J^n%%}d@�� {`73ԾYjR<2M!�Sn5 � � |0lmakr&N]EuuWk /h�( N � � PX8N?UCºHC]_"S) PwK > � �$kU ^VO ())) i7(ww � � td&(0…޴qmݦV[(@~ *}ק//'� � Ot0,\t]+da/"[Fn@g@�@�(^3XN>o טQc5R@ ?p @�@�Έlʕ+k%"#�[n= � � |0l_am wmRH (11B@, p-KW � � > jc֘翴۫<#陼WՆhE# @i p--yE�@�@�~8035z(}gzW=& �iqC�@�@�|0(%wࠁګt!mVQ? P_�Xu@�(>?M+^*T]�)}7+g� � 02TX3{.#@?,{-.q-�ae5@�|@`.⦵< M �$xE�@�@�,R6l.Z<)5kXF p-D@y@�|\|sz � � � �'` \;\@�@�@�KaNC1IG]WmΝ/Gyyd$'|۾N22gM]&>_y`MR'(3-nN.O=V/!ww|D.[l_Q^S99 ) G4-tg_T[ozF>cIJsh:RS � @I t0l=j۪ } /ibs4m}-ל~uy-9 e};e+s:o2RSut~w5\j77ޗeW۬Mz8n_݇XtfΜ]v{Qr!}W[_鋶Gg؂ SǾs^GWU놏UcGYخ$]'p wSWGRr ޴_x91;Ŗ(� � P>Wg(hn0MD㮻4K=.P:uɔsa)3Fřg[|V%Wfv͝Lbդ'^wޭ ^zh6 UuFuk=~SG=<R24mm@�@�ʕO ֤nV*ip t:whZ>Z8aQfd3#g97ܤuOq˞z16ގԬXG˞|FS;w#f_{em=#5~.3 ̴qKk|>ƪ_::M[~g'ln6u}un/-i'36z-oAӦ2iiDt+.}wssU;pa+ZhE 82[7U'‡ 'a/qFRSCjJ~#f,>0<R]l6R̕W@�@�`ɗᇨӢɻ7lko*a}CTvvۼ C6PqFJؖd^AaahDzſyTmb.}]b\7v|azxKcm-d3m{EE6vwtl? Y)* ޙi]>cٷOg?V}of VY3sBԷ&(04nhդ}ݳgV^CN|ɖ!7fYf#@0wO(q=aqVg7 zj(??Y4iOUX jwKȬ+J+6ƸZi}`YV޽=5eQ_6?FBm SX@ݩEMW"� �xOO?ajs>uwez;ȅIt3pB`š6Qڵl U5=p8!vtQ`M3=0Uj6_hF6=VJH}wpQ\O!)XQMhLbbL3DӫFco{]PA@DDwq(0n߾߽{s3py=YOy3j$RqHE$Xeڵ][8խMPU e+X6,65a/`Dl,ziӦJV9sƉv.غU&F\ 0lx͆fgB9u8X~Qp2̐Lꍦ51G-9j7F)ԯfW'_Jg~YƜ`L 0&�xf eY&l+v;UٛQs%ېU<G"Y[|eCFwƆP~:5NL+WvrreI0j3@)ss< Oqn'鍬ȥ"{٦M+/2`�TR}4 .\ 0A]^ws1[!SQsB؍u7JEXN^#*rL 0&�`E@W CY+쵾^Zѹ30S*h;QܻvҖGP8@վ}pi_jqpU6o>^<~ի/]_$l\+4,___^z2~-rʡW^%Kga@:L@�Z0$yĈ:%gs3°KqnAY׊7S_Oaȏ{g2&'VodL 0&�xzUS#{N3M@AGWR: ?uq!!0+].4 K3kkc&X?E"wͨCn2{nfY.ʽ{8dwbI#p\Ze/ZX(zcݙF*T.Fv՘@#no9S*&-:-}E&ۯnQھ+6'cR0w:5a1(;xNf2oGu []vڵk U2&�`L 0D8w׃ȗ_q0+U8X閨\s pn6)Y0Szę85yXQRLiXpj{zuxjѧ:e5�,zlBHAgyry|i4ɒ1p�o`g�jOgHǸ()f̘\ dVo?*JP#àvK+-1g-7 { vbXrJ"(, \e=v\1 _RkUU)%~!qvvα0&�`L <=&<{???xec=}wڑ0-1I(-v41+8}iZ|<`yU)H&㍑ZaH[֢EK\r| rba c<+3;zzzjyn|zں;#ӧ`.n0Q)('joO@Y;K؊! Bڶmn+ K u7W-�`L 0I4O*x%@*h(JY?9H[ҥxj\�xlULKv,(IJJYVPP&�`L 0V0Px WR/ו0& @`oI>�`L 0&PPwଂ0&�`L 0&�`L   +/ 0&�`L 0&�`L 3SCY�`L 0&�`L 0& �+ '�`L 0&�`L 0& `e3|sxjL 0&�`L 0&�`K+=BXL<S 3۝C,g~44H?6OCpkV<zL%56V2KEzjL'{*sA$Pݸ{8=%Uyk6\^)^!_ ‘+a@E$aO}$)HMK FL 0&�`O@V] øipr&>}^QOz!`g6cy5UcT<NW)Vim;2<®Cs&Rbe:|]SFɩ1罸\YEwa!g89*ks�ii_p1˵Mƪ5XVrD1S`Ӳۮ5?r&+ϩ]/O2q! e7Ġĭ(wn�`L 0&>b +oW>E7!^OzK&{pw4)"mxwuyt_mgRYn0L gy<K ?u{o5Pr%EZFN ԸivH+">I`L{ֻV]piO�`L 0&P2eU7XyTA@0 7׬SNϋޯ?)Dl ^~EɒLJ))’mi@ T"|2ܵ|@?= nlYMrCՍɾ i_r>/eyҲʔ>I>-=뚵AȮ=(hvSXSV-Qic?DÆqFc`~/~En:kH,#ky;]oIpu&Õ<)!{,@SS'ȉ"Oa%u=4VHkIӧ ZkDZr[mmPחTR[Dž}uskobarxI6u7KZ4;3;<ʃɵ,8X㎯)G[ksԮTwfnjҰr9HdG7K 7e�8mܹ[ !*s`L 0&@"`Vf.8qW"0Y5fǺu1..ĉRSRY-o=W{ߩ/VԄxx#wrYba|ѸO�wxk4ָjF=Lk.abL--i?{$N~1+vqǐݏhϰ_M3=q<l\]e e:3[1�Ӂl@i*[17㥁h=7$@I#e: A.$:x9nن py25e+͌a[�K 2Ν0\phRJ##26Y*f+á I.3ii|6!jVGDt,=wZd'!Ycy1u>t >R&uVUMH Sp(vvr6`*_�K''cln^k\J2NZi"?x{Uoh$˒�4\/_Hqwk9 &pD�ܼ * c\vMe?>s2o]d){]=W5;3^u7 N1hVdVH61~`#FsqYl"v]sNU!eW=Фf9ki)m1㎨ZvBGi�`L 0&Pteغ8q+.v6Tܝǘi/&/PC>DkSͿ3bS++P|mˮz5nڬSGPU RQ֖䃙0%ZsqS<P28ږHibӷpiNBQwm|9}Ur)0ycY zPki%w^pmڴѽ\i8YzW 7{m km-ӗ9seJpKjU<ce>XgEu- zغ|sPgH%Խ3> 8Il`Ti/ᙊ-Ck QG7aU 6Z:֭[Jk5*ڼb%qi7V0c|Xܽ{:jtiaB[Fi߷e|q8p]ɒMosC7SN^UeR8'&n,6˽ nOP{,go~Z?ԟ"i%L 0&�`6 �PL6]ygG omH[@ZƕnL1K Sxejy!JKԓ]HZR{TGb&1)*iQiS) })CV9t~%,8D'M6דN ܌>S{щvZdocg+LQAXY k0mJ@>IǼ/_*e&´;Jܵ6u*i[�S,EzkeJt;,ao'#6+7VllU둅CgrU$~<yd*Uva1Jz4vRĩ $HI6uXSCzG-2m5?LhEL 0&�`E@EⴧHdwU Bxl./Ii3+k<z n+9TF=LR$xNpT~/]"Q܂X_';'*DehZ Iܭ`N'.N|+aR<,Fڱ(,ٰcqp•.j1Bo(닀�ԫW-K4YYpTǩ67>-3jľ}=|Ν;g-s&+JWlq%O_<~2\iTՒ[޵N0 j/ b|@-0C.VJZGs;[y޽t*2:yqD]6۷o,Fw␎50~I؟iVN()."#Yf}kRL>X^ƄAp^4( Xt%~~:<<<PjU"N3&�`L <J=sxbS(޽NlؘEc&w�ɑ޾ w6=Q-D TaF# 2-d-uTf)zujKKGCAŇ\(Vq;v"b[ odONޭ0M,;!(W^4oEHGڭ\FpJ>.6J[:.ZzݻsMXNeGl: |OJFc}}Wl8v 1 )ڤpO֥tC1rUPs.ҥN0CJºkW\_D0QR$̞)iątiM;DR:5H;h2{nZ1Kd/ǍUk@?,׌?#ײP59ճ0jE:B(_ a밻wLiL}p;%ℙxjV)XH2~7u֡knXv9 0&�`L)(ʰQh3m1l>u�>z<>eOuxE/k�gE>Q{ڱL(M/Ւ,^ Խ˵ܳ.ֵh+dz!{/yF팇'͐) ȵ h'4bN؅#7܄9ϝ@s:1K5&kw8,R6F"!WȪ;ѸM%;Ild5bZ[TF�+BĻ}EXd>+u9_慭i,L[R Fzkni .Z/hi&@Xwŗ֏+ϓ5--V.#Ō8sk[[z>/GJ1D^s`bZwM-&xS'17u* ; ;fl̥ o.ȫkwJh5v<^_!oGS󔄾;}GI~<{$i/vYlJi%$b&�`L 0gp2$8Up26"8 +l9 oLe緝SĻ;4΋ YO`Yr;7{Ge2J9YE*LJiN".p$ mktp$c@ٷ2L{FA 6IU:,S?w^i6gl5J_G^ ޼\0z-o^:g]^wN3rOO{(Fu Y&NK1kݬuӏƥ)Y:u,)% Ď!vIֹym_KŠ,y&P<_ GK ��9IDAT7`L 0&*uT-įוラOVesD"X~#xZM_{OrjcO}}=<rIF*'OB1bĈE| (nV6(R wAKNk1Џ* BW! ]&I8<c:+ ^0L 0&�+b +^,L 0&`<;ۥ=pM&�`L 0'M 'I3&�`L 0&�`L 0LaOL 0&�`L 0&�`GaǚGbL 0&�`L 0&�xXo��`L 0&�`L 0&PxXVxy$&�`L 0&�`L 0LaO<:`}ӈPɑ OmKԸ8\^ }|cR')HMK j=n# ,VrW2N0&@\H<$ ݓ`zJjy_({ w 0&�`L 0J2컝Gay- +by`ڲM^۱w<]gƨ<yRx7!^~E_ac:yNx.]e+p+qAo܉A[w;QB!F#UN؂G58ٛe`O@Q\wC${`HzJsbm:ӯrLKqd'}kܼ}Y=-[c0&�`L 0"B9>V%K&{p3qُ>D h'6rF;wዐ3kM޽k=X:9Wh)nYk}@vfgR9m+ͱ!g#y[21Qr 0&�`L w2LwVn//nTor}>߅b'&LQl"cc)M#)6u*D^}[z</vۂ}cYZڛ=d" S _sfwx&7[?'ӻ*]>S_s6hBۀ[s+]*v$σm}\5kKC#}XrqOZW©I_91P+H=z 6_EL'P\]Rr-OcB Y*殽@n$qﱲN#\YrH$$$ȵ{9Ȟmifj.kUep/+T)s 0&�`L w^F2Wq:p^5bA- Fb=<60Ikp&UD^u:[z>MwNh$%GE#N,Ym;Pu+87mWҍ;o?KE9ǣY^_GE0cV-pm|$?x \&/߲,ڮ Že'NʣK(L>ۯ.d^Yf-9P$ݿ[`PyUvѩQR?`gm.MjS.yF4+je`O@Q^wih;Ʃ~=\OdXA^X8[U'&LDZ^r\')ädYNnڷ6mAۙ߹~wiok|uF{M&}It1. ϟ7$21[ttSC12>aL 0&�`řYq{q xoN; &_I^R/rjژC W%;f66:A[45F(۰2fuEB0JttD聃jnڣRUM+ظQc`[2UU8{7GuWEX.d޽7l#QT,e*Yy%YlU \ޭ^tnӧO۲VSv2_\S-{UU5 &u'EbKtnje|Rˮz5nLEMG"Ξ5q{~YFo-@ݥ6n\ZiMTYYR KZd|0)ekPi݄V &�`L 0&P\ keGм+N`'n{xN9՞χjfq!*We5AZR</eQB )E(ERҲ"<2Lԗ1n`q\?}$8raL=Pw2%˥{fنaW*Rfj<&rc[wU<ƌ[5.g4 WLM#/]ijUeD&ߏkR\687 jܽl⃖|N0&�`L 0J /bxiµ$02CmRh#iZWJZe{!Yf#>! KRYoo? ]WeS)ǘ WC: F٭ש Ru߅RmEdYFQ~55POV$x.a!3vi"VZY Z/Dx>}4РA5 (&&N4q1Tb u7xNpL̤"^v@(5 }ZȂ5NN{.yl<k֮]`%,:v옧o@PtF5c;KSs ˱̵*۷O;wα-0&�`L 0H@WkQgߑ//Gɚ=_apȂzDBuzjWuP;c)> XQu %Yء#(/(vk6j% [I.ځ]QwO+"7&mһN5ujƵ,"euyXfddv;J4o&])MX')֔W2z~~~ڵ&MK<]X 0R-ZUZh8ct&7qEhx?nZb>T1xLk*  6XO_[e.Tc[p'0a`T:]t]t&�`L 0&PkeXqAO}+j5p.$חA?HЎiR-2egM-,RK*ϢkMF*\+jz(7'_BLe\7T/t75LUP]<lfNuL1v?KܫHA=Ok/ܜbi5/P|Di89ӹI5!F$È&%:gX#nJ�Jݻig]kV(5roe mK$bja!MN:tk}#s3C&$bCxYlk ~ ן/7bRǗLH;X(Y|dL 0&�`ņp +KKXDڽEJ~eĻB*/mrKs$)(H1AEV[y͕J<-/BnI"O^ǣ1H1f)vU*A> |ʔqԫW-ric}!m_eO^o53}i3r'=~ivUaB mR^C)+#}Fc#15]t<+̙QFx,& uo`L 0&Pd/Z>(r܁JWt˭r樷bFfP\sإm>:zH_Ve2A>cǎaĈ{B|I _ɘdF;EzJ6�DRVv(4N<ի!J\�`L 0&(VW]}Kr,k515mn*mS57@`mJ 0 w{,ú,[(ܿk3UwA/&�`L 0&P 28"vM:0w QwЂ2& O/&�`L 0&m@پ?<;&�`L 0&�`L 0$ʰ]1&�`L 0&�`L <Xl`L 0&�`L 0&@`eX䮘�`L 0&�`L 0&m {OgwaN#?O}%GF"t<) Spsz*,>q!!sěx/)\\ ‘+azN¾zׅH%H"9>iC߷Xڲ b~/\4XG0%~u<]蕻*ϒa1rJt"ONd[ 5IHH{hEVx 0&�`L Zv76&u'$ţxg򡍮`q.,UcT<NWBi<i3|/Ss35p(vRL^|ZxܠE.Wb2*8p426 oEXNYQ;:a  (j.u->=4*p&\=`sNù~Y~ȘOA|EˤP^=܊E{ԲJ|d{.t^TdO{pNWD:g~HD<| iaܼb2&�`L &`fh>zF]iyRڲh_T!ޥY=F""B3?Y:9Wh)nY.^{^Ocxo]ݦ@_=Z?4rC.xj|iooݿc;CWiگѺvpÖsq ;`L 0&@%P-ÔZ4l^Jv=||fZ0IGϋޯ?QZb"6u]/SPXLm,^ ]eyl@ZggA9o Q~x$;R!]gKqA$wՍɾ ij?>9q2Vi$7bNJ;^|Yk{+HIy[i>`F/=C_m{cJD^}e-='rUi:O,x3|/zSʆ 6Bp5V\uZ_Â]~2=}ԇzҲĭ GD6>}@A\,'c֣h3segK=j{Ih{gn~Yy ^#Wbj@$ /kCQuDs-"Ch5vlKt_rcq^w|\h-8{^մ~נWp|Jֳ́aө$!!A~w1r,Q=>Xw$@.?<JÖQލEցriϿ"ow{6yaNu]Pڦ;k KUO8!k+ZOzM\邚PY,eEQem#s;[Niw'Ӵ\b)Ff;m dzH]Ku֣buNYfIn<_7Х0S9}V=[6y]QcL]�`L 0 s4 c~K[؄q5nkm8TzqBa~O= LwkpR"W2!A^X8[:iCt&&?-:/W\5mCvw?'c~Οo?.L{˯s7/8 :E<!$|kThF)](?UpϿsR|mݎ2~5boڼ9%(זåySݷ.-N>%ThJNKY~^IڴmgNC ޥsmmg~=;,tq5\pڌG/ԗoPv󮈍_@nޥLzsYN űܗQkpD\l;s%E.P$U\NhZY$ rykY<oȌMЃ{\Za_t!A$]|V~~ﴒʮ4goKmUe,S{ɇͰ !GкNmVܚ^şuB7owDk-/\5pb.QaC޺Sw@fGߊL\{3j_h2)OL+}ϟTʹiL~6R],xX_,8C`]L0_yVb :@BS~M_Q~w<Õ 6M/.ڛk>|fld==1ԯ$MoSC7Xe7,(z׷ZVu9,U-ja; A}1}^[Xj5ORDFX9)%ID붝~__GP#v|[Ի/_RG#}n^`Kwr4(LX9+m3-˝_</xcɸN:)LK2}yL 0&�JXIZc~hT'o0L.+bwNJE*$::@JYXS`fcӗPX}2]jX U)JkK]SaKu8dMt9Z O6k4Nk6 WM߂kNBQwm|9Z^k2߹ioB<~=4ORa9 ?S$h6U7bq\!) ڬ:I˶IʶJ=,H\Ĝn\we<mQc@J]+WN0SIFՒL[Z}ȣ:f7D�3⡸fE@oWSzxkQ5eeaڕʠ5Ehceh|Vq1U#JVS5'a%gGKm˓rdewZ<DAzLJS7i"{ă><kX,^\S:b^]co >#RfohI|>aQA*<k)kIl^G]:,ZSBVsGƵUYYRh0}4.]:kssH^hU5[aydMQLճ<?%{4ͤ ևf: nbm13-mለSHsxfjZ!T⒐Q ]ve>.UoЯ}B\)3-].e;QJ,`*2:,-HN?.($,eg}PoCtfd$(x0aPc Q4x~5'\ | k vnE6 %/RUa:u*6uӉ|rL 0&�&P̕a][^oeiN^m 8mRf* (bb)-NH.&f%)#YEB]4#YiЃ- )=#Q!eY(en)R0#ECrwܮ%.8VBaAmk4 jHRc#q{N* .<xMS=0\0+6A>Yz$ 3Spҍ V,[Ϸ"vjnd)]1%"5b(q K5zPKJEń seYhu7N>j?T)@LIrE/CMyҟ 9P$5%$<C59(0Ә1cr/4=NΓ_i"/ؙzšJјA}‰kN.y E#qvRݠg>6LPy29YpZ"HQƽ~�q:GJp5Fn =)IU[2,J+'ړ$54kfef.ovp?$8Ci+ͺNQ|1|G*OgؒcI~烬Mف ~BLߴ3yc}U8 0&�`:2u牽%Bb*-%U̬en4.J^NG"!iA~)aN/".?ͅ[달 *V"`}�5\m4 |?)ɴQyܭ`P:=%17n)*@~4Yѵ".$D*մz(Kq|Y'! u&vŜ{. u.N?~Qb&՞ѝY4A+`:o5iE3B.VBXjhW}F8$rܩH>P Ca-B0`D7O-8ec|54RVݸR玼e5A@RH/V=:Sw|(֢]vJXvQ_|k㊨] _]* R;"7*HӤh@2ɂQ^n5Ig> ]oI╟"rkU#c?KNsЗO2Aow%J^ab Ts_(SMwr$b9BK$D}_Xϒ) Y5"}ZT.F&-:uN5h,3)HY�`L 0&13Z~<0$(=tYD+VY/%GF"x+,RXN<0jKI*,(pߢ%:]XR 盥*%Yf=z\*[;vfeb2)hA۶*ɇOK ߒ>$eȠk7kbͤ;(BS|Db-\,W\ue R|IHqrxt$;Q6ǠW/g1}TQ:) ;.Hi/>**s cBnS̝]S)rgJ-WȚ[k7>kyIXw.Ӭ+IEuy]7c}b8X\?qRp#}߃ 6z%Y| On.piFq噄ac;P+Wm: 5t|(8}# +oaF1IiDa""E2UQp{c8ݽ0=:V9XnΖ+rMX\bkm%Fؿ@%] ㏫IK;r6VYH+By%?/RճbZ;)^ɭ,=Eth|rL 0&� XDY] ˶oV[=/ z(#%ъZ QOחđ1hhgHWn\) Jݻ_<.NqHQR]s |\_J*~d32[�q\Ty9TJTPA}4ӌV�YazClUU"W]ۣϝ})u,k72nWu MPyggU K梭{']2I7yP 8DY\3""kؾl7Ar9:~_~[+M M[a NL:PIEY! ' }}AqM_8,bU\ $zIhl%,0Mgz&^;uxS%FKVg>YDWXcZCdIXwIᯬuOLJ?+bVIN 662XQ ԺY?샾d[2N[*GBBߏE`8(^e[dsu@M ^$k3*<E(Y~C-)\DnbV+k~4F o 6ܭqS95Kaq "֢ ]:EQq<r%Lރ/7P[v?n qĂܹI}=75H(ΓzHIB򴻤2Gr;]|IMnZsQ{>צw̩3&�`L@%`HzԽ<@w/cA:eKk\roUp5||ۻq;o x7\*b&[#]" JNYr=Z0S `Mn(#m`%ڙZXk-ڿ @Z(Kd /Zhf)6xJdhR^YfS,";񀩸MT衖bgA :k1Wa٭Jpײc x( jιnܸjSBr6v]QҚbjmmGXY:R\-uJ�w賟!dEnd|bi+ߴ%+Wq�Rкs[nOz\,O�ixbZ:F%A9=_~<į 9tP4G~'[2𐧲fg0&�`4L_ɕ-ړWDVe5q[QQ_Th'7zeel\}mdY cy,P#E_{Vy 4@pw z?ovӞ )t*g9JΚoYJiIXwm<?$Ø6z 6[9)r/33AJ}zкSťp֎)K *.BpFfj*']>ER/܉Me&AkXtTi&�`L 'Pa/s@ȭI s-.)L#MebL e/bL2'j 7o&�`L t +�l6l�z<;Zx^,L 0&7^,L 0&�` '8FxbL 0&�`L 0&�`O�+Þz' 0&�`L 0&�`La`L 0&�`L 0&�(1X t=31&�`L 0&�`Lh(1ʰD$ǎ<<jԩSEi<W&�;ɻxB@zJjaG!V'\c\ ‘+aE[p7\7&!;}BԴt{Pd'�`L 0&�{e{o8Ok}oӦ PfM,Z̛'@&Psy>]"9*г?Gu>)S`r](2\W?7]q'=&nhD \[d'�`L 0&�giͰUx'N|2\^jЃ"uhܸ14d�(qú[n_0`L 0&�(ae^[JL:eͥb3337"wcxL d#P\l&2vqXV6uȋԪՍa,wZ&ۭkF?6$9]_'$PCvs1w bo)q[qs:xe9я>{07._CÆ[U`{i>^Vcw4 =+ϡҰ%jO Ew5Q~btg54p ~l ,')!{R1;{BcŽSm &�`L 0"MX+nFD ClG?aM8R\6lEƓgL(k6h;yCN Qu8ɉ_7NE~cW)o]סqY!ɩtE7l$h;�+rH=C_[y=RqpԻUU\۷s7\oY~ut/=7]J򺔆(u] .Wd%+}z{7Zm%cŁp+kmwFDXp6ϻ`Ǚ`|l"qR6~v6}YFJ?</4_J΀|kcIs0o=w"SXVwDv6&5˩ &�`L 0g@VQf0TqroT)jdzW̰wӧ^RʧL 0g@Q_wxy;j S++ >fMp&uFD1FXv(b5 2Ks015ur*+۰!"";W)ؽsSo9tX{O`쇈8{ a?x zYna6!֛#PuK4sbi(Wx%PFѵKZ.xuUeH8o[Vq4I)ֹY }ZTݽM %&9G->{[Qѡ+B^(<+:HU)bS IiMHEhlG(h~VH1n:d>ˆnpvLb 0&�`L(1m40_j 'Ks4_F%ŬYgϞEf<Q&Js5kby|E*NL+W.rre3,yN?*'mmQEr*pc3pz+6 P*HQx,7a�H<=1I@T(/֡DZBm$fְ.ƾ <تF#7:R4ю$#SVn[</'څgW<1IzB)f.ߓDl;q$eKBukET\,#0z;7�`L (Zj_ZLK3ͯ"IrZ<;wcǎx]]ٳg)p6m rI<O&)=q!tt[ $Րp' Nj)P\!ղ_3ѱkg8֭#0s*кn݇DT"=O*?R#-.#~E ,ull`W C,kielo6');7*B9䙘(cyGkyiULfH %IUueZP((wv]L 0&�`E'آ9\gų3bS0@ZY?s)WHAn­F|ڵ|}}s`LP u4%ː ?q$-+rPP>̞Eӈ YŒ S2fM`TUQ**i%97m"V1/JҮ2[EI-1ի7BCCdfw!T<E)~]{w"0XddqVJhφu)"/jDaytn"NUQ\-w u<�`L 0&Ptk0kKE�6C˪nE>X/_gKɓUSKNr>gL &+:{j:/WVqsEŖ}w &Kg) IRby7:u'xe$I8E}wYPZ ʛ)vC@EL3奍zVsM Adwr:\@iga2>R6tlR!ӿJZ FQǚ~[tz4nWPUZL 0&�`EPh|еP~~~A%^R9 { iE/"^mfeO�ȑ�Y^zyyXSy&{N 8n$n CqN0iB}erudEnbL4%Kq�QC#/v_S ywˤ8bi Ӟ[ W'X#2';Kbp uphL 0&kq{{Fۛ{\ Ed_kpvvy(^_3�`O@Q]we^ A$޶R%ņ6ʤ�+wת-IY",['QP<+Ba99OHA�`L 0&Pt ����IENDB`�������������react-jsonschema-form-5.12.1/packages/core/src/�����������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021305�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023472�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/Form.tsx����������������������������������0000664�0000000�0000000�00000104545�14467713645�0025146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Component, ElementType, FormEvent, ReactNode, Ref, RefObject, createRef } from 'react'; import { createSchemaUtils, CustomValidator, deepEquals, ErrorSchema, ErrorTransformer, FormContextType, GenericObjectType, getTemplate, getUiOptions, IdSchema, isObject, mergeObjects, NAME_KEY, PathSchema, StrictRJSFSchema, Registry, RegistryFieldsType, RegistryWidgetsType, RJSFSchema, RJSFValidationError, RJSF_ADDITONAL_PROPERTIES_FLAG, SchemaUtilsType, shouldRender, SUBMIT_BTN_OPTIONS_KEY, TemplatesType, toErrorList, UiSchema, UI_GLOBAL_OPTIONS_KEY, UI_OPTIONS_KEY, ValidationData, validationDataMerge, ValidatorType, Experimental_DefaultFormStateBehavior, } from '@rjsf/utils'; import _get from 'lodash/get'; import _isEmpty from 'lodash/isEmpty'; import _pick from 'lodash/pick'; import _toPath from 'lodash/toPath'; import getDefaultRegistry from '../getDefaultRegistry'; /** The properties that are passed to the `Form` */ export interface FormProps<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> { /** The JSON schema object for the form */ schema: S; /** An implementation of the `ValidatorType` interface that is needed for form validation to work */ validator: ValidatorType<T, S, F>; /** The optional children for the form, if provided, it will replace the default `SubmitButton` */ children?: ReactNode; /** The uiSchema for the form */ uiSchema?: UiSchema<T, S, F>; /** The data for the form, used to prefill a form with existing data */ formData?: T; // Form presentation and behavior modifiers /** You can provide a `formContext` object to the form, which is passed down to all fields and widgets. Useful for * implementing context aware fields and widgets. * * NOTE: Setting `{readonlyAsDisabled: false}` on the formContext will make the antd theme treat readOnly fields as * disabled. */ formContext?: F; /** To avoid collisions with existing ids in the DOM, it is possible to change the prefix used for ids; * Default is `root` */ idPrefix?: string; /** To avoid using a path separator that is present in field names, it is possible to change the separator used for * ids (Default is `_`) */ idSeparator?: string; /** It's possible to disable the whole form by setting the `disabled` prop. The `disabled` prop is then forwarded down * to each field of the form. If you just want to disable some fields, see the `ui:disabled` parameter in `uiSchema` */ disabled?: boolean; /** It's possible to make the whole form read-only by setting the `readonly` prop. The `readonly` prop is then * forwarded down to each field of the form. If you just want to make some fields read-only, see the `ui:readonly` * parameter in `uiSchema` */ readonly?: boolean; // Form registry /** The dictionary of registered fields in the form */ fields?: RegistryFieldsType<T, S, F>; /** The dictionary of registered templates in the form; Partial allows a subset to be provided beyond the defaults */ templates?: Partial<Omit<TemplatesType<T, S, F>, 'ButtonTemplates'>> & { ButtonTemplates?: Partial<TemplatesType<T, S, F>['ButtonTemplates']>; }; /** The dictionary of registered widgets in the form */ widgets?: RegistryWidgetsType<T, S, F>; // Callbacks /** If you plan on being notified every time the form data are updated, you can pass an `onChange` handler, which will * receive the same args as `onSubmit` any time a value is updated in the form. Can also return the `id` of the field * that caused the change */ onChange?: (data: IChangeEvent<T, S, F>, id?: string) => void; /** To react when submitted form data are invalid, pass an `onError` handler. It will be passed the list of * encountered errors */ onError?: (errors: RJSFValidationError[]) => void; /** You can pass a function as the `onSubmit` prop of your `Form` component to listen to when the form is submitted * and its data are valid. It will be passed a result object having a `formData` attribute, which is the valid form * data you're usually after. The original event will also be passed as a second parameter */ onSubmit?: (data: IChangeEvent<T, S, F>, event: FormEvent<any>) => void; /** Sometimes you may want to trigger events or modify external state when a field has been touched, so you can pass * an `onBlur` handler, which will receive the id of the input that was blurred and the field value */ onBlur?: (id: string, data: any) => void; /** Sometimes you may want to trigger events or modify external state when a field has been focused, so you can pass * an `onFocus` handler, which will receive the id of the input that is focused and the field value */ onFocus?: (id: string, data: any) => void; // <form /> HTML attributes /** The value of this prop will be passed to the `accept-charset` HTML attribute on the form */ acceptcharset?: string; /** The value of this prop will be passed to the `action` HTML attribute on the form * * NOTE: this just renders the `action` attribute in the HTML markup. There is no real network request being sent to * this `action` on submit. Instead, react-jsonschema-form catches the submit event with `event.preventDefault()` * and then calls the `onSubmit` function, where you could send a request programmatically with `fetch` or similar. */ action?: string; /** The value of this prop will be passed to the `autocomplete` HTML attribute on the form */ autoComplete?: string; /** The value of this prop will be passed to the `class` HTML attribute on the form */ className?: string; /** The value of this prop will be passed to the `enctype` HTML attribute on the form */ enctype?: string; /** The value of this prop will be passed to the `id` HTML attribute on the form */ id?: string; /** The value of this prop will be passed to the `name` HTML attribute on the form */ name?: string; /** The value of this prop will be passed to the `method` HTML attribute on the form */ method?: string; /** It's possible to change the default `form` tag name to a different HTML tag, which can be helpful if you are * nesting forms. However, native browser form behaviour, such as submitting when the `Enter` key is pressed, may no * longer work */ tagName?: ElementType; /** The value of this prop will be passed to the `target` HTML attribute on the form */ target?: string; // Errors and validation /** Formerly the `validate` prop; Takes a function that specifies custom validation rules for the form */ customValidate?: CustomValidator<T, S, F>; /** This prop allows passing in custom errors that are augmented with the existing JSON Schema errors on the form; it * can be used to implement asynchronous validation. By default, these are non-blocking errors, meaning that you can * still submit the form when these are the only errors displayed to the user. */ extraErrors?: ErrorSchema<T>; /** If set to true, causes the `extraErrors` to become blocking when the form is submitted */ extraErrorsBlockSubmit?: boolean; /** If set to true, turns off HTML5 validation on the form; Set to `false` by default */ noHtml5Validate?: boolean; /** If set to true, turns off all validation. Set to `false` by default * * @deprecated - In a future release, this switch may be replaced by making `validator` prop optional */ noValidate?: boolean; /** If set to true, the form will perform validation and show any validation errors whenever the form data is changed, * rather than just on submit */ liveValidate?: boolean; /** If `omitExtraData` and `liveOmit` are both set to true, then extra form data values that are not in any form field * will be removed whenever `onChange` is called. Set to `false` by default */ liveOmit?: boolean; /** If set to true, then extra form data values that are not in any form field will be removed whenever `onSubmit` is * called. Set to `false` by default. */ omitExtraData?: boolean; /** When this prop is set to `top` or 'bottom', a list of errors (or the custom error list defined in the `ErrorList`) will also * show. When set to false, only inline input validation errors will be shown. Set to `top` by default */ showErrorList?: false | 'top' | 'bottom'; /** A function can be passed to this prop in order to make modifications to the default errors resulting from JSON * Schema validation */ transformErrors?: ErrorTransformer<T, S, F>; /** If set to true, then the first field with an error will receive the focus when the form is submitted with errors */ focusOnFirstError?: boolean | ((error: RJSFValidationError) => void); /** Optional string translation function, if provided, allows users to change the translation of the RJSF internal * strings. Some strings contain replaceable parameter values as indicated by `%1`, `%2`, etc. The number after the * `%` indicates the order of the parameter. The ordering of parameters is important because some languages may choose * to put the second parameter before the first in its translation. */ translateString?: Registry['translateString']; /** Optional configuration object with flags, if provided, allows users to override default form state behavior * Currently only affecting minItems on array fields and handling of setting defaults based on the value of * `emptyObjectFields` */ experimental_defaultFormStateBehavior?: Experimental_DefaultFormStateBehavior; // Private /** * _internalFormWrapper is currently used by the semantic-ui theme to provide a custom wrapper around `<Form />` * that supports the proper rendering of those themes. To use this prop, one must pass a component that takes two * props: `children` and `as`. That component, at minimum, should render the `children` inside of a <form /> tag * unless `as` is provided, in which case, use the `as` prop in place of `<form />`. * i.e.: * ``` * export default function InternalForm({ children, as }) { * const FormTag = as || 'form'; * return <FormTag>{children}</FormTag>; * } * ``` * * Use at your own risk as this prop is private and may change at any time without notice. */ _internalFormWrapper?: ElementType; /** Support receiving a React ref to the Form */ ref?: Ref<Form<T, S, F>>; } /** The data that is contained within the state for the `Form` */ export interface FormState<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> { /** The JSON schema object for the form */ schema: S; /** The uiSchema for the form */ uiSchema: UiSchema<T, S, F>; /** The `IdSchema` for the form, computed from the `schema`, the `rootFieldId`, the `formData` and the `idPrefix` and * `idSeparator` props. */ idSchema: IdSchema<T>; /** The schemaUtils implementation used by the `Form`, created from the `validator` and the `schema` */ schemaUtils: SchemaUtilsType<T, S, F>; /** The current data for the form, computed from the `formData` prop and the changes made by the user */ formData?: T; /** Flag indicating whether the form is in edit mode, true when `formData` is passed to the form, otherwise false */ edit: boolean; /** The current list of errors for the form, includes `extraErrors` */ errors: RJSFValidationError[]; /** The current errors, in `ErrorSchema` format, for the form, includes `extraErrors` */ errorSchema: ErrorSchema<T>; /** The current list of errors for the form directly from schema validation, does NOT include `extraErrors` */ schemaValidationErrors: RJSFValidationError[]; /** The current errors, in `ErrorSchema` format, for the form directly from schema validation, does NOT include * `extraErrors` */ schemaValidationErrorSchema: ErrorSchema<T>; } /** The event data passed when changes have been made to the form, includes everything from the `FormState` except * the schema validation errors. An additional `status` is added when returned from `onSubmit` */ export interface IChangeEvent<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> extends Omit<FormState<T, S, F>, 'schemaValidationErrors' | 'schemaValidationErrorSchema'> { /** The status of the form when submitted */ status?: 'submitted'; } /** The `Form` component renders the outer form and all the fields defined in the `schema` */ export default class Form< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any > extends Component<FormProps<T, S, F>, FormState<T, S, F>> { /** The ref used to hold the `form` element, this needs to be `any` because `tagName` or `_internalFormWrapper` can * provide any possible type here */ formElement: RefObject<any>; /** Constructs the `Form` from the `props`. Will setup the initial state from the props. It will also call the * `onChange` handler if the initially provided `formData` is modified to add missing default values as part of the * state construction. * * @param props - The initial props for the `Form` */ constructor(props: FormProps<T, S, F>) { super(props); if (!props.validator) { throw new Error('A validator is required for Form functionality to work'); } this.state = this.getStateFromProps(props, props.formData); if (this.props.onChange && !deepEquals(this.state.formData, this.props.formData)) { this.props.onChange(this.state); } this.formElement = createRef(); } /** React lifecycle method that gets called before new props are provided, updates the state based on new props. It * will also call the`onChange` handler if the `formData` is modified to add missing default values as part of the * state construction. * * @param nextProps - The new set of props about to be applied to the `Form` */ UNSAFE_componentWillReceiveProps(nextProps: FormProps<T, S, F>) { const nextState = this.getStateFromProps(nextProps, nextProps.formData); if ( !deepEquals(nextState.formData, nextProps.formData) && !deepEquals(nextState.formData, this.state.formData) && nextProps.onChange ) { nextProps.onChange(nextState); } this.setState(nextState); } /** Extracts the updated state from the given `props` and `inputFormData`. As part of this process, the * `inputFormData` is first processed to add any missing required defaults. After that, the data is run through the * validation process IF required by the `props`. * * @param props - The props passed to the `Form` * @param inputFormData - The new or current data for the `Form` * @returns - The new state for the `Form` */ getStateFromProps(props: FormProps<T, S, F>, inputFormData?: T): FormState<T, S, F> { const state: FormState<T, S, F> = this.state || {}; const schema = 'schema' in props ? props.schema : this.props.schema; const uiSchema: UiSchema<T, S, F> = ('uiSchema' in props ? props.uiSchema! : this.props.uiSchema!) || {}; const edit = typeof inputFormData !== 'undefined'; const liveValidate = 'liveValidate' in props ? props.liveValidate : this.props.liveValidate; const mustValidate = edit && !props.noValidate && liveValidate; const rootSchema = schema; const experimental_defaultFormStateBehavior = 'experimental_defaultFormStateBehavior' in props ? props.experimental_defaultFormStateBehavior : this.props.experimental_defaultFormStateBehavior; let schemaUtils: SchemaUtilsType<T, S, F> = state.schemaUtils; if ( !schemaUtils || schemaUtils.doesSchemaUtilsDiffer(props.validator, rootSchema, experimental_defaultFormStateBehavior) ) { schemaUtils = createSchemaUtils<T, S, F>(props.validator, rootSchema, experimental_defaultFormStateBehavior); } const formData: T = schemaUtils.getDefaultFormState(schema, inputFormData) as T; const retrievedSchema = schemaUtils.retrieveSchema(schema, formData); const getCurrentErrors = (): ValidationData<T> => { if (props.noValidate) { return { errors: [], errorSchema: {} }; } else if (!props.liveValidate) { return { errors: state.schemaValidationErrors || [], errorSchema: state.schemaValidationErrorSchema || {}, }; } return { errors: state.errors || [], errorSchema: state.errorSchema || {}, }; }; let errors: RJSFValidationError[]; let errorSchema: ErrorSchema<T> | undefined; let schemaValidationErrors: RJSFValidationError[] = state.schemaValidationErrors; let schemaValidationErrorSchema: ErrorSchema<T> = state.schemaValidationErrorSchema; if (mustValidate) { const schemaValidation = this.validate(formData, schema, schemaUtils); errors = schemaValidation.errors; errorSchema = schemaValidation.errorSchema; schemaValidationErrors = errors; schemaValidationErrorSchema = errorSchema; } else { const currentErrors = getCurrentErrors(); errors = currentErrors.errors; errorSchema = currentErrors.errorSchema; } if (props.extraErrors) { const merged = validationDataMerge({ errorSchema, errors }, props.extraErrors); errorSchema = merged.errorSchema; errors = merged.errors; } const idSchema = schemaUtils.toIdSchema( retrievedSchema, uiSchema['ui:rootFieldId'], formData, props.idPrefix, props.idSeparator ); const nextState: FormState<T, S, F> = { schemaUtils, schema, uiSchema, idSchema, formData, edit, errors, errorSchema, schemaValidationErrors, schemaValidationErrorSchema, }; return nextState; } /** React lifecycle method that is used to determine whether component should be updated. * * @param nextProps - The next version of the props * @param nextState - The next version of the state * @returns - True if the component should be updated, false otherwise */ shouldComponentUpdate(nextProps: FormProps<T, S, F>, nextState: FormState<T, S, F>): boolean { return shouldRender(this, nextProps, nextState); } /** Validates the `formData` against the `schema` using the `altSchemaUtils` (if provided otherwise it uses the * `schemaUtils` in the state), returning the results. * * @param formData - The new form data to validate * @param schema - The schema used to validate against * @param altSchemaUtils - The alternate schemaUtils to use for validation */ validate( formData: T | undefined, schema = this.props.schema, altSchemaUtils?: SchemaUtilsType<T, S, F> ): ValidationData<T> { const schemaUtils = altSchemaUtils ? altSchemaUtils : this.state.schemaUtils; const { customValidate, transformErrors, uiSchema } = this.props; const resolvedSchema = schemaUtils.retrieveSchema(schema, formData); return schemaUtils .getValidator() .validateFormData(formData, resolvedSchema, customValidate, transformErrors, uiSchema); } /** Renders any errors contained in the `state` in using the `ErrorList`, if not disabled by `showErrorList`. */ renderErrors(registry: Registry<T, S, F>) { const { errors, errorSchema, schema, uiSchema } = this.state; const { formContext } = this.props; const options = getUiOptions<T, S, F>(uiSchema); const ErrorListTemplate = getTemplate<'ErrorListTemplate', T, S, F>('ErrorListTemplate', registry, options); if (errors && errors.length) { return ( <ErrorListTemplate errors={errors} errorSchema={errorSchema || {}} schema={schema} uiSchema={uiSchema} formContext={formContext} registry={registry} /> ); } return null; } /** Returns the `formData` with only the elements specified in the `fields` list * * @param formData - The data for the `Form` * @param fields - The fields to keep while filtering */ getUsedFormData = (formData: T | undefined, fields: string[][]): T | undefined => { // For the case of a single input form if (fields.length === 0 && typeof formData !== 'object') { return formData; } // _pick has incorrect type definition, it works with string[][], because lodash/hasIn supports it const data: GenericObjectType = _pick(formData, fields as unknown as string[]); if (Array.isArray(formData)) { return Object.keys(data).map((key: string) => data[key]) as unknown as T; } return data as T; }; /** Returns the list of field names from inspecting the `pathSchema` as well as using the `formData` * * @param pathSchema - The `PathSchema` object for the form * @param [formData] - The form data to use while checking for empty objects/arrays */ getFieldNames = (pathSchema: PathSchema<T>, formData?: T): string[][] => { const getAllPaths = (_obj: GenericObjectType, acc: string[][] = [], paths: string[][] = [[]]) => { Object.keys(_obj).forEach((key: string) => { if (typeof _obj[key] === 'object') { const newPaths = paths.map((path) => [...path, key]); // If an object is marked with additionalProperties, all its keys are valid if (_obj[key][RJSF_ADDITONAL_PROPERTIES_FLAG] && _obj[key][NAME_KEY] !== '') { acc.push(_obj[key][NAME_KEY]); } else { getAllPaths(_obj[key], acc, newPaths); } } else if (key === NAME_KEY && _obj[key] !== '') { paths.forEach((path) => { const formValue = _get(formData, path); // adds path to fieldNames if it points to a value // or an empty object/array if (typeof formValue !== 'object' || _isEmpty(formValue)) { acc.push(path); } }); } }); return acc; }; return getAllPaths(pathSchema); }; /** Function to handle changes made to a field in the `Form`. This handler receives an entirely new copy of the * `formData` along with a new `ErrorSchema`. It will first update the `formData` with any missing default fields and * then, if `omitExtraData` and `liveOmit` are turned on, the `formData` will be filterer to remove any extra data not * in a form field. Then, the resulting formData will be validated if required. The state will be updated with the new * updated (potentially filtered) `formData`, any errors that resulted from validation. Finally the `onChange` * callback will be called if specified with the updated state. * * @param formData - The new form data from a change to a field * @param newErrorSchema - The new `ErrorSchema` based on the field change * @param id - The id of the field that caused the change */ onChange = (formData: T | undefined, newErrorSchema?: ErrorSchema<T>, id?: string) => { const { extraErrors, omitExtraData, liveOmit, noValidate, liveValidate, onChange } = this.props; const { schemaUtils, schema } = this.state; if (isObject(formData) || Array.isArray(formData)) { const newState = this.getStateFromProps(this.props, formData); formData = newState.formData; } const mustValidate = !noValidate && liveValidate; let state: Partial<FormState<T, S, F>> = { formData, schema }; let newFormData = formData; if (omitExtraData === true && liveOmit === true) { const retrievedSchema = schemaUtils.retrieveSchema(schema, formData); const pathSchema = schemaUtils.toPathSchema(retrievedSchema, '', formData); const fieldNames = this.getFieldNames(pathSchema, formData); newFormData = this.getUsedFormData(formData, fieldNames); state = { formData: newFormData, }; } if (mustValidate) { const schemaValidation = this.validate(newFormData); let errors = schemaValidation.errors; let errorSchema = schemaValidation.errorSchema; const schemaValidationErrors = errors; const schemaValidationErrorSchema = errorSchema; if (extraErrors) { const merged = validationDataMerge(schemaValidation, extraErrors); errorSchema = merged.errorSchema; errors = merged.errors; } state = { formData: newFormData, errors, errorSchema, schemaValidationErrors, schemaValidationErrorSchema, }; } else if (!noValidate && newErrorSchema) { const errorSchema = extraErrors ? (mergeObjects(newErrorSchema, extraErrors, 'preventDuplicates') as ErrorSchema<T>) : newErrorSchema; state = { formData: newFormData, errorSchema: errorSchema, errors: toErrorList(errorSchema), }; } this.setState(state as FormState<T, S, F>, () => onChange && onChange({ ...this.state, ...state }, id)); }; /** * Callback function to handle reset form data. * - Reset all fields with default values. * - Reset validations and errors * */ reset = () => { const { onChange } = this.props; const newState = this.getStateFromProps(this.props, undefined); const newFormData = newState.formData; const state = { formData: newFormData, errorSchema: {}, errors: [] as unknown, schemaValidationErrors: [] as unknown, schemaValidationErrorSchema: {}, } as FormState<T, S, F>; this.setState(state, () => onChange && onChange({ ...this.state, ...state })); }; /** Callback function to handle when a field on the form is blurred. Calls the `onBlur` callback for the `Form` if it * was provided. * * @param id - The unique `id` of the field that was blurred * @param data - The data associated with the field that was blurred */ onBlur = (id: string, data: any) => { const { onBlur } = this.props; if (onBlur) { onBlur(id, data); } }; /** Callback function to handle when a field on the form is focused. Calls the `onFocus` callback for the `Form` if it * was provided. * * @param id - The unique `id` of the field that was focused * @param data - The data associated with the field that was focused */ onFocus = (id: string, data: any) => { const { onFocus } = this.props; if (onFocus) { onFocus(id, data); } }; /** Callback function to handle when the form is submitted. First, it prevents the default event behavior. Nothing * happens if the target and currentTarget of the event are not the same. It will omit any extra data in the * `formData` in the state if `omitExtraData` is true. It will validate the resulting `formData`, reporting errors * via the `onError()` callback unless validation is disabled. Finally, it will add in any `extraErrors` and then call * back the `onSubmit` callback if it was provided. * * @param event - The submit HTML form event */ onSubmit = (event: FormEvent<any>) => { event.preventDefault(); if (event.target !== event.currentTarget) { return; } event.persist(); const { omitExtraData, extraErrors, noValidate, onSubmit } = this.props; let { formData: newFormData } = this.state; const { schema, schemaUtils } = this.state; if (omitExtraData === true) { const retrievedSchema = schemaUtils.retrieveSchema(schema, newFormData); const pathSchema = schemaUtils.toPathSchema(retrievedSchema, '', newFormData); const fieldNames = this.getFieldNames(pathSchema, newFormData); newFormData = this.getUsedFormData(newFormData, fieldNames); } if (noValidate || this.validateForm()) { // There are no errors generated through schema validation. // Check for user provided errors and update state accordingly. const errorSchema = extraErrors || {}; const errors = extraErrors ? toErrorList(extraErrors) : []; this.setState( { formData: newFormData, errors, errorSchema, schemaValidationErrors: [], schemaValidationErrorSchema: {}, }, () => { if (onSubmit) { onSubmit({ ...this.state, formData: newFormData, status: 'submitted' }, event); } } ); } }; /** Returns the registry for the form */ getRegistry(): Registry<T, S, F> { const { translateString: customTranslateString, uiSchema = {} } = this.props; const { schemaUtils } = this.state; const { fields, templates, widgets, formContext, translateString } = getDefaultRegistry<T, S, F>(); return { fields: { ...fields, ...this.props.fields }, templates: { ...templates, ...this.props.templates, ButtonTemplates: { ...templates.ButtonTemplates, ...this.props.templates?.ButtonTemplates, }, }, widgets: { ...widgets, ...this.props.widgets }, rootSchema: this.props.schema, formContext: this.props.formContext || formContext, schemaUtils, translateString: customTranslateString || translateString, globalUiOptions: uiSchema[UI_GLOBAL_OPTIONS_KEY], }; } /** Provides a function that can be used to programmatically submit the `Form` */ submit() { if (this.formElement.current) { this.formElement.current.dispatchEvent( new CustomEvent('submit', { cancelable: true, }) ); this.formElement.current.requestSubmit(); } } /** Attempts to focus on the field associated with the `error`. Uses the `property` field to compute path of the error * field, then, using the `idPrefix` and `idSeparator` converts that path into an id. Then the input element with that * id is attempted to be found using the `formElement` ref. If it is located, then it is focused. * * @param error - The error on which to focus */ focusOnError(error: RJSFValidationError) { const { idPrefix = 'root', idSeparator = '_' } = this.props; const { property } = error; const path = _toPath(property); if (path[0] === '') { // Most of the time the `.foo` property results in the first element being empty, so replace it with the idPrefix path[0] = idPrefix; } else { // Otherwise insert the idPrefix into the first location using unshift path.unshift(idPrefix); } const elementId = path.join(idSeparator); let field = this.formElement.current.elements[elementId]; if (!field) { // if not an exact match, try finding an input starting with the element id (like radio buttons or checkboxes) field = this.formElement.current.querySelector(`input[id^=${elementId}`); } if (field && field.length) { // If we got a list with length > 0 field = field[0]; } if (field) { field.focus(); } } /** Programmatically validate the form. If `onError` is provided, then it will be called with the list of errors the * same way as would happen on form submission. * * @returns - True if the form is valid, false otherwise. */ validateForm() { const { extraErrors, extraErrorsBlockSubmit, focusOnFirstError, onError } = this.props; const { formData } = this.state; const schemaValidation = this.validate(formData); let errors = schemaValidation.errors; let errorSchema = schemaValidation.errorSchema; const schemaValidationErrors = errors; const schemaValidationErrorSchema = errorSchema; if (errors.length > 0 || (extraErrors && extraErrorsBlockSubmit)) { if (extraErrors) { const merged = validationDataMerge(schemaValidation, extraErrors); errorSchema = merged.errorSchema; errors = merged.errors; } if (focusOnFirstError) { if (typeof focusOnFirstError === 'function') { focusOnFirstError(errors[0]); } else { this.focusOnError(errors[0]); } } this.setState( { errors, errorSchema, schemaValidationErrors, schemaValidationErrorSchema, }, () => { if (onError) { onError(errors); } else { console.error('Form validation failed', errors); } } ); return false; } return true; } /** Renders the `Form` fields inside the <form> | `tagName` or `_internalFormWrapper`, rendering any errors if * needed along with the submit button or any children of the form. */ render() { const { children, id, idPrefix, idSeparator, className = '', tagName, name, method, target, action, autoComplete, enctype, acceptcharset, noHtml5Validate = false, disabled = false, readonly = false, formContext, showErrorList = 'top', _internalFormWrapper, } = this.props; const { schema, uiSchema, formData, errorSchema, idSchema } = this.state; const registry = this.getRegistry(); const { SchemaField: _SchemaField } = registry.fields; const { SubmitButton } = registry.templates.ButtonTemplates; // The `semantic-ui` and `material-ui` themes have `_internalFormWrapper`s that take an `as` prop that is the // PropTypes.elementType to use for the inner tag, so we'll need to pass `tagName` along if it is provided. // NOTE, the `as` prop is native to `semantic-ui` and is emulated in the `material-ui` theme const as = _internalFormWrapper ? tagName : undefined; const FormTag = _internalFormWrapper || tagName || 'form'; let { [SUBMIT_BTN_OPTIONS_KEY]: submitOptions = {} } = getUiOptions<T, S, F>(uiSchema); if (disabled) { submitOptions = { ...submitOptions, props: { ...submitOptions.props, disabled: true } }; } const submitUiSchema = { [UI_OPTIONS_KEY]: { [SUBMIT_BTN_OPTIONS_KEY]: submitOptions } }; return ( <FormTag className={className ? className : 'rjsf'} id={id} name={name} method={method} target={target} action={action} autoComplete={autoComplete} encType={enctype} acceptCharset={acceptcharset} noValidate={noHtml5Validate} onSubmit={this.onSubmit} as={as} ref={this.formElement} > {showErrorList === 'top' && this.renderErrors(registry)} <_SchemaField name='' schema={schema} uiSchema={uiSchema} errorSchema={errorSchema} idSchema={idSchema} idPrefix={idPrefix} idSeparator={idSeparator} formContext={formContext} formData={formData} onChange={this.onChange} onBlur={this.onBlur} onFocus={this.onFocus} registry={registry} disabled={disabled} readonly={readonly} /> {children ? children : <SubmitButton uiSchema={submitUiSchema} registry={registry} />} {showErrorList === 'bottom' && this.renderErrors(registry)} </FormTag> ); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/fields/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024740�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/fields/ArrayField.tsx���������������������0000664�0000000�0000000�00000070746�14467713645�0027540�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Component, MouseEvent } from 'react'; import { getTemplate, getWidget, getUiOptions, isFixedItems, allowAdditionalItems, isCustomWidget, optionsList, ArrayFieldTemplateProps, ErrorSchema, FieldProps, FormContextType, IdSchema, RJSFSchema, StrictRJSFSchema, TranslatableString, UiSchema, ITEMS_KEY, } from '@rjsf/utils'; import cloneDeep from 'lodash/cloneDeep'; import get from 'lodash/get'; import isObject from 'lodash/isObject'; import set from 'lodash/set'; import { nanoid } from 'nanoid'; /** Type used to represent the keyed form data used in the state */ type KeyedFormDataType<T> = { key: string; item: T }; /** Type used for the state of the `ArrayField` component */ type ArrayFieldState<T> = { /** The keyed form data elements */ keyedFormData: KeyedFormDataType<T>[]; /** Flag indicating whether any of the keyed form data has been updated */ updatedKeyedFormData: boolean; }; /** Used to generate a unique ID for an element in a row */ function generateRowId() { return nanoid(); } /** Converts the `formData` into `KeyedFormDataType` data, using the `generateRowId()` function to create the key * * @param formData - The data for the form * @returns - The `formData` converted into a `KeyedFormDataType` element */ function generateKeyedFormData<T>(formData: T[]): KeyedFormDataType<T>[] { return !Array.isArray(formData) ? [] : formData.map((item) => { return { key: generateRowId(), item, }; }); } /** Converts `KeyedFormDataType` data into the inner `formData` * * @param keyedFormData - The `KeyedFormDataType` to be converted * @returns - The inner `formData` item(s) in the `keyedFormData` */ function keyedToPlainFormData<T>(keyedFormData: KeyedFormDataType<T> | KeyedFormDataType<T>[]): T[] { if (Array.isArray(keyedFormData)) { return keyedFormData.map((keyedItem) => keyedItem.item); } return []; } /** The `ArrayField` component is used to render a field in the schema that is of type `array`. It supports both normal * and fixed array, allowing user to add and remove elements from the array data. */ class ArrayField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> extends Component< FieldProps<T[], S, F>, ArrayFieldState<T> > { /** Constructs an `ArrayField` from the `props`, generating the initial keyed data from the `formData` * * @param props - The `FieldProps` for this template */ constructor(props: FieldProps<T[], S, F>) { super(props); const { formData = [] } = props; const keyedFormData = generateKeyedFormData<T>(formData); this.state = { keyedFormData, updatedKeyedFormData: false, }; } /** React lifecycle method that is called when the props are about to change allowing the state to be updated. It * regenerates the keyed form data and returns it * * @param nextProps - The next set of props data * @param prevState - The previous set of state data */ static getDerivedStateFromProps<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( nextProps: Readonly<FieldProps<T[], S, F>>, prevState: Readonly<ArrayFieldState<T>> ) { // Don't call getDerivedStateFromProps if keyed formdata was just updated. if (prevState.updatedKeyedFormData) { return { updatedKeyedFormData: false, }; } const nextFormData = Array.isArray(nextProps.formData) ? nextProps.formData : []; const previousKeyedFormData = prevState.keyedFormData || []; const newKeyedFormData = nextFormData.length === previousKeyedFormData.length ? previousKeyedFormData.map((previousKeyedFormDatum, index) => { return { key: previousKeyedFormDatum.key, item: nextFormData[index], }; }) : generateKeyedFormData<T>(nextFormData); return { keyedFormData: newKeyedFormData, }; } /** Returns the appropriate title for an item by getting first the title from the schema.items, then falling back to * the description from the schema.items, and finally the string "Item" */ get itemTitle() { const { schema, registry } = this.props; const { translateString } = registry; return get( schema, [ITEMS_KEY, 'title'], get(schema, [ITEMS_KEY, 'description'], translateString(TranslatableString.ArrayItemTitle)) ); } /** Determines whether the item described in the schema is always required, which is determined by whether any item * may be null. * * @param itemSchema - The schema for the item * @return - True if the item schema type does not contain the "null" type */ isItemRequired(itemSchema: S) { if (Array.isArray(itemSchema.type)) { // While we don't yet support composite/nullable jsonschema types, it's // future-proof to check for requirement against these. return !itemSchema.type.includes('null'); } // All non-null array item types are inherently required by design return itemSchema.type !== 'null'; } /** Determines whether more items can be added to the array. If the uiSchema indicates the array doesn't allow adding * then false is returned. Otherwise, if the schema indicates that there are a maximum number of items and the * `formData` matches that value, then false is returned, otherwise true is returned. * * @param formItems - The list of items in the form * @returns - True if the item is addable otherwise false */ canAddItem(formItems: any[]) { const { schema, uiSchema, registry } = this.props; let { addable } = getUiOptions<T[], S, F>(uiSchema, registry.globalUiOptions); if (addable !== false) { // if ui:options.addable was not explicitly set to false, we can add // another item if we have not exceeded maxItems yet if (schema.maxItems !== undefined) { addable = formItems.length < schema.maxItems; } else { addable = true; } } return addable; } /** Returns the default form information for an item based on the schema for that item. Deals with the possibility * that the schema is fixed and allows additional items. */ _getNewFormDataRow = (): T => { const { schema, registry } = this.props; const { schemaUtils } = registry; let itemSchema = schema.items as S; if (isFixedItems(schema) && allowAdditionalItems(schema)) { itemSchema = schema.additionalItems as S; } // Cast this as a T to work around schema utils being for T[] caused by the FieldProps<T[], S, F> call on the class return schemaUtils.getDefaultFormState(itemSchema) as unknown as T; }; /** Callback handler for when the user clicks on the add or add at index buttons. Creates a new row of keyed form data * either at the end of the list (when index is not specified) or inserted at the `index` when it is, adding it into * the state, and then returning `onChange()` with the plain form data converted from the keyed data * * @param event - The event for the click * @param [index] - The optional index at which to add the new data */ _handleAddClick(event: MouseEvent, index?: number) { if (event) { event.preventDefault(); } const { onChange } = this.props; const { keyedFormData } = this.state; const newKeyedFormDataRow: KeyedFormDataType<T> = { key: generateRowId(), item: this._getNewFormDataRow(), }; const newKeyedFormData = [...keyedFormData]; if (index !== undefined) { newKeyedFormData.splice(index, 0, newKeyedFormDataRow); } else { newKeyedFormData.push(newKeyedFormDataRow); } this.setState( { keyedFormData: newKeyedFormData, updatedKeyedFormData: true, }, () => onChange(keyedToPlainFormData(newKeyedFormData)) ); } /** Callback handler for when the user clicks on the add button. Creates a new row of keyed form data at the end of * the list, adding it into the state, and then returning `onChange()` with the plain form data converted from the * keyed data * * @param event - The event for the click */ onAddClick = (event: MouseEvent) => { this._handleAddClick(event); }; /** Callback handler for when the user clicks on the add button on an existing array element. Creates a new row of * keyed form data inserted at the `index`, adding it into the state, and then returning `onChange()` with the plain * form data converted from the keyed data * * @param index - The index at which the add button is clicked */ onAddIndexClick = (index: number) => { return (event: MouseEvent) => { this._handleAddClick(event, index); }; }; /** Callback handler for when the user clicks on the copy button on an existing array element. Clones the row of * keyed form data at the `index` into the next position in the state, and then returning `onChange()` with the plain * form data converted from the keyed data * * @param index - The index at which the copy button is clicked */ onCopyIndexClick = (index: number) => { return (event: MouseEvent) => { if (event) { event.preventDefault(); } const { onChange } = this.props; const { keyedFormData } = this.state; const newKeyedFormDataRow: KeyedFormDataType<T> = { key: generateRowId(), item: cloneDeep(keyedFormData[index].item), }; const newKeyedFormData = [...keyedFormData]; if (index !== undefined) { newKeyedFormData.splice(index + 1, 0, newKeyedFormDataRow); } else { newKeyedFormData.push(newKeyedFormDataRow); } this.setState( { keyedFormData: newKeyedFormData, updatedKeyedFormData: true, }, () => onChange(keyedToPlainFormData(newKeyedFormData)) ); }; }; /** Callback handler for when the user clicks on the remove button on an existing array element. Removes the row of * keyed form data at the `index` in the state, and then returning `onChange()` with the plain form data converted * from the keyed data * * @param index - The index at which the remove button is clicked */ onDropIndexClick = (index: number) => { return (event: MouseEvent) => { if (event) { event.preventDefault(); } const { onChange, errorSchema } = this.props; const { keyedFormData } = this.state; // refs #195: revalidate to ensure properly reindexing errors let newErrorSchema: ErrorSchema<T>; if (errorSchema) { newErrorSchema = {}; for (const idx in errorSchema) { const i = parseInt(idx); if (i < index) { set(newErrorSchema, [i], errorSchema[idx]); } else if (i > index) { set(newErrorSchema, [i - 1], errorSchema[idx]); } } } const newKeyedFormData = keyedFormData.filter((_, i) => i !== index); this.setState( { keyedFormData: newKeyedFormData, updatedKeyedFormData: true, }, () => onChange(keyedToPlainFormData(newKeyedFormData), newErrorSchema as ErrorSchema<T[]>) ); }; }; /** Callback handler for when the user clicks on one of the move item buttons on an existing array element. Moves the * row of keyed form data at the `index` to the `newIndex` in the state, and then returning `onChange()` with the * plain form data converted from the keyed data * * @param index - The index of the item to move * @param newIndex - The index to where the item is to be moved */ onReorderClick = (index: number, newIndex: number) => { return (event: MouseEvent<HTMLButtonElement>) => { if (event) { event.preventDefault(); event.currentTarget.blur(); } const { onChange, errorSchema } = this.props; let newErrorSchema: ErrorSchema<T>; if (errorSchema) { newErrorSchema = {}; for (const idx in errorSchema) { const i = parseInt(idx); if (i == index) { set(newErrorSchema, [newIndex], errorSchema[index]); } else if (i == newIndex) { set(newErrorSchema, [index], errorSchema[newIndex]); } else { set(newErrorSchema, [idx], errorSchema[i]); } } } const { keyedFormData } = this.state; function reOrderArray() { // Copy item const _newKeyedFormData = keyedFormData.slice(); // Moves item from index to newIndex _newKeyedFormData.splice(index, 1); _newKeyedFormData.splice(newIndex, 0, keyedFormData[index]); return _newKeyedFormData; } const newKeyedFormData = reOrderArray(); this.setState( { keyedFormData: newKeyedFormData, }, () => onChange(keyedToPlainFormData(newKeyedFormData), newErrorSchema as ErrorSchema<T[]>) ); }; }; /** Callback handler used to deal with changing the value of the data in the array at the `index`. Calls the * `onChange` callback with the updated form data * * @param index - The index of the item being changed */ onChangeForIndex = (index: number) => { return (value: any, newErrorSchema?: ErrorSchema<T>, id?: string) => { const { formData, onChange, errorSchema } = this.props; const arrayData = Array.isArray(formData) ? formData : []; const newFormData = arrayData.map((item: T, i: number) => { // We need to treat undefined items as nulls to have validation. // See https://github.com/tdegrunt/jsonschema/issues/206 const jsonValue = typeof value === 'undefined' ? null : value; return index === i ? jsonValue : item; }); onChange( newFormData, errorSchema && errorSchema && { ...errorSchema, [index]: newErrorSchema, }, id ); }; }; /** Callback handler used to change the value for a checkbox */ onSelectChange = (value: any) => { const { onChange, idSchema } = this.props; onChange(value, undefined, idSchema && idSchema.$id); }; /** Renders the `ArrayField` depending on the specific needs of the schema and uischema elements */ render() { const { schema, uiSchema, idSchema, registry } = this.props; const { schemaUtils, translateString } = registry; if (!(ITEMS_KEY in schema)) { const uiOptions = getUiOptions<T[], S, F>(uiSchema); const UnsupportedFieldTemplate = getTemplate<'UnsupportedFieldTemplate', T[], S, F>( 'UnsupportedFieldTemplate', registry, uiOptions ); return ( <UnsupportedFieldTemplate schema={schema} idSchema={idSchema} reason={translateString(TranslatableString.MissingItems)} registry={registry} /> ); } if (schemaUtils.isMultiSelect(schema)) { // If array has enum or uniqueItems set to true, call renderMultiSelect() to render the default multiselect widget or a custom widget, if specified. return this.renderMultiSelect(); } if (isCustomWidget<T[], S, F>(uiSchema)) { return this.renderCustomWidget(); } if (isFixedItems(schema)) { return this.renderFixedArray(); } if (schemaUtils.isFilesArray(schema, uiSchema)) { return this.renderFiles(); } return this.renderNormalArray(); } /** Renders a normal array without any limitations of length */ renderNormalArray() { const { schema, uiSchema = {}, errorSchema, idSchema, name, disabled = false, readonly = false, autofocus = false, required = false, registry, onBlur, onFocus, idPrefix, idSeparator = '_', rawErrors, } = this.props; const { keyedFormData } = this.state; const title = schema.title === undefined ? name : schema.title; const { schemaUtils, formContext } = registry; const uiOptions = getUiOptions<T[], S, F>(uiSchema); const _schemaItems: S = isObject(schema.items) ? (schema.items as S) : ({} as S); const itemsSchema: S = schemaUtils.retrieveSchema(_schemaItems); const formData = keyedToPlainFormData(this.state.keyedFormData); const canAdd = this.canAddItem(formData); const arrayProps: ArrayFieldTemplateProps<T[], S, F> = { canAdd, items: keyedFormData.map((keyedItem, index) => { const { key, item } = keyedItem; // While we are actually dealing with a single item of type T, the types require a T[], so cast const itemCast = item as unknown as T[]; const itemSchema = schemaUtils.retrieveSchema(_schemaItems, itemCast); const itemErrorSchema = errorSchema ? (errorSchema[index] as ErrorSchema<T[]>) : undefined; const itemIdPrefix = idSchema.$id + idSeparator + index; const itemIdSchema = schemaUtils.toIdSchema(itemSchema, itemIdPrefix, itemCast, idPrefix, idSeparator); return this.renderArrayFieldItem({ key, index, name: name && `${name}-${index}`, canAdd, canMoveUp: index > 0, canMoveDown: index < formData.length - 1, itemSchema, itemIdSchema, itemErrorSchema, itemData: itemCast, itemUiSchema: uiSchema.items, autofocus: autofocus && index === 0, onBlur, onFocus, rawErrors, totalItems: keyedFormData.length, }); }), className: `field field-array field-array-of-${itemsSchema.type}`, disabled, idSchema, uiSchema, onAddClick: this.onAddClick, readonly, required, schema, title, formContext, formData, rawErrors, registry, }; const Template = getTemplate<'ArrayFieldTemplate', T[], S, F>('ArrayFieldTemplate', registry, uiOptions); return <Template {...arrayProps} />; } /** Renders an array using the custom widget provided by the user in the `uiSchema` */ renderCustomWidget() { const { schema, idSchema, uiSchema, disabled = false, readonly = false, autofocus = false, required = false, hideError, placeholder, onBlur, onFocus, formData: items = [], registry, rawErrors, name, } = this.props; const { widgets, formContext, globalUiOptions, schemaUtils } = registry; const { widget, title: uiTitle, ...options } = getUiOptions<T[], S, F>(uiSchema, globalUiOptions); const Widget = getWidget<T[], S, F>(schema, widget, widgets); const label = uiTitle ?? schema.title ?? name; const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions); return ( <Widget id={idSchema.$id} name={name} multiple onChange={this.onSelectChange} onBlur={onBlur} onFocus={onFocus} options={options} schema={schema} uiSchema={uiSchema} registry={registry} value={items} disabled={disabled} readonly={readonly} hideError={hideError} required={required} label={label} hideLabel={!displayLabel} placeholder={placeholder} formContext={formContext} autofocus={autofocus} rawErrors={rawErrors} /> ); } /** Renders an array as a set of checkboxes */ renderMultiSelect() { const { schema, idSchema, uiSchema, formData: items = [], disabled = false, readonly = false, autofocus = false, required = false, placeholder, onBlur, onFocus, registry, rawErrors, name, } = this.props; const { widgets, schemaUtils, formContext, globalUiOptions } = registry; const itemsSchema = schemaUtils.retrieveSchema(schema.items as S, items); const enumOptions = optionsList(itemsSchema); const { widget = 'select', title: uiTitle, ...options } = getUiOptions<T[], S, F>(uiSchema, globalUiOptions); const Widget = getWidget<T[], S, F>(schema, widget, widgets); const label = uiTitle ?? schema.title ?? name; const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions); return ( <Widget id={idSchema.$id} name={name} multiple onChange={this.onSelectChange} onBlur={onBlur} onFocus={onFocus} options={{ ...options, enumOptions }} schema={schema} uiSchema={uiSchema} registry={registry} value={items} disabled={disabled} readonly={readonly} required={required} label={label} hideLabel={!displayLabel} placeholder={placeholder} formContext={formContext} autofocus={autofocus} rawErrors={rawErrors} /> ); } /** Renders an array of files using the `FileWidget` */ renderFiles() { const { schema, uiSchema, idSchema, name, disabled = false, readonly = false, autofocus = false, required = false, onBlur, onFocus, registry, formData: items = [], rawErrors, } = this.props; const { widgets, formContext, globalUiOptions, schemaUtils } = registry; const { widget = 'files', title: uiTitle, ...options } = getUiOptions<T[], S, F>(uiSchema, globalUiOptions); const Widget = getWidget<T[], S, F>(schema, widget, widgets); const label = uiTitle ?? schema.title ?? name; const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions); return ( <Widget options={options} id={idSchema.$id} name={name} multiple onChange={this.onSelectChange} onBlur={onBlur} onFocus={onFocus} schema={schema} uiSchema={uiSchema} value={items} disabled={disabled} readonly={readonly} required={required} registry={registry} formContext={formContext} autofocus={autofocus} rawErrors={rawErrors} label={label} hideLabel={!displayLabel} /> ); } /** Renders an array that has a maximum limit of items */ renderFixedArray() { const { schema, uiSchema = {}, formData = [], errorSchema, idPrefix, idSeparator = '_', idSchema, name, disabled = false, readonly = false, autofocus = false, required = false, registry, onBlur, onFocus, rawErrors, } = this.props; const { keyedFormData } = this.state; let { formData: items = [] } = this.props; const title = schema.title || name; const uiOptions = getUiOptions<T[], S, F>(uiSchema); const { schemaUtils, formContext } = registry; const _schemaItems: S[] = isObject(schema.items) ? (schema.items as S[]) : ([] as S[]); const itemSchemas = _schemaItems.map((item: S, index: number) => schemaUtils.retrieveSchema(item, formData[index] as unknown as T[]) ); const additionalSchema = isObject(schema.additionalItems) ? schemaUtils.retrieveSchema(schema.additionalItems as S, formData) : null; if (!items || items.length < itemSchemas.length) { // to make sure at least all fixed items are generated items = items || []; items = items.concat(new Array(itemSchemas.length - items.length)); } // These are the props passed into the render function const canAdd = this.canAddItem(items) && !!additionalSchema; const arrayProps: ArrayFieldTemplateProps<T[], S, F> = { canAdd, className: 'field field-array field-array-fixed-items', disabled, idSchema, formData, items: keyedFormData.map((keyedItem, index) => { const { key, item } = keyedItem; // While we are actually dealing with a single item of type T, the types require a T[], so cast const itemCast = item as unknown as T[]; const additional = index >= itemSchemas.length; const itemSchema = additional && isObject(schema.additionalItems) ? schemaUtils.retrieveSchema(schema.additionalItems as S, itemCast) : itemSchemas[index]; const itemIdPrefix = idSchema.$id + idSeparator + index; const itemIdSchema = schemaUtils.toIdSchema(itemSchema, itemIdPrefix, itemCast, idPrefix, idSeparator); const itemUiSchema = additional ? uiSchema.additionalItems || {} : Array.isArray(uiSchema.items) ? uiSchema.items[index] : uiSchema.items || {}; const itemErrorSchema = errorSchema ? (errorSchema[index] as ErrorSchema<T[]>) : undefined; return this.renderArrayFieldItem({ key, index, name: name && `${name}-${index}`, canAdd, canRemove: additional, canMoveUp: index >= itemSchemas.length + 1, canMoveDown: additional && index < items.length - 1, itemSchema, itemData: itemCast, itemUiSchema, itemIdSchema, itemErrorSchema, autofocus: autofocus && index === 0, onBlur, onFocus, rawErrors, totalItems: keyedFormData.length, }); }), onAddClick: this.onAddClick, readonly, required, registry, schema, uiSchema, title, formContext, rawErrors, }; const Template = getTemplate<'ArrayFieldTemplate', T[], S, F>('ArrayFieldTemplate', registry, uiOptions); return <Template {...arrayProps} />; } /** Renders the individual array item using a `SchemaField` along with the additional properties required to be send * back to the `ArrayFieldItemTemplate`. * * @param props - The props for the individual array item to be rendered */ renderArrayFieldItem(props: { key: string; index: number; name: string; canAdd: boolean; canRemove?: boolean; canMoveUp: boolean; canMoveDown: boolean; itemSchema: S; itemData: T[]; itemUiSchema: UiSchema<T[], S, F>; itemIdSchema: IdSchema<T[]>; itemErrorSchema?: ErrorSchema<T[]>; autofocus?: boolean; onBlur: FieldProps<T[], S, F>['onBlur']; onFocus: FieldProps<T[], S, F>['onFocus']; rawErrors?: string[]; totalItems: number; }) { const { key, index, name, canAdd, canRemove = true, canMoveUp, canMoveDown, itemSchema, itemData, itemUiSchema, itemIdSchema, itemErrorSchema, autofocus, onBlur, onFocus, rawErrors, totalItems, } = props; const { disabled, hideError, idPrefix, idSeparator, readonly, uiSchema, registry, formContext } = this.props; const { fields: { ArraySchemaField, SchemaField }, globalUiOptions, } = registry; const ItemSchemaField = ArraySchemaField || SchemaField; const { orderable = true, removable = true, copyable = false } = getUiOptions<T[], S, F>(uiSchema, globalUiOptions); const has: { [key: string]: boolean } = { moveUp: orderable && canMoveUp, moveDown: orderable && canMoveDown, copy: copyable && canAdd, remove: removable && canRemove, toolbar: false, }; has.toolbar = Object.keys(has).some((key: keyof typeof has) => has[key]); return { children: ( <ItemSchemaField name={name} index={index} schema={itemSchema} uiSchema={itemUiSchema} formData={itemData} formContext={formContext} errorSchema={itemErrorSchema} idPrefix={idPrefix} idSeparator={idSeparator} idSchema={itemIdSchema} required={this.isItemRequired(itemSchema)} onChange={this.onChangeForIndex(index)} onBlur={onBlur} onFocus={onFocus} registry={registry} disabled={disabled} readonly={readonly} hideError={hideError} autofocus={autofocus} rawErrors={rawErrors} /> ), className: 'array-item', disabled, canAdd, hasCopy: has.copy, hasToolbar: has.toolbar, hasMoveUp: has.moveUp, hasMoveDown: has.moveDown, hasRemove: has.remove, index, totalItems, key, onAddIndexClick: this.onAddIndexClick, onCopyIndexClick: this.onCopyIndexClick, onDropIndexClick: this.onDropIndexClick, onReorderClick: this.onReorderClick, readonly, registry, schema: itemSchema, uiSchema: itemUiSchema, }; } } /** `ArrayField` is `React.ComponentType<FieldProps<T[], S, F>>` (necessarily) but the `registry` requires things to be a * `Field` which is defined as `React.ComponentType<FieldProps<T, S, F>>`, so cast it to make `registry` happy. */ export default ArrayField; ��������������������������react-jsonschema-form-5.12.1/packages/core/src/components/fields/BooleanField.tsx�������������������0000664�0000000�0000000�00000006303�14467713645�0030025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getWidget, getUiOptions, optionsList, FieldProps, FormContextType, EnumOptionsType, RJSFSchema, StrictRJSFSchema, TranslatableString, } from '@rjsf/utils'; import isObject from 'lodash/isObject'; /** The `BooleanField` component is used to render a field in the schema is boolean. It constructs `enumOptions` for the * two boolean values based on the various alternatives in the schema. * * @param props - The `FieldProps` for this template */ function BooleanField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: FieldProps<T, S, F> ) { const { schema, name, uiSchema, idSchema, formData, registry, required, disabled, readonly, autofocus, onChange, onFocus, onBlur, rawErrors, } = props; const { title } = schema; const { widgets, formContext, translateString, globalUiOptions } = registry; const { widget = 'checkbox', title: uiTitle, // Unlike the other fields, don't use `getDisplayLabel()` since it always returns false for the boolean type label: displayLabel = true, ...options } = getUiOptions<T, S, F>(uiSchema, globalUiOptions); const Widget = getWidget(schema, widget, widgets); const yes = translateString(TranslatableString.YesLabel); const no = translateString(TranslatableString.NoLabel); let enumOptions: EnumOptionsType<S>[] | undefined; const label = uiTitle ?? title ?? name; if (Array.isArray(schema.oneOf)) { enumOptions = optionsList<S>({ oneOf: schema.oneOf .map((option) => { if (isObject(option)) { return { ...option, title: option.title || (option.const === true ? yes : no), }; } return undefined; }) .filter((o: any) => o) as S[], // cast away the error that typescript can't grok is fixed } as unknown as S); } else { // We deprecated enumNames in v5. It's intentionally omitted from RSJFSchema type, so we need to cast here. const schemaWithEnumNames = schema as S & { enumNames?: string[] }; const enums = schema.enum ?? [true, false]; if (!schemaWithEnumNames.enumNames && enums.length === 2 && enums.every((v: any) => typeof v === 'boolean')) { enumOptions = [ { value: enums[0], label: enums[0] ? yes : no, }, { value: enums[1], label: enums[1] ? yes : no, }, ]; } else { enumOptions = optionsList<S>({ enum: enums, // NOTE: enumNames is deprecated, but still supported for now. enumNames: schemaWithEnumNames.enumNames, } as unknown as S); } } return ( <Widget options={{ ...options, enumOptions }} schema={schema} uiSchema={uiSchema} id={idSchema.$id} name={name} onChange={onChange} onFocus={onFocus} onBlur={onBlur} label={label} hideLabel={!displayLabel} value={formData} required={required} disabled={disabled} readonly={readonly} registry={registry} formContext={formContext} autofocus={autofocus} rawErrors={rawErrors} /> ); } export default BooleanField; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/fields/MultiSchemaField.tsx���������������0000664�0000000�0000000�00000020322�14467713645�0030656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Component } from 'react'; import get from 'lodash/get'; import isEmpty from 'lodash/isEmpty'; import omit from 'lodash/omit'; import unset from 'lodash/unset'; import { ADDITIONAL_PROPERTY_FLAG, deepEquals, ERRORS_KEY, FieldProps, FormContextType, getDiscriminatorFieldFromSchema, getUiOptions, getWidget, mergeSchemas, RJSFSchema, StrictRJSFSchema, TranslatableString, } from '@rjsf/utils'; /** Type used for the state of the `AnyOfField` component */ type AnyOfFieldState<S extends StrictRJSFSchema = RJSFSchema> = { /** The currently selected option */ selectedOption: number; /** The option schemas after retrieving all $refs */ retrievedOptions: S[]; }; /** The `AnyOfField` component is used to render a field in the schema that is an `anyOf`, `allOf` or `oneOf`. It tracks * the currently selected option and cleans up any irrelevant data in `formData`. * * @param props - The `FieldProps` for this template */ class AnyOfField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> extends Component< FieldProps<T, S, F>, AnyOfFieldState<S> > { /** Constructs an `AnyOfField` with the given `props` to initialize the initially selected option in state * * @param props - The `FieldProps` for this template */ constructor(props: FieldProps<T, S, F>) { super(props); const { formData, options, registry: { schemaUtils }, } = this.props; // cache the retrieved options in state in case they have $refs to save doing it later const retrievedOptions = options.map((opt: S) => schemaUtils.retrieveSchema(opt, formData)); this.state = { retrievedOptions, selectedOption: this.getMatchingOption(0, formData, retrievedOptions), }; } /** React lifecycle method that is called when the props and/or state for this component is updated. It recomputes the * currently selected option based on the overall `formData` * * @param prevProps - The previous `FieldProps` for this template * @param prevState - The previous `AnyOfFieldState` for this template */ componentDidUpdate(prevProps: Readonly<FieldProps<T, S, F>>, prevState: Readonly<AnyOfFieldState>) { const { formData, options, idSchema } = this.props; const { selectedOption } = this.state; let newState = this.state; if (!deepEquals(prevProps.options, options)) { const { registry: { schemaUtils }, } = this.props; // re-cache the retrieved options in state in case they have $refs to save doing it later const retrievedOptions = options.map((opt: S) => schemaUtils.retrieveSchema(opt, formData)); newState = { selectedOption, retrievedOptions }; } if (!deepEquals(formData, prevProps.formData) && idSchema.$id === prevProps.idSchema.$id) { const { retrievedOptions } = newState; const matchingOption = this.getMatchingOption(selectedOption, formData, retrievedOptions); if (prevState && matchingOption !== selectedOption) { newState = { selectedOption: matchingOption, retrievedOptions }; } } if (newState !== this.state) { this.setState(newState); } } /** Determines the best matching option for the given `formData` and `options`. * * @param formData - The new formData * @param options - The list of options to choose from * @return - The index of the `option` that best matches the `formData` */ getMatchingOption(selectedOption: number, formData: T | undefined, options: S[]) { const { schema, registry: { schemaUtils }, } = this.props; const discriminator = getDiscriminatorFieldFromSchema<S>(schema); const option = schemaUtils.getClosestMatchingOption(formData, options, selectedOption, discriminator); return option; } /** Callback handler to remember what the currently selected option is. In addition to that the `formData` is updated * to remove properties that are not part of the newly selected option schema, and then the updated data is passed to * the `onChange` handler. * * @param option - The new option value being selected */ onOptionChange = (option?: string) => { const { selectedOption, retrievedOptions } = this.state; const { formData, onChange, registry } = this.props; const { schemaUtils } = registry; const intOption = option !== undefined ? parseInt(option, 10) : -1; if (intOption === selectedOption) { return; } const newOption = intOption >= 0 ? retrievedOptions[intOption] : undefined; const oldOption = selectedOption >= 0 ? retrievedOptions[selectedOption] : undefined; let newFormData = schemaUtils.sanitizeDataForNewSchema(newOption, oldOption, formData); if (newFormData && newOption) { // Call getDefaultFormState to make sure defaults are populated on change. Pass "excludeObjectChildren" // so that only the root objects themselves are created without adding undefined children properties newFormData = schemaUtils.getDefaultFormState(newOption, newFormData, 'excludeObjectChildren') as T; } onChange(newFormData, undefined, this.getFieldId()); this.setState({ selectedOption: intOption }); }; getFieldId() { const { idSchema, schema } = this.props; return `${idSchema.$id}${schema.oneOf ? '__oneof_select' : '__anyof_select'}`; } /** Renders the `AnyOfField` selector along with a `SchemaField` for the value of the `formData` */ render() { const { name, disabled = false, errorSchema = {}, formContext, onBlur, onFocus, registry, schema, uiSchema, } = this.props; const { widgets, fields, translateString, globalUiOptions, schemaUtils } = registry; const { SchemaField: _SchemaField } = fields; const { selectedOption, retrievedOptions } = this.state; const { widget = 'select', placeholder, autofocus, autocomplete, title = schema.title, ...uiOptions } = getUiOptions<T, S, F>(uiSchema, globalUiOptions); const Widget = getWidget<T, S, F>({ type: 'number' }, widget, widgets); const rawErrors = get(errorSchema, ERRORS_KEY, []); const fieldErrorSchema = omit(errorSchema, [ERRORS_KEY]); const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions); const option = selectedOption >= 0 ? retrievedOptions[selectedOption] || null : null; let optionSchema: S; if (option) { // merge all top level fields except properties const { oneOf, anyOf, properties, ...remaining } = schema; // Merge in all the non-oneOf/anyOf properties and also skip the special ADDITIONAL_PROPERTY_FLAG property unset(remaining, ADDITIONAL_PROPERTY_FLAG); optionSchema = !isEmpty(remaining) ? (mergeSchemas(remaining, option) as S) : option; } const translateEnum: TranslatableString = title ? TranslatableString.TitleOptionPrefix : TranslatableString.OptionPrefix; const translateParams = title ? [title] : []; const enumOptions = retrievedOptions.map((opt: { title?: string }, index: number) => ({ label: opt.title || translateString(translateEnum, translateParams.concat(String(index + 1))), value: index, })); return ( <div className='panel panel-default panel-body'> <div className='form-group'> <Widget id={this.getFieldId()} name={`${name}${schema.oneOf ? '__oneof_select' : '__anyof_select'}`} schema={{ type: 'number', default: 0 } as S} onChange={this.onOptionChange} onBlur={onBlur} onFocus={onFocus} disabled={disabled || isEmpty(enumOptions)} multiple={false} rawErrors={rawErrors} errorSchema={fieldErrorSchema} value={selectedOption >= 0 ? selectedOption : undefined} options={{ enumOptions, ...uiOptions }} registry={registry} formContext={formContext} placeholder={placeholder} autocomplete={autocomplete} autofocus={autofocus} label={title ?? name} hideLabel={!displayLabel} /> </div> {option !== null && <_SchemaField {...this.props} schema={optionSchema!} />} </div> ); } } export default AnyOfField; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/fields/NullField.tsx����������������������0000664�0000000�0000000�00000001262�14467713645�0027357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { useEffect } from 'react'; import { FieldProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `NullField` component is used to render a field in the schema is null. It also ensures that the `formData` is * also set to null if it has no value. * * @param props - The `FieldProps` for this template */ function NullField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: FieldProps<T, S, F> ) { const { formData, onChange } = props; useEffect(() => { if (formData === undefined) { onChange(null as unknown as T); } }, [formData, onChange]); return null; } export default NullField; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/fields/NumberField.tsx��������������������0000664�0000000�0000000�00000006750�14467713645�0027704�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { useState, useCallback } from 'react'; import { asNumber, FieldProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; // Matches a string that ends in a . character, optionally followed by a sequence of // digits followed by any number of 0 characters up until the end of the line. // Ensuring that there is at least one prefixed character is important so that // you don't incorrectly match against "0". const trailingCharMatcherWithPrefix = /\.([0-9]*0)*$/; // This is used for trimming the trailing 0 and . characters without affecting // the rest of the string. Its possible to use one RegEx with groups for this // functionality, but it is fairly complex compared to simply defining two // different matchers. const trailingCharMatcher = /[0.]0*$/; /** * The NumberField class has some special handling for dealing with trailing * decimal points and/or zeroes. This logic is designed to allow trailing values * to be visible in the input element, but not be represented in the * corresponding form data. * * The algorithm is as follows: * * 1. When the input value changes the value is cached in the component state * * 2. The value is then normalized, removing trailing decimal points and zeros, * then passed to the "onChange" callback * * 3. When the component is rendered, the formData value is checked against the * value cached in the state. If it matches the cached value, the cached * value is passed to the input instead of the formData value */ function NumberField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: FieldProps<T, S, F> ) { const { registry, onChange, formData, value: initialValue } = props; const [lastValue, setLastValue] = useState(initialValue); const { StringField } = registry.fields; let value = formData; /** Handle the change from the `StringField` to properly convert to a number * * @param value - The current value for the change occurring */ const handleChange = useCallback( (value: FieldProps<T, S, F>['value']) => { // Cache the original value in component state setLastValue(value); // Normalize decimals that don't start with a zero character in advance so // that the rest of the normalization logic is simpler if (`${value}`.charAt(0) === '.') { value = `0${value}`; } // Check that the value is a string (this can happen if the widget used is a // <select>, due to an enum declaration etc) then, if the value ends in a // trailing decimal point or multiple zeroes, strip the trailing values const processed = typeof value === 'string' && value.match(trailingCharMatcherWithPrefix) ? asNumber(value.replace(trailingCharMatcher, '')) : asNumber(value); onChange(processed as unknown as T); }, [onChange] ); if (typeof lastValue === 'string' && typeof value === 'number') { // Construct a regular expression that checks for a string that consists // of the formData value suffixed with zero or one '.' characters and zero // or more '0' characters const re = new RegExp(`${value}`.replace('.', '\\.') + '\\.?0*$'); // If the cached "lastValue" is a match, use that instead of the formData // value to prevent the input value from changing in the UI if (lastValue.match(re)) { value = lastValue as unknown as T; } } return <StringField {...props} formData={value} onChange={handleChange} />; } export default NumberField; ������������������������react-jsonschema-form-5.12.1/packages/core/src/components/fields/ObjectField.tsx��������������������0000664�0000000�0000000�00000026215�14467713645�0027660�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Component } from 'react'; import { getTemplate, getUiOptions, orderProperties, ErrorSchema, FieldProps, FormContextType, GenericObjectType, IdSchema, RJSFSchema, StrictRJSFSchema, TranslatableString, ADDITIONAL_PROPERTY_FLAG, PROPERTIES_KEY, REF_KEY, ANY_OF_KEY, ONE_OF_KEY, } from '@rjsf/utils'; import Markdown from 'markdown-to-jsx'; import get from 'lodash/get'; import has from 'lodash/has'; import isObject from 'lodash/isObject'; import set from 'lodash/set'; import unset from 'lodash/unset'; /** Type used for the state of the `ObjectField` component */ type ObjectFieldState = { /** Flag indicating whether an additional property key was modified */ wasPropertyKeyModified: boolean; /** The set of additional properties */ additionalProperties: object; }; /** The `ObjectField` component is used to render a field in the schema that is of type `object`. It tracks whether an * additional property key was modified and what it was modified to * * @param props - The `FieldProps` for this template */ class ObjectField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> extends Component< FieldProps<T, S, F>, ObjectFieldState > { /** Set up the initial state */ state = { wasPropertyKeyModified: false, additionalProperties: {}, }; /** Returns a flag indicating whether the `name` field is required in the object schema * * @param name - The name of the field to check for required-ness * @returns - True if the field `name` is required, false otherwise */ isRequired(name: string) { const { schema } = this.props; return Array.isArray(schema.required) && schema.required.indexOf(name) !== -1; } /** Returns the `onPropertyChange` handler for the `name` field. Handles the special case where a user is attempting * to clear the data for a field added as an additional property. Calls the `onChange()` handler with the updated * formData. * * @param name - The name of the property * @param addedByAdditionalProperties - Flag indicating whether this property is an additional property * @returns - The onPropertyChange callback for the `name` property */ onPropertyChange = (name: string, addedByAdditionalProperties = false) => { return (value: T | undefined, newErrorSchema?: ErrorSchema<T>, id?: string) => { const { formData, onChange, errorSchema } = this.props; if (value === undefined && addedByAdditionalProperties) { // Don't set value = undefined for fields added by // additionalProperties. Doing so removes them from the // formData, which causes them to completely disappear // (including the input field for the property name). Unlike // fields which are "mandated" by the schema, these fields can // be set to undefined by clicking a "delete field" button, so // set empty values to the empty string. value = '' as unknown as T; } const newFormData = { ...formData, [name]: value } as unknown as T; onChange( newFormData, errorSchema && errorSchema && { ...errorSchema, [name]: newErrorSchema, }, id ); }; }; /** Returns a callback to handle the onDropPropertyClick event for the given `key` which removes the old `key` data * and calls the `onChange` callback with it * * @param key - The key for which the drop callback is desired * @returns - The drop property click callback */ onDropPropertyClick = (key: string) => { return (event: DragEvent) => { event.preventDefault(); const { onChange, formData } = this.props; const copiedFormData = { ...formData } as T; unset(copiedFormData, key); onChange(copiedFormData); }; }; /** Computes the next available key name from the `preferredKey`, indexing through the already existing keys until one * that is already not assigned is found. * * @param preferredKey - The preferred name of a new key * @param [formData] - The form data in which to check if the desired key already exists * @returns - The name of the next available key from `preferredKey` */ getAvailableKey = (preferredKey: string, formData?: T) => { const { uiSchema, registry } = this.props; const { duplicateKeySuffixSeparator = '-' } = getUiOptions<T, S, F>(uiSchema, registry.globalUiOptions); let index = 0; let newKey = preferredKey; while (has(formData, newKey)) { newKey = `${preferredKey}${duplicateKeySuffixSeparator}${++index}`; } return newKey; }; /** Returns a callback function that deals with the rename of a key for an additional property for a schema. That * callback will attempt to rename the key and move the existing data to that key, calling `onChange` when it does. * * @param oldValue - The old value of a field * @returns - The key change callback function */ onKeyChange = (oldValue: any) => { return (value: any, newErrorSchema: ErrorSchema<T>) => { if (oldValue === value) { return; } const { formData, onChange, errorSchema } = this.props; value = this.getAvailableKey(value, formData); const newFormData: GenericObjectType = { ...(formData as GenericObjectType), }; const newKeys: GenericObjectType = { [oldValue]: value }; const keyValues = Object.keys(newFormData).map((key) => { const newKey = newKeys[key] || key; return { [newKey]: newFormData[key] }; }); const renamedObj = Object.assign({}, ...keyValues); this.setState({ wasPropertyKeyModified: true }); onChange( renamedObj, errorSchema && errorSchema && { ...errorSchema, [value]: newErrorSchema, } ); }; }; /** Returns a default value to be used for a new additional schema property of the given `type` * * @param type - The type of the new additional schema property */ getDefaultValue(type?: RJSFSchema['type']) { const { registry: { translateString }, } = this.props; switch (type) { case 'array': return []; case 'boolean': return false; case 'null': return null; case 'number': return 0; case 'object': return {}; case 'string': default: // We don't have a datatype for some reason (perhaps additionalProperties was true) return translateString(TranslatableString.NewStringDefault); } } /** Handles the adding of a new additional property on the given `schema`. Calls the `onChange` callback once the new * default data for that field has been added to the formData. * * @param schema - The schema element to which the new property is being added */ handleAddClick = (schema: S) => () => { if (!schema.additionalProperties) { return; } const { formData, onChange, registry } = this.props; const newFormData = { ...formData } as T; let type: RJSFSchema['type'] = undefined; if (isObject(schema.additionalProperties)) { type = schema.additionalProperties.type; let apSchema = schema.additionalProperties; if (REF_KEY in apSchema) { const { schemaUtils } = registry; apSchema = schemaUtils.retrieveSchema({ $ref: apSchema[REF_KEY] } as S, formData); type = apSchema.type; } if (!type && (ANY_OF_KEY in apSchema || ONE_OF_KEY in apSchema)) { type = 'object'; } } const newKey = this.getAvailableKey('newKey', newFormData); // Cast this to make the `set` work properly set(newFormData as GenericObjectType, newKey, this.getDefaultValue(type)); onChange(newFormData); }; /** Renders the `ObjectField` from the given props */ render() { const { schema: rawSchema, uiSchema = {}, formData, errorSchema, idSchema, name, required = false, disabled = false, readonly = false, hideError, idPrefix, idSeparator, onBlur, onFocus, registry, } = this.props; const { fields, formContext, schemaUtils, translateString, globalUiOptions } = registry; const { SchemaField } = fields; const schema: S = schemaUtils.retrieveSchema(rawSchema, formData); const uiOptions = getUiOptions<T, S, F>(uiSchema, globalUiOptions); const { properties: schemaProperties = {} } = schema; const title = uiOptions.title ?? schema.title ?? name; const description = uiOptions.description ?? schema.description; let orderedProperties: string[]; try { const properties = Object.keys(schemaProperties); orderedProperties = orderProperties(properties, uiOptions.order); } catch (err) { return ( <div> <p className='config-error' style={{ color: 'red' }}> <Markdown> {translateString(TranslatableString.InvalidObjectField, [name || 'root', (err as Error).message])} </Markdown> </p> <pre>{JSON.stringify(schema)}</pre> </div> ); } const Template = getTemplate<'ObjectFieldTemplate', T, S, F>('ObjectFieldTemplate', registry, uiOptions); const templateProps = { // getDisplayLabel() always returns false for object types, so just check the `uiOptions.label` title: uiOptions.label === false ? '' : title, description: uiOptions.label === false ? undefined : description, properties: orderedProperties.map((name) => { const addedByAdditionalProperties = has(schema, [PROPERTIES_KEY, name, ADDITIONAL_PROPERTY_FLAG]); const fieldUiSchema = addedByAdditionalProperties ? uiSchema.additionalProperties : uiSchema[name]; const hidden = getUiOptions<T, S, F>(fieldUiSchema).widget === 'hidden'; const fieldIdSchema: IdSchema<T> = get(idSchema, [name], {}); return { content: ( <SchemaField key={name} name={name} required={this.isRequired(name)} schema={get(schema, [PROPERTIES_KEY, name], {})} uiSchema={fieldUiSchema} errorSchema={get(errorSchema, name)} idSchema={fieldIdSchema} idPrefix={idPrefix} idSeparator={idSeparator} formData={get(formData, name)} formContext={formContext} wasPropertyKeyModified={this.state.wasPropertyKeyModified} onKeyChange={this.onKeyChange(name)} onChange={this.onPropertyChange(name, addedByAdditionalProperties)} onBlur={onBlur} onFocus={onFocus} registry={registry} disabled={disabled} readonly={readonly} hideError={hideError} onDropPropertyClick={this.onDropPropertyClick} /> ), name, readonly, disabled, required, hidden, }; }), readonly, disabled, required, idSchema, uiSchema, errorSchema, schema, formData, formContext, registry, }; return <Template {...templateProps} onAddClick={this.handleAddClick} />; } } export default ObjectField; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/fields/SchemaField.tsx��������������������0000664�0000000�0000000�00000027212�14467713645�0027650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { useCallback, Component } from 'react'; import { ADDITIONAL_PROPERTY_FLAG, deepEquals, descriptionId, ErrorSchema, FieldProps, FieldTemplateProps, FormContextType, getSchemaType, getTemplate, getUiOptions, ID_KEY, IdSchema, mergeObjects, Registry, RJSFSchema, StrictRJSFSchema, TranslatableString, UI_OPTIONS_KEY, UIOptionsType, } from '@rjsf/utils'; import isObject from 'lodash/isObject'; import omit from 'lodash/omit'; import Markdown from 'markdown-to-jsx'; /** The map of component type to FieldName */ const COMPONENT_TYPES: { [key: string]: string } = { array: 'ArrayField', boolean: 'BooleanField', integer: 'NumberField', number: 'NumberField', object: 'ObjectField', string: 'StringField', null: 'NullField', }; /** Computes and returns which `Field` implementation to return in order to render the field represented by the * `schema`. The `uiOptions` are used to alter what potential `Field` implementation is actually returned. If no * appropriate `Field` implementation can be found then a wrapper around `UnsupportedFieldTemplate` is used. * * @param schema - The schema from which to obtain the type * @param uiOptions - The UI Options that may affect the component decision * @param idSchema - The id that is passed to the `UnsupportedFieldTemplate` * @param registry - The registry from which fields and templates are obtained * @returns - The `Field` component that is used to render the actual field data */ function getFieldComponent<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( schema: S, uiOptions: UIOptionsType<T, S, F>, idSchema: IdSchema<T>, registry: Registry<T, S, F> ) { const field = uiOptions.field; const { fields, translateString } = registry; if (typeof field === 'function') { return field; } if (typeof field === 'string' && field in fields) { return fields[field]; } const schemaType = getSchemaType(schema); const type: string = Array.isArray(schemaType) ? schemaType[0] : schemaType || ''; const schemaId = schema.$id; let componentName = COMPONENT_TYPES[type]; if (schemaId && schemaId in fields) { componentName = schemaId; } // If the type is not defined and the schema uses 'anyOf' or 'oneOf', don't // render a field and let the MultiSchemaField component handle the form display if (!componentName && (schema.anyOf || schema.oneOf)) { return () => null; } return componentName in fields ? fields[componentName] : () => { const UnsupportedFieldTemplate = getTemplate<'UnsupportedFieldTemplate', T, S, F>( 'UnsupportedFieldTemplate', registry, uiOptions ); return ( <UnsupportedFieldTemplate schema={schema} idSchema={idSchema} reason={translateString(TranslatableString.UnknownFieldType, [String(schema.type)])} registry={registry} /> ); }; } /** The `SchemaFieldRender` component is the work-horse of react-jsonschema-form, determining what kind of real field to * render based on the `schema`, `uiSchema` and all the other props. It also deals with rendering the `anyOf` and * `oneOf` fields. * * @param props - The `FieldProps` for this component */ function SchemaFieldRender<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: FieldProps<T, S, F> ) { const { schema: _schema, idSchema: _idSchema, uiSchema, formData, errorSchema, idPrefix, idSeparator, name, onChange, onKeyChange, onDropPropertyClick, required, registry, wasPropertyKeyModified = false, } = props; const { formContext, schemaUtils, globalUiOptions } = registry; const uiOptions = getUiOptions<T, S, F>(uiSchema, globalUiOptions); const FieldTemplate = getTemplate<'FieldTemplate', T, S, F>('FieldTemplate', registry, uiOptions); const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, uiOptions ); const FieldHelpTemplate = getTemplate<'FieldHelpTemplate', T, S, F>('FieldHelpTemplate', registry, uiOptions); const FieldErrorTemplate = getTemplate<'FieldErrorTemplate', T, S, F>('FieldErrorTemplate', registry, uiOptions); const schema = schemaUtils.retrieveSchema(_schema, formData); const fieldId = _idSchema[ID_KEY]; const idSchema = mergeObjects( schemaUtils.toIdSchema(schema, fieldId, formData, idPrefix, idSeparator), _idSchema ) as IdSchema<T>; /** Intermediary `onChange` handler for field components that will inject the `id` of the current field into the * `onChange` chain if it is not already being provided from a deeper level in the hierarchy */ const handleFieldComponentChange = useCallback( (formData: T | undefined, newErrorSchema?: ErrorSchema<T>, id?: string) => { const theId = id || fieldId; return onChange(formData, newErrorSchema, theId); }, [fieldId, onChange] ); const FieldComponent = getFieldComponent<T, S, F>(schema, uiOptions, idSchema, registry); const disabled = Boolean(props.disabled || uiOptions.disabled); const readonly = Boolean(props.readonly || uiOptions.readonly || props.schema.readOnly || schema.readOnly); const uiSchemaHideError = uiOptions.hideError; // Set hideError to the value provided in the uiSchema, otherwise stick with the prop to propagate to children const hideError = uiSchemaHideError === undefined ? props.hideError : Boolean(uiSchemaHideError); const autofocus = Boolean(props.autofocus || uiOptions.autofocus); if (Object.keys(schema).length === 0) { return null; } const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions); const { __errors, ...fieldErrorSchema } = errorSchema || {}; // See #439: uiSchema: Don't pass consumed class names or style to child components const fieldUiSchema = omit(uiSchema, ['ui:classNames', 'classNames', 'ui:style']); if (UI_OPTIONS_KEY in fieldUiSchema) { fieldUiSchema[UI_OPTIONS_KEY] = omit(fieldUiSchema[UI_OPTIONS_KEY], ['classNames', 'style']); } const field = ( <FieldComponent {...props} onChange={handleFieldComponentChange} idSchema={idSchema} schema={schema} uiSchema={fieldUiSchema} disabled={disabled} readonly={readonly} hideError={hideError} autofocus={autofocus} errorSchema={fieldErrorSchema} formContext={formContext} rawErrors={__errors} /> ); const id = idSchema[ID_KEY]; // If this schema has a title defined, but the user has set a new key/label, retain their input. let label; if (wasPropertyKeyModified) { label = name; } else { label = ADDITIONAL_PROPERTY_FLAG in schema ? name : uiOptions.title || props.schema.title || schema.title || name; } const description = uiOptions.description || props.schema.description || schema.description || ''; const richDescription = uiOptions.enableMarkdownInDescription ? <Markdown>{description}</Markdown> : description; const help = uiOptions.help; const hidden = uiOptions.widget === 'hidden'; const classNames = ['form-group', 'field', `field-${getSchemaType(schema)}`]; if (!hideError && __errors && __errors.length > 0) { classNames.push('field-error has-error has-danger'); } if (uiSchema?.classNames) { if (process.env.NODE_ENV !== 'production') { console.warn( "'uiSchema.classNames' is deprecated and may be removed in a major release; Use 'ui:classNames' instead." ); } classNames.push(uiSchema.classNames); } if (uiOptions.classNames) { classNames.push(uiOptions.classNames); } const helpComponent = ( <FieldHelpTemplate help={help} idSchema={idSchema} schema={schema} uiSchema={uiSchema} hasErrors={!hideError && __errors && __errors.length > 0} registry={registry} /> ); /* * AnyOf/OneOf errors handled by child schema */ const errorsComponent = hideError || schema.anyOf || schema.oneOf ? undefined : ( <FieldErrorTemplate errors={__errors} errorSchema={errorSchema} idSchema={idSchema} schema={schema} uiSchema={uiSchema} registry={registry} /> ); const fieldProps: Omit<FieldTemplateProps<T, S, F>, 'children'> = { description: ( <DescriptionFieldTemplate id={descriptionId<T>(id)} description={richDescription} schema={schema} uiSchema={uiSchema} registry={registry} /> ), rawDescription: description, help: helpComponent, rawHelp: typeof help === 'string' ? help : undefined, errors: errorsComponent, rawErrors: hideError ? undefined : __errors, id, label, hidden, onChange, onKeyChange, onDropPropertyClick, required, disabled, readonly, hideError, displayLabel, classNames: classNames.join(' ').trim(), style: uiOptions.style, formContext, formData, schema, uiSchema, registry, }; const _AnyOfField = registry.fields.AnyOfField; const _OneOfField = registry.fields.OneOfField; const isReplacingAnyOrOneOf = uiSchema?.['ui:field'] && uiSchema?.['ui:fieldReplacesAnyOrOneOf'] === true; return ( <FieldTemplate {...fieldProps}> <> {field} {/* If the schema `anyOf` or 'oneOf' can be rendered as a select control, don't render the selection and let `StringField` component handle rendering */} {schema.anyOf && !isReplacingAnyOrOneOf && !schemaUtils.isSelect(schema) && ( <_AnyOfField name={name} disabled={disabled} readonly={readonly} hideError={hideError} errorSchema={errorSchema} formData={formData} formContext={formContext} idPrefix={idPrefix} idSchema={idSchema} idSeparator={idSeparator} onBlur={props.onBlur} onChange={props.onChange} onFocus={props.onFocus} options={schema.anyOf.map((_schema) => schemaUtils.retrieveSchema(isObject(_schema) ? (_schema as S) : ({} as S), formData) )} registry={registry} schema={schema} uiSchema={uiSchema} /> )} {schema.oneOf && !isReplacingAnyOrOneOf && !schemaUtils.isSelect(schema) && ( <_OneOfField name={name} disabled={disabled} readonly={readonly} hideError={hideError} errorSchema={errorSchema} formData={formData} formContext={formContext} idPrefix={idPrefix} idSchema={idSchema} idSeparator={idSeparator} onBlur={props.onBlur} onChange={props.onChange} onFocus={props.onFocus} options={schema.oneOf.map((_schema) => schemaUtils.retrieveSchema(isObject(_schema) ? (_schema as S) : ({} as S), formData) )} registry={registry} schema={schema} uiSchema={uiSchema} /> )} </> </FieldTemplate> ); } /** The `SchemaField` component determines whether it is necessary to rerender the component based on any props changes * and if so, calls the `SchemaFieldRender` component with the props. */ class SchemaField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> extends Component< FieldProps<T, S, F> > { shouldComponentUpdate(nextProps: Readonly<FieldProps<T, S, F>>) { return !deepEquals(this.props, nextProps); } render() { return <SchemaFieldRender<T, S, F> {...this.props} />; } } export default SchemaField; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/fields/StringField.tsx��������������������0000664�0000000�0000000�00000003566�14467713645�0027724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getWidget, getUiOptions, optionsList, hasWidget, FieldProps, FormContextType, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; /** The `StringField` component is used to render a schema field that represents a string type * * @param props - The `FieldProps` for this template */ function StringField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: FieldProps<T, S, F> ) { const { schema, name, uiSchema, idSchema, formData, required, disabled = false, readonly = false, autofocus = false, onChange, onBlur, onFocus, registry, rawErrors, } = props; const { title, format } = schema; const { widgets, formContext, schemaUtils, globalUiOptions } = registry; const enumOptions = schemaUtils.isSelect(schema) ? optionsList(schema) : undefined; let defaultWidget = enumOptions ? 'select' : 'text'; if (format && hasWidget<T, S, F>(schema, format, widgets)) { defaultWidget = format; } const { widget = defaultWidget, placeholder = '', title: uiTitle, ...options } = getUiOptions<T, S, F>(uiSchema); const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions); const label = uiTitle ?? title ?? name; const Widget = getWidget<T, S, F>(schema, widget, widgets); return ( <Widget options={{ ...options, enumOptions }} schema={schema} uiSchema={uiSchema} id={idSchema.$id} name={name} label={label} hideLabel={!displayLabel} value={formData} onChange={onChange} onBlur={onBlur} onFocus={onFocus} required={required} disabled={disabled} readonly={readonly} formContext={formContext} autofocus={autofocus} registry={registry} placeholder={placeholder} rawErrors={rawErrors} /> ); } export default StringField; ������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/fields/index.ts���������������������������0000664�0000000�0000000�00000001672�14467713645�0026425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Field, FormContextType, RegistryFieldsType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import ArrayField from './ArrayField'; import BooleanField from './BooleanField'; import MultiSchemaField from './MultiSchemaField'; import NumberField from './NumberField'; import ObjectField from './ObjectField'; import SchemaField from './SchemaField'; import StringField from './StringField'; import NullField from './NullField'; function fields< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): RegistryFieldsType<T, S, F> { return { AnyOfField: MultiSchemaField, ArrayField: ArrayField as unknown as Field<T, S, F>, // ArrayField falls back to SchemaField if ArraySchemaField is not defined, which it isn't by default BooleanField, NumberField, ObjectField, OneOfField: MultiSchemaField, SchemaField, StringField, NullField, }; } export default fields; ����������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/��������������������������������0000775�0000000�0000000�00000000000�14467713645�0025470�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ArrayFieldDescriptionTemplate.tsx�������������������������������������������������������������������0000664�0000000�0000000�00000002217�14467713645�0034075�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/core/src/components/templates����������������������������������������������������������������������������������������������������import { descriptionId, getTemplate, getUiOptions, ArrayFieldDescriptionProps, FormContextType, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; /** The `ArrayFieldDescriptionTemplate` component renders a `DescriptionFieldTemplate` with an `id` derived from * the `idSchema`. * * @param props - The `ArrayFieldDescriptionProps` for the component */ export default function ArrayFieldDescriptionTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldDescriptionProps<T, S, F>) { const { idSchema, description, registry, schema, uiSchema } = props; const options = getUiOptions<T, S, F>(uiSchema, registry.globalUiOptions); const { label: displayLabel = true } = options; if (!description || !displayLabel) { return null; } const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, options ); return ( <DescriptionFieldTemplate id={descriptionId<T>(idSchema)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/ArrayFieldItemTemplate.tsx������0000664�0000000�0000000�00000005151�14467713645�0032567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { CSSProperties } from 'react'; import { ArrayFieldTemplateItemType, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `ArrayFieldItemTemplate` component is the template used to render an items of an array. * * @param props - The `ArrayFieldTemplateItemType` props for the component */ export default function ArrayFieldItemTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateItemType<T, S, F>) { const { children, className, disabled, hasToolbar, hasMoveDown, hasMoveUp, hasRemove, hasCopy, index, onCopyIndexClick, onDropIndexClick, onReorderClick, readonly, registry, uiSchema, } = props; const { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } = registry.templates.ButtonTemplates; const btnStyle: CSSProperties = { flex: 1, paddingLeft: 6, paddingRight: 6, fontWeight: 'bold', }; return ( <div className={className}> <div className={hasToolbar ? 'col-xs-9' : 'col-xs-12'}>{children}</div> {hasToolbar && ( <div className='col-xs-3 array-item-toolbox'> <div className='btn-group' style={{ display: 'flex', justifyContent: 'space-around', }} > {(hasMoveUp || hasMoveDown) && ( <MoveUpButton style={btnStyle} disabled={disabled || readonly || !hasMoveUp} onClick={onReorderClick(index, index - 1)} uiSchema={uiSchema} registry={registry} /> )} {(hasMoveUp || hasMoveDown) && ( <MoveDownButton style={btnStyle} disabled={disabled || readonly || !hasMoveDown} onClick={onReorderClick(index, index + 1)} uiSchema={uiSchema} registry={registry} /> )} {hasCopy && ( <CopyButton style={btnStyle} disabled={disabled || readonly} onClick={onCopyIndexClick(index)} uiSchema={uiSchema} registry={registry} /> )} {hasRemove && ( <RemoveButton style={btnStyle} disabled={disabled || readonly} onClick={onDropIndexClick(index)} uiSchema={uiSchema} registry={registry} /> )} </div> </div> )} </div> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/ArrayFieldTemplate.tsx����������0000664�0000000�0000000�00000004444�14467713645�0031754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getTemplate, getUiOptions, ArrayFieldTemplateProps, ArrayFieldTemplateItemType, FormContextType, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; /** The `ArrayFieldTemplate` component is the template used to render all items in an array. * * @param props - The `ArrayFieldTemplateItemType` props for the component */ export default function ArrayFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateProps<T, S, F>) { const { canAdd, className, disabled, idSchema, uiSchema, items, onAddClick, readonly, registry, required, schema, title, } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const ArrayFieldDescriptionTemplate = getTemplate<'ArrayFieldDescriptionTemplate', T, S, F>( 'ArrayFieldDescriptionTemplate', registry, uiOptions ); const ArrayFieldItemTemplate = getTemplate<'ArrayFieldItemTemplate', T, S, F>( 'ArrayFieldItemTemplate', registry, uiOptions ); const ArrayFieldTitleTemplate = getTemplate<'ArrayFieldTitleTemplate', T, S, F>( 'ArrayFieldTitleTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; return ( <fieldset className={className} id={idSchema.$id}> <ArrayFieldTitleTemplate idSchema={idSchema} title={uiOptions.title || title} required={required} schema={schema} uiSchema={uiSchema} registry={registry} /> <ArrayFieldDescriptionTemplate idSchema={idSchema} description={uiOptions.description || schema.description} schema={schema} uiSchema={uiSchema} registry={registry} /> <div className='row array-item-list'> {items && items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType<T, S, F>) => ( <ArrayFieldItemTemplate key={key} {...itemProps} /> ))} </div> {canAdd && ( <AddButton className='array-item-add' onClick={onAddClick} disabled={disabled || readonly} uiSchema={uiSchema} registry={registry} /> )} </fieldset> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/ArrayFieldTitleTemplate.tsx�����0000664�0000000�0000000�00000002222�14467713645�0032746�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getTemplate, getUiOptions, titleId, ArrayFieldTitleProps, FormContextType, RJSFSchema, StrictRJSFSchema, TemplatesType, } from '@rjsf/utils'; /** The `ArrayFieldTitleTemplate` component renders a `TitleFieldTemplate` with an `id` derived from * the `idSchema`. * * @param props - The `ArrayFieldTitleProps` for the component */ export default function ArrayFieldTitleTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTitleProps<T, S, F>) { const { idSchema, title, schema, uiSchema, required, registry } = props; const options = getUiOptions<T, S, F>(uiSchema, registry.globalUiOptions); const { label: displayLabel = true } = options; if (!title || !displayLabel) { return null; } const TitleFieldTemplate: TemplatesType<T, S, F>['TitleFieldTemplate'] = getTemplate<'TitleFieldTemplate', T, S, F>( 'TitleFieldTemplate', registry, options ); return ( <TitleFieldTemplate id={titleId<T>(idSchema)} title={title} required={required} schema={schema} uiSchema={uiSchema} registry={registry} /> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/BaseInputTemplate.tsx�����������0000664�0000000�0000000�00000005762�14467713645�0031630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent, useCallback } from 'react'; import { ariaDescribedByIds, BaseInputTemplateProps, examplesId, getInputProps, FormContextType, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; /** The `BaseInputTemplate` is the template to use to render the basic `<input>` component for the `core` theme. * It is used as the template for rendering many of the <input> based widgets that differ by `type` and callbacks only. * It can be customized/overridden for other themes or individual implementations as needed. * * @param props - The `WidgetProps` for this template */ export default function BaseInputTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: BaseInputTemplateProps<T, S, F>) { const { id, name, // remove this from ...rest value, readonly, disabled, autofocus, onBlur, onFocus, onChange, onChangeOverride, options, schema, uiSchema, formContext, registry, rawErrors, type, hideLabel, // remove this from ...rest hideError, // remove this from ...rest ...rest } = props; // Note: since React 15.2.0 we can't forward unknown element attributes, so we // exclude the "options" and "schema" ones here. if (!id) { console.log('No id for', props); throw new Error(`no id for props ${JSON.stringify(props)}`); } const inputProps = { ...rest, ...getInputProps<T, S, F>(schema, type, options), }; let inputValue; if (inputProps.type === 'number' || inputProps.type === 'integer') { inputValue = value || value === 0 ? value : ''; } else { inputValue = value == null ? '' : value; } const _onChange = useCallback( ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onChange(value === '' ? options.emptyValue : value), [onChange, options] ); const _onBlur = useCallback(({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, value), [onBlur, id]); const _onFocus = useCallback( ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, value), [onFocus, id] ); return ( <> <input id={id} name={id} className='form-control' readOnly={readonly} disabled={disabled} autoFocus={autofocus} value={inputValue} {...inputProps} list={schema.examples ? examplesId<T>(id) : undefined} onChange={onChangeOverride || _onChange} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id, !!schema.examples)} /> {Array.isArray(schema.examples) && ( <datalist key={`datalist_${id}`} id={examplesId<T>(id)}> {(schema.examples as string[]) .concat(schema.default && !schema.examples.includes(schema.default) ? ([schema.default] as string[]) : []) .map((example: any) => { return <option key={example} value={example} />; })} </datalist> )} </> ); } ��������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/ButtonTemplates/����������������0000775�0000000�0000000�00000000000�14467713645�0030622�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/ButtonTemplates/AddButton.tsx���0000664�0000000�0000000�00000001566�14467713645�0033256�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; import IconButton from './IconButton'; /** The `AddButton` renders a button that represent the `Add` action on a form */ export default function AddButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ className, onClick, disabled, registry, }: IconButtonProps<T, S, F>) { const { translateString } = registry; return ( <div className='row'> <p className={`col-xs-3 col-xs-offset-9 text-right ${className}`}> <IconButton iconType='info' icon='plus' className='btn-add col-xs-12' title={translateString(TranslatableString.AddButton)} onClick={onClick} disabled={disabled} registry={registry} /> </p> </div> ); } ������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/ButtonTemplates/IconButton.tsx��0000664�0000000�0000000�00000004110�14467713645�0033442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; export default function IconButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { iconType = 'default', icon, className, uiSchema, registry, ...otherProps } = props; return ( <button type='button' className={`btn btn-${iconType} ${className}`} {...otherProps}> <i className={`glyphicon glyphicon-${icon}`} /> </button> ); } export function CopyButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <IconButton title={translateString(TranslatableString.CopyButton)} className='array-item-copy' {...props} icon='copy' /> ); } export function MoveDownButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <IconButton title={translateString(TranslatableString.MoveDownButton)} className='array-item-move-down' {...props} icon='arrow-down' /> ); } export function MoveUpButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <IconButton title={translateString(TranslatableString.MoveUpButton)} className='array-item-move-up' {...props} icon='arrow-up' /> ); } export function RemoveButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <IconButton title={translateString(TranslatableString.RemoveButton)} className='array-item-remove' {...props} iconType='danger' icon='remove' /> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/ButtonTemplates/SubmitButton.tsx0000664�0000000�0000000�00000001322�14467713645�0034017�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getSubmitButtonOptions, FormContextType, RJSFSchema, StrictRJSFSchema, SubmitButtonProps } from '@rjsf/utils'; /** The `SubmitButton` renders a button that represent the `Submit` action on a form */ export default function SubmitButton< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ uiSchema }: SubmitButtonProps<T, S, F>) { const { submitText, norender, props: submitButtonProps = {} } = getSubmitButtonOptions<T, S, F>(uiSchema); if (norender) { return null; } return ( <div> <button type='submit' {...submitButtonProps} className={`btn btn-info ${submitButtonProps.className || ''}`}> {submitText} </button> </div> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/ButtonTemplates/index.ts��������0000664�0000000�0000000�00000001104�14467713645�0032275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, TemplatesType } from '@rjsf/utils'; import SubmitButton from './SubmitButton'; import AddButton from './AddButton'; import { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } from './IconButton'; function buttonTemplates< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): TemplatesType<T, S, F>['ButtonTemplates'] { return { SubmitButton, AddButton, CopyButton, MoveDownButton, MoveUpButton, RemoveButton, }; } export default buttonTemplates; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/DescriptionField.tsx������������0000664�0000000�0000000�00000001411�14467713645�0031454�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { DescriptionFieldProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `DescriptionField` is the template to use to render the description of a field * * @param props - The `DescriptionFieldProps` for this component */ export default function DescriptionField< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: DescriptionFieldProps<T, S, F>) { const { id, description } = props; if (!description) { return null; } if (typeof description === 'string') { return ( <p id={id} className='field-description'> {description} </p> ); } else { return ( <div id={id} className='field-description'> {description} </div> ); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/ErrorList.tsx�������������������0000664�0000000�0000000�00000002004�14467713645�0030151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ErrorListProps, FormContextType, RJSFValidationError, RJSFSchema, StrictRJSFSchema, TranslatableString, } from '@rjsf/utils'; /** The `ErrorList` component is the template that renders the all the errors associated with the fields in the `Form` * * @param props - The `ErrorListProps` for this component */ export default function ErrorList<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ errors, registry, }: ErrorListProps<T, S, F>) { const { translateString } = registry; return ( <div className='panel panel-danger errors'> <div className='panel-heading'> <h3 className='panel-title'>{translateString(TranslatableString.ErrorsLabel)}</h3> </div> <ul className='list-group'> {errors.map((error: RJSFValidationError, i: number) => { return ( <li key={i} className='list-group-item text-danger'> {error.stack} </li> ); })} </ul> </div> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/FieldErrorTemplate.tsx����������0000664�0000000�0000000�00000001645�14467713645�0031767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { errorId, FieldErrorProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `FieldErrorTemplate` component renders the errors local to the particular field * * @param props - The `FieldErrorProps` for the errors being rendered */ export default function FieldErrorTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldErrorProps<T, S, F>) { const { errors = [], idSchema } = props; if (errors.length === 0) { return null; } const id = errorId<T>(idSchema); return ( <div> <ul id={id} className='error-detail bs-callout bs-callout-info'> {errors .filter((elem) => !!elem) .map((error, index: number) => { return ( <li className='text-danger' key={index}> {error} </li> ); })} </ul> </div> ); } �������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/FieldHelpTemplate.tsx�����������0000664�0000000�0000000�00000001317�14467713645�0031562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { helpId, FieldHelpProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `FieldHelpTemplate` component renders any help desired for a field * * @param props - The `FieldHelpProps` to be rendered */ export default function FieldHelpTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldHelpProps<T, S, F>) { const { idSchema, help } = props; if (!help) { return null; } const id = helpId<T>(idSchema); if (typeof help === 'string') { return ( <p id={id} className='help-block'> {help} </p> ); } return ( <div id={id} className='help-block'> {help} </div> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/FieldTemplate/������������������0000775�0000000�0000000�00000000000�14467713645�0030207�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/FieldTemplate/FieldTemplate.tsx�0000664�0000000�0000000�00000002375�14467713645�0033475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FieldTemplateProps, FormContextType, RJSFSchema, StrictRJSFSchema, getTemplate, getUiOptions, } from '@rjsf/utils'; import Label from './Label'; /** The `FieldTemplate` component is the template used by `SchemaField` to render any field. It renders the field * content, (label, description, children, errors and help) inside of a `WrapIfAdditional` component. * * @param props - The `FieldTemplateProps` for this component */ export default function FieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldTemplateProps<T, S, F>) { const { id, label, children, errors, help, description, hidden, required, displayLabel, registry, uiSchema } = props; const uiOptions = getUiOptions(uiSchema); const WrapIfAdditionalTemplate = getTemplate<'WrapIfAdditionalTemplate', T, S, F>( 'WrapIfAdditionalTemplate', registry, uiOptions ); if (hidden) { return <div className='hidden'>{children}</div>; } return ( <WrapIfAdditionalTemplate {...props}> {displayLabel && <Label label={label} required={required} id={id} />} {displayLabel && description ? description : null} {children} {errors} {help} </WrapIfAdditionalTemplate> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/FieldTemplate/Label.tsx���������0000664�0000000�0000000�00000001222�14467713645�0031763�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const REQUIRED_FIELD_SYMBOL = '*'; export type LabelProps = { /** The label for the field */ label?: string; /** A boolean value stating if the field is required */ required?: boolean; /** The id of the input field being labeled */ id?: string; }; /** Renders a label for a field * * @param props - The `LabelProps` for this component */ export default function Label(props: LabelProps) { const { label, required, id } = props; if (!label) { return null; } return ( <label className='control-label' htmlFor={id}> {label} {required && <span className='required'>{REQUIRED_FIELD_SYMBOL}</span>} </label> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/FieldTemplate/index.ts����������0000664�0000000�0000000�00000000114�14467713645�0031662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import FieldTemplate from './FieldTemplate'; export default FieldTemplate; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/ObjectFieldTemplate.tsx���������0000664�0000000�0000000�00000004342�14467713645�0032101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, ObjectFieldTemplatePropertyType, ObjectFieldTemplateProps, RJSFSchema, StrictRJSFSchema, canExpand, descriptionId, getTemplate, getUiOptions, titleId, } from '@rjsf/utils'; /** The `ObjectFieldTemplate` is the template to use to render all the inner properties of an object along with the * title and description if available. If the object is expandable, then an `AddButton` is also rendered after all * the properties. * * @param props - The `ObjectFieldTemplateProps` for this component */ export default function ObjectFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ObjectFieldTemplateProps<T, S, F>) { const { description, disabled, formData, idSchema, onAddClick, properties, readonly, registry, required, schema, title, uiSchema, } = props; const options = getUiOptions<T, S, F>(uiSchema); const TitleFieldTemplate = getTemplate<'TitleFieldTemplate', T, S, F>('TitleFieldTemplate', registry, options); const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, options ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; return ( <fieldset id={idSchema.$id}> {title && ( <TitleFieldTemplate id={titleId<T>(idSchema)} title={title} required={required} schema={schema} uiSchema={uiSchema} registry={registry} /> )} {description && ( <DescriptionFieldTemplate id={descriptionId<T>(idSchema)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> )} {properties.map((prop: ObjectFieldTemplatePropertyType) => prop.content)} {canExpand<T, S, F>(schema, uiSchema, formData) && ( <AddButton className='object-property-expand' onClick={onAddClick(schema)} disabled={disabled || readonly} uiSchema={uiSchema} registry={registry} /> )} </fieldset> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/TitleField.tsx������������������0000664�0000000�0000000�00000001147�14467713645�0030260�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, TitleFieldProps, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; const REQUIRED_FIELD_SYMBOL = '*'; /** The `TitleField` is the template to use to render the title of a field * * @param props - The `TitleFieldProps` for this component */ export default function TitleField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: TitleFieldProps<T, S, F> ) { const { id, title, required } = props; return ( <legend id={id}> {title} {required && <span className='required'>{REQUIRED_FIELD_SYMBOL}</span>} </legend> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/UnsupportedField.tsx������������0000664�0000000�0000000�00000002550�14467713645�0031526�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString, UnsupportedFieldProps } from '@rjsf/utils'; import Markdown from 'markdown-to-jsx'; /** The `UnsupportedField` component is used to render a field in the schema is one that is not supported by * react-jsonschema-form. * * @param props - The `FieldProps` for this template */ function UnsupportedField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: UnsupportedFieldProps<T, S, F> ) { const { schema, idSchema, reason, registry } = props; const { translateString } = registry; let translateEnum: TranslatableString = TranslatableString.UnsupportedField; const translateParams: string[] = []; if (idSchema && idSchema.$id) { translateEnum = TranslatableString.UnsupportedFieldWithId; translateParams.push(idSchema.$id); } if (reason) { translateEnum = translateEnum === TranslatableString.UnsupportedField ? TranslatableString.UnsupportedFieldWithReason : TranslatableString.UnsupportedFieldWithIdAndReason; translateParams.push(reason); } return ( <div className='unsupported-field'> <p> <Markdown>{translateString(translateEnum, translateParams)}</Markdown> </p> {schema && <pre>{JSON.stringify(schema, null, 2)}</pre>} </div> ); } export default UnsupportedField; ��������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/WrapIfAdditionalTemplate.tsx����0000664�0000000�0000000�00000004255�14467713645�0033113�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ADDITIONAL_PROPERTY_FLAG, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString, WrapIfAdditionalTemplateProps, } from '@rjsf/utils'; import Label from './FieldTemplate/Label'; /** The `WrapIfAdditional` component is used by the `FieldTemplate` to rename, or remove properties that are * part of an `additionalProperties` part of a schema. * * @param props - The `WrapIfAdditionalProps` for this component */ export default function WrapIfAdditionalTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WrapIfAdditionalTemplateProps<T, S, F>) { const { id, classNames, style, disabled, label, onKeyChange, onDropPropertyClick, readonly, required, schema, children, uiSchema, registry, } = props; const { templates, translateString } = registry; // Button templates are not overridden in the uiSchema const { RemoveButton } = templates.ButtonTemplates; const keyLabel = translateString(TranslatableString.KeyLabel, [label]); const additional = ADDITIONAL_PROPERTY_FLAG in schema; if (!additional) { return ( <div className={classNames} style={style}> {children} </div> ); } return ( <div className={classNames} style={style}> <div className='row'> <div className='col-xs-5 form-additional'> <div className='form-group'> <Label label={keyLabel} required={required} id={`${id}-key`} /> <input className='form-control' type='text' id={`${id}-key`} onBlur={(event) => onKeyChange(event.target.value)} defaultValue={label} /> </div> </div> <div className='form-additional form-group col-xs-5'>{children}</div> <div className='col-xs-2'> <RemoveButton className='array-item-remove btn-block' style={{ border: '0' }} disabled={disabled || readonly} onClick={onDropPropertyClick(label)} uiSchema={uiSchema} registry={registry} /> </div> </div> </div> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/templates/index.ts������������������������0000664�0000000�0000000�00000003041�14467713645�0027145�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, TemplatesType } from '@rjsf/utils'; import ArrayFieldDescriptionTemplate from './ArrayFieldDescriptionTemplate'; import ArrayFieldItemTemplate from './ArrayFieldItemTemplate'; import ArrayFieldTemplate from './ArrayFieldTemplate'; import ArrayFieldTitleTemplate from './ArrayFieldTitleTemplate'; import BaseInputTemplate from './BaseInputTemplate'; import ButtonTemplates from './ButtonTemplates'; import DescriptionField from './DescriptionField'; import ErrorList from './ErrorList'; import FieldTemplate from './FieldTemplate'; import FieldErrorTemplate from './FieldErrorTemplate'; import FieldHelpTemplate from './FieldHelpTemplate'; import ObjectFieldTemplate from './ObjectFieldTemplate'; import TitleField from './TitleField'; import UnsupportedField from './UnsupportedField'; import WrapIfAdditionalTemplate from './WrapIfAdditionalTemplate'; function templates<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>(): TemplatesType< T, S, F > { return { ArrayFieldDescriptionTemplate, ArrayFieldItemTemplate, ArrayFieldTemplate, ArrayFieldTitleTemplate, ButtonTemplates: ButtonTemplates<T, S, F>(), BaseInputTemplate, DescriptionFieldTemplate: DescriptionField, ErrorListTemplate: ErrorList, FieldTemplate, FieldErrorTemplate, FieldHelpTemplate, ObjectFieldTemplate, TitleFieldTemplate: TitleField, UnsupportedFieldTemplate: UnsupportedField, WrapIfAdditionalTemplate, }; } export default templates; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/����������������������������������0000775�0000000�0000000�00000000000�14467713645�0025140�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/AltDateTimeWidget.tsx�������������0000664�0000000�0000000�00000001174�14467713645�0031204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; /** The `AltDateTimeWidget` is an alternative widget for rendering datetime properties. * It uses the AltDateWidget for rendering, with the `time` prop set to true by default. * * @param props - The `WidgetProps` for this component */ function AltDateTimeWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ time = true, ...props }: WidgetProps<T, S, F>) { const { AltDateWidget } = props.registry.widgets; return <AltDateWidget time={time} {...props} />; } export default AltDateTimeWidget; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/AltDateWidget.tsx�����������������0000664�0000000�0000000�00000012773�14467713645�0030374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { MouseEvent, useCallback, useEffect, useReducer, useState } from 'react'; import { ariaDescribedByIds, parseDateString, toDateString, pad, DateObject, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString, WidgetProps, } from '@rjsf/utils'; function rangeOptions(start: number, stop: number) { const options = []; for (let i = start; i <= stop; i++) { options.push({ value: i, label: pad(i, 2) }); } return options; } function readyForChange(state: DateObject) { return Object.values(state).every((value) => value !== -1); } function dateElementProps( state: DateObject, time: boolean, yearsRange: [number, number] = [1900, new Date().getFullYear() + 2] ) { const { year, month, day, hour, minute, second } = state; const data = [ { type: 'year', range: yearsRange, value: year, }, { type: 'month', range: [1, 12], value: month }, { type: 'day', range: [1, 31], value: day }, ] as { type: string; range: [number, number]; value: number | undefined }[]; if (time) { data.push( { type: 'hour', range: [0, 23], value: hour }, { type: 'minute', range: [0, 59], value: minute }, { type: 'second', range: [0, 59], value: second } ); } return data; } type DateElementProps<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> = Pick< WidgetProps<T, S, F>, 'value' | 'name' | 'disabled' | 'readonly' | 'autofocus' | 'registry' | 'onBlur' | 'onFocus' > & { rootId: string; select: (property: keyof DateObject, value: any) => void; type: string; range: [number, number]; }; function DateElement<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ type, range, value, select, rootId, name, disabled, readonly, autofocus, registry, onBlur, onFocus, }: DateElementProps<T, S, F>) { const id = rootId + '_' + type; const { SelectWidget } = registry.widgets; return ( <SelectWidget schema={{ type: 'integer' } as S} id={id} name={name} className='form-control' options={{ enumOptions: rangeOptions(range[0], range[1]) }} placeholder={type} value={value} disabled={disabled} readonly={readonly} autofocus={autofocus} onChange={(value: any) => select(type as keyof DateObject, value)} onBlur={onBlur} onFocus={onFocus} registry={registry} label='' aria-describedby={ariaDescribedByIds<T>(rootId)} /> ); } /** The `AltDateWidget` is an alternative widget for rendering date properties. * @param props - The `WidgetProps` for this component */ function AltDateWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ time = false, disabled = false, readonly = false, autofocus = false, options, id, name, registry, onBlur, onFocus, onChange, value, }: WidgetProps<T, S, F>) { const { translateString } = registry; const [lastValue, setLastValue] = useState(value); const [state, setState] = useReducer((state: DateObject, action: Partial<DateObject>) => { return { ...state, ...action }; }, parseDateString(value, time)); useEffect(() => { const stateValue = toDateString(state, time); if (readyForChange(state) && stateValue !== value) { // The user changed the date to a new valid data via the comboboxes, so call onChange onChange(stateValue); } else if (lastValue !== value) { // We got a new value in the props setLastValue(value); setState(parseDateString(value, time)); } }, [time, value, onChange, state, lastValue]); const handleChange = useCallback((property: keyof DateObject, value: string) => { setState({ [property]: value }); }, []); const handleSetNow = useCallback( (event: MouseEvent<HTMLAnchorElement>) => { event.preventDefault(); if (disabled || readonly) { return; } const nextState = parseDateString(new Date().toJSON(), time); onChange(toDateString(nextState, time)); }, [disabled, readonly, time] ); const handleClear = useCallback( (event: MouseEvent<HTMLAnchorElement>) => { event.preventDefault(); if (disabled || readonly) { return; } onChange(undefined); }, [disabled, readonly, onChange] ); return ( <ul className='list-inline'> {dateElementProps(state, time, options.yearsRange as [number, number] | undefined).map((elemProps, i) => ( <li className='list-inline-item' key={i}> <DateElement rootId={id} name={name} select={handleChange} {...elemProps} disabled={disabled} readonly={readonly} registry={registry} onBlur={onBlur} onFocus={onFocus} autofocus={autofocus && i === 0} /> </li> ))} {(options.hideNowButton !== 'undefined' ? !options.hideNowButton : true) && ( <li className='list-inline-item'> <a href='#' className='btn btn-info btn-now' onClick={handleSetNow}> {translateString(TranslatableString.NowLabel)} </a> </li> )} {(options.hideClearButton !== 'undefined' ? !options.hideClearButton : true) && ( <li className='list-inline-item'> <a href='#' className='btn btn-warning btn-clear' onClick={handleClear}> {translateString(TranslatableString.ClearLabel)} </a> </li> )} </ul> ); } export default AltDateWidget; �����react-jsonschema-form-5.12.1/packages/core/src/components/widgets/CheckboxWidget.tsx����������������0000664�0000000�0000000�00000004664�14467713645�0030604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent, useCallback } from 'react'; import { ariaDescribedByIds, descriptionId, getTemplate, labelValue, schemaRequiresTrueValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; /** The `CheckBoxWidget` is a widget for rendering boolean properties. * It is typically used to represent a boolean. * * @param props - The `WidgetProps` for this component */ function CheckboxWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ schema, uiSchema, options, id, value, disabled, readonly, label, hideLabel, autofocus = false, onBlur, onFocus, onChange, registry, }: WidgetProps<T, S, F>) { const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, options ); // Because an unchecked checkbox will cause html5 validation to fail, only add // the "required" attribute if the field value must be "true", due to the // "const" or "enum" keywords const required = schemaRequiresTrueValue<S>(schema); const handleChange = useCallback( (event: ChangeEvent<HTMLInputElement>) => onChange(event.target.checked), [onChange] ); const handleBlur = useCallback( (event: FocusEvent<HTMLInputElement>) => onBlur(id, event.target.checked), [onBlur, id] ); const handleFocus = useCallback( (event: FocusEvent<HTMLInputElement>) => onFocus(id, event.target.checked), [onFocus, id] ); const description = options.description ?? schema.description; return ( <div className={`checkbox ${disabled || readonly ? 'disabled' : ''}`}> {!hideLabel && !!description && ( <DescriptionFieldTemplate id={descriptionId<T>(id)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> )} <label> <input type='checkbox' id={id} name={id} checked={typeof value === 'undefined' ? false : value} required={required} disabled={disabled || readonly} autoFocus={autofocus} onChange={handleChange} onBlur={handleBlur} onFocus={handleFocus} aria-describedby={ariaDescribedByIds<T>(id)} /> {labelValue(<span>{label}</span>, hideLabel)} </label> </div> ); } export default CheckboxWidget; ����������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/CheckboxesWidget.tsx��������������0000664�0000000�0000000�00000005676�14467713645�0031140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent, useCallback } from 'react'; import { ariaDescribedByIds, enumOptionsDeselectValue, enumOptionsIsSelected, enumOptionsSelectValue, enumOptionsValueForIndex, optionId, FormContextType, WidgetProps, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; /** The `CheckboxesWidget` is a widget for rendering checkbox groups. * It is typically used to represent an array of enums. * * @param props - The `WidgetProps` for this component */ function CheckboxesWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, disabled, options: { inline = false, enumOptions, enumDisabled, emptyValue }, value, autofocus = false, readonly, onChange, onBlur, onFocus, }: WidgetProps<T, S, F>) { const checkboxesValues = Array.isArray(value) ? value : [value]; const handleBlur = useCallback( ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)), [onBlur, id] ); const handleFocus = useCallback( ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)), [onFocus, id] ); return ( <div className='checkboxes' id={id}> {Array.isArray(enumOptions) && enumOptions.map((option, index) => { const checked = enumOptionsIsSelected<S>(option.value, checkboxesValues); const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1; const disabledCls = disabled || itemDisabled || readonly ? 'disabled' : ''; const handleChange = (event: ChangeEvent<HTMLInputElement>) => { if (event.target.checked) { onChange(enumOptionsSelectValue<S>(index, checkboxesValues, enumOptions)); } else { onChange(enumOptionsDeselectValue<S>(index, checkboxesValues, enumOptions)); } }; const checkbox = ( <span> <input type='checkbox' id={optionId(id, index)} name={id} checked={checked} value={String(index)} disabled={disabled || itemDisabled || readonly} autoFocus={autofocus && index === 0} onChange={handleChange} onBlur={handleBlur} onFocus={handleFocus} aria-describedby={ariaDescribedByIds<T>(id)} /> <span>{option.label}</span> </span> ); return inline ? ( <label key={index} className={`checkbox-inline ${disabledCls}`}> {checkbox} </label> ) : ( <div key={index} className={`checkbox ${disabledCls}`}> <label>{checkbox}</label> </div> ); })} </div> ); } export default CheckboxesWidget; ������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/ColorWidget.tsx�������������������0000664�0000000�0000000�00000001331�14467713645�0030120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; /** The `ColorWidget` component uses the `BaseInputTemplate` changing the type to `color` and disables it when it is * either disabled or readonly. * * @param props - The `WidgetProps` for this component */ export default function ColorWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { disabled, readonly, options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); return <BaseInputTemplate type='color' {...props} disabled={disabled || readonly} />; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/DateTimeWidget.tsx����������������0000664�0000000�0000000�00000001601�14467713645�0030536�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getTemplate, localToUTC, utcToLocal, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; /** The `DateTimeWidget` component uses the `BaseInputTemplate` changing the type to `datetime-local` and transforms * the value to/from utc using the appropriate utility functions. * * @param props - The `WidgetProps` for this component */ export default function DateTimeWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { onChange, value, options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); return ( <BaseInputTemplate type='datetime-local' {...props} value={utcToLocal(value)} onChange={(value) => onChange(localToUTC(value))} /> ); } �������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/DateWidget.tsx��������������������0000664�0000000�0000000�00000001546�14467713645�0027727�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { useCallback } from 'react'; import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; /** The `DateWidget` component uses the `BaseInputTemplate` changing the type to `date` and transforms * the value to undefined when it is falsy during the `onChange` handling. * * @param props - The `WidgetProps` for this component */ export default function DateWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { onChange, options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); const handleChange = useCallback((value: any) => onChange(value || undefined), [onChange]); return <BaseInputTemplate type='date' {...props} onChange={handleChange} />; } ����������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/EmailWidget.tsx�������������������0000664�0000000�0000000�00000001153�14467713645�0030073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; /** The `EmailWidget` component uses the `BaseInputTemplate` changing the type to `email`. * * @param props - The `WidgetProps` for this component */ export default function EmailWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); return <BaseInputTemplate type='email' {...props} />; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/FileWidget.tsx��������������������0000664�0000000�0000000�00000011647�14467713645�0027734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, useCallback, useState } from 'react'; import { dataURItoBlob, FormContextType, getTemplate, Registry, RJSFSchema, StrictRJSFSchema, TranslatableString, WidgetProps, } from '@rjsf/utils'; import Markdown from 'markdown-to-jsx'; function addNameToDataURL(dataURL: string, name: string) { if (dataURL === null) { return null; } return dataURL.replace(';base64', `;name=${encodeURIComponent(name)};base64`); } type FileInfoType = { dataURL?: string | null; name: string; size: number; type: string; }; function processFile(file: File): Promise<FileInfoType> { const { name, size, type } = file; return new Promise((resolve, reject) => { const reader = new window.FileReader(); reader.onerror = reject; reader.onload = (event) => { if (typeof event.target?.result === 'string') { resolve({ dataURL: addNameToDataURL(event.target.result, name), name, size, type, }); } else { resolve({ dataURL: null, name, size, type, }); } }; reader.readAsDataURL(file); }); } function processFiles(files: FileList) { return Promise.all(Array.from(files).map(processFile)); } function FileInfoPreview<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ fileInfo, registry, }: { fileInfo: FileInfoType; registry: Registry<T, S, F>; }) { const { translateString } = registry; const { dataURL, type, name } = fileInfo; if (!dataURL) { return null; } if (type.indexOf('image') !== -1) { return <img src={dataURL} style={{ maxWidth: '100%' }} className='file-preview' />; } return ( <> {' '} <a download={`preview-${name}`} href={dataURL} className='file-download'> {translateString(TranslatableString.PreviewLabel)} </a> </> ); } function FilesInfo<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ filesInfo, registry, preview, }: { filesInfo: FileInfoType[]; registry: Registry<T, S, F>; preview?: boolean; }) { if (filesInfo.length === 0) { return null; } const { translateString } = registry; return ( <ul className='file-info'> {filesInfo.map((fileInfo, key) => { const { name, size, type } = fileInfo; return ( <li key={key}> <Markdown>{translateString(TranslatableString.FilesInfo, [name, type, String(size)])}</Markdown> {preview && <FileInfoPreview<T, S, F> fileInfo={fileInfo} registry={registry} />} </li> ); })} </ul> ); } function extractFileInfo(dataURLs: string[]): FileInfoType[] { return dataURLs .filter((dataURL) => dataURL) .map((dataURL) => { const { blob, name } = dataURItoBlob(dataURL); return { dataURL, name: name, size: blob.size, type: blob.type, }; }); } /** * The `FileWidget` is a widget for rendering file upload fields. * It is typically used with a string property with data-url format. */ function FileWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { disabled, readonly, required, multiple, onChange, value, options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); const [filesInfo, setFilesInfo] = useState<FileInfoType[]>( Array.isArray(value) ? extractFileInfo(value) : extractFileInfo([value]) ); const handleChange = useCallback( (event: ChangeEvent<HTMLInputElement>) => { if (!event.target.files) { return; } // Due to variances in themes, dealing with multiple files for the array case now happens one file at a time. // This is because we don't pass `multiple` into the `BaseInputTemplate` anymore. Instead, we deal with the single // file in each event and concatenate them together ourselves processFiles(event.target.files).then((filesInfoEvent) => { const newValue = filesInfoEvent.map((fileInfo) => fileInfo.dataURL); if (multiple) { setFilesInfo(filesInfo.concat(filesInfoEvent[0])); onChange(value.concat(newValue[0])); } else { setFilesInfo(filesInfoEvent); onChange(newValue[0]); } }); }, [multiple, value, filesInfo, onChange] ); return ( <div> <BaseInputTemplate {...props} disabled={disabled || readonly} type='file' required={value ? false : required} // this turns off HTML required validation when a value exists onChangeOverride={handleChange} value='' accept={options.accept ? String(options.accept) : undefined} /> <FilesInfo<T, S, F> filesInfo={filesInfo} registry={registry} preview={options.filePreview} /> </div> ); } export default FileWidget; �����������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/HiddenWidget.tsx������������������0000664�0000000�0000000�00000001061�14467713645�0030235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; /** The `HiddenWidget` is a widget for rendering a hidden input field. * It is typically used by setting type to "hidden". * * @param props - The `WidgetProps` for this component */ function HiddenWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, value, }: WidgetProps<T, S, F>) { return <input type='hidden' id={id} name={id} value={typeof value === 'undefined' ? '' : value} />; } export default HiddenWidget; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/PasswordWidget.tsx����������������0000664�0000000�0000000�00000001173�14467713645�0030650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; /** The `PasswordWidget` component uses the `BaseInputTemplate` changing the type to `password`. * * @param props - The `WidgetProps` for this component */ export default function PasswordWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); return <BaseInputTemplate type='password' {...props} />; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/RadioWidget.tsx�������������������0000664�0000000�0000000�00000005061�14467713645�0030104�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent, useCallback } from 'react'; import { ariaDescribedByIds, enumOptionsIsSelected, enumOptionsValueForIndex, optionId, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; /** The `RadioWidget` is a widget for rendering a radio group. * It is typically used with a string property constrained with enum options. * * @param props - The `WidgetProps` for this component */ function RadioWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ options, value, required, disabled, readonly, autofocus = false, onBlur, onFocus, onChange, id, }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, inline, emptyValue } = options; const handleBlur = useCallback( ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)), [onBlur, id] ); const handleFocus = useCallback( ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)), [onFocus, id] ); return ( <div className='field-radio-group' id={id}> {Array.isArray(enumOptions) && enumOptions.map((option, i) => { const checked = enumOptionsIsSelected<S>(option.value, value); const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1; const disabledCls = disabled || itemDisabled || readonly ? 'disabled' : ''; const handleChange = () => onChange(option.value); const radio = ( <span> <input type='radio' id={optionId(id, i)} checked={checked} name={id} required={required} value={String(i)} disabled={disabled || itemDisabled || readonly} autoFocus={autofocus && i === 0} onChange={handleChange} onBlur={handleBlur} onFocus={handleFocus} aria-describedby={ariaDescribedByIds<T>(id)} /> <span>{option.label}</span> </span> ); return inline ? ( <label key={i} className={`radio-inline ${disabledCls}`}> {radio} </label> ) : ( <div key={i} className={`radio ${disabledCls}`}> <label>{radio}</label> </div> ); })} </div> ); } export default RadioWidget; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/RangeWidget.tsx�������������������0000664�0000000�0000000�00000001336�14467713645�0030103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; /** The `RangeWidget` component uses the `BaseInputTemplate` changing the type to `range` and wrapping the result * in a div, with the value along side it. * * @param props - The `WidgetProps` for this component */ export default function RangeWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { value, registry: { templates: { BaseInputTemplate }, }, } = props; return ( <div className='field-range-wrapper'> <BaseInputTemplate type='range' {...props} /> <span className='range-view'>{value}</span> </div> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/SelectWidget.tsx������������������0000664�0000000�0000000�00000005653�14467713645�0030274�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent, SyntheticEvent, useCallback } from 'react'; import { ariaDescribedByIds, enumOptionsIndexForValue, enumOptionsValueForIndex, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; function getValue(event: SyntheticEvent<HTMLSelectElement>, multiple: boolean) { if (multiple) { return Array.from((event.target as HTMLSelectElement).options) .slice() .filter((o) => o.selected) .map((o) => o.value); } return (event.target as HTMLSelectElement).value; } /** The `SelectWidget` is a widget for rendering dropdowns. * It is typically used with string properties constrained with enum options. * * @param props - The `WidgetProps` for this component */ function SelectWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ schema, id, options, value, required, disabled, readonly, multiple = false, autofocus = false, onChange, onBlur, onFocus, placeholder, }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, emptyValue: optEmptyVal } = options; const emptyValue = multiple ? [] : ''; const handleFocus = useCallback( (event: FocusEvent<HTMLSelectElement>) => { const newValue = getValue(event, multiple); return onFocus(id, enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyVal)); }, [onFocus, id, schema, multiple, options] ); const handleBlur = useCallback( (event: FocusEvent<HTMLSelectElement>) => { const newValue = getValue(event, multiple); return onBlur(id, enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyVal)); }, [onBlur, id, schema, multiple, options] ); const handleChange = useCallback( (event: ChangeEvent<HTMLSelectElement>) => { const newValue = getValue(event, multiple); return onChange(enumOptionsValueForIndex<S>(newValue, enumOptions, optEmptyVal)); }, [onChange, schema, multiple, options] ); const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, multiple); return ( <select id={id} name={id} multiple={multiple} className='form-control' value={typeof selectedIndexes === 'undefined' ? emptyValue : selectedIndexes} required={required} disabled={disabled || readonly} autoFocus={autofocus} onBlur={handleBlur} onFocus={handleFocus} onChange={handleChange} aria-describedby={ariaDescribedByIds<T>(id)} > {!multiple && schema.default === undefined && <option value=''>{placeholder}</option>} {Array.isArray(enumOptions) && enumOptions.map(({ value, label }, i) => { const disabled = enumDisabled && enumDisabled.indexOf(value) !== -1; return ( <option key={i} value={String(i)} disabled={disabled}> {label} </option> ); })} </select> ); } export default SelectWidget; �������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/TextWidget.tsx��������������������0000664�0000000�0000000�00000001077�14467713645�0027775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; /** The `TextWidget` component uses the `BaseInputTemplate`. * * @param props - The `WidgetProps` for this component */ export default function TextWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); return <BaseInputTemplate {...props} />; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/TextareaWidget.tsx����������������0000664�0000000�0000000�00000003075�14467713645�0030626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent, useCallback } from 'react'; import { ariaDescribedByIds, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; /** The `TextareaWidget` is a widget for rendering input fields as textarea. * * @param props - The `WidgetProps` for this component */ function TextareaWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, options = {}, placeholder, value, required, disabled, readonly, autofocus = false, onChange, onBlur, onFocus, }: WidgetProps<T, S, F>) { const handleChange = useCallback( ({ target: { value } }: ChangeEvent<HTMLTextAreaElement>) => onChange(value === '' ? options.emptyValue : value), [onChange, options.emptyValue] ); const handleBlur = useCallback( ({ target: { value } }: FocusEvent<HTMLTextAreaElement>) => onBlur(id, value), [onBlur, id] ); const handleFocus = useCallback( ({ target: { value } }: FocusEvent<HTMLTextAreaElement>) => onFocus(id, value), [id, onFocus] ); return ( <textarea id={id} name={id} className='form-control' value={value ? value : ''} placeholder={placeholder} required={required} disabled={disabled} readOnly={readonly} autoFocus={autofocus} rows={options.rows} onBlur={handleBlur} onFocus={handleFocus} onChange={handleChange} aria-describedby={ariaDescribedByIds<T>(id)} /> ); } TextareaWidget.defaultProps = { autofocus: false, options: {}, }; export default TextareaWidget; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/TimeWidget.tsx��������������������0000664�0000000�0000000�00000001565�14467713645�0027751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { useCallback } from 'react'; import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; /** The `TimeWidget` component uses the `BaseInputTemplate` changing the type to `time` and transforms * the value to undefined when it is falsy during the `onChange` handling. * * @param props - The `WidgetProps` for this component */ export default function TimeWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { onChange, options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); const handleChange = useCallback((value: any) => onChange(value ? `${value}:00` : undefined), [onChange]); return <BaseInputTemplate type='time' {...props} onChange={handleChange} />; } �������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/URLWidget.tsx���������������������0000664�0000000�0000000�00000001143�14467713645�0027505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; /** The `URLWidget` component uses the `BaseInputTemplate` changing the type to `url`. * * @param props - The `WidgetProps` for this component */ export default function URLWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); return <BaseInputTemplate type='url' {...props} />; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/UpDownWidget.tsx������������������0000664�0000000�0000000�00000001157�14467713645�0030264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { getTemplate, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; /** The `UpDownWidget` component uses the `BaseInputTemplate` changing the type to `number`. * * @param props - The `WidgetProps` for this component */ export default function UpDownWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); return <BaseInputTemplate type='number' {...props} />; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/components/widgets/index.ts��������������������������0000664�0000000�0000000�00000002655�14467713645�0026627�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RegistryWidgetsType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import AltDateWidget from './AltDateWidget'; import AltDateTimeWidget from './AltDateTimeWidget'; import CheckboxWidget from './CheckboxWidget'; import CheckboxesWidget from './CheckboxesWidget'; import ColorWidget from './ColorWidget'; import DateWidget from './DateWidget'; import DateTimeWidget from './DateTimeWidget'; import EmailWidget from './EmailWidget'; import FileWidget from './FileWidget'; import HiddenWidget from './HiddenWidget'; import PasswordWidget from './PasswordWidget'; import RadioWidget from './RadioWidget'; import RangeWidget from './RangeWidget'; import SelectWidget from './SelectWidget'; import TextareaWidget from './TextareaWidget'; import TextWidget from './TextWidget'; import TimeWidget from './TimeWidget'; import URLWidget from './URLWidget'; import UpDownWidget from './UpDownWidget'; function widgets< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): RegistryWidgetsType<T, S, F> { return { AltDateWidget, AltDateTimeWidget, CheckboxWidget, CheckboxesWidget, ColorWidget, DateWidget, DateTimeWidget, EmailWidget, FileWidget, HiddenWidget, PasswordWidget, RadioWidget, RangeWidget, SelectWidget, TextWidget, TextareaWidget, TimeWidget, UpDownWidget, URLWidget, }; } export default widgets; �����������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/getDefaultRegistry.ts��������������������������������0000664�0000000�0000000�00000001704�14467713645�0025474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { englishStringTranslator, FormContextType, Registry, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import fields from './components/fields'; import templates from './components/templates'; import widgets from './components/widgets'; /** The default registry consists of all the fields, templates and widgets provided in the core implementation, * plus an empty `rootSchema` and `formContext. We omit schemaUtils here because it cannot be defaulted without a * rootSchema and validator. It will be added into the computed registry later in the Form. */ export default function getDefaultRegistry< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): Omit<Registry<T, S, F>, 'schemaUtils'> { return { fields: fields<T, S, F>(), templates: templates<T, S, F>(), widgets: widgets<T, S, F>(), rootSchema: {} as S, formContext: {} as F, translateString: englishStringTranslator, }; } ������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/index.ts���������������������������������������������0000664�0000000�0000000�00000000473�14467713645�0022770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Form, { FormProps, FormState, IChangeEvent } from './components/Form'; import withTheme, { ThemeProps } from './withTheme'; import getDefaultRegistry from './getDefaultRegistry'; export type { FormProps, FormState, IChangeEvent, ThemeProps }; export { withTheme, getDefaultRegistry }; export default Form; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/src/withTheme.tsx����������������������������������������0000664�0000000�0000000�00000003021�14467713645�0023777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ComponentType, ForwardedRef, forwardRef } from 'react'; import Form, { FormProps } from './components/Form'; import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The properties for the `withTheme` function, essentially a subset of properties from the `FormProps` that can be * overridden while creating a theme */ export type ThemeProps<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any> = Pick< FormProps<T, S, F>, 'fields' | 'templates' | 'widgets' | '_internalFormWrapper' >; /** A Higher-Order component that creates a wrapper around a `Form` with the overrides from the `WithThemeProps` */ export default function withTheme<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( themeProps: ThemeProps<T, S, F> ): ComponentType<FormProps<T, S, F>> { return forwardRef( ({ fields, widgets, templates, ...directProps }: FormProps<T, S, F>, ref: ForwardedRef<Form<T, S, F>>) => { fields = { ...themeProps?.fields, ...fields }; widgets = { ...themeProps?.widgets, ...widgets }; templates = { ...themeProps?.templates, ...templates, ButtonTemplates: { ...themeProps?.templates?.ButtonTemplates, ...templates?.ButtonTemplates, }, }; return ( <Form<T, S, F> {...themeProps} {...directProps} fields={fields} widgets={widgets} templates={templates} ref={ref} /> ); } ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/����������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021475�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/.eslintrc�������������������������������������������0000664�0000000�0000000�00000000263�14467713645�0023322�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "env": { "mocha": true }, "globals": { "d": true }, "rules": { "no-unused-vars": [ 2, { "varsIgnorePattern": "^d$" } ] } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/ArrayField.test.jsx���������������������������������0000664�0000000�0000000�00000215777�14467713645�0025246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { Simulate } from 'react-dom/test-utils'; import sinon from 'sinon'; import { createFormComponent, createSandbox, submitForm } from './test_utils'; import SchemaField from '../src/components/fields/SchemaField'; const ArrayKeyDataAttr = 'data-rjsf-itemkey'; const ExposedArrayKeyTemplate = function (props) { return ( <div className='array'> {props.items && props.items.map((element) => ( <div key={element.key} className='array-item' data-rjsf-itemkey={element.key}> <div>{element.children}</div> {(element.hasMoveUp || element.hasMoveDown) && ( <button className='array-item-move-down' onClick={element.onReorderClick(element.index, element.index + 1)} > Down </button> )} {(element.hasMoveUp || element.hasMoveDown) && ( <button className='array-item-move-up' onClick={element.onReorderClick(element.index, element.index - 1)}> Up </button> )} {element.hasCopy && ( <button className='array-item-copy' onClick={element.onCopyIndexClick(element.index)}> Copy </button> )} {element.hasRemove && ( <button className='array-item-remove' onClick={element.onDropIndexClick(element.index)}> Remove </button> )} <button onClick={element.onDropIndexClick(element.index)}>Delete</button> <hr /> </div> ))} {props.canAdd && ( <div className='array-item-add'> <button onClick={props.onAddClick} type='button'> Add New </button> </div> )} </div> ); }; const CustomOnAddClickTemplate = function (props) { return ( <div className='array'> {props.items && props.items.map((element) => ( <div key={element.key} className='array-item'> <div>{element.children}</div> </div> ))} {props.canAdd && ( <div className='array-item-add'> <button onClick={() => props.onAddClick()} type='button'> Add New </button> </div> )} </div> ); }; describe('ArrayField', () => { let sandbox; const CustomComponent = (props) => { return <div id='custom'>{props.rawErrors}</div>; }; const CustomSelectComponent = (props) => { return ( <select> {props.value.map((item, index) => ( <option key={index} id='custom-select'> {item} </option> ))} </select> ); }; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('Unsupported array schema', () => { it('should warn on missing items descriptor', () => { const { node } = createFormComponent({ schema: { type: 'array' } }); expect(node.querySelector('.field-array > .unsupported-field').textContent).to.contain( 'Missing items definition' ); }); it('should be able to be overwritten with a custom UnsupportedField component', () => { const CustomUnsupportedField = function () { return <span id='custom'>Custom UnsupportedField</span>; }; const templates = { UnsupportedFieldTemplate: CustomUnsupportedField }; const { node } = createFormComponent({ schema: { type: 'array' }, templates, }); expect(node.querySelectorAll('#custom')[0].textContent).to.eql('Custom UnsupportedField'); }); }); describe('Malformed nested array formData', () => { const schema = { type: 'object', properties: { foo: { type: 'array', items: { type: 'string' }, }, }, }; it('should contain no field in the list when nested array formData is explicitly null', () => { const { node } = createFormComponent({ schema, formData: { foo: null }, }); expect(node.querySelectorAll('.field-string')).to.have.length.of(0); }); }); describe('Nullable array formData', () => { const schema = { type: 'object', properties: { foo: { type: ['array', 'null'], items: { type: 'string' }, }, }, }; it('should contain no field in the list when nested array formData is explicitly null', () => { const { node } = createFormComponent({ schema, formData: { foo: null }, }); expect(node.querySelectorAll('.field-string')).to.have.length.of(0); }); it('should contain a field in the list when nested array formData is a single item', () => { const { node } = createFormComponent({ schema, formData: { foo: ['test'] }, }); expect(node.querySelectorAll('.field-string')).to.have.length.of(1); }); }); describe('List of inputs', () => { const schema = { type: 'array', title: 'my list', description: 'my description', items: { type: 'string' }, }; it('should render a fieldset', () => { const { node } = createFormComponent({ schema }); const fieldset = node.querySelectorAll('fieldset'); expect(fieldset).to.have.length.of(1); expect(fieldset[0].id).eql('root'); }); it('should render a fieldset legend', () => { const { node } = createFormComponent({ schema }); const legend = node.querySelector('fieldset > legend'); expect(legend.textContent).eql('my list'); expect(legend.id).eql('root__title'); }); it('should render a description', () => { const { node } = createFormComponent({ schema }); const description = node.querySelector('fieldset > .field-description'); expect(description.textContent).eql('my description'); expect(description.id).eql('root__description'); }); it('should not render a description when label is false', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:label': false }, }); const description = node.querySelector('fieldset > .field-description'); expect(description).eql(null); }); it('should render a hidden list', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:widget': 'hidden', }, }); expect(node.querySelector('div.hidden > fieldset')).to.exist; }); it('should render a customized title', () => { const CustomTitleField = ({ title }) => <div id='custom'>{title}</div>; const { node } = createFormComponent({ schema, templates: { TitleFieldTemplate: CustomTitleField }, }); expect(node.querySelector('fieldset > #custom').textContent).to.eql('my list'); }); it('should render a customized description', () => { const CustomDescriptionField = ({ description }) => <div id='custom'>{description}</div>; const { node } = createFormComponent({ schema, templates: { DescriptionFieldTemplate: CustomDescriptionField, }, }); expect(node.querySelector('fieldset > #custom').textContent).to.eql('my description'); }); it('should render a customized file widget', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:widget': 'files', }, widgets: { FileWidget: CustomComponent }, }); expect(node.querySelector('#custom')).to.exist; }); it('should pass uiSchema to normal array field', () => { const { node } = createFormComponent({ schema, uiSchema: { items: { 'ui:placeholder': 'Placeholder...', }, }, formData: ['foo', 'barr'], }); expect(node.querySelectorAll("input[placeholder='Placeholder...']")).to.have.length.of(2); }); it('should pass rawErrors down to custom array field templates', () => { const schema = { type: 'array', title: 'my list', description: 'my description', items: { type: 'string' }, minItems: 2, }; const { node } = createFormComponent({ schema, templates: { ArrayFieldTemplate: CustomComponent, }, formData: [1], liveValidate: true, }); const matches = node.querySelectorAll('#custom'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.eql('must NOT have fewer than 2 items'); }); it('should contain no field in the list by default', () => { const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('.field-string')).to.have.length.of(0); }); it('should have an add button', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('.array-item-add button')).not.eql(null); }); it('should not have an add button if addable is false', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:options': { addable: false } }, }); expect(node.querySelector('.array-item-add button')).to.be.null; }); it('should add a new field when clicking the add button', () => { const { node } = createFormComponent({ schema }); Simulate.click(node.querySelector('.array-item-add button')); expect(node.querySelectorAll('.field-string')).to.have.length.of(1); }); it('should assign new keys/ids when clicking the add button', () => { const { node } = createFormComponent({ schema, templates: { ArrayFieldTemplate: ExposedArrayKeyTemplate }, }); Simulate.click(node.querySelector('.array-item-add button')); expect(node.querySelector('.array-item').hasAttribute(ArrayKeyDataAttr)).to.be.true; }); it('should add a field when clicking add button even if event is not passed to onAddClick', () => { const { node } = createFormComponent({ schema, templates: { ArrayFieldTemplate: CustomOnAddClickTemplate }, }); Simulate.click(node.querySelector('.array-item-add button')); expect(node.querySelector('.array-item')).not.to.be.null; }); it('should not provide an add button if length equals maxItems', () => { const { node } = createFormComponent({ schema: { maxItems: 2, ...schema }, formData: ['foo', 'bar'], }); expect(node.querySelector('.array-item-add button')).to.be.null; }); it('should provide an add button if length is lesser than maxItems', () => { const { node } = createFormComponent({ schema: { maxItems: 2, ...schema }, formData: ['foo'], }); expect(node.querySelector('.array-item-add button')).not.eql(null); }); it('should retain existing row keys/ids when adding new row', () => { const { node } = createFormComponent({ schema: { maxItems: 2, ...schema }, formData: ['foo'], templates: { ArrayFieldTemplate: ExposedArrayKeyTemplate }, }); const startRows = node.querySelectorAll('.array-item'); const startRow1_key = startRows[0].getAttribute(ArrayKeyDataAttr); const startRow2_key = startRows[1] ? startRows[1].getAttribute(ArrayKeyDataAttr) : undefined; Simulate.click(node.querySelector('.array-item-add button')); const endRows = node.querySelectorAll('.array-item'); const endRow1_key = endRows[0].getAttribute(ArrayKeyDataAttr); const endRow2_key = endRows[1].getAttribute(ArrayKeyDataAttr); expect(startRow1_key).to.equal(endRow1_key); expect(startRow2_key).to.not.equal(endRow2_key); expect(startRow2_key).to.be.undefined; expect(endRows[0].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[1].hasAttribute(ArrayKeyDataAttr)).to.be.true; }); it('should allow inserting anywhere in list', () => { function addItemAboveOrBelow(item) { const beforeIndex = item.index; const addBeforeButton = ( <button key={`array-item-add-before-${item.key}`} className={'array-item-move-before array-item-move-before-to-' + beforeIndex} onClick={item.onAddIndexClick(beforeIndex)} > {'Add Item Above'} </button> ); const afterIndex = item.index + 1; const addAfterButton = ( <button key={`array-item-add-after-${item.key}`} className={'array-item-move-after array-item-move-after-to-' + afterIndex} onClick={item.onAddIndexClick(afterIndex)} > {'Add Item Below'} </button> ); return ( <div key={item.key} data-rjsf-itemkey={item.key} className={`array-item item-${item.index}`}> <div>{addBeforeButton}</div> {item.children} <div>{addAfterButton}</div> <hr /> </div> ); } function addAboveOrBelowArrayFieldTemplate(props) { return <div className='array'>{props.items.map(addItemAboveOrBelow)}</div>; } const { node } = createFormComponent({ schema, formData: ['foo', 'bar', 'baz'], templates: { ArrayFieldTemplate: addAboveOrBelowArrayFieldTemplate }, }); const addBeforeButtons = node.querySelectorAll('.array-item-move-before'); const addAfterButtons = node.querySelectorAll('.array-item-move-after'); const startRows = node.querySelectorAll('.array-item'); const startRow1_key = startRows[0].getAttribute(ArrayKeyDataAttr); const startRow2_key = startRows[1].getAttribute(ArrayKeyDataAttr); const startRow3_key = startRows[2].getAttribute(ArrayKeyDataAttr); Simulate.click(addBeforeButtons[0]); Simulate.click(addAfterButtons[0]); const endRows = node.querySelectorAll('.array-item'); const endRow2_key = endRows[1].getAttribute(ArrayKeyDataAttr); const endRow4_key = endRows[3].getAttribute(ArrayKeyDataAttr); const endRow5_key = endRows[4].getAttribute(ArrayKeyDataAttr); expect(startRow1_key).to.equal(endRow2_key); expect(startRow2_key).to.equal(endRow4_key); expect(startRow3_key).to.equal(endRow5_key); expect(endRows[0].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[1].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[2].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[3].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[4].hasAttribute(ArrayKeyDataAttr)).to.be.true; }); it('should not provide an add button if addable is expliclty false regardless maxItems value', () => { const { node } = createFormComponent({ schema: { maxItems: 2, ...schema }, formData: ['foo'], uiSchema: { 'ui:options': { addable: false, }, }, }); expect(node.querySelector('.array-item-add button')).to.be.null; }); it('should ignore addable value if maxItems constraint is not satisfied', () => { const { node } = createFormComponent({ schema: { maxItems: 2, ...schema }, formData: ['foo', 'bar'], uiSchema: { 'ui:options': { addable: true, }, }, }); expect(node.querySelector('.array-item-add button')).to.be.null; }); it('should mark a non-null array item widget as required', () => { const { node } = createFormComponent({ schema }); Simulate.click(node.querySelector('.array-item-add button')); expect(node.querySelector('.field-string input[type=text]').required).eql(true); }); it('should fill an array field with data', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], }); const inputs = node.querySelectorAll('.field-string input[type=text]'); expect(inputs).to.have.length.of(2); expect(inputs[0].value).eql('foo'); expect(inputs[1].value).eql('bar'); }); it("shouldn't have reorder buttons when list length <= 1", () => { const { node } = createFormComponent({ schema, formData: ['foo'] }); expect(node.querySelector('.array-item-move-up')).eql(null); expect(node.querySelector('.array-item-move-down')).eql(null); }); it('should have reorder buttons when list length >= 2', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], }); expect(node.querySelector('.array-item-move-up')).not.eql(null); expect(node.querySelector('.array-item-move-down')).not.eql(null); }); it('should move down a field from the list', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar', 'baz'], }); const moveDownBtns = node.querySelectorAll('.array-item-move-down'); Simulate.click(moveDownBtns[0]); const inputs = node.querySelectorAll('.field-string input[type=text]'); expect(inputs).to.have.length.of(3); expect(inputs[0].value).eql('bar'); expect(inputs[1].value).eql('foo'); expect(inputs[2].value).eql('baz'); }); it('should move up a field from the list', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar', 'baz'], }); const moveUpBtns = node.querySelectorAll('.array-item-move-up'); Simulate.click(moveUpBtns[2]); const inputs = node.querySelectorAll('.field-string input[type=text]'); expect(inputs).to.have.length.of(3); expect(inputs[0].value).eql('foo'); expect(inputs[1].value).eql('baz'); expect(inputs[2].value).eql('bar'); }); it('should retain row keys/ids when moving down', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar', 'baz'], templates: { ArrayFieldTemplate: ExposedArrayKeyTemplate }, }); const moveDownBtns = node.querySelectorAll('.array-item-move-down'); const startRows = node.querySelectorAll('.array-item'); const startRow1_key = startRows[0].getAttribute(ArrayKeyDataAttr); const startRow2_key = startRows[1].getAttribute(ArrayKeyDataAttr); const startRow3_key = startRows[2].getAttribute(ArrayKeyDataAttr); Simulate.click(moveDownBtns[0]); const endRows = node.querySelectorAll('.array-item'); const endRow1_key = endRows[0].getAttribute(ArrayKeyDataAttr); const endRow2_key = endRows[1].getAttribute(ArrayKeyDataAttr); const endRow3_key = endRows[2].getAttribute(ArrayKeyDataAttr); expect(startRow1_key).to.equal(endRow2_key); expect(startRow2_key).to.equal(endRow1_key); expect(startRow3_key).to.equal(endRow3_key); expect(endRows[0].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[1].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[2].hasAttribute(ArrayKeyDataAttr)).to.be.true; }); it('should retain row keys/ids when moving up', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar', 'baz'], templates: { ArrayFieldTemplate: ExposedArrayKeyTemplate }, }); const moveUpBtns = node.querySelectorAll('.array-item-move-up'); const startRows = node.querySelectorAll('.array-item'); const startRow1_key = startRows[0].getAttribute(ArrayKeyDataAttr); const startRow2_key = startRows[1].getAttribute(ArrayKeyDataAttr); const startRow3_key = startRows[2].getAttribute(ArrayKeyDataAttr); Simulate.click(moveUpBtns[2]); const endRows = node.querySelectorAll('.array-item'); const endRow1_key = endRows[0].getAttribute(ArrayKeyDataAttr); const endRow2_key = endRows[1].getAttribute(ArrayKeyDataAttr); const endRow3_key = endRows[2].getAttribute(ArrayKeyDataAttr); expect(startRow1_key).to.equal(endRow1_key); expect(startRow2_key).to.equal(endRow3_key); expect(startRow3_key).to.equal(endRow2_key); expect(endRows[0].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[1].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[2].hasAttribute(ArrayKeyDataAttr)).to.be.true; }); it('should move from first to last in the list', () => { function moveAnywhereArrayItemTemplate(props) { const buttons = []; for (let i = 0; i < 3; i++) { buttons.push( <button key={i} className={'array-item-move-to-' + i} onClick={props.onReorderClick(props.index, i)}> {'Move item to index ' + i} </button> ); } return ( <div key={props.key} data-rjsf-itemkey={props.key} className={`array-item item-${props.index}`}> {props.children} {buttons} </div> ); } function moveAnywhereArrayFieldTemplate(props) { return <div className='array'>{props.items.map(moveAnywhereArrayItemTemplate)}</div>; } const { node } = createFormComponent({ schema, formData: ['foo', 'bar', 'baz'], templates: { ArrayFieldTemplate: moveAnywhereArrayFieldTemplate }, }); const startRows = node.querySelectorAll('.array-item'); const startRow1_key = startRows[0].getAttribute(ArrayKeyDataAttr); const startRow2_key = startRows[1].getAttribute(ArrayKeyDataAttr); const startRow3_key = startRows[2].getAttribute(ArrayKeyDataAttr); const button = node.querySelector('.item-0 .array-item-move-to-2'); Simulate.click(button); const inputs = node.querySelectorAll('.field-string input[type=text]'); expect(inputs[0].value).eql('bar'); expect(inputs[1].value).eql('baz'); expect(inputs[2].value).eql('foo'); const endRows = node.querySelectorAll('.array-item'); const endRow1_key = endRows[0].getAttribute(ArrayKeyDataAttr); const endRow2_key = endRows[1].getAttribute(ArrayKeyDataAttr); const endRow3_key = endRows[2].getAttribute(ArrayKeyDataAttr); expect(startRow1_key).to.equal(endRow3_key); expect(startRow2_key).to.equal(endRow1_key); expect(startRow3_key).to.equal(endRow2_key); expect(endRows[0].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[1].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[2].hasAttribute(ArrayKeyDataAttr)).to.be.true; }); it('should disable move buttons on the ends of the list', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], }); const moveUpBtns = node.querySelectorAll('.array-item-move-up'); const moveDownBtns = node.querySelectorAll('.array-item-move-down'); expect(moveUpBtns[0].disabled).eql(true); expect(moveDownBtns[0].disabled).eql(false); expect(moveUpBtns[1].disabled).eql(false); expect(moveDownBtns[1].disabled).eql(true); }); it('should not show move up/down buttons if global orderable is false', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], uiSchema: { 'ui:globalOptions': { orderable: false } }, }); const moveUpBtns = node.querySelector('.array-item-move-up'); const moveDownBtns = node.querySelector('.array-item-move-down'); expect(moveUpBtns).to.be.null; expect(moveDownBtns).to.be.null; }); it('should not show move up/down buttons if orderable is false', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], uiSchema: { 'ui:options': { orderable: false } }, }); const moveUpBtns = node.querySelector('.array-item-move-up'); const moveDownBtns = node.querySelector('.array-item-move-down'); expect(moveUpBtns).to.be.null; expect(moveDownBtns).to.be.null; }); it('should not show move up/down buttons if ui:orderable is false', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], uiSchema: { 'ui:orderable': false }, }); const moveUpBtns = node.querySelector('.array-item-move-up'); const moveDownBtns = node.querySelector('.array-item-move-down'); expect(moveUpBtns).to.be.null; expect(moveDownBtns).to.be.null; }); it('should remove a field from the list', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], }); const dropBtns = node.querySelectorAll('.array-item-remove'); Simulate.click(dropBtns[0]); const inputs = node.querySelectorAll('.field-string input[type=text]'); expect(inputs).to.have.length.of(1); expect(inputs[0].value).eql('bar'); }); it('should delete item from list and correct indices', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar', 'baz'], }); const deleteBtns = node.querySelectorAll('.array-item-remove'); Simulate.click(deleteBtns[0]); const inputs = node.querySelectorAll('.field-string input[type=text]'); Simulate.change(inputs[0], { target: { value: 'fuzz' } }); expect(inputs).to.have.length.of(2); expect(inputs[0].value).eql('fuzz'); expect(inputs[1].value).eql('baz'); }); it('should retain row keys/ids of remaining rows when a row is removed', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], templates: { ArrayFieldTemplate: ExposedArrayKeyTemplate }, }); const startRows = node.querySelectorAll('.array-item'); const startRow2_key = startRows[1].getAttribute(ArrayKeyDataAttr); const dropBtns = node.querySelectorAll('.array-item-remove'); Simulate.click(dropBtns[0]); const endRows = node.querySelectorAll('.array-item'); const endRow1_key = endRows[0].getAttribute(ArrayKeyDataAttr); expect(startRow2_key).to.equal(endRow1_key); expect(endRows[0].hasAttribute(ArrayKeyDataAttr)).to.be.true; }); it('should not show remove button if global removable is false', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], uiSchema: { 'ui:globalOptions': { removable: false } }, }); const dropBtn = node.querySelector('.array-item-remove'); expect(dropBtn).to.be.null; }); it('should not show remove button if removable is false', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], uiSchema: { 'ui:options': { removable: false } }, }); const dropBtn = node.querySelector('.array-item-remove'); expect(dropBtn).to.be.null; }); it('should not show remove button if ui:removable is false', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], uiSchema: { 'ui:removable': false }, }); const dropBtn = node.querySelector('.array-item-remove'); expect(dropBtn).to.be.null; }); it('should force revalidation when a field is removed', () => { // refs #195 const { node } = createFormComponent({ schema: { ...schema, items: { ...schema.items, minLength: 4 }, }, formData: ['foo', 'bar!'], }); try { Simulate.submit(node); } catch (e) { // Silencing error thrown as failure is expected here } expect(node.querySelectorAll('.has-error .error-detail')).to.have.length.of(1); const dropBtns = node.querySelectorAll('.array-item-remove'); Simulate.click(dropBtns[0]); expect(node.querySelectorAll('.has-error .error-detail')).to.have.length.of(0); }); it('should not show copy button by default', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], }); const dropBtn = node.querySelector('.array-item-copy'); expect(dropBtn).to.be.null; }); it('should show copy button if global options copyable is true', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], uiSchema: { 'ui:globalOptions': { copyable: true } }, }); const dropBtn = node.querySelector('.array-item-copy'); expect(dropBtn).not.to.be.null; }); it('should show copy button if copyable is true', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], uiSchema: { 'ui:options': { copyable: true } }, }); const dropBtn = node.querySelector('.array-item-copy'); expect(dropBtn).not.to.be.null; }); it('should show copy button if ui:copyable is true', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], uiSchema: { 'ui:copyable': true }, }); const dropBtn = node.querySelector('.array-item-copy'); expect(dropBtn).not.to.be.null; }); it('should copy a field in the list just below the item clicked', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], uiSchema: { 'ui:copyable': true }, }); const copyBtns = node.querySelectorAll('.array-item-copy'); Simulate.click(copyBtns[0]); const inputs = node.querySelectorAll('.field-string input[type=text]'); expect(inputs).to.have.length.of(3); expect(inputs[0].value).eql('foo'); expect(inputs[1].value).eql('foo'); expect(inputs[2].value).eql('bar'); }); it('should handle cleared field values in the array', () => { const schema = { type: 'array', items: { type: 'integer' }, }; const formData = [1, 2, 3]; const { node, onChange, onError } = createFormComponent({ liveValidate: true, schema, formData, }); Simulate.change(node.querySelector('#root_1'), { target: { value: '' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { errorSchema: { 1: { __errors: ['must be integer'] } }, errors: [ { message: 'must be integer', name: 'type', params: { type: 'integer' }, property: '.1', schemaPath: '#/items/type', stack: '.1 must be integer', }, ], formData: [1, null, 3], }, 'root_1' ); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must be integer', name: 'type', params: { type: 'integer' }, property: '.1', schemaPath: '#/items/type', stack: '.1 must be integer', }, ]); }); it('should render the input widgets with the expected ids', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], }); const inputs = node.querySelectorAll('input[type=text]'); expect(inputs[0].id).eql('root_0'); expect(inputs[1].id).eql('root_1'); }); it('should render nested input widgets with the expected ids', () => { const complexSchema = { type: 'object', properties: { foo: { type: 'array', items: { type: 'object', properties: { bar: { type: 'string' }, baz: { type: 'string' }, }, }, }, }, }; const { node } = createFormComponent({ schema: complexSchema, formData: { foo: [ { bar: 'bar1', baz: 'baz1' }, { bar: 'bar2', baz: 'baz2' }, ], }, }); const inputs = node.querySelectorAll('input[type=text]'); expect(inputs[0].id).eql('root_foo_0_bar'); expect(inputs[1].id).eql('root_foo_0_baz'); expect(inputs[2].id).eql('root_foo_1_bar'); expect(inputs[3].id).eql('root_foo_1_baz'); }); it('should render enough inputs with proper defaults to match minItems in schema when no formData is set', () => { const complexSchema = { type: 'object', definitions: { Thing: { type: 'object', properties: { name: { type: 'string', default: 'Default name', }, }, }, }, properties: { foo: { type: 'array', minItems: 2, items: { $ref: '#/definitions/Thing', }, }, }, }; let form = createFormComponent({ schema: complexSchema, formData: {}, }); let inputs = form.node.querySelectorAll('input[type=text]'); expect(inputs[0].value).eql('Default name'); expect(inputs[1].value).eql('Default name'); }); it('should render an input for each default value, even when this is greater than minItems', () => { const schema = { type: 'object', properties: { turtles: { type: 'array', minItems: 2, default: ['Raphael', 'Michaelangelo', 'Donatello', 'Leonardo'], items: { type: 'string', }, }, }, }; const { node } = createFormComponent({ schema: schema }); const inputs = node.querySelectorAll('input[type=text]'); expect(inputs.length).to.eql(4); expect(inputs[0].value).to.eql('Raphael'); expect(inputs[1].value).to.eql('Michaelangelo'); expect(inputs[2].value).to.eql('Donatello'); expect(inputs[3].value).to.eql('Leonardo'); }); it('should render enough input to match minItems, populating the first with default values, and the rest empty', () => { const schema = { type: 'object', properties: { turtles: { type: 'array', minItems: 4, default: ['Raphael', 'Michaelangelo'], items: { type: 'string', }, }, }, }; const { node } = createFormComponent({ schema }); const inputs = node.querySelectorAll('input[type=text]'); expect(inputs.length).to.eql(4); expect(inputs[0].value).to.eql('Raphael'); expect(inputs[1].value).to.eql('Michaelangelo'); expect(inputs[2].value).to.eql(''); expect(inputs[3].value).to.eql(''); }); it('should render enough input to match minItems, populating the first with default values, and the rest with the item default', () => { const schema = { type: 'object', properties: { turtles: { type: 'array', minItems: 4, default: ['Raphael', 'Michaelangelo'], items: { type: 'string', default: 'Unknown', }, }, }, }; const { node } = createFormComponent({ schema }); const inputs = node.querySelectorAll('input[type=text]'); expect(inputs.length).to.eql(4); expect(inputs[0].value).to.eql('Raphael'); expect(inputs[1].value).to.eql('Michaelangelo'); expect(inputs[2].value).to.eql('Unknown'); expect(inputs[3].value).to.eql('Unknown'); }); it('should not add minItems extra formData entries when schema item is a multiselect', () => { const schema = { type: 'object', properties: { multipleChoicesList: { type: 'array', minItems: 3, uniqueItems: true, items: { type: 'string', enum: ['Aramis', 'Athos', 'Porthos', "d'Artagnan"], }, }, }, }; const uiSchema = { multipleChoicesList: { 'ui:widget': 'checkboxes', }, }; let form = createFormComponent({ schema: schema, uiSchema: uiSchema, formData: {}, liveValidate: true, noValidate: true, }); submitForm(form.node); sinon.assert.calledWithMatch(form.onSubmit.lastCall, { formData: { multipleChoicesList: [] }, }); form = createFormComponent({ schema: schema, uiSchema: uiSchema, formData: {}, liveValidate: true, noValidate: false, }); submitForm(form.node); sinon.assert.calledWithMatch(form.onError.lastCall, [ { message: 'must NOT have fewer than 3 items', name: 'minItems', params: { limit: 3 }, property: '.multipleChoicesList', schemaPath: '#/properties/multipleChoicesList/minItems', stack: '.multipleChoicesList must NOT have fewer than 3 items', }, ]); }); it('should honor given formData, even when it does not meet ths minItems-requirement', () => { const complexSchema = { type: 'object', definitions: { Thing: { type: 'object', properties: { name: { type: 'string', default: 'Default name', }, }, }, }, properties: { foo: { type: 'array', minItems: 2, items: { $ref: '#/definitions/Thing', }, }, }, }; const form = createFormComponent({ schema: complexSchema, formData: { foo: [] }, }); const inputs = form.node.querySelectorAll('input[type=text]'); expect(inputs.length).eql(0); }); }); describe('Multiple choices list', () => { const schema = { type: 'array', title: 'My field', items: { enum: ['foo', 'bar', 'fuzz'], type: 'string', }, uniqueItems: true, }; describe('Select multiple widget', () => { it('should render a select widget', () => { const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('select')).to.have.length.of(1); }); it('should render a select widget with a label', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('.field label').textContent).eql('My field'); }); it('should render a select widget with multiple attribute', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('.field select').getAttribute('multiple')).not.to.be.null; }); it('should render options', () => { const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('select option')).to.have.length.of(3); }); it('should handle a change event', () => { const { node, onChange } = createFormComponent({ schema }); Simulate.change(node.querySelector('.field select'), { target: { options: [ { selected: true, value: 0 }, // use index { selected: true, value: 1 }, // use index { selected: false, value: 2 }, // use index ], }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: ['foo', 'bar'], }, 'root' ); }); it('should handle a blur event', () => { const onBlur = sandbox.spy(); const { node } = createFormComponent({ schema, onBlur }); const select = node.querySelector('.field select'); Simulate.blur(select, { target: { options: [ { selected: true, value: 0 }, // use index { selected: true, value: 1 }, // use index { selected: false, value: 2 }, // use index ], }, }); expect(onBlur.calledWith(select.id, ['foo', 'bar'])).to.be.true; }); it('should handle a focus event', () => { const onFocus = sandbox.spy(); const { node } = createFormComponent({ schema, onFocus }); const select = node.querySelector('.field select'); Simulate.focus(select, { target: { options: [ { selected: true, value: 0 }, // use index { selected: true, value: 1 }, // use index { selected: false, value: 2 }, // use index ], }, }); expect(onFocus.calledWith(select.id, ['foo', 'bar'])).to.be.true; }); it('should fill field with data', () => { const { node } = createFormComponent({ schema, formData: ['foo', 'bar'], }); const options = node.querySelectorAll('.field select option'); expect(options).to.have.length.of(3); expect(options[0].selected).eql(true); // foo expect(options[1].selected).eql(true); // bar expect(options[2].selected).eql(false); // fuzz }); it('should render the select widget with the expected id', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('select').id).eql('root'); }); it('should pass rawErrors down to custom widgets', () => { const { node } = createFormComponent({ schema, widgets: { SelectWidget: CustomComponent, }, formData: ['foo', 'foo'], liveValidate: true, }); const matches = node.querySelectorAll('#custom'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.eql('must NOT have duplicate items (items ## 1 and 0 are identical)'); }); it('should pass a label as prop to custom widgets', () => { const LabelComponent = ({ label }) => <div id='test'>{label}</div>; const { node } = createFormComponent({ schema, widgets: { SelectWidget: LabelComponent, }, }); const matches = node.querySelectorAll('#test'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.eql(schema.title); }); it('should pass uiSchema to multiselect', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:enumDisabled': ['bar'], }, }); expect(node.querySelector("option[value='1']").disabled).to.eql(true); // use index }); }); describe('CheckboxesWidget', () => { const uiSchema = { 'ui:widget': 'checkboxes', }; it('should render the expected number of checkboxes', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=checkbox]')).to.have.length.of(3); }); it('should render the expected labels', () => { const { node } = createFormComponent({ schema, uiSchema }); const labels = [].map.call(node.querySelectorAll('.checkbox label'), (node) => node.textContent); expect(labels).eql(['foo', 'bar', 'fuzz']); }); it('should handle a change event', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, }); Simulate.change(node.querySelectorAll('[type=checkbox]')[0], { target: { checked: true }, }); Simulate.change(node.querySelectorAll('[type=checkbox]')[2], { target: { checked: true }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: ['foo', 'fuzz'], }, 'root' ); }); it('should fill properly field with data that is not an array and handle change event', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: 'foo', }); let labels = [].map.call(node.querySelectorAll('[type=checkbox]'), (node) => node.checked); expect(labels).eql([true, false, false]); Simulate.change(node.querySelectorAll('[type=checkbox]')[2], { target: { checked: true }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: ['foo', 'fuzz'], }, 'root' ); labels = [].map.call(node.querySelectorAll('[type=checkbox]'), (node) => node.checked); expect(labels).eql([true, false, true]); }); it('should fill field with array of data', () => { const { node } = createFormComponent({ schema, uiSchema, formData: ['foo', 'fuzz'], }); const labels = [].map.call(node.querySelectorAll('[type=checkbox]'), (node) => node.checked); expect(labels).eql([true, false, true]); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelector('.checkboxes').id).eql('root'); }); it('should support inline checkboxes', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:widget': 'checkboxes', 'ui:options': { inline: true, }, }, }); expect(node.querySelectorAll('.checkbox-inline')).to.have.length.of(3); }); it('should pass rawErrors down to custom widgets', () => { const schema = { type: 'array', title: 'My field', items: { enum: ['foo', 'bar', 'fuzz'], type: 'string', }, minItems: 3, uniqueItems: true, }; const { node } = createFormComponent({ schema, widgets: { CheckboxesWidget: CustomComponent, }, uiSchema, formData: [], liveValidate: true, }); const matches = node.querySelectorAll('#custom'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.eql('must NOT have fewer than 3 items'); }); it('should pass uiSchema to checkboxes', () => { const { node } = createFormComponent({ schema: { type: 'array', items: { enum: ['foo', 'bar', 'fuzz'], type: 'string', }, uniqueItems: true, }, uiSchema: { 'ui:widget': 'checkboxes', 'ui:options': { inline: true, }, }, }); expect(node.querySelectorAll('.checkbox-inline')).to.have.length.of(3); }); }); }); describe('Multiple files field', () => { const schema = { type: 'array', title: 'My field', items: { type: 'string', format: 'data-url', }, }; it('should render an input[type=file] widget', () => { const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('input[type=file]')).to.have.length.of(1); }); it('should render a select widget with a label', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('.field label').textContent).eql('My field'); }); it('should render a file widget with multiple attribute', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('.field [type=file]').getAttribute('multiple')).not.to.be.null; }); it('should handle a two change events that results in two items in the list', async () => { sandbox.stub(window, 'FileReader').returns({ set onload(fn) { fn({ target: { result: 'data:text/plain;base64,x=' } }); }, // eslint-disable-next-line @typescript-eslint/no-empty-function readAsDataUrl() {}, }); const { node, onChange } = createFormComponent({ schema }); Simulate.change(node.querySelector('.field input[type=file]'), { target: { files: [{ name: 'file1.txt', size: 1, type: 'type' }], }, }); await new Promise(setImmediate); sinon.assert.calledWithMatch( onChange.lastCall, { formData: ['data:text/plain;name=file1.txt;base64,x='], }, 'root' ); Simulate.change(node.querySelector('.field input[type=file]'), { target: { files: [{ name: 'file2.txt', size: 2, type: 'type' }], }, }); await new Promise(setImmediate); sinon.assert.calledWithMatch( onChange.lastCall, { formData: ['data:text/plain;name=file1.txt;base64,x=', 'data:text/plain;name=file2.txt;base64,x='], }, 'root' ); }); it('should fill field with data', () => { const { node } = createFormComponent({ schema, formData: [ 'data:text/plain;name=file1.txt;base64,dGVzdDE=', 'data:image/png;name=file2.png;base64,ZmFrZXBuZw==', ], }); const li = node.querySelectorAll('.file-info li'); expect(li).to.have.length.of(2); expect(li[0].textContent).eql('file1.txt (text/plain, 5 bytes)'); expect(li[1].textContent).eql('file2.png (image/png, 7 bytes)'); }); it('should render the file widget with the expected id', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('input[type=file]').id).eql('root'); }); it('should pass uiSchema to files array', () => { const { node } = createFormComponent({ schema: { type: 'array', items: { type: 'string', }, }, uiSchema: { items: { 'ui:widget': 'file', 'ui:options': { accept: '.pdf' }, }, }, formData: [ 'data:text/plain;name=file1.pdf;base64,dGVzdDE=', 'data:image/png;name=file2.pdf;base64,ZmFrZXBuZw==', ], }); expect(node.querySelector('input[type=file]').accept).eql('.pdf'); }); it('should pass rawErrors down to custom widgets', () => { const schema = { type: 'array', title: 'My field', items: { type: 'string', format: 'data-url', }, minItems: 5, }; const { node } = createFormComponent({ schema, widgets: { FileWidget: CustomComponent, }, formData: [], liveValidate: true, }); const matches = node.querySelectorAll('#custom'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.eql('must NOT have fewer than 5 items'); }); }); describe('Nested lists', () => { const schema = { type: 'array', title: 'A list of arrays', items: { type: 'array', title: 'A list of numbers', items: { type: 'number', }, }, }; it('should render two lists of inputs inside of a list', () => { const { node } = createFormComponent({ schema, formData: [ [1, 2], [3, 4], ], }); expect(node.querySelectorAll('fieldset fieldset')).to.have.length.of(2); }); it('should add an inner list when clicking the add button', () => { const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('fieldset fieldset')).to.be.empty; Simulate.click(node.querySelector('.array-item-add button')); expect(node.querySelectorAll('fieldset fieldset')).to.have.length.of(1); }); it('should pass rawErrors down to every level of custom widgets', () => { const CustomItem = (props) => <div id='custom-item'>{props.children}</div>; const CustomTemplate = (props) => { return ( <div id='custom'> {props.items && props.items.map((p, i) => <CustomItem key={i} {...p} />)} <div id='custom-error'>{props.rawErrors && props.rawErrors.join(', ')}</div> </div> ); }; const schema = { type: 'array', title: 'A list of arrays', items: { type: 'array', title: 'A list of numbers', items: { type: 'number', }, minItems: 3, }, minItems: 2, }; const { node } = createFormComponent({ schema, templates: { ArrayFieldTemplate: CustomTemplate }, formData: [[]], liveValidate: true, }); const matches = node.querySelectorAll('#custom-error'); expect(matches).to.have.length.of(2); expect(matches[0].textContent).to.eql('must NOT have fewer than 3 items'); expect(matches[1].textContent).to.eql('must NOT have fewer than 2 items'); }); }); describe('Fixed items lists', () => { const schema = { type: 'array', title: 'List of fixed items', items: [ { type: 'string', title: 'Some text', }, { type: 'number', title: 'A number', }, ], }; const schemaAdditional = { type: 'array', title: 'List of fixed items', items: [ { type: 'number', title: 'A number', }, { type: 'number', title: 'Another number', }, ], additionalItems: { type: 'string', title: 'Additional item', }, }; it('should render a fieldset', () => { const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('fieldset')).to.have.length.of(1); }); it('should render a fieldset legend', () => { const { node } = createFormComponent({ schema }); const legend = node.querySelector('fieldset > legend'); expect(legend.textContent).eql('List of fixed items'); expect(legend.id).eql('root__title'); }); it('should render field widgets', () => { const { node } = createFormComponent({ schema }); const strInput = node.querySelector('fieldset .field-string input[type=text]'); const numInput = node.querySelector('fieldset .field-number input[type=number]'); expect(strInput.id).eql('root_0'); expect(numInput.id).eql('root_1'); }); it('should mark non-null item widgets as required', () => { const { node } = createFormComponent({ schema }); const strInput = node.querySelector('fieldset .field-string input[type=text]'); const numInput = node.querySelector('fieldset .field-number input[type=number]'); expect(strInput.required).eql(true); expect(numInput.required).eql(true); }); it('should fill fields with data', () => { const { node } = createFormComponent({ schema, formData: ['foo', 42], }); const strInput = node.querySelector('fieldset .field-string input[type=text]'); const numInput = node.querySelector('fieldset .field-number input[type=number]'); expect(strInput.value).eql('foo'); expect(numInput.value).eql('42'); }); it('should handle change events', () => { const { node, onChange } = createFormComponent({ schema }); const strInput = node.querySelector('fieldset .field-string input[type=text]'); const numInput = node.querySelector('fieldset .field-number input[type=number]'); Simulate.change(strInput, { target: { value: 'bar' } }); Simulate.change(numInput, { target: { value: '101' } }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: ['bar', 101], }, 'root' ); }); it('should generate additional fields and fill data', () => { const { node } = createFormComponent({ schema: schemaAdditional, formData: [1, 2, 'bar'], }); const addInput = node.querySelector('fieldset .field-string input[type=text]'); expect(addInput.id).eql('root_2'); expect(addInput.value).eql('bar'); }); it('should apply uiSchema to additionalItems', () => { const { node } = createFormComponent({ schema: schemaAdditional, uiSchema: { additionalItems: { 'ui:title': 'Custom title', }, }, formData: [1, 2, 'bar'], }); const label = node.querySelector('fieldset .field-string label.control-label'); expect(label.textContent).eql('Custom title*'); }); it('should have an add button if additionalItems is an object', () => { const { node } = createFormComponent({ schema: schemaAdditional }); expect(node.querySelector('.array-item-add button')).not.to.be.null; }); it('should not have an add button if additionalItems is not set', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('.array-item-add button')).to.be.null; }); it('should not have an add button if global addable is false', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:globalOptions': { addable: false } }, }); expect(node.querySelector('.array-item-add button')).to.be.null; }); it('should not have an add button if addable is false', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:options': { addable: false } }, }); expect(node.querySelector('.array-item-add button')).to.be.null; }); it('[fixed-noadditional] should not provide an add button regardless maxItems', () => { const { node } = createFormComponent({ schema: { maxItems: 3, ...schema }, }); expect(node.querySelector('.array-item-add button')).to.be.null; }); it('[fixed] should not provide an add button if length equals maxItems', () => { const { node } = createFormComponent({ schema: { maxItems: 2, ...schemaAdditional }, }); expect(node.querySelector('.array-item-add button')).to.be.null; }); it('[fixed] should provide an add button if length is lesser than maxItems', () => { const { node } = createFormComponent({ schema: { maxItems: 3, ...schemaAdditional }, }); expect(node.querySelector('.array-item-add button')).not.to.be.null; }); it('[fixed] should not provide an add button if addable is expliclty false regardless maxItems value', () => { const { node } = createFormComponent({ schema: { maxItems: 2, ...schema }, uiSchema: { 'ui:options': { addable: false, }, }, }); expect(node.querySelector('.array-item-add button')).to.be.null; }); it('[fixed] should ignore addable value if maxItems constraint is not satisfied', () => { const { node } = createFormComponent({ schema: { maxItems: 2, ...schema }, uiSchema: { 'ui:options': { addable: true, }, }, }); expect(node.querySelector('.array-item-add button')).to.be.null; }); it('[fixed] should pass uiSchema to fixed array', () => { const { node } = createFormComponent({ schema: { type: 'array', items: [ { type: 'string', }, { type: 'string', }, ], }, uiSchema: { items: { 'ui:widget': 'textarea', }, }, formData: ['foo', 'bar'], }); expect(node.querySelectorAll('textarea').length).to.eql(2); }); describe('operations for additional items', () => { const { node, onChange } = createFormComponent({ schema: schemaAdditional, formData: [1, 2, 'foo'], templates: { ArrayFieldTemplate: ExposedArrayKeyTemplate }, }); const startRows = node.querySelectorAll('.array-item'); const startRow1_key = startRows[0].getAttribute(ArrayKeyDataAttr); const startRow2_key = startRows[1].getAttribute(ArrayKeyDataAttr); const startRow3_key = startRows[2].getAttribute(ArrayKeyDataAttr); const startRow4_key = startRows[3] ? startRows[3].getAttribute(ArrayKeyDataAttr) : undefined; it('should add a field when clicking add button', () => { const addBtn = node.querySelector('.array-item-add button'); Simulate.click(addBtn); expect(node.querySelectorAll('.field-string')).to.have.length.of(2); sinon.assert.calledWithMatch( onChange.lastCall, { formData: [1, 2, 'foo', undefined], }, 'root' ); }); it('should retain existing row keys/ids when adding additional items', () => { const endRows = node.querySelectorAll('.array-item'); const endRow1_key = endRows[0].getAttribute(ArrayKeyDataAttr); const endRow2_key = endRows[1].getAttribute(ArrayKeyDataAttr); const endRow3_key = endRows[2].getAttribute(ArrayKeyDataAttr); const endRow4_key = endRows[3].getAttribute(ArrayKeyDataAttr); expect(startRow1_key).to.equal(endRow1_key); expect(startRow2_key).to.equal(endRow2_key); expect(startRow3_key).to.equal(endRow3_key); expect(startRow4_key).to.not.equal(endRow4_key); expect(startRow4_key).to.be.undefined; expect(endRows[0].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[1].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[2].hasAttribute(ArrayKeyDataAttr)).to.be.true; expect(endRows[3].hasAttribute(ArrayKeyDataAttr)).to.be.true; }); it('should change the state when changing input value', () => { const inputs = node.querySelectorAll('.field-string input[type=text]'); Simulate.change(inputs[0], { target: { value: 'bar' } }); Simulate.change(inputs[1], { target: { value: 'baz' } }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: [1, 2, 'bar', 'baz'], }, 'root' ); }); it('should remove array items when clicking remove buttons', () => { let dropBtns = node.querySelectorAll('.array-item-remove'); Simulate.click(dropBtns[0]); expect(node.querySelectorAll('.field-string')).to.have.length.of(1); sinon.assert.calledWithMatch( onChange.lastCall, { formData: [1, 2, 'baz'], }, 'root' ); dropBtns = node.querySelectorAll('.array-item-remove'); Simulate.click(dropBtns[0]); expect(node.querySelectorAll('.field-string')).to.be.empty; sinon.assert.calledWithMatch( onChange.lastCall, { formData: [1, 2], }, 'root' ); }); }); }); describe('Multiple number choices list', () => { const schema = { type: 'array', title: 'My field', items: { enum: [1, 2, 3], type: 'integer', }, uniqueItems: true, }; it("should convert array of strings to numbers if type of items is 'number'", () => { const { node, onChange } = createFormComponent({ schema }); Simulate.change(node.querySelector('.field select'), { target: { options: [ { selected: true, value: '0' }, // use index { selected: true, value: '1' }, // use index { selected: false, value: '2' }, // use index ], }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: [1, 2], }, 'root' ); }); }); describe('Custom Widget', () => { it('if it does not contain enums or uniqueItems=true, it should still render the custom widget.', () => { const schema = { type: 'array', items: { type: 'string', }, }; const { node } = createFormComponent({ schema, uiSchema: { 'ui:widget': 'CustomSelect', }, formData: ['foo', 'bar'], widgets: { CustomSelect: CustomSelectComponent, }, }); expect(node.querySelectorAll('#custom-select')).to.have.length.of(2); }); it('should pass uiSchema to custom widget', () => { const CustomWidget = ({ uiSchema }) => { return <div id='custom-ui-option-value'>{uiSchema.custom_field_key['ui:options'].test}</div>; }; const { node } = createFormComponent({ schema: { type: 'array', items: { type: 'string', }, }, widgets: { CustomWidget: CustomWidget, }, uiSchema: { 'ui:widget': 'CustomWidget', custom_field_key: { 'ui:options': { test: 'foo', }, }, }, formData: ['foo', 'bar'], }); expect(node.querySelector('#custom-ui-option-value').textContent).to.eql('foo'); }); it('if the schema has fixed items, it should still render the custom widget.', () => { const schema = { type: 'array', items: [ { type: 'string', title: 'Some text', }, { type: 'number', title: 'A number', }, ], }; const { node } = createFormComponent({ schema, uiSchema: { 'ui:widget': 'CustomSelect', }, formData: ['foo', 'bar'], widgets: { CustomSelect: CustomSelectComponent, }, }); expect(node.querySelectorAll('#custom-select')).to.have.length.of(2); }); }); describe('Title', () => { const TitleFieldTemplate = (props) => <div id={`title-${props.title}`} />; const templates = { TitleFieldTemplate }; it('should pass field name to TitleFieldTemplate if there is no title', () => { const schema = { type: 'object', properties: { array: { type: 'array', items: {}, }, }, }; const { node } = createFormComponent({ schema, templates }); expect(node.querySelector('#title-array')).to.not.be.null; }); it('should pass schema title to TitleFieldTemplate', () => { const schema = { type: 'array', title: 'test', items: {}, }; const { node } = createFormComponent({ schema, templates }); expect(node.querySelector('#title-test')).to.not.be.null; }); it('should pass empty schema title to TitleFieldTemplate', () => { const schema = { type: 'array', title: '', items: {}, }; const { node } = createFormComponent({ schema, templates }); expect(node.querySelector('#title-')).to.be.null; }); it('should not render a TitleFieldTemplate when label is false', () => { const schema = { type: 'array', title: 'test', items: {}, }; const { node } = createFormComponent({ schema, templates, uiSchema: { 'ui:label': false }, }); expect(node.querySelector('#title-test')).to.be.null; }); }); describe('should handle nested idPrefix and idSeparator parameter', () => { it('should render nested input widgets with the expected ids', () => { const complexSchema = { type: 'object', properties: { foo: { type: 'array', items: { type: 'object', properties: { bar: { type: 'string' }, baz: { type: 'string' }, }, }, }, }, }; const { node } = createFormComponent({ schema: complexSchema, formData: { foo: [ { bar: 'bar1', baz: 'baz1' }, { bar: 'bar2', baz: 'baz2' }, ], }, idSeparator: '/', idPrefix: 'base', }); const inputs = node.querySelectorAll('input[type=text]'); expect(inputs[0].id).eql('base/foo/0/bar'); expect(inputs[1].id).eql('base/foo/0/baz'); expect(inputs[2].id).eql('base/foo/1/bar'); expect(inputs[3].id).eql('base/foo/1/baz'); }); }); describe("should handle nested 'hideError: true' uiSchema value", () => { const complexSchema = { type: 'object', properties: { foo: { type: 'array', items: { type: 'object', properties: { bar: { type: 'string' }, }, }, }, }, }; function customValidate(formData, errors) { errors.foo[0].bar.addError('test'); errors.foo[1].bar.addError('test'); return errors; } it('should render nested error decorated input widgets with the expected ids', () => { const { node } = createFormComponent({ schema: complexSchema, formData: { foo: [{ bar: 'bar1' }, { bar: 'bar2' }], }, customValidate, }); Simulate.submit(node); const inputs = node.querySelectorAll('.form-group.field-error input[type=text]'); expect(inputs[0].id).eql('root_foo_0_bar'); expect(inputs[1].id).eql('root_foo_1_bar'); }); it('must NOT render nested error decorated input widgets', () => { const { node } = createFormComponent({ schema: complexSchema, uiSchema: { 'ui:hideError': true, }, formData: { foo: [{ bar: 'bar1' }, { bar: 'bar2' }], }, customValidate, showErrorList: false, }); Simulate.submit(node); const inputsNoError = node.querySelectorAll('.form-group.field-error input[type=text]'); expect(inputsNoError).to.have.length.of(0); }); }); describe('FormContext gets passed', () => { const schema = { type: 'array', items: [ { type: 'string', title: 'Some text', }, { type: 'number', title: 'A number', }, ], }; it('should pass form context to schema field for the root AND array schema fields', () => { const formContext = { root: 'root-id', root_0: 'root_0-id', root_1: 'root_1-id', }; function CustomSchemaField(props) { const { formContext, idSchema } = props; return ( <> <code id={formContext[idSchema.$id]}>Ha</code> <SchemaField {...props} /> </> ); } const { node } = createFormComponent({ schema, formContext, fields: { SchemaField: CustomSchemaField }, }); const codeBlocks = node.querySelectorAll('code'); expect(codeBlocks).to.have.length(3); Object.keys(formContext).forEach((key) => { expect(node.querySelector(`code#${formContext[key]}`)).to.exist; }); }); it('should pass form context to array schema field only', () => { const formContext = { root: 'root-id', root_0: 'root_0-id', root_1: 'root_1-id', }; function CustomSchemaField(props) { const { formContext, idSchema } = props; return ( <> <code id={formContext[idSchema.$id]}>Ha</code> <SchemaField {...props} /> </> ); } const { node } = createFormComponent({ schema, formContext, fields: { ArraySchemaField: CustomSchemaField }, }); const codeBlocks = node.querySelectorAll('code'); expect(codeBlocks).to.have.length(2); Object.keys(formContext).forEach((key) => { if (key === 'root') { expect(node.querySelector(`code#${formContext[key]}`)).to.not.exist; } else { expect(node.querySelector(`code#${formContext[key]}`)).to.exist; } }); }); }); }); �react-jsonschema-form-5.12.1/packages/core/test/ArrayFieldTemplate.test.jsx�������������������������0000664�0000000�0000000�00000024043�14467713645�0026722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { PureComponent } from 'react'; import { expect } from 'chai'; import { Simulate } from 'react-dom/test-utils'; import { createFormComponent, createSandbox } from './test_utils'; describe('ArrayFieldTemplate', () => { let sandbox; const formData = ['one', 'two', 'three']; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('Custom ArrayFieldTemplate of string array', () => { function ArrayFieldTemplate(props) { return ( <div className={props.uiSchema.classNames}> {props.canAdd && <button className='custom-array-add' />} {props.items.map((element) => { return ( <div className='custom-array-item' key={element.index}> {element.hasMoveUp && <button className='custom-array-item-move-up' />} {element.hasMoveDown && <button className='custom-array-item-move-down' />} {element.children} </div> ); })} </div> ); } describe('Stateful ArrayFieldTemplate', () => { class ArrayFieldTemplate extends PureComponent { render() { return ( <div className='field-content'> {this.props.items.map((item, i) => ( <div key={i}>item.children</div> ))} </div> ); } } describe('with template globally configured', () => { it('should render a stateful custom component', () => { const { node } = createFormComponent({ schema: { type: 'array', items: { type: 'string' } }, formData, templates: { ArrayFieldTemplate }, }); expect(node.querySelectorAll('.field-array .field-content div')).to.have.length.of(3); }); }); describe('with template configured in ui:ArrayFieldTemplate', () => { it('should render a stateful custom component', () => { const { node } = createFormComponent({ schema: { type: 'array', items: { type: 'string' } }, formData, uiSchema: { 'ui:ArrayFieldTemplate': ArrayFieldTemplate, }, }); expect(node.querySelectorAll('.field-array .field-content div')).to.have.length.of(3); }); }); describe('with template configured globally being overriden in ui:ArrayFieldTemplate', () => { it('should render a stateful custom component', () => { const { node } = createFormComponent({ schema: { type: 'array', items: { type: 'string' } }, formData, uiSchema: { 'ui:ArrayFieldTemplate': ArrayFieldTemplate, }, // Empty field template for proof that we're doing overrides templates: { ArrayFieldTemplate: () => <div /> }, }); expect(node.querySelectorAll('.field-array .field-content div')).to.have.length.of(3); }); }); }); describe('not fixed items', () => { const schema = { type: 'array', title: 'my list', description: 'my description', items: { type: 'string' }, }; let node; describe('with template globally configured', () => { const uiSchema = { classNames: 'custom-array', }; beforeEach(() => { node = createFormComponent({ templates: { ArrayFieldTemplate }, formData, schema, uiSchema, }).node; }); sharedIts(); }); describe('with template configured in ui:ArrayFieldTemplate', () => { const uiSchema = { classNames: 'custom-array', 'ui:ArrayFieldTemplate': ArrayFieldTemplate, }; beforeEach(() => { node = createFormComponent({ formData, schema, uiSchema, }).node; }); sharedIts(); }); describe('with template configured globally being overriden in ui:ArrayFieldTemplate', () => { const uiSchema = { classNames: 'custom-array', 'ui:ArrayFieldTemplate': ArrayFieldTemplate, }; beforeEach(() => { node = createFormComponent({ formData, schema, uiSchema, // Empty field template for proof that we're doing overrides templates: { ArrayFieldTemplate: () => <div /> }, }).node; }); sharedIts(); }); function sharedIts() { it('should render one root element for the array', () => { expect(node.querySelectorAll('.custom-array')).to.have.length.of(1); }); it('should render one add button', () => { expect(node.querySelectorAll('.custom-array-add')).to.have.length.of(1); }); it('should render one child for each array item', () => { expect(node.querySelectorAll('.custom-array-item')).to.have.length.of(formData.length); }); it('should render text input for each array item', () => { expect(node.querySelectorAll('.custom-array-item .field input[type=text]')).to.have.length.of( formData.length ); }); it('should render move up button for all but one array items', () => { expect(node.querySelectorAll('.custom-array-item-move-up')).to.have.length.of(formData.length - 1); }); it('should render move down button for all but one array items', () => { expect(node.querySelectorAll('.custom-array-item-move-down')).to.have.length.of(formData.length - 1); }); } }); describe('fixed items', () => { const schema = { type: 'array', title: 'my list', description: 'my description', items: [{ type: 'string' }, { type: 'string' }, { type: 'string' }], }; let node; describe('with template globally configured', () => { const uiSchema = { classNames: 'custom-array', }; beforeEach(() => { node = createFormComponent({ formData, schema, uiSchema, templates: { ArrayFieldTemplate }, }).node; }); sharedIts(); }); describe('with template configured in ui:ArrayFieldTemplate', () => { const uiSchema = { classNames: 'custom-array', 'ui:ArrayFieldTemplate': ArrayFieldTemplate, }; beforeEach(() => { node = createFormComponent({ formData, schema, uiSchema, }).node; }); sharedIts(); }); describe('with template configured globally being overriden in ui:ArrayFieldTemplate', () => { const uiSchema = { classNames: 'custom-array', 'ui:ArrayFieldTemplate': ArrayFieldTemplate, }; beforeEach(() => { node = createFormComponent({ formData, schema, uiSchema, // Empty field template for proof that we're doing overrides templates: { ArrayFieldTemplate: () => <div /> }, }).node; }); sharedIts(); }); function sharedIts() { it('should render one root element for the array', () => { expect(node.querySelectorAll('.custom-array')).to.have.length.of(1); }); it('should not render an add button', () => { expect(node.querySelectorAll('.custom-array-add')).to.have.length.of(0); }); it('should render one child for each array item', () => { expect(node.querySelectorAll('.custom-array-item')).to.have.length.of(formData.length); }); it('should render text input for each array item', () => { expect(node.querySelectorAll('.custom-array-item .field input[type=text]')).to.have.length.of( formData.length ); }); it('should not render any move up buttons', () => { expect(node.querySelectorAll('.custom-array-item-move-up')).to.have.length.of(0); }); it('should not render any move down buttons', () => { expect(node.querySelectorAll('.custom-array-item-move-down')).to.have.length.of(0); }); } }); }); describe('Stateful ArrayFieldTemplate', () => { class ArrayFieldTemplate extends PureComponent { render() { return ( <div className='field-content'> {this.props.items.map((item, i) => ( <div key={i}>item.children</div> ))} </div> ); } } it('should render a stateful custom component', () => { const { node } = createFormComponent({ schema: { type: 'array', items: { type: 'string' } }, formData, templates: { ArrayFieldTemplate }, }); expect(node.querySelectorAll('.field-array .field-content div')).to.have.length.of(3); }); }); describe('pass right props to ArrayFieldTemplate', () => { it('should pass registry prop', () => { const ArrayFieldTemplate = ({ registry }) => { if (!registry) { throw 'Error'; } return null; }; createFormComponent({ schema: { type: 'array', items: { type: 'string' } }, formData, templates: { ArrayFieldTemplate }, }); }); it('should pass formData so it is in sync with items', () => { const ArrayFieldTemplate = ({ formData, items, onAddClick }) => { if (formData.length !== items.length) { throw 'Error'; } return ( <div> {items.map((item, i) => ( <span key={i}>value: {formData[i]}</span> ))} <button className='array-item-add' onClick={onAddClick} /> </div> ); }; const { node } = createFormComponent({ schema: { type: 'array', items: { type: 'string' } }, formData, templates: { ArrayFieldTemplate }, }); Simulate.click(node.querySelector('.array-item-add')); }); }); }); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/ArraySnap.test.jsx����������������������������������0000664�0000000�0000000�00000000137�14467713645�0025102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Form from '../src'; import arrayTests from '../testSnap/arrayTests'; arrayTests(Form); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/BooleanField.test.jsx�������������������������������0000664�0000000�0000000�00000044322�14467713645�0025531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { Simulate } from 'react-dom/test-utils'; import sinon from 'sinon'; import { createFormComponent, createSandbox, getSelectedOptionValue, submitForm } from './test_utils'; describe('BooleanField', () => { let sandbox; const CustomWidget = () => <div id='custom' />; beforeEach(() => { sandbox = createSandbox(); sandbox.stub(console, 'warn'); }); afterEach(() => { sandbox.restore(); }); it('should render a boolean field', () => { const { node } = createFormComponent({ schema: { type: 'boolean', }, }); expect(node.querySelectorAll('.field input[type=checkbox]')).to.have.length.of(1); }); it('should render a boolean field with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'boolean', }, }); expect(node.querySelector('.field input[type=checkbox]').id).eql('root'); }); it('should render a boolean field with a label', () => { const { node } = createFormComponent({ schema: { type: 'boolean', title: 'foo', }, }); expect(node.querySelector('.field label span').textContent).eql('foo'); }); describe('HTML5 required attribute', () => { it('should not render a required attribute for simple required fields', () => { const { node } = createFormComponent({ schema: { type: 'object', properties: { foo: { type: 'boolean', }, }, required: ['foo'], }, }); expect(node.querySelector('input[type=checkbox]').required).eql(false); }); it('should add a required attribute if the schema uses const with a true value', () => { const { node } = createFormComponent({ schema: { type: 'object', properties: { foo: { type: 'boolean', const: true, }, }, }, }); expect(node.querySelector('input[type=checkbox]').required).eql(true); }); it('should add a required attribute if the schema uses an enum with a single value of true', () => { const { node } = createFormComponent({ schema: { type: 'object', properties: { foo: { type: 'boolean', enum: [true], }, }, }, }); expect(node.querySelector('input[type=checkbox]').required).eql(true); }); it('should add a required attribute if the schema uses an anyOf with a single value of true', () => { const { node } = createFormComponent({ schema: { type: 'object', properties: { foo: { type: 'boolean', anyOf: [ { const: true, }, ], }, }, }, }); expect(node.querySelector('input[type=checkbox]').required).eql(true); }); it('should add a required attribute if the schema uses a oneOf with a single value of true', () => { const { node } = createFormComponent({ schema: { type: 'object', properties: { foo: { type: 'boolean', oneOf: [ { const: true, }, ], }, }, }, }); expect(node.querySelector('input[type=checkbox]').required).eql(true); }); it('should add a required attribute if the schema uses an allOf with a value of true', () => { const { node } = createFormComponent({ schema: { type: 'object', properties: { foo: { type: 'boolean', allOf: [ { const: true, }, ], }, }, }, }); expect(node.querySelector('input[type=checkbox]').required).eql(true); }); }); it('should render a single label', () => { const { node } = createFormComponent({ schema: { type: 'boolean', title: 'foo', }, }); expect(node.querySelectorAll('.field label')).to.have.length.of(1); }); it('should render a description', () => { const { node } = createFormComponent({ schema: { type: 'boolean', description: 'my description', }, }); const description = node.querySelector('.field-description'); expect(description.textContent).eql('my description'); }); it('should pass uiSchema to custom widget', () => { const CustomCheckboxWidget = ({ uiSchema }) => { return <div id='custom-ui-option-value'>{uiSchema.custom_field_key['ui:options'].test}</div>; }; const { node } = createFormComponent({ schema: { type: 'boolean', description: 'my description', }, widgets: { CheckboxWidget: CustomCheckboxWidget, }, uiSchema: { custom_field_key: { 'ui:widget': 'checkbox', 'ui:options': { test: 'foo', }, }, }, }); expect(node.querySelector('#custom-ui-option-value').textContent).to.eql('foo'); }); it('should render the description using provided description field', () => { const { node } = createFormComponent({ schema: { type: 'boolean', description: 'my description', }, templates: { DescriptionFieldTemplate: ({ description }) => ( <div className='field-description'>{description} overridden</div> ), }, }); const description = node.querySelector('.field-description'); expect(description.textContent).eql('my description overridden'); }); it('should assign a default value', () => { const { node } = createFormComponent({ schema: { type: 'boolean', default: true, }, }); expect(node.querySelector('.field input').checked).eql(true); }); it('formData should default to undefined', () => { const { node, onSubmit } = createFormComponent({ schema: { type: 'boolean' }, noValidate: true, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: undefined, }); }); it('should focus on required radio missing data when focusOnFirstField', () => { const { node, onError } = createFormComponent({ schema: { type: 'object', properties: { bool: { type: 'boolean', }, }, required: ['bool'], }, focusOnFirstError: true, uiSchema: { bool: { 'ui:widget': 'radio' } }, }); const focusSpys = [sinon.spy(), sinon.spy()]; const inputs = node.querySelectorAll('input[id^=root_bool]'); expect(inputs.length).eql(2); // Since programmatically triggering focus does not call onFocus, change the focus method to a spy inputs[0].focus = focusSpys[0]; inputs[1].focus = focusSpys[1]; submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, { formData: undefined, }); sinon.assert.calledOnce(focusSpys[0]); sinon.assert.notCalled(focusSpys[1]); }); it('should handle a change event', () => { const { node, onChange } = createFormComponent({ schema: { type: 'boolean', default: false, }, }); Simulate.change(node.querySelector('input'), { target: { checked: true }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: true }, 'root'); }); it('should fill field with data', () => { const { node } = createFormComponent({ schema: { type: 'boolean', }, formData: true, }); expect(node.querySelector('.field input').checked).eql(true); }); it('should render radio widgets with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'boolean', }, uiSchema: { 'ui:widget': 'radio' }, }); expect(node.querySelector('.field-radio-group').id).eql('root'); }); it('should have default enum option labels for radio widgets', () => { const { node } = createFormComponent({ schema: { type: 'boolean', }, formData: true, uiSchema: { 'ui:widget': 'radio' }, }); const labels = [].map.call(node.querySelectorAll('.field-radio-group label'), (label) => label.textContent); expect(labels).eql(['Yes', 'No']); }); it('should support enum option ordering for radio widgets', () => { const { node } = createFormComponent({ schema: { type: 'boolean', enum: [false, true], }, formData: true, uiSchema: { 'ui:widget': 'radio' }, }); const labels = [].map.call(node.querySelectorAll('.field-radio-group label'), (label) => label.textContent); expect(labels).eql(['No', 'Yes']); }); it('should support enumNames for radio widgets', () => { const { node } = createFormComponent({ schema: { type: 'boolean', enumNames: ['Yes', 'No'], }, formData: true, uiSchema: { 'ui:widget': 'radio' }, }); const labels = [].map.call(node.querySelectorAll('.field-radio-group label'), (label) => label.textContent); expect(labels).eql(['Yes', 'No']); expect(console.warn.calledWithMatch(/The enumNames property is deprecated/)).to.be.true; }); it('should support oneOf titles for radio widgets', () => { const { node } = createFormComponent({ schema: { type: 'boolean', oneOf: [ { const: true, title: 'Yes', }, { const: false, title: 'No', }, ], }, formData: true, uiSchema: { 'ui:widget': 'radio' }, }); const labels = [].map.call(node.querySelectorAll('.field-radio-group label'), (label) => label.textContent); expect(labels).eql(['Yes', 'No']); }); it('should preserve oneOf option ordering for radio widgets', () => { const { node } = createFormComponent({ schema: { type: 'boolean', oneOf: [ { const: false, title: 'No', }, { const: true, title: 'Yes', }, ], }, formData: true, uiSchema: { 'ui:widget': 'radio' }, }); const labels = [].map.call(node.querySelectorAll('.field-radio-group label'), (label) => label.textContent); expect(labels).eql(['No', 'Yes']); }); it('should support inline radio widgets', () => { const { node } = createFormComponent({ schema: { type: 'boolean' }, formData: true, uiSchema: { 'ui:widget': 'radio', 'ui:options': { inline: true, }, }, }); expect(node.querySelectorAll('.radio-inline')).to.have.length.of(2); }); it('should handle a focus event for radio widgets', () => { const onFocus = sandbox.spy(); const { node } = createFormComponent({ schema: { type: 'boolean', default: false, }, uiSchema: { 'ui:widget': 'radio', }, onFocus, }); const element = node.querySelector('.field-radio-group'); Simulate.focus(node.querySelector('input'), { target: { value: 1, // use index }, }); expect(onFocus.calledWith(element.id, false)).to.be.true; }); it('should handle a blur event for radio widgets', () => { const onBlur = sandbox.spy(); const { node } = createFormComponent({ schema: { type: 'boolean', default: false, }, uiSchema: { 'ui:widget': 'radio', }, onBlur, }); const element = node.querySelector('.field-radio-group'); Simulate.blur(node.querySelector('input'), { target: { value: 1, // use index }, }); expect(onBlur.calledWith(element.id, false)).to.be.true; }); it('should support enumNames for select', () => { const { node } = createFormComponent({ schema: { type: 'boolean', enumNames: ['Yes', 'No'], }, formData: true, uiSchema: { 'ui:widget': 'select' }, }); const labels = [].map.call(node.querySelectorAll('.field option'), (label) => label.textContent); expect(labels).eql(['', 'Yes', 'No']); expect(console.warn.calledWithMatch(/The enumNames property is deprecated/)).to.be.true; }); it('should handle a focus event with checkbox', () => { const onFocus = sandbox.spy(); const { node } = createFormComponent({ schema: { type: 'boolean', default: false, }, uiSchema: { 'ui:widget': 'select', }, onFocus, }); const element = node.querySelector('select'); Simulate.focus(element, { target: { value: 1, // use index }, }); expect(onFocus.calledWith(element.id, false)).to.be.true; }); it('should handle a blur event with select', () => { const onBlur = sandbox.spy(); const { node } = createFormComponent({ schema: { type: 'boolean', default: false, }, uiSchema: { 'ui:widget': 'select', }, onBlur, }); const element = node.querySelector('select'); Simulate.blur(element, { target: { value: 1, // use index }, }); expect(onBlur.calledWith(element.id, false)).to.be.true; }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'boolean', }, }); expect(node.querySelector('input[type=checkbox]').id).eql('root'); }); it('should render customized checkbox', () => { const { node } = createFormComponent({ schema: { type: 'boolean', }, widgets: { CheckboxWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); it('should handle a focus event with checkbox', () => { const onFocus = sandbox.spy(); const { node } = createFormComponent({ schema: { type: 'boolean', default: false, }, uiSchema: { 'ui:widget': 'checkbox', }, onFocus, }); const element = node.querySelector('input'); Simulate.focus(element, { target: { checked: false, }, }); expect(onFocus.calledWith(element.id, false)).to.be.true; }); it('should handle a blur event with checkbox', () => { const onBlur = sandbox.spy(); const { node } = createFormComponent({ schema: { type: 'boolean', default: false, }, uiSchema: { 'ui:widget': 'checkbox', }, onBlur, }); const element = node.querySelector('input'); Simulate.blur(element, { target: { checked: false, }, }); expect(onBlur.calledWith(element.id, false)).to.be.true; }); describe('Label', () => { const Widget = (props) => <div id={`label-${props.label}`} />; const widgets = { Widget }; it('should pass field name to widget if there is no title', () => { const schema = { type: 'object', properties: { boolean: { type: 'boolean', }, }, }; const uiSchema = { boolean: { 'ui:widget': 'Widget', }, }; const { node } = createFormComponent({ schema, widgets, uiSchema }); expect(node.querySelector('#label-boolean')).to.not.be.null; }); it('should pass schema title to widget', () => { const schema = { type: 'boolean', title: 'test', }; const uiSchema = { 'ui:widget': 'Widget', }; const { node } = createFormComponent({ schema, widgets, uiSchema }); expect(node.querySelector('#label-test')).to.not.be.null; }); it('should pass empty schema title to widget', () => { const schema = { type: 'boolean', title: '', }; const uiSchema = { 'ui:widget': 'Widget', }; const { node } = createFormComponent({ schema, widgets, uiSchema }); expect(node.querySelector('#label-')).to.not.be.null; }); }); describe('SelectWidget', () => { it('should render a field that contains an enum of booleans', () => { const { node } = createFormComponent({ schema: { enum: [true, false], }, }); expect(node.querySelectorAll('.field select')).to.have.length.of(1); }); it('should infer the value from an enum on change', () => { const spy = sinon.spy(); const { node } = createFormComponent({ schema: { enum: [true, false], }, onChange: spy, }); expect(node.querySelectorAll('.field select')).to.have.length.of(1); const $select = node.querySelector('.field select'); expect($select.value).eql(''); Simulate.change($select, { target: { value: 0 }, // use index }); expect(getSelectedOptionValue($select)).eql('true'); expect(spy.lastCall.args[0].formData).eql(true); expect(spy.lastCall.args[1]).eql('root'); }); it('should render a string field with a label', () => { const { node } = createFormComponent({ schema: { enum: [true, false], title: 'foo', }, }); expect(node.querySelector('.field label').textContent).eql('foo'); }); it('should assign a default value', () => { const { onChange } = createFormComponent({ schema: { enum: [true, false], default: true, }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: true, }); }); it('should handle a change event', () => { const { node, onChange } = createFormComponent({ schema: { enum: [true, false], }, }); Simulate.change(node.querySelector('select'), { target: { value: 1 }, // use index }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: false, }, 'root' ); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { enum: [true, false], }, }); expect(node.querySelector('select').id).eql('root'); }); }); }); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/DescriptionField.test.jsx���������������������������0000664�0000000�0000000�00000002605�14467713645�0026433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Component } from 'react'; import { expect } from 'chai'; import DescriptionField from '../src/components/templates/DescriptionField'; import { createSandbox, createComponent } from './test_utils'; describe('DescriptionField', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); // For some reason, stateless components needs to be wrapped into a stateful // one to be rendered into the document. class DescriptionFieldWrapper extends Component { constructor(props) { super(props); } render() { return <DescriptionField {...this.props} />; } } it('should return a div for a custom component', () => { const props = { description: <em>description</em>, }; const { node } = createComponent(DescriptionFieldWrapper, props); expect(node.tagName).to.equal('DIV'); }); it('should return a p for a description text', () => { const props = { description: 'description', }; const { node } = createComponent(DescriptionFieldWrapper, props); expect(node.tagName).to.equal('P'); }); it('should have the expected id', () => { const props = { description: 'Field description', id: 'sample_id', }; const { node } = createComponent(DescriptionFieldWrapper, props); expect(node.id).to.equal('sample_id'); }); }); ���������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/FieldTemplate.test.jsx������������������������������0000664�0000000�0000000�00000010004�14467713645�0025713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Children } from 'react'; import { expect } from 'chai'; import { createFormComponent, createSandbox } from './test_utils'; describe('FieldTemplate', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('FieldTemplate should only have one child', () => { function FieldTemplate(props) { if (Children.count(props.children) !== 1) { throw 'Got wrong number of children'; } return null; } createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:disabled': true }, templates: { FieldTemplate }, }); }); describe('Custom FieldTemplate for disabled property', () => { function FieldTemplate(props) { return <div className={props.disabled ? 'disabled' : 'foo'} />; } describe('with template globally configured', () => { it('should render with disabled when ui:disabled is truthy', () => { const { node } = createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:disabled': true }, templates: { FieldTemplate }, }); expect(node.querySelectorAll('.disabled')).to.have.length.of(1); }); it('should render with disabled when ui:disabled is falsey', () => { const { node } = createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:disabled': false }, templates: { FieldTemplate }, }); expect(node.querySelectorAll('.disabled')).to.have.length.of(0); }); }); describe('with template configured in ui:FieldTemplate', () => { it('should render with disabled when ui:disabled is truthy', () => { const { node } = createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:disabled': true, 'ui:FieldTemplate': FieldTemplate }, }); expect(node.querySelectorAll('.disabled')).to.have.length.of(1); }); it('should render with disabled when ui:disabled is falsey', () => { const { node } = createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:disabled': false, 'ui:FieldTemplate': FieldTemplate }, }); expect(node.querySelectorAll('.disabled')).to.have.length.of(0); }); }); describe('with template configured globally being overriden in ui:FieldTemplate', () => { it('should render with disabled when ui:disabled is truthy', () => { const { node } = createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:disabled': true, 'ui:FieldTemplate': FieldTemplate }, // Empty field template to prove that overides work templates: { FieldTemplate: () => <div /> }, }); expect(node.querySelectorAll('.disabled')).to.have.length.of(1); }); it('should render with disabled when ui:disabled is falsey', () => { const { node } = createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:disabled': false, 'ui:FieldTemplate': FieldTemplate }, // Empty field template to prove that overides work templates: { FieldTemplate: () => <div /> }, }); expect(node.querySelectorAll('.disabled')).to.have.length.of(0); }); }); }); describe('Custom FieldTemplate should have registry', () => { function FieldTemplate(props) { return ( <div> Root Schema: <span id='root-schema'>{JSON.stringify(props.registry.rootSchema)}</span> </div> ); } it('should allow access to root schema from registry', () => { const schema = { type: 'object', properties: { fooBarBaz: { type: 'string' } }, }; const { node } = createFormComponent({ schema, templates: { FieldTemplate }, }); expect(node.querySelectorAll('#root-schema')).to.have.length.of(1); expect(node.querySelectorAll('#root-schema')[0].innerHTML).to.equal(JSON.stringify(schema)); }); }); }); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/Form.test.jsx���������������������������������������0000664�0000000�0000000�00000334427�14467713645�0024121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import * as React from 'react'; import { expect } from 'chai'; import sinon from 'sinon'; import { createRef } from 'react'; import { renderIntoDocument, act, Simulate } from 'react-dom/test-utils'; import { render, findDOMNode } from 'react-dom'; import { Portal } from 'react-portal'; import validator, { customizeValidator } from '@rjsf/validator-ajv8'; import Form from '../src'; import { createComponent, createFormComponent, createSandbox, setProps, describeRepeated, submitForm, } from './test_utils'; import widgetsSchema from './widgets_schema.json'; describeRepeated('Form common', (createFormComponent) => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('Empty schema', () => { it('Should throw error when Form is missing validator', () => { expect(() => createFormComponent({ schema: {}, validator: undefined })).to.Throw( Error, 'A validator is required for Form functionality to work' ); }); it('should render a form tag', () => { const { node } = createFormComponent({ schema: {} }); expect(node.tagName).eql('FORM'); }); it('should render a submit button', () => { const { node } = createFormComponent({ schema: {} }); expect(node.querySelectorAll('button[type=submit]')).to.have.length.of(1); }); it('should render children buttons', () => { const props = { schema: {}, validator }; const comp = renderIntoDocument( <Form {...props}> <button type='submit'>Submit</button> <button type='submit'>Another submit</button> </Form> ); const node = findDOMNode(comp); expect(node.querySelectorAll('button[type=submit]')).to.have.length.of(2); }); it("should render errors if schema isn't object", () => { const props = { validator, schema: { type: 'object', title: 'object', properties: { firstName: 'some mame', address: { $ref: '#/definitions/address', }, }, definitions: { address: { street: 'some street', }, }, }, }; const comp = renderIntoDocument( <Form {...props}> <button type='submit'>Submit</button> </Form> ); const node = findDOMNode(comp); expect(node.querySelector('.unsupported-field').textContent).to.contain('Unknown field type undefined'); }); }); describe('on component creation', () => { let onChangeProp; let formData; let schema; function createComponent() { renderIntoDocument( <Form schema={schema} onChange={onChangeProp} formData={formData} validator={validator}> <button type='submit'>Submit</button> <button type='submit'>Another submit</button> </Form> ); } beforeEach(() => { onChangeProp = sinon.spy(); schema = { type: 'object', title: 'root object', required: ['count'], properties: { count: { type: 'number', default: 789, }, }, }; }); describe('when props.formData does not equal the default values', () => { beforeEach(() => { formData = { foo: 123, }; createComponent(); }); it('should call props.onChange with current state', () => { sinon.assert.calledOnce(onChangeProp); sinon.assert.calledWith(onChangeProp, { formData: { ...formData, count: 789 }, schema, errorSchema: {}, errors: [], edit: true, uiSchema: {}, idSchema: { $id: 'root', count: { $id: 'root_count' } }, schemaValidationErrors: undefined, schemaValidationErrorSchema: undefined, schemaUtils: sinon.match.object, }); }); }); describe('when props.formData equals the default values', () => { beforeEach(() => { formData = { count: 789, }; createComponent(); }); it('should not call props.onChange', () => { sinon.assert.notCalled(onChangeProp); }); }); }); describe('Option idPrefix', function () { it('should change the rendered ids', function () { const schema = { type: 'object', title: 'root object', required: ['foo'], properties: { count: { type: 'number', }, }, }; const comp = renderIntoDocument(<Form schema={schema} idPrefix='rjsf' validator={validator} />); const node = findDOMNode(comp); const inputs = node.querySelectorAll('input'); const ids = []; for (var i = 0, len = inputs.length; i < len; i++) { const input = inputs[i]; ids.push(input.getAttribute('id')); } expect(ids).to.eql(['rjsf_count']); expect(node.querySelector('fieldset').id).to.eql('rjsf'); }); }); describe('Changing idPrefix', function () { it('should work with simple example', function () { const schema = { type: 'object', title: 'root object', required: ['foo'], properties: { count: { type: 'number', }, }, }; const comp = renderIntoDocument(<Form schema={schema} idPrefix='rjsf' validator={validator} />); const node = findDOMNode(comp); const inputs = node.querySelectorAll('input'); const ids = []; for (var i = 0, len = inputs.length; i < len; i++) { const input = inputs[i]; ids.push(input.getAttribute('id')); } expect(ids).to.eql(['rjsf_count']); expect(node.querySelector('fieldset').id).to.eql('rjsf'); }); it('should work with oneOf', function () { const schema = { type: 'object', properties: { connector: { type: 'string', enum: ['aws', 'gcp'], title: 'Provider', default: 'aws', }, }, dependencies: { connector: { oneOf: [ { type: 'object', properties: { connector: { type: 'string', enum: ['aws'], }, key_aws: { type: 'string', }, }, }, { type: 'object', properties: { connector: { type: 'string', enum: ['gcp'], }, key_gcp: { type: 'string', }, }, }, ], }, }, }; const comp = renderIntoDocument(<Form schema={schema} idPrefix='rjsf' validator={validator} />); const node = findDOMNode(comp); const inputs = node.querySelectorAll('input'); const ids = []; for (var i = 0, len = inputs.length; i < len; i++) { const input = inputs[i]; ids.push(input.getAttribute('id')); } expect(ids).to.eql(['rjsf_key_aws']); }); }); describe('Option idSeparator', function () { it('should change the rendered ids', function () { const schema = { type: 'object', title: 'root object', required: ['foo'], properties: { count: { type: 'number', }, }, }; const comp = renderIntoDocument(<Form schema={schema} idSeparator='.' validator={validator} />); const node = findDOMNode(comp); const inputs = node.querySelectorAll('input'); const ids = []; for (var i = 0, len = inputs.length; i < len; i++) { const input = inputs[i]; ids.push(input.getAttribute('id')); } expect(ids).to.eql(['root.count']); }); }); describe('Custom field template', () => { const schema = { type: 'object', title: 'root object', required: ['foo'], properties: { foo: { type: 'string', description: 'this is description', minLength: 32, }, }, }; const uiSchema = { foo: { 'ui:help': 'this is help', }, }; const formData = { foo: 'invalid' }; function CustomFieldTemplate(props) { const { id, classNames, label, help, rawHelp, required, description, rawDescription, errors, rawErrors, children, } = props; return ( <div className={'my-template ' + classNames}> <label htmlFor={id}> {label} {required ? '*' : null} </label> {description} {children} {errors} {help} <span className='raw-help'>{`${rawHelp} rendered from the raw format`}</span> <span className='raw-description'>{`${rawDescription} rendered from the raw format`}</span> {rawErrors ? ( <ul> {rawErrors.map((error, i) => ( <li key={i} className='raw-error'> {error} </li> ))} </ul> ) : null} </div> ); } let node; beforeEach(() => { node = createFormComponent({ schema, uiSchema, formData, templates: { FieldTemplate: CustomFieldTemplate, }, liveValidate: true, }).node; }); it('should use the provided field template', () => { expect(node.querySelector('.my-template')).to.exist; }); it('should use the provided template for labels', () => { expect(node.querySelector('.my-template > label').textContent).eql('root object'); expect(node.querySelector('.my-template .field-string > label').textContent).eql('foo*'); }); it('should pass description as the provided React element', () => { expect(node.querySelector('#root_foo__description').textContent).eql('this is description'); }); it('should pass rawDescription as a string', () => { expect(node.querySelector('.raw-description').textContent).eql( 'this is description rendered from the raw format' ); }); it('should pass errors as the provided React component', () => { expect(node.querySelectorAll('.error-detail li')).to.have.length.of(1); }); it('should pass rawErrors as an array of strings', () => { expect(node.querySelectorAll('.raw-error')).to.have.length.of(1); }); it('should pass help as a the provided React element', () => { expect(node.querySelector('.help-block').textContent).eql('this is help'); }); it('should pass rawHelp as a string', () => { expect(node.querySelector('.raw-help').textContent).eql('this is help rendered from the raw format'); }); }); describe('ui options submitButtonOptions', () => { it('should not render a submit button', () => { const props = { validator, schema: {}, uiSchema: { 'ui:submitButtonOptions': { norender: true } }, }; const comp = renderIntoDocument(<Form {...props} />); const node = findDOMNode(comp); expect(node.querySelectorAll('button[type=submit]')).to.have.length.of(0); }); it('should render a submit button with text Confirm', () => { const props = { validator, schema: {}, uiSchema: { 'ui:submitButtonOptions': { submitText: 'Confirm' } }, }; const comp = renderIntoDocument(<Form {...props} />); const node = findDOMNode(comp); expect(node.querySelector('button[type=submit]').textContent).eql('Confirm'); }); }); describe('Custom submit buttons', () => { // Submit events on buttons are not fired on disconnected forms // So we need to add the DOM tree to the body in this case. // See: https://github.com/jsdom/jsdom/pull/1865 // https://developer.mozilla.org/en-US/docs/Web/API/Node/isConnected const domNode = document.createElement('div'); beforeEach(() => { document.body.appendChild(domNode); }); afterEach(() => { document.body.removeChild(domNode); }); it('should submit the form when clicked', (done) => { let submitCount = 0; const onSubmit = () => { submitCount++; if (submitCount === 2) { done(); } }; const comp = render( <Form onSubmit={onSubmit} schema={{}} validator={validator}> <button type='submit' value='Submit button' /> <button type='submit' value='Another submit button' /> </Form>, domNode ); const node = findDOMNode(comp); const buttons = node.querySelectorAll('button[type=submit]'); buttons[0].click(); buttons[1].click(); }); }); describe('Schema definitions', () => { it('should use a single schema definition reference', () => { const schema = { definitions: { testdef: { type: 'string' }, }, $ref: '#/definitions/testdef', }; const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('input[type=text]')).to.have.length.of(1); }); it('should handle multiple schema definition references', () => { const schema = { definitions: { testdef: { type: 'string' }, }, type: 'object', properties: { foo: { $ref: '#/definitions/testdef' }, bar: { $ref: '#/definitions/testdef' }, }, }; const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('input[type=text]')).to.have.length.of(2); }); it('should handle deeply referenced schema definitions', () => { const schema = { definitions: { testdef: { type: 'string' }, }, type: 'object', properties: { foo: { type: 'object', properties: { bar: { $ref: '#/definitions/testdef' }, }, }, }, }; const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('input[type=text]')).to.have.length.of(1); }); it('should handle references to deep schema definitions', () => { const schema = { definitions: { testdef: { type: 'object', properties: { bar: { type: 'string' }, }, }, }, type: 'object', properties: { foo: { $ref: '#/definitions/testdef/properties/bar' }, }, }; const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('input[type=text]')).to.have.length.of(1); }); it('should handle referenced definitions for array items', () => { const schema = { definitions: { testdef: { type: 'string' }, }, type: 'object', properties: { foo: { type: 'array', items: { $ref: '#/definitions/testdef' }, }, }, }; const { node } = createFormComponent({ schema, formData: { foo: ['blah'], }, }); expect(node.querySelectorAll('input[type=text]')).to.have.length.of(1); }); it('should not crash with null values for property with additionalProperties', () => { const schema = { type: 'object', properties: { data: { additionalProperties: { type: 'string', }, type: 'object', }, }, }; const { node } = createFormComponent({ schema, formData: { data: null, }, }); expect(node).to.not.be.null; }); it('should not crash with non-object values for property with additionalProperties', () => { const schema = { type: 'object', properties: { data1: { additionalProperties: { type: 'string', }, type: 'object', }, data2: { additionalProperties: { type: 'string', }, type: 'object', }, }, }; const { node } = createFormComponent({ schema, formData: { data1: 123, data2: ['one', 'two', 'three'], }, }); expect(node).to.not.be.null; }); it('should raise for non-existent definitions referenced', () => { const schema = { type: 'object', properties: { foo: { $ref: '#/definitions/nonexistent' }, }, }; expect(() => createFormComponent({ schema })).to.Throw(Error, /#\/definitions\/nonexistent/); }); it('should propagate referenced definition defaults', () => { const schema = { definitions: { testdef: { type: 'string', default: 'hello' }, }, $ref: '#/definitions/testdef', }; const { node } = createFormComponent({ schema }); expect(node.querySelector('input[type=text]').value).eql('hello'); }); it('should propagate nested referenced definition defaults', () => { const schema = { definitions: { testdef: { type: 'string', default: 'hello' }, }, type: 'object', properties: { foo: { $ref: '#/definitions/testdef' }, }, }; const { node } = createFormComponent({ schema }); expect(node.querySelector('input[type=text]').value).eql('hello'); }); it('should propagate referenced definition defaults for array items', () => { const schema = { definitions: { testdef: { type: 'string', default: 'hello' }, }, type: 'array', items: { $ref: '#/definitions/testdef', }, }; const { node } = createFormComponent({ schema }); Simulate.click(node.querySelector('.array-item-add button')); expect(node.querySelector('input[type=text]').value).eql('hello'); }); it('should propagate referenced definition defaults in objects with additionalProperties', () => { const schema = { definitions: { testdef: { type: 'string' }, }, type: 'object', additionalProperties: { $ref: '#/definitions/testdef', }, }; const { node } = createFormComponent({ schema }); Simulate.click(node.querySelector('.btn-add')); expect(node.querySelector('input[type=text]').value).eql('newKey'); }); it('should propagate referenced definition defaults in objects with additionalProperties that have a type present', () => { // Though `additionalProperties` has a `type` present here, it also has a `$ref` so that // referenced schema should override it. const schema = { definitions: { testdef: { type: 'number' }, }, type: 'object', additionalProperties: { type: 'string', $ref: '#/definitions/testdef', }, }; const { node } = createFormComponent({ schema }); Simulate.click(node.querySelector('.btn-add')); expect(node.querySelector('input[type=number]').value).eql('0'); }); it('should recursively handle referenced definitions', () => { const schema = { $ref: '#/definitions/node', definitions: { node: { type: 'object', properties: { name: { type: 'string' }, children: { type: 'array', items: { $ref: '#/definitions/node', }, }, }, }, }, }; const { node } = createFormComponent({ schema }); expect(node.querySelector('#root_children_0_name')).to.not.exist; Simulate.click(node.querySelector('.array-item-add button')); expect(node.querySelector('#root_children_0_name')).to.exist; }); it('should follow recursive references', () => { const schema = { definitions: { bar: { $ref: '#/definitions/qux' }, qux: { type: 'string' }, }, type: 'object', required: ['foo'], properties: { foo: { $ref: '#/definitions/bar' }, }, }; const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('input[type=text]')).to.have.length.of(1); }); it('should follow multiple recursive references', () => { const schema = { definitions: { bar: { $ref: '#/definitions/bar2' }, bar2: { $ref: '#/definitions/qux' }, qux: { type: 'string' }, }, type: 'object', required: ['foo'], properties: { foo: { $ref: '#/definitions/bar' }, }, }; const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('input[type=text]')).to.have.length.of(1); }); it('should priorize definition over schema type property', () => { // Refs bug #140 const schema = { type: 'object', properties: { name: { type: 'string' }, childObj: { type: 'object', $ref: '#/definitions/childObj', }, }, definitions: { childObj: { type: 'object', properties: { otherName: { type: 'string' }, }, }, }, }; const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('input[type=text]')).to.have.length.of(2); }); it('should priorize local properties over definition ones', () => { // Refs bug #140 const schema = { type: 'object', properties: { foo: { title: 'custom title', $ref: '#/definitions/objectDef', }, }, definitions: { objectDef: { type: 'object', title: 'definition title', properties: { field: { type: 'string' }, }, }, }, }; const { node } = createFormComponent({ schema }); expect(node.querySelector('legend').textContent).eql('custom title'); }); it('should propagate and handle a resolved schema definition', () => { const schema = { definitions: { enumDef: { type: 'string', enum: ['a', 'b'] }, }, type: 'object', properties: { name: { $ref: '#/definitions/enumDef' }, }, }; const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('option')).to.have.length.of(3); }); }); describe('Default value handling on clear', () => { const schema = { type: 'string', default: 'foo', }; it('should not set default when a text field is cleared', () => { const { node } = createFormComponent({ schema, formData: 'bar' }); Simulate.change(node.querySelector('input'), { target: { value: '' }, }); expect(node.querySelector('input').value).eql(''); }); }); describe('Defaults array items default propagation', () => { const schema = { type: 'object', title: 'lvl 1 obj', properties: { object: { type: 'object', title: 'lvl 2 obj', properties: { array: { type: 'array', items: { type: 'object', title: 'lvl 3 obj', properties: { bool: { type: 'boolean', default: true, }, }, }, }, }, }, }, }; it('should propagate deeply nested defaults to submit handler', () => { const { node, onSubmit } = createFormComponent({ schema }); Simulate.click(node.querySelector('.array-item-add button')); Simulate.submit(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { object: { array: [ { bool: true, }, ], }, }, }); }); }); describe('Defaults additionalProperties propagation', () => { it('should submit string string map defaults', () => { const schema = { type: 'object', additionalProperties: { type: 'string', }, default: { foo: 'bar', }, }; const { node, onSubmit } = createFormComponent({ schema }); Simulate.submit(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { foo: 'bar', }, }); }); it('should submit a combination of properties and additional properties defaults', () => { const schema = { type: 'object', properties: { x: { type: 'string', }, }, additionalProperties: { type: 'string', }, default: { x: 'x default value', y: 'y default value', }, }; const { node, onSubmit } = createFormComponent({ schema }); Simulate.submit(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { x: 'x default value', y: 'y default value', }, }); }); it('should submit a properties and additional properties defaults when properties default is nested', () => { const schema = { type: 'object', properties: { x: { type: 'string', default: 'x default value', }, }, additionalProperties: { type: 'string', }, default: { y: 'y default value', }, }; const { node, onSubmit } = createFormComponent({ schema }); Simulate.submit(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { x: 'x default value', y: 'y default value', }, }); }); it('should submit defaults when nested map has map values', () => { const schema = { type: 'object', properties: { x: { additionalProperties: { $ref: '#/definitions/objectDef', }, }, }, definitions: { objectDef: { type: 'object', additionalProperties: { type: 'string', }, }, }, default: { x: { y: { z: 'x.y.z default value', }, }, }, }; const { node, onSubmit } = createFormComponent({ schema }); Simulate.submit(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { x: { y: { z: 'x.y.z default value', }, }, }, }); }); it('should submit defaults when they are defined in a nested additionalProperties', () => { const schema = { type: 'object', properties: { x: { additionalProperties: { type: 'string', default: 'x.y default value', }, }, }, default: { x: { y: {}, }, }, }; const { node, onSubmit } = createFormComponent({ schema }); Simulate.submit(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { x: { y: 'x.y default value', }, }, }); }); it('should submit defaults when additionalProperties is a boolean value', () => { const schema = { type: 'object', additionalProperties: true, default: { foo: 'bar', }, }; const { node, onSubmit } = createFormComponent({ schema }); Simulate.submit(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { foo: 'bar', }, }); }); it('should NOT submit default values when additionalProperties is false', () => { const schema = { type: 'object', properties: { foo: { type: 'string', }, }, additionalProperties: false, default: { foo: "I'm the only one", bar: "I don't belong here", }, }; const { node, onSubmit } = createFormComponent({ schema }); Simulate.submit(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { foo: "I'm the only one", }, }); }); }); describe('Submit handler', () => { it('should call provided submit handler with form state', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, }, }; const formData = { foo: 'bar', }; const onSubmit = sandbox.spy(); const event = { type: 'submit' }; const { node } = createFormComponent({ schema, formData, onSubmit, }); Simulate.submit(node, event); sinon.assert.calledWithMatch(onSubmit, { formData, schema }, event); }); it('should not call provided submit handler on validation errors', () => { const schema = { type: 'object', properties: { foo: { type: 'string', minLength: 1, }, }, }; const formData = { foo: '', }; const onSubmit = sandbox.spy(); const onError = sandbox.spy(); const { node } = createFormComponent({ schema, formData, onSubmit, onError, }); Simulate.submit(node); sinon.assert.notCalled(onSubmit); }); }); describe('Change handler', () => { it('should call provided change handler on form state change with schema and uiSchema', () => { const schema = { type: 'object', properties: { foo: { type: 'string', }, }, }; const uiSchema = { foo: { 'ui:field': 'textarea' }, }; const formData = { foo: '', }; const onChange = sandbox.spy(); const { node } = createFormComponent({ schema, uiSchema, formData, onChange, }); Simulate.change(node.querySelector('[type=text]'), { target: { value: 'new' }, }); sinon.assert.calledWithMatch( onChange, { formData: { foo: 'new', }, schema, uiSchema, }, 'root_foo' ); }); it('should call last provided change handler', async () => { const schema = { type: 'object', properties: { foo: { type: 'string', default: 'bar', }, }, }; const secondOnChange = sandbox.spy(); const { comp, onChange } = createFormComponent({ schema, formData: { foo: 'bar1' }, }); act(() => { setProps(comp, { schema, formData: {}, onChange, }); }); sinon.assert.callCount(onChange, 1); act(() => { setProps(comp, { schema, formData: { foo: 'bar2' }, }); }); act(() => { setProps(comp, { schema, formData: {}, onChange: secondOnChange, }); }); sinon.assert.callCount(onChange, 1); sinon.assert.callCount(secondOnChange, 1); }); }); describe('Blur handler', () => { it('should call provided blur handler on form input blur event', () => { const schema = { type: 'object', properties: { foo: { type: 'string', }, }, }; const formData = { foo: '', }; const onBlur = sandbox.spy(); const { node } = createFormComponent({ schema, formData, onBlur }); const input = node.querySelector('[type=text]'); Simulate.blur(input, { target: { value: 'new' }, }); sinon.assert.calledWithMatch(onBlur, input.id, 'new'); }); }); describe('Focus handler', () => { it('should call provided focus handler on form input focus event', () => { const schema = { type: 'object', properties: { foo: { type: 'string', }, }, }; const formData = { foo: '', }; const onFocus = sandbox.spy(); const { node } = createFormComponent({ schema, formData, onFocus }); const input = node.querySelector('[type=text]'); Simulate.focus(input, { target: { value: 'new' }, }); sinon.assert.calledWithMatch(onFocus, input.id, 'new'); }); }); describe('Error handler', () => { it('should call provided error handler on validation errors', () => { const schema = { type: 'object', properties: { foo: { type: 'string', minLength: 1, }, }, }; const formData = { foo: '', }; const onError = sandbox.spy(); const { node } = createFormComponent({ schema, formData, onError }); Simulate.submit(node); sinon.assert.calledOnce(onError); }); }); describe('Required and optional fields', () => { const schema = { definitions: { address: { type: 'object', properties: { street_address: { type: 'string', }, city: { type: 'string', }, state: { type: 'string', }, }, required: ['street_address', 'city', 'state'], }, }, type: 'object', properties: { billing_address: { title: 'Billing address', $ref: '#/definitions/address', }, shipping_address: { title: 'Shipping address', $ref: '#/definitions/address', }, }, required: ['shipping_address'], }; it('Errors when shipping address is not filled out, billing address is not needed', () => { const { node, onChange, onError } = createFormComponent({ schema }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { shipping_address: {}, }, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: "must have required property 'street_address'", name: 'required', params: { missingProperty: 'street_address' }, property: '.shipping_address.street_address', schemaPath: '#/definitions/address/required', stack: "must have required property 'street_address'", }, { message: "must have required property 'city'", name: 'required', params: { missingProperty: 'city' }, property: '.shipping_address.city', schemaPath: '#/definitions/address/required', stack: "must have required property 'city'", }, { message: "must have required property 'state'", name: 'required', params: { missingProperty: 'state' }, property: '.shipping_address.state', schemaPath: '#/definitions/address/required', stack: "must have required property 'state'", }, ]); }); it('Submits when shipping address is filled out, billing address is not needed', () => { const { node, onSubmit } = createFormComponent({ schema, formData: { shipping_address: { street_address: '21, Jump Street', city: 'Babel', state: 'Neverland', }, }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { shipping_address: { street_address: '21, Jump Street', city: 'Babel', state: 'Neverland', }, }, }); }); }); describe('Default form state behavior flag', () => { const schema = { type: 'object', properties: { albums: { type: 'array', items: { type: 'string' }, title: 'Album Titles', minItems: 3, }, }, }; it('Errors when minItems is set, field is required, and minimum number of items are not present with IgnoreMinItemsUnlessRequired flag set', () => { const { node, onError } = createFormComponent({ schema: { ...schema, required: ['albums'] }, formData: { albums: ['Until We Have Faces'], }, experimental_defaultFormStateBehavior: { arrayMinItems: { populate: 'requiredOnly' } }, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have fewer than 3 items', name: 'minItems', params: { limit: 3 }, property: '.albums', schemaPath: '#/properties/albums/minItems', stack: "'Album Titles' must NOT have fewer than 3 items", }, ]); }); it('Submits when minItems is set, field is not required, and no items are present with IgnoreMinItemsUnlessRequired flag set', () => { const { node, onSubmit } = createFormComponent({ schema, formData: {}, experimental_defaultFormStateBehavior: { arrayMinItems: { populate: 'requiredOnly' } }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: {} }); }); }); describe('Schema and external formData updates', () => { let comp; let onChangeProp; let formProps; beforeEach(() => { onChangeProp = sinon.spy(); formProps = { schema: { type: 'string', default: 'foobar', }, formData: 'some value', onChange: onChangeProp, }; comp = createFormComponent(formProps).comp; }); describe('when the form data is set to null', () => { beforeEach(() => setProps(comp, { ...formProps, formData: null, }) ); it('should call onChange', () => { sinon.assert.calledOnce(onChangeProp); sinon.assert.calledWith(onChangeProp, { edit: true, errorSchema: {}, errors: [], formData: 'foobar', idSchema: { $id: 'root' }, schema: formProps.schema, uiSchema: {}, schemaValidationErrors: undefined, schemaValidationErrorSchema: undefined, schemaUtils: sinon.match.object, }); }); }); describe('when the schema default is changed but formData is not changed', () => { const newSchema = { type: 'string', default: 'the new default', }; beforeEach(() => setProps(comp, { ...formProps, schema: newSchema, formData: 'some value', }) ); it('should not call onChange', () => { sinon.assert.notCalled(onChangeProp); }); }); describe('when the schema default is changed and formData is changed', () => { const newSchema = { type: 'string', default: 'the new default', }; beforeEach(() => setProps(comp, { ...formProps, schema: newSchema, formData: 'something else', }) ); it('should not call onChange', () => { sinon.assert.notCalled(onChangeProp); }); }); describe('when the schema default is changed and formData is nulled', () => { const newSchema = { type: 'string', default: 'the new default', }; beforeEach(() => setProps(comp, { ...formProps, schema: newSchema, formData: null, }) ); it('should call onChange', () => { sinon.assert.calledOnce(onChangeProp); sinon.assert.calledWithMatch(onChangeProp, { schema: newSchema, formData: 'the new default', }); }); }); describe('when the onChange prop sets formData to a falsey value', () => { class TestForm extends React.Component { constructor() { super(); this.state = { formData: {}, }; } onChange = () => { this.setState({ formData: this.props.falseyValue }); }; render() { const schema = { type: 'object', properties: { value: { type: 'string', }, }, }; return <Form onChange={this.onChange} schema={schema} formData={this.state.formData} validator={validator} />; } } const falseyValues = [0, false, null, undefined, NaN]; falseyValues.forEach((falseyValue) => { it("Should not crash due to 'Maximum call stack size exceeded...'", () => { // It is expected that this will throw an error due to non-matching propTypes, // so the error message needs to be inspected try { createComponent(TestForm, { falseyValue }); } catch (e) { expect(e.message).to.not.equal('Maximum call stack size exceeded'); } }); }); }); }); describe('External formData updates', () => { describe('root level', () => { const formProps = { schema: { type: 'string' }, liveValidate: true, }; it('should call submit handler with new formData prop value', () => { const { comp, node, onSubmit } = createFormComponent(formProps); setProps(comp, { ...formProps, onSubmit, formData: 'yo', }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: 'yo', }); }); it('should validate formData when the schema is updated', () => { const { comp, node, onError } = createFormComponent(formProps); setProps(comp, { ...formProps, onError, formData: 'yo', schema: { type: 'number' }, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must be number', name: 'type', params: { type: 'number' }, property: '', schemaPath: '#/type', stack: 'must be number', }, ]); }); }); describe('object level', () => { it('should call submit handler with new formData prop value', () => { const formProps = { schema: { type: 'object', properties: { foo: { type: 'string' } } }, }; const { comp, onSubmit, node } = createFormComponent(formProps); setProps(comp, { ...formProps, onSubmit, formData: { foo: 'yo' }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { foo: 'yo' }, }); }); }); describe('array level', () => { it('should call submit handler with new formData prop value', () => { const schema = { type: 'array', items: { type: 'string', }, }; const { comp, node, onSubmit } = createFormComponent({ schema }); setProps(comp, { schema, onSubmit, formData: ['yo'] }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: ['yo'], }); }); }); }); describe('Internal formData updates', () => { it('root', () => { const formProps = { schema: { type: 'string' }, liveValidate: true, }; const { node, onChange } = createFormComponent(formProps); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'yo' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: 'yo', }, 'root' ); }); it('object', () => { const { node, onChange } = createFormComponent({ schema: { type: 'object', properties: { foo: { type: 'string', }, }, }, }); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'yo' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'yo' }, }, 'root_foo' ); }); it('array of strings', () => { const schema = { type: 'array', items: { type: 'string', }, }; const { node, onChange } = createFormComponent({ schema }); Simulate.click(node.querySelector('.array-item-add button')); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'yo' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: ['yo'], }, 'root_0' ); }); it('array of objects', () => { const schema = { type: 'array', items: { type: 'object', properties: { name: { type: 'string' }, }, }, }; const { node, onChange } = createFormComponent({ schema }); Simulate.click(node.querySelector('.array-item-add button')); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'yo' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: [{ name: 'yo' }], }, 'root_0' ); }); it('dependency with array of objects', () => { const schema = { definitions: {}, type: 'object', properties: { show: { type: 'boolean', }, }, dependencies: { show: { oneOf: [ { properties: { show: { const: true, }, participants: { type: 'array', items: { type: 'object', properties: { name: { type: 'string', }, }, }, }, }, }, ], }, }, }; const { node, onChange } = createFormComponent({ schema }); Simulate.change(node.querySelector('[type=checkbox]'), { target: { checked: true }, }); Simulate.click(node.querySelector('.array-item-add button')); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'yo' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { show: true, participants: [{ name: 'yo' }], }, }, 'root_participants_0_name' ); }); }); describe('Error contextualization', () => { describe('on form state updated', () => { const schema = { type: 'string', minLength: 8, }; describe('Lazy validation', () => { it('should not update the errorSchema when the formData changes', () => { const { node, onChange } = createFormComponent({ schema }); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'short' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { errorSchema: {}, }, 'root' ); }); it('should not denote an error in the field', () => { const { node } = createFormComponent({ schema }); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'short' }, }); expect(node.querySelectorAll('.field-error')).to.have.length.of(0); }); it("should clean contextualized errors up when they're fixed", () => { const altSchema = { type: 'object', properties: { field1: { type: 'string', minLength: 8 }, field2: { type: 'string', minLength: 8 }, }, }; const { node } = createFormComponent({ schema: altSchema, formData: { field1: 'short', field2: 'short', }, }); Simulate.submit(node); // Fix the first field Simulate.change(node.querySelectorAll('input[type=text]')[0], { target: { value: 'fixed error' }, }); Simulate.submit(node); expect(node.querySelectorAll('.field-error')).to.have.length.of(1); // Fix the second field Simulate.change(node.querySelectorAll('input[type=text]')[1], { target: { value: 'fixed error too' }, }); Simulate.submit(node); // No error remaining, shouldn't throw. Simulate.submit(node); expect(node.querySelectorAll('.field-error')).to.have.length.of(0); }); }); describe('Live validation', () => { it('should update the errorSchema when the formData changes', () => { const { node, onChange } = createFormComponent({ schema, liveValidate: true, }); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'short' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { errorSchema: { __errors: ['must NOT have fewer than 8 characters'], }, }, 'root' ); }); it('should denote the new error in the field', () => { const { node } = createFormComponent({ schema, liveValidate: true, }); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'short' }, }); expect(node.querySelectorAll('.field-error')).to.have.length.of(1); expect(node.querySelector('.field-string .error-detail').textContent).eql( 'must NOT have fewer than 8 characters' ); }); }); describe('Disable validation onChange event', () => { it('should not update errorSchema when the formData changes', () => { const { node, onChange } = createFormComponent({ schema, noValidate: true, liveValidate: true, }); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'short' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { errorSchema: {}, }, 'root' ); }); }); describe('Disable validation onSubmit event', () => { it('should not update errorSchema when the formData changes', () => { const { node, onSubmit } = createFormComponent({ schema, noValidate: true, }); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'short' }, }); Simulate.submit(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { errorSchema: {}, }); }); }); }); describe('on form submitted', () => { const schema = { type: 'string', minLength: 8, }; it('should call the onError handler and focus on the error', () => { const onError = sandbox.spy(); const { node } = createFormComponent({ schema, onError, focusOnFirstError: true, }); const input = node.querySelector('input[type=text]'); const focusSpy = sinon.spy(); // Since programmatically triggering focus does not call onFocus, change the focus method to a spy input.focus = focusSpy; Simulate.change(input, { target: { value: 'short' }, }); Simulate.submit(node); sinon.assert.calledWithMatch( onError, sinon.match((value) => { return value.length === 1 && value[0].message === 'must NOT have fewer than 8 characters'; }) ); sinon.assert.calledOnce(focusSpy); }); it('should call the onError handler and call the provided focusOnFirstError callback function', () => { const onError = sandbox.spy(); const focusCallback = () => { console.log('focusCallback called'); }; const focusOnFirstError = sandbox.spy(focusCallback); const { node } = createFormComponent({ schema, onError, focusOnFirstError, uiSchema: { 'ui:disabled': true, }, }); const input = node.querySelector('input[type=text]'); const focusSpy = sinon.spy(); // Since programmatically triggering focus does not call onFocus, change the focus method to a spy input.focus = focusSpy; Simulate.change(input, { target: { value: 'short' }, }); Simulate.submit(node); sinon.assert.calledWithMatch( onError, sinon.match((value) => { return value.length === 1 && value[0].message === 'must NOT have fewer than 8 characters'; }) ); sinon.assert.notCalled(focusSpy); sinon.assert.calledOnce(focusOnFirstError); }); it('should call the onError handler and call the provided focusOnFirstError callback function', () => { const onError = sandbox.spy(); const focusCallback = () => { console.log('focusCallback called'); }; const extraErrors = { __errors: ['foo'], }; const focusOnFirstError = sandbox.spy(focusCallback); const { node } = createFormComponent({ schema, onError, focusOnFirstError, extraErrors, extraErrorsBlockSubmit: true, }); const input = node.querySelector('input[type=text]'); const focusSpy = sinon.spy(); // Since programmatically triggering focus does not call onFocus, change the focus method to a spy input.focus = focusSpy; Simulate.change(input, { target: { value: 'valid string' }, }); Simulate.submit(node); sinon.assert.calledWithMatch( onError, sinon.match((value) => { return value.length === 1 && value[0].message === 'foo'; }) ); sinon.assert.notCalled(focusSpy); sinon.assert.calledOnce(focusOnFirstError); }); it('should reset errors and errorSchema state to initial state after correction and resubmission', () => { const { node, onError, onSubmit } = createFormComponent({ schema, }); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'short' }, }); Simulate.submit(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have fewer than 8 characters', name: 'minLength', params: { limit: 8 }, property: '', schemaPath: '#/minLength', stack: 'must NOT have fewer than 8 characters', }, ]); sinon.assert.calledOnce(onError); sinon.resetHistory(onError); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'long enough' }, }); Simulate.submit(node); sinon.assert.notCalled(onError); sinon.assert.calledWithMatch(onSubmit.lastCall, { errors: [], errorSchema: {}, }); }); it('should reset errors from UI after correction and resubmission', () => { const { node } = createFormComponent({ schema, }); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'short' }, }); Simulate.submit(node); const errorListHTML = '<li class="text-danger">must NOT have fewer than 8 characters</li>'; const errors = node.querySelectorAll('.error-detail'); // Check for errors attached to the field expect(errors).to.have.lengthOf(1); expect(errors[0]).to.have.property('innerHTML'); expect(errors[0].innerHTML).to.be.eql(errorListHTML); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'long enough' }, }); Simulate.submit(node); expect(node.querySelectorAll('.error-detail')).to.have.lengthOf(0); }); }); describe('root level', () => { const formProps = { liveValidate: true, schema: { type: 'string', minLength: 8, }, formData: 'short', }; it('should reflect the contextualized error in state', () => { const { node, onError } = createFormComponent(formProps); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have fewer than 8 characters', name: 'minLength', params: { limit: 8 }, property: '', schemaPath: '#/minLength', stack: 'must NOT have fewer than 8 characters', }, ]); }); it('should denote the error in the field', () => { const { node } = createFormComponent(formProps); expect(node.querySelectorAll('.field-error')).to.have.length.of(1); expect(node.querySelector('.field-string .error-detail').textContent).eql( 'must NOT have fewer than 8 characters' ); }); }); describe('root level with multiple errors', () => { const formProps = { liveValidate: true, schema: { type: 'string', minLength: 8, pattern: 'd+', }, formData: 'short', }; it('should reflect the contextualized error in state', () => { const { node, onError } = createFormComponent(formProps); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have fewer than 8 characters', name: 'minLength', params: { limit: 8 }, property: '', schemaPath: '#/minLength', stack: 'must NOT have fewer than 8 characters', }, { message: 'must match pattern "d+"', name: 'pattern', params: { pattern: 'd+' }, property: '', schemaPath: '#/pattern', stack: 'must match pattern "d+"', }, ]); }); it('should denote the error in the field', () => { const { node } = createFormComponent(formProps); const liNodes = node.querySelectorAll('.field-string .error-detail li'); const errors = [].map.call(liNodes, (li) => li.textContent); expect(errors).eql(['must NOT have fewer than 8 characters', 'must match pattern "d+"']); }); }); describe('nested field level', () => { const schema = { type: 'object', properties: { level1: { type: 'object', properties: { level2: { type: 'string', minLength: 8, }, }, }, }, }; const formProps = { schema, liveValidate: true, formData: { level1: { level2: 'short', }, }, }; it('should reflect the contextualized error in state', () => { const { node, onError } = createFormComponent(formProps); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have fewer than 8 characters', name: 'minLength', params: { limit: 8 }, property: '.level1.level2', schemaPath: '#/properties/level1/properties/level2/minLength', stack: '.level1.level2 must NOT have fewer than 8 characters', }, ]); }); it('should denote the error in the field', () => { const { node } = createFormComponent(formProps); const errorDetail = node.querySelector('.field-object .field-string .error-detail'); expect(node.querySelectorAll('.field-error')).to.have.length.of(1); expect(errorDetail.textContent).eql('must NOT have fewer than 8 characters'); }); }); describe('array indices', () => { const schema = { type: 'array', items: { type: 'string', minLength: 4, }, }; const formProps = { schema, liveValidate: true, formData: ['good', 'bad', 'good'], }; it('should contextualize the error for array indices', () => { const { node, onError } = createFormComponent(formProps); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have fewer than 4 characters', name: 'minLength', params: { limit: 4 }, property: '.1', schemaPath: '#/items/minLength', stack: '.1 must NOT have fewer than 4 characters', }, ]); }); it('should denote the error in the item field in error', () => { const { node } = createFormComponent(formProps); const fieldNodes = node.querySelectorAll('.field-string'); const liNodes = fieldNodes[1].querySelectorAll('.field-string .error-detail li'); const errors = [].map.call(liNodes, (li) => li.textContent); expect(fieldNodes[1].classList.contains('field-error')).eql(true); expect(errors).eql(['must NOT have fewer than 4 characters']); }); it('should not denote errors on non impacted fields', () => { const { node } = createFormComponent(formProps); const fieldNodes = node.querySelectorAll('.field-string'); expect(fieldNodes[0].classList.contains('field-error')).eql(false); expect(fieldNodes[2].classList.contains('field-error')).eql(false); }); }); describe('nested array indices', () => { const schema = { type: 'object', properties: { level1: { type: 'array', items: { type: 'string', minLength: 4, }, }, }, }; const formProps = { schema, liveValidate: true }; it('should contextualize the error for nested array indices', () => { const { node, onError } = createFormComponent({ ...formProps, formData: { level1: ['good', 'bad', 'good', 'bad'], }, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have fewer than 4 characters', name: 'minLength', params: { limit: 4 }, property: '.level1.1', schemaPath: '#/properties/level1/items/minLength', stack: '.level1.1 must NOT have fewer than 4 characters', }, { message: 'must NOT have fewer than 4 characters', name: 'minLength', params: { limit: 4 }, property: '.level1.3', schemaPath: '#/properties/level1/items/minLength', stack: '.level1.3 must NOT have fewer than 4 characters', }, ]); }); it('should denote the error in the nested item field in error', () => { const { node } = createFormComponent({ ...formProps, formData: { level1: ['good', 'bad', 'good'], }, }); const liNodes = node.querySelectorAll('.field-string .error-detail li'); const errors = [].map.call(liNodes, (li) => li.textContent); expect(errors).eql(['must NOT have fewer than 4 characters']); }); }); describe('nested arrays', () => { const schema = { type: 'object', properties: { outer: { type: 'array', items: { type: 'array', items: { type: 'string', minLength: 4, }, }, }, }, }; const formData = { outer: [ ['good', 'bad'], ['bad', 'good'], ], }; const formProps = { schema, formData, liveValidate: true }; it('should contextualize the error for nested array indices, focusing on first error', () => { const { node, onError } = createFormComponent({ ...formProps, focusOnFirstError: true, }); const focusSpy = sinon.spy(); const input = node.querySelector('input[id=root_outer_0_1]'); // Since programmatically triggering focus does not call onFocus, change the focus method to a spy input.focus = focusSpy; submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have fewer than 4 characters', name: 'minLength', params: { limit: 4 }, property: '.outer.0.1', schemaPath: '#/properties/outer/items/items/minLength', stack: '.outer.0.1 must NOT have fewer than 4 characters', }, { message: 'must NOT have fewer than 4 characters', name: 'minLength', params: { limit: 4 }, property: '.outer.1.0', schemaPath: '#/properties/outer/items/items/minLength', stack: '.outer.1.0 must NOT have fewer than 4 characters', }, ]); sinon.assert.calledOnce(focusSpy); }); it('should denote the error in the nested item field in error', () => { const { node } = createFormComponent(formProps); const fields = node.querySelectorAll('.field-string'); const errors = [].map.call(fields, (field) => { const li = field.querySelector('.error-detail li'); return li && li.textContent; }); expect(errors).eql([ null, 'must NOT have fewer than 4 characters', 'must NOT have fewer than 4 characters', null, ]); }); }); describe('array nested items', () => { const schema = { type: 'array', items: { type: 'object', properties: { foo: { type: 'string', minLength: 4, }, }, }, }; const formProps = { schema, liveValidate: true, formData: [{ foo: 'good' }, { foo: 'bad' }, { foo: 'good' }], }; it('should contextualize the error for array nested items', () => { const { node, onError } = createFormComponent(formProps); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have fewer than 4 characters', name: 'minLength', params: { limit: 4 }, property: '.1.foo', schemaPath: '#/items/properties/foo/minLength', stack: '.1.foo must NOT have fewer than 4 characters', }, ]); }); it('should denote the error in the array nested item', () => { const { node } = createFormComponent(formProps); const fieldNodes = node.querySelectorAll('.field-string'); const liNodes = fieldNodes[1].querySelectorAll('.field-string .error-detail li'); const errors = [].map.call(liNodes, (li) => li.textContent); expect(fieldNodes[1].classList.contains('field-error')).eql(true); expect(errors).eql(['must NOT have fewer than 4 characters']); }); }); describe('schema dependencies', () => { const schema = { type: 'object', properties: { branch: { type: 'number', enum: [1, 2, 3], default: 1, }, }, required: ['branch'], dependencies: { branch: { oneOf: [ { properties: { branch: { enum: [1], }, field1: { type: 'number', }, }, required: ['field1'], }, { properties: { branch: { enum: [2], }, field1: { type: 'number', }, field2: { type: 'number', }, }, required: ['field1', 'field2'], }, ], }, }, }; it('should only show error for property in selected branch', () => { const { node, onChange } = createFormComponent({ schema, liveValidate: true, }); Simulate.change(node.querySelector('input[type=number]'), { target: { value: 'not a number' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { errorSchema: { field1: { __errors: ['must be number'] } }, }, 'root' ); }); it('should only show errors for properties in selected branch', () => { const { node, onChange } = createFormComponent({ schema, liveValidate: true, formData: { branch: 2 }, }); Simulate.change(node.querySelector('input[type=number]'), { target: { value: 'not a number' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { errorSchema: { field1: { __errors: ['must be number'], }, field2: { __errors: ["must have required property 'field2'"], }, }, }, 'root_field1' ); }); it('should not show any errors when branch is empty', () => { const { node, onChange } = createFormComponent({ schema, liveValidate: true, formData: { branch: 3 }, }); Simulate.change(node.querySelector('select'), { target: { value: 3 }, }); sinon.assert.calledWithMatch( onChange.lastCall, { errorSchema: {}, }, 'root_branch' ); }); }); }); describe('Schema and formData updates', () => { // https://github.com/rjsf-team/react-jsonschema-form/issues/231 const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; it('should replace state when props remove formData keys', () => { const formData = { foo: 'foo', bar: 'bar' }; const { comp, node, onChange } = createFormComponent({ schema, formData, }); setProps(comp, { onChange, schema: { type: 'object', properties: { bar: { type: 'string' }, }, }, formData: { bar: 'bar' }, }); Simulate.change(node.querySelector('#root_bar'), { target: { value: 'baz' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { bar: 'baz' }, }, 'root_bar' ); }); it('should replace state when props change formData keys', () => { const formData = { foo: 'foo', bar: 'bar' }; const { comp, node, onChange } = createFormComponent({ schema, formData, }); setProps(comp, { onChange, schema: { type: 'object', properties: { foo: { type: 'string' }, baz: { type: 'string' }, }, }, formData: { foo: 'foo', baz: 'bar' }, }); Simulate.change(node.querySelector('#root_baz'), { target: { value: 'baz' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'foo', baz: 'baz' }, }, 'root_baz' ); }); }); describe('idSchema updates based on formData', () => { const schema = { type: 'object', properties: { a: { type: 'string', enum: ['int', 'bool'] }, }, dependencies: { a: { oneOf: [ { properties: { a: { enum: ['int'] }, }, }, { properties: { a: { enum: ['bool'] }, b: { type: 'boolean' }, }, }, ], }, }, }; it('should not update idSchema for a falsey value', () => { const formData = { a: 'int' }; const { comp, node, onSubmit } = createFormComponent({ schema, formData, }); setProps(comp, { onSubmit, schema: { type: 'object', properties: { a: { type: 'string', enum: ['int', 'bool'] }, }, dependencies: { a: { oneOf: [ { properties: { a: { enum: ['int'] }, }, }, { properties: { a: { enum: ['bool'] }, b: { type: 'boolean' }, }, }, ], }, }, }, formData: { a: 'int' }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { idSchema: { $id: 'root', a: { $id: 'root_a' } }, }); }); it('should update idSchema based on truthy value', () => { const formData = { a: 'int', }; const { comp, node, onSubmit } = createFormComponent({ schema, formData, }); setProps(comp, { onSubmit, schema: { type: 'object', properties: { a: { type: 'string', enum: ['int', 'bool'] }, }, dependencies: { a: { oneOf: [ { properties: { a: { enum: ['int'] }, }, }, { properties: { a: { enum: ['bool'] }, b: { type: 'boolean' }, }, }, ], }, }, }, formData: { a: 'bool' }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { idSchema: { $id: 'root', a: { $id: 'root_a' }, b: { $id: 'root_b' }, }, }); }); }); describe('Form disable prop', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; const formData = { foo: 'foo', bar: 'bar' }; it('should enable all items', () => { const { node } = createFormComponent({ schema, formData }); expect(node.querySelectorAll('input:disabled')).to.have.length.of(0); }); it('should disable all items', () => { const { node } = createFormComponent({ schema, formData, disabled: true, }); expect(node.querySelectorAll('input:disabled')).to.have.length.of(2); }); it('should disable the submit button', () => { const { node } = createFormComponent({ schema, formData, disabled: true, }); expect(node.querySelector("button[type='submit']")).to.exist; expect(node.querySelector("button[type='submit']:disabled")).to.exist; }); it('disabling the submit button via ui:schema - ui:submitButtonOptions props is still possible', () => { const { node } = createFormComponent({ schema, formData, uiSchema: { 'ui:submitButtonOptions': { props: { disabled: true } } }, }); expect(node.querySelector("button[type='submit']")).to.exist; expect(node.querySelector("button[type='submit']:disabled")).to.exist; }); it('disabling the submit button via ui:schema - ui:options, submitButtonOptions props is still possible', () => { const { node } = createFormComponent({ schema, formData, uiSchema: { 'ui:options': { submitButtonOptions: { submitText: 'hello', props: { disabled: true } } } }, }); expect(node.querySelector("button[type='submit']")).to.exist; expect(node.querySelector("button[type='submit']").textContent).to.eql('hello'); expect(node.querySelector("button[type='submit']:disabled")).to.exist; }); it('if both ui:submitButtonProps and the main form disabled props are provided, and either of them are true, the button will be disabled', () => { const { node } = createFormComponent({ schema, formData, uiSchema: { 'ui:submitButtonOptions': { props: { disabled: false } } }, disabled: true, }); expect(node.querySelector("button[type='submit']")).to.exist; expect(node.querySelector("button[type='submit']:disabled")).to.exist; }); it('if both ui:submitButtonProps and the main form disabled props are provided, but false, then submit button will not be disabled', () => { const { node } = createFormComponent({ schema, formData, uiSchema: { 'ui:submitButtonOptions': { props: { disabled: false } } }, disabled: false, }); expect(node.querySelector("button[type='submit']")).to.exist; expect(node.querySelector("button[type='submit']:disabled")).not.to.exist; }); }); describe('Form readonly prop', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'object', properties: { baz: { type: 'string' } } }, }, }; const formData = { foo: 'foo', bar: { baz: 'baz' } }; it('should not have any readonly items', () => { const { node } = createFormComponent({ schema, formData }); expect(node.querySelectorAll('input:read-only')).to.have.length.of(0); }); it('should readonly all items', () => { const { node } = createFormComponent({ schema, formData, readonly: true, }); expect(node.querySelectorAll('input:read-only')).to.have.length.of(2); }); }); describe('Attributes', () => { const formProps = { schema: {}, id: 'test-form', className: 'test-class other-class', name: 'testName', method: 'post', target: '_blank', action: '/users/list', autoComplete: 'off', enctype: 'multipart/form-data', acceptcharset: 'ISO-8859-1', noHtml5Validate: true, }; let node; beforeEach(() => { node = createFormComponent(formProps).node; }); it('should set attr id of form', () => { expect(node.getAttribute('id')).eql(formProps.id); }); it('should set attr class of form', () => { expect(node.getAttribute('class')).eql(formProps.className); }); it('should set attr name of form', () => { expect(node.getAttribute('name')).eql(formProps.name); }); it('should set attr method of form', () => { expect(node.getAttribute('method')).eql(formProps.method); }); it('should set attr target of form', () => { expect(node.getAttribute('target')).eql(formProps.target); }); it('should set attr action of form', () => { expect(node.getAttribute('action')).eql(formProps.action); }); it('should set attr enctype of form', () => { expect(node.getAttribute('enctype')).eql(formProps.enctype); }); it('should set attr acceptcharset of form', () => { expect(node.getAttribute('accept-charset')).eql(formProps.acceptcharset); }); it('should set attr novalidate of form', () => { expect(node.getAttribute('novalidate')).not.to.be.null; }); }); describe('Custom format updates', () => { it('Should update custom formats when customFormats is changed', () => { const formProps = { liveValidate: true, formData: { areaCode: '123455', }, schema: { type: 'object', properties: { areaCode: { type: 'string', format: 'area-code', }, }, }, uiSchema: { areaCode: { 'ui:widget': 'area-code', }, }, widgets: { 'area-code': () => <div id='custom' />, }, }; const customValidator = customizeValidator({ customFormats: { 'area-code': /^\d{3}$/, }, }); const { comp, node, onError } = createFormComponent(formProps); submitForm(node); sinon.assert.notCalled(onError); setProps(comp, { ...formProps, onError, validator: customValidator, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must match format "area-code"', name: 'format', params: { format: 'area-code' }, property: '.areaCode', schemaPath: '#/properties/areaCode/format', stack: '.areaCode must match format "area-code"', }, ]); }); }); describe('Meta schema updates', () => { it('Should update allowed meta schemas when additionalMetaSchemas is changed', () => { const formProps = { schema: { $schema: 'http://json-schema.org/draft-06/schema#', type: 'string', minLength: 8, pattern: 'd+', }, formData: 'short', }; const { comp, node, onError } = createFormComponent(formProps); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { stack: 'no schema with key or ref "http://json-schema.org/draft-06/schema#"', }, ]); const customValidator = customizeValidator({ additionalMetaSchemas: [require('ajv/lib/refs/json-schema-draft-06.json')], }); setProps(comp, { ...formProps, onError, validator: customValidator, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have fewer than 8 characters', name: 'minLength', params: { limit: 8 }, property: '', schemaPath: '#/minLength', stack: 'must NOT have fewer than 8 characters', }, { message: 'must match pattern "d+"', name: 'pattern', params: { pattern: 'd+' }, property: '', schemaPath: '#/pattern', stack: 'must match pattern "d+"', }, ]); }); }); describe('Changing the tagName', () => { it('should render the component using the custom tag name', () => { const tagName = 'span'; const { node } = createFormComponent({ schema: {}, tagName }); expect(node.tagName).eql(tagName.toUpperCase()); }); it('should render the component using a ComponentType', () => { const Component = (props) => <div {...props} id='test' />; const { node } = createFormComponent({ schema: {}, tagName: Component }); expect(node.id).eql('test'); }); }); describe('Nested forms', () => { it('should call provided submit handler with form state', () => { const innerOnSubmit = sandbox.spy(); const outerOnSubmit = sandbox.spy(); let innerRef; class ArrayTemplateWithForm extends React.Component { constructor(props) { super(props); innerRef = createRef(); } render() { const innerFormProps = { validator, schema: {}, onSubmit: innerOnSubmit, }; return ( <Portal> <div className='array' ref={innerRef}> <Form {...innerFormProps}> <button className='array-form-submit' type='submit'> Submit </button> </Form> </div> </Portal> ); } } const outerFormProps = { schema: { type: 'array', title: 'my list', description: 'my description', items: { type: 'string' }, }, formData: ['foo', 'bar'], templates: { ArrayFieldTemplate: ArrayTemplateWithForm }, onSubmit: outerOnSubmit, }; createFormComponent(outerFormProps); const arrayForm = innerRef.current.querySelector('form'); const arraySubmit = arrayForm.querySelector('.array-form-submit'); arraySubmit.click(); sinon.assert.calledOnce(innerOnSubmit); sinon.assert.notCalled(outerOnSubmit); }); }); describe('Dependencies', () => { it('should not give a validation error by duplicating enum values in dependencies', () => { const schema = { title: 'A registration form', description: 'A simple form example.', type: 'object', properties: { type1: { type: 'string', title: 'Type 1', enum: ['FOO', 'BAR', 'BAZ'], }, type2: { type: 'string', title: 'Type 2', enum: ['GREEN', 'BLUE', 'RED'], }, }, dependencies: { type1: { properties: { type1: { enum: ['FOO'], }, type2: { enum: ['GREEN'], }, }, }, }, }; const formData = { type1: 'FOO', }; const { node, onError } = createFormComponent({ schema, formData }); Simulate.submit(node); sinon.assert.notCalled(onError); }); it('should show dependency defaults for uncontrolled components', () => { const schema = { type: 'object', properties: { firstName: { type: 'string' }, }, dependencies: { firstName: { properties: { lastName: { type: 'string', default: 'Norris' }, }, }, }, }; const { node } = createFormComponent({ schema }); Simulate.change(node.querySelector('#root_firstName'), { target: { value: 'Chuck' }, }); expect(node.querySelector('#root_lastName').value).eql('Norris'); }); }); }); describe('Form omitExtraData and liveOmit', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); it('should call getUsedFormData when the omitExtraData prop is true and liveOmit is true', () => { const schema = { type: 'object', properties: { foo: { type: 'string', }, }, }; const formData = { foo: 'bar', }; const onChange = sandbox.spy(); const omitExtraData = true; const liveOmit = true; const { node, comp } = createFormComponent({ schema, formData, onChange, omitExtraData, liveOmit, }); sandbox.stub(comp, 'getUsedFormData').returns({ foo: '', }); Simulate.change(node.querySelector('[type=text]'), { target: { value: 'new' }, }); sinon.assert.calledOnce(comp.getUsedFormData); }); it('should not call getUsedFormData when the omitExtraData prop is true and liveOmit is unspecified', () => { const schema = { type: 'object', properties: { foo: { type: 'string', }, }, }; const formData = { foo: 'bar', }; const onChange = sandbox.spy(); const omitExtraData = true; const { node, comp } = createFormComponent({ schema, formData, onChange, omitExtraData, }); sandbox.stub(comp, 'getUsedFormData').returns({ foo: '', }); Simulate.change(node.querySelector('[type=text]'), { target: { value: 'new' }, }); sinon.assert.notCalled(comp.getUsedFormData); }); describe('getUsedFormData', () => { it('should call getUsedFormData when the omitExtraData prop is true', () => { const schema = { type: 'object', properties: { foo: { type: 'string', }, }, }; const formData = { foo: '', }; const onSubmit = sandbox.spy(); const onError = sandbox.spy(); const omitExtraData = true; const { comp, node } = createFormComponent({ schema, formData, onSubmit, onError, omitExtraData, }); sandbox.stub(comp, 'getUsedFormData').returns({ foo: '', }); Simulate.submit(node); sinon.assert.calledOnce(comp.getUsedFormData); }); it('should just return the single input form value', () => { const schema = { title: 'A single-field form', type: 'string', }; const formData = 'foo'; const onSubmit = sandbox.spy(); const { comp } = createFormComponent({ schema, formData, onSubmit, }); const result = comp.getUsedFormData(formData, []); expect(result).eql('foo'); }); it('should return the root level array', () => { const schema = { type: 'array', items: { type: 'string', }, }; const formData = []; const onSubmit = sandbox.spy(); const { comp } = createFormComponent({ schema, formData, onSubmit, }); const result = comp.getUsedFormData(formData, []); expect(result).eql([]); }); it('should call getUsedFormData with data from fields in event', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, }, }; const formData = { foo: 'bar', }; const onSubmit = sandbox.spy(); const { comp } = createFormComponent({ schema, formData, onSubmit, }); const result = comp.getUsedFormData(formData, ['foo']); expect(result).eql({ foo: 'bar' }); }); it('unused form values should be omitted', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, baz: { type: 'string' }, list: { type: 'array', items: { type: 'object', properties: { title: { type: 'string' }, details: { type: 'string' }, }, }, }, }, }; const formData = { foo: 'bar', baz: 'buzz', list: [ { title: 'title0', details: 'details0' }, { title: 'title1', details: 'details1' }, ], }; const onSubmit = sandbox.spy(); const { comp } = createFormComponent({ schema, formData, onSubmit, }); const result = comp.getUsedFormData(formData, ['foo', 'list.0.title', 'list.1.details']); expect(result).eql({ foo: 'bar', list: [{ title: 'title0' }, { details: 'details1' }], }); }); }); describe('getFieldNames()', () => { it('should return an empty array for a single input form', () => { const schema = { type: 'string', }; const formData = 'foo'; const onSubmit = sandbox.spy(); const { comp } = createFormComponent({ schema, formData, onSubmit, }); const pathSchema = { $name: '', }; const fieldNames = comp.getFieldNames(pathSchema, formData); expect(fieldNames).eql([]); }); it('should get field names from pathSchema', () => { const schema = {}; const formData = { extra: { foo: 'bar', }, level1: { level2: 'test', anotherThing: { anotherThingNested: 'abc', extra: 'asdf', anotherThingNested2: 0, }, }, level1a: 1.23, }; const onSubmit = sandbox.spy(); const { comp } = createFormComponent({ schema, formData, onSubmit, }); const pathSchema = { $name: '', level1: { $name: 'level1', level2: { $name: 'level1.level2' }, anotherThing: { $name: 'level1.anotherThing', anotherThingNested: { $name: 'level1.anotherThing.anotherThingNested', }, anotherThingNested2: { $name: 'level1.anotherThing.anotherThingNested2', }, }, }, level1a: { $name: 'level1a', }, }; const fieldNames = comp.getFieldNames(pathSchema, formData); expect(fieldNames.sort()).eql( [ ['level1', 'anotherThing', 'anotherThingNested'], ['level1', 'anotherThing', 'anotherThingNested2'], ['level1', 'level2'], ['level1a'], ].sort() ); }); it('should get field marked as additionalProperties', () => { const schema = {}; const formData = { extra: { foo: 'bar', }, level1: { level2: 'test', extra: 'foo', mixedMap: { namedField: 'foo', key1: 'val1', }, }, level1a: 1.23, }; const onSubmit = sandbox.spy(); const { comp } = createFormComponent({ schema, formData, onSubmit, }); const pathSchema = { $name: '', level1: { $name: 'level1', level2: { $name: 'level1.level2' }, mixedMap: { $name: 'level1.mixedMap', __rjsf_additionalProperties: true, namedField: { $name: 'level1.mixedMap.namedField' }, // this name should not be returned, as the root object paths should be returned for objects marked with additionalProperties }, }, level1a: { $name: 'level1a', }, }; const fieldNames = comp.getFieldNames(pathSchema, formData); expect(fieldNames.sort()).eql([['level1', 'level2'], 'level1.mixedMap', ['level1a']].sort()); }); it('should get field names from pathSchema with array', () => { const schema = {}; const formData = { address_list: [ { street_address: '21, Jump Street', city: 'Babel', state: 'Neverland', }, { street_address: '1234 Schema Rd.', city: 'New York', state: 'Arizona', }, ], }; const onSubmit = sandbox.spy(); const { comp } = createFormComponent({ schema, formData, onSubmit, }); const pathSchema = { $name: '', address_list: { 0: { $name: 'address_list.0', city: { $name: 'address_list.0.city', }, state: { $name: 'address_list.0.state', }, street_address: { $name: 'address_list.0.street_address', }, }, 1: { $name: 'address_list.1', city: { $name: 'address_list.1.city', }, state: { $name: 'address_list.1.state', }, street_address: { $name: 'address_list.1.street_address', }, }, }, }; const fieldNames = comp.getFieldNames(pathSchema, formData); expect(fieldNames.sort()).eql( [ ['address_list', '0', 'city'], ['address_list', '0', 'state'], ['address_list', '0', 'street_address'], ['address_list', '1', 'city'], ['address_list', '1', 'state'], ['address_list', '1', 'street_address'], ].sort() ); }); }); it('should not omit data on change with omitExtraData=false and liveOmit=false', () => { const omitExtraData = false; const liveOmit = false; const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; const formData = { foo: 'foo', baz: 'baz' }; const { node, onChange } = createFormComponent({ schema, formData, omitExtraData, liveOmit, }); Simulate.change(node.querySelector('#root_foo'), { target: { value: 'foobar' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'foobar', baz: 'baz' }, }, 'root_foo' ); }); it('should not omit data on change with omitExtraData=true and liveOmit=false', () => { const omitExtraData = true; const liveOmit = false; const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; const formData = { foo: 'foo', baz: 'baz' }; const { node, onChange } = createFormComponent({ schema, formData, omitExtraData, liveOmit, }); Simulate.change(node.querySelector('#root_foo'), { target: { value: 'foobar' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'foobar', baz: 'baz' }, }, 'root_foo' ); }); it('should not omit data on change with omitExtraData=false and liveOmit=true', () => { const omitExtraData = false; const liveOmit = true; const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; const formData = { foo: 'foo', baz: 'baz' }; const { node, onChange } = createFormComponent({ schema, formData, omitExtraData, liveOmit, }); Simulate.change(node.querySelector('#root_foo'), { target: { value: 'foobar' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'foobar', baz: 'baz' }, }, 'root_foo' ); }); it('should omit data on change with omitExtraData=true and liveOmit=true', () => { const omitExtraData = true; const liveOmit = true; const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; const formData = { foo: 'foo', baz: 'baz' }; const { node, onChange } = createFormComponent({ schema, formData, omitExtraData, liveOmit, }); Simulate.change(node.querySelector('#root_foo'), { target: { value: 'foobar' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'foobar' }, }, 'root_foo' ); }); it('should not omit additionalProperties on change with omitExtraData=true and liveOmit=true', () => { const omitExtraData = true; const liveOmit = true; const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, add: { type: 'object', additionalProperties: {}, }, }, }; const formData = { foo: 'foo', baz: 'baz', add: { prop: 123 } }; const { node, onChange } = createFormComponent({ schema, formData, omitExtraData, liveOmit, }); Simulate.change(node.querySelector('#root_foo'), { target: { value: 'foobar' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'foobar', add: { prop: 123 } }, }, 'root_foo' ); }); it('should rename formData key if key input is renamed in a nested object with omitExtraData=true and liveOmit=true', () => { const { node, onChange } = createFormComponent( { schema: { type: 'object', properties: { nested: { additionalProperties: { type: 'string' }, }, }, }, formData: { nested: { key1: 'value' } }, }, { omitExtraData: true, liveOmit: true } ); const textNode = node.querySelector('#root_nested_key1-key'); Simulate.blur(textNode, { target: { value: 'key1new' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { nested: { key1new: 'value' } }, }, 'root_nested' ); }); it('should allow oneOf data entry with omitExtraData=true and liveOmit=true', () => { const { node, onChange } = createFormComponent( { schema: { type: 'object', oneOf: [ { properties: { lorem: { type: 'string', }, }, required: ['lorem'], }, { properties: { ipsum: { type: 'string', }, }, required: ['ipsum'], }, ], }, formData: { lorum: '' }, }, { omitExtraData: true, liveOmit: true } ); const textNode = node.querySelector('#root_lorem'); Simulate.change(textNode, { target: { value: '12' }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { lorem: '12' }, }); }); it('should allow anyOf data entry with omitExtraData=true and liveOmit=true', () => { const { node, onChange } = createFormComponent( { schema: { type: 'object', anyOf: [ { properties: { lorem: { type: 'string', }, }, required: ['lorem'], }, { properties: { ipsum: { type: 'string', }, }, required: ['ipsum'], }, ], }, formData: { ipsum: '' }, }, { omitExtraData: true, liveOmit: true } ); const textNode = node.querySelector('#root_ipsum'); Simulate.change(textNode, { target: { value: '12' }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { ipsum: '12' }, }); }); describe('Async errors', () => { it('should render the async errors', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, candy: { type: 'object', properties: { bar: { type: 'string' }, }, }, }, }; const extraErrors = { foo: { __errors: ['some error that got added as a prop'], }, candy: { bar: { __errors: ['some other error that got added as a prop'], }, }, }; const { node } = createFormComponent({ schema, extraErrors }); expect(node.querySelectorAll('.error-detail li')).to.have.length.of(2); }); it('should not block form submission', () => { const onSubmit = sinon.spy(); const schema = { type: 'object', properties: { foo: { type: 'string' }, }, }; const extraErrors = { foo: { __errors: ['some error that got added as a prop'], }, }; const { node } = createFormComponent({ schema, extraErrors, onSubmit }); Simulate.submit(node); sinon.assert.calledOnce(onSubmit); }); it('should reset when props extraErrors changes and noValidate is true', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, }, }; const extraErrors = { foo: { __errors: ['foo'], }, }; const props = { schema, noValidate: true, }; const { comp } = createFormComponent({ ...props, extraErrors, }); setProps(comp, { ...props, extraErrors: {}, }); expect(comp.state.errorSchema).eql({}); expect(comp.state.errors).eql([]); }); it('should reset when props extraErrors changes and liveValidate is false', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, }, }; const extraErrors = { foo: { __errors: ['foo'], }, }; const props = { schema, liveValidate: false, }; const { comp } = createFormComponent({ ...props, extraErrors, }); setProps(comp, { ...props, extraErrors: {}, }); expect(comp.state.errorSchema).eql({}); expect(comp.state.errors).eql([]); }); }); it('should keep schema errors when extraErrors set after submit and liveValidate is false', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, }, required: ['foo'], }; const extraErrors = { foo: { __errors: ['foo'], }, }; const onSubmit = sinon.spy(); const props = { schema, onSubmit, liveValidate: false, }; const event = { type: 'submit' }; const { comp, node } = createFormComponent(props); Simulate.submit(node, event); expect(node.querySelectorAll('.error-detail li')).to.have.length.of(1); setProps(comp, { ...props, extraErrors, }); expect(node.querySelectorAll('.error-detail li')).to.have.length.of(2); }); describe('Calling onChange right after updating a Form with props formData', () => { const schema = { type: 'array', items: { type: 'string', }, }; let changed = false; class ArrayThatTriggersOnChangeRightAfterUpdated extends React.Component { componentDidUpdate = () => { if (changed) { return; } changed = true; this.props.onChange([...this.props.formData, 'test']); }; render() { const { ArrayField } = this.props.registry.fields; return <ArrayField {...this.props} />; } } const uiSchema = { 'ui:field': ArrayThatTriggersOnChangeRightAfterUpdated, }; const props = { schema, uiSchema, validator, }; class Container extends React.Component { constructor(props) { super(props); this.state = {}; } onChange = ({ formData }) => { this.setState({ formData }); }; render() { return <Form {...this.props} {...this.state} onChange={this.onChange} />; } } it("doesn't cause a race condition", () => { const { node } = createComponent(Container, { ...props }); Simulate.click(node.querySelector('.array-item-add button')); expect(node.querySelector('#root_0')).to.exist; expect(node.querySelector('#root_1').getAttribute('value')).to.eq('test'); }); }); describe('Calling reset from ref object', () => { it('Reset API test', () => { const schema = { title: 'Test form', type: 'string', }; const formRef = React.createRef(); const props = { ref: formRef, schema, }; const { node } = createFormComponent(props); expect(formRef.current.reset).to.exist; expect(node.querySelector('input')).to.exist; Simulate.change(node.querySelector('input'), { target: { value: 'Some Value' } }); formRef.current.reset(); expect(node.querySelector('input').getAttribute('value')).to.eq(''); }); it('Clear errors', () => { const schema = { title: 'Test form', type: 'number', }; const formRef = React.createRef(); const props = { ref: formRef, schema, }; const { node, comp } = createFormComponent(props); expect(formRef.current.reset).to.exist; expect(node.querySelector('input')).to.exist; Simulate.change(node.querySelector('input'), { target: { value: 'Some Value' } }); expect(comp.state.errors).to.have.length(0); Simulate.submit(node); expect(comp.state.errors).to.have.length(1); expect(node.querySelector('.errors')).to.exist; formRef.current.reset(); expect(node.querySelector('.errors')).not.to.exist; expect(node.querySelector('input').getAttribute('value')).to.eq(''); expect(comp.state.errors).to.have.length(0); }); it('Reset button test with default value', () => { const schemaWithDefault = { title: 'Test form', type: 'string', default: 'Some-Value', }; const formRef = React.createRef(); const props = { ref: formRef, schema: schemaWithDefault, }; const { node } = createFormComponent(props); const input = node.querySelector('input'); expect(formRef.current.reset).to.exist; expect(input).to.exist; expect(input.getAttribute('value')).to.eq('Some-Value'); formRef.current.reset(); expect(input.getAttribute('value')).to.eq('Some-Value'); Simulate.change(input, { target: { value: 'Changed value' } }); formRef.current.reset(); expect(input.getAttribute('value')).to.eq('Some-Value'); }); it('Reset button test with complex schema', () => { const schema = widgetsSchema; const formRef = React.createRef(); const props = { ref: formRef, schema, }; const { node } = createFormComponent(props); const checkbox = node.querySelector('input[type="checkbox"]'); const input = node.querySelector('input[type="text"]'); expect(formRef.current.reset).to.exist; expect(checkbox).to.exist; expect(input).to.exist; expect(checkbox.checked).to.eq(true); expect(input.getAttribute('value')).to.eq(''); formRef.current.reset(); expect(checkbox.checked).to.eq(true); expect(input.getAttribute('value')).to.eq(''); Simulate.change(checkbox, { target: { checked: false } }); Simulate.change(input, { target: { value: 'Changed value' } }); expect(checkbox.checked).to.eq(false); expect(input.getAttribute('value')).to.eq('Changed value'); formRef.current.reset(); expect(input.getAttribute('value')).to.eq(''); expect(checkbox.checked).to.eq(true); }); }); }); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/FormContext.test.jsx��������������������������������0000664�0000000�0000000�00000007661�14467713645�0025463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { createFormComponent, createSandbox } from './test_utils'; describe('FormContext', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); const schema = { type: 'string' }; const formContext = { foo: 'bar' }; const CustomComponent = function (props) { const { registry } = props; const { formContext } = registry; return <div id={formContext.foo} />; }; it('should be passed to Form', () => { const { comp } = createFormComponent({ schema: schema, formContext, }); expect(comp.props.formContext).eq(formContext); }); it('should be passed to custom field', () => { const fields = { custom: CustomComponent }; const { node } = createFormComponent({ schema: schema, uiSchema: { 'ui:field': 'custom' }, fields, formContext, }); expect(node.querySelector('#' + formContext.foo)).to.exist; }); it('should be passed to custom widget', () => { const widgets = { custom: CustomComponent }; const { node } = createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:widget': 'custom' }, widgets, formContext, }); expect(node.querySelector('#' + formContext.foo)).to.exist; }); it('should be passed to TemplateField', () => { function CustomTemplateField({ formContext }) { return <div id={formContext.foo} />; } const { node } = createFormComponent({ schema: { type: 'object', properties: { prop: { type: 'string', }, }, }, templates: { FieldTemplate: CustomTemplateField }, formContext, }); expect(node.querySelector('#' + formContext.foo)).to.exist; }); it('should be passed to ArrayTemplateField', () => { function CustomArrayTemplateField({ formContext }) { return <div id={formContext.foo} />; } const { node } = createFormComponent({ schema: { type: 'array', items: { type: 'string', }, }, templates: { ArrayFieldTemplate: CustomArrayTemplateField }, formContext, }); expect(node.querySelector('#' + formContext.foo)).to.exist; }); it('should be passed to custom TitleFieldTemplate', () => { const templates = { TitleFieldTemplate: CustomComponent }; const { node } = createFormComponent({ schema: { type: 'object', title: 'A title', properties: { prop: { type: 'string', }, }, }, templates, formContext, }); expect(node.querySelector('#' + formContext.foo)).to.exist; }); it('should be passed to custom DescriptionFieldTemplate', () => { const templates = { DescriptionFieldTemplate: CustomComponent }; const { node } = createFormComponent({ schema: { type: 'string', description: 'A description' }, templates, formContext, }); expect(node.querySelector('#' + formContext.foo)).to.exist; }); it('should be passed to multiselect', () => { const widgets = { SelectWidget: CustomComponent }; const { node } = createFormComponent({ schema: { type: 'array', items: { type: 'string', oneOf: [ { const: 'foo', title: 'bar', }, ], }, uniqueItems: true, }, widgets, formContext, }); expect(node.querySelector('#' + formContext.foo)).to.exist; }); it('should be passed to files array', () => { const widgets = { FileWidget: CustomComponent }; const { node } = createFormComponent({ schema: { type: 'array', items: { type: 'string', format: 'data-url', }, }, widgets, formContext, }); expect(node.querySelector('#' + formContext.foo)).to.exist; }); }); �������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/FormSnap.test.jsx�����������������������������������0000664�0000000�0000000�00000000134�14467713645�0024724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Form from '../src'; import formTests from '../testSnap/formTests'; formTests(Form); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/NullField.test.jsx����������������������������������0000664�0000000�0000000�00000002630�14467713645�0025060�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { createFormComponent, createSandbox, submitForm } from './test_utils'; import sinon from 'sinon'; describe('NullField', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('No widget', () => { it('should render a null field', () => { const { node } = createFormComponent({ schema: { type: 'null', }, }); expect(node.querySelectorAll('.field')).to.have.length.of(1); }); it('should render a null field with a label', () => { const { node } = createFormComponent({ schema: { type: 'null', title: 'foo', }, }); expect(node.querySelector('.field label').textContent).eql('foo'); }); it('should assign a default value', () => { const { onChange } = createFormComponent({ schema: { type: 'null', default: null, }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: null }); }); it('should not overwrite existing data', () => { const { node, onSubmit } = createFormComponent({ schema: { type: 'null', }, formData: 3, noValidate: true, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: 3 }); }); }); }); ��������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/NumberField.test.jsx��������������������������������0000664�0000000�0000000�00000034431�14467713645�0025402�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { Simulate } from 'react-dom/test-utils'; import sinon from 'sinon'; import { createFormComponent, createSandbox, getSelectedOptionValue, setProps, submitForm } from './test_utils'; describe('NumberField', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('Number widget', () => { it('should use step to represent the multipleOf keyword', () => { const { node } = createFormComponent({ schema: { type: 'number', multipleOf: 5, }, }); expect(node.querySelector('input').step).to.eql('5'); }); it('should use min to represent the minimum keyword', () => { const { node } = createFormComponent({ schema: { type: 'number', minimum: 0, }, }); expect(node.querySelector('input').min).to.eql('0'); }); it('should use max to represent the maximum keyword', () => { const { node } = createFormComponent({ schema: { type: 'number', maximum: 100, }, }); expect(node.querySelector('input').max).to.eql('100'); }); it('should use step to represent the multipleOf keyword', () => { const { node } = createFormComponent({ schema: { type: 'number', multipleOf: 5, }, }); expect(node.querySelector('input').step).to.eql('5'); }); it('should use min to represent the minimum keyword', () => { const { node } = createFormComponent({ schema: { type: 'number', minimum: 0, }, }); expect(node.querySelector('input').min).to.eql('0'); }); it('should use max to represent the maximum keyword', () => { const { node } = createFormComponent({ schema: { type: 'number', maximum: 100, }, }); expect(node.querySelector('input').max).to.eql('100'); }); }); describe('Number and text widget', () => { let uiSchemas = [ {}, { 'ui:options': { inputType: 'text', }, }, ]; for (let uiSchema of uiSchemas) { it('should render a string field with a label', () => { const { node } = createFormComponent({ schema: { type: 'number', title: 'foo', }, uiSchema, }); expect(node.querySelector('.field label').textContent).eql('foo'); }); it('should render a string field with a description', () => { const { node } = createFormComponent({ schema: { type: 'number', description: 'bar', }, uiSchema, }); expect(node.querySelector('.field-description').textContent).eql('bar'); }); it('formData should default to undefined', () => { const { node, onSubmit } = createFormComponent({ schema: { type: 'number' }, uiSchema, noValidate: true, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: undefined, }); }); it('should assign a default value', () => { const { node } = createFormComponent({ schema: { type: 'number', default: 2, }, uiSchema, }); expect(node.querySelector('.field input').value).eql('2'); }); it('should handle a change event', () => { const { node, onChange } = createFormComponent({ schema: { type: 'number', }, uiSchema, }); Simulate.change(node.querySelector('input'), { target: { value: '2' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: 2, }, 'root' ); }); it('should handle a blur event', () => { const onBlur = sandbox.spy(); const { node } = createFormComponent({ schema: { type: 'number', }, uiSchema, onBlur, }); const input = node.querySelector('input'); Simulate.blur(input, { target: { value: '2' }, }); expect(onBlur.calledWith(input.id, 2)); }); it('should handle a focus event', () => { const onFocus = sandbox.spy(); const { node } = createFormComponent({ schema: { type: 'number', }, uiSchema, onFocus, }); const input = node.querySelector('input'); Simulate.focus(input, { target: { value: '2' }, }); expect(onFocus.calledWith(input.id, 2)); }); it('should fill field with data', () => { const { node } = createFormComponent({ schema: { type: 'number', }, uiSchema, formData: 2, }); expect(node.querySelector('.field input').value).eql('2'); }); describe('when inputting a number that ends with a dot and/or zero it should normalize it, without changing the input value', () => { const { node, onChange } = createFormComponent({ schema: { type: 'number', }, uiSchema, }); const $input = node.querySelector('input'); const tests = [ { input: '2.', output: 2, }, { input: '2.0', output: 2, }, { input: '2.3', output: 2.3, }, { input: '2.30', output: 2.3, }, { input: '2.300', output: 2.3, }, { input: '2.3001', output: 2.3001, }, { input: '2.03', output: 2.03, }, { input: '2.003', output: 2.003, }, { input: '2.00300', output: 2.003, }, { input: '200300', output: 200300, }, ]; tests.forEach((test) => { it(`should work with an input value of ${test.input}`, () => { Simulate.change($input, { target: { value: test.input }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: test.output, }, 'root' ); // "2." is not really a valid number in a input field of type number // so we need to use getAttribute("value") instead since .value outputs the empty string expect($input.getAttribute('value')).eql(test.input); }); }); }); it('should normalize values beginning with a decimal point', () => { const { node, onChange } = createFormComponent({ schema: { type: 'number', }, uiSchema, }); const $input = node.querySelector('input'); Simulate.change($input, { target: { value: '.00' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: 0, }, 'root' ); expect($input.value).eql('.00'); }); it('should update input values correctly when formData prop changes', () => { const schema = { type: 'number', }; const { comp, node } = createFormComponent({ schema, uiSchema, formData: 2.03, }); const $input = node.querySelector('input'); expect($input.value).eql('2.03'); setProps(comp, { schema, formData: 203, }); expect($input.value).eql('203'); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'number', }, uiSchema, }); expect(node.querySelector('input').id).eql('root'); }); it('should render with trailing zeroes', () => { const { node } = createFormComponent({ schema: { type: 'number', }, uiSchema, }); Simulate.change(node.querySelector('input'), { target: { value: '2.' }, }); // "2." is not really a valid number in a input field of type number // so we need to use getAttribute("value") instead since .value outputs the empty string expect(node.querySelector('.field input').getAttribute('value')).eql('2.'); Simulate.change(node.querySelector('input'), { target: { value: '2.0' }, }); expect(node.querySelector('.field input').value).eql('2.0'); Simulate.change(node.querySelector('input'), { target: { value: '2.00' }, }); expect(node.querySelector('.field input').value).eql('2.00'); Simulate.change(node.querySelector('input'), { target: { value: '2.000' }, }); expect(node.querySelector('.field input').value).eql('2.000'); }); it('should allow a zero to be input', () => { const { node } = createFormComponent({ schema: { type: 'number', }, uiSchema, }); Simulate.change(node.querySelector('input'), { target: { value: '0' }, }); expect(node.querySelector('.field input').value).eql('0'); }); it('should render customized StringField', () => { const CustomStringField = () => <div id='custom' />; const { node } = createFormComponent({ schema: { type: 'number', }, uiSchema, fields: { StringField: CustomStringField, }, }); expect(node.querySelector('#custom')).to.exist; }); } }); describe('SelectWidget', () => { it('should render a number field', () => { const { node } = createFormComponent({ schema: { type: 'number', enum: [1, 2], }, }); expect(node.querySelectorAll('.field select')).to.have.length.of(1); }); it('should infer the value from an enum on change', () => { const spy = sinon.spy(); const { node } = createFormComponent({ schema: { enum: [1, 2], }, onChange: spy, }); expect(node.querySelectorAll('.field select')).to.have.length.of(1); const $select = node.querySelector('.field select'); expect($select.value).eql(''); Simulate.change(node.querySelector('.field select'), { target: { value: 0 }, // use index }); expect(getSelectedOptionValue($select)).eql('1'); expect(spy.lastCall.args[0].formData).eql(1); expect(spy.lastCall.args[1]).eql('root'); }); it('should render a string field with a label', () => { const { node } = createFormComponent({ schema: { type: 'number', enum: [1, 2], title: 'foo', }, }); expect(node.querySelector('.field label').textContent).eql('foo'); }); it('should assign a default value', () => { const { onChange } = createFormComponent({ schema: { type: 'number', enum: [1, 2], default: 1, }, noValidate: true, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: 1 }); }); it('should handle a change event', () => { const { node, onChange } = createFormComponent({ schema: { type: 'number', enum: [1, 2], }, }); Simulate.change(node.querySelector('select'), { target: { value: 1 }, // useIndex }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: 2 }, 'root'); }); it('should fill field with data', () => { const { node, onSubmit } = createFormComponent({ schema: { type: 'number', enum: [1, 2], }, formData: 2, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: 2 }); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'number', enum: [1, 2], }, }); expect(node.querySelector('select').id).eql('root'); }); it('should render a select element with a blank option, when default value is not set.', () => { const schema = { type: 'object', properties: { foo: { type: 'number', enum: [0], }, }, }; const { node } = createFormComponent({ schema, }); const selects = node.querySelectorAll('select'); expect(selects[0].value).eql(''); const options = node.querySelectorAll('option'); expect(options.length).eql(2); expect(options[0].innerHTML).eql(''); }); it('should render a select element without a blank option, if a default value is set.', () => { const schema = { type: 'object', properties: { foo: { type: 'number', enum: [2], default: 2, }, }, }; const { node } = createFormComponent({ schema, }); const selects = node.querySelectorAll('select'); expect(getSelectedOptionValue(selects[0])).eql('2'); const options = node.querySelectorAll('option'); expect(options.length).eql(1); expect(options[0].innerHTML).eql('2'); }); it('should render a select element without a blank option, if the default value is 0.', () => { const schema = { type: 'object', properties: { foo: { type: 'number', enum: [0], default: 0, }, }, }; const { node } = createFormComponent({ schema, }); const selects = node.querySelectorAll('select'); expect(selects[0].value).eql('0'); const options = node.querySelectorAll('option'); expect(options.length).eql(1); expect(options[0].innerHTML).eql('0'); }); }); }); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/ObjectField.test.jsx��������������������������������0000664�0000000�0000000�00000073447�14467713645�0025372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { Simulate } from 'react-dom/test-utils'; import sinon from 'sinon'; import { UI_GLOBAL_OPTIONS_KEY } from '@rjsf/utils'; import SchemaField from '../src/components/fields/SchemaField'; import { createFormComponent, createSandbox, submitForm } from './test_utils'; describe('ObjectField', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('schema', () => { const schema = { type: 'object', title: 'my object', description: 'my description', required: ['foo'], default: { foo: 'hey', bar: true, }, properties: { foo: { title: 'Foo', type: 'string', }, bar: { type: 'boolean', }, }, }; it('should render a fieldset', () => { const { node } = createFormComponent({ schema }); const fieldset = node.querySelectorAll('fieldset'); expect(fieldset).to.have.length.of(1); expect(fieldset[0].id).eql('root'); }); it('should render a fieldset legend', () => { const { node } = createFormComponent({ schema }); const legend = node.querySelector('fieldset > legend'); expect(legend.textContent).eql('my object'); expect(legend.id).eql('root__title'); }); it('should render a hidden object', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:widget': 'hidden', }, }); expect(node.querySelector('div.hidden > fieldset')).to.exist; }); it('should render a customized title', () => { const CustomTitleField = ({ title }) => <div id='custom'>{title}</div>; const { node } = createFormComponent({ schema, templates: { TitleFieldTemplate: CustomTitleField, }, }); expect(node.querySelector('fieldset > #custom').textContent).to.eql('my object'); }); it('should render a customized description', () => { const CustomDescriptionField = ({ description }) => <div id='custom'>{description}</div>; const { node } = createFormComponent({ schema, templates: { DescriptionFieldTemplate: CustomDescriptionField }, }); expect(node.querySelector('fieldset > #custom').textContent).to.eql('my description'); }); it('should render a default property label', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('.field-boolean label').textContent).eql('bar'); }); it('should render a string property', () => { const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('.field input[type=text]')).to.have.length.of(1); }); it('should render a boolean property', () => { const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('.field input[type=checkbox]')).to.have.length.of(1); }); it('should handle a default object value', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('.field input[type=text]').value).eql('hey'); expect(node.querySelector('.field input[type=checkbox]').checked).eql(true); }); it('should handle required values', () => { const { node } = createFormComponent({ schema }); // Required field is <input type="text" required=""> expect(node.querySelector('input[type=text]').getAttribute('required')).eql(''); expect(node.querySelector('.field-string label').textContent).eql('Foo*'); }); it('should fill fields with form data', () => { const { node } = createFormComponent({ schema, formData: { foo: 'hey', bar: true, }, }); expect(node.querySelector('.field input[type=text]').value).eql('hey'); expect(node.querySelector('.field input[type=checkbox]').checked).eql(true); }); it('should handle object fields change events', () => { const { node, onChange } = createFormComponent({ schema }); Simulate.change(node.querySelector('input[type=text]'), { target: { value: 'changed' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'changed' }, }, 'root_foo' ); }); it('should handle object fields with blur events', () => { const onBlur = sandbox.spy(); const { node } = createFormComponent({ schema, onBlur }); const input = node.querySelector('input[type=text]'); Simulate.blur(input, { target: { value: 'changed' }, }); expect(onBlur.calledWith(input.id, 'changed')).to.be.true; }); it('should handle object fields with focus events', () => { const onFocus = sandbox.spy(); const { node } = createFormComponent({ schema, onFocus }); const input = node.querySelector('input[type=text]'); Simulate.focus(input, { target: { value: 'changed' }, }); expect(onFocus.calledWith(input.id, 'changed')).to.be.true; }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('input[type=text]').id).eql('root_foo'); expect(node.querySelector('input[type=checkbox]').id).eql('root_bar'); }); it('should pass form context to schema field', () => { const formContext = { root: 'root-id', root_foo: 'foo-id', root_bar: 'bar-id', }; function CustomSchemaField(props) { const { formContext, idSchema } = props; return ( <> <code id={formContext[idSchema.$id]}>Ha</code> <SchemaField {...props} /> </> ); } const { node } = createFormComponent({ schema, formContext, fields: { SchemaField: CustomSchemaField }, }); const codeBlocks = node.querySelectorAll('code'); expect(codeBlocks).to.have.length(3); Object.keys(formContext).forEach((key) => { expect(node.querySelector(`code#${formContext[key]}`)).to.exist; }); }); }); describe('fields ordering', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, baz: { type: 'string' }, qux: { type: 'string' }, }, }; it('should use provided order', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:order': ['baz', 'qux', 'bar', 'foo'], }, }); const labels = [].map.call(node.querySelectorAll('.field > label'), (l) => l.textContent); expect(labels).eql(['baz', 'qux', 'bar', 'foo']); }); it('should insert unordered properties at wildcard position', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:order': ['baz', '*', 'foo'], }, }); const labels = [].map.call(node.querySelectorAll('.field > label'), (l) => l.textContent); expect(labels).eql(['baz', 'bar', 'qux', 'foo']); }); it('should use provided order also if order list contains extraneous properties', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:order': ['baz', 'qux', 'bar', 'wut?', 'foo', 'huh?'], }, }); const labels = [].map.call(node.querySelectorAll('.field > label'), (l) => l.textContent); expect(labels).eql(['baz', 'qux', 'bar', 'foo']); }); it('should throw when order list misses an existing property', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:order': ['baz', 'bar'], }, }); expect(node.querySelector('.config-error').textContent).to.match(/does not contain properties 'foo', 'qux'/); }); it('should throw when more than one wildcard is present', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:order': ['baz', '*', 'bar', '*'], }, }); expect(node.querySelector('.config-error').textContent).to.match(/contains more than one wildcard/); }); it('should order referenced schema definitions', () => { const refSchema = { definitions: { testdef: { type: 'string' }, }, type: 'object', properties: { foo: { $ref: '#/definitions/testdef' }, bar: { $ref: '#/definitions/testdef' }, }, }; const { node } = createFormComponent({ schema: refSchema, uiSchema: { 'ui:order': ['bar', 'foo'], }, }); const labels = [].map.call(node.querySelectorAll('.field > label'), (l) => l.textContent); expect(labels).eql(['bar', 'foo']); }); it('should order referenced object schema definition properties', () => { const refSchema = { definitions: { testdef: { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }, }, type: 'object', properties: { root: { $ref: '#/definitions/testdef' }, }, }; const { node } = createFormComponent({ schema: refSchema, uiSchema: { root: { 'ui:order': ['bar', 'foo'], }, }, }); const labels = [].map.call(node.querySelectorAll('.field > label'), (l) => l.textContent); expect(labels).eql(['bar', 'foo']); }); it('should render the widget with the expected id', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; const { node } = createFormComponent({ schema, uiSchema: { 'ui:order': ['bar', 'foo'], }, }); const ids = [].map.call(node.querySelectorAll('input[type=text]'), (node) => node.id); expect(ids).eql(['root_bar', 'root_foo']); }); }); describe('Title', () => { const TitleFieldTemplate = (props) => <div id={`title-${props.title}`} />; const templates = { TitleFieldTemplate }; it('should pass field name to TitleFieldTemplate if there is no title', () => { const schema = { type: 'object', properties: { object: { type: 'object', properties: {}, }, }, }; const { node } = createFormComponent({ schema, templates }); expect(node.querySelector('#title-object')).to.not.be.null; }); it('should pass schema title to TitleFieldTemplate', () => { const schema = { type: 'object', properties: {}, title: 'test', }; const { node } = createFormComponent({ schema, templates }); expect(node.querySelector('#title-test')).to.not.be.null; }); it('should pass empty schema title to TitleFieldTemplate', () => { const schema = { type: 'object', properties: {}, title: '', }; const { node } = createFormComponent({ schema, templates }); expect(node.querySelector('#title-')).to.be.null; }); }); describe('additionalProperties', () => { const schema = { type: 'object', additionalProperties: { type: 'string', }, }; it('should automatically add a property field if in formData', () => { const { node } = createFormComponent({ schema, formData: { first: 1 }, }); expect(node.querySelectorAll('.field-string')).to.have.length.of(1); }); it('uiSchema title should not affect additionalProperties', () => { const { node } = createFormComponent({ schema, uiSchema: { additionalProperties: { 'ui:title': 'CustomName', }, }, formData: { property1: 'test', }, }); const labels = node.querySelectorAll('label.control-label'); expect(labels[0].textContent).eql('property1 Key'); expect(labels[1].textContent).eql('property1'); }); it('uiSchema title should update additionalProperties object title', () => { const objectSchema = { type: 'object', properties: { main: { type: 'object', properties: {}, additionalProperties: { type: 'object', title: 'propTitle', properties: { firstName: { type: 'string', title: 'First name', }, }, }, }, }, }; const { node } = createFormComponent({ schema: objectSchema, uiSchema: { main: { additionalProperties: { 'ui:title': 'CustomName', }, }, }, formData: { main: { property1: { firstName: 'hello', }, }, }, }); const labels = [...node.querySelectorAll('label.control-label')].map((n) => n.textContent); expect(labels).to.include('property1 Key'); const objectTitle = node.querySelector('.form-additional > fieldset > legend'); expect(objectTitle.textContent).eql('CustomName'); }); it('should not throw validation errors if additionalProperties is undefined', () => { const undefinedAPSchema = { ...schema, properties: { second: { type: 'string' } }, }; delete undefinedAPSchema.additionalProperties; const { node, onSubmit, onError } = createFormComponent({ schema: undefinedAPSchema, formData: { nonschema: 1 }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { nonschema: 1 }, }); sinon.assert.notCalled(onError); }); it('should throw a validation error if additionalProperties is false', () => { const { node, onSubmit, onError } = createFormComponent({ schema: { ...schema, additionalProperties: false, properties: { second: { type: 'string' } }, }, formData: { nonschema: 1 }, }); submitForm(node); sinon.assert.notCalled(onSubmit); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have additional properties', name: 'additionalProperties', params: { additionalProperty: 'nonschema' }, property: '', schemaPath: '#/additionalProperties', stack: 'must NOT have additional properties', }, ]); }); it('should still obey properties if additionalProperties is defined', () => { const { node } = createFormComponent({ schema: { ...schema, properties: { definedProperty: { type: 'string', }, }, }, }); expect(node.querySelectorAll('.field-string')).to.have.length.of(1); }); it('should render a label for the additional property key', () => { const { node } = createFormComponent({ schema, formData: { first: 1 }, }); expect(node.querySelector("[for='root_first-key']").textContent).eql('first Key'); }); it('should render a label for the additional property key if additionalProperties is true', () => { const { node } = createFormComponent({ schema: { ...schema, additionalProperties: true }, formData: { first: 1 }, }); expect(node.querySelector("[for='root_first-key']").textContent).eql('first Key'); }); it('should not render a label for the additional property key if additionalProperties is false', () => { const { node } = createFormComponent({ schema: { ...schema, additionalProperties: false }, formData: { first: 1 }, }); expect(node.querySelector("[for='root_first-key']")).eql(null); }); it('should render a text input for the additional property key', () => { const { node } = createFormComponent({ schema, formData: { first: 1 }, }); expect(node.querySelector('#root_first-key').value).eql('first'); }); it('should render a label for the additional property value', () => { const { node } = createFormComponent({ schema, formData: { first: 1 }, }); expect(node.querySelector("[for='root_first']").textContent).eql('first'); }); it('should render a text input for the additional property value', () => { const { node } = createFormComponent({ schema, formData: { first: 1 }, }); expect(node.querySelector('#root_first').value).eql('1'); }); it('should rename formData key if key input is renamed', () => { const { node, onChange } = createFormComponent({ schema, formData: { first: 1 }, }); const textNode = node.querySelector('#root_first-key'); Simulate.blur(textNode, { target: { value: 'newFirst' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { newFirst: 1, first: undefined }, }, 'root' ); }); it('should retain and display user-input data if key-value pair has a title present in the schema when renaming key', () => { const { node, onChange } = createFormComponent({ schema: { type: 'object', additionalProperties: { title: 'Custom title', type: 'string', }, }, formData: { 'Custom title': 1 }, }); const textNode = node.querySelector('#root_Custom\\ title-key'); Simulate.blur(textNode, { target: { value: 'Renamed custom title' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { 'Renamed custom title': 1 }, }, 'root' ); const keyInput = node.querySelector('#root_Renamed\\ custom\\ title-key'); expect(keyInput.value).eql('Renamed custom title'); const keyInputLabel = node.querySelector('label[for="root_Renamed\\ custom\\ title-key"]'); expect(keyInputLabel.textContent).eql('Renamed custom title Key'); }); it('should retain object title when renaming key', () => { const { node } = createFormComponent({ schema: { title: 'Object title', type: 'object', additionalProperties: { type: 'string', }, }, formData: { 'Custom title': 1 }, }); const textNode = node.querySelector('#root_Custom\\ title-key'); Simulate.blur(textNode, { target: { value: 'Renamed custom title' }, }); const title = node.querySelector('#root__title'); expect(title.textContent).eql('Object title'); }); it('should keep order of renamed key-value pairs while renaming key', () => { const { node, onChange } = createFormComponent({ schema, formData: { first: 1, second: 2, third: 3 }, }); const textNode = node.querySelector('#root_second-key'); Simulate.blur(textNode, { target: { value: 'newSecond' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { first: 1, newSecond: 2, third: 3 }, }, 'root' ); expect(Object.keys(onChange.lastCall.args[0].formData)).eql(['first', 'newSecond', 'third']); }); it('should attach suffix to formData key if new key already exists when key input is renamed', () => { const formData = { first: 1, second: 2, }; const { node, onChange } = createFormComponent({ schema, formData, }); const textNode = node.querySelector('#root_first-key'); Simulate.blur(textNode, { target: { value: 'second' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { second: 2, 'second-1': 1 }, }, 'root' ); }); it('uses a custom separator between the duplicate key name and the suffix', () => { const formData = { first: 1, second: 2, }; const { node, onChange } = createFormComponent({ schema, formData, uiSchema: { 'ui:duplicateKeySuffixSeparator': '_', }, }); const textNode = node.querySelector('#root_first-key'); Simulate.blur(textNode, { target: { value: 'second' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { second: 2, second_1: 1 }, }, 'root' ); }); it('uses a global custom separator between the duplicate key name and the suffix', () => { const formData = { first: 1, second: 2, }; const { node, onChange } = createFormComponent({ schema, formData, uiSchema: { [UI_GLOBAL_OPTIONS_KEY]: { duplicateKeySuffixSeparator: '_', }, }, }); const textNode = node.querySelector('#root_first-key'); Simulate.blur(textNode, { target: { value: 'second' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { second: 2, second_1: 1 }, }, 'root' ); }); it('should not attach suffix when input is only clicked', () => { const formData = { first: 1, }; const { node, onChange } = createFormComponent({ schema, formData, }); const textNode = node.querySelector('#root_first-key'); Simulate.blur(textNode); sinon.assert.notCalled(onChange); }); it('should continue incrementing suffix to formData key until that key name is unique after a key input collision', () => { const formData = { first: 1, second: 2, 'second-1': 2, 'second-2': 2, 'second-3': 2, 'second-4': 2, 'second-5': 2, 'second-6': 2, }; const { node, onChange } = createFormComponent({ schema, formData, }); const textNode = node.querySelector('#root_first-key'); Simulate.blur(textNode, { target: { value: 'second' }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { second: 2, 'second-1': 2, 'second-2': 2, 'second-3': 2, 'second-4': 2, 'second-5': 2, 'second-6': 2, 'second-7': 1, }, }); }); it('should have an expand button', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('.object-property-expand button')).not.eql(null); }); it('should not have an expand button if expandable is false', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:options': { expandable: false } }, }); expect(node.querySelector('.object-property-expand button')).to.be.null; }); it('should add a new property when clicking the expand button', () => { const { node, onChange } = createFormComponent({ schema }); Simulate.click(node.querySelector('.object-property-expand button')); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { newKey: 'New Value', }, }); }); it("should add a new property with suffix when clicking the expand button and 'newKey' already exists", () => { const { node, onChange } = createFormComponent({ schema, formData: { newKey: 1 }, }); Simulate.click(node.querySelector('.object-property-expand button')); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { 'newKey-1': 'New Value', }, }); }); it('should add a property matching the additionalProperties schema', () => { // Specify that additionalProperties must be an array of strings const additionalPropertiesArraySchema = { ...schema, additionalProperties: { type: 'array', items: { type: 'string', }, }, }; const { node, onChange } = createFormComponent({ schema: additionalPropertiesArraySchema, formData: {}, }); Simulate.click(node.querySelector('.object-property-expand button')); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { newKey: [], }, }); }); it('should add a string item if additionalProperties is true', () => { // Specify that additionalProperties is true const customSchema = { ...schema, additionalProperties: true, }; const { node, onChange } = createFormComponent({ schema: customSchema, formData: {}, }); Simulate.click(node.querySelector('.object-property-expand button')); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { newKey: 'New Value', }, }); }); it('should not provide an expand button if length equals maxProperties', () => { const { node } = createFormComponent({ schema: { maxProperties: 1, ...schema }, formData: { first: 1 }, }); expect(node.querySelector('.object-property-expand button')).to.be.null; }); it('should provide an expand button if length is less than maxProperties', () => { const { node } = createFormComponent({ schema: { maxProperties: 2, ...schema }, formData: { first: 1 }, }); expect(node.querySelector('.object-property-expand button')).not.eql(null); }); it('should not provide an expand button if expandable is expliclty false regardless of maxProperties value', () => { const { node } = createFormComponent({ schema: { maxProperties: 2, ...schema }, formData: { first: 1 }, uiSchema: { 'ui:options': { expandable: false, }, }, }); expect(node.querySelector('.object-property-expand button')).to.be.null; }); it('should ignore expandable value if maxProperties constraint is not satisfied', () => { const { node } = createFormComponent({ schema: { maxProperties: 1, ...schema }, formData: { first: 1 }, uiSchema: { 'ui:options': { expandable: true, }, }, }); expect(node.querySelector('.object-property-expand button')).to.be.null; }); it('should not have delete button if expand button has not been clicked', () => { const { node } = createFormComponent({ schema }); expect(node.querySelector('.form-group > .btn-danger')).eql(null); }); it('should have delete button if expand button has been clicked', () => { const { node } = createFormComponent({ schema, }); expect(node.querySelector('.form-group > .form-additional > .form-additional + .col-xs-2 .btn-danger')).eql(null); Simulate.click(node.querySelector('.object-property-expand button')); expect(node.querySelector('.form-group > .row > .form-additional + .col-xs-2 > .btn-danger')).to.not.be.null; }); it('delete button should delete key-value pair', () => { const { node } = createFormComponent({ schema, formData: { first: 1 }, }); expect(node.querySelector('#root_first-key').value).to.eql('first'); Simulate.click(node.querySelector('.form-group > .row > .form-additional + .col-xs-2 > .btn-danger')); expect(node.querySelector('#root_first-key')).to.not.exist; }); it('delete button should delete correct pair', () => { const { node } = createFormComponent({ schema, formData: { first: 1, second: 2, third: 3 }, }); const selector = '.form-group > .row > .form-additional + .col-xs-2 > .btn-danger'; expect(node.querySelectorAll(selector).length).to.eql(3); Simulate.click(node.querySelectorAll(selector)[1]); expect(node.querySelector('#root_second-key')).to.not.exist; expect(node.querySelectorAll(selector).length).to.eql(2); }); it('deleting content of value input should not delete pair', () => { const { node, onChange } = createFormComponent({ schema, formData: { first: 1 }, }); Simulate.change(node.querySelector('#root_first'), { target: { value: '' }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { first: '' }, }); }); it('should change content of value input to boolean false', () => { const { node, onChange } = createFormComponent({ schema: { ...schema, additionalProperties: true, }, formData: { first: true }, }); Simulate.change(node.querySelector('#root_first'), { target: { checked: false }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { first: false }, }); }); it('should change content of value input to number 0', () => { const { node, onChange } = createFormComponent({ schema: { ...schema, additionalProperties: true, }, formData: { first: 1 }, }); Simulate.change(node.querySelector('#root_first'), { target: { value: 0 }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { first: 0 }, }); }); it('should change content of value input to null', () => { const { node, onChange } = createFormComponent({ schema, formData: { first: 'str' }, }); Simulate.change(node.querySelector('#root_first'), { target: { value: null }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { first: null }, }); }); }); }); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/ObjectFieldTemplate.test.jsx������������������������0000664�0000000�0000000�00000006270�14467713645�0027054�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { PureComponent } from 'react'; import { expect } from 'chai'; import { createFormComponent, createSandbox } from './test_utils'; describe('ObjectFieldTemplate', () => { let sandbox; const formData = { foo: 'bar', bar: 'foo' }; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); class ObjectFieldTemplate extends PureComponent { render() { const { properties, title, description, registry } = this.props; const { DescriptionFieldTemplate, TitleFieldTemplate } = registry.templates; return ( <div className='root'> <TitleFieldTemplate title={title} /> <DescriptionFieldTemplate description={description} /> <div> {properties.map(({ content }, index) => ( <div key={index} className='property'> {content} </div> ))} </div> </div> ); } } const TitleFieldTemplate = () => <div className='title-field' />; const DescriptionFieldTemplate = ({ description }) => (description ? <div className='description-field' /> : null); let node; describe('with template globally configured', () => { node = createFormComponent({ schema: { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' } }, }, uiSchema: { 'ui:description': 'foobar' }, formData, templates: { ObjectFieldTemplate, TitleFieldTemplate, DescriptionFieldTemplate, }, }).node; sharedIts(); }); describe('with template configured in ui:ObjectFieldTemplate', () => { node = createFormComponent({ schema: { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' } }, }, uiSchema: { 'ui:description': 'foobar', 'ui:ObjectFieldTemplate': ObjectFieldTemplate, }, formData, templates: { TitleFieldTemplate, DescriptionFieldTemplate, }, }).node; sharedIts(); }); describe('with template configured globally overridden by ui:ObjectFieldTemplate', () => { node = createFormComponent({ schema: { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' } }, }, uiSchema: { 'ui:description': 'foobar', 'ui:ObjectFieldTemplate': ObjectFieldTemplate, }, formData, templates: { ObjectFieldTemplate: () => <div />, // Empty object field template, proof that it's overridden TitleFieldTemplate, DescriptionFieldTemplate, }, }).node; sharedIts(); }); function sharedIts() { it('should render one root element', () => { expect(node.querySelectorAll('.root')).to.have.length.of(1); }); it('should render one title', () => { expect(node.querySelectorAll('.title-field')).to.have.length.of(1); }); it('should render one description', () => { expect(node.querySelectorAll('.description-field')).to.have.length.of(1); }); it('should render two property containers', () => { expect(node.querySelectorAll('.property')).to.have.length.of(2); }); } }); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/ObjectSnap.test.jsx���������������������������������0000664�0000000�0000000�00000000142�14467713645�0025226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Form from '../src'; import objectTests from '../testSnap/objectTests'; objectTests(Form); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/SchemaField.test.jsx��������������������������������0000664�0000000�0000000�00000055652�14467713645�0025362�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Component } from 'react'; import { expect } from 'chai'; import { Simulate } from 'react-dom/test-utils'; import { createSchemaUtils, englishStringTranslator } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; import SchemaField from '../src/components/fields/SchemaField'; import { createFormComponent, createSandbox } from './test_utils'; import getDefaultRegistry from '../src/getDefaultRegistry'; describe('SchemaField', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('registry', () => { it('should provide expected registry as prop', () => { let receivedProps; const schema = { type: 'object', definitions: { a: { type: 'string' }, }, }; const schemaUtils = createSchemaUtils(validator, schema); createFormComponent({ schema, uiSchema: { 'ui:field': (props) => { receivedProps = props; return null; }, }, }); const { registry } = receivedProps; const defaultRegistry = getDefaultRegistry(); expect(registry).eql({ fields: defaultRegistry.fields, templates: defaultRegistry.templates, widgets: defaultRegistry.widgets, rootSchema: schema, formContext: {}, schemaUtils, translateString: englishStringTranslator, globalUiOptions: undefined, }); }); it('should provide expected registry with globalUiOptions as prop', () => { let receivedProps; const schema = { type: 'object', definitions: { a: { type: 'string' }, }, }; const schemaUtils = createSchemaUtils(validator, schema); createFormComponent({ schema, uiSchema: { 'ui:globalOptions': { copyable: true }, 'ui:field': (props) => { receivedProps = props; return null; }, }, }); const { registry } = receivedProps; const defaultRegistry = getDefaultRegistry(); expect(registry).eql({ fields: defaultRegistry.fields, templates: defaultRegistry.templates, widgets: defaultRegistry.widgets, rootSchema: schema, formContext: {}, schemaUtils, translateString: englishStringTranslator, globalUiOptions: { copyable: true }, }); }); }); describe('Unsupported field', () => { it('should warn on invalid field type', () => { const { node } = createFormComponent({ schema: { type: 'invalid' }, }); expect(node.querySelector('.unsupported-field').textContent).to.contain('Unknown field type invalid'); }); it('should be able to be overwritten with a custom UnsupportedField component', () => { const CustomUnsupportedField = function () { return <span id='custom'>Custom UnsupportedField</span>; }; const templates = { UnsupportedFieldTemplate: CustomUnsupportedField }; const { node } = createFormComponent({ schema: { type: 'invalid' }, templates, }); expect(node.querySelectorAll('#custom')[0].textContent).to.eql('Custom UnsupportedField'); }); }); describe('Custom SchemaField component', () => { const CustomSchemaField = function (props) { return ( <div id='custom'> <SchemaField {...props} /> </div> ); }; it('should use the specified custom SchemaType property', () => { const fields = { SchemaField: CustomSchemaField }; const { node } = createFormComponent({ schema: { type: 'string' }, fields, }); expect(node.querySelectorAll('#custom > .field input[type=text]')).to.have.length.of(1); }); }); describe('Custom type component', () => { const CustomStringField = function () { return <div id='custom-type' />; }; it('should use custom type component', () => { const fields = { StringField: CustomStringField }; const { node } = createFormComponent({ schema: { type: 'string' }, fields, }); expect(node.querySelectorAll('#custom-type')).to.have.length.of(1); }); }); describe('Custom id component', () => { const CustomIdField = function () { return <div id='custom-id' />; }; it('should use custom id compnent', () => { const fields = { '/schemas/custom-id': CustomIdField }; const { node } = createFormComponent({ schema: { $id: '/schemas/custom-id', type: 'string', }, fields, }); expect(node.querySelectorAll('#custom-id')).to.have.length.of(1); }); }); describe('ui:field support', () => { class MyObject extends Component { constructor(props) { super(props); } render() { return <div id='custom' />; } } const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; it('should use provided direct custom component for object', () => { const uiSchema = { 'ui:field': MyObject }; const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('#custom')).to.have.length.of(1); expect(node.querySelectorAll('label')).to.have.length.of(0); }); it('should use provided direct custom component for specific property', () => { const uiSchema = { foo: { 'ui:field': MyObject }, }; const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('#custom')).to.have.length.of(1); expect(node.querySelectorAll('input')).to.have.length.of(1); expect(node.querySelectorAll('label')).to.have.length.of(1); }); it('should provide custom field the expected fields', () => { let receivedProps; createFormComponent({ schema, uiSchema: { 'ui:field': (props) => { receivedProps = props; return null; }, }, }); const { registry } = receivedProps; const defaultRegistry = getDefaultRegistry(); expect(registry.widgets).eql(defaultRegistry.widgets); expect(registry.rootSchema).eql(schema); expect(registry.fields).to.be.an('object'); expect(registry.fields.SchemaField).eql(SchemaField); expect(registry.templates.TitleFieldTemplate).eql(defaultRegistry.templates.TitleFieldTemplate); expect(registry.templates.DescriptionFieldTemplate).eql(defaultRegistry.templates.DescriptionFieldTemplate); }); it('should use registered custom component for object', () => { const uiSchema = { 'ui:field': 'myobject' }; const fields = { myobject: MyObject }; const { node } = createFormComponent({ schema, uiSchema, fields }); expect(node.querySelectorAll('#custom')).to.have.length.of(1); }); it('should handle referenced schema definitions', () => { const schema = { definitions: { foobar: { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }, }, $ref: '#/definitions/foobar', }; const uiSchema = { 'ui:field': 'myobject' }; const fields = { myobject: MyObject }; const { node } = createFormComponent({ schema, uiSchema, fields }); expect(node.querySelectorAll('#custom')).to.have.length.of(1); }); it('should not pass ui:classNames or ui:style to child component', () => { const CustomSchemaField = function (props) { return <SchemaField {...props} uiSchema={{ ...props.uiSchema, 'ui:field': undefined }} />; }; const schema = { type: 'string', }; const uiSchema = { 'ui:field': 'customSchemaField', 'ui:classNames': 'foo', 'ui:style': { color: 'red' }, }; const fields = { customSchemaField: CustomSchemaField }; const { node } = createFormComponent({ schema, uiSchema, fields }); expect(node.querySelectorAll('.foo')).to.have.length.of(1); expect(node.querySelectorAll("[style*='red']")).to.have.length.of(1); }); it('should not pass ui:options { classNames or style } to child component', () => { const CustomSchemaField = function (props) { return <SchemaField {...props} uiSchema={{ ...props.uiSchema, 'ui:field': undefined }} />; }; const schema = { type: 'string', }; const uiSchema = { 'ui:field': 'customSchemaField', 'ui:options': { classNames: 'foo', style: { color: 'red' }, }, }; const fields = { customSchemaField: CustomSchemaField }; const { node } = createFormComponent({ schema, uiSchema, fields }); expect(node.querySelectorAll('.foo')).to.have.length.of(1); expect(node.querySelectorAll("[style*='red']")).to.have.length.of(1); }); }); describe('label support', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, }, }; it('should render label by default', () => { const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('label')).to.have.length.of(1); }); it('should render label if ui:globaLOptions label is set to true', () => { const uiSchema = { 'ui:globalOptions': { label: true }, }; const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('label')).to.have.length.of(1); }); it('should not render label if ui:globalOptions label is set to false', () => { const uiSchema = { 'ui:globalOptions': { label: false }, }; const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('label')).to.have.length.of(0); }); it('should render label if ui:options label is set to true', () => { const uiSchema = { foo: { 'ui:options': { label: true } }, }; const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('label')).to.have.length.of(1); }); it('should not render label if ui:options label is set to false', () => { const uiSchema = { foo: { 'ui:options': { label: false } }, }; const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('label')).to.have.length.of(0); }); it('should render label even when type object is missing', () => { const schema = { title: 'test', properties: { foo: { type: 'string' }, }, }; const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('label')).to.have.length.of(1); }); }); describe('description support', () => { const schema = { type: 'object', properties: { foo: { type: 'string', description: 'A Foo field' }, bar: { type: 'string' }, }, }; it('should render description if available from the schema', () => { const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('#root_foo__description')).to.have.length.of(1); }); it('should render description if available from a referenced schema', () => { // Overriding. const schemaWithReference = { type: 'object', properties: { foo: { $ref: '#/definitions/foo' }, bar: { type: 'string' }, }, definitions: { foo: { type: 'string', description: 'A Foo field', }, }, }; const { node } = createFormComponent({ schema: schemaWithReference, }); const matches = node.querySelectorAll('#root_foo__description'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.equal('A Foo field'); }); it('should not render description if not available from schema', () => { const { node } = createFormComponent({ schema }); expect(node.querySelectorAll('#root_bar__description')).to.have.length.of(0); }); it('should render a customized description field', () => { const CustomDescriptionField = ({ description }) => <div id='custom'>{description}</div>; const { node } = createFormComponent({ schema, templates: { DescriptionFieldTemplate: CustomDescriptionField, }, }); expect(node.querySelector('#custom').textContent).to.eql('A Foo field'); }); }); describe('errors', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, }, }; const uiSchema = { 'ui:field': (props) => { const { uiSchema, ...fieldProps } = props; //eslint-disable-line return <SchemaField {...fieldProps} />; }, }; function customValidate(formData, errors) { errors.addError('container'); errors.foo.addError('test'); return errors; } it('should render its own errors', () => { const { node } = createFormComponent({ schema, uiSchema, customValidate, }); Simulate.submit(node); const matches = node.querySelectorAll('form > .form-group > div > .error-detail .text-danger'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.eql('container'); }); it('should pass errors to child component', () => { const { node } = createFormComponent({ schema, uiSchema, customValidate, }); Simulate.submit(node); const matches = node.querySelectorAll('form .form-group .form-group .text-danger'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.contain('test'); }); it('should ignore errors for top level anyOf/oneOf and show only one in child schema', () => { const testSchema = { type: 'object', properties: { foo: { anyOf: [ { type: 'boolean', }, { type: 'array', items: { type: 'string', }, }, ], }, }, }; const { node } = createFormComponent({ schema: testSchema, uiSchema, customValidate, }); Simulate.submit(node); const matches = node.querySelectorAll('form .form-group .form-group .text-danger'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.contain('test'); }); it('should pass errors to custom FieldErrorTemplate', () => { const customFieldError = (props) => { return <div className='custom-field-error'>{props.errors}</div>; }; const { node } = createFormComponent({ schema, uiSchema, customValidate, templates: { FieldErrorTemplate: customFieldError }, }); Simulate.submit(node); const matches = node.querySelectorAll('form .form-group .form-group .text-danger'); expect(matches).to.have.length.of(0); const customMatches = node.querySelectorAll('form .form-group .form-group .custom-field-error'); expect(customMatches[0].textContent).to.contain('test'); }); it('should pass errors to custom FieldErrorTemplate, via uiSchema', () => { const customFieldError = (props) => { return <div className='custom-field-error'>{props.errors}</div>; }; const uiSchema = { 'ui:field': (props) => { const { uiSchema, ...fieldProps } = props; //eslint-disable-line return <SchemaField {...fieldProps} uiSchema={{ foo: { 'ui:FieldErrorTemplate': customFieldError } }} />; }, }; const { node } = createFormComponent({ schema, uiSchema, customValidate, }); Simulate.submit(node); const matches = node.querySelectorAll('form .form-group .form-group .text-danger'); expect(matches).to.have.length.of(0); const customMatches = node.querySelectorAll('form .form-group .form-group .custom-field-error'); expect(customMatches[0].textContent).to.contain('test'); }); describe('Custom error rendering', () => { const customStringWidget = (props) => { return <div className='custom-text-widget'>{props.rawErrors}</div>; }; it('should pass rawErrors down to custom widgets', () => { const { node } = createFormComponent({ schema, uiSchema, customValidate, templates: { BaseInputTemplate: customStringWidget }, }); Simulate.submit(node); const matches = node.querySelectorAll('.custom-text-widget'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.eql('test'); }); }); describe('hideError flag and errors', () => { const hideUiSchema = { 'ui:hideError': true, ...uiSchema, }; it('should not render its own default errors', () => { const { node } = createFormComponent({ schema, uiSchema: hideUiSchema, customValidate, }); Simulate.submit(node); const matches = node.querySelectorAll('form > .form-group > div > .error-detail .text-danger'); expect(matches).to.have.length.of(0); }); it('should not show default errors in child component', () => { const { node } = createFormComponent({ schema, uiSchema: hideUiSchema, customValidate, }); Simulate.submit(node); const matches = node.querySelectorAll('form .form-group .form-group .text-danger'); expect(matches).to.have.length.of(0); }); describe('Custom error rendering', () => { const customStringWidget = (props) => { return <div className='custom-text-widget'>{props.rawErrors}</div>; }; it('should pass rawErrors down to custom widgets and render them', () => { const { node } = createFormComponent({ schema, uiSchema: hideUiSchema, customValidate, templates: { BaseInputTemplate: customStringWidget }, }); Simulate.submit(node); const matches = node.querySelectorAll('.custom-text-widget'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.eql('test'); }); }); }); describe('hideError flag false for child should show errors', () => { const hideUiSchema = { 'ui:hideError': true, 'ui:field': (props) => { const { uiSchema, ...fieldProps } = props; //eslint-disable-line // Pass the children schema in after removing the global one return <SchemaField {...fieldProps} uiSchema={{ 'ui:hideError': false }} />; }, }; it('should not render its own default errors', () => { const { node } = createFormComponent({ schema, uiSchema: hideUiSchema, customValidate, }); Simulate.submit(node); const matches = node.querySelectorAll('form > .form-group > div > .error-detail .text-danger'); expect(matches).to.have.length.of(0); }); it('should show errors on child component', () => { const { node } = createFormComponent({ schema, uiSchema: hideUiSchema, customValidate, }); Simulate.submit(node); const matches = node.querySelectorAll('form .form-group .form-group .text-danger'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.contain('test'); }); }); }); describe('help', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, }, }; const helpText = 'help me!'; const uiSchema = { foo: { 'ui:help': helpText }, }; it('should render its own help', () => { const { node } = createFormComponent({ schema, uiSchema, }); Simulate.submit(node); const matches = node.querySelectorAll('form .form-group .form-group .help-block'); expect(matches).to.have.length.of(1); expect(matches[0].textContent).to.eql(helpText); }); it('should pass help to custom FieldHelpTemplate', () => { const customFieldHelp = (props) => { return <div className='custom-field-help'>{props.help}</div>; }; const { node } = createFormComponent({ schema, uiSchema, templates: { FieldHelpTemplate: customFieldHelp }, }); Simulate.submit(node); const matches = node.querySelectorAll('form .form-group .form-group .help-block'); expect(matches).to.have.length.of(0); const customMatches = node.querySelectorAll('form .form-group .form-group .custom-field-help'); expect(customMatches[0].textContent).to.contain(helpText); }); it('should pass errors to custom FieldErrorTemplate, via uiSchema', () => { const customFieldHelp = (props) => { return <div className='custom-field-help'>{props.help}</div>; }; const uiSchema = { foo: { 'ui:help': helpText, 'ui:FieldHelpTemplate': customFieldHelp }, }; const { node } = createFormComponent({ schema, uiSchema, }); Simulate.submit(node); const matches = node.querySelectorAll('form .form-group .form-group .help-block'); expect(matches).to.have.length.of(0); const customMatches = node.querySelectorAll('form .form-group .form-group .custom-field-help'); expect(customMatches[0].textContent).to.contain(helpText); }); }); describe('markdown', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, }, }; const descText = 'Make things **bold** or *italic*. Embed snippets of `code`.'; it('should render description with markdown', () => { const { node } = createFormComponent({ schema, uiSchema: { foo: { 'ui:description': descText, 'ui:enableMarkdownInDescription': true, }, }, }); const { innerHTML } = node.querySelector('form .form-group .form-group .field-description'); expect(innerHTML).to.contains('<strong>'); expect(innerHTML).to.contains('<em>'); expect(innerHTML).to.contains('<code>'); }); it('should render description without html tags', () => { const { node } = createFormComponent({ schema, uiSchema: { foo: { 'ui:description': descText, }, }, }); const { innerHTML, textContent } = node.querySelector('form .form-group .form-group .field-description'); expect(innerHTML).to.not.contains('<strong>'); expect(innerHTML).to.not.contains('<em>'); expect(innerHTML).to.not.contains('<code>'); expect(textContent).to.contains(descText); }); }); }); ��������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/StringField.test.jsx��������������������������������0000664�0000000�0000000�00000156436�14467713645�0025432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { act, Simulate } from 'react-dom/test-utils'; import sinon from 'sinon'; import { parseDateString, toDateString, TranslatableString, utcToLocal } from '@rjsf/utils'; import { createFormComponent, createSandbox, getSelectedOptionValue, submitForm } from './test_utils'; describe('StringField', () => { let sandbox; const CustomWidget = () => <div id='custom' />; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('TextWidget', () => { it('should render a string field', () => { const { node } = createFormComponent({ schema: { type: 'string', }, }); expect(node.querySelectorAll('.field input[type=text]')).to.have.length.of(1); }); it('should render a string field with a label', () => { const { node } = createFormComponent({ schema: { type: 'string', title: 'foo', }, }); expect(node.querySelector('.field label').textContent).eql('foo'); }); it('should render a string field with a description', () => { const { node } = createFormComponent({ schema: { type: 'string', description: 'bar', }, }); expect(node.querySelector('.field-description').textContent).eql('bar'); }); it('should assign a default value', () => { const { node } = createFormComponent({ schema: { type: 'string', default: 'plop', }, }); expect(node.querySelector('.field input').value).eql('plop'); expect(node.querySelectorAll('.field datalist > option')).to.have.length.of(0); }); it('should render a string field with examples', () => { const { node } = createFormComponent({ schema: { type: 'string', examples: ['Firefox', 'Chrome', 'Vivaldi'], }, }); expect(node.querySelectorAll('.field datalist > option')).to.have.length.of(3); const datalistId = node.querySelector('.field datalist').id; expect(node.querySelector('.field input').getAttribute('list')).eql(datalistId); }); it('should render a string with examples that includes the default value', () => { const { node } = createFormComponent({ schema: { type: 'string', default: 'Firefox', examples: ['Chrome', 'Vivaldi'], }, }); expect(node.querySelectorAll('.field datalist > option')).to.have.length.of(3); const datalistId = node.querySelector('.field datalist').id; expect(node.querySelector('.field input').getAttribute('list')).eql(datalistId); }); it('should render a string with examples that overlaps with the default value', () => { const { node } = createFormComponent({ schema: { type: 'string', default: 'Firefox', examples: ['Firefox', 'Chrome', 'Vivaldi'], }, }); expect(node.querySelectorAll('.field datalist > option')).to.have.length.of(3); const datalistId = node.querySelector('.field datalist').id; expect(node.querySelector('.field input').getAttribute('list')).eql(datalistId); }); it('should default submit value to undefined', () => { const { node, onSubmit } = createFormComponent({ schema: { type: 'string' }, noValidate: true, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: undefined, }); }); it('should handle a change event', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', }, }); act(() => { Simulate.change(node.querySelector('input'), { target: { value: 'yo' }, }); }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: 'yo', }, 'root' ); }); it('should handle a blur event', () => { const onBlur = sandbox.spy(); const { node } = createFormComponent({ schema: { type: 'string', }, onBlur, }); const input = node.querySelector('input'); Simulate.blur(input, { target: { value: 'yo' }, }); expect(onBlur.calledWith(input.id, 'yo')).to.be.true; }); it('should handle a focus event', () => { const onFocus = sandbox.spy(); const { node } = createFormComponent({ schema: { type: 'string', }, onFocus, }); const input = node.querySelector('input'); Simulate.focus(input, { target: { value: 'yo' }, }); expect(onFocus.calledWith(input.id, 'yo')).to.be.true; }); it('should handle an empty string change event', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string' }, formData: 'x', }); Simulate.change(node.querySelector('input'), { target: { value: '' }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: undefined }, 'root'); }); it('should handle an empty string change event with custom ui:emptyValue', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:emptyValue': 'default' }, formData: 'x', }); Simulate.change(node.querySelector('input'), { target: { value: '' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: 'default', }, 'root' ); }); it('should handle an empty string change event with defaults set', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', default: 'a', }, }); Simulate.change(node.querySelector('input'), { target: { value: '' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: undefined, }, 'root' ); }); it('should fill field with data', () => { const { node } = createFormComponent({ schema: { type: 'string', }, formData: 'plip', }); expect(node.querySelector('.field input').value).eql('plip'); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'string', }, }); expect(node.querySelector('input[type=text]').id).eql('root'); }); it('should render customized TextWidget', () => { const { node } = createFormComponent({ schema: { type: 'string', }, widgets: { TextWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); it('should create and set autocomplete attribute', () => { const { node } = createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:autocomplete': 'family-name' }, formData: undefined, }); expect(node.querySelector('input').getAttribute('autocomplete')).eql('family-name'); }); }); describe('SelectWidget', () => { it('should render a string field', () => { const { node } = createFormComponent({ schema: { type: 'string', enum: ['foo', 'bar'], }, }); expect(node.querySelectorAll('.field select')).to.have.length.of(1); }); it('should render a string field for an enum without a type', () => { const { node } = createFormComponent({ schema: { enum: ['foo', 'bar'], }, }); expect(node.querySelectorAll('.field select')).to.have.length.of(1); }); it('should render a string field with a label', () => { const { node } = createFormComponent({ schema: { type: 'string', enum: ['foo', 'bar'], title: 'foo', }, }); expect(node.querySelector('.field label').textContent).eql('foo'); }); it('should render empty option', () => { const { node } = createFormComponent({ schema: { type: 'string', enum: ['foo', 'bar'], }, }); expect(node.querySelectorAll('.field option')[0].value).eql(''); }); it('should render empty option with placeholder text', () => { const { node } = createFormComponent({ schema: { type: 'string', enum: ['foo', 'bar'], }, uiSchema: { 'ui:options': { placeholder: 'Test', }, }, }); expect(node.querySelectorAll('.field option')[0].textContent).eql('Test'); }); it('should assign a default value', () => { const { node, onSubmit } = createFormComponent({ schema: { type: 'string', enum: ['foo', 'bar'], default: 'bar', }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: 'bar', }); }); it('should reflect the change in the change event', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', enum: ['foo', 'bar'], }, }); act(() => { Simulate.change(node.querySelector('select'), { target: { value: 0 }, // use index }); }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: 'foo', }, 'root' ); }); it('should reflect undefined in change event if empty option selected', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', enum: ['foo', 'bar'], }, }); Simulate.change(node.querySelector('select'), { target: { value: '' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: undefined, }, 'root' ); }); it('should reflect the change into the dom', () => { const { node } = createFormComponent({ schema: { type: 'string', enum: ['foo', 'bar'], }, }); Simulate.change(node.querySelector('select'), { target: { value: 0 }, // use index }); expect(getSelectedOptionValue(node.querySelector('select'))).eql('foo'); }); it('should reflect undefined value into the dom as empty option', () => { const { node } = createFormComponent({ schema: { type: 'string', enum: ['foo', 'bar'], }, }); Simulate.change(node.querySelector('select'), { target: { value: '' }, }); expect(getSelectedOptionValue(node.querySelector('select'))).eql(''); }); it('should fill field with data', () => { const { node, onSubmit } = createFormComponent({ schema: { type: 'string', enum: ['foo', 'bar'], }, formData: 'bar', }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: 'bar', }); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'string', enum: ['a', 'b'], }, }); expect(node.querySelector('select').id).eql('root'); }); it('should render customized SelectWidget', () => { const { node } = createFormComponent({ schema: { type: 'string', enum: [], }, widgets: { SelectWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); it("should render a select element with first option 'false' if the default value is false", () => { const schema = { type: 'object', properties: { foo: { type: 'string', enum: [false, true], default: false, }, }, }; const { node } = createFormComponent({ schema, }); const options = node.querySelectorAll('option'); expect(options[0].innerHTML).eql('false'); expect(options.length).eql(2); }); it("should render a select element and the option's length is equal the enum's length, if set the enum and the default value is empty.", () => { const schema = { type: 'object', properties: { foo: { type: 'string', enum: ['', '1'], default: '', }, }, }; const { node } = createFormComponent({ schema, }); const options = node.querySelectorAll('option'); expect(options[0].innerHTML).eql(''); expect(options.length).eql(2); }); it('should render only one empty option when the default value is empty.', () => { const schema = { type: 'object', properties: { foo: { type: 'string', enum: [''], default: '', }, }, }; const { node } = createFormComponent({ schema, }); const options = node.querySelectorAll('option'); expect(options[0].innerHTML).eql(''); expect(options.length).eql(1); }); }); describe('TextareaWidget', () => { it('should handle an empty string change event', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:widget': 'textarea' }, formData: 'x', }); Simulate.change(node.querySelector('textarea'), { target: { value: '' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: undefined, }, 'root' ); }); it('should handle an empty string change event with custom ui:emptyValue', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:widget': 'textarea', 'ui:emptyValue': 'default', }, formData: 'x', }); Simulate.change(node.querySelector('textarea'), { target: { value: '' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: 'default', }, 'root' ); }); it('should render a textarea field with rows', () => { const { node } = createFormComponent({ schema: { type: 'string' }, uiSchema: { 'ui:widget': 'textarea', 'ui:options': { rows: 20 }, }, formData: 'x', }); expect(node.querySelector('textarea').getAttribute('rows')).eql('20'); }); }); describe('DateTimeWidget', () => { it('should render an datetime-local field', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, }); expect(node.querySelectorAll('.field [type=datetime-local]')).to.have.length.of(1); }); it('should assign a default value', () => { const datetime = new Date().toJSON(); const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'date-time', default: datetime, }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: datetime, }); }); it('should reflect the change into the dom', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, }); const newDatetime = new Date().toJSON(); Simulate.change(node.querySelector('[type=datetime-local]'), { target: { value: newDatetime }, }); expect(node.querySelector('[type=datetime-local]').value).eql(utcToLocal(newDatetime)); }); it('should fill field with data', () => { const datetime = new Date().toJSON(); const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, formData: datetime, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: datetime, }); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, }); expect(node.querySelector('[type=datetime-local]').id).eql('root'); }); it('should reject an invalid entered datetime', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, liveValidate: true, }); Simulate.change(node.querySelector('[type=datetime-local]'), { target: { value: 'invalid' }, }); sinon.assert.calledWithMatch(onChange.lastCall, { errorSchema: { __errors: ['must be string'] }, errors: [ { message: 'must be string', name: 'type', params: { type: 'string' }, property: '', schemaPath: '#/type', stack: 'must be string', }, ], }); }); it('should render customized DateTimeWidget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, widgets: { DateTimeWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); it('should allow overriding of BaseInputTemplate', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, templates: { BaseInputTemplate: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); }); describe('DateWidget', () => { const uiSchema = { 'ui:widget': 'date' }; it('should render a date field', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, }); expect(node.querySelectorAll('.field [type=date]')).to.have.length.of(1); }); it('should assign a default value', () => { const datetime = new Date().toJSON(); const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'date', default: datetime, }, uiSchema, noValidate: true, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: datetime, }); }); it('should reflect the change into the dom', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, }); const newDatetime = '2012-12-12'; Simulate.change(node.querySelector('[type=date]'), { target: { value: newDatetime }, }); expect(node.querySelector('[type=date]').value) // XXX import and use conversion helper .eql(newDatetime.slice(0, 10)); }); it('should fill field with data', () => { const datetime = new Date().toJSON(); const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'date', }, formData: datetime, noValidate: true, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: datetime, }); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, }); expect(node.querySelector('[type=date]').id).eql('root'); }); it('should accept a valid entered date', () => { const { node, onError, onChange } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, liveValidate: true, }); Simulate.change(node.querySelector('[type=date]'), { target: { value: '2012-12-12' }, }); sinon.assert.notCalled(onError); sinon.assert.calledWithMatch(onChange.lastCall, { formData: '2012-12-12', }); }); it('should reject an invalid entered date', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, liveValidate: true, }); Simulate.change(node.querySelector('[type=date]'), { target: { value: 'invalid' }, }); sinon.assert.calledWithMatch(onChange.lastCall, { errorSchema: { __errors: ['must match format "date"'] }, errors: [ { message: 'must match format "date"', name: 'format', params: { format: 'date' }, property: '', schemaPath: '#/format', stack: 'must match format "date"', }, ], }); }); it('should render customized DateWidget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, widgets: { DateWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); it('should allow overriding of BaseInputTemplate', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, templates: { BaseInputTemplate: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); }); describe('TimeWidget', () => { it('should render a time field', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'time', }, }); expect(node.querySelectorAll('.field [type=time]')).to.have.length.of(1); }); it('should assign a default value', () => { const time = '01:10:00'; const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'time', default: time, }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: time, }); }); it('should reflect the change into the dom', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'time', }, }); const newTime = '11:10'; Simulate.change(node.querySelector('[type=time]'), { target: { value: newTime }, }); expect(node.querySelector('[type=time]').value).eql(`${newTime}:00`); }); it('should fill field with data', () => { const time = '13:10:00'; const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'time', }, formData: time, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: time, }); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'time', }, }); expect(node.querySelector('[type=time]').id).eql('root'); }); it('should reject an invalid entered time', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'time', }, liveValidate: true, }); Simulate.change(node.querySelector('[type=time]'), { target: { value: 'invalid' }, }); sinon.assert.calledWithMatch(onChange.lastCall, { errorSchema: { __errors: ['must match format "time"'] }, errors: [ { message: 'must match format "time"', name: 'format', params: { format: 'time' }, property: '', schemaPath: '#/format', stack: 'must match format "time"', }, ], }); }); it('should render customized TimeWidget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'time', }, widgets: { TimeWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); it('should allow overriding of BaseInputTemplate', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'time', }, templates: { BaseInputTemplate: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); }); describe('AltDateTimeWidget', () => { const uiSchema = { 'ui:widget': 'alt-datetime' }; it('should render a datetime field', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, uiSchema, }); expect(node.querySelectorAll('.field select')).to.have.length.of(6); }); it('should render a string field with a main label', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', title: 'foo', }, uiSchema, }); expect(node.querySelector('.field label').textContent).eql('foo'); }); it('should assign a default value', () => { const datetime = new Date().toJSON(); const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'date-time', default: datetime, }, uiSchema, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: datetime, }); }); it('should reflect the change into the dom', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, uiSchema, }); act(() => { Simulate.change(node.querySelector('#root_year'), { target: { value: 2012 - 1900 }, // convert year to index }); Simulate.change(node.querySelector('#root_month'), { target: { value: 9 }, // Month index }); Simulate.change(node.querySelector('#root_day'), { target: { value: 1 }, // Day index }); Simulate.change(node.querySelector('#root_hour'), { target: { value: 1 }, }); Simulate.change(node.querySelector('#root_minute'), { target: { value: 2 }, }); Simulate.change(node.querySelector('#root_second'), { target: { value: 3 }, }); }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: '2012-10-02T01:02:03.000Z', }); }); it('should fill field with data', () => { const datetime = new Date().toJSON(); const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, formData: datetime, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: datetime, }); }); it('should render the widgets with the expected ids', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, uiSchema, }); const ids = [].map.call(node.querySelectorAll('select'), (node) => node.id); expect(ids).eql(['root_year', 'root_month', 'root_day', 'root_hour', 'root_minute', 'root_second']); }); it("should render the widgets with the expected options' values", () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, uiSchema, }); const lengths = [].map.call(node.querySelectorAll('select'), (node) => node.length); expect(lengths).eql([ // from 1900 to current year + 2 (inclusive) + 1 undefined option new Date().getFullYear() - 1900 + 3 + 1, 12 + 1, 31 + 1, 24 + 1, 60 + 1, 60 + 1, ]); const monthOptions = node.querySelectorAll('select#root_month option'); const monthOptionsValues = [].map.call(monthOptions, (o) => o.value); expect(monthOptionsValues).eql(['', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11']); }); it("should render the widgets with the expected options' labels", () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, uiSchema, }); const monthOptions = node.querySelectorAll('select#root_month option'); const monthOptionsLabels = [].map.call(monthOptions, (o) => o.text); expect(monthOptionsLabels).eql(['month', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']); }); describe('Action buttons', () => { it('should render action buttons', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, uiSchema, }); const buttonLabels = [].map.call(node.querySelectorAll('a.btn'), (x) => x.textContent); expect(buttonLabels).eql(['Now', 'Clear']); }); it('should set current date when pressing the Now button', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, uiSchema, }); act(() => { Simulate.click(node.querySelector('a.btn-now')); }); const formValue = onChange.lastCall.args[0].formData; // Test that the two DATETIMEs are within 5 seconds of each other. const now = new Date().getTime(); const timeDiff = now - new Date(formValue).getTime(); expect(timeDiff).to.be.at.most(5000); }); it('should clear current date when pressing the Clear button', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, uiSchema, }); act(() => { Simulate.click(node.querySelector('a.btn-now')); Simulate.click(node.querySelector('a.btn-clear')); }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: undefined, }); }); }); it('should render customized AltDateWidget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, uiSchema: { 'ui:widget': 'alt-datetime', }, widgets: { AltDateTimeWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); it('should render customized AltDateTimeWidget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema: { 'ui:widget': 'alt-datetime', }, widgets: { AltDateTimeWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); }); describe('AltDateWidget', () => { const uiSchema = { 'ui:widget': 'alt-date' }; it('should render a date field', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, }); expect(node.querySelectorAll('.field select')).to.have.length.of(3); }); it('should render a string field with a main label', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', title: 'foo', }, uiSchema, }); expect(node.querySelector('.field label').textContent).eql('foo'); }); it('should assign a default value', () => { const datetime = '2012-12-12'; const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'date', default: datetime, }, uiSchema, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: datetime, }); }); it('should call the provided onChange function once all values are filled', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, }); act(() => { Simulate.change(node.querySelector('#root_year'), { target: { value: 2012 - 1900 }, // convert year to index }); Simulate.change(node.querySelector('#root_month'), { target: { value: 9 }, // Month index }); Simulate.change(node.querySelector('#root_day'), { target: { value: 1 }, // Day index }); }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: '2012-10-02', }); }); it('should reflect the change into the dom, even when not all values are filled', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, }); act(() => { Simulate.change(node.querySelector('#root_year'), { target: { value: 2012 - 1900 }, // convert year to index }); Simulate.change(node.querySelector('#root_month'), { target: { value: 9 }, // Month index }); }); expect(getSelectedOptionValue(node.querySelector('#root_year'))).eql('2012'); expect(getSelectedOptionValue(node.querySelector('#root_month'))).eql('10'); expect(getSelectedOptionValue(node.querySelector('#root_day'))).eql('day'); sinon.assert.notCalled(onChange); }); it('should fill field with data', () => { const datetime = '2012-12-12'; const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, formData: datetime, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: datetime, }); }); it('should render the widgets with the expected ids', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, }); const ids = [].map.call(node.querySelectorAll('select'), (node) => node.id); expect(ids).eql(['root_year', 'root_month', 'root_day']); }); it("should render the widgets with the expected options' values", () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, }); const lengths = [].map.call(node.querySelectorAll('select'), (node) => node.length); expect(lengths).eql([ // from 1900 to current year + 2 (inclusive) + 1 undefined option new Date().getFullYear() - 1900 + 3 + 1, 12 + 1, 31 + 1, ]); const monthOptions = node.querySelectorAll('select#root_month option'); const monthOptionsValues = [].map.call(monthOptions, (o) => o.value); expect(monthOptionsValues).eql(['', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11']); }); it("should render the widgets with the expected options' labels", () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, }); const monthOptions = node.querySelectorAll('select#root_month option'); const monthOptionsLabels = [].map.call(monthOptions, (o) => o.text); expect(monthOptionsLabels).eql(['month', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']); }); it('should accept a valid date', () => { const { onError } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, liveValidate: true, formData: '2012-12-12', }); sinon.assert.notCalled(onError); }); it('should throw on invalid date', () => { try { createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, liveValidate: true, formData: '2012-1212', }); } catch (err) { expect(err.message).eql('Unable to parse date 2012-1212'); } }); describe('Action buttons', () => { it('should render action buttons', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, }); const buttonLabels = [].map.call(node.querySelectorAll('a.btn'), (x) => x.textContent); expect(buttonLabels).eql(['Now', 'Clear']); }); it('should set current date when pressing the Now button', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, }); act(() => { Simulate.click(node.querySelector('a.btn-now')); }); const expected = toDateString(parseDateString(new Date().toJSON()), false); sinon.assert.calledWithMatch(onChange.lastCall, { formData: expected, }); }); it('should clear current date when pressing the Clear button', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema, }); act(() => { Simulate.click(node.querySelector('a.btn-now')); Simulate.click(node.querySelector('a.btn-clear')); }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: undefined, }); }); }); it('should render customized AltDateWidget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema: { 'ui:widget': 'alt-date', }, widgets: { AltDateWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); }); describe('EmailWidget', () => { it('should render an email field', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'email', }, }); expect(node.querySelectorAll('.field [type=email]')).to.have.length.of(1); }); it('should render a string field with a label', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'email', title: 'foo', }, }); expect(node.querySelector('.field label').textContent).eql('foo'); }); it('should render a select field with a description', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'email', description: 'baz', }, }); expect(node.querySelector('.field-description').textContent).eql('baz'); }); it('should assign a default value', () => { const email = 'foo@bar.baz'; const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'email', default: email, }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: email, }); }); it('should reflect the change into the dom', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'email', }, }); const newDatetime = new Date().toJSON(); Simulate.change(node.querySelector('[type=email]'), { target: { value: newDatetime }, }); expect(node.querySelector('[type=email]').value).eql(newDatetime); }); it('should fill field with data', () => { const email = 'foo@bar.baz'; const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'email', }, formData: email, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: email, }); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'email', }, }); expect(node.querySelector('[type=email]').id).eql('root'); }); it('should reject an invalid entered email', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'email', }, liveValidate: true, }); Simulate.change(node.querySelector('[type=email]'), { target: { value: 'invalid' }, }); sinon.assert.calledWithMatch(onChange.lastCall, { errorSchema: { __errors: ['must match format "email"'] }, errors: [ { message: 'must match format "email"', name: 'format', params: { format: 'email' }, property: '', schemaPath: '#/format', stack: 'must match format "email"', }, ], }); }); it('should render customized EmailWidget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'email', }, widgets: { EmailWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); }); describe('URLWidget', () => { it('should render an url field', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'uri', }, }); expect(node.querySelectorAll('.field [type=url]')).to.have.length.of(1); }); it('should render a string field with a label', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'uri', title: 'foo', }, }); expect(node.querySelector('.field label').textContent).eql('foo'); }); it('should render a select field with a placeholder', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'uri', description: 'baz', }, }); expect(node.querySelector('.field-description').textContent).eql('baz'); }); it('should assign a default value', () => { const url = 'http://foo.bar/baz'; const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'uri', default: url, }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: url, }); }); it('should reflect the change into the dom', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'uri', }, }); const newDatetime = new Date().toJSON(); Simulate.change(node.querySelector('[type=url]'), { target: { value: newDatetime }, }); expect(node.querySelector('[type=url]').value).eql(newDatetime); }); it('should fill field with data', () => { const url = 'http://foo.bar/baz'; const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'uri', }, formData: url, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: url, }); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'uri', }, }); expect(node.querySelector('[type=url]').id).eql('root'); }); it('should reject an invalid entered url', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'uri', }, liveValidate: true, }); Simulate.change(node.querySelector('[type=url]'), { target: { value: 'invalid' }, }); sinon.assert.calledWithMatch(onChange.lastCall, { errorSchema: { __errors: ['must match format "uri"'] }, errors: [ { message: 'must match format "uri"', name: 'format', params: { format: 'uri' }, property: '', schemaPath: '#/format', stack: 'must match format "uri"', }, ], }); }); it('should render customized URLWidget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'uri', }, widgets: { URLWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); }); describe('ColorWidget', () => { const uiSchema = { 'ui:widget': 'color' }; const color = '#123456'; it('should render a color field', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'color', }, uiSchema, }); expect(node.querySelectorAll('.field [type=color]')).to.have.length.of(1); }); it('should assign a default value', () => { const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'color', default: color, }, uiSchema, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: color }); }); it('should reflect the change into the dom', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'color', }, uiSchema, }); const newColor = '#654321'; Simulate.change(node.querySelector('[type=color]'), { target: { value: newColor }, }); expect(node.querySelector('[type=color]').value).eql(newColor); }); it('should fill field with data', () => { const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'color', }, formData: color, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: color }); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'color', }, uiSchema, }); expect(node.querySelector('[type=color]').id).eql('root'); }); it('should reject an invalid entered color', () => { const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'color', }, uiSchema, liveValidate: true, }); Simulate.change(node.querySelector('[type=color]'), { target: { value: 'invalid' }, }); sinon.assert.calledWithMatch(onChange.lastCall, { errorSchema: { __errors: ['must match format "color"'] }, errors: [ { message: 'must match format "color"', name: 'format', params: { format: 'color' }, property: '', schemaPath: '#/format', stack: 'must match format "color"', }, ], }); }); it('should render customized ColorWidget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'color', }, widgets: { ColorWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); }); describe('FileWidget', () => { const initialValue = 'data:text/plain;name=file1.txt;base64,dGVzdDE='; it('should render a file field', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'data-url', }, }); expect(node.querySelectorAll('.field [type=file]')).to.have.length.of(1); }); it('should assign a default value', () => { const { node, onSubmit } = createFormComponent({ schema: { type: 'string', format: 'data-url', default: initialValue, }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: initialValue, }); }); it('should reflect the change into the dom', async () => { sandbox.stub(window, 'FileReader').returns({ set onload(fn) { fn({ target: { result: 'data:text/plain;base64,x=' } }); }, // eslint-disable-next-line @typescript-eslint/no-empty-function readAsDataUrl() {}, }); const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'data-url', }, }); Simulate.change(node.querySelector('[type=file]'), { target: { files: [{ name: 'file1.txt', size: 1, type: 'type' }], }, }); await new Promise(setImmediate); sinon.assert.calledWithMatch(onChange.lastCall, { formData: 'data:text/plain;name=file1.txt;base64,x=', }); }); it('should encode file name with encodeURIComponent', async () => { const nonUriEncodedValue = 'fileáéí óú1.txt'; const uriEncodedValue = 'file%C3%A1%C3%A9%C3%AD%20%C3%B3%C3%BA1.txt'; sandbox.stub(window, 'FileReader').returns({ set onload(fn) { fn({ target: { result: 'data:text/plain;base64,x=' } }); }, // eslint-disable-next-line @typescript-eslint/no-empty-function readAsDataUrl() {}, }); const { node, onChange } = createFormComponent({ schema: { type: 'string', format: 'data-url', }, }); act(() => { Simulate.change(node.querySelector('[type=file]'), { target: { files: [{ name: nonUriEncodedValue, size: 1, type: 'type' }], }, }); }); await new Promise(setImmediate); sinon.assert.calledWithMatch(onChange.lastCall, { formData: 'data:text/plain;name=' + uriEncodedValue + ';base64,x=', }); }); it('should render the widget with the expected id', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'data-url', }, uiSchema: { 'ui:options': { accept: '.pdf' }, }, }); expect(node.querySelector('[type=file]').accept).eql('.pdf'); }); it('should render the file widget with accept attribute', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'data-url', }, }); expect(node.querySelector('[type=file]').id).eql('root'); }); it('should render customized FileWidget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'data-url', }, widgets: { FileWidget: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); it('should render the file widget with preview attribute', () => { const formData = 'data:image/png;name=test.png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAABg2lDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AYht+mSkUqDmYQcchQnSyIijhqFYpQIdQKrTqYXPoHTRqSFBdHwbXg4M9i1cHFWVcHV0EQ/AFxdXFSdJESv0sKLWK847iH97735e47QGhUmG53jQO64VjpZELK5lalyCvCECHQjCvMNudkOYXA8XWPEN/v4jwruO7P0aflbQaEJOJZZloO8Qbx9KZjct4nFllJ0YjPiccsuiDxI9dVn984Fz0WeKZoZdLzxCKxVOxgtYNZydKJp4hjmm5QvpD1WeO8xVmv1FjrnvyF0byxssx1WsNIYhFLkCFBRQ1lVOAgTrtBio00nScC/EOeXyaXSq4yGDkWUIUOxfOD/8Hv3tqFyQk/KZoAul9c92MEiOwCzbrrfh+7bvMECD8DV0bbX20AM5+k19ta7Ajo3wYurtuaugdc7gCDT6ZiKZ4UpiUUCsD7GX1TDhi4BXrX/L61znH6AGSoV6kb4OAQGC1S9nrAu3s6+/ZvTat/PyV4cojSYDGVAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5wMUAgM6setlnQAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAAWSURBVAjXY/z//z8DAwMTAwMDAwMDACQGAwG9HuO6AAAAAElFTkSuQmCC'; const { node } = createFormComponent({ schema: { type: 'string', format: 'data-url', }, uiSchema: { 'ui:options': { filePreview: true }, }, formData, }); const preview = node.querySelector('img.file-preview'); expect(preview).to.exist; expect(preview.src).eql(formData); }); it('should render the file widget with download link', () => { const formData = 'data:text/plain;name=file1.txt;base64,x='; const { node } = createFormComponent({ schema: { type: 'string', format: 'data-url', }, uiSchema: { 'ui:options': { filePreview: true }, }, formData, }); const download = node.querySelector('a.file-download'); expect(download).to.exist; expect(download.href).eql(formData); expect(download.textContent).eql(TranslatableString.PreviewLabel); }); }); describe('UpDownWidget', () => { it('should allow overriding of BaseInputTemplate', () => { const { node } = createFormComponent({ schema: { type: 'number', format: 'updown', }, templates: { BaseInputTemplate: CustomWidget, }, }); expect(node.querySelector('#custom')).to.exist; }); }); describe('Label', () => { const Widget = (props) => <div id={`label-${props.label}`} />; const widgets = { Widget }; it('should pass field name to widget if there is no title', () => { const schema = { type: 'object', properties: { string: { type: 'string', }, }, }; const uiSchema = { string: { 'ui:widget': 'Widget', }, }; const { node } = createFormComponent({ schema, widgets, uiSchema }); expect(node.querySelector('#label-string')).to.not.be.null; }); it('should pass schema title to widget', () => { const schema = { type: 'string', title: 'test', }; const uiSchema = { 'ui:widget': 'Widget', }; const { node } = createFormComponent({ schema, widgets, uiSchema }); expect(node.querySelector('#label-test')).to.not.be.null; }); it('should pass empty schema title to widget', () => { const schema = { type: 'string', title: '', }; const uiSchema = { 'ui:widget': 'Widget', }; const { node } = createFormComponent({ schema, widgets, uiSchema }); expect(node.querySelector('#label-')).to.not.be.null; }); }); }); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/TitleField.test.jsx���������������������������������0000664�0000000�0000000�00000003350�14467713645�0025227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Component } from 'react'; import { expect } from 'chai'; import TitleField from '../src/components/templates/TitleField'; import { createSandbox, createComponent } from './test_utils'; describe('TitleField', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); // For some reason, stateless components needs to be wrapped into a stateful // one to be rendered into the document. class TitleFieldWrapper extends Component { constructor(props) { super(props); } render() { return <TitleField {...this.props} />; } } it('should return a legend', () => { const props = { title: 'Field title', required: true, }; const { node } = createComponent(TitleFieldWrapper, props); expect(node.tagName).to.equal('LEGEND'); }); it('should have the expected id', () => { const props = { title: 'Field title', required: true, id: 'sample_id', }; const { node } = createComponent(TitleFieldWrapper, props); expect(node.id).to.equal('sample_id'); }); it('should include only title, when field is not required', () => { const props = { title: 'Field title', required: false, }; const { node } = createComponent(TitleFieldWrapper, props); expect(node.textContent).to.equal(props.title); }); it('should add an asterisk to the title, when field is required', () => { const props = { title: 'Field title', required: true, }; const { node } = createComponent(TitleFieldWrapper, props); expect(node.textContent).to.equal(props.title + '*'); expect(node.querySelector('span.required').textContent).to.equal('*'); }); }); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/__snapshots__/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024313�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/__snapshots__/ArraySnap.test.jsx.snap���������������0000664�0000000�0000000�00000216130�14467713645�0030662�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`array fields array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="row array-item-list" /> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right array-item-add" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="row array-item-list" > <div className="array-item" > <div className="col-xs-9" > <div className="form-group field field-string" > <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" label="" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> <div className="col-xs-3 array-item-toolbox" > <div className="btn-group" style={ { "display": "flex", "justifyContent": "space-around", } } > <button className="btn btn-default array-item-move-up" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <i className="glyphicon glyphicon-arrow-up" /> </button> <button className="btn btn-default array-item-move-down" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <i className="glyphicon glyphicon-arrow-down" /> </button> <button className="btn btn-default array-item-copy" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <i className="glyphicon glyphicon-copy" /> </button> <button className="btn btn-danger array-item-remove" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="array-item" > <div className="col-xs-9" > <div className="form-group field field-string" > <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" label="" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> <div className="col-xs-3 array-item-toolbox" > <div className="btn-group" style={ { "display": "flex", "justifyContent": "space-around", } } > <button className="btn btn-default array-item-move-up" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <i className="glyphicon glyphicon-arrow-up" /> </button> <button className="btn btn-default array-item-move-down" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <i className="glyphicon glyphicon-arrow-down" /> </button> <button className="btn btn-default array-item-copy" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <i className="glyphicon glyphicon-copy" /> </button> <button className="btn btn-danger array-item-remove" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right array-item-add" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <select aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option value="0" > a </option> <option value="1" > b </option> <option value="2" > c </option> </select> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields empty errors array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_name" > name </label> <input aria-describedby="root_name__error root_name__description root_name__help" autoFocus={false} className="form-control" disabled={false} id="root_name" label="name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-fixed-items" id="root" > <div className="row array-item-list" > <div className="array-item" > <div className="col-xs-12" > <div className="form-group field field-string" > <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" label="" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> <div className="array-item" > <div className="col-xs-12" > <div className="form-group field field-number" > <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" label="" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields has errors 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="panel panel-danger errors" > <div className="panel-heading" > <h3 className="panel-title" > Errors </h3> </div> <ul className="list-group" > <li className="list-group-item text-danger" > .name Bad input </li> </ul> </div> <div className="form-group field field-object" > <fieldset id="root" > <div className="form-group field field-string field-error has-error has-danger" > <label className="control-label" htmlFor="root_name" > name </label> <input aria-describedby="root_name__error root_name__description root_name__help" autoFocus={false} className="form-control" disabled={false} id="root_name" label="name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> <div> <ul className="error-detail bs-callout bs-callout-info" id="root_name__error" > <li className="text-danger" > Bad input </li> </ul> </div> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`array fields no errors 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_name" > name </label> <input aria-describedby="root_name__error root_name__description root_name__help" autoFocus={false} className="form-control" disabled={false} id="root_name" label="name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-of-string" id="root" > <legend id="root__title" > Test field </legend> <p className="field-description" id="root__description" > a test description </p> <div className="row array-item-list" /> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right array-item-add" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-of-string" id="root" > <legend id="root__title" > Test field </legend> <p className="field-description" id="root__description" > a test description </p> <div className="row array-item-list" > <div className="array-item" > <div className="col-xs-9" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_0" > Test item <span className="required" > * </span> </label> <p className="field-description" id="root_0__description" > a test item description </p> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" label="Test item" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> <div className="col-xs-3 array-item-toolbox" > <div className="btn-group" style={ { "display": "flex", "justifyContent": "space-around", } } > <button className="btn btn-default array-item-move-up" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <i className="glyphicon glyphicon-arrow-up" /> </button> <button className="btn btn-default array-item-move-down" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <i className="glyphicon glyphicon-arrow-down" /> </button> <button className="btn btn-default array-item-copy" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <i className="glyphicon glyphicon-copy" /> </button> <button className="btn btn-danger array-item-remove" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="array-item" > <div className="col-xs-9" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_1" > Test item <span className="required" > * </span> </label> <p className="field-description" id="root_1__description" > a test item description </p> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" label="Test item" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> <div className="col-xs-3 array-item-toolbox" > <div className="btn-group" style={ { "display": "flex", "justifyContent": "space-around", } } > <button className="btn btn-default array-item-move-up" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <i className="glyphicon glyphicon-arrow-up" /> </button> <button className="btn btn-default array-item-move-down" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <i className="glyphicon glyphicon-arrow-down" /> </button> <button className="btn btn-default array-item-copy" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <i className="glyphicon glyphicon-copy" /> </button> <button className="btn btn-danger array-item-remove" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right array-item-add" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <label className="control-label" htmlFor="root" > Test field </label> <p className="field-description" id="root__description" > a test description </p> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option value="0" > a </option> <option value="1" > b </option> <option value="2" > c </option> </select> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-fixed-items" id="root" > <legend id="root__title" > Test field </legend> <p className="field-description" id="root__description" > a test description </p> <div className="row array-item-list" > <div className="array-item" > <div className="col-xs-12" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_0" > Test item <span className="required" > * </span> </label> <p className="field-description" id="root_0__description" > a test item description </p> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" label="Test item" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> <div className="array-item" > <div className="col-xs-12" > <div className="form-group field field-number" > <label className="control-label" htmlFor="root_1" > Test item <span className="required" > * </span> </label> <p className="field-description" id="root_1__description" > a test item description </p> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" label="Test item" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-of-string" id="root" > <legend id="root__title" > My Field </legend> <p className="field-description" id="root__description" > a fancier description </p> <div className="row array-item-list" /> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right array-item-add" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-of-string" id="root" > <legend id="root__title" > My Field </legend> <p className="field-description" id="root__description" > a fancier description </p> <div className="row array-item-list" > <div className="array-item" > <div className="col-xs-9" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_0" > My Item <span className="required" > * </span> </label> <p className="field-description" id="root_0__description" > a fancier item description </p> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" label="My Item" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> <div className="col-xs-3 array-item-toolbox" > <div className="btn-group" style={ { "display": "flex", "justifyContent": "space-around", } } > <button className="btn btn-default array-item-move-up" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <i className="glyphicon glyphicon-arrow-up" /> </button> <button className="btn btn-default array-item-move-down" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <i className="glyphicon glyphicon-arrow-down" /> </button> <button className="btn btn-default array-item-copy" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <i className="glyphicon glyphicon-copy" /> </button> <button className="btn btn-danger array-item-remove" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="array-item" > <div className="col-xs-9" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_1" > My Item <span className="required" > * </span> </label> <p className="field-description" id="root_1__description" > a fancier item description </p> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" label="My Item" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> <div className="col-xs-3 array-item-toolbox" > <div className="btn-group" style={ { "display": "flex", "justifyContent": "space-around", } } > <button className="btn btn-default array-item-move-up" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <i className="glyphicon glyphicon-arrow-up" /> </button> <button className="btn btn-default array-item-move-down" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <i className="glyphicon glyphicon-arrow-down" /> </button> <button className="btn btn-default array-item-copy" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <i className="glyphicon glyphicon-copy" /> </button> <button className="btn btn-danger array-item-remove" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right array-item-add" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <label className="control-label" htmlFor="root" > My Field </label> <p className="field-description" id="root__description" > a fancier description </p> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option value="0" > a </option> <option value="1" > b </option> <option value="2" > c </option> </select> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-fixed-items" id="root" > <legend id="root__title" > My Field </legend> <p className="field-description" id="root__description" > a fancier description </p> <div className="row array-item-list" > <div className="array-item" > <div className="col-xs-12" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_0" > My Item <span className="required" > * </span> </label> <p className="field-description" id="root_0__description" > a fancier item description </p> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" label="My Item" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> <div className="array-item" > <div className="col-xs-12" > <div className="form-group field field-number" > <label className="control-label" htmlFor="root_1" > My Item <span className="required" > * </span> </label> <p className="field-description" id="root_1__description" > a fancier item description </p> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" label="My Item" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-of-string" id="root" > <legend id="root__title" > My Field </legend> <p className="field-description" id="root__description" > a fancier description </p> <div className="row array-item-list" /> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right array-item-add" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-of-string" id="root" > <legend id="root__title" > My Field </legend> <p className="field-description" id="root__description" > a fancier description </p> <div className="row array-item-list" > <div className="array-item" > <div className="col-xs-9" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_0" > My Item <span className="required" > * </span> </label> <p className="field-description" id="root_0__description" > a fancier item description </p> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" label="My Item" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> <div className="col-xs-3 array-item-toolbox" > <div className="btn-group" style={ { "display": "flex", "justifyContent": "space-around", } } > <button className="btn btn-default array-item-move-up" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <i className="glyphicon glyphicon-arrow-up" /> </button> <button className="btn btn-default array-item-move-down" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <i className="glyphicon glyphicon-arrow-down" /> </button> <button className="btn btn-default array-item-copy" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <i className="glyphicon glyphicon-copy" /> </button> <button className="btn btn-danger array-item-remove" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="array-item" > <div className="col-xs-9" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_1" > My Item <span className="required" > * </span> </label> <p className="field-description" id="root_1__description" > a fancier item description </p> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" label="My Item" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> <div className="col-xs-3 array-item-toolbox" > <div className="btn-group" style={ { "display": "flex", "justifyContent": "space-around", } } > <button className="btn btn-default array-item-move-up" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <i className="glyphicon glyphicon-arrow-up" /> </button> <button className="btn btn-default array-item-move-down" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <i className="glyphicon glyphicon-arrow-down" /> </button> <button className="btn btn-default array-item-copy" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <i className="glyphicon glyphicon-copy" /> </button> <button className="btn btn-danger array-item-remove" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right array-item-add" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <label className="control-label" htmlFor="root" > My Field </label> <p className="field-description" id="root__description" > a fancier description </p> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option value="0" > a </option> <option value="1" > b </option> <option value="2" > c </option> </select> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-fixed-items" id="root" > <legend id="root__title" > My Field </legend> <p className="field-description" id="root__description" > a fancier description </p> <div className="row array-item-list" > <div className="array-item" > <div className="col-xs-12" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_0" > My Item <span className="required" > * </span> </label> <p className="field-description" id="root_0__description" > a fancier item description </p> <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" label="My Item" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> <div className="array-item" > <div className="col-xs-12" > <div className="form-group field field-number" > <label className="control-label" htmlFor="root_1" > My Item <span className="required" > * </span> </label> <p className="field-description" id="root_1__description" > a fancier item description </p> <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" label="My Item" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="row array-item-list" /> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right array-item-add" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-of-string" id="root" > <div className="row array-item-list" > <div className="array-item" > <div className="col-xs-9" > <div className="form-group field field-string" > <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" label="Test item" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> <div className="col-xs-3 array-item-toolbox" > <div className="btn-group" style={ { "display": "flex", "justifyContent": "space-around", } } > <button className="btn btn-default array-item-move-up" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <i className="glyphicon glyphicon-arrow-up" /> </button> <button className="btn btn-default array-item-move-down" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <i className="glyphicon glyphicon-arrow-down" /> </button> <button className="btn btn-default array-item-copy" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <i className="glyphicon glyphicon-copy" /> </button> <button className="btn btn-danger array-item-remove" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="array-item" > <div className="col-xs-9" > <div className="form-group field field-string" > <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" label="Test item" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> <div className="col-xs-3 array-item-toolbox" > <div className="btn-group" style={ { "display": "flex", "justifyContent": "space-around", } } > <button className="btn btn-default array-item-move-up" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move up" type="button" > <i className="glyphicon glyphicon-arrow-up" /> </button> <button className="btn btn-default array-item-move-down" disabled={true} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Move down" type="button" > <i className="glyphicon glyphicon-arrow-down" /> </button> <button className="btn btn-default array-item-copy" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Copy" type="button" > <i className="glyphicon glyphicon-copy" /> </button> <button className="btn btn-danger array-item-remove" disabled={false} onClick={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right array-item-add" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <label className="control-label" htmlFor="root" > Test field </label> <p className="field-description" id="root__description" > a test description </p> <select aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option value="0" > a </option> <option value="1" > b </option> <option value="2" > c </option> </select> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <fieldset className="field field-array field-array-fixed-items" id="root" > <div className="row array-item-list" > <div className="array-item" > <div className="col-xs-12" > <div className="form-group field field-string" > <input aria-describedby="root_0__error root_0__description root_0__help" autoFocus={false} className="form-control" disabled={false} id="root_0" label="Test item" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> <div className="array-item" > <div className="col-xs-12" > <div className="form-group field field-number" > <input aria-describedby="root_1__error root_1__description root_1__help" autoFocus={false} className="form-control" disabled={false} id="root_1" label="Test item" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/__snapshots__/FormSnap.test.jsx.snap����������������0000664�0000000�0000000�00000100257�14467713645�0030511�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`single fields checkbox field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="checkbox " > <label> <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="checkbox" /> <span> </span> </label> </div> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields checkbox field with label 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="checkbox " > <label> <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="checkbox" /> <span> test </span> </label> </div> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields checkboxes field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <label className="control-label" htmlFor="root" > An enum list rendered as checkboxes </label> <div className="checkboxes" id="root" > <div className="checkbox " > <label> <span> <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} disabled={false} id="root-0" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="checkbox" value="0" /> <span> foo </span> </span> </label> </div> <div className="checkbox " > <label> <span> <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} disabled={false} id="root-1" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="checkbox" value="1" /> <span> bar </span> </span> </label> </div> <div className="checkbox " > <label> <span> <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} disabled={false} id="root-2" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="checkbox" value="2" /> <span> fuzz </span> </span> </label> </div> <div className="checkbox " > <label> <span> <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} disabled={false} id="root-3" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="checkbox" value="3" /> <span> qux </span> </span> </label> </div> </div> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields field with description 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_my-field" > my-field </label> <p className="field-description" id="root_my-field__description" > some description </p> <input aria-describedby="root_my-field__error root_my-field__description root_my-field__help" autoFocus={false} className="form-control" disabled={false} id="root_my-field" label="my-field" name="root_my-field" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields field with description in uiSchema 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_my-field" > my-field </label> <p className="field-description" id="root_my-field__description" > some other description </p> <input aria-describedby="root_my-field__error root_my-field__description root_my-field__help" autoFocus={false} className="form-control" disabled={false} id="root_my-field" label="my-field" name="root_my-field" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields format color 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="color" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields format date 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="date" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields format datetime 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="datetime-local" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields format time 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="time" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields help and error display 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="panel panel-danger errors" > <div className="panel-heading" > <h3 className="panel-title" > Errors </h3> </div> <ul className="list-group" > <li className="list-group-item text-danger" > . an error </li> </ul> </div> <div className="form-group field field-string field-error has-error has-danger" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="text" value="" /> <div> <ul className="error-detail bs-callout bs-callout-info" id="root__error" > <li className="text-danger" > an error </li> </ul> </div> <p className="help-block" id="root__help" > help me! </p> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields hidden field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <div className="hidden" > <input id="root_my-field" name="root_my-field" type="hidden" value="" /> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields hidden label 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="text" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields null field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-null" /> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields number field 0 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} step="any" type="number" value={0} /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields number field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} step="any" type="number" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields password field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="password" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields radio field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="field-radio-group" id="root" > <div className="radio " > <label> <span> <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} disabled={false} id="root-0" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="radio" value="0" /> <span> Yes </span> </span> </label> </div> <div className="radio " > <label> <span> <input aria-describedby="root__error root__description root__help" autoFocus={false} checked={false} disabled={false} id="root-1" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="radio" value="1" /> <span> No </span> </span> </label> </div> </div> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields schema examples 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <input aria-describedby="root__error root__description root__help root__examples" autoFocus={false} className="form-control" disabled={false} id="root" label="" list="root__examples" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="text" value="" /> <datalist id="root__examples" > <option value="Firefox" /> <option value="Chrome" /> <option value="Opera" /> <option value="Vivaldi" /> <option value="Safari" /> </datalist> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <select aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" multiple={false} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} value="" > <option value="" > </option> <option value="0" > foo </option> <option value="1" > bar </option> </select> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <select aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option value="0" > foo </option> <option value="1" > bar </option> <option value="2" > fuzz </option> <option value="3" > qux </option> </select> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice enumDisabled 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <select aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option disabled={false} value="0" > foo </option> <option disabled={true} value="1" > bar </option> <option disabled={false} value="2" > fuzz </option> <option disabled={false} value="3" > qux </option> </select> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice formData 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <select aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={ [ "0", "1", ] } > <option value="0" > foo </option> <option value="1" > bar </option> <option value="2" > fuzz </option> <option value="3" > qux </option> </select> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice with labels 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <select aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" multiple={true} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} value={[]} > <option value="0" > Blue </option> <option value="1" > Red </option> <option value="2" > Green </option> </select> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field single choice enumDisabled 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <select aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" multiple={false} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} value="" > <option value="" > </option> <option disabled={false} value="0" > foo </option> <option disabled={true} value="1" > bar </option> </select> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field single choice formData 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <select aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" multiple={false} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} value="1" > <option value="" > </option> <option value="0" > foo </option> <option value="1" > bar </option> </select> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields slider field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-integer" > <div className="field-range-wrapper" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" max={100} min={42} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="range" value={75} /> <span className="range-view" > 75 </span> </div> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field format data-url 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div> <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="file" value="" /> </div> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field format email 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="email" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field format uri 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="url" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field regular 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="text" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field with placeholder 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="placeholder" readOnly={false} type="text" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields textarea field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <textarea aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields title field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <legend id="root__title" > Titre 1 </legend> <div className="form-group field field-string" > <label className="control-label" htmlFor="root_title" > Titre 2 </label> <input aria-describedby="root_title__error root_title__description root_title__help" autoFocus={false} className="form-control" disabled={false} id="root_title" label="Titre 2" name="root_title" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields unsupported field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-undefined" > <div className="unsupported-field" > <p> <span> Unsupported field schema for field <code> root </code> : <em> Unknown field type undefined </em> . </span> </p> <pre> {} </pre> </div> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields up/down field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="number" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`single fields using custom tagName 1`] = ` <div className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <input aria-describedby="root__error root__description root__help" autoFocus={false} className="form-control" disabled={false} id="root" label="" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} type="text" value="" /> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </div> `; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/__snapshots__/ObjectSnap.test.jsx.snap��������������0000664�0000000�0000000�00000112466�14467713645�0031021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`object fields additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <div className="form-group field field-string" > <div className="row" > <div className="col-xs-5 form-additional" > <div className="form-group" > <label className="control-label" htmlFor="root_foo-key" > foo Key </label> <input className="form-control" defaultValue="foo" id="root_foo-key" onBlur={[Function]} type="text" /> </div> </div> <div className="form-additional form-group col-xs-5" > <label className="control-label" htmlFor="root_foo" > foo </label> <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="form-control" disabled={false} id="root_foo" label="foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> <div className="col-xs-2" > <button className="btn btn-danger array-item-remove btn-block" disabled={false} onClick={[Function]} style={ { "border": "0", } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right object-property-expand" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <div className="form-group field field-string" > <label className="control-label" htmlFor="root_a" > A </label> <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="form-control" disabled={false} id="root_a" label="A" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> <div className="form-group field field-number" > <label className="control-label" htmlFor="root_b" > B </label> <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="form-control" disabled={false} id="root_b" label="B" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <div className="form-group field field-string" > <div className="row" > <div className="col-xs-5 form-additional" > <div className="form-group" > <label className="control-label" htmlFor="root_additionalProperty-key" > additionalProperty Key </label> <input className="form-control" defaultValue="additionalProperty" id="root_additionalProperty-key" onBlur={[Function]} type="text" /> </div> </div> <div className="form-additional form-group col-xs-5" > <label className="control-label" htmlFor="root_additionalProperty" > additionalProperty </label> <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" autoFocus={false} className="form-control" disabled={false} id="root_additionalProperty" label="additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> <div className="col-xs-2" > <button className="btn btn-danger array-item-remove btn-block" disabled={false} onClick={[Function]} style={ { "border": "0", } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right object-property-expand" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <legend id="root__title" > Test field </legend> <p className="field-description" id="root__description" > a test description </p> <div className="form-group field field-string" > <div className="row" > <div className="col-xs-5 form-additional" > <div className="form-group" > <label className="control-label" htmlFor="root_foo-key" > foo Key </label> <input className="form-control" defaultValue="foo" id="root_foo-key" onBlur={[Function]} type="text" /> </div> </div> <div className="form-additional form-group col-xs-5" > <label className="control-label" htmlFor="root_foo" > foo </label> <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="form-control" disabled={false} id="root_foo" label="foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> <div className="col-xs-2" > <button className="btn btn-danger array-item-remove btn-block" disabled={false} onClick={[Function]} style={ { "border": "0", } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right object-property-expand" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from both additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <legend id="root__title" > My Field </legend> <p className="field-description" id="root__description" > a fancier description </p> <div className="form-group field field-string" > <div className="row" > <div className="col-xs-5 form-additional" > <div className="form-group" > <label className="control-label" htmlFor="root_foo-key" > foo Key </label> <input className="form-control" defaultValue="foo" id="root_foo-key" onBlur={[Function]} type="text" /> </div> </div> <div className="form-additional form-group col-xs-5" > <label className="control-label" htmlFor="root_foo" > foo </label> <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="form-control" disabled={false} id="root_foo" label="foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> <div className="col-xs-2" > <button className="btn btn-danger array-item-remove btn-block" disabled={false} onClick={[Function]} style={ { "border": "0", } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right object-property-expand" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from both object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <legend id="root__title" > My Field </legend> <p className="field-description" id="root__description" > a fancier description </p> <div className="form-group field field-string" > <label className="control-label" htmlFor="root_a" > My Item A </label> <p className="field-description" id="root_a__description" > a fancier item A description </p> <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="form-control" disabled={false} id="root_a" label="My Item A" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> <div className="form-group field field-number" > <label className="control-label" htmlFor="root_b" > My Item B </label> <p className="field-description" id="root_b__description" > a fancier item B description </p> <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="form-control" disabled={false} id="root_b" label="My Item B" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from uiSchema additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <legend id="root__title" > My Field </legend> <p className="field-description" id="root__description" > a fancier description </p> <div className="form-group field field-string" > <div className="row" > <div className="col-xs-5 form-additional" > <div className="form-group" > <label className="control-label" htmlFor="root_foo-key" > foo Key </label> <input className="form-control" defaultValue="foo" id="root_foo-key" onBlur={[Function]} type="text" /> </div> </div> <div className="form-additional form-group col-xs-5" > <label className="control-label" htmlFor="root_foo" > foo </label> <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="form-control" disabled={false} id="root_foo" label="foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> <div className="col-xs-2" > <button className="btn btn-danger array-item-remove btn-block" disabled={false} onClick={[Function]} style={ { "border": "0", } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right object-property-expand" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from uiSchema object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <legend id="root__title" > My Field </legend> <p className="field-description" id="root__description" > a fancier description </p> <div className="form-group field field-string" > <label className="control-label" htmlFor="root_a" > My Item A </label> <p className="field-description" id="root_a__description" > a fancier item A description </p> <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="form-control" disabled={false} id="root_a" label="My Item A" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> <div className="form-group field field-number" > <label className="control-label" htmlFor="root_b" > My Item B </label> <p className="field-description" id="root_b__description" > a fancier item B description </p> <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="form-control" disabled={false} id="root_b" label="My Item B" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from uiSchema show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <legend id="root__title" > My Field </legend> <p className="field-description" id="root__description" > a fancier description </p> <div className="form-group field field-string" > <div className="row" > <div className="col-xs-5 form-additional" > <div className="form-group" > <label className="control-label" htmlFor="root_additionalProperty-key" > additionalProperty Key </label> <input className="form-control" defaultValue="additionalProperty" id="root_additionalProperty-key" onBlur={[Function]} type="text" /> </div> </div> <div className="form-additional form-group col-xs-5" > <label className="control-label" htmlFor="root_additionalProperty" > additionalProperty </label> <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" autoFocus={false} className="form-control" disabled={false} id="root_additionalProperty" label="additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> <div className="col-xs-2" > <button className="btn btn-danger array-item-remove btn-block" disabled={false} onClick={[Function]} style={ { "border": "0", } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right object-property-expand" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <legend id="root__title" > Test field </legend> <p className="field-description" id="root__description" > a test description </p> <div className="form-group field field-string" > <label className="control-label" htmlFor="root_a" > A </label> <p className="field-description" id="root_a__description" > A description </p> <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="form-control" disabled={false} id="root_a" label="A" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> <div className="form-group field field-number" > <label className="control-label" htmlFor="root_b" > B </label> <p className="field-description" id="root_b__description" > B description </p> <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="form-control" disabled={false} id="root_b" label="B" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <legend id="root__title" > Test field </legend> <p className="field-description" id="root__description" > a test description </p> <div className="form-group field field-string" > <div className="row" > <div className="col-xs-5 form-additional" > <div className="form-group" > <label className="control-label" htmlFor="root_additionalProperty-key" > additionalProperty Key </label> <input className="form-control" defaultValue="additionalProperty" id="root_additionalProperty-key" onBlur={[Function]} type="text" /> </div> </div> <div className="form-additional form-group col-xs-5" > <label className="control-label" htmlFor="root_additionalProperty" > additionalProperty </label> <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" autoFocus={false} className="form-control" disabled={false} id="root_additionalProperty" label="additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> <div className="col-xs-2" > <button className="btn btn-danger array-item-remove btn-block" disabled={false} onClick={[Function]} style={ { "border": "0", } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right object-property-expand" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description with global label off additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <div className="form-group field field-string" > <div className="row" > <div className="col-xs-5 form-additional" > <div className="form-group" > <label className="control-label" htmlFor="root_foo-key" > foo Key </label> <input className="form-control" defaultValue="foo" id="root_foo-key" onBlur={[Function]} type="text" /> </div> </div> <div className="form-additional form-group col-xs-5" > <input aria-describedby="root_foo__error root_foo__description root_foo__help" autoFocus={false} className="form-control" disabled={false} id="root_foo" label="foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> <div className="col-xs-2" > <button className="btn btn-danger array-item-remove btn-block" disabled={false} onClick={[Function]} style={ { "border": "0", } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right object-property-expand" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description with global label off object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <div className="form-group field field-string" > <input aria-describedby="root_a__error root_a__description root_a__help" autoFocus={false} className="form-control" disabled={false} id="root_a" label="A" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> <div className="form-group field field-number" > <input aria-describedby="root_b__error root_b__description root_b__help" autoFocus={false} className="form-control" disabled={false} id="root_b" label="B" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description with global label off show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <fieldset id="root" > <div className="form-group field field-string" > <div className="row" > <div className="col-xs-5 form-additional" > <div className="form-group" > <label className="control-label" htmlFor="root_additionalProperty-key" > additionalProperty Key </label> <input className="form-control" defaultValue="additionalProperty" id="root_additionalProperty-key" onBlur={[Function]} type="text" /> </div> </div> <div className="form-additional form-group col-xs-5" > <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" autoFocus={false} className="form-control" disabled={false} id="root_additionalProperty" label="additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> <div className="col-xs-2" > <button className="btn btn-danger array-item-remove btn-block" disabled={false} onClick={[Function]} style={ { "border": "0", } } title="Remove" type="button" > <i className="glyphicon glyphicon-remove" /> </button> </div> </div> </div> <div className="row" > <p className="col-xs-3 col-xs-offset-9 text-right object-property-expand" > <button className="btn btn-info btn-add col-xs-12" disabled={false} onClick={[Function]} title="Add" type="button" > <i className="glyphicon glyphicon-plus" /> </button> </p> </div> </fieldset> </div> <div> <button className="btn btn-info " disabled={false} type="submit" > Submit </button> </div> </form> `; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/allOf.test.jsx��������������������������������������0000664�0000000�0000000�00000004001�14467713645�0024231�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { createFormComponent, createSandbox } from './test_utils'; import SchemaField from '../src/components/fields/SchemaField'; describe('allOf', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); it('should render a regular input element with a single type, when multiple types specified', () => { const schema = { type: 'object', properties: { foo: { allOf: [{ type: ['string', 'number', 'null'] }, { type: 'string' }], }, }, }; const { node } = createFormComponent({ schema, }); expect(node.querySelectorAll('input')).to.have.length.of(1); }); it('should be able to handle incompatible types and not crash', () => { const schema = { type: 'object', properties: { foo: { allOf: [{ type: 'string' }, { type: 'boolean' }], }, }, }; const { node } = createFormComponent({ schema, }); expect(node.querySelectorAll('input')).to.have.length.of(0); }); it('should pass form context to schema field', () => { const schema = { type: 'object', properties: { foo: { allOf: [{ type: 'string' }, { type: 'boolean' }], }, }, }; const formContext = { root: 'root-id', root_foo: 'foo-id' }; function CustomSchemaField(props) { const { formContext, idSchema } = props; return ( <> <code id={formContext[idSchema.$id]}>Ha</code> <SchemaField {...props} /> </> ); } const { node } = createFormComponent({ schema, formData: { userId: 'foobarbaz' }, formContext, fields: { SchemaField: CustomSchemaField }, }); const codeBlocks = node.querySelectorAll('code'); expect(codeBlocks).to.have.length(2); Object.keys(formContext).forEach((key) => { expect(node.querySelector(`code#${formContext[key]}`)).to.exist; }); }); }); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/anyOf.test.jsx��������������������������������������0000664�0000000�0000000�00000114076�14467713645�0024266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { Simulate } from 'react-dom/test-utils'; import sinon from 'sinon'; import { createFormComponent, createSandbox, setProps, getSelectedOptionValue } from './test_utils'; import SelectWidget from '../src/components/widgets/SelectWidget'; describe('anyOf', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); it('should not render a select element if the anyOf keyword is not present', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, }, }; const { node } = createFormComponent({ schema, }); expect(node.querySelectorAll('select')).to.have.length.of(0); }); it('should render a select element if the anyOf keyword is present, merges top level required', () => { const schema = { type: 'object', required: ['baz'], properties: { baz: { type: 'number' }, }, anyOf: [ { properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, ], }; const { node } = createFormComponent({ schema, }); console.log(node.innerHTML); expect(node.querySelectorAll('select')).to.have.length.of(1); expect(node.querySelector('select').id).eql('root__anyof_select'); expect(node.querySelectorAll('span.required')).to.have.length.of(1); }); it('should render a select element if the anyOf keyword is present, merges top level and anyOf required', () => { const schema = { type: 'object', required: ['baz'], properties: { baz: { type: 'number' }, }, anyOf: [ { required: ['foo'], properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, ], }; const { node } = createFormComponent({ schema, }); console.log(node.innerHTML); expect(node.querySelectorAll('select')).to.have.length.of(1); expect(node.querySelector('select').id).eql('root__anyof_select'); expect(node.querySelectorAll('span.required')).to.have.length.of(2); }); it('should render a root select element with default value', () => { const formData = { foo: 'b' }; const schema = { type: 'object', anyOf: [ { title: 'foo1', properties: { foo: { type: 'string', enum: ['a', 'b'], default: 'a' }, }, }, { title: 'foo2', properties: { foo: { type: 'string', enum: ['a', 'b'], default: 'b' }, }, }, ], }; const { node } = createFormComponent({ schema, formData, }); expect(node.querySelector('select').value).eql('1'); }); it('should assign a default value and set defaults on option change', () => { const { node, onChange } = createFormComponent({ schema: { anyOf: [ { type: 'object', properties: { foo: { type: 'string', default: 'defaultfoo' }, }, }, { type: 'object', properties: { foo: { type: 'string', default: 'defaultbar' }, }, }, ], }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { foo: 'defaultfoo' }, }); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'defaultbar' }, }, 'root__anyof_select' ); }); it('should assign a default value and set defaults on option change when using references', () => { const { node, onChange } = createFormComponent({ schema: { anyOf: [ { type: 'object', properties: { foo: { type: 'string', default: 'defaultfoo' }, }, }, { $ref: '#/definitions/bar', }, ], definitions: { bar: { type: 'object', properties: { foo: { type: 'string', default: 'defaultbar' }, }, }, }, }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { foo: 'defaultfoo' }, }); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'defaultbar' }, }, 'root__anyof_select' ); }); it("should assign a default value and set defaults on option change with 'type': 'object' missing", () => { const { node, onChange } = createFormComponent({ schema: { type: 'object', anyOf: [ { properties: { foo: { type: 'string', default: 'defaultfoo' }, }, }, { properties: { foo: { type: 'string', default: 'defaultbar' }, }, }, ], }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { foo: 'defaultfoo' }, }); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'defaultbar' }, }, 'root__anyof_select' ); }); it('should render a custom widget', () => { const schema = { type: 'object', anyOf: [ { properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, ], }; const widgets = { SelectWidget: () => { return <section id='CustomSelect'>Custom Widget</section>; }, }; const { node } = createFormComponent({ schema, widgets, }); expect(node.querySelector('#CustomSelect')).to.exist; }); it('should change the rendered form when the select value is changed', () => { const schema = { type: 'object', anyOf: [ { properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, ], }; const { node } = createFormComponent({ schema, }); expect(node.querySelectorAll('#root_foo')).to.have.length.of(1); expect(node.querySelectorAll('#root_bar')).to.have.length.of(0); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); expect(node.querySelectorAll('#root_foo')).to.have.length.of(0); expect(node.querySelectorAll('#root_bar')).to.have.length.of(1); }); it('should handle change events', () => { const schema = { type: 'object', anyOf: [ { properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, ], }; const { node, onChange } = createFormComponent({ schema, }); Simulate.change(node.querySelector('input#root_foo'), { target: { value: 'Lorem ipsum dolor sit amet' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'Lorem ipsum dolor sit amet' }, }, 'root_foo' ); }); it('should clear previous data when changing options', () => { const schema = { type: 'object', properties: { buzz: { type: 'string' }, }, anyOf: [ { properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, ], }; const { node, onChange } = createFormComponent({ schema, }); Simulate.change(node.querySelector('input#root_buzz'), { target: { value: 'Lorem ipsum dolor sit amet' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { buzz: 'Lorem ipsum dolor sit amet', }, }, 'root_buzz' ); Simulate.change(node.querySelector('input#root_foo'), { target: { value: 'Consectetur adipiscing elit' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { buzz: 'Lorem ipsum dolor sit amet', foo: 'Consectetur adipiscing elit', }, }, 'root_foo' ); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { buzz: 'Lorem ipsum dolor sit amet', foo: undefined, }, }); }); it('should support options with different types', () => { const schema = { type: 'object', properties: { userId: { anyOf: [ { type: 'number', }, { type: 'string', }, ], }, }, }; const { node, onChange } = createFormComponent({ schema, }); Simulate.change(node.querySelector('input#root_userId'), { target: { value: 12345 }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { userId: 12345 }, }, 'root_userId' ); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { userId: undefined }, }, 'root_userId' ); Simulate.change(node.querySelector('input#root_userId'), { target: { value: 'Lorem ipsum dolor sit amet' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { userId: 'Lorem ipsum dolor sit amet' }, }, 'root_userId' ); }); it('should support custom fields', () => { const schema = { type: 'object', properties: { userId: { anyOf: [ { type: 'number', }, { type: 'string', }, ], }, }, }; const CustomField = () => { return <div id='custom-anyof-field' />; }; const { node } = createFormComponent({ schema, fields: { AnyOfField: CustomField, }, }); expect(node.querySelectorAll('#custom-anyof-field')).to.have.length(1); }); it('should support custom widget', () => { const schema = { type: 'object', properties: { choice: { anyOf: [ { title: 'first', type: 'string', default: 'first', readOnly: true, }, { title: 'second', type: 'string', default: 'second', readOnly: true, }, ], }, }, }; function CustomSelectWidget(props) { const { schema, value } = props; // Remove the default so that we can select an empty value to clear the selection const schemaNoDefault = { ...schema, default: undefined }; if (value === -1) { throw new Error('Value should not be -1 for anyOf'); } return <SelectWidget {...props} schema={schemaNoDefault} />; } const { node, onChange } = createFormComponent({ schema, uiSchema: { choice: { 'ui:placeholder': 'None' } }, widgets: { SelectWidget: CustomSelectWidget }, formData: { choice: 'first' }, }); const select = node.querySelector('select'); expect(select.value).eql(select.options[1].value); Simulate.change(select, { target: { value: select.options[0].value }, }); expect(select.value).eql(select.options[0].value); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { choice: undefined }, }); }); it('should select the correct field when the form is rendered from existing data', () => { const schema = { type: 'object', properties: { userId: { anyOf: [ { type: 'number', }, { type: 'string', }, ], }, }, }; const { node } = createFormComponent({ schema, formData: { userId: 'foobarbaz', }, }); expect(node.querySelector('select').value).eql('1'); }); it('should select the correct field when the formData property is updated', () => { const schema = { type: 'object', properties: { userId: { anyOf: [ { type: 'number', }, { type: 'string', }, ], }, }, }; const { comp, node } = createFormComponent({ schema, }); expect(node.querySelector('select').value).eql('0'); setProps(comp, { schema, formData: { userId: 'foobarbaz', }, }); expect(node.querySelector('select').value).eql('1'); }); it('should not change the selected option when entering values', () => { const schema = { type: 'object', anyOf: [ { title: 'First method of identification', properties: { firstName: { type: 'string', }, lastName: { type: 'string', }, }, }, { title: 'Second method of identification', properties: { idCode: { type: 'string', }, }, }, ], }; const { node } = createFormComponent({ schema, }); const $select = node.querySelector('select'); expect($select.value).eql('0'); Simulate.change($select, { target: { value: $select.options[1].value }, }); expect($select.value).eql('1'); Simulate.change(node.querySelector('input#root_idCode'), { target: { value: 'Lorem ipsum dolor sit amet' }, }); expect($select.value).eql('1'); }); it('should not change the selected option when entering values and the subschema uses `anyOf`', () => { const schema = { type: 'object', anyOf: [ { title: 'First method of identification', properties: { firstName: { type: 'string', }, lastName: { type: 'string', }, }, }, { title: 'Second method of identification', properties: { idCode: { type: 'string', }, }, anyOf: [ { properties: { foo: { type: 'string', }, }, }, { properties: { bar: { type: 'string', }, }, }, ], }, ], }; const { node } = createFormComponent({ schema, }); const $select = node.querySelector('select'); expect($select.value).eql('0'); Simulate.change($select, { target: { value: $select.options[1].value }, }); expect($select.value).eql('1'); Simulate.change(node.querySelector('input#root_idCode'), { target: { value: 'Lorem ipsum dolor sit amet' }, }); expect($select.value).eql('1'); }); it('should not change the selected option when entering values and the subschema uses `allOf`', () => { const schema = { type: 'object', anyOf: [ { title: 'First method of identification', properties: { firstName: { type: 'string', }, lastName: { type: 'string', }, }, }, { title: 'Second method of identification', properties: { idCode: { type: 'string', }, }, allOf: [ { properties: { foo: { type: 'string', }, }, }, { properties: { bar: { type: 'string', }, }, }, ], }, ], }; const { node } = createFormComponent({ schema, }); const $select = node.querySelector('select'); expect($select.value).eql('0'); Simulate.change($select, { target: { value: $select.options[1].value }, }); expect($select.value).eql('1'); Simulate.change(node.querySelector('input#root_idCode'), { target: { value: 'Lorem ipsum dolor sit amet' }, }); expect($select.value).eql('1'); }); it('should not mutate a schema that contains nested anyOf and allOf', () => { const schema = { type: 'object', anyOf: [ { properties: { foo: { type: 'string' }, }, allOf: [ { properties: { baz: { type: 'string' }, }, }, ], anyOf: [ { properties: { buzz: { type: 'string' }, }, }, ], }, ], }; createFormComponent({ schema, }); expect(schema).to.eql({ type: 'object', anyOf: [ { properties: { foo: { type: 'string' }, }, allOf: [ { properties: { baz: { type: 'string' }, }, }, ], anyOf: [ { properties: { buzz: { type: 'string' }, }, }, ], }, ], }); }); it('should use title from refs schema before using fallback generated value as title', () => { const schema = { definitions: { address: { title: 'Address', type: 'object', properties: { street: { title: 'Street', type: 'string', }, }, }, person: { title: 'Person', type: 'object', properties: { name: { title: 'Name', type: 'string', }, }, }, nested: { $ref: '#/definitions/person', }, }, anyOf: [ { $ref: '#/definitions/address', }, { $ref: '#/definitions/nested', }, ], }; const { node } = createFormComponent({ schema, }); let options = node.querySelectorAll('option'); expect(options[0].firstChild.nodeValue).eql('Address'); expect(options[1].firstChild.nodeValue).eql('Person'); }); it('should collect schema from $ref even when ref is within properties', () => { const schema = { properties: { address: { title: 'Address', type: 'object', properties: { street: { title: 'Street', type: 'string', }, }, }, person: { title: 'Person', type: 'object', properties: { name: { title: 'Name', type: 'string', }, }, }, nested: { $ref: '#/properties/person', }, }, anyOf: [ { $ref: '#/properties/address', }, { $ref: '#/properties/nested', }, ], }; const { node } = createFormComponent({ schema, }); let options = node.querySelectorAll('option'); expect(options[0].firstChild.nodeValue).eql('Address'); expect(options[1].firstChild.nodeValue).eql('Person'); }); it('should select anyOf in additionalProperties with anyOf', () => { const schema = { type: 'object', properties: { testProperty: { description: 'Any key name, fixed set of possible values', type: 'object', minProperties: 1, additionalProperties: { anyOf: [ { title: 'my choice 1', type: 'object', properties: { prop1: { description: 'prop1 description', type: 'string', }, }, required: ['prop1'], additionalProperties: false, }, { title: 'my choice 2', type: 'object', properties: { prop2: { description: 'prop2 description', type: 'string', }, }, required: ['prop2'], additionalProperties: false, }, ], }, }, }, required: ['testProperty'], }; const { node, onChange } = createFormComponent({ schema, formData: { testProperty: { newKey: { prop2: 'foo' } } }, }); const $select = node.querySelector('select#root_testProperty_newKey__anyof_select'); expect($select.value).eql('1'); Simulate.change($select, { target: { value: $select.options[0].value }, }); expect($select.value).eql('0'); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { testProperty: { newKey: { prop1: undefined, prop2: undefined } }, }, }); }); describe('Arrays', () => { it('should correctly render form inputs for anyOf inside array items', () => { const schema = { type: 'object', properties: { items: { type: 'array', items: { type: 'object', anyOf: [ { properties: { foo: { type: 'string', }, }, }, { properties: { bar: { type: 'string', }, }, }, ], }, }, }, }; const { node } = createFormComponent({ schema, }); expect(node.querySelector('.array-item-add button')).not.eql(null); Simulate.click(node.querySelector('.array-item-add button')); expect(node.querySelectorAll('select')).to.have.length.of(1); expect(node.querySelectorAll('input#root_items_0_foo')).to.have.length.of(1); }); it('should not change the selected option when switching order of items for anyOf inside array items', () => { const schema = { type: 'object', properties: { items: { type: 'array', items: { type: 'object', anyOf: [ { properties: { foo: { type: 'string', }, }, }, { properties: { bar: { type: 'string', }, }, }, ], }, }, }, }; const { node } = createFormComponent({ schema, formData: { items: [ {}, { bar: 'defaultbar', }, ], }, }); let selects = node.querySelectorAll('select'); expect(selects[0].value).eql('0'); expect(selects[1].value).eql('1'); const moveUpBtns = node.querySelectorAll('.array-item-move-up'); Simulate.click(moveUpBtns[1]); selects = node.querySelectorAll('select'); expect(selects[0].value).eql('1'); expect(selects[1].value).eql('0'); }); it('should correctly update inputs for anyOf inside array items after being moved down', () => { const schema = { type: 'object', properties: { items: { type: 'array', items: { type: 'object', anyOf: [ { properties: { foo: { type: 'string', }, }, }, { properties: { bar: { type: 'string', }, }, }, ], }, }, }, }; const { node } = createFormComponent({ schema, formData: { items: [{}, {}], }, }); const moveDownBtns = node.querySelectorAll('.array-item-move-down'); Simulate.click(moveDownBtns[0]); const strInputs = node.querySelectorAll('fieldset .field-string input[type=text]'); Simulate.change(strInputs[1], { target: { value: 'bar' } }); expect(strInputs[1].value).eql('bar'); }); it('should correctly set the label of the options', () => { const schema = { type: 'object', anyOf: [ { title: 'Foo', properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, { $ref: '#/definitions/baz', }, ], definitions: { baz: { title: 'Baz', properties: { baz: { type: 'string' }, }, }, }, }; const { node } = createFormComponent({ schema, }); const $select = node.querySelector('select'); expect($select.options[0].text).eql('Foo'); expect($select.options[1].text).eql('Option 2'); expect($select.options[2].text).eql('Baz'); }); it('should correctly set the label of the options, with schema title prefix', () => { const schema = { type: 'object', title: 'Root Title', anyOf: [ { title: 'Foo', properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, { $ref: '#/definitions/baz', }, ], definitions: { baz: { title: 'Baz', properties: { baz: { type: 'string' }, }, }, }, }; const { node } = createFormComponent({ schema, }); const $select = node.querySelector('select'); expect($select.options[0].text).eql('Foo'); expect($select.options[1].text).eql('Root Title option 2'); expect($select.options[2].text).eql('Baz'); }); it('should correctly set the label of the options, with uiSchema title prefix', () => { const schema = { type: 'object', anyOf: [ { title: 'Foo', properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, { $ref: '#/definitions/baz', }, ], definitions: { baz: { title: 'Baz', properties: { baz: { type: 'string' }, }, }, }, }; const { node } = createFormComponent({ schema, uiSchema: { 'ui:title': 'My Title' }, }); const $select = node.querySelector('select'); expect($select.options[0].text).eql('Foo'); expect($select.options[1].text).eql('My Title option 2'); expect($select.options[2].text).eql('Baz'); }); it('should correctly render mixed types for anyOf inside array items', () => { const schema = { type: 'object', properties: { items: { type: 'array', items: { anyOf: [ { type: 'string', }, { type: 'object', properties: { foo: { type: 'integer', }, bar: { type: 'string', }, }, }, ], }, }, }, }; const { node } = createFormComponent({ schema, }); expect(node.querySelector('.array-item-add button')).not.eql(null); Simulate.click(node.querySelector('.array-item-add button')); const $select = node.querySelector('select'); expect($select).not.eql(null); Simulate.change($select, { target: { value: $select.options[1].value }, }); expect(node.querySelectorAll('input#root_items_0_foo')).to.have.length.of(1); expect(node.querySelectorAll('input#root_items_0_bar')).to.have.length.of(1); }); it('should correctly infer the selected option based on value', () => { const schema = { $ref: '#/definitions/any', definitions: { chain: { type: 'object', title: 'Chain', properties: { id: { enum: ['chain'], }, components: { type: 'array', items: { $ref: '#/definitions/any' }, }, }, }, map: { type: 'object', title: 'Map', properties: { id: { enum: ['map'] }, fn: { $ref: '#/definitions/any' }, }, }, to_absolute: { type: 'object', title: 'To Absolute', properties: { id: { enum: ['to_absolute'] }, base_url: { type: 'string' }, }, }, transform: { type: 'object', title: 'Transform', properties: { id: { enum: ['transform'] }, property_key: { type: 'string' }, transformer: { $ref: '#/definitions/any' }, }, }, any: { anyOf: [ { $ref: '#/definitions/chain' }, { $ref: '#/definitions/map' }, { $ref: '#/definitions/to_absolute' }, { $ref: '#/definitions/transform' }, ], }, }, }; const { node } = createFormComponent({ schema, formData: { id: 'chain', components: [ { id: 'map', fn: { id: 'transform', property_key: 'uri', transformer: { id: 'to_absolute', base_url: 'http://localhost', }, }, }, ], }, }); const rootId = node.querySelector('select#root_id'); expect(getSelectedOptionValue(rootId)).eql('chain'); const componentId = node.querySelector('select#root_components_0_id'); expect(getSelectedOptionValue(componentId)).eql('map'); const fnId = node.querySelector('select#root_components_0_fn_id'); expect(getSelectedOptionValue(fnId)).eql('transform'); const transformerId = node.querySelector('select#root_components_0_fn_transformer_id'); expect(getSelectedOptionValue(transformerId)).eql('to_absolute'); }); }); describe('hideError works with anyOf', () => { const schema = { type: 'object', properties: { userId: { anyOf: [ { type: 'number', }, { type: 'string', }, ], }, }, }; function customValidate(formData, errors) { errors.userId.addError('test'); return errors; } it('should show error on options with different types', () => { const { node } = createFormComponent({ schema, customValidate, }); Simulate.change(node.querySelector('input#root_userId'), { target: { value: 12345 }, }); Simulate.submit(node); let inputs = node.querySelectorAll('.form-group.field-error input[type=number]'); expect(inputs[0].id).eql('root_userId'); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); Simulate.change(node.querySelector('input#root_userId'), { target: { value: 'Lorem ipsum dolor sit amet' }, }); Simulate.submit(node); inputs = node.querySelectorAll('.form-group.field-error input[type=text]'); expect(inputs[0].id).eql('root_userId'); }); it('should NOT show error on options with different types when hideError: true', () => { const { node } = createFormComponent({ schema, uiSchema: { 'ui:hideError': true, }, customValidate, }); Simulate.change(node.querySelector('input#root_userId'), { target: { value: 12345 }, }); Simulate.submit(node); let inputs = node.querySelectorAll('.form-group.field-error input[type=number]'); expect(inputs).to.have.length.of(0); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); Simulate.change(node.querySelector('input#root_userId'), { target: { value: 'Lorem ipsum dolor sit amet' }, }); Simulate.submit(node); inputs = node.querySelectorAll('.form-group.field-error input[type=text]'); expect(inputs).to.have.length.of(0); }); }); describe('OpenAPI discriminator support', () => { const schema = { type: 'object', definitions: { Foo: { title: 'Foo', type: 'object', properties: { code: { title: 'Code', default: 'foo_coding', enum: ['foo_coding'], type: 'string' }, }, }, Bar: { title: 'Bar', type: 'object', properties: { code: { title: 'Code', default: 'bar_coding', enum: ['bar_coding'], type: 'string' }, }, }, Baz: { title: 'Baz', type: 'object', properties: { code: { title: 'Code', default: 'baz_coding', enum: ['baz_coding'], type: 'string' }, }, }, }, discriminator: { propertyName: 'code', mapping: { foo_coding: '#/definitions/Foo', bar_coding: '#/definitions/Bar', baz_coding: '#/definitions/Baz', }, }, anyOf: [{ $ref: '#/definitions/Foo' }, { $ref: '#/definitions/Bar' }, { $ref: '#/definitions/Baz' }], }; beforeEach(() => { sandbox = createSandbox(); sandbox.stub(console, 'warn'); }); afterEach(() => { sandbox.restore(); }); it('Selects the first node by default when there is no formData', () => { const { node } = createFormComponent({ schema, }); const select = node.querySelector('select#root__anyof_select'); expect(select.value).eql('0'); }); it('Selects the 3rd node by default when there is formData that points to it', () => { const { node } = createFormComponent({ schema, formData: { code: 'baz_coding' }, }); const select = node.querySelector('select#root__anyof_select'); expect(select.value).eql('2'); }); it('warns when discriminator.propertyName is not a string', () => { const badSchema = { ...schema, discriminator: { propertyName: 5 } }; const { node } = createFormComponent({ schema: badSchema, }); const select = node.querySelector('select#root__anyof_select'); expect(select.value).eql('0'); expect(console.warn.calledWithMatch(/Expecting discriminator to be a string, got "number" instead/)).to.be.true; }); }); describe('Custom Field without ui:fieldReplacesAnyOrOneOf', function () { const schema = { anyOf: [ { type: 'number', }, { type: 'string', }, ], }; const uiSchema = { 'ui:field': () => <div className='custom-field'>Custom field</div>, }; it('should be rendered twice', function () { const { node } = createFormComponent({ schema, uiSchema }); const fields = node.querySelectorAll('.custom-field'); expect(fields).to.have.length.of(2); }); it('should render <select>', function () { const { node } = createFormComponent({ schema, uiSchema }); const selects = node.querySelectorAll('select'); expect(selects).to.have.length.of(1); }); }); describe('Custom Field with ui:fieldReplacesAnyOrOneOf', function () { const schema = { anyOf: [ { type: 'number', }, { type: 'string', }, ], }; const uiSchema = { 'ui:field': () => <div className='custom-field'>Custom field</div>, 'ui:fieldReplacesAnyOrOneOf': true, }; it('should be rendered once', function () { const { node } = createFormComponent({ schema, uiSchema }); const fields = node.querySelectorAll('.custom-field'); expect(fields).to.have.length.of(1); }); it('should not render <select>', function () { const { node } = createFormComponent({ schema, uiSchema }); const selects = node.querySelectorAll('select'); expect(selects).to.have.length.of(0); }); }); }); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/const.test.js���������������������������������������0000664�0000000�0000000�00000002326�14467713645�0024142�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { createFormComponent, createSandbox } from './test_utils'; describe('const', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); it('should render a schema that uses const with a string value', () => { const schema = { type: 'object', properties: { foo: { const: 'bar' }, }, }; const { node } = createFormComponent({ schema, }); expect(node.querySelector('input#root_foo')).not.eql(null); }); it('should render a schema that uses const with a number value', () => { const schema = { type: 'object', properties: { foo: { const: 123 }, }, }; const { node } = createFormComponent({ schema, }); expect(node.querySelector('input#root_foo')).not.eql(null); }); it('should render a schema that uses const with a boolean value', () => { const schema = { type: 'object', properties: { foo: { const: true }, }, }; const { node } = createFormComponent({ schema, }); expect(node.querySelector("input#root_foo[type='checkbox']")).not.eql(null); }); }); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/ifthenelse.test.js����������������������������������0000664�0000000�0000000�00000017147�14467713645�0025151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { createFormComponent, createSandbox } from './test_utils'; describe('conditional items', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); const schema = { type: 'object', properties: { street_address: { type: 'string', }, country: { enum: ['United States of America', 'Canada'], }, }, if: { properties: { country: { const: 'United States of America' } }, }, then: { properties: { zipcode: { type: 'string' } }, }, else: { properties: { postal_code: { type: 'string' } }, }, }; const schemaWithRef = { type: 'object', properties: { country: { enum: ['United States of America', 'Canada'], }, }, if: { properties: { country: { const: 'United States of America', }, }, }, then: { $ref: '#/definitions/us', }, else: { $ref: '#/definitions/other', }, definitions: { us: { properties: { zip_code: { type: 'string', }, }, }, other: { properties: { postal_code: { type: 'string', }, }, }, }, }; it('should render then when condition is true', () => { const formData = { country: 'United States of America', }; const { node } = createFormComponent({ schema, formData, }); expect(node.querySelector('input[label=zipcode]')).not.eql(null); expect(node.querySelector('input[label=postal_code]')).to.eql(null); }); it('should render else when condition is false', () => { const formData = { country: 'France', }; const { node } = createFormComponent({ schema, formData, }); expect(node.querySelector('input[label=zipcode]')).to.eql(null); expect(node.querySelector('input[label=postal_code]')).not.eql(null); }); it('should render control when data has not been filled in', () => { const formData = {}; const { node } = createFormComponent({ schema, formData, }); // An empty formData will make the conditional evaluate to true because no properties are required in the if statement // Please see https://github.com/epoberezkin/ajv/issues/913 expect(node.querySelector('input[label=zipcode]')).not.eql(null); expect(node.querySelector('input[label=postal_code]')).to.eql(null); }); it('should render then when condition is true with reference', () => { const formData = { country: 'United States of America', }; const { node } = createFormComponent({ schema: schemaWithRef, formData, }); expect(node.querySelector('input[label=zip_code]')).not.eql(null); expect(node.querySelector('input[label=postal_code]')).to.eql(null); }); it('should render else when condition is false with reference', () => { const formData = { country: 'France', }; const { node } = createFormComponent({ schema: schemaWithRef, formData, }); expect(node.querySelector('input[label=zip_code]')).to.eql(null); expect(node.querySelector('input[label=postal_code]')).not.eql(null); }); describe('allOf if then else', () => { const schemaWithAllOf = { type: 'object', properties: { street_address: { type: 'string', }, country: { enum: ['United States of America', 'Canada', 'United Kingdom', 'France'], }, }, allOf: [ { if: { properties: { country: { const: 'United States of America' } }, }, then: { properties: { zipcode: { type: 'string' } }, }, }, { if: { properties: { country: { const: 'United Kingdom' } }, }, then: { properties: { postcode: { type: 'string' } }, }, }, { if: { properties: { country: { const: 'France' } }, }, then: { properties: { telephone: { type: 'string' } }, }, }, ], }; it('should render correctly when condition is true in allOf (1)', () => { const formData = { country: 'United States of America', }; const { node } = createFormComponent({ schema: schemaWithAllOf, formData, }); expect(node.querySelector('input[label=zipcode]')).not.eql(null); }); it('should render correctly when condition is false in allOf (1)', () => { const formData = { country: '', }; const { node } = createFormComponent({ schema: schemaWithAllOf, formData, }); expect(node.querySelector('input[label=zipcode]')).to.eql(null); }); it('should render correctly when condition is true in allof (2)', () => { const formData = { country: 'United Kingdom', }; const { node } = createFormComponent({ schema: schemaWithAllOf, formData, }); expect(node.querySelector('input[label=postcode]')).not.eql(null); expect(node.querySelector('input[label=zipcode]')).to.eql(null); expect(node.querySelector('input[label=telephone]')).to.eql(null); }); it('should render correctly when condition is true in allof (3)', () => { const formData = { country: 'France', }; const { node } = createFormComponent({ schema: schemaWithAllOf, formData, }); expect(node.querySelector('input[label=postcode]')).to.eql(null); expect(node.querySelector('input[label=zipcode]')).to.eql(null); expect(node.querySelector('input[label=telephone]')).not.eql(null); }); const schemaWithAllOfRef = { type: 'object', properties: { street_address: { type: 'string', }, country: { enum: ['United States of America', 'Canada', 'United Kingdom', 'France'], }, }, definitions: { unitedkingdom: { properties: { postcode: { type: 'string' } }, }, }, allOf: [ { if: { properties: { country: { const: 'United Kingdom' } }, }, then: { $ref: '#/definitions/unitedkingdom', }, }, ], }; it('should render correctly when condition is true when then contains a reference', () => { const formData = { country: 'United Kingdom', }; const { node } = createFormComponent({ schema: schemaWithAllOfRef, formData, }); expect(node.querySelector('input[label=postcode]')).not.eql(null); }); }); it('handles additionalProperties with if then else', () => { /** * Ensures that fields defined in "then" or "else" (e.g. zipcode) are handled * with regular form fields, not as additional properties */ const formData = { country: 'United States of America', zipcode: '12345', otherKey: 'otherValue', }; const { node } = createFormComponent({ schema: { ...schema, additionalProperties: true, }, formData, }); // The zipcode field exists, but not as an additional property expect(node.querySelector('input[label=zipcode]')).not.eql(null); expect(node.querySelector('div.form-additional input[label=zipcode]')).to.eql(null); // The "otherKey" field exists as an additional property expect(node.querySelector('div.form-additional input[label=otherKey]')).not.eql(null); }); }); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/mocha.opts������������������������������������������0000664�0000000�0000000�00000000017�14467713645�0023471�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--timeout 1000 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/oneOf.test.jsx��������������������������������������0000664�0000000�0000000�00000103623�14467713645�0024254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { Simulate } from 'react-dom/test-utils'; import sinon from 'sinon'; import { createFormComponent, createSandbox, getSelectedOptionValue, setProps } from './test_utils'; import SchemaField from '../src/components/fields/SchemaField'; import SelectWidget from '../src/components/widgets/SelectWidget'; describe('oneOf', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); it('should not render a select element if the oneOf keyword is not present', () => { const schema = { type: 'object', properties: { foo: { type: 'string' }, }, }; const { node } = createFormComponent({ schema, }); expect(node.querySelectorAll('select')).to.have.length.of(0); }); it('should render a select element if the oneOf keyword is present, merges top level required', () => { const schema = { type: 'object', required: ['baz'], properties: { baz: { type: 'number' }, }, oneOf: [ { properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, ], }; const { node } = createFormComponent({ schema, }); console.log(node.innerHTML); expect(node.querySelectorAll('select')).to.have.length.of(1); expect(node.querySelector('select').id).eql('root__oneof_select'); expect(node.querySelectorAll('span.required')).to.have.length.of(1); }); it('should render a select element if the oneOf keyword is present, merges top level and oneOf required', () => { const schema = { type: 'object', required: ['baz'], properties: { baz: { type: 'number' }, }, oneOf: [ { required: ['foo'], properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, ], }; const { node } = createFormComponent({ schema, }); console.log(node.innerHTML); expect(node.querySelectorAll('select')).to.have.length.of(1); expect(node.querySelector('select').id).eql('root__oneof_select'); expect(node.querySelectorAll('span.required')).to.have.length.of(2); }); it('should assign a default value and set defaults on option change', () => { const { node, onChange } = createFormComponent({ schema: { oneOf: [ { type: 'object', properties: { foo: { type: 'string', default: 'defaultfoo' }, }, }, { type: 'object', properties: { foo: { type: 'string', default: 'defaultbar' }, }, }, ], }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { foo: 'defaultfoo' }, }); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'defaultbar' }, }, 'root__oneof_select' ); }); it('should assign a default value and set defaults on option change when using refs', () => { const { node, onChange } = createFormComponent({ schema: { oneOf: [ { type: 'object', properties: { foo: { type: 'string', default: 'defaultfoo' }, }, }, { $ref: '#/definitions/bar' }, ], definitions: { bar: { type: 'object', properties: { foo: { type: 'string', default: 'defaultbar' }, }, }, }, }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { foo: 'defaultfoo' }, }); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'defaultbar' }, }, 'root__oneof_select' ); }); it("should assign a default value and set defaults on option change with 'type': 'object' missing", () => { const { node, onChange } = createFormComponent({ schema: { type: 'object', oneOf: [ { properties: { foo: { type: 'string', default: 'defaultfoo' }, }, }, { properties: { foo: { type: 'string', default: 'defaultbar' }, }, }, ], }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { foo: 'defaultfoo' }, }); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'defaultbar' }, }, 'root__oneof_select' ); }); it('should render a custom widget', () => { const schema = { type: 'object', oneOf: [ { properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, ], }; const widgets = { SelectWidget: () => { return <section id='CustomSelect'>Custom Widget</section>; }, }; const { node } = createFormComponent({ schema, widgets, }); expect(node.querySelector('#CustomSelect')).to.exist; }); it('should change the rendered form when the select value is changed', () => { const schema = { type: 'object', oneOf: [ { properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, ], }; const { node } = createFormComponent({ schema, }); expect(node.querySelectorAll('#root_foo')).to.have.length.of(1); expect(node.querySelectorAll('#root_bar')).to.have.length.of(0); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); expect(node.querySelectorAll('#root_foo')).to.have.length.of(0); expect(node.querySelectorAll('#root_bar')).to.have.length.of(1); }); it('should handle change events', () => { const schema = { type: 'object', oneOf: [ { properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, ], }; const { node, onChange } = createFormComponent({ schema, }); Simulate.change(node.querySelector('input#root_foo'), { target: { value: 'Lorem ipsum dolor sit amet' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 'Lorem ipsum dolor sit amet' }, }, 'root_foo' ); }); it('should clear previous data when changing options', () => { const schema = { type: 'object', properties: { buzz: { type: 'string' }, }, oneOf: [ { properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, ], }; const { node, onChange } = createFormComponent({ schema, }); Simulate.change(node.querySelector('input#root_buzz'), { target: { value: 'Lorem ipsum dolor sit amet' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { buzz: 'Lorem ipsum dolor sit amet', }, }, 'root_buzz' ); Simulate.change(node.querySelector('input#root_foo'), { target: { value: 'Consectetur adipiscing elit' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { buzz: 'Lorem ipsum dolor sit amet', foo: 'Consectetur adipiscing elit', }, }, 'root_foo' ); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { buzz: 'Lorem ipsum dolor sit amet', foo: undefined, }, }); }); it('should support options with different types', () => { const schema = { type: 'object', properties: { userId: { oneOf: [ { type: 'number', }, { type: 'string', }, ], }, }, }; const { node, onChange } = createFormComponent({ schema, }); Simulate.change(node.querySelector('input#root_userId'), { target: { value: 12345 }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { userId: 12345, }, }, 'root_userId' ); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { userId: undefined, }, }, 'root_userId' ); Simulate.change(node.querySelector('input#root_userId'), { target: { value: 'Lorem ipsum dolor sit amet' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { userId: 'Lorem ipsum dolor sit amet', }, }, 'root_userId' ); }); it('should support custom fields', () => { const schema = { type: 'object', properties: { userId: { oneOf: [ { type: 'number', }, { type: 'string', }, ], }, }, }; const CustomField = () => { return <div id='custom-oneof-field' />; }; const { node } = createFormComponent({ schema, fields: { OneOfField: CustomField, }, }); expect(node.querySelectorAll('#custom-oneof-field')).to.have.length(1); }); it('should support custom widget', () => { const schema = { type: 'object', properties: { choice: { oneOf: [ { title: 'first', type: 'string', default: 'first', readOnly: true, }, { title: 'second', type: 'string', default: 'second', readOnly: true, }, ], }, }, }; function CustomSelectWidget(props) { const { schema, value } = props; // Remove the default so that we can select an empty value to clear the selection const schemaNoDefault = { ...schema, default: undefined }; if (value === -1) { throw new Error('Value should not be -1 for oneOf'); } return <SelectWidget {...props} schema={schemaNoDefault} />; } const { node, onChange } = createFormComponent({ schema, uiSchema: { choice: { 'ui:placeholder': 'None' } }, widgets: { SelectWidget: CustomSelectWidget }, formData: { choice: 'first' }, }); const select = node.querySelector('select'); expect(select.value).eql(select.options[1].value); Simulate.change(select, { target: { value: select.options[0].value }, }); expect(select.value).eql(select.options[0].value); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { choice: undefined }, }); }); it('should pass form context to schema field', () => { const schema = { type: 'object', properties: { userId: { oneOf: [ { type: 'number', }, { type: 'string', }, ], }, }, }; const formContext = { root: 'root-id', root_userId: 'userId-id' }; function CustomSchemaField(props) { const { formContext, idSchema } = props; return ( <> <code id={formContext[idSchema.$id]}>Ha</code> <SchemaField {...props} /> </> ); } const { node } = createFormComponent({ schema, formData: { userId: 'foobarbaz' }, formContext, fields: { SchemaField: CustomSchemaField }, }); const codeBlocks = node.querySelectorAll('code'); expect(codeBlocks).to.have.length(3); Object.keys(formContext).forEach((key) => { expect(node.querySelector(`code#${formContext[key]}`)).to.exist; }); }); it('should select the correct field when the form is rendered from existing data', () => { const schema = { type: 'object', properties: { userId: { oneOf: [ { type: 'number', }, { type: 'string', }, ], }, }, }; const { node } = createFormComponent({ schema, formData: { userId: 'foobarbaz', }, }); expect(node.querySelector('select').value).eql('1'); }); it('should select the correct field when the formData property is updated', () => { const schema = { type: 'object', properties: { userId: { oneOf: [ { type: 'number', }, { type: 'string', }, ], }, }, }; const { comp, node } = createFormComponent({ schema, }); expect(node.querySelector('select').value).eql('0'); setProps(comp, { schema, formData: { userId: 'foobarbaz', }, }); expect(node.querySelector('select').value).eql('1'); }); it('should not change the selected option when entering values on a subschema with multiple required options', () => { const schema = { type: 'object', properties: { items: { oneOf: [ { type: 'string', }, { type: 'object', properties: { foo: { type: 'integer', }, bar: { type: 'string', }, }, required: ['foo', 'bar'], }, ], }, }, }; const { node } = createFormComponent({ schema, }); const $select = node.querySelector('select'); expect($select.value).eql('0'); Simulate.change($select, { target: { value: $select.options[1].value }, }); expect($select.value).eql('1'); Simulate.change(node.querySelector('input#root_items_bar'), { target: { value: 'Lorem ipsum dolor sit amet' }, }); expect($select.value).eql('1'); }); it("should empty the form data when switching from an option of type 'object'", () => { const schema = { oneOf: [ { type: 'object', properties: { foo: { type: 'integer', }, bar: { type: 'string', }, }, required: ['foo', 'bar'], }, { type: 'string', }, ], }; const { node } = createFormComponent({ schema, formData: { foo: 1, bar: 'abc', }, }); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); expect($select.value).eql('1'); expect(node.querySelector('input#root').value).eql(''); }); it('should use only the selected option when generating default values', () => { const schema = { type: 'object', oneOf: [ { additionalProperties: false, properties: { lorem: { type: 'object' } }, }, { additionalProperties: false, properties: { ipsum: { type: 'object' } }, }, { additionalProperties: false, properties: { pyot: { type: 'object' } }, }, ], }; const { node, onChange } = createFormComponent({ schema, formData: { lorem: {} }, }); const $select = node.querySelector('select'); Simulate.change($select, { target: { value: $select.options[1].value }, }); expect($select.value).eql('1'); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { ipsum: {}, lorem: undefined }, }, 'root__oneof_select' ); }); it('should select oneOf in additionalProperties with oneOf', () => { const schema = { type: 'object', properties: { testProperty: { description: 'Any key name, fixed set of possible values', type: 'object', minProperties: 1, additionalProperties: { oneOf: [ { title: 'my choice 1', type: 'object', properties: { prop1: { description: 'prop1 description', type: 'string', }, }, required: ['prop1'], additionalProperties: false, }, { title: 'my choice 2', type: 'object', properties: { prop2: { description: 'prop2 description', type: 'string', }, }, required: ['prop2'], additionalProperties: false, }, ], }, }, }, required: ['testProperty'], }; const { node, onChange } = createFormComponent({ schema, formData: { testProperty: { newKey: { prop2: 'foo' } } }, }); const $select = node.querySelector('select#root_testProperty_newKey__oneof_select'); expect($select.value).eql('1'); Simulate.change($select, { target: { value: $select.options[0].value }, }); expect($select.value).eql('0'); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { testProperty: { newKey: { prop1: undefined, prop2: undefined } }, }, }); }); describe('Arrays', () => { it('should correctly render mixed types for oneOf inside array items', () => { const schema = { type: 'object', properties: { items: { type: 'array', items: { oneOf: [ { type: 'string', }, { type: 'object', properties: { foo: { type: 'integer', }, bar: { type: 'string', }, }, }, ], }, }, }, }; const { node } = createFormComponent({ schema, }); expect(node.querySelector('.array-item-add button')).not.eql(null); Simulate.click(node.querySelector('.array-item-add button')); const $select = node.querySelector('select'); expect($select).not.eql(null); Simulate.change($select, { target: { value: $select.options[1].value }, }); expect(node.querySelectorAll('input#root_items_0_foo')).to.have.length.of(1); expect(node.querySelectorAll('input#root_items_0_bar')).to.have.length.of(1); }); }); describe('definitions', () => { it('should handle the $ref keyword correctly', () => { const schema = { definitions: { fieldEither: { type: 'object', oneOf: [ { type: 'object', properties: { value: { type: 'string', }, }, }, { type: 'object', properties: { value: { type: 'array', items: { $ref: '#/definitions/fieldEither', }, }, }, }, ], }, }, type: 'object', properties: { value: { type: 'array', items: { $ref: '#/definitions/fieldEither', }, }, }, }; const { node } = createFormComponent({ schema, }); expect(node.querySelector('.array-item-add button')).not.eql(null); Simulate.click(node.querySelector('.array-item-add button')); const $select = node.querySelector('select'); expect($select).not.eql(null); Simulate.change($select, { target: { value: $select.options[1].value }, }); // This works because the nested "add" button will now be the first to // appear in the dom Simulate.click(node.querySelector('.array-item-add button')); expect($select.value).to.eql($select.options[1].value); }); it('should correctly set the label of the options', () => { const schema = { type: 'object', oneOf: [ { title: 'Foo', properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, { $ref: '#/definitions/baz', }, ], definitions: { baz: { title: 'Baz', properties: { baz: { type: 'string' }, }, }, }, }; const { node } = createFormComponent({ schema, }); const $select = node.querySelector('select'); expect($select.options[0].text).eql('Foo'); expect($select.options[1].text).eql('Option 2'); expect($select.options[2].text).eql('Baz'); }); it('should correctly set the label of the options, with schema title prefix', () => { const schema = { type: 'object', title: 'Root Title', oneOf: [ { title: 'Foo', properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, { $ref: '#/definitions/baz', }, ], definitions: { baz: { title: 'Baz', properties: { baz: { type: 'string' }, }, }, }, }; const { node } = createFormComponent({ schema, }); const $select = node.querySelector('select'); expect($select.options[0].text).eql('Foo'); expect($select.options[1].text).eql('Root Title option 2'); expect($select.options[2].text).eql('Baz'); }); it('should correctly set the label of the options, with uiSchema title prefix', () => { const schema = { type: 'object', oneOf: [ { title: 'Foo', properties: { foo: { type: 'string' }, }, }, { properties: { bar: { type: 'string' }, }, }, { $ref: '#/definitions/baz', }, ], definitions: { baz: { title: 'Baz', properties: { baz: { type: 'string' }, }, }, }, }; const { node } = createFormComponent({ schema, uiSchema: { 'ui:title': 'My Title' }, }); const $select = node.querySelector('select'); expect($select.options[0].text).eql('Foo'); expect($select.options[1].text).eql('My Title option 2'); expect($select.options[2].text).eql('Baz'); }); }); it('should correctly infer the selected option based on value', () => { const schema = { $ref: '#/definitions/any', definitions: { chain: { type: 'object', title: 'Chain', properties: { id: { enum: ['chain'], }, components: { type: 'array', items: { $ref: '#/definitions/any' }, }, }, }, map: { type: 'object', title: 'Map', properties: { id: { enum: ['map'] }, fn: { $ref: '#/definitions/any' }, }, }, to_absolute: { type: 'object', title: 'To Absolute', properties: { id: { enum: ['to_absolute'] }, base_url: { type: 'string' }, }, }, transform: { type: 'object', title: 'Transform', properties: { id: { enum: ['transform'] }, property_key: { type: 'string' }, transformer: { $ref: '#/definitions/any' }, }, }, any: { oneOf: [ { $ref: '#/definitions/chain' }, { $ref: '#/definitions/map' }, { $ref: '#/definitions/to_absolute' }, { $ref: '#/definitions/transform' }, ], }, }, }; const { node } = createFormComponent({ schema, formData: { id: 'chain', components: [ { id: 'map', fn: { id: 'transform', property_key: 'uri', transformer: { id: 'to_absolute', base_url: 'http://localhost', }, }, }, ], }, }); const rootId = node.querySelector('select#root_id'); expect(getSelectedOptionValue(rootId)).eql('chain'); const componentId = node.querySelector('select#root_components_0_id'); expect(getSelectedOptionValue(componentId)).eql('map'); const fnId = node.querySelector('select#root_components_0_fn_id'); expect(getSelectedOptionValue(fnId)).eql('transform'); const transformerId = node.querySelector('select#root_components_0_fn_transformer_id'); expect(getSelectedOptionValue(transformerId)).eql('to_absolute'); }); it('should infer the value of an array with nested oneOfs properly', () => { // From https://github.com/rjsf-team/react-jsonschema-form/issues/2944 const schema = { type: 'array', items: { oneOf: [ { properties: { lorem: { type: 'string', }, }, required: ['lorem'], }, { properties: { ipsum: { oneOf: [ { properties: { day: { type: 'string', }, }, }, { properties: { night: { type: 'string', }, }, }, ], }, }, required: ['ipsum'], }, ], }, }; const { node } = createFormComponent({ schema, formData: [{ ipsum: { night: 'nicht' } }], }); const outerOneOf = node.querySelector('select#root_0__oneof_select'); expect(outerOneOf.value).eql('1'); const innerOneOf = node.querySelector('select#root_0_ipsum__oneof_select'); expect(innerOneOf.value).eql('1'); }); it('should update formData to remove unnecessary data when one of option changes', () => { const schema = { title: 'UFO Sightings', type: 'object', required: ['craftTypes'], properties: { craftTypes: { type: 'array', minItems: 1, uniqueItems: true, title: 'Type of UFO', items: { oneOf: [ { title: 'Cigar Shaped', type: 'object', required: ['daysOfYear'], properties: { name: { type: 'string', title: 'What do you call it?', }, daysOfYear: { type: 'array', minItems: 1, uniqueItems: true, title: 'What days of the year did you see it?', items: { type: 'number', title: 'Day', }, }, }, }, { title: 'Round', type: 'object', required: ['keywords'], properties: { title: { type: 'string', title: 'What should we call it?', }, keywords: { type: 'array', minItems: 1, uniqueItems: true, title: 'List of keywords related to the sighting', items: { type: 'string', title: 'Keyword', }, }, }, }, ], }, }, }, }; const { node, onChange } = createFormComponent({ schema, }); // Added an empty array initially sinon.assert.calledWithMatch(onChange.lastCall, { formData: { craftTypes: [{ daysOfYear: [undefined] }] }, }); const select = node.querySelector('select#root_craftTypes_0__oneof_select'); Simulate.change(select, { target: { value: select.options[1].value }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { craftTypes: [{ keywords: [undefined], title: undefined, daysOfYear: undefined }], }, }); }); describe('OpenAPI discriminator support', () => { const schema = { type: 'object', definitions: { Foo: { title: 'Foo', type: 'object', properties: { code: { title: 'Code', default: 'foo_coding', enum: ['foo_coding'], type: 'string' }, }, }, Bar: { title: 'Bar', type: 'object', properties: { code: { title: 'Code', default: 'bar_coding', enum: ['bar_coding'], type: 'string' }, }, }, Baz: { title: 'Baz', type: 'object', properties: { code: { title: 'Code', default: 'baz_coding', enum: ['baz_coding'], type: 'string' }, }, }, }, discriminator: { propertyName: 'code', mapping: { foo_coding: '#/definitions/Foo', bar_coding: '#/definitions/Bar', baz_coding: '#/definitions/Baz', }, }, oneOf: [{ $ref: '#/definitions/Foo' }, { $ref: '#/definitions/Bar' }, { $ref: '#/definitions/Baz' }], }; beforeEach(() => { sandbox = createSandbox(); sandbox.stub(console, 'warn'); }); afterEach(() => { sandbox.restore(); }); it('Selects the first node by default when there is no formData', () => { const { node } = createFormComponent({ schema, }); const select = node.querySelector('select#root__oneof_select'); expect(select.value).eql('0'); }); it('Selects the 3rd node by default when there is formData that points to it', () => { const { node } = createFormComponent({ schema, formData: { code: 'baz_coding' }, }); const select = node.querySelector('select#root__oneof_select'); expect(select.value).eql('2'); }); it('warns when discriminator.propertyName is not a string', () => { const badSchema = { ...schema, discriminator: { propertyName: 5 } }; const { node } = createFormComponent({ schema: badSchema, }); const select = node.querySelector('select#root__oneof_select'); expect(select.value).eql('0'); expect(console.warn.calledWithMatch(/Expecting discriminator to be a string, got "number" instead/)).to.be.true; }); }); describe('Custom Field without ui:fieldReplacesAnyOrOneOf', function () { const schema = { oneOf: [ { type: 'number', }, { type: 'string', }, ], }; const uiSchema = { 'ui:field': () => <div className='custom-field'>Custom field</div>, }; it('should be rendered twice', function () { const { node } = createFormComponent({ schema, uiSchema }); const fields = node.querySelectorAll('.custom-field'); expect(fields).to.have.length.of(2); }); it('should render <select>', function () { const { node } = createFormComponent({ schema, uiSchema }); const selects = node.querySelectorAll('select'); expect(selects).to.have.length.of(1); }); }); describe('Custom Field with ui:fieldReplacesAnyOrOneOf', function () { const schema = { oneOf: [ { type: 'number', }, { type: 'string', }, ], }; const uiSchema = { 'ui:field': () => <div className='custom-field'>Custom field</div>, 'ui:fieldReplacesAnyOrOneOf': true, }; it('should be rendered once', function () { const { node } = createFormComponent({ schema, uiSchema }); const fields = node.querySelectorAll('.custom-field'); expect(fields).to.have.length.of(1); }); it('should not render <select>', function () { const { node } = createFormComponent({ schema, uiSchema }); const selects = node.querySelectorAll('select'); expect(selects).to.have.length.of(0); }); }); }); �������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/setup-jest-env.js�����������������������������������0000664�0000000�0000000�00000000415�14467713645�0024724�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import html from 'html'; import { setImmediate } from 'timers'; // atob global.atob = require('atob'); // HTML debugging helper global.d = function d(node) { console.log(html.prettyPrint(node.outerHTML, { indent_size: 2 })); }; global.setImmediate = setImmediate; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/test_utils.js���������������������������������������0000664�0000000�0000000�00000004143�14467713645�0024234�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Utils for tests. */ import { createElement } from 'react'; import sinon from 'sinon'; import { renderIntoDocument, act, Simulate } from 'react-dom/test-utils'; import { findDOMNode, render } from 'react-dom'; import validator from '@rjsf/validator-ajv8'; import Form from '../src'; export function createComponent(Component, props) { const onChange = sinon.spy(); const onError = sinon.spy(); const onSubmit = sinon.spy(); const comp = renderIntoDocument(<Component onSubmit={onSubmit} onError={onError} onChange={onChange} {...props} />); const node = findDOMNode(comp); return { comp, node, onChange, onError, onSubmit }; } export function createFormComponent(props) { return createComponent(Form, { validator, ...props }); } export function createSandbox() { const sandbox = sinon.createSandbox(); return sandbox; } export function setProps(comp, newProps) { const node = findDOMNode(comp); render(createElement(comp.constructor, newProps), node.parentNode); } /* Run a group of tests with different combinations of omitExtraData and liveOmit as form props. */ export function describeRepeated(title, fn) { const formExtraPropsList = [ { omitExtraData: false }, { omitExtraData: true }, { omitExtraData: true, liveOmit: true }, ]; for (let formExtraProps of formExtraPropsList) { const createFormComponentFn = (props) => createFormComponent({ ...props, ...formExtraProps }); describe(title + ' ' + JSON.stringify(formExtraProps), () => fn(createFormComponentFn)); } } export function submitForm(node) { act(() => { Simulate.submit(node); }); } export function getSelectedOptionValue(selectNode) { if (selectNode.type !== 'select-one') { throw new Error(`invalid node provided, expected select got ${selectNode.type}`); } const value = selectNode.value; const options = [...selectNode.options]; const selectedOptions = options .filter((option) => (Array.isArray(value) ? value.includes(option.value) : value === option.value)) .map((option) => option.text); if (!Array.isArray(value)) { return selectedOptions[0]; } return selectedOptions; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/uiSchema.test.jsx�����������������������������������0000664�0000000�0000000�00000204001�14467713645�0024734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import sinon from 'sinon'; import { render } from 'react-dom'; import { Simulate } from 'react-dom/test-utils'; import validator from '@rjsf/validator-ajv8'; import SelectWidget from '../src/components/widgets/SelectWidget'; import RadioWidget from '../src/components/widgets/RadioWidget'; import { createFormComponent, createSandbox, submitForm } from './test_utils'; import Form from '../src'; describe('uiSchema', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('custom classNames', () => { const schema = { type: 'object', properties: { foo: { type: 'string', }, bar: { type: 'string', }, baz: { type: 'string', }, }, }; const uiSchema = { foo: { 'ui:classNames': 'class-for-foo', }, bar: { 'ui:options': { classNames: 'class-for-bar another-for-bar', }, }, baz: { classNames: 'class-for-baz', }, }; it('should apply custom class names to target widgets', () => { sandbox.stub(console, 'warn'); const { node } = createFormComponent({ schema, uiSchema }); const [foo, bar, baz] = node.querySelectorAll('.field-string'); expect(foo.classList.contains('class-for-foo')).eql(true); expect(bar.classList.contains('class-for-bar')).eql(true); expect(bar.classList.contains('another-for-bar')).eql(true); expect(baz.classList.contains('class-for-baz')).eql(true); expect(console.warn.calledWithMatch(/'uiSchema.classNames' is deprecated/)).to.be.true; }); }); describe('custom style', () => { const schema = { type: 'object', properties: { foo: { type: 'string', }, bar: { type: 'string', }, }, }; const uiSchema = { foo: { 'ui:style': { paddingRight: '1em', }, }, bar: { 'ui:style': { paddingLeft: '1.5em', color: 'orange', }, }, }; it('should apply custom style to target widgets', () => { const { node } = createFormComponent({ schema, uiSchema }); const [foo, bar] = node.querySelectorAll('.field-string'); expect(foo.style.paddingRight).eql('1em'); expect(bar.style.paddingLeft).eql('1.5em'); expect(bar.style.color).eql('orange'); }); }); describe('custom widget', () => { describe('root widget', () => { const schema = { type: 'string', }; const uiSchema = { 'ui:widget': (props) => { return ( <input type='text' className='custom' value={props.value} defaultValue={props.defaultValue} required={props.required} onChange={(event) => props.onChange(event.target.value)} /> ); }, }; it('should render a root custom widget', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('.custom')).to.have.length.of(1); }); }); describe('custom options', () => { let widget, widgets, schema, uiSchema; beforeEach(() => { sandbox.stub(console, 'error'); widget = ({ label, options }) => <div id={label} style={options} />; widget.defaultProps = { options: { background: 'yellow', color: 'green', }, }; widgets = { widget, }; // all fields in one schema to catch errors where options passed to one instance // of a widget are persistent across all instances schema = { type: 'object', properties: { funcAll: { type: 'string', }, funcNone: { type: 'string', }, stringAll: { type: 'string', }, stringNone: { type: 'string', }, stringTel: { type: 'string', }, }, }; uiSchema = { // pass widget as function funcAll: { 'ui:widget': widget, 'ui:options': { margin: '7px', background: 'purple', }, 'ui:padding': '42px', }, funcNone: { 'ui:widget': widget, }, // pass widget as string stringAll: { 'ui:widget': 'widget', 'ui:options': { margin: '19px', background: 'blue', }, 'ui:padding': '41px', }, stringNone: { 'ui:widget': 'widget', }, stringTel: { 'ui:options': { inputType: 'tel', }, }, }; }); it('should log error when unsupported ui:widget: {component, options} api is used', () => { createFormComponent({ schema: { type: 'string', }, uiSchema: { 'ui:widget': { component: 'widget', }, }, widgets, }); expect(console.error.calledWithMatch(/ui:widget object is no longer supported/)).to.be.true; }); it('should cache MergedWidget instance', () => { expect(widget.MergedWidget).not.to.be.ok; createFormComponent({ schema: { type: 'string', }, uiSchema: { 'ui:widget': 'widget', }, widgets, }); const cached = widget.MergedWidget; expect(cached).to.be.ok; createFormComponent({ schema: { type: 'string', }, uiSchema: { 'ui:widget': 'widget', }, widgets, }); expect(widget.MergedWidget).to.equal(cached); }); it('should render merged ui:widget options for widget referenced as function', () => { const { node } = createFormComponent({ schema, uiSchema, widgets, }); const widget = node.querySelector('#funcAll'); expect(widget.style.background).to.equal('purple'); expect(widget.style.color).to.equal('green'); expect(widget.style.margin).to.equal('7px'); expect(widget.style.padding).to.equal('42px'); }); it('should render ui:widget default options for widget referenced as function', () => { const { node } = createFormComponent({ schema, uiSchema, widgets, }); const widget = node.querySelector('#funcNone'); expect(widget.style.background).to.equal('yellow'); expect(widget.style.color).to.equal('green'); expect(widget.style.margin).to.equal(''); expect(widget.style.padding).to.equal(''); }); it('should render merged ui:widget options for widget referenced as string', () => { const { node } = createFormComponent({ schema, uiSchema, widgets, }); const widget = node.querySelector('#stringAll'); expect(widget.style.background).to.equal('blue'); expect(widget.style.color).to.equal('green'); expect(widget.style.margin).to.equal('19px'); expect(widget.style.padding).to.equal('41px'); }); it('should render ui:widget default options for widget referenced as string', () => { const { node } = createFormComponent({ schema, uiSchema, widgets, }); const widget = node.querySelector('#stringNone'); expect(widget.style.background).to.equal('yellow'); expect(widget.style.color).to.equal('green'); expect(widget.style.margin).to.equal(''); expect(widget.style.padding).to.equal(''); }); it('should ui:option inputType for html5 input types', () => { const { node } = createFormComponent({ schema, uiSchema, widgets, }); const widget = node.querySelector("input[type='tel']"); expect(widget).to.not.be.null; }); }); describe('nested widget', () => { const schema = { type: 'object', properties: { field: { type: 'string', }, }, }; const uiSchema = { field: { 'ui:widget': 'custom', }, }; const CustomWidget = (props) => { return ( <input type='text' className='custom' value={props.value} defaultValue={props.defaultValue} required={props.required} onChange={(event) => props.onChange(event.target.value)} /> ); }; const widgets = { custom: CustomWidget, }; it('should render a nested custom widget', () => { const { node } = createFormComponent({ schema, uiSchema, widgets, }); expect(node.querySelectorAll('.custom')).to.have.length.of(1); }); }); describe('options', () => { const schema = { type: 'object', properties: { field: { type: 'string', }, }, }; const CustomWidget = (props) => { const { value, options } = props; return <input type='text' className={options.className} value={value} />; }; describe('direct reference', () => { const uiSchema = { field: { 'ui:widget': CustomWidget, 'ui:options': { className: 'custom', }, }, }; it('should render a custom widget with options', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('.custom')).to.have.length.of(1); }); }); describe('string reference', () => { const uiSchema = { field: { 'ui:widget': 'custom', 'ui:options': { className: 'custom', }, }, }; const widgets = { custom: CustomWidget, }; it('should render a custom widget with options', () => { const { node } = createFormComponent({ schema, uiSchema, widgets, }); expect(node.querySelectorAll('.custom')).to.have.length.of(1); }); }); }); describe('enum fields native options', () => { const schema = { type: 'object', properties: { field: { type: 'string', enum: ['foo', 'bar'], }, }, }; const CustomWidget = (props) => { const { options } = props; const { enumOptions, className } = options; return ( <select className={className}> {enumOptions.map(({ value }, i) => ( <option key={i}>{value}</option> ))} </select> ); }; const uiSchema = { field: { 'ui:widget': CustomWidget, 'ui:options': { className: 'custom', }, }, }; it('should merge enumOptions with custom options', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('.custom option')).to.have.length.of(2); }); }); describe('enum fields disabled options', () => { const schema = { type: 'object', properties: { field: { type: 'string', enum: ['foo', 'bar'], }, }, }; const uiSchema = { field: { 'ui:widget': SelectWidget, 'ui:options': { className: 'custom', }, 'ui:enumDisabled': ['foo'], }, }; it('should have atleast one option disabled', () => { const { node } = createFormComponent({ schema, uiSchema }); const disabledOptionsLen = uiSchema.field['ui:enumDisabled'].length; expect(node.querySelectorAll('option:disabled')).to.have.length.of(disabledOptionsLen); expect(node.querySelectorAll('option:enabled')).to.have.length.of( // Two options, one disabled, plus the placeholder 2 - disabledOptionsLen + 1 ); }); }); describe('enum fields disabled radio options', () => { const schema = { type: 'object', properties: { field: { type: 'string', enum: ['foo', 'bar'], }, }, }; const uiSchema = { field: { 'ui:widget': RadioWidget, 'ui:options': { className: 'custom', }, 'ui:enumDisabled': ['foo'], }, }; it('should have atleast one radio option disabled', () => { const { node } = createFormComponent({ schema, uiSchema }); const disabledOptionsLen = uiSchema.field['ui:enumDisabled'].length; expect(node.querySelectorAll('input:disabled')).to.have.length.of(disabledOptionsLen); expect(node.querySelectorAll('input:enabled')).to.have.length.of( // Two options, one disabled, plus the placeholder 2 - disabledOptionsLen ); }); }); }); describe('ui:help', () => { it('should render the provided help text', () => { const schema = { type: 'string', }; const uiSchema = { 'ui:help': 'plop', }; const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelector('p.help-block').textContent).eql('plop'); }); }); describe('ui:title', () => { it('should render the provided title text', () => { const schema = { type: 'string', }; const uiSchema = { 'ui:title': 'plop', }; const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelector('label.control-label').textContent).eql('plop'); }); }); describe('ui:description', () => { it('should render the provided description text', () => { const schema = { type: 'string', }; const uiSchema = { 'ui:description': 'plop', }; const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelector('p.field-description').textContent).eql('plop'); }); }); it('should accept a react element as help', () => { const schema = { type: 'string', }; const uiSchema = { 'ui:help': <b>plop</b>, }; const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelector('div.help-block').textContent).eql('plop'); }); describe('ui:focus', () => { const shouldFocus = (schema, uiSchema, selector = 'input', formData) => { const props = { validator, schema, uiSchema, }; if (typeof formData !== 'undefined') { props.formData = formData; } // activeElement only works correctly in jsdom if // the dom tree is connected to the document root. // https://github.com/jsdom/jsdom/issues/2723#issuecomment-664476384 const domNode = document.createElement('div'); document.body.appendChild(domNode); render(<Form {...props} />, domNode); expect(domNode.querySelector(selector)).eql(document.activeElement); document.body.removeChild(domNode); }; describe('number', () => { it('should focus on integer input', () => { shouldFocus( { type: 'integer', }, { 'ui:autofocus': true } ); }); it('should focus on integer input, updown widget', () => { shouldFocus( { type: 'integer', }, { 'ui:widget': 'updown', 'ui:autofocus': true, } ); }); it('should focus on integer input, range widget', () => { shouldFocus( { type: 'integer', }, { 'ui:widget': 'range', 'ui:autofocus': true, } ); }); it('should focus on integer enum input', () => { shouldFocus( { type: 'integer', enum: [1, 2, 3], }, { 'ui:autofocus': true, }, 'select' ); }); }); describe('string', () => { it('should focus on text input', () => { shouldFocus( { type: 'string', }, { 'ui:autofocus': true } ); }); it('should focus on textarea', () => { shouldFocus( { type: 'string', }, { 'ui:widget': 'textarea', 'ui:autofocus': true, }, 'textarea' ); }); it('should focus on password input', () => { shouldFocus( { type: 'string', }, { 'ui:widget': 'password', 'ui:autofocus': true, } ); }); it('should focus on color input', () => { shouldFocus( { type: 'string', }, { 'ui:widget': 'color', 'ui:autofocus': true, } ); }); it('should focus on email input', () => { shouldFocus( { type: 'string', format: 'email', }, { 'ui:autofocus': true } ); }); it('should focus on uri input', () => { shouldFocus( { type: 'string', format: 'uri', }, { 'ui:autofocus': true } ); }); it('should focus on data-url input', () => { shouldFocus( { type: 'string', format: 'data-url', }, { 'ui:autofocus': true } ); }); }); describe('object', () => { it('should focus on date input', () => { shouldFocus( { type: 'string', format: 'date', }, { 'ui:autofocus': true } ); }); it('should focus on date-time input', () => { shouldFocus( { type: 'string', format: 'date-time', }, { 'ui:autofocus': true } ); }); it('should focus on alt-date input', () => { shouldFocus( { type: 'string', format: 'date', }, { 'ui:widget': 'alt-date', 'ui:autofocus': true, }, 'select' ); }); it('should focus on alt-date-time input', () => { shouldFocus( { type: 'string', format: 'date-time', }, { 'ui:widget': 'alt-datetime', 'ui:autofocus': true, }, 'select' ); }); }); describe('array', () => { it('should focus on multiple files input', () => { shouldFocus( { type: 'array', items: { type: 'string', format: 'data-url', }, }, { 'ui:autofocus': true } ); }); it('should focus on first item of a list of strings', () => { shouldFocus( { type: 'array', items: { type: 'string', default: 'foo', }, }, { 'ui:autofocus': true, }, 'input', ['foo', 'bar'] ); }); it('should focus on first item of a multiple choices list', () => { shouldFocus( { type: 'array', items: { type: 'string', enum: ['foo', 'bar'], }, uniqueItems: true, }, { 'ui:widget': 'checkboxes', 'ui:autofocus': true, }, 'input', ['bar'] ); }); }); describe('boolean', () => { it('should focus on checkbox input', () => { shouldFocus( { type: 'boolean', }, { 'ui:autofocus': true } ); }); it('should focus on radio input', () => { shouldFocus( { type: 'boolean', }, { 'ui:widget': 'radio', 'ui:autofocus': true, } ); }); it('should focus on select input', () => { shouldFocus( { type: 'boolean', }, { 'ui:widget': 'select', 'ui:autofocus': true, }, 'select' ); }); }); }); describe('string', () => { const schema = { type: 'object', properties: { foo: { type: 'string', }, }, }; describe('file', () => { const uiSchema = { foo: { 'ui:widget': 'file', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('input[type=file]')).to.have.length.of(1); }); }); describe('textarea', () => { const uiSchema = { foo: { 'ui:widget': 'textarea', 'ui:placeholder': 'sample', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('textarea')).to.have.length.of(1); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: 'a', }, }); expect(node.querySelector('textarea').value).eql('a'); }); it('should call onChange handler when text is updated', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: 'a', }, }); Simulate.change(node.querySelector('textarea'), { target: { value: 'b', }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { foo: 'b' }, }); }); it('should set a placeholder value', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelector('textarea').placeholder).eql('sample'); }); }); describe('password', () => { const uiSchema = { foo: { 'ui:widget': 'password', 'ui:placeholder': 'sample', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=password]')).to.have.length.of(1); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: 'a', }, }); expect(node.querySelector('[type=password]').value).eql('a'); }); it('should call onChange handler when text is updated is checked', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: 'a', }, }); Simulate.change(node.querySelector('[type=password]'), { target: { value: 'b', }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { foo: 'b' }, }); }); it('should set a placeholder value', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelector('[type=password]').placeholder).eql('sample'); }); }); describe('color', () => { const uiSchema = { foo: { 'ui:widget': 'color', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=color]')).to.have.length.of(1); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: '#151ce6', }, }); expect(node.querySelector('[type=color]').value).eql('#151ce6'); }); it('should call onChange handler when text is updated', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: '#151ce6', }, }); Simulate.change(node.querySelector('[type=color]'), { target: { value: '#001122', }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { foo: '#001122' }, }); }); }); describe('hidden', () => { const uiSchema = { foo: { 'ui:widget': 'hidden', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=hidden]')).to.have.length.of(1); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: 'a', }, }); expect(node.querySelector('[type=hidden]').value).eql('a'); }); it('should map widget value to a typed event property', () => { const { node, onSubmit } = createFormComponent({ schema, uiSchema, formData: { foo: 'a', }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { foo: 'a' }, }); }); }); }); describe('string (enum)', () => { const schema = { type: 'object', properties: { foo: { type: 'string', enum: ['a', 'b'], }, }, }; describe('radio', () => { const uiSchema = { foo: { 'ui:widget': 'radio', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=radio]')).to.have.length.of(2); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: 'b', }, }); expect(node.querySelectorAll('[type=radio]')[1].checked).eql(true); }); it('should call onChange handler when value is updated', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: 'a', }, }); Simulate.change(node.querySelectorAll('[type=radio]')[1], { target: { checked: true, }, }); sinon.assert.calledWithMatch(onChange.lastCall, { formData: { foo: 'b' }, }); }); }); }); describe('number', () => { const schema = { type: 'object', properties: { foo: { type: 'number', multipleOf: 1, minimum: 10, maximum: 100, }, }, }; describe('updown', () => { const uiSchema = { foo: { 'ui:widget': 'updown', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=number]')).to.have.length.of(1); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: 3.14, }, }); expect(node.querySelector('[type=number]').value).eql('3.14'); }); it('should call onChange handler when value is updated', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: 3.14, }, }); Simulate.change(node.querySelector('[type=number]'), { target: { value: '6.28', }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 6.28 }, }, 'root_foo' ); }); describe('Constraint attributes', () => { let input; beforeEach(() => { const { node } = createFormComponent({ schema, uiSchema }); input = node.querySelector('[type=number]'); }); it('should support the minimum constraint', () => { expect(input.getAttribute('min')).eql('10'); }); it('should support maximum constraint', () => { expect(input.getAttribute('max')).eql('100'); }); it("should support '0' as minimum and maximum constraints", () => { const schema = { type: 'number', minimum: 0, maximum: 0, }; const uiSchema = { 'ui:widget': 'updown', }; const { node } = createFormComponent({ schema, uiSchema }); input = node.querySelector('[type=number]'); expect(input.getAttribute('min')).eql('0'); expect(input.getAttribute('max')).eql('0'); }); it('should support the multipleOf constraint', () => { expect(input.getAttribute('step')).eql('1'); }); }); }); describe('range', () => { const uiSchema = { foo: { 'ui:widget': 'range', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=range]')).to.have.length.of(1); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: 13.14, }, }); expect(node.querySelector('[type=range]').value).eql('13.14'); }); it('should call onChange handler when value is updated', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: 3.14, }, }); Simulate.change(node.querySelector('[type=range]'), { target: { value: '6.28', }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 6.28 }, }, 'root_foo' ); }); describe('Constraint attributes', () => { let input; beforeEach(() => { const { node } = createFormComponent({ schema, uiSchema }); input = node.querySelector('[type=range]'); }); it('should support the minimum constraint', () => { expect(input.getAttribute('min')).eql('10'); }); it('should support maximum constraint', () => { expect(input.getAttribute('max')).eql('100'); }); it("should support '0' as minimum and maximum constraints", () => { const schema = { type: 'number', minimum: 0, maximum: 0, }; const uiSchema = { 'ui:widget': 'range', }; const { node } = createFormComponent({ schema, uiSchema }); input = node.querySelector('[type=range]'); expect(input.getAttribute('min')).eql('0'); expect(input.getAttribute('max')).eql('0'); }); it('should support the multipleOf constraint', () => { expect(input.getAttribute('step')).eql('1'); }); }); }); describe('radio', () => { const schema = { type: 'object', properties: { foo: { type: 'number', enum: [3.14159, 2.718, 1.4142], }, }, }; const uiSchema = { foo: { 'ui:widget': 'radio', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=radio]')).to.have.length.of(3); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: 2.718, }, }); expect(node.querySelectorAll('[type=radio]')[1].checked).eql(true); }); it('should call onChange handler when value is updated', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: 1.4142, }, }); Simulate.change(node.querySelectorAll('[type=radio]')[2], { target: { checked: true, }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 1.4142 }, }, 'root_foo' ); }); }); describe('hidden', () => { const uiSchema = { foo: { 'ui:widget': 'hidden', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=hidden]')).to.have.length.of(1); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: 42, }, }); expect(node.querySelector('[type=hidden]').value).eql('42'); }); it('should map widget value to a typed event property', () => { const { node, onSubmit } = createFormComponent({ schema, uiSchema, formData: { foo: 42, }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { foo: 42 }, }); }); }); }); describe('integer', () => { const schema = { type: 'object', properties: { foo: { type: 'integer', }, }, }; describe('updown', () => { const uiSchema = { foo: { 'ui:widget': 'updown', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=number]')).to.have.length.of(1); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: 3, }, }); expect(node.querySelector('[type=number]').value).eql('3'); }); it('should call onChange handler when value is updated', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: 3, }, }); Simulate.change(node.querySelector('[type=number]'), { target: { value: '6', }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 6 }, }, 'root_foo' ); }); }); describe('range', () => { const uiSchema = { foo: { 'ui:widget': 'range', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=range]')).to.have.length.of(1); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: 3, }, }); expect(node.querySelector('[type=range]').value).eql('3'); }); it('should call onChange handler when value is updated', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: 3, }, }); Simulate.change(node.querySelector('[type=range]'), { target: { value: '6', }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 6 }, }, 'root_foo' ); }); }); describe('radio', () => { const schema = { type: 'object', properties: { foo: { type: 'integer', enum: [1, 2], }, }, }; const uiSchema = { foo: { 'ui:widget': 'radio', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=radio]')).to.have.length.of(2); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: 2, }, }); expect(node.querySelectorAll('[type=radio]')[1].checked).eql(true); }); it('should call onChange handler when value is updated', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: 1, }, }); Simulate.change(node.querySelectorAll('[type=radio]')[1], { target: { checked: true, }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: 2 }, }, 'root_foo' ); }); }); describe('hidden', () => { const uiSchema = { foo: { 'ui:widget': 'hidden', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=hidden]')).to.have.length.of(1); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: 42, }, }); expect(node.querySelector('[type=hidden]').value).eql('42'); }); it('should map widget value to a typed event property', () => { const { node, onSubmit } = createFormComponent({ schema, uiSchema, formData: { foo: 42, }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { foo: 42 }, }); }); }); }); describe('boolean', () => { const schema = { type: 'object', properties: { foo: { type: 'boolean', }, }, }; describe('radio', () => { const uiSchema = { foo: { 'ui:widget': 'radio', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=radio]')).to.have.length.of(2); expect(node.querySelectorAll('[type=radio]')[0]).not.eql(null); expect(node.querySelectorAll('[type=radio]')[1]).not.eql(null); }); it('should render boolean option labels', () => { const { node } = createFormComponent({ schema, uiSchema }); const labels = [].map.call(node.querySelectorAll('.field-radio-group label'), (node) => node.textContent); expect(labels).eql(['Yes', 'No']); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: false, }, }); expect(node.querySelectorAll('[type=radio]')[1].checked).eql(true); }); it('should call onChange handler when false is checked', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: true, }, }); Simulate.change(node.querySelectorAll('[type=radio]')[1], { target: { checked: true, }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: false }, }, 'root_foo' ); }); it('should call onChange handler when true is checked', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: false, }, }); Simulate.change(node.querySelectorAll('[type=radio]')[0], { target: { checked: true, }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: true }, }, 'root_foo' ); }); }); describe('select', () => { const uiSchema = { foo: { 'ui:widget': 'select', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('select option')).to.have.length.of(3); }); it('should render boolean option labels', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('option')[1].textContent).eql('Yes'); expect(node.querySelectorAll('option')[2].textContent).eql('No'); }); it('should call onChange handler when true is selected', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: false, }, }); Simulate.change(node.querySelector('select'), { // DOM option change events always return strings target: { value: 0, // use index }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: true }, }, 'root_foo' ); }); it('should call onChange handler when false is selected', () => { const { node, onChange } = createFormComponent({ schema, uiSchema, formData: { foo: false, }, }); Simulate.change(node.querySelector('select'), { target: { value: 1, // use index }, }); sinon.assert.calledWithMatch( onChange.lastCall, { formData: { foo: false }, }, 'root_foo' ); }); }); describe('hidden', () => { const uiSchema = { foo: { 'ui:widget': 'hidden', }, }; it('should accept a uiSchema object', () => { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelectorAll('[type=hidden]')).to.have.length.of(1); }); it('should support formData', () => { const { node } = createFormComponent({ schema, uiSchema, formData: { foo: true, }, }); expect(node.querySelector('[type=hidden]').value).eql('true'); }); it('should map widget value to a typed event property', () => { const { node, onSubmit } = createFormComponent({ schema, uiSchema, formData: { foo: true, }, }); submitForm(node); sinon.assert.calledWithMatch(onSubmit.lastCall, { formData: { foo: true }, }); }); }); }); describe('custom root field id', () => { it('should use a custom root field id for objects', () => { const schema = { type: 'object', properties: { foo: { type: 'string', }, bar: { type: 'string', }, }, }; const uiSchema = { 'ui:rootFieldId': 'myform', }; const { node } = createFormComponent({ schema, uiSchema }); const ids = [].map.call(node.querySelectorAll('input[type=text]'), (node) => node.id); expect(ids).eql(['myform_foo', 'myform_bar']); }); it('should use a custom root field id for arrays', () => { const schema = { type: 'array', items: { type: 'string', }, }; const uiSchema = { 'ui:rootFieldId': 'myform', }; const { node } = createFormComponent({ schema, uiSchema, formData: ['foo', 'bar'], }); const ids = [].map.call(node.querySelectorAll('input[type=text]'), (node) => node.id); expect(ids).eql(['myform_0', 'myform_1']); }); it('should use a custom root field id for array of objects', () => { const schema = { type: 'array', items: { type: 'object', properties: { foo: { type: 'string', }, bar: { type: 'string', }, }, }, }; const uiSchema = { 'ui:rootFieldId': 'myform', }; const { node } = createFormComponent({ schema, uiSchema, formData: [ { foo: 'foo1', bar: 'bar1', }, { foo: 'foo2', bar: 'bar2', }, ], }); const ids = [].map.call(node.querySelectorAll('input[type=text]'), (node) => node.id); expect(ids).eql(['myform_0_foo', 'myform_0_bar', 'myform_1_foo', 'myform_1_bar']); }); }); describe('Disabled', () => { describe('Fields', () => { describe('ArrayField', () => { let node; beforeEach(() => { const schema = { type: 'array', items: { type: 'string', }, }; const uiSchema = { 'ui:disabled': true, }; const formData = ['a', 'b']; let rendered = createFormComponent({ schema, uiSchema, formData, }); node = rendered.node; }); it('should disable an ArrayField', () => { const disabled = [].map.call(node.querySelectorAll('[type=text]'), (node) => node.disabled); expect(disabled).eql([true, true]); }); it('should disable the Add button', () => { expect(node.querySelector('.array-item-add button').disabled).eql(true); }); it('should disable the Delete button', () => { expect(node.querySelector('.array-item-remove').disabled).eql(true); }); }); describe('ObjectField', () => { let node; beforeEach(() => { const schema = { type: 'object', properties: { foo: { type: 'string', }, bar: { type: 'string', }, }, }; const uiSchema = { 'ui:disabled': true, }; let rendered = createFormComponent({ schema, uiSchema }); node = rendered.node; }); it('should disable an ObjectField', () => { const disabled = [].map.call(node.querySelectorAll('[type=text]'), (node) => node.disabled); expect(disabled).eql([true, true]); }); }); }); describe('Widgets', () => { function shouldBeDisabled(selector, schema, uiSchema) { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelector(selector).disabled).eql(true); } it('should disable a text widget', () => { shouldBeDisabled( 'input[type=text]', { type: 'string', }, { 'ui:disabled': true } ); }); it('should disabled a file widget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'data-url', }, uiSchema: { 'ui:disabled': true, }, }); expect(node.querySelector('input[type=file]').hasAttribute('disabled')).eql(true); }); it('should disable a textarea widget', () => { shouldBeDisabled( 'textarea', { type: 'string', }, { 'ui:disabled': true, 'ui:widget': 'textarea', } ); }); it('should disable a number text widget', () => { shouldBeDisabled( 'input[type=number]', { type: 'number', }, { 'ui:disabled': true } ); }); it('should disable a number widget', () => { shouldBeDisabled( 'input[type=number]', { type: 'number', }, { 'ui:disabled': true, 'ui:widget': 'updown', } ); }); it('should disable a range widget', () => { shouldBeDisabled( 'input[type=range]', { type: 'number', }, { 'ui:disabled': true, 'ui:widget': 'range', } ); }); it('should disable a select widget', () => { shouldBeDisabled( 'select', { type: 'string', enum: ['a', 'b'], }, { 'ui:disabled': true } ); }); it('should disable a checkbox widget', () => { shouldBeDisabled( 'input[type=checkbox]', { type: 'boolean', }, { 'ui:disabled': true } ); }); it('should disable a radio widget', () => { shouldBeDisabled( 'input[type=radio]', { type: 'boolean', }, { 'ui:disabled': true, 'ui:widget': 'radio', } ); }); it('should disable a color widget', () => { shouldBeDisabled( 'input[type=color]', { type: 'string', format: 'color', }, { 'ui:disabled': true } ); }); it('should disable a password widget', () => { shouldBeDisabled( 'input[type=password]', { type: 'string', }, { 'ui:disabled': true, 'ui:widget': 'password', } ); }); it('should disable an email widget', () => { shouldBeDisabled( 'input[type=email]', { type: 'string', format: 'email', }, { 'ui:disabled': true } ); }); it('should disable a date widget', () => { shouldBeDisabled( 'input[type=date]', { type: 'string', format: 'date', }, { 'ui:disabled': true } ); }); it('should disable a datetime widget', () => { shouldBeDisabled( 'input[type=datetime-local]', { type: 'string', format: 'date-time', }, { 'ui:disabled': true } ); }); it('should disable an alternative date widget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema: { 'ui:disabled': true, 'ui:widget': 'alt-date', }, }); const disabled = [].map.call(node.querySelectorAll('select'), (node) => node.disabled); expect(disabled).eql([true, true, true]); }); it('should disable an alternative datetime widget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, uiSchema: { 'ui:disabled': true, 'ui:widget': 'alt-datetime', }, }); const disabled = [].map.call(node.querySelectorAll('select'), (node) => node.disabled); expect(disabled).eql([true, true, true, true, true, true]); }); }); }); describe('Readonly', () => { describe('Fields', () => { describe('ArrayField', () => { let node; beforeEach(() => { const schema = { type: 'array', items: { type: 'string', }, }; const uiSchema = { 'ui:readonly': true, }; const formData = ['a', 'b']; let rendered = createFormComponent({ schema, uiSchema, formData, }); node = rendered.node; }); it('should mark as readonly an ArrayField', () => { const disabled = [].map.call(node.querySelectorAll('[type=text]'), (node) => node.hasAttribute('readonly')); expect(disabled).eql([true, true]); }); it('should disable the Add button', () => { expect(node.querySelector('.array-item-add button').disabled).eql(true); }); it('should disable the Delete button', () => { expect(node.querySelector('.array-item-remove').disabled).eql(true); }); }); describe('ObjectField', () => { let node; beforeEach(() => { const schema = { type: 'object', properties: { foo: { type: 'string', }, bar: { type: 'string', }, }, }; const uiSchema = { 'ui:readonly': true, }; let rendered = createFormComponent({ schema, uiSchema }); node = rendered.node; }); it('should mark as readonly an ObjectField', () => { const disabled = [].map.call(node.querySelectorAll('[type=text]'), (node) => node.hasAttribute('readonly')); expect(disabled).eql([true, true]); }); }); }); describe('Widgets', () => { function shouldBeReadonly(selector, schema, uiSchema) { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelector(selector).hasAttribute('readonly')).eql(true); } function shouldBeDisabled(selector, schema, uiSchema) { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelector(selector).disabled).eql(true); } it('should mark as readonly a text widget', () => { shouldBeReadonly( 'input[type=text]', { type: 'string', }, { 'ui:readonly': true } ); }); it('should mark as readonly a file widget', () => { // We mark a file widget as readonly by disabling it. const { node } = createFormComponent({ schema: { type: 'string', format: 'data-url', }, uiSchema: { 'ui:readonly': true, }, }); expect(node.querySelector('input[type=file]').hasAttribute('disabled')).eql(true); }); it('should mark as readonly a textarea widget', () => { shouldBeReadonly( 'textarea', { type: 'string', }, { 'ui:readonly': true, 'ui:widget': 'textarea', } ); }); it('should mark as readonly a number text widget', () => { shouldBeReadonly( 'input[type=number]', { type: 'number', }, { 'ui:readonly': true } ); }); it('should mark as readonly a number widget', () => { shouldBeReadonly( 'input[type=number]', { type: 'number', }, { 'ui:readonly': true, 'ui:widget': 'updown', } ); }); it('should mark as readonly a range widget', () => { shouldBeReadonly( 'input[type=range]', { type: 'number', }, { 'ui:readonly': true, 'ui:widget': 'range', } ); }); it('should mark readonly as disabled on a select widget', () => { shouldBeDisabled( 'select', { type: 'string', enum: ['a', 'b'], }, { 'ui:readonly': true } ); }); it('should mark as readonly a color widget', () => { shouldBeReadonly( 'input[type=color]', { type: 'string', format: 'color', }, { 'ui:readonly': true } ); }); it('should mark as readonly a password widget', () => { shouldBeReadonly( 'input[type=password]', { type: 'string', }, { 'ui:readonly': true, 'ui:widget': 'password', } ); }); it('should mark as readonly a url widget', () => { shouldBeReadonly( 'input[type=url]', { type: 'string', format: 'uri', }, { 'ui:readonly': true } ); }); it('should mark as readonly an email widget', () => { shouldBeReadonly( 'input[type=email]', { type: 'string', format: 'email', }, { 'ui:readonly': true } ); }); it('should mark as readonly a date widget', () => { shouldBeReadonly( 'input[type=date]', { type: 'string', format: 'date', }, { 'ui:readonly': true } ); }); it('should mark as readonly a datetime widget', () => { shouldBeReadonly( 'input[type=datetime-local]', { type: 'string', format: 'date-time', }, { 'ui:readonly': true } ); }); it('should mark readonly as disabled on an alternative date widget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', }, uiSchema: { 'ui:readonly': true, 'ui:widget': 'alt-date', }, }); const readonly = [].map.call(node.querySelectorAll('select'), (node) => node.hasAttribute('disabled')); expect(readonly).eql([true, true, true]); }); it('should mark readonly as disabled on an alternative datetime widget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', }, uiSchema: { 'ui:readonly': true, 'ui:widget': 'alt-datetime', }, }); const readonly = [].map.call(node.querySelectorAll('select'), (node) => node.hasAttribute('disabled')); expect(readonly).eql([true, true, true, true, true, true]); }); }); }); describe('Readonly in schema', () => { describe('Fields', () => { describe('ArrayField', () => { let node; beforeEach(() => { const schema = { type: 'array', items: { type: 'string', }, readOnly: true, }; const uiSchema = {}; const formData = ['a', 'b']; let rendered = createFormComponent({ schema, uiSchema, formData }); node = rendered.node; }); it('should mark as readonly an ArrayField', () => { const disabled = [].map.call(node.querySelectorAll('[type=text]'), (node) => node.hasAttribute('readonly')); expect(disabled).eql([true, true]); }); it('should disable the Add button', () => { expect(node.querySelector('.array-item-add button').disabled).eql(true); }); it('should disable the Delete button', () => { expect(node.querySelector('.array-item-remove').disabled).eql(true); }); }); describe('ObjectField', () => { let node; beforeEach(() => { const schema = { type: 'object', properties: { foo: { type: 'string', }, bar: { type: 'string', }, }, readOnly: true, }; const uiSchema = {}; let rendered = createFormComponent({ schema, uiSchema }); node = rendered.node; }); it('should mark as readonly an ObjectField', () => { const disabled = [].map.call(node.querySelectorAll('[type=text]'), (node) => node.hasAttribute('readonly')); expect(disabled).eql([true, true]); }); }); }); describe('Widgets', () => { function shouldBeReadonly(selector, schema, uiSchema) { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelector(selector).hasAttribute('readonly')).eql(true); } function shouldBeDisabled(selector, schema, uiSchema) { const { node } = createFormComponent({ schema, uiSchema }); expect(node.querySelector(selector).disabled).eql(true); } it('should mark as readonly a text widget', () => { shouldBeReadonly( 'input[type=text]', { type: 'string', readOnly: true, }, {} ); }); it('should mark as readonly a file widget', () => { // We mark a file widget as readonly by disabling it. const { node } = createFormComponent({ schema: { type: 'string', format: 'data-url', readOnly: true, }, uiSchema: {}, }); expect(node.querySelector('input[type=file]').hasAttribute('disabled')).eql(true); }); it('should mark as readonly a textarea widget', () => { shouldBeReadonly( 'textarea', { type: 'string', readOnly: true, }, { 'ui:widget': 'textarea', } ); }); it('should mark as readonly a number text widget', () => { shouldBeReadonly( 'input[type=number]', { type: 'number', readOnly: true, }, {} ); }); it('should mark as readonly a number widget', () => { shouldBeReadonly( 'input[type=number]', { type: 'number', readOnly: true, }, { 'ui:widget': 'updown', } ); }); it('should mark as readonly a range widget', () => { shouldBeReadonly( 'input[type=range]', { type: 'number', readOnly: true, }, { 'ui:widget': 'range', } ); }); it('should mark readonly as disabled on a select widget', () => { shouldBeDisabled( 'select', { type: 'string', enum: ['a', 'b'], readOnly: true, }, {} ); }); it('should mark as readonly a color widget', () => { shouldBeReadonly( 'input[type=color]', { type: 'string', format: 'color', readOnly: true, }, {} ); }); it('should mark as readonly a password widget', () => { shouldBeReadonly( 'input[type=password]', { type: 'string', readOnly: true, }, { 'ui:widget': 'password', } ); }); it('should mark as readonly a url widget', () => { shouldBeReadonly( 'input[type=url]', { type: 'string', format: 'uri', readOnly: true, }, {} ); }); it('should mark as readonly an email widget', () => { shouldBeReadonly('input[type=email]', { type: 'string', format: 'email', readOnly: true, }); }); it('should mark as readonly a date widget', () => { shouldBeReadonly('input[type=date]', { type: 'string', format: 'date', readOnly: true, }); }); it('should mark as readonly a datetime widget', () => { shouldBeReadonly('input[type=datetime-local]', { type: 'string', format: 'date-time', readOnly: true, }); }); it('should mark readonly as disabled on an alternative date widget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date', readOnly: true, }, uiSchema: { 'ui:widget': 'alt-date', }, }); const readonly = [].map.call(node.querySelectorAll('select'), (node) => node.hasAttribute('disabled')); expect(readonly).eql([true, true, true]); }); it('should mark readonly as disabled on an alternative datetime widget', () => { const { node } = createFormComponent({ schema: { type: 'string', format: 'date-time', readOnly: true, }, uiSchema: { 'ui:widget': 'alt-datetime', }, }); const readonly = [].map.call(node.querySelectorAll('select'), (node) => node.hasAttribute('disabled')); expect(readonly).eql([true, true, true, true, true, true]); }); }); }); }); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/validate.test.js������������������������������������0000664�0000000�0000000�00000071435�14467713645�0024614�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import sinon from 'sinon'; import { Simulate } from 'react-dom/test-utils'; import { createFormComponent, submitForm } from './test_utils'; import v6Validator, { customizeValidator as customizeV6Validator } from '@rjsf/validator-ajv6'; import { customizeValidator as customizeV8Validator } from '@rjsf/validator-ajv8'; describe('Validation', () => { describe('Form integration, v6 validator', () => { let sandbox; beforeEach(() => { sandbox = sinon.createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('JSONSchema validation', () => { describe('ShowErrorList prop top', () => { const schema = { type: 'object', required: ['foo'], properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; let node; const compInfo = createFormComponent({ schema, formData: { foo: undefined, }, }); node = compInfo.node; submitForm(node); it('should render errors at the top', () => { expect(node.querySelectorAll('.errors li')).to.have.length.of(1); expect(node.querySelector('.errors li').textContent).eql("must have required property 'foo'"); expect(node.childNodes[0].className).to.eql('panel panel-danger errors'); }); }); describe('ShowErrorList prop bottom', () => { const schema = { type: 'object', required: ['foo'], properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; let node; const compInfo = createFormComponent({ showErrorList: 'bottom', schema, formData: { foo: undefined, }, }); node = compInfo.node; submitForm(node); it('should render errors at the bottom', () => { expect(node.querySelectorAll('.errors li')).to.have.length.of(1); expect(node.querySelector('.errors li').textContent).eql("must have required property 'foo'"); // The last child node is the submit button so the one before it will be the error list expect(node.childNodes[2].className).to.eql('panel panel-danger errors'); }); }); describe('Required fields', () => { const schema = { type: 'object', required: ['foo'], properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; let onError, node; beforeEach(() => { const compInfo = createFormComponent({ schema, formData: { foo: undefined, }, validator: v6Validator, }); onError = compInfo.onError; node = compInfo.node; submitForm(node); }); it('should trigger onError call', () => { sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'is a required property', name: 'required', params: { missingProperty: 'foo' }, property: '.foo', schemaPath: '#/required', stack: '.foo is a required property', }, ]); }); it('should render errors', () => { expect(node.querySelectorAll('.errors li')).to.have.length.of(1); expect(node.querySelector('.errors li').textContent).eql('.foo is a required property'); expect(node.childNodes[0].className).to.eql('panel panel-danger errors'); }); }); describe('Min length', () => { const schema = { type: 'object', required: ['foo'], properties: { foo: { type: 'string', minLength: 10, }, }, }; let node, onError; beforeEach(() => { onError = sandbox.spy(); const compInfo = createFormComponent({ schema, formData: { foo: '123456789', }, onError, validator: v6Validator, }); node = compInfo.node; submitForm(node); }); it('should render errors', () => { expect(node.querySelectorAll('.errors li')).to.have.length.of(1); expect(node.querySelector('.errors li').textContent).eql('.foo should NOT be shorter than 10 characters'); }); it('should trigger the onError handler', () => { sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'should NOT be shorter than 10 characters', name: 'minLength', params: { limit: 10 }, property: '.foo', schemaPath: '#/properties/foo/minLength', stack: '.foo should NOT be shorter than 10 characters', }, ]); }); }); }); describe('Custom Form validation', () => { it('should validate a simple string value', () => { const schema = { type: 'string' }; const formData = 'a'; function customValidate(formData, errors) { if (formData !== 'hello') { errors.addError('Invalid'); } return errors; } const { onError, node } = createFormComponent({ schema, customValidate, formData, validator: v6Validator, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [{ property: '.', message: 'Invalid', stack: '. Invalid' }]); }); it('should live validate a simple string value when liveValidate is set to true', () => { const schema = { type: 'string' }; const formData = 'a'; function customValidate(formData, errors) { if (formData !== 'hello') { errors.addError('Invalid'); } return errors; } const { onChange, node } = createFormComponent({ schema, customValidate, formData, liveValidate: true, validator: v6Validator, }); Simulate.change(node.querySelector('input'), { target: { value: '1234' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { errorSchema: { __errors: ['Invalid'] }, errors: [{ property: '.', message: 'Invalid', stack: '. Invalid' }], formData: '1234', }, 'root' ); }); it('should submit form on valid data', () => { const schema = { type: 'string' }; const formData = 'hello'; const onSubmit = sandbox.spy(); function customValidate(formData, errors) { if (formData !== 'hello') { errors.addError('Invalid'); } return errors; } const { node } = createFormComponent({ schema, formData, customValidate, onSubmit, validator: v6Validator, }); submitForm(node); sinon.assert.called(onSubmit); }); it('should prevent form submission on invalid data', () => { const schema = { type: 'string' }; const formData = 'a'; const onSubmit = sandbox.spy(); const onError = sandbox.spy(); function customValidate(formData, errors) { if (formData !== 'hello') { errors.addError('Invalid'); } return errors; } const { node } = createFormComponent({ schema, formData, customValidate, onSubmit, onError, validator: v6Validator, }); submitForm(node); sinon.assert.notCalled(onSubmit); sinon.assert.called(onError); }); it('should validate a simple object', () => { const schema = { type: 'object', properties: { pass1: { type: 'string', minLength: 3 }, pass2: { type: 'string', minLength: 3 }, }, }; const formData = { pass1: 'aaa', pass2: 'b' }; function customValidate(formData, errors) { const { pass1, pass2 } = formData; if (pass1 !== pass2) { errors.pass2.addError("Passwords don't match"); } return errors; } const { node, onError } = createFormComponent({ schema, customValidate, formData, validator: v6Validator, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'should NOT be shorter than 3 characters', name: 'minLength', params: { limit: 3 }, property: '.pass2', schemaPath: '#/properties/pass2/minLength', stack: '.pass2 should NOT be shorter than 3 characters', }, { property: '.pass2', message: "Passwords don't match", stack: ".pass2 Passwords don't match", }, ]); }); it('should validate an array of object', () => { const schema = { type: 'array', items: { type: 'object', properties: { pass1: { type: 'string' }, pass2: { type: 'string' }, }, }, }; const formData = [ { pass1: 'a', pass2: 'b' }, { pass1: 'a', pass2: 'a' }, ]; function customValidate(formData, errors) { formData.forEach(({ pass1, pass2 }, i) => { if (pass1 !== pass2) { errors[i].pass2.addError("Passwords don't match"); } }); return errors; } const { node, onError } = createFormComponent({ schema, customValidate, formData, validator: v6Validator, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { property: '.0.pass2', message: "Passwords don't match", stack: ".0.pass2 Passwords don't match", }, ]); }); it('should validate a simple array', () => { const schema = { type: 'array', items: { type: 'string', }, }; const formData = ['aaa', 'bbb', 'ccc']; function customValidate(formData, errors) { if (formData.indexOf('bbb') !== -1) { errors.addError('Forbidden value: bbb'); } return errors; } const { node, onError } = createFormComponent({ schema, customValidate, formData, validator: v6Validator, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { property: '.', message: 'Forbidden value: bbb', stack: '. Forbidden value: bbb', }, ]); }); }); describe('showErrorList prop validation', () => { describe('Required fields', () => { const schema = { type: 'object', required: ['foo'], properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; let node, onError; beforeEach(() => { const compInfo = createFormComponent({ schema, formData: { foo: undefined, }, showErrorList: false, validator: v6Validator, }); node = compInfo.node; onError = compInfo.onError; submitForm(node); }); it('should not render error list if showErrorList prop true', () => { expect(node.querySelectorAll('.errors li')).to.have.length.of(0); }); it('should trigger onError call', () => { sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'is a required property', name: 'required', params: { missingProperty: 'foo' }, property: '.foo', schemaPath: '#/required', stack: '.foo is a required property', }, ]); }); }); }); describe('Custom ErrorList', () => { const schema = { type: 'string', minLength: 1, }; const uiSchema = { foo: 'bar', }; const formData = 0; const CustomErrorList = ({ errors, errorSchema, schema, uiSchema, formContext: { className } }) => ( <div> <div className='CustomErrorList'>{errors.length} custom</div> <div className={'ErrorSchema'}>{errorSchema.__errors[0]}</div> <div className={'Schema'}>{schema.type}</div> <div className={'UiSchema'}>{uiSchema.foo}</div> <div className={className} /> </div> ); it('should use CustomErrorList', () => { const { node } = createFormComponent({ schema, uiSchema, liveValidate: true, formData, templates: { ErrorListTemplate: CustomErrorList }, formContext: { className: 'foo' }, validator: v6Validator, }); expect(node.querySelectorAll('.CustomErrorList')).to.have.length.of(1); expect(node.querySelector('.CustomErrorList').textContent).eql('1 custom'); expect(node.querySelectorAll('.ErrorSchema')).to.have.length.of(1); expect(node.querySelector('.ErrorSchema').textContent).eql('should be string'); expect(node.querySelectorAll('.Schema')).to.have.length.of(1); expect(node.querySelector('.Schema').textContent).eql('string'); expect(node.querySelectorAll('.UiSchema')).to.have.length.of(1); expect(node.querySelector('.UiSchema').textContent).eql('bar'); expect(node.querySelectorAll('.foo')).to.have.length.of(1); }); }); describe('Custom meta schema', () => { let onError, node; const formData = { datasetId: 'no err', }; const schema = { $ref: '#/definitions/Dataset', $schema: 'http://json-schema.org/draft-06/schema#', definitions: { Dataset: { properties: { datasetId: { pattern: '\\d+', type: 'string', }, }, required: ['datasetId'], type: 'object', }, }, }; beforeEach(() => { const validator = customizeV6Validator({ additionalMetaSchemas: [require('ajv/lib/refs/json-schema-draft-06.json')], }); const withMetaSchema = createFormComponent({ schema, formData, liveValidate: true, validator, }); node = withMetaSchema.node; onError = withMetaSchema.onError; submitForm(node); }); it('should be used to validate schema', () => { expect(node.querySelectorAll('.errors li')).to.have.length.of(1); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'should match pattern "\\d+"', name: 'pattern', params: { pattern: '\\d+' }, property: '.datasetId', schemaPath: '#/properties/datasetId/pattern', stack: '.datasetId should match pattern "\\d+"', }, ]); onError.resetHistory(); Simulate.change(node.querySelector('input'), { target: { value: '1234' }, }); expect(node.querySelectorAll('.errors li')).to.have.length.of(0); sinon.assert.notCalled(onError); }); }); }); describe('Form integration, v8 validator', () => { let sandbox; beforeEach(() => { sandbox = sinon.createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('JSONSchema validation', () => { describe('Required fields', () => { const schema = { type: 'object', required: ['foo'], properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; let onError, node; beforeEach(() => { const compInfo = createFormComponent({ schema, formData: { foo: undefined, }, }); onError = compInfo.onError; node = compInfo.node; submitForm(node); }); it('should trigger onError call', () => { sinon.assert.calledWithMatch(onError.lastCall, [ { message: "must have required property 'foo'", name: 'required', params: { missingProperty: 'foo' }, property: 'foo', schemaPath: '#/required', stack: "must have required property 'foo'", }, ]); }); it('should render errors', () => { expect(node.querySelectorAll('.errors li')).to.have.length.of(1); expect(node.querySelector('.errors li').textContent).eql("must have required property 'foo'"); }); }); describe('Min length', () => { const schema = { type: 'object', required: ['foo'], properties: { foo: { type: 'string', minLength: 10, }, }, }; let node, onError; beforeEach(() => { onError = sandbox.spy(); const compInfo = createFormComponent({ schema, formData: { foo: '123456789', }, onError, }); node = compInfo.node; submitForm(node); }); it('should render errors', () => { expect(node.querySelectorAll('.errors li')).to.have.length.of(1); expect(node.querySelector('.errors li').textContent).eql('.foo must NOT have fewer than 10 characters'); }); it('should trigger the onError handler', () => { sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have fewer than 10 characters', name: 'minLength', params: { limit: 10 }, property: '.foo', schemaPath: '#/properties/foo/minLength', stack: '.foo must NOT have fewer than 10 characters', }, ]); }); }); }); describe('Custom Form validation', () => { it('should validate a simple string value', () => { const schema = { type: 'string' }; const formData = 'a'; function customValidate(formData, errors) { if (formData !== 'hello') { errors.addError('Invalid'); } return errors; } const { onError, node } = createFormComponent({ schema, customValidate, formData, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [{ property: '.', message: 'Invalid', stack: '. Invalid' }]); }); it('should live validate a simple string value when liveValidate is set to true', () => { const schema = { type: 'string' }; const formData = 'a'; function customValidate(formData, errors) { if (formData !== 'hello') { errors.addError('Invalid'); } return errors; } const { onChange, node } = createFormComponent({ schema, customValidate, formData, liveValidate: true, }); Simulate.change(node.querySelector('input'), { target: { value: '1234' }, }); sinon.assert.calledWithMatch( onChange.lastCall, { errorSchema: { __errors: ['Invalid'] }, errors: [{ property: '.', message: 'Invalid', stack: '. Invalid' }], formData: '1234', }, 'root' ); }); it('should submit form on valid data', () => { const schema = { type: 'string' }; const formData = 'hello'; const onSubmit = sandbox.spy(); function customValidate(formData, errors) { if (formData !== 'hello') { errors.addError('Invalid'); } return errors; } const { node } = createFormComponent({ schema, formData, customValidate, onSubmit, }); submitForm(node); sinon.assert.called(onSubmit); }); it('should prevent form submission on invalid data', () => { const schema = { type: 'string' }; const formData = 'a'; const onSubmit = sandbox.spy(); const onError = sandbox.spy(); function customValidate(formData, errors) { if (formData !== 'hello') { errors.addError('Invalid'); } return errors; } const { node } = createFormComponent({ schema, formData, customValidate, onSubmit, onError, }); submitForm(node); sinon.assert.notCalled(onSubmit); sinon.assert.called(onError); }); it('should validate a simple object', () => { const schema = { type: 'object', properties: { pass1: { type: 'string', minLength: 3 }, pass2: { type: 'string', minLength: 3 }, }, }; const formData = { pass1: 'aaa', pass2: 'b' }; function customValidate(formData, errors) { const { pass1, pass2 } = formData; if (pass1 !== pass2) { errors.pass2.addError("Passwords don't match"); } return errors; } const { node, onError } = createFormComponent({ schema, customValidate, formData, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must NOT have fewer than 3 characters', name: 'minLength', params: { limit: 3 }, property: '.pass2', schemaPath: '#/properties/pass2/minLength', stack: '.pass2 must NOT have fewer than 3 characters', }, { property: '.pass2', message: "Passwords don't match", stack: ".pass2 Passwords don't match", }, ]); }); it('should validate an array of object', () => { const schema = { type: 'array', items: { type: 'object', properties: { pass1: { type: 'string' }, pass2: { type: 'string' }, }, }, }; const formData = [ { pass1: 'a', pass2: 'b' }, { pass1: 'a', pass2: 'a' }, ]; function customValidate(formData, errors) { formData.forEach(({ pass1, pass2 }, i) => { if (pass1 !== pass2) { errors[i].pass2.addError("Passwords don't match"); } }); return errors; } const { node, onError } = createFormComponent({ schema, customValidate, formData, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { property: '.0.pass2', message: "Passwords don't match", stack: ".0.pass2 Passwords don't match", }, ]); }); it('should validate a simple array', () => { const schema = { type: 'array', items: { type: 'string', }, }; const formData = ['aaa', 'bbb', 'ccc']; function customValidate(formData, errors) { if (formData.indexOf('bbb') !== -1) { errors.addError('Forbidden value: bbb'); } return errors; } const { node, onError } = createFormComponent({ schema, customValidate, formData, }); submitForm(node); sinon.assert.calledWithMatch(onError.lastCall, [ { property: '.', message: 'Forbidden value: bbb', stack: '. Forbidden value: bbb', }, ]); }); }); describe('showErrorList prop validation', () => { describe('Required fields', () => { const schema = { type: 'object', required: ['foo'], properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; let node, onError; beforeEach(() => { const compInfo = createFormComponent({ schema, formData: { foo: undefined, }, showErrorList: false, }); node = compInfo.node; onError = compInfo.onError; submitForm(node); }); it('should not render error list if showErrorList prop true', () => { expect(node.querySelectorAll('.errors li')).to.have.length.of(0); }); it('should trigger onError call', () => { sinon.assert.calledWithMatch(onError.lastCall, [ { message: "must have required property 'foo'", name: 'required', params: { missingProperty: 'foo' }, property: 'foo', schemaPath: '#/required', stack: "must have required property 'foo'", }, ]); }); }); }); describe('Custom ErrorList', () => { const schema = { type: 'string', minLength: 1, }; const uiSchema = { foo: 'bar', }; const formData = 0; const CustomErrorList = ({ errors, errorSchema, schema, uiSchema, formContext: { className } }) => ( <div> <div className='CustomErrorList'>{errors.length} custom</div> <div className={'ErrorSchema'}>{errorSchema.__errors[0]}</div> <div className={'Schema'}>{schema.type}</div> <div className={'UiSchema'}>{uiSchema.foo}</div> <div className={className} /> </div> ); it('should use CustomErrorList', () => { const { node } = createFormComponent({ schema, uiSchema, liveValidate: true, formData, templates: { ErrorListTemplate: CustomErrorList }, formContext: { className: 'foo' }, }); expect(node.querySelectorAll('.CustomErrorList')).to.have.length.of(1); expect(node.querySelector('.CustomErrorList').textContent).eql('1 custom'); expect(node.querySelectorAll('.ErrorSchema')).to.have.length.of(1); expect(node.querySelector('.ErrorSchema').textContent).eql('must be string'); expect(node.querySelectorAll('.Schema')).to.have.length.of(1); expect(node.querySelector('.Schema').textContent).eql('string'); expect(node.querySelectorAll('.UiSchema')).to.have.length.of(1); expect(node.querySelector('.UiSchema').textContent).eql('bar'); expect(node.querySelectorAll('.foo')).to.have.length.of(1); }); }); describe('Custom meta schema', () => { let onError, node; const formData = { datasetId: 'no err', }; const schema = { $ref: '#/definitions/Dataset', $schema: 'http://json-schema.org/draft-06/schema#', definitions: { Dataset: { properties: { datasetId: { pattern: '\\d+', type: 'string', }, }, required: ['datasetId'], type: 'object', }, }, }; beforeEach(() => { const validator = customizeV8Validator({ additionalMetaSchemas: [require('ajv/lib/refs/json-schema-draft-06.json')], }); const withMetaSchema = createFormComponent({ schema, formData, liveValidate: true, validator, }); node = withMetaSchema.node; onError = withMetaSchema.onError; submitForm(node); }); it('should be used to validate schema', () => { expect(node.querySelectorAll('.errors li')).to.have.length.of(1); sinon.assert.calledWithMatch(onError.lastCall, [ { message: 'must match pattern "\\d+"', name: 'pattern', params: { pattern: '\\d+' }, property: '.datasetId', schemaPath: '#/properties/datasetId/pattern', stack: '.datasetId must match pattern "\\d+"', }, ]); onError.resetHistory(); Simulate.change(node.querySelector('input'), { target: { value: '1234' }, }); expect(node.querySelectorAll('.errors li')).to.have.length.of(0); sinon.assert.notCalled(onError); }); }); }); }); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/widgets_schema.json���������������������������������0000664�0000000�0000000�00000003576�14467713645�0025371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "title": "Widgets", "type": "object", "properties": { "stringFormats": { "type": "object", "title": "String formats", "properties": { "email": { "type": "string", "format": "email" }, "uri": { "type": "string", "format": "uri" } } }, "boolean": { "type": "object", "title": "Boolean field", "properties": { "default": { "type": "boolean", "title": "checkbox (default)", "description": "This is the checkbox-description", "default": true }, "radio": { "type": "boolean", "title": "radio buttons", "description": "This is the radio-description" }, "select": { "type": "boolean", "title": "select box", "description": "This is the select-description" } } }, "string": { "type": "object", "title": "String field", "properties": { "default": { "type": "string", "title": "text input (default)" }, "textarea": { "type": "string", "title": "textarea" }, "placeholder": { "type": "string" }, "color": { "type": "string", "title": "color picker", "default": "#151ce6" } } }, "secret": { "type": "string", "default": "I'm a hidden string." }, "disabled": { "type": "string", "title": "A disabled field", "default": "I am disabled." }, "readonly": { "type": "string", "title": "A readonly field", "default": "I am read-only." }, "readonly2": { "type": "string", "title": "Another readonly field", "default": "I am also read-only.", "readOnly": true } } } ����������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/test/withTheme.test.jsx����������������������������������0000664�0000000�0000000�00000020737�14467713645�0025150�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { expect } from 'chai'; import { Component, createRef } from 'react'; import validator from '@rjsf/validator-ajv8'; import { withTheme } from '../src'; import { createComponent, createSandbox } from './test_utils'; const WrapperClassComponent = (...args) => { return class extends Component { render() { const Cmp = withTheme(...args); return <Cmp {...this.props} />; } }; }; describe('withTheme', () => { let sandbox; beforeEach(() => { sandbox = createSandbox(); }); afterEach(() => { sandbox.restore(); }); describe('With fields', () => { it('should use the withTheme field', () => { const fields = { StringField() { return <div className='string-field' />; }, }; const schema = { type: 'object', properties: { fieldA: { type: 'string', }, fieldB: { type: 'string', }, }, }; const uiSchema = {}; let { node } = createComponent(WrapperClassComponent({ fields }), { schema, uiSchema, validator, }); expect(node.querySelectorAll('.string-field')).to.have.length.of(2); }); it('should use withTheme field and the user defined field', () => { const themeFields = { StringField() { return <div className='string-field' />; }, }; const userFields = { NumberField() { return <div className='number-field' />; }, }; const schema = { type: 'object', properties: { fieldA: { type: 'string', }, fieldB: { type: 'number', }, }, }; const uiSchema = {}; let { node } = createComponent(WrapperClassComponent({ fields: themeFields }), { schema, uiSchema, fields: userFields, validator, }); expect(node.querySelectorAll('.string-field')).to.have.length.of(1); expect(node.querySelectorAll('.number-field')).to.have.length.of(1); }); it('should use only the user defined field', () => { const themeFields = { StringField() { return <div className='string-field' />; }, }; const userFields = { StringField() { return <div className='form-control' />; }, }; const schema = { type: 'object', properties: { fieldA: { type: 'string', }, fieldB: { type: 'string', }, }, }; const uiSchema = {}; let { node } = createComponent(WrapperClassComponent({ fields: themeFields }), { schema, uiSchema, fields: userFields, validator, }); expect(node.querySelectorAll('.string-field')).to.have.length.of(0); expect(node.querySelectorAll('.form-control')).to.have.length.of(2); }); }); describe('With widgets', () => { it('should use the withTheme widget', () => { const widgets = { TextWidget: () => <div id='test' />, }; const schema = { type: 'string', }; const uiSchema = {}; let { node } = createComponent(WrapperClassComponent({ widgets }), { schema, uiSchema, validator, }); expect(node.querySelectorAll('#test')).to.have.length.of(1); }); it('should use the withTheme widget as well as user defined widget', () => { const themeWidgets = { TextWidget: () => <div id='test-theme-widget' />, }; const userWidgets = { DateWidget: () => <div id='test-user-widget' />, }; const schema = { type: 'object', properties: { fieldA: { type: 'string', }, fieldB: { format: 'date', type: 'string', }, }, }; const uiSchema = {}; let { node } = createComponent(WrapperClassComponent({ widgets: themeWidgets }), { schema, uiSchema, widgets: userWidgets, validator, }); expect(node.querySelectorAll('#test-theme-widget')).to.have.length.of(1); expect(node.querySelectorAll('#test-user-widget')).to.have.length.of(1); }); it('should use only the user defined widget', () => { const themeWidgets = { TextWidget: () => <div id='test-theme-widget' />, }; const userWidgets = { TextWidget: () => <div id='test-user-widget' />, }; const schema = { type: 'object', properties: { fieldA: { type: 'string', }, }, }; const uiSchema = {}; let { node } = createComponent(WrapperClassComponent({ widgets: themeWidgets }), { schema, uiSchema, widgets: userWidgets, validator, }); expect(node.querySelectorAll('#test-theme-widget')).to.have.length.of(0); expect(node.querySelectorAll('#test-user-widget')).to.have.length.of(1); }); }); describe('With templates', () => { it('should use the withTheme template', () => { const themeTemplates = { FieldTemplate() { return <div className='with-theme-field-template' />; }, }; const schema = { type: 'object', properties: { fieldA: { type: 'string', }, fieldB: { type: 'string', }, }, }; const uiSchema = {}; let { node } = createComponent(WrapperClassComponent({ templates: themeTemplates }), { schema, uiSchema, validator, }); expect(node.querySelectorAll('.with-theme-field-template')).to.have.length.of(1); }); it('should use only the user defined template', () => { const themeTemplates = { FieldTemplate() { return <div className='with-theme-field-template' />; }, }; const userTemplates = { FieldTemplate() { return <div className='user-field-template' />; }, }; const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' } }, }; let { node } = createComponent(WrapperClassComponent({ templates: themeTemplates }), { schema, templates: userTemplates, validator, }); expect(node.querySelectorAll('.with-theme-field-template')).to.have.length.of(0); expect(node.querySelectorAll('.user-field-template')).to.have.length.of(1); }); it('should use the withTheme submit button template', () => { const themeTemplates = { ButtonTemplates: { SubmitButton() { return <button className='with-theme-button-template'>ThemeSubmit</button>; }, }, }; const schema = { type: 'object', properties: { fieldA: { type: 'string', }, fieldB: { type: 'string', }, }, }; const uiSchema = {}; let { node } = createComponent(WrapperClassComponent({ templates: themeTemplates }), { schema, uiSchema, validator, }); expect(node.querySelectorAll('.with-theme-button-template')).to.have.length.of(1); }); it('should use only the user defined submit button', () => { const themeTemplates = { ButtonTemplates: { SubmitButton() { return <button className='with-theme-button-template'>ThemeSubmit</button>; }, }, }; const userTemplates = { ButtonTemplates: { SubmitButton() { return <button className='user-button-template'>UserSubmit</button>; }, }, }; const schema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' } }, }; let { node } = createComponent(WrapperClassComponent({ templates: themeTemplates }), { schema, templates: userTemplates, validator, }); expect(node.querySelectorAll('.with-theme-button-template')).to.have.length.of(0); expect(node.querySelectorAll('.user-button-template')).to.have.length.of(1); }); }); it('should forward the ref', () => { const ref = createRef(); const schema = {}; const uiSchema = {}; createComponent(withTheme({}), { schema, uiSchema, validator, ref, }); expect(ref.current.submit).not.eql(undefined); }); }); ���������������������������������react-jsonschema-form-5.12.1/packages/core/testSnap/������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022317�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/testSnap/arrayTests.tsx����������������������������������0000664�0000000�0000000�00000025274�14467713645�0025232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ComponentType } from 'react'; import renderer, { TestRendererOptions } from 'react-test-renderer'; import { RJSFSchema, ErrorSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; import { FormProps } from '../src'; const titleAndDesc = { title: 'Test field', description: 'a test description', }; const itemTitleAndDesc = { title: 'Test item', description: 'a test item description', }; const uiTitleAndDesc: UiSchema = { 'ui:options': { title: 'My Field', description: 'a fancier description', }, items: { 'ui:options': { title: 'My Item', description: 'a fancier item description', }, }, }; const labelsOff: UiSchema = { 'ui:globalOptions': { label: false }, }; export const CHECKBOXES_CUSTOMIZE = 'checkboxes'; export type ArrayRenderCustomOptions = { checkboxes?: TestRendererOptions; }; export default function arrayTests(Form: ComponentType<FormProps>, customOptions: ArrayRenderCustomOptions = {}) { describe('array fields', () => { test('array', () => { const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('fixed array', () => { const schema: RJSFSchema = { type: 'array', items: [ { type: 'string', }, { type: 'number', }, ], }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('checkboxes', () => { const schema: RJSFSchema = { type: 'array', items: { type: 'string', enum: ['a', 'b', 'c'], }, uniqueItems: true, }; const tree = renderer.create(<Form schema={schema} validator={validator} />, customOptions.checkboxes).toJSON(); expect(tree).toMatchSnapshot(); }); test('array icons', () => { const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; const uiSchema: UiSchema = { 'ui:options': { copyable: true }, }; const tree = renderer .create(<Form schema={schema} uiSchema={uiSchema} validator={validator} formData={['a', 'b']} />) .toJSON(); expect(tree).toMatchSnapshot(); }); test('has errors', () => { const schema: RJSFSchema = { type: 'object', properties: { name: { type: 'string', }, }, }; const errors: any[] = ['Bad input']; const extraErrors = { name: { __errors: errors }, } as unknown as ErrorSchema; const tree = renderer.create(<Form schema={schema} validator={validator} extraErrors={extraErrors} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('no errors', () => { const schema: RJSFSchema = { type: 'object', properties: { name: { type: 'string', }, }, }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('empty errors array', () => { const schema: RJSFSchema = { type: 'object', properties: { name: { type: 'string', }, }, }; const errors: any[] = []; const extraErrors = { name: { __errors: errors }, } as unknown as ErrorSchema; const tree = renderer.create(<Form schema={schema} validator={validator} extraErrors={extraErrors} />).toJSON(); expect(tree).toMatchSnapshot(); }); }); describe('with title and description', () => { test('array', () => { const schema: RJSFSchema = { type: 'array', ...titleAndDesc, items: { ...itemTitleAndDesc, type: 'string', }, }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('fixed array', () => { const schema: RJSFSchema = { type: 'array', ...titleAndDesc, items: [ { ...itemTitleAndDesc, type: 'string', }, { ...itemTitleAndDesc, type: 'number', }, ], }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('checkboxes', () => { const schema: RJSFSchema = { type: 'array', ...titleAndDesc, items: { ...itemTitleAndDesc, type: 'string', enum: ['a', 'b', 'c'], }, uniqueItems: true, }; const tree = renderer.create(<Form schema={schema} validator={validator} />, customOptions.checkboxes).toJSON(); expect(tree).toMatchSnapshot(); }); test('array icons', () => { const schema: RJSFSchema = { type: 'array', ...titleAndDesc, items: { ...itemTitleAndDesc, type: 'string', }, }; const uiSchema: UiSchema = { 'ui:options': { copyable: true }, }; const tree = renderer .create(<Form schema={schema} uiSchema={uiSchema} validator={validator} formData={['a', 'b']} />) .toJSON(); expect(tree).toMatchSnapshot(); }); }); describe('with title and description from uiSchema', () => { test('array', () => { const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; const tree = renderer.create(<Form schema={schema} uiSchema={uiTitleAndDesc} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('fixed array', () => { const schema: RJSFSchema = { type: 'array', items: [ { type: 'string', }, { type: 'number', }, ], }; const tree = renderer.create(<Form schema={schema} uiSchema={uiTitleAndDesc} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('checkboxes', () => { const schema: RJSFSchema = { type: 'array', items: { type: 'string', enum: ['a', 'b', 'c'], }, uniqueItems: true, }; const tree = renderer .create(<Form schema={schema} uiSchema={uiTitleAndDesc} validator={validator} />, customOptions.checkboxes) .toJSON(); expect(tree).toMatchSnapshot(); }); test('array icons', () => { const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; const uiSchema: UiSchema = { 'ui:copyable': true, ...uiTitleAndDesc, }; const tree = renderer .create(<Form schema={schema} uiSchema={uiSchema} validator={validator} formData={['a', 'b']} />) .toJSON(); expect(tree).toMatchSnapshot(); }); }); describe('with title and description from both', () => { test('array', () => { const schema: RJSFSchema = { type: 'array', ...titleAndDesc, items: { type: 'string', }, }; const tree = renderer.create(<Form schema={schema} uiSchema={uiTitleAndDesc} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('fixed array', () => { const schema: RJSFSchema = { type: 'array', ...titleAndDesc, items: [ { type: 'string', }, { type: 'number', }, ], }; const tree = renderer.create(<Form schema={schema} uiSchema={uiTitleAndDesc} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('checkboxes', () => { const schema: RJSFSchema = { type: 'array', ...titleAndDesc, items: { type: 'string', enum: ['a', 'b', 'c'], }, uniqueItems: true, }; const tree = renderer .create(<Form schema={schema} uiSchema={uiTitleAndDesc} validator={validator} />, customOptions.checkboxes) .toJSON(); expect(tree).toMatchSnapshot(); }); test('array icons', () => { const schema: RJSFSchema = { type: 'array', ...titleAndDesc, items: { type: 'string', }, }; const uiSchema: UiSchema = { 'ui:copyable': true, ...uiTitleAndDesc, }; const tree = renderer .create(<Form schema={schema} uiSchema={uiSchema} validator={validator} formData={['a', 'b']} />) .toJSON(); expect(tree).toMatchSnapshot(); }); }); describe('with title and description with global label off', () => { test('array', () => { const schema: RJSFSchema = { type: 'array', ...titleAndDesc, items: { ...itemTitleAndDesc, type: 'string', }, }; const tree = renderer.create(<Form schema={schema} uiSchema={labelsOff} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('fixed array', () => { const schema: RJSFSchema = { type: 'array', ...titleAndDesc, items: [ { ...itemTitleAndDesc, type: 'string', }, { ...itemTitleAndDesc, type: 'number', }, ], }; const tree = renderer.create(<Form schema={schema} uiSchema={labelsOff} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('checkboxes', () => { const schema: RJSFSchema = { type: 'array', ...titleAndDesc, items: { ...itemTitleAndDesc, type: 'string', enum: ['a', 'b', 'c'], }, uniqueItems: true, }; const tree = renderer .create(<Form schema={schema} uiSchema={labelsOff} validator={validator} />, customOptions.checkboxes) .toJSON(); expect(tree).toMatchSnapshot(); }); test('array icons', () => { const schema: RJSFSchema = { type: 'array', ...titleAndDesc, items: { ...itemTitleAndDesc, type: 'string', }, }; const uiSchema: UiSchema = { ...labelsOff, 'ui:options': { copyable: true }, }; const tree = renderer .create(<Form schema={schema} uiSchema={uiSchema} validator={validator} formData={['a', 'b']} />) .toJSON(); expect(tree).toMatchSnapshot(); }); }); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/testSnap/formTests.tsx�����������������������������������0000664�0000000�0000000�00000032200�14467713645�0025042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ComponentType } from 'react'; import renderer, { TestRendererOptions } from 'react-test-renderer'; import { RJSFSchema, ErrorSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; import { FormProps } from '../src'; export const SELECT_CUSTOMIZE = 'selectMulti'; export const SLIDER_CUSTOMIZE = 'slider'; export const TEXTAREA_CUSTOMIZE = 'textarea'; export type FormRenderCustomOptions = { selectMulti?: TestRendererOptions; slider?: TestRendererOptions; textarea?: TestRendererOptions; }; export default function formTests(Form: ComponentType<FormProps>, customOptions: FormRenderCustomOptions = {}) { describe('single fields', () => { describe('string field', () => { test('regular', () => { const schema: RJSFSchema = { type: 'string', }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('format email', () => { const schema: RJSFSchema = { type: 'string', format: 'email', }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('format uri', () => { const schema: RJSFSchema = { type: 'string', format: 'uri', }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('format data-url', () => { const schema: RJSFSchema = { type: 'string', format: 'data-url', }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); }); test('string field with placeholder', () => { const schema: RJSFSchema = { type: 'string', }; const uiSchema = { 'ui:placeholder': 'placeholder', }; const tree = renderer.create(<Form schema={schema} validator={validator} uiSchema={uiSchema} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('number field', () => { const schema: RJSFSchema = { type: 'number', }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('number field 0', () => { const schema: RJSFSchema = { type: 'number', }; const formData = 0; const tree = renderer.create(<Form schema={schema} validator={validator} formData={formData} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('null field', () => { const schema: RJSFSchema = { type: 'null', }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('unsupported field', () => { const schema: RJSFSchema = { type: undefined, }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('format color', () => { const schema: RJSFSchema = { type: 'string', format: 'color', }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('format date', () => { const schema: RJSFSchema = { type: 'string', format: 'date', }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('format datetime', () => { const schema: RJSFSchema = { type: 'string', format: 'datetime', }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('format time', () => { const schema: RJSFSchema = { type: 'string', format: 'time', }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('password field', () => { const schema: RJSFSchema = { type: 'string', }; const uiSchema = { 'ui:widget': 'password', }; const tree = renderer.create(<Form schema={schema} validator={validator} uiSchema={uiSchema} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('up/down field', () => { const schema: RJSFSchema = { type: 'number', }; const uiSchema = { 'ui:widget': 'updown', }; const tree = renderer.create(<Form schema={schema} validator={validator} uiSchema={uiSchema} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('textarea field', () => { const schema: RJSFSchema = { type: 'string', }; const uiSchema = { 'ui:widget': 'textarea', }; const tree = renderer .create(<Form schema={schema} validator={validator} uiSchema={uiSchema} />, customOptions.textarea) .toJSON(); expect(tree).toMatchSnapshot(); }); test('select field', () => { const schema: RJSFSchema = { type: 'string', enum: ['foo', 'bar'], }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('select field multiple choice', () => { const schema: RJSFSchema = { type: 'array', items: { type: 'string', enum: ['foo', 'bar', 'fuzz', 'qux'], }, uniqueItems: true, }; const tree = renderer.create(<Form schema={schema} validator={validator} />, customOptions.selectMulti).toJSON(); expect(tree).toMatchSnapshot(); }); test('select field multiple choice with labels', () => { const schema: RJSFSchema = { type: 'array', items: { type: 'number', anyOf: [ { enum: [1], title: 'Blue', }, { enum: [2], title: 'Red', }, { enum: [3], title: 'Green', }, ], }, uniqueItems: true, }; const tree = renderer.create(<Form schema={schema} validator={validator} />, customOptions.selectMulti).toJSON(); expect(tree).toMatchSnapshot(); }); test('select field single choice enumDisabled', () => { const schema: RJSFSchema = { type: 'string', enum: ['foo', 'bar'], }; const uiSchema = { 'ui:enumDisabled': ['bar'], }; const tree = renderer.create(<Form schema={schema} uiSchema={uiSchema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('select field multiple choice enumDisabled', () => { const schema: RJSFSchema = { type: 'array', items: { type: 'string', enum: ['foo', 'bar', 'fuzz', 'qux'], }, uniqueItems: true, }; const uiSchema = { 'ui:enumDisabled': ['bar'], }; const tree = renderer .create(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, customOptions.selectMulti) .toJSON(); expect(tree).toMatchSnapshot(); }); test('select field single choice formData', () => { const schema: RJSFSchema = { type: 'string', enum: ['foo', 'bar'], }; const formData = 'bar'; const tree = renderer.create(<Form schema={schema} formData={formData} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('select field multiple choice formData', () => { const schema: RJSFSchema = { type: 'array', items: { type: 'string', enum: ['foo', 'bar', 'fuzz', 'qux'], }, uniqueItems: true, }; const formData = ['foo', 'bar']; const tree = renderer .create(<Form schema={schema} formData={formData} validator={validator} />, customOptions.selectMulti) .toJSON(); expect(tree).toMatchSnapshot(); }); test('checkbox field', () => { const schema: RJSFSchema = { type: 'boolean', }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('checkbox field with label', () => { const schema: RJSFSchema = { type: 'boolean', title: 'test', }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('checkboxes field', () => { const schema: RJSFSchema = { type: 'array', title: 'An enum list rendered as checkboxes', items: { type: 'string', enum: ['foo', 'bar', 'fuzz', 'qux'], }, uniqueItems: true, }; const uiSchema = { 'ui:widget': 'checkboxes', }; const tree = renderer.create(<Form schema={schema} validator={validator} uiSchema={uiSchema} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('radio field', () => { const schema: RJSFSchema = { type: 'boolean', }; const uiSchema = { 'ui:widget': 'radio', }; const tree = renderer.create(<Form schema={schema} validator={validator} uiSchema={uiSchema} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('slider field', () => { const schema: RJSFSchema = { type: 'integer', minimum: 42, maximum: 100, }; const uiSchema = { 'ui:widget': 'range', }; const tree = renderer .create(<Form schema={schema} validator={validator} uiSchema={uiSchema} formData={75} />, customOptions.slider) .toJSON(); expect(tree).toMatchSnapshot(); }); test('hidden field', () => { const schema: RJSFSchema = { type: 'object', properties: { 'my-field': { type: 'string', }, }, }; const uiSchema = { 'my-field': { 'ui:widget': 'hidden', }, }; const tree = renderer.create(<Form schema={schema} validator={validator} uiSchema={uiSchema} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('field with description', () => { const schema: RJSFSchema = { type: 'object', properties: { 'my-field': { type: 'string', description: 'some description', }, }, }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('field with description in uiSchema', () => { const schema: RJSFSchema = { type: 'object', properties: { 'my-field': { type: 'string', description: 'some description', }, }, }; const uiSchema = { 'my-field': { 'ui:description': 'some other description', }, }; const tree = renderer.create(<Form schema={schema} validator={validator} uiSchema={uiSchema} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('title field', () => { const schema: RJSFSchema = { type: 'object', properties: { title: { type: 'string', }, }, }; const uiSchema = { 'ui:title': 'Titre 1', title: { 'ui:title': 'Titre 2', }, }; const tree = renderer.create(<Form schema={schema} validator={validator} uiSchema={uiSchema} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('hidden label', () => { const schema: RJSFSchema = { type: 'string', }; const uiSchema = { 'ui:options': { label: false, }, }; const tree = renderer.create(<Form schema={schema} validator={validator} uiSchema={uiSchema} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('using custom tagName', () => { const schema: RJSFSchema = { type: 'string', }; const tree = renderer.create(<Form schema={schema} validator={validator} tagName='div' />).toJSON(); expect(tree).toMatchSnapshot(); }); test('schema examples', () => { const schema: RJSFSchema = { type: 'string', examples: ['Firefox', 'Chrome', 'Opera', 'Vivaldi', 'Safari'], }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('help and error display', () => { const schema: RJSFSchema = { type: 'string', }; const uiSchema = { 'ui:help': 'help me!', }; const errors: string[] = ['an error']; const extraErrors = { __errors: errors } as ErrorSchema; const tree = renderer .create(<Form schema={schema} uiSchema={uiSchema} validator={validator} extraErrors={extraErrors} />) .toJSON(); expect(tree).toMatchSnapshot(); }); }); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/testSnap/objectTests.tsx���������������������������������0000664�0000000�0000000�00000015624�14467713645�0025360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ComponentType } from 'react'; import renderer from 'react-test-renderer'; import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; import { FormProps } from '../src'; const titleAndDesc = { title: 'Test field', description: 'a test description', }; const uiTitleAndDesc: UiSchema = { 'ui:options': { title: 'My Field', description: 'a fancier description', }, a: { 'ui:options': { title: 'My Item A', description: 'a fancier item A description', }, }, b: { 'ui:options': { title: 'My Item B', description: 'a fancier item B description', }, }, }; const labelsOff: UiSchema = { 'ui:globalOptions': { label: false }, }; export default function arrayTests(Form: ComponentType<FormProps>) { describe('object fields', () => { test('object', () => { const schema: RJSFSchema = { type: 'object', properties: { a: { type: 'string', title: 'A' }, b: { type: 'number', title: 'B' }, }, }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('additionalProperties', () => { const schema: RJSFSchema = { type: 'object', additionalProperties: true, }; const tree = renderer.create(<Form schema={schema} validator={validator} formData={{ foo: 'foo' }} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('show add button and fields if additionalProperties is true and not an object', () => { const schema: RJSFSchema = { additionalProperties: true, }; const formData: any = { additionalProperty: 'should appear', }; const tree = renderer.create(<Form schema={schema} validator={validator} formData={formData} />).toJSON(); expect(tree).toMatchSnapshot(); }); describe('with title and description', () => { test('object', () => { const schema: RJSFSchema = { type: 'object', ...titleAndDesc, properties: { a: { type: 'string', title: 'A', description: 'A description' }, b: { type: 'number', title: 'B', description: 'B description' }, }, }; const tree = renderer.create(<Form schema={schema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('additionalProperties', () => { const schema: RJSFSchema = { type: 'object', ...titleAndDesc, additionalProperties: true, }; const tree = renderer.create(<Form schema={schema} validator={validator} formData={{ foo: 'foo' }} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('show add button and fields if additionalProperties is true and not an object', () => { const schema: RJSFSchema = { ...titleAndDesc, additionalProperties: true, }; const formData: any = { additionalProperty: 'should appear', }; const tree = renderer.create(<Form schema={schema} validator={validator} formData={formData} />).toJSON(); expect(tree).toMatchSnapshot(); }); }); describe('with title and description from uiSchema', () => { test('object', () => { const schema: RJSFSchema = { type: 'object', properties: { a: { type: 'string', title: 'A' }, b: { type: 'number', title: 'B' }, }, }; const tree = renderer.create(<Form schema={schema} uiSchema={uiTitleAndDesc} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('additionalProperties', () => { const schema: RJSFSchema = { type: 'object', additionalProperties: true, }; const tree = renderer .create(<Form schema={schema} uiSchema={uiTitleAndDesc} validator={validator} formData={{ foo: 'foo' }} />) .toJSON(); expect(tree).toMatchSnapshot(); }); test('show add button and fields if additionalProperties is true and not an object', () => { const schema: RJSFSchema = { additionalProperties: true, }; const formData: any = { additionalProperty: 'should appear', }; const tree = renderer .create(<Form schema={schema} uiSchema={uiTitleAndDesc} validator={validator} formData={formData} />) .toJSON(); expect(tree).toMatchSnapshot(); }); }); describe('with title and description from both', () => { test('object', () => { const schema: RJSFSchema = { type: 'object', ...titleAndDesc, properties: { a: { type: 'string', title: 'A', description: 'A description' }, b: { type: 'number', title: 'B', description: 'B description' }, }, }; const tree = renderer.create(<Form schema={schema} uiSchema={uiTitleAndDesc} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('additionalProperties', () => { const schema: RJSFSchema = { type: 'object', ...titleAndDesc, additionalProperties: true, }; const tree = renderer .create(<Form schema={schema} uiSchema={uiTitleAndDesc} validator={validator} formData={{ foo: 'foo' }} />) .toJSON(); expect(tree).toMatchSnapshot(); }); }); describe('with title and description with global label off', () => { test('object', () => { const schema: RJSFSchema = { type: 'object', ...titleAndDesc, properties: { a: { type: 'string', title: 'A', description: 'A description' }, b: { type: 'number', title: 'B', description: 'B description' }, }, }; const tree = renderer.create(<Form schema={schema} uiSchema={labelsOff} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); test('additionalProperties', () => { const schema: RJSFSchema = { type: 'object', ...titleAndDesc, additionalProperties: true, }; const tree = renderer .create(<Form schema={schema} uiSchema={labelsOff} validator={validator} formData={{ foo: 'foo' }} />) .toJSON(); expect(tree).toMatchSnapshot(); }); test('show add button and fields if additionalProperties is true and not an object', () => { const schema: RJSFSchema = { ...titleAndDesc, additionalProperties: true, }; const formData: any = { additionalProperty: 'should appear', }; const tree = renderer .create(<Form schema={schema} uiSchema={labelsOff} validator={validator} formData={formData} />) .toJSON(); expect(tree).toMatchSnapshot(); }); }); }); } ������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/core/tsconfig.json��������������������������������������������0000664�0000000�0000000�00000000271�14467713645�0023225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": "../../tsconfig.base.json", "include": ["src"], "compilerOptions": { "rootDir": "./src", "outDir": "./lib", "baseUrl": "./", "jsx": "react-jsx" } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/���������������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0020516�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/.gitignore�����������������������������������������������0000664�0000000�0000000�00000000351�14467713645�0022505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Dependencies /node_modules # Production /build # Generated files .docusaurus .cache-loader # Misc .DS_Store .env.local .env.development.local .env.test.local .env.production.local npm-debug.log* yarn-debug.log* yarn-error.log* ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/README.md������������������������������������������������0000664�0000000�0000000�00000001135�14467713645�0021775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# react-jsonschema-form Documentation This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. ### Installation ``` $ npm install ``` ### Local Development ``` $ npm start ``` This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. ### Build ``` $ npm build ``` This command generates static content into the `build` directory and can be served using any static contents hosting service. ### Deployment Deployment is handled automatically by GitHub pages. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/babel.config.js������������������������������������������0000664�0000000�0000000�00000000131�14467713645�0023360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������module.exports = { presets: [require.resolve('@docusaurus/core/lib/babel/preset')], }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/����������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021446�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/00-introduction.mdx���������������������������������0000664�0000000�0000000�00000010664�14467713645�0025125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- id: intro title: Introduction slug: / --- # react-jsonschema-form ![Build Status](https://github.com/rjsf-team/react-jsonschema-form/workflows/CI/badge.svg) A simple [React](https://reactjs.org/) component capable of building HTML forms out of a [JSON schema](http://json-schema.org/). A [live playground](https://rjsf-team.github.io/react-jsonschema-form/) is hosted on GitHub Pages: <a target='_blank' href='https://rjsf-team.github.io/react-jsonschema-form/'> <img alt='Playground' src='https://i.imgur.com/M8ZCES5.gif'/> </a> ## Philosophy react-jsonschema-form is meant to automatically generate a React form based on a [JSON Schema](http://json-schema.org/). If you want to generate a form for any data, sight unseen, simply given a JSON schema, react-jsonschema-form may be for you. If you have _a priori_ knowledge of your data and want a toolkit for generating forms for it, you might look elsewhere. react-jsonschema-form also comes with tools such as `uiSchema` and other form props to customize the look and feel of the form beyond the default themes. ## Installation First install the dependencies from npm, along with a validator implementation (such as `@rjsf/validator-ajv8`): ```bash $ npm install @rjsf/core @rjsf/utils @rjsf/validator-ajv8 --save ``` Then import the dependencies as follows: ```ts import validator from '@rjsf/validator-ajv8'; import Form from '@rjsf/core'; ``` Our latest version requires React 16+. You can also install `react-jsonschema-form` (the 1.x version) which works with React 15+. ## Usage ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { title: 'Todo', type: 'object', required: ['title'], properties: { title: { type: 'string', title: 'Title', default: 'A new task' }, done: { type: 'boolean', title: 'Done?', default: false }, }, }; const log = (type) => console.log.bind(console, type); render( <Form schema={schema} validator={validator} onChange={log('changed')} onSubmit={log('submitted')} onError={log('errors')} />, document.getElementById('app') ); ``` ## Theming For more information on what themes we support, see [Using Themes](usage/themes). <!-- disabled until https://github.com/rjsf-team/react-jsonschema-form/issues/1584 is resolved ## Useful samples - Custom field template: <https://jsfiddle.net/hdp1kgn6/1/> - Multi-step wizard: <https://jsfiddle.net/sn4bnw9h/1/> - Using classNames with uiSchema: <https://jsfiddle.net/gfwp25we/1/> - Conditional fields: <https://jsfiddle.net/69z2wepo/88541/> - Advanced conditional fields: <https://jsfiddle.net/cowbellerina/zbfh96b1/> - Use radio list for enums: <https://jsfiddle.net/f2y3fq7L/2/> - Reading file input data: <https://jsfiddle.net/f9vcb6pL/1/> - Custom errors messages with transformErrors: <https://jsfiddle.net/revolunet/5r3swnr4/> - 2 columns form with CSS and FieldTemplate: <https://jsfiddle.net/n1k0/bw0ffnz4/1/> - Validate and submit form from external control: <https://jsfiddle.net/spacebaboon/g5a1re63/> - Custom component for Help text with `ui:help`: <https://codesandbox.io/s/14pqx97xl7/> - Collapsing / Showing and Hiding individual fields: <https://codesandbox.io/s/examplereactjsonschemaformcollapsefieldtemplate-t41dn> --> ## License Apache 2 ## Credits <table> <tr> <th> <img src="https://avatars1.githubusercontent.com/u/1066228?s=200&v=4" alt="mozilla-services-logo" style={{maxHeight: '100px'}} /> </th> <td> This project initially started as a <a href="https://github.com/mozilla-services">mozilla-services</a> project. </td> </tr> <tr> <th> <img src="https://user-images.githubusercontent.com/1689183/51487090-4ea04f80-1d57-11e9-9a91-79b7ef8d2013.png" alt='browserstack logo' style={{maxHeight: '100px'}}/> </th> <td> Testing is powered by <a href="https://www.browserstack.com/" >BrowserStack</a>. </td> </tr> <tr> <th> <img src="https://www.netlify.com/img/global/badges/netlify-color-accent.svg" alt='netlify logo' style={{maxHeight: '100px'}}/> </th> <td> Deploy Previews are provided by <a href="https://www.netlify.com">Netlify</a>. </td> </tr> </table> ## Who uses react-jsonschema-form? - ... Add your own company / organization by making a [pull request](https://github.com/rjsf-team/react-jsonschema-form/pulls). ����������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/01-quickstart.md������������������������������������0000664�0000000�0000000�00000010161�14467713645�0024377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Quickstart Let's walk through setup of a form after installing the dependency properly. NOTE: As of version 5, the `Form` now requires you to provide a `validator` implementation. We recommend the one from `@rjsf/validator-ajv8`. ## Form schema First, specify a schema using the [JSON Schema specification](https://json-schema.org/). The below schema renders a single string field: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { title: 'Test form', type: 'string', }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` You can also render an object with multiple fields with the below schema: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { title: 'Test form', type: 'object', properties: { name: { type: 'string', }, age: { type: 'number', }, }, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` For more information and examples of JSON Schema properties that this library supports, see [Using JSON Schema](json-schema/single.md). ## Form uiSchema The uiSchema is used to add more customization to the form's look and feel. Use the `classNames` attribute of the uiSchema to add a custom CSS class name to the form: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { title: 'Test form', type: 'string', }; const uiSchema: UiSchema = { 'ui:classNames': 'custom-css-class', }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` To customize object fields in the uiSchema, the structure of the uiSchema should be `{key: value}`, where `key` is the property key and `value` is an object with the uiSchema configuration for that particular property. For example: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { title: 'Test form', type: 'object', properties: { name: { type: 'string', }, age: { type: 'number', }, }, }; const uiSchema: UiSchema = { name: { 'ui:classNames': 'custom-class-name', }, age: { 'ui:classNames': 'custom-class-age', }, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ## Form initialization Often you'll want to prefill a form with existing data; this is done by passing a `formData` prop object matching the schema: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', properties: { title: { type: 'string', }, done: { type: 'boolean', }, }, }; const formData = { title: 'First task', done: true, }; render(<Form schema={schema} formData={formData} validator={validator} />, document.getElementById('app')); ``` > Note: If your form has a single field, pass a single value to `formData`. ex: `formData="Charlie"` > WARNING: If you have situations where your parent component can re-render, make sure you listen to the `onChange` event and update the data you pass to the `formData` attribute. ### Form event handlers You can use event handlers such as `onChange`, `onError`, `onSubmit`, `onFocus`, and `onBlur` on the `<Form />` component; see the [Form Props Reference](./api-reference/form-props.md) for more details. ### Controlled component By default, `<Form />` is an [uncontrolled component](https://reactjs.org/docs/uncontrolled-components.html). To make it a controlled component, use the `onChange` and `formData` props as in the below example: ```tsx import validator from '@rjsf/validator-ajv8'; const App = () => { const [formData, setFormData] = React.useState(null); return ( <Form schema={{ type: 'string' }} formData={formData} onChange={(e) => setFormData(e.formData)} validator={validator} /> ); }; render(<App />, document.getElementById('app')); ``` ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/advanced-customization/�����������������������������0000775�0000000�0000000�00000000000�14467713645�0026121�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/advanced-customization/custom-templates.md����������0000664�0000000�0000000�00000133312�14467713645�0031754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Custom Templates This is an advanced feature that lets you customize even more aspects of the form: | | Custom Field | Custom Template | Custom Widget | | --------------------- | ----------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------- | | **What it does** | Overrides all behaviour | Overrides just the layout (not behaviour) | Overrides just the input box (not layout, labels, or help, or validation) | | **Usage** | Global or per-field | Global or per-field | Global or per-field | | **Global Example** | `<Form fields={{ MyCustomField }} />` | `<Form templates={{ ArrayFieldTemplate: MyArrayTemplate }} />` | `<Form widgets={{ MyCustomWidget }} />` | | **Per-Field Example** | `"ui:field": MyCustomField` | `"ui:ArrayFieldTemplate": MyArrayTemplate` | `"ui:widget":MyCustomWidget` | | **Documentation** | [Custom Fields](custom-widgets-fields.md) | See documentation below | [Custom Widgets](custom-widgets-fields.md) | In version 5, all existing `templates` were consolidated into a new `TemplatesType` interface that is provided as part of the `Registry`. They can also be overloaded globally on the `Form` via the `templates` prop as well as globally or per-field through the `uiSchema`. Further, many new templates were added or repurposed from existing `widgets` and `fields` in an effort to simplify the effort needed by theme authors to build new and/or maintain current themes. These new templates can also be overridden by individual users to customize the specific needs of their application. A special category of templates, `ButtonTemplates`, were also added to support the easy replacement of the `Submit` button on the form, the `Add` and `Remove` buttons associated with `additionalProperties` on objects and elements of arrays, as well as the `Move up` and `Move down` buttons used for reordering arrays. This category, unlike the others, can only be overridden globally via the `templates` prop on `Form`. Below is the table that lists all the `templates`, their props interface, their `uiSchema` name and from where they originated in the previous version of RJSF: | Template\* | Props Type | UiSchema name | Origin | | ----------------------------------------------------------------- | ----------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [ArrayFieldTemplate](#arrayfieldtemplate) | ArrayFieldTemplateProps | ui:ArrayFieldTemplate | Formerly `Form.ArrayFieldTemplate` or `Registry.ArrayFieldTemplate` | | [ArrayFieldDescriptionTemplate\*](#arrayfielddescriptiontemplate) | ArrayFieldDescriptionProps | ui:ArrayFieldDescriptionTemplate | Formerly part of `@rjsf/core` ArrayField, refactored as a template, used in all `ArrayFieldTemplate` implementations | | [ArrayFieldItemTemplate\*](#arrayfielditemtemplate) | ArrayFieldTemplateItemType | ui:ArrayFieldItemTemplate | Formerly an internal class for `ArrayFieldTemplate`s in all themes, refactored as a template in each theme, used in all `ArrayFieldTemplate` implementations | | [ArrayFieldTitleTemplate\*](#arrayfieldtitletemplate) | ArrayFieldTitleProps | ui:ArrayFieldTitleTemplate | Formerly part of `@rjsf/core` ArrayField, refactored as a template, used in all `ArrayFieldTemplate` implementations. | | [BaseInputTemplate\*](#baseinputtemplate) | WidgetProps | ui:BaseInputTemplate | Formerly a `widget` in `@rjsf.core` moved to `templates` and newly implemented in each theme to maximize code reuse. | | [DescriptionFieldTemplate\*](#descriptionfieldtemplate) | DescriptionFieldProps | ui:DescriptionFieldTemplate | Formerly a `field` in `@rjsf.core` moved to `templates` with the `Template` suffix. Previously implemented in each theme. | | [ErrorListTemplate\*](#errorlisttemplate) | ErrorListProps | ui:ErrorListTemplate | Formerly `Form.ErrorList` moved to `templates` with the `Templates` suffix. Previously implemented in each theme. | | [FieldErrorTemplate\*](#fielderrortemplate) | FieldErrorProps | ui:FieldErrorTemplate | Formerly internal `ErrorList` component accessible only to `SchemaField` | | [FieldHelpTemplate\*](#fieldhelptemplate) | FieldHelpProps | ui:FieldHelpTemplate | Formerly internal `Help` component accessible only to `SchemaField` | | [FieldTemplate](#fieldtemplate) | FieldTemplateProps | ui:FieldTemplate | Formerly `Form.FieldTemplate` or `Registry.FieldTemplate` | | [ObjectFieldTemplate](#objectfieldtemplate) | ObjectFieldTemplateProps | ui:ObjectFieldTemplate | Formerly `Form.ObjectFieldTemplate` or `Registry.ObjectFieldTemplate` | | [TitleFieldTemplate\*](#titlefieldtemplate) | TitleFieldProps | ui:TitleFieldTemplate | Formerly a `field` in `@rjsf.core` moved to `templates` with the `Template` suffix. Previously implemented in each theme. | | [UnsupportedFieldTemplate\*](#unsupportedfieldtemplate) | UnsupportedFieldProps | ui:UnsupportedFieldTemplate | Formerly a `field` in `@rjsf.core` moved to `templates` with the `Template` suffix. | | [WrapIfAdditionalTemplate\*](#wrapifadditionaltemplate) | WrapIfAdditionalTemplateProps | ui:WrapIfAdditionalTemplate | Formerly an internal component in `@rjsf.core`. Previously implemented in most themes. | | [ButtonTemplates.AddButton\*](#addbutton) | IconButtonProps | n/a | Formerly an internal implementation in each theme | | [ButtonTemplates.MoveDownButton\*](#movedownbutton) | IconButtonProps | n/a | Formerly an internal implementation in each theme | | [ButtonTemplates.MoveUpButton\*](#moveupbutton) | IconButtonProps | n/a | Formerly an internal implementation in each theme | | [ButtonTemplates.RemoveButton\*](#removebutton) | IconButtonProps | n/a | Formerly an internal implementation in each theme | | [ButtonTemplates.SubmitButton\*](#submitbutton) | SubmitButtonProps | n/a | Formerly a `field` in each theme move to `templates.ButtonTemplates` | \* indicates a new template in version 5 ## ArrayFieldTemplate You can use an `ArrayFieldTemplate` to customize how your arrays are rendered. This allows you to customize your array, and each element in the array. If you only want to customize how the array's title, description or how the array items are presented, you may want to consider providing your own [ArrayFieldDescriptionTemplate](#arrayfielddescriptiontemplate), [ArrayFieldItemTemplate](#arrayfielditemtemplate) and/or [ArrayFieldTitleTemplate](#arrayfieldtitletemplate) instead. You can also customize arrays by specifying a widget in the relevant `ui:widget` schema, more details over on [Custom Widgets](../json-schema/arrays.md#custom-widgets). ```tsx import { ArrayFieldTemplateProps, RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; function ArrayFieldTemplate(props: ArrayFieldTemplateProps) { return ( <div> {props.items.map((element) => element.children)} {props.canAdd && <button type='button' onClick={props.onAddClick}></button>} </div> ); } render( <Form schema={schema} validator={validator} templates={{ ArrayFieldTemplate }} />, document.getElementById('app') ); ``` You also can provide your own field template to a uiSchema by specifying a `ui:ArrayFieldTemplate` property. ```tsx import { UiSchema } from '@rjsf/utils'; const uiSchema: UiSchema = { 'ui:ArrayFieldTemplate': ArrayFieldTemplate, }; ``` Please see the [customArray.tsx sample](https://github.com/rjsf-team/react-jsonschema-form/blob/main/packages/playground/src/samples/customArray.tsx) from the [playground](https://rjsf-team.github.io/react-jsonschema-form/) for another example. The following props are passed to each `ArrayFieldTemplate`: - `canAdd`: A boolean value stating whether new elements can be added to the array. - `className`: The className string. - `disabled`: A boolean value stating if the array is disabled. - `idSchema`: An object containing the id for this object & ids for its properties - `items`: An array of objects representing the items in the array. Each of the items represent a child with properties described below. - `onAddClick: (event?) => void`: A function that adds a new item to the array. - `readonly`: A boolean value stating if the array is read-only. - `required`: A boolean value stating if the array is required. - `hideError`: A boolean value stating if the field is hiding its errors. - `schema`: The schema object for this array. - `uiSchema`: The uiSchema object for this array field. - `title`: A string value containing the title for the array. - `formContext`: The `formContext` object that you passed to Form. - `formData`: The formData for this array. - `rawErrors`: An array of strings listing all generated error messages from encountered errors for this widget - `registry`: The `registry` object. The following props are part of each element in `items`: - `children`: The html for the item's content. - `className`: The className string. - `disabled`: A boolean value stating if the array item is disabled. - `hasCopy`: A boolean value stating whether the array item can be copied. - `hasMoveDown`: A boolean value stating whether the array item can be moved down. - `hasMoveUp`: A boolean value stating whether the array item can be moved up. - `hasRemove`: A boolean value stating whether the array item can be removed. - `hasToolbar`: A boolean value stating whether the array item has a toolbar. - `index`: A number stating the index the array item occurs in `items`. - `key`: A stable, unique key for the array item. - `onAddIndexClick: (index) => (event?) => void`: Returns a function that adds a new item at `index`. - `onDropIndexClick: (index) => (event?) => void`: Returns a function that removes the item at `index`. - `onReorderClick: (index, newIndex) => (event?) => void`: Returns a function that swaps the items at `index` with `newIndex`. - `readonly`: A boolean value stating if the array item is read-only. - `uiSchema`: The uiSchema object for this array item. - `registry`: The `registry` object. > Note: Array and object field templates are always rendered inside the FieldTemplate. To fully customize an array field template, you may need to specify both `ui:FieldTemplate` and `ui:ArrayFieldTemplate`. ## ArrayFieldDescriptionTemplate The out-of-the-box version of this template will render the `DescriptionFieldTemplate` with a generated id, if there is a `description` otherwise nothing is rendered. If you want different behavior for the rendering of the description of an array field, you can customize this template. If you want a different behavior for the rendering of ALL descriptions in the `Form`, see [DescriptionFieldTemplate](#descriptionfieldtemplate) ```tsx import { ArrayFieldDescriptionProps, RJSFSchema, descriptionId } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; function ArrayFieldDescriptionTemplate(props: ArrayFieldDescriptionProps) { const { description, idSchema } = props; const id = descriptionId(idSchema); return ( <details id={id}> <summary>Description</summary> {description} </details> ); } render( <Form schema={schema} validator={validator} templates={{ ArrayFieldDescriptionTemplate }} />, document.getElementById('app') ); ``` You also can provide your own template to a uiSchema by specifying a `ui:ArrayFieldDescriptionTemplate` property. ```tsx import { UiSchema } from '@rjsf/utils'; const uiSchema: UiSchema = { 'ui:ArrayFieldDescriptionTemplate': ArrayFieldDescriptionTemplate, }; ``` The following props are passed to each `ArrayFieldDescriptionTemplate`: - `description`: The description of the array field being rendered. - `idSchema`: The idSchema of the array field in the hierarchy. - `schema`: The schema object for this array field. - `uiSchema`: The uiSchema object for this array field. - `registry`: The `registry` object. ## ArrayFieldItemTemplate The `ArrayFieldItemTemplate` is used to render the representation of a single item in an array. All of the `ArrayFieldTemplate` implementations in all themes get this template from the `registry` in order to render array fields items. Each theme has an implementation of the `ArrayFieldItemTemplate` to render an array field item in a manner best suited to the theme. If you want to change how an array field item is rendered you can customize this template (for instance to remove the move up/down and remove buttons). ```tsx import { ArrayFieldTemplateItemType, RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; function ArrayFieldItemTemplate(props: ArrayFieldTemplateItemType) { const { children, className } = props; return <div className={className}>{children}</div>; } render( <Form schema={schema} validator={validator} templates={{ ArrayFieldItemTemplate }} />, document.getElementById('app') ); ``` The following props are passed to each `ArrayFieldItemTemplate`: - `children`: The html for the item's content. - `className`: The className string. - `disabled`: A boolean value stating if the array item is disabled. - `canAdd`: A boolean value stating whether new items can be added to the array. - `hasCopy`: A boolean value stating whether the array item can be copied. - `hasMoveDown`: A boolean value stating whether the array item can be moved down. - `hasMoveUp`: A boolean value stating whether the array item can be moved up. - `hasRemove`: A boolean value stating whether the array item can be removed. - `hasToolbar`: A boolean value stating whether the array item has a toolbar. - `index`: A number stating the index the array item occurs in `items`. - `totalItems`: A number stating the total number `items` in the array. - `key`: A stable, unique key for the array item. - `onAddIndexClick: (index) => (event?) => void`: Returns a function that adds a new item at `index`. - `onDropIndexClick: (index) => (event?) => void`: Returns a function that removes the item at `index`. - `onReorderClick: (index, newIndex) => (event?) => void`: Returns a function that swaps the items at `index` with `newIndex`. - `readonly`: A boolean value stating if the array item is read-only. - `schema`: The schema object for this array item. - `uiSchema`: The uiSchema object for this array item. - `registry`: The `registry` object. ## ArrayFieldTitleTemplate The out-of-the-box version of this template will render the `TitleFieldTemplate` with a generated id, if there is a `title` otherwise nothing is rendered. If you want a different behavior for the rendering of the title of an array field, you can customize this template. If you want a different behavior for the rendering of ALL titles in the `Form`, see [TitleFieldTemplate](#titlefieldtemplate) ```tsx import { ArrayFieldTitleTemplateProps, RJSFSchema, titleId } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; function ArrayFieldTitleTemplate(props: ArrayFieldTitleProps) { const { title, idSchema } = props; const id = titleId(idSchema); return <h1 id={id}>{title}</h1>; } render( <Form schema={schema} validator={validator} templates={{ ArrayFieldTitleTemplate }} />, document.getElementById('app') ); ``` You also can provide your own template to a uiSchema by specifying a `ui:ArrayFieldDescriptionTemplate` property. ```tsx import { UiSchema } from '@rjsf/utils'; const uiSchema: UiSchema = { 'ui:ArrayFieldTitleTemplate': ArrayFieldTitleTemplate, }; ``` The following props are passed to each `ArrayFieldTitleTemplate`: - `title`: The title of the array field being rendered. - `idSchema`: The idSchema of the array field in the hierarchy. - `schema`: The schema object for this array field. - `uiSchema`: The uiSchema object for this array field. - `required`: A boolean value stating if the field is required - `registry`: The `registry` object. ## BaseInputTemplate The `BaseInputTemplate` is the template to use to render the basic `<input>` component for a theme. It is used as the template for rendering many of the `<input>` based widgets that differ by `type` and callbacks only. For example, the `TextWidget` implementation in `core` is simply a wrapper around `BaseInputTemplate` that it gets from the `registry`. Additionally, each theme implements its own version of `BaseInputTemplate` without needing to provide a different implementation of `TextWidget`. If you desire a different implementation for the `<input>` based widgets, you can customize this template. For instance, say you have a `CustomTextInput` component that you want to integrate: ```tsx import { ChangeEvent, FocusEvent } from 'react'; import { getInputProps, RJSFSchema, BaseInputTemplateProps } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; import CustomTextInput from '../CustomTextInput'; const schema: RJSFSchema = { type: 'string', title: 'My input', description: 'input description', }; function BaseInputTemplate(props: BaseInputTemplateProps) { const { schema, id, options, label, value, type, placeholder, required, disabled, readonly, autofocus, onChange, onChangeOverride, onBlur, onFocus, rawErrors, hideError, uiSchema, registry, formContext, ...rest } = props; const onTextChange = ({ target: { value: val } }: ChangeEvent<HTMLInputElement>) => { // Use the options.emptyValue if it is specified and newVal is also an empty string onChange(val === '' ? options.emptyValue || '' : val); }; const onTextBlur = ({ target: { value: val } }: FocusEvent<HTMLInputElement>) => onBlur(id, val); const onTextFocus = ({ target: { value: val } }: FocusEvent<HTMLInputElement>) => onFocus(id, val); const inputProps = { ...rest, ...getInputProps(schema, type, options) }; const hasError = rawErrors.length > 0 && !hideError; return ( <CustomTextInput id={id} label={label} value={value} placeholder={placeholder} disabled={disabled} readOnly={readonly} autoFocus={autofocus} error={hasError} errors={hasError ? rawErrors : undefined} onChange={onChangeOverride || onTextChange} onBlur={onTextBlur} onFocus={onTextFocus} {...inputProps} /> ); } render( <Form schema={schema} validator={validator} templates={{ BaseInputTemplate }} />, document.getElementById('app') ); ``` Sometimes you just need to pass some additional properties to the existing `BaseInputTemplate`. The way to do this varies based upon whether you are using `core` or some other theme (such as `mui`): ```tsx import { BaseInputTemplateProps } from '@rjsf/utils'; import { getDefaultRegistry } from '@rjsf/core'; import { Templates } from '@rjsf/mui'; const { templates: { BaseInputTemplate }, } = getDefaultRegistry(); // To get templates from core // const { BaseInputTemplate } = Templates; // To get templates from a theme do this function MyBaseInputTemplate(props: BaseInputTemplateProps) { const customProps = {}; // get your custom props from where you need to return <BaseInputTemplate {...props} {...customProps} />; } ``` The following props are passed to the `BaseInputTemplate`: - `id`: The generated id for this widget; - `schema`: The JSONSchema subschema object for this widget; - `uiSchema`: The uiSchema for this widget; - `value`: The current value for this widget; - `placeholder`: The placeholder for the widget, if any; - `required`: The required status of this widget; - `disabled`: A boolean value stating if the widget is disabled; - `hideError`: A boolean value stating if the widget is hiding its errors. - `readonly`: A boolean value stating if the widget is read-only; - `autofocus`: A boolean value stating if the widget should autofocus; - `label`: The computed label for this widget, as a string - `multiple`: A boolean value stating if the widget can accept multiple values; - `onChange`: The value change event handler; call it with the new value every time it changes; - `onChangeOverride`: A `BaseInputTemplate` implements a default `onChange` handler that it passes to the HTML input component to handle the `ChangeEvent`. Sometimes a widget may need to handle the `ChangeEvent` using custom logic. If that is the case, that widget should provide its own handler via this prop; - `onKeyChange`: The key change event handler (only called for fields with `additionalProperties`); pass the new value every time it changes; - `onBlur`: The input blur event handler; call it with the widget id and value; - `onFocus`: The input focus event handler; call it with the widget id and value; - `options`: A map of options passed as a prop to the component (see [Custom widget options](./custom-widgets-fields.md#custom-widget-options)). - `options.enumOptions`: For enum fields, this property contains the list of options for the enum as an array of { label, value } objects. If the enum is defined using the oneOf/anyOf syntax, the entire schema object for each option is appended onto the { schema, label, value } object. - `formContext`: The `formContext` object that you passed to `Form`. - `rawErrors`: An array of strings listing all generated error messages from encountered errors for this widget. - `registry`: The `registry` object ## DescriptionFieldTemplate Each theme implements a `DescriptionFieldTemplate` used to render the description of a field. If you want to customize how descriptions are rendered you can. ```tsx import { DescriptionFieldProps, RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', title: 'My input', description: 'input description', }; function DescriptionFieldTemplate(props: DescriptionFieldProps) { const { description, id } = props; return ( <details id={id}> <summary>Description</summary> {description} </details> ); } render( <Form schema={schema} validator={validator} templates={{ DescriptionFieldTemplate }} />, document.getElementById('app') ); ``` The following props are passed to the `DescriptionFieldTemplate`: - `description`: The description of the field being rendered. - `id`: The id of the field in the hierarchy. - `schema`: The schema object for the field. - `uiSchema`: The uiSchema object for the field. - `registry`: The `registry` object. ## ErrorListTemplate The `ErrorListTemplate` is the template that renders the all the errors associated with the fields in the `Form`, at the top. Each theme implements a `ErrorListTemplate` used to render its errors using components for the theme's toolkit. If you want to customize how all the errors are rendered you can. ```tsx import { ErrorListProps, RJSFValidationError, RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', title: 'My input', description: 'input description', }; function ErrorListTemplate(props: ErrorListProps) { const { errors } = props; return ( <details id={id}> <summary>Errors</summary> <ul> {errors.map((error: RJSFValidationError, i: number) => { return ( <li key={i} className='error'> {error.stack} </li> ); })} </ul> </details> ); } render( <Form schema={schema} validator={validator} templates={{ DescriptionFieldTemplate }} />, document.getElementById('app') ); ``` The following props are passed to the `ErrorListTemplate`: - `schema`: The schema that was passed to `Form` - `uiSchema`: The uiSchema that was passed to `Form` - `formContext`: The `formContext` object that you passed to `Form`. - `errors`: An array of all errors in this `Form`. - `errorSchema`: The `ErrorSchema` constructed by `Form` ## FieldErrorTemplate The `FieldErrorTemplate` is the template that renders all the errors associated a single field. If you want to customize how the errors are rendered you can. ```tsx import { FieldErrorProps, RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', title: 'My input', description: 'input description', }; function FieldErrorTemplate(props: FieldErrorProps) { const { errors } = props; return ( <details id={id}> <summary>Errors</summary> <ul> {errors.map((error: string, i: number) => { return ( <li key={i} className='error'> {error.stack} </li> ); })} </ul> </details> ); } render( <Form schema={schema} validator={validator} templates={{ FieldErrorTemplate }} />, document.getElementById('app') ); ``` The following props are passed to the `FieldErrorTemplate`: - `schema`: The schema for the field - `uiSchema`: The uiSchema for the field - `idSchema`: An object containing the id for this field & ids for its properties. - `errors`: An array of all errors for this field - `errorSchema`: The `ErrorSchema` for this field - `registry`: The `Registry` object ## FieldHelpTemplate The `FieldHelpTemplate` is the template that renders the help associated a single field. If you want to customize how the help is rendered you can. ```tsx import { FieldHelpProps, RJSFSchema, helpId } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', title: 'My input', description: 'input description', }; function FieldHelpTemplate(props: FieldHelpProps) { const { help, idSchema } = props; const id = helpId(idSchema); return <aside id={id}>{help}</aside>; } render( <Form schema={schema} validator={validator} templates={{ FieldHelpTemplate }} />, document.getElementById('app') ); ``` The following props are passed to the `FieldHelpTemplate`: - `schema`: The schema for the field - `uiSchema`: The uiSchema for the field - `idSchema`: An object containing the id for this field & ids for its properties. - `help`: The help information to be rendered - `registry`: The `Registry` object ## FieldTemplate To take control over the inner organization of each field (each form row), you can define a _field template_ for your form. A field template is basically a React stateless component being passed field-related props, allowing you to structure your form row as you like. ```tsx import { FieldTemplateProps, RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; function CustomFieldTemplate(props: FieldTemplateProps) { const { id, classNames, style, label, help, required, description, errors, children } = props; return ( <div className={classNames} style={style}> <label htmlFor={id}> {label} {required ? '*' : null} </label> {description} {children} {errors} {help} </div> ); } render( <Form schema={schema} validator={validator} templates={{ FieldTemplate: CustomFieldTemplate }} />, document.getElementById('app') ); ``` You also can provide your own field template to a uiSchema by specifying a `ui:FieldTemplate` property. ```tsx import { UiSchema } from '@rjsf/utils'; const uiSchema: UiSchema = { 'ui:FieldTemplate': CustomFieldTemplate, }; ``` If you want to handle the rendering of each element yourself, you can use the props `rawHelp`, `rawDescription` and `rawErrors`. The following props are passed to a custom field template component: - `id`: The id of the field in the hierarchy. You can use it to render a label targeting the wrapped widget. - `classNames`: A string containing the base Bootstrap CSS classes, merged with any [custom ones](../api-reference/uiSchema.md#classnames) defined in your uiSchema. - `style`: An object containing the `StyleHTMLAttributes` defined in the `uiSchema`. - `label`: The computed label for this field, as a string. - `description`: A component instance rendering the field description, if one is defined (this will use any [custom `DescriptionFieldTemplate`](#descriptionfieldtemplate) defined in the `templates` passed to the `Form`). - `rawDescription`: A string containing any `ui:description` uiSchema directive defined. - `children`: The field or widget component instance for this field row. - `hideError`: A boolean value stating if the field is hiding its errors. - `errors`: A component instance listing any encountered errors for this field. - `rawErrors`: An array of strings listing all generated error messages from encountered errors for this field. - `help`: A component instance rendering any `ui:help` uiSchema directive defined. - `rawHelp`: A string containing any `ui:help` uiSchema directive defined. **NOTE:** `rawHelp` will be `undefined` if passed `ui:help` is a React component instead of a string. - `hidden`: A boolean value stating if the field should be hidden. - `required`: A boolean value stating if the field is required. - `readonly`: A boolean value stating if the field is read-only. - `hideError`: A boolean value stating if the field is hiding its errors - `disabled`: A boolean value stating if the field is disabled. - `displayLabel`: A boolean value stating if the label should be rendered or not. This is useful for nested fields in arrays where you don't want to clutter the UI. - `schema`: The schema object for this field. - `uiSchema`: The uiSchema object for this field. - `onChange`: The value change event handler; Can be called with a new value to change the value for this field. - `formContext`: The `formContext` object that you passed to `Form`. - `formData`: The formData for this field. - `registry`: The `registry` object. > Note: you can only define a single global field template for a form, but you can set individual field templates per property using `"ui:FieldTemplate"`. ## ObjectFieldTemplate ```tsx import { ObjectFieldTemplateProps, RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', title: 'Object title', description: 'Object description', properties: { name: { type: 'string', }, age: { type: 'number', }, }, }; function ObjectFieldTemplate(props: ObjectFieldTemplateProps) { return ( <div> {props.title} {props.description} {props.properties.map((element) => ( <div className='property-wrapper'>{element.content}</div> ))} </div> ); } render( <Form schema={schema} validator={validator} templates={{ ObjectFieldTemplate }} />, document.getElementById('app') ); ``` You also can provide your own field template to a uiSchema by specifying a `ui:ObjectFieldTemplate` property. ```tsx import { UiSchema } from '@rjsf/utils'; const uiSchema: UiSchema = { 'ui:ObjectFieldTemplate': ObjectFieldTemplate, }; ``` Please see the [customObject.tsx sample](https://github.com/rjsf-team/react-jsonschema-form/blob/main/packages/playground/src/samples/customObject.tsx) from the [playground](https://rjsf-team.github.io/react-jsonschema-form/) for a better example. The following props are passed to each `ObjectFieldTemplate` as defined by the `ObjectFieldTemplateProps` in `@rjsf/utils`: - `title`: A string value containing the title for the object. - `description`: A string value containing the description for the object. - `disabled`: A boolean value stating if the object is disabled. - `properties`: An array of object representing the properties in the object. Each of the properties represent a child with properties described below. - `onAddClick: (schema: RJSFSchema) => () => void`: Returns a function that adds a new property to the object (to be used with additionalProperties) - `readonly`: A boolean value stating if the object is read-only. - `required`: A boolean value stating if the object is required. - `hideError`: A boolean value stating if the field is hiding its errors. - `schema`: The schema object for this object. - `uiSchema`: The uiSchema object for this object field. - `idSchema`: An object containing the id for this object & ids for its properties. - `errorSchema`: The optional validation errors in the form of an `ErrorSchema` - `formData`: The form data for the object. - `formContext`: The `formContext` object that you passed to Form. - `registry`: The `registry` object. The following props are part of each element in `properties`: - `content`: The html for the property's content. - `name`: A string representing the property name. - `disabled`: A boolean value stating if the object property is disabled. - `readonly`: A boolean value stating if the property is read-only. - `hidden`: A boolean value stating if the property should be hidden. > Note: Array and object field templates are always rendered inside the FieldTemplate. To fully customize an object field template, you may need to specify both `ui:FieldTemplate` and `ui:ObjectFieldTemplate`. ## TitleFieldTemplate Each theme implements a `TitleFieldTemplate` used to render the title of a field. If you want to customize how titles are rendered you can. ```tsx import { RJSFSchema, TitleFieldProps } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', title: 'My input', description: 'input description', }; function TitleFieldTemplate(props: TitleFieldProps) { const { id, required, title } = props; return ( <header id={id}> {title} {required && <mark>*</mark>} </header> ); } render( <Form schema={schema} validator={validator} templates={{ TitleFieldTemplate }} />, document.getElementById('app') ); ``` The following props are passed to each `TitleFieldTemplate`: - `id`: The id of the field in the hierarchy. - `title`: The title of the field being rendered. - `schema`: The schema object for the field. - `uiSchema`: The uiSchema object for the field. - `required`: A boolean value stating if the field is required - `registry`: The `registry` object. ## UnsupportedFieldTemplate The `UnsupportedField` component is used to render a field in the schema is one that is not supported by react-jsonschema-form. If you want to customize how an unsupported field is rendered (perhaps for localization purposes) you can. ```tsx import { RJSFSchema, UnsupportedFieldProps } from '@rjsf/utils'; import { FormattedMessage } from 'react-intl'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'invalid', }; function UnsupportedFieldTemplate(props: UnsupportedFieldProps) { const { schema, reason } = props; return ( <div> <FormattedMessage defaultMessage='Unsupported field schema, reason = {reason}' value={{ reason }} /> <pre>{JSON.stringify(schema, null, 2)}</pre> </div> ); } render( <Form schema={schema} validator={validator} templates={{ UnsupportedFieldTemplate }} />, document.getElementById('app') ); ``` The following props are passed to each `UnsupportedFieldTemplate`: - `schema`: The schema object for this unsupported field. - `idSchema`: An object containing the id for this unsupported field. - `reason`: The reason why the schema field has an unsupported type. - `registry`: The `registry` object. ## WrapIfAdditionalTemplate The `WrapIfAdditionalTemplate` is used by the `FieldTemplate` to conditionally render additional controls if `additionalProperties` is present in the schema. You may customize `WrapIfAdditionalTemplate` if you wish to change the layout or behavior of user-controlled `additionalProperties`. ```tsx import { RJSFSchema, WrapIfAdditionalTemplateProps } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', additionalProperties: true, }; function WrapIfAdditionalTemplate(props: WrapIfAdditionalTemplateProps) { const { id, label, onKeyChange, onDropPropertyClick, schema, children, uiSchema, registry, classNames, style } = props; const { RemoveButton } = registry.templates.ButtonTemplates; const additional = ADDITIONAL_PROPERTY_FLAG in schema; if (!additional) { return <div>{children}</div>; } return ( <div className={classNames} style={style}> <label label={keyLabel} id={`${id}-key`}> Custom Field Key </label> <input className='form-control' type='text' id={`${id}-key`} onBlur={function (event) { onKeyChange(event.target.value); }} defaultValue={label} /> <div>{children}</div> <RemoveButton onClick={onDropPropertyClick(label)} uiSchema={uiSchema} /> </div> ); } render( <Form schema={schema} validator={validator} templates={{ WrapIfAdditionalTemplate }} />, document.getElementById('app') ); ``` The following props are passed to the `WrapIfAdditionalTemplate`: - `children`: The children of the component, typically specified by the `FieldTemplate`. - `id`: The id of the field in the hierarchy. You can use it to render a label targeting the wrapped widget. - `classNames`: A string containing the base Bootstrap CSS classes, merged with any [custom ones](../api-reference/uiSchema.md#classnames) defined in your uiSchema. - `style`: An object containing the `StyleHTMLAttributes` defined in the `uiSchema`. - `label`: The computed label for this field, as a string. - `required`: A boolean value stating if the field is required. - `readonly`: A boolean value stating if the field is read-only. - `disabled`: A boolean value stating if the field is disabled. - `schema`: The schema object for this field. - `uiSchema`: The uiSchema object for this field. - `onKeyChange`: A function that, when called, changes the current property key to the specified value - `onDropPropertyClick`: A function that, when called, removes the key from the formData. ## ButtonTemplates There are several buttons that are potentially rendered in the `Form`. Each of these buttons have been customized in the themes, and can be customized by you as well. All but one of these buttons (i.e. the `SubmitButton`) are rendered currently as icons with title text for a description. Each button template (except for the `SubmitButton`) accepts, as props, the standard [HTML button attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button) along with the following: - `iconType`: An alternative specification for the type of the icon button. - `icon`: The name representation or actual react element implementation for the icon. - `uiSchema`: The uiSchema object for this field. - `registry`: The `registry` object. ### AddButton The `AddButton` is used to render an add action on a `Form` for both a new `additionalProperties` element for an object or a new element in an array. You can customize the `AddButton` to render something other than the icon button that is provided by a theme as follows: ```tsx import React from 'react'; import { IconButtonProps, RJSFSchema } from '@rjsf/utils'; import { FormattedMessage } from 'react-intl'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; function AddButton(props: IconButtonProps) { const { icon, iconType, ...btnProps } = props; return ( <button {...btnProps}> {icon} <FormattedMessage defaultMessage='Add' /> </button> ); } render( <Form schema={schema} validator={validator} templates={{ ButtonTemplates: { AddButton } }} />, document.getElementById('app') ); ``` ### MoveDownButton The `MoveDownButton` is used to render a move down action on a `Form` for elements in an array. You can customize the `MoveDownButton` to render something other than the icon button that is provided by a theme as follows: ```tsx import React from 'react'; import { IconButtonProps, RJSFSchema } from '@rjsf/utils'; import { FormattedMessage } from 'react-intl'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; function MoveDownButton(props: IconButtonProps) { const { icon, iconType, ...btnProps } = props; return ( <button {...btnProps}> {icon} <FormattedMessage defaultMessage='Move Down' /> </button> ); } render( <Form schema={schema} validator={validator} templates={{ ButtonTemplates: { MoveDownButton } }} />, document.getElementById('app') ); ``` ### MoveUpButton The `MoveUpButton` is used to render a move up action on a `Form` for elements in an array. You can customize the `MoveUpButton` to render something other than the icon button that is provided by a theme as follows: ```tsx import React from 'react'; import { IconButtonProps, RJSFSchema } from '@rjsf/utils'; import { FormattedMessage } from 'react-intl'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; function MoveUpButton(props: IconButtonProps) { const { icon, iconType, ...btnProps } = props; return ( <button {...btnProps}> {icon} <FormattedMessage defaultMessage='Move Up' /> </button> ); } render( <Form schema={schema} validator={validator} templates={{ ButtonTemplates: { MoveUpButton } }} />, document.getElementById('app') ); ``` ### RemoveButton The `RemoveButton` is used to render a remove action on a `Form` for both a existing `additionalProperties` element for an object or an existing element in an array. You can customize the `RemoveButton` to render something other than the icon button that is provided by a theme as follows: ```tsx import React from 'react'; import { IconButtonProps, RJSFSchema } from '@rjsf/utils'; import { FormattedMessage } from 'react-intl'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; function RemoveButton(props: IconButtonProps) { const { icon, iconType, ...btnProps } = props; return ( <button {...btnProps}> {icon} <FormattedMessage defaultMessage='Remove' /> </button> ); } render( <Form schema={schema} validator={validator} templates={{ ButtonTemplates: { RemoveButton } }} />, document.getElementById('app') ); ``` ### SubmitButton The `SubmitButton` is already very customizable via the `UISchemaSubmitButtonOptions` capabilities in the `uiSchema` but it can also be fully customized as you see fit. > NOTE: However you choose to implement this, making it something other than a `submit` type `button` may result in the `Form` not submitting when pressed. > You could also choose to provide your own submit button as the [children prop](../api-reference/form-props.md#children) of the `Form` should you so choose. ```tsx import React from 'react'; import { getSubmitButtonOptions, RJSFSchema, SubmitButtonProps } from '@rjsf/utils'; import { FormattedMessage } from 'react-intl'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; function SubmitButton(props: SubmitButtonProps) { const { uiSchema } = props; const { norender } = getSubmitButtonOptions(uiSchema); if (norender) { return null; } return ( <button type='submit'> <FormattedMessage defaultMessage='Okay' /> </button> ); } render( <Form schema={schema} validator={validator} templates={{ ButtonTemplates: { SubmitButton } }} />, document.getElementById('app') ); ``` The following prop is passed to a `SubmitButton`: - `uiSchema`: The uiSchema object for this field, used to extract the `UISchemaSubmitButtonOptions`. - `registry`: The `registry` object. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/advanced-customization/custom-themes.md�������������0000664�0000000�0000000�00000010276�14467713645�0031246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Custom Themes The `withTheme` component provides an easy way to extend the functionality of react-jsonschema-form by passing in a theme object that defines custom/overridden widgets and fields, as well as any of the other possible properties of the standard rjsf `Form` component. This theme-defining object is passed as the only parameter to the HOC (`withTheme(ThemeObj)`), and the HOC will return a themed-component which you use instead of the standard `Form` component. ## Usage ```tsx import React, { Component } from 'react'; import validator from '@rjsf/validator-ajv8'; import { withTheme, ThemeProps } from '@rjsf/core'; const theme: ThemeProps = { widgets: { test: () => <div>test</div> } }; const ThemedForm = withTheme(theme); const Demo = () => <ThemedForm schema={schema} uiSchema={uiSchema} validator={validator} />; ``` ## Theme object properties The Theme object consists of the same properties as the rjsf `Form` component (such as **widgets**, **fields** and **templates**). The themed-Form component merges together any theme-specific **widgets**, **fields** and **templates** with the default **widgets**, **fields** and **templates**. For instance, providing a single widget in **widgets** will merge this widget with all the default widgets of the rjsf `Form` component, but overrides the default if the theme's widget's name matches the default widget's name. Thus, for each default widget or field not specified/overridden, the themed-form will rely on the defaults from the rjsf `Form`. Note that you are not required to pass in either custom **widgets**, **fields** or **templates** when using the custom-themed HOC component; you can essentially redefine the default Form by simply doing `const Form = withTheme({});`. ### Widgets and fields **widgets** and **fields** should be in the same format as shown [here](./custom-widgets-fields.md). Example theme with custom widget: ```tsx import { WidgetProps, RegistryWidgetsType } from '@rjsf/utils'; import { ThemeProps } from '@rjsf/core'; const MyCustomWidget = (props: WidgetProps) => { return ( <input type='text' className='custom' value={props.value} required={props.required} onChange={(event) => props.onChange(event.target.value)} /> ); }; const myWidgets: RegistryWidgetsType = { myCustomWidget: MyCustomWidget, }; const ThemeObject: ThemeProps = { widgets: myWidgets }; export default ThemeObject; ``` The above can be similarly done for **fields** and **templates**. ### Templates Each template should be passed into the theme object via the **templates** object just as you would into the rjsf Form component. Here is an example of how to use a custom [ArrayFieldTemplate](./custom-templates.md#arrayfieldtemplate) and [ErrorListTemplate](./custom-templates.md#errorlisttemplate) in the theme object: ```tsx import { ArrayFieldTemplateProps, ErrorListProps } from '@rjsf/utils'; import { ThemeProps } from '@rjsf/core'; function MyArrayFieldTemplate(props: ArrayFieldTemplateProps) { return ( <div> {props.items.map((element) => element.children)} {props.canAdd && <button type='button' onClick={props.onAddClick}></button>} </div> ); } function MyErrorListTemplate(props: ErrorListProps) { const { errors } = props; return ( <ul> {errors.map((error) => ( <li key={error.stack}>{error.stack}</li> ))} </ul> ); } const ThemeObject: ThemeProps = { templates: { ArrayFieldTemplate: MyArrayFieldTemplate, ErrorListTemplate: MyErrorListTemplate, }, widgets: myWidgets, }; export default ThemeObject; ``` ## Overriding other Form props Just as the theme can override **widgets**, **fields**, any of the **templates**, and set default values to properties like **showErrorList**, you can do the same with the instance of the withTheme() Form component. ```tsx import { ThemeProps } from '@rjsf/core'; const ThemeObject: ThemeProps = { templates: { ArrayFieldTemplate: MyArrayFieldTemplate, }, fields: myFields, showErrorList: false, widgets: myWidgets, }; ``` Thus, the user has higher priority than the withTheme HOC, and the theme has higher priority than the default values of the rjsf Form component (**User** > **Theme** > **Defaults**). ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/advanced-customization/custom-widgets-fields.md�����0000664�0000000�0000000�00000037544�14467713645�0032702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Custom Widgets and Fields The API allows to specify your own custom _widget_ and _field_ components: - A _widget_ represents a HTML tag for the user to enter data, eg. `input`, `select`, etc. - A _field_ usually wraps one or more widgets and most often handles internal field state; think of a field as a form row, including the labels. ## Customizing the default fields and widgets You can override any default field and widget, including the internal widgets like the `CheckboxWidget` that `ObjectField` renders for boolean values. You can override any field and widget just by providing the customized fields/widgets in the `fields` and `widgets` props: ```tsx import { RJSFSchema, UiSchema, WidgetProps, RegistryWidgetsType } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'boolean', default: true, }; const uiSchema: UiSchema = { 'ui:widget': 'checkbox', }; const CustomCheckbox = function (props: WidgetProps) { return ( <button id='custom' className={props.value ? 'checked' : 'unchecked'} onClick={() => props.onChange(!props.value)}> {String(props.value)} </button> ); }; const widgets: RegistryWidgetsType = { CheckboxWidget: CustomCheckbox, }; render( <Form schema={schema} uiSchema={uiSchema} validator={validator} widgets={widgets} />, document.getElementById('app') ); ``` This allows you to create a reusable customized form class with your custom fields and widgets: ```tsx import { RegistryFieldsType, RegistryWidgetsType } from '@rjsf/utils'; import { FormProps } from '@rjsf/core'; const customFields: RegistryFieldsType = { StringField: CustomString }; const customWidgets: RegistryWidgetsType = { CheckboxWidget: CustomCheckbox }; function MyForm(props: FormProps) { return <Form fields={customFields} widgets={customWidgets} {...props} />; } ``` The default fields you can override are: - `ArrayField` - `ArraySchemaField` - `BooleanField` - `DescriptionField` - `OneOfField` - `AnyOfField` - `NullField` - `NumberField` - `ObjectField` - `SchemaField` - `StringField` - `TitleField` - `UnsupportedField` The default widgets you can override are: - `AltDateTimeWidget` - `AltDateWidget` - `CheckboxesWidget` - `CheckboxWidget` - `ColorWidget` - `DateTimeWidget` - `DateWidget` - `EmailWidget` - `FileWidget` - `HiddenWidget` - `PasswordWidget` - `RadioWidget` - `RangeWidget` - `SelectWidget` - `TextareaWidget` - `TextWidget` - `TimeWidget` - `UpDownWidget` - `URLWidget` ## Adding your own custom widgets You can provide your own custom widgets to a uiSchema for the following json data types: - `string` - `number` - `integer` - `boolean` - `array` ```tsx import { RJSFSchema, UiSchema, WidgetProps } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: Schema = { type: 'string', }; const uiSchema: UiSchema = { 'ui:widget': (props: WidgetProps) => { return ( <input type='text' className='custom' value={props.value} required={props.required} onChange={(event) => props.onChange(event.target.value)} /> ); }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` The following props are passed to custom widget components: - `id`: The generated id for this widget, used to provide unique `name`s and `id`s for the HTML field elements rendered by widgets; - `name`: The unique name of the field, usually derived from the name of the property in the JSONSchema; Provided in support of custom widgets; - `schema`: The JSONSchema subschema object for this widget; - `uiSchema`: The uiSchema for this widget; - `value`: The current value for this widget; - `placeholder`: The placeholder for the widget, if any; - `required`: The required status of this widget; - `disabled`: A boolean value stating if the widget is disabled; - `readonly`: A boolean value stating if the widget is read-only; - `autofocus`: A boolean value stating if the widget should autofocus; - `label`: The computed label for this widget, as a string - `hideLabel`: A boolean value, if true, will cause the label to be hidden. This is useful for nested fields where you don't want to clutter the UI. Customized via `label` in the `UiSchema`; - `multiple`: A boolean value stating if the widget can accept multiple values; - `onChange`: The value change event handler; call it with the new value every time it changes; - `onKeyChange`: The key change event handler (only called for fields with `additionalProperties`); pass the new value every time it changes; - `onBlur`: The input blur event handler; call it with the widget id and value; - `onFocus`: The input focus event handler; call it with the widget id and value; - `options`: A map of options passed as a prop to the component (see [Custom widget options](#custom-widget-options)). - `options.enumOptions`: For enum fields, this property contains the list of options for the enum as an array of { label, value } objects. If the enum is defined using the oneOf/anyOf syntax, the entire schema object for each option is appended onto the { schema, label, value } object. - `formContext`: The `formContext` object that you passed to `Form`. - `rawErrors`: An array of strings listing all generated error messages from encountered errors for this widget. - `registry`: A [registry](#the-registry-object) object (read next). ### Custom component registration Alternatively, you can register them all at once by passing the `widgets` prop to the `Form` component, and reference their identifier from the `uiSchema`: ```tsx import { RJSFSchema, UiSchema, WidgetProps, RegistryWidgetsType } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const MyCustomWidget = (props: WidgetProps) => { return ( <input type='text' className='custom' value={props.value} required={props.required} onChange={(event) => props.onChange(event.target.value)} /> ); }; const widgets: RegistryWidgetsType = { myCustomWidget: MyCustomWidget, }; const schema: RJSFSchema = { type: 'string', }; const uiSchema: UiSchema = { 'ui:widget': 'myCustomWidget', }; render( <Form schema={schema} uiSchema={uiSchema} validator={validator} widgets={widgets} />, document.getElementById('app') ); ``` This is useful if you expose the `uiSchema` as pure JSON, which can't carry functions. ### Custom widget options If you need to pass options to your custom widget, you can add a `ui:options` object containing those properties. If the widget has `defaultProps`, the options will be merged with the (optional) options object from `defaultProps`: ```tsx import { RJSFSchema, UiSchema, WidgetProps } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; function MyCustomWidget(props: WidgetProps) { const { options } = props; const { color, backgroundColor } = options; return <input style={{ color, backgroundColor }} />; } MyCustomWidget.defaultProps = { options: { color: 'red', }, }; const uiSchema: UiSchema = { 'ui:widget': MyCustomWidget, 'ui:options': { backgroundColor: 'yellow', }, }; // renders red on yellow input render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` > Note: This also applies to [registered custom components](#custom-component-registration). > Note: Since v0.41.0, the `ui:widget` object API, where a widget and options were specified with `"ui:widget": {component, options}` shape, is deprecated. It will be removed in a future release. ### Customizing widgets' text input All the widgets that render a text input use the `BaseInputTemplate` component internally. If you need to customize all text inputs without customizing all widgets individually, you can provide a `BaseInputTemplate` component in the `templates` property of `Form` (see [Custom Templates](./custom-templates.md#baseinputtemplate)). ## Custom field components You can provide your own field components to a uiSchema for basically any json schema data type, by specifying a `ui:field` property. For example, let's create and register a dumb `geo` component handling a _latitude_ and a _longitude_: ```tsx import { RJSFSchema, UiSchema, FieldProps, RegistryFieldsType } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', required: ['lat', 'lon'], properties: { lat: { type: 'number' }, lon: { type: 'number' }, }, }; // Define a custom component for handling the root position object class GeoPosition extends React.Component<FieldProps> { constructor(props: FieldProps) { super(props); this.state = { ...props.formData }; } onChange(name) { return (event) => { this.setState( { [name]: parseFloat(event.target.value), }, () => this.props.onChange(this.state) ); }; } render() { const { lat, lon } = this.state; return ( <div> <input type='number' value={lat} onChange={this.onChange('lat')} /> <input type='number' value={lon} onChange={this.onChange('lon')} /> </div> ); } } // Define the custom field component to use for the root object const uiSchema: UiSchema = { 'ui:field': 'geo' }; // Define the custom field components to register; here our "geo" // custom field component const fields: RegistryFieldsType = { geo: GeoPosition }; // Render the form with all the properties we just defined passed // as props render( <Form schema={schema} uiSchema={uiSchema} validator={validator} fields={fields} />, document.getElementById('app') ); ``` > Note: Registered fields can be reused across the entire schema. ### Field props A field component will always be passed the following props: - `schema`: The JSON subschema object for this field; - `uiSchema`: The [uiSchema](../api-reference/uiSchema.md) for this field; - `idSchema`: The tree of unique ids for every child field; - `formData`: The data for this field; - `errorSchema`: The tree of errors for this field and its children; - `registry`: A [registry](#the-registry-object) object (read next). - `formContext`: A [formContext](../api-reference/form-props.md#formcontext) object (read next). - `required`: The required status of this field; - `disabled`: A boolean value stating if the field is disabled; - `readonly`: A boolean value stating if the field is read-only; - `autofocus`: A boolean value stating if the field should autofocus; - `name`: The unique name of the field, usually derived from the name of the property in the JSONSchema - `idPrefix`: To avoid collisions with existing ids in the DOM, it is possible to change the prefix used for ids; Default is `root` - `idSeparator`: To avoid using a path separator that is present in field names, it is possible to change the separator used for ids (Default is `_`) - `rawErrors`: `An array of strings listing all generated error messages from encountered errors for this field - `onChange`: The field change event handler; called with the updated form data and an optional `ErrorSchema` - `onBlur`: The input blur event handler; call it with the field id and value; - `onFocus`: The input focus event handler; call it with the field id and value; ## The `registry` object The `registry` is an object containing the registered core, theme and custom fields and widgets as well as the root schema, form context, schema utils. - `fields`: The set of all fields used by the `Form`. Includes fields from `core`, theme-specific fields and any [custom registered fields](#custom-field-components); - `widgets`: The set of all widgets used by the `Form`. Includes widgets from `core`, theme-specific widgets and any [custom registered widgets](#custom-component-registration), if any; - `rootSchema`: The root schema, as passed to the `Form`, which can contain referenced [definitions](../json-schema/definitions.md); - `formContext`: The [formContext](../api-reference/form-props.md#formcontext) that was passed to `Form`; - `schemaUtils`: The current implementation of the `SchemaUtilsType` (from `@rjsf/utils`) in use by the `Form`. Used to call any of the validation-schema-based utility functions. The registry is passed down the component tree, so you can access it from your custom field, custom widget, custom template and `SchemaField` components. ### Custom SchemaField **Warning:** This is a powerful feature as you can override the whole form behavior and easily mess it up. Handle with care. You can provide your own implementation of the `SchemaField` base React component for rendering any JSONSchema field type, including objects and arrays. This is useful when you want to augment a given field type with supplementary powers. To proceed so, pass a `fields` object having a `SchemaField` property to your `Form` component; here's an example: ```tsx import { RJSFSchema, FieldProps, RegistryFieldsType } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const CustomSchemaField = function (props: FieldProps) { return ( <div id='custom'> <p>Yeah, I'm pretty dumb.</p> <div>My props are: {JSON.stringify(props)}</div> </div> ); }; const fields: RegistryFieldsType = { SchemaField: CustomSchemaField, }; const schema: RJSFSchema = { type: 'string', }; render(<Form schema={schema} validator={validator} fields={fields} />, document.getElementById('app')); ``` If you're curious how this could ever be useful, have a look at the [Kinto formbuilder](https://github.com/Kinto/formbuilder) repository to see how it's used to provide editing capabilities to any form field. Props passed to a custom SchemaField are the same as [the ones passed to a custom field](#field-props). ### Custom ArraySchemaField Everything that was mentioned above for a `Custom SchemaField` applies, but this is only used to render the Array item `children` that are then passed to the `ArrayFieldItemTemplate`. By default, `ArraySchemaField` is not actually implemented in the `fields` list since `ArrayField` falls back to `SchemaField` if `ArraySchemaField` is not provided. If you want to customize how the individual items for an array are rendered, provide your implementation of `ArraySchemaField` as a `fields` override. ```tsx import { RJSFSchema, UiSchema, FieldProps, RegistryFieldsType } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const CustomArraySchemaField = function (props: FieldProps) { const { index, registry } = props; const { SchemaField } = registry.fields; const name = `Index ${index}`; return <SchemaField {...props} name={name} />; }; const fields: RegistryFieldsType = { ArraySchemaField: CustomArraySchemaField, }; const schema: RJSFSchema = { type: 'string', }; render(<Form schema={schema} validator={validator} fields={fields} />, document.getElementById('app')); ``` ### Custom Field by Id **Warning:** This is a powerful feature as you can override the whole form behavior and easily mess it up. Handle with care. You can provide your own implementation of the field component that applies to any schema or sub-schema based on the schema's `$id` value. This is useful when your custom field should be conditionally applied based on the schema rather than the property name or data type. To provide a custom field in this way, the `fields` prop should be an object which contains a key that matches the `$id` value of the schema which should have a custom field; here's an example: ```tsx import { RJSFSchema, FieldProps, RegistryFieldsType } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const CustomIdField = function (props: FieldProps) { return ( <div id='custom'> <p>Yeah, I'm pretty dumb.</p> <div>My props are: {JSON.stringify(props)}</div> </div> ); }; const fields: RegistryFieldsType = { '/schemas/my-id': CustomIdField, }; const schema: RJSFSchema = { $id: '/schemas/my-id', type: 'string', }; render(<Form schema={schema} validator={validator} fields={fields} />, document.getElementById('app')); ``` ������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/advanced-customization/index.mdx��������������������0000664�0000000�0000000�00000000326�14467713645�0027743�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- title: Advanced Customization description: Advanced customization documentation for react-jsonschema-form. --- import DocCardList from '@theme/DocCardList'; <p>{frontMatter.description}</p> <DocCardList />����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/advanced-customization/internals.md�����������������0000664�0000000�0000000�00000013505�14467713645�0030446�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Internals Miscellaneous internals of react-jsonschema-form are listed here. ## JSON Schema supporting status This component follows [JSON Schema](http://json-schema.org/documentation.html) specs. We currently support JSON Schema-07 by default, but we also support other JSON schema versions through the [custom schema validation](../usage/validation.md#custom-meta-schema-validation) feature. Due to the limitation of form widgets, there are some exceptions as follows: - `additionalItems` keyword for arrays This keyword works when `items` is an array. `additionalItems: true` is not supported because there's no widget to represent an item of any type. In this case it will be treated as no additional items allowed. `additionalItems` being a valid schema is supported. - `anyOf`, `allOf`, and `oneOf`, or multiple `types` (i.e. `"type": ["string", "array"]`) The `anyOf` and `oneOf` keywords are supported; however, properties declared inside the `anyOf/oneOf` should not overlap with properties "outside" of the `anyOf/oneOf`. You can also use `oneOf` with [schema dependencies](../json-schema/dependencies.md#schema-dependencies) to dynamically add schema properties based on input data. The `allOf` keyword is supported; it uses [json-schema-merge-allof](https://github.com/mokkabonna/json-schema-merge-allof) to merge subschemas to render the final combined schema in the form. When these subschemas are incompatible, though (or if the library has an error merging it), the `allOf` keyword is dropped from the schema. - `"additionalProperties":false` produces incorrect schemas when used with [schema dependencies](../json-schema/dependencies.md#schema-dependencies). This library does not remove extra properties, which causes validation to fail. It is recommended to avoid setting `"additionalProperties":false` when you use schema dependencies. See [#848](https://github.com/rjsf-team/react-jsonschema-form/issues/848) [#902](https://github.com/rjsf-team/react-jsonschema-form/issues/902) [#992](https://github.com/rjsf-team/react-jsonschema-form/issues/992) ## Handling of schema defaults This library automatically fills default values defined in the [JSON Schema](http://json-schema.org/documentation.html) as initial values in your form. This also works for complex structures in the schema. If a field has a default defined, it should always appear as default value in form. This also works when using [schema dependencies](../json-schema/dependencies.md#schema-dependencies). Since there is a complex interaction between any supplied original form data and any injected defaults, this library tries to do the injection in a way which keeps the original intention of the original form data. Check out the defaults example on the [live playground](https://rjsf-team.github.io/react-jsonschema-form/) to see this in action. ### Merging of defaults into the form data There are three different cases which need to be considered for the merging. Objects, arrays and scalar values. This library always deeply merges any defaults with the existing form data for objects. This are the rules which are used when injecting the defaults: - When there is a scalar in the form data, nothing is changed. - When the value is `undefined` in the form data, the default is created in the form data. - When the value is an object in the form data, the defaults are deeply merged into the form data, using the rules defined here for the deep merge. - Then the value is an array in the form data, defaults are only injected in existing array items. No new array items will be created, even if the schema has minItems or additional items defined. ### Merging of defaults within the schema In the schema itself, defaults of parent elements are propagated into children. So when you have a schema which defines a deeply nested object as default, these defaults will be applied to children of the current node. This also merges objects defined at different levels together with the "deeper" not having precedence. If the parent node defines properties, which are not defined in the child, they will be merged so that the default for the child will be the merged defaults of parent and child. For arrays this is not the case. Defining an array, when a parent also defines an array, will be overwritten. This is only true when arrays are used in the same level, for objects within these arrays, they will be deeply merged again. ## Custom array field buttons The `ArrayField` component provides a UI to add, copy, remove and reorder array items, and these buttons use [Bootstrap glyphicons](http://getbootstrap.com/components/#glyphicons). If you don't use glyphicons but still want to provide your own icons or texts for these buttons, you can easily do so using CSS: > NOTE this only applies to the `@rjsf/core` theme ```css i.glyphicon { display: none; } .btn-add::after { content: 'Add'; } .array-item-copy::after { content: 'Copy'; } .array-item-move-up::after { content: 'Move Up'; } .array-item-move-down::after { content: 'Move Down'; } .array-item-remove::after { content: 'Remove'; } ``` ## Submit form programmatically You can use the reference to get your `Form` component and call the `submit` method to submit the form programmatically without a submit button. This method will dispatch the `submit` event of the form, and the function, that is passed to `onSubmit` props, will be called. ```tsx import { createRef } from 'react'; import { RJSFSchema, UiSchema } from '@rjsf/utils'; import { Form } from '@rjsf/core'; import validator from '@rjsf/validator-ajv8'; const onSubmit = ({ formData }) => console.log('Data submitted: ', formData); let yourForm; const schema: RJSFSchema = { type: 'string', }; const formRef = createRef<Form>(); render( <Form schema={schema} validator={validator} onSubmit={onSubmit} ref={formRef} />, document.getElementById('app') ); formRef.current.submit(); ``` �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/advanced-customization/typescript.md����������������0000664�0000000�0000000�00000020712�14467713645�0030653�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Typescript Support RJSF fully supports Typescript. The [types and functions](../api-reference/utility-functions.md) exported by `@rjsf/utils` are fully typed (as needed) using one or more of the following 3 optional generics: - `T = any`: This represents the type of the `formData` and defaults to `any`. - `S extends StrictRJSFSchema = RJSFSchema`: This represents the type of the `schema` and extends the `StrictRJSFSchema` type and defaults to the `RJSFSchema` type. - `F extends FormContextType = any`: This represents the type of the `formContext`, extends the `FormContextType` type and defaults to `any`. Every other library in the `@rjsf/*` ecosystem use these same generics in their functions and React component definitions. For instance, in the `@rjsf/core` library the definitions of the `Form` component and the `withTheme()` and `getDefaultRegistry()` functions are as follows: ```ts export default class Form< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any > extends Component<FormProps<T, S, F>, FormState<T, S, F>> { // ... class implementation } export default function withTheme<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( themeProps: ThemeProps<T, S, F> ) { // ... function implementation } export default function getDefaultRegistry< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): Omit<Registry<T, S, F>, 'schemaUtils'> { // ... function implementation } ``` Out of the box, the defaults for these generics will work for all use-cases. Providing custom types for any of these generics may be useful for situations where the caller is working with typed `formData`, `schema` or `formContext` props, Typescript is complaining and type casting isn't allowed. ## Overriding generics ### T The generic `T` is used to represent the type of the `formData` property passed into `Form`. If you are working with a simple, unchanging JSON Schema and you have defined a type for the `formData` you are working with, you can override this generic as follows: ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; import { Form } from '@rjsf/core'; interface FormData { foo?: string; bar?: number; } const schema: RJSFSchema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'number' }, }, }; const formData: FormData = {}; const validator = customizeValidator<FormData>(); render(<Form<FormData> schema={schema} validator={validator} formData={formData} />, document.getElementById('app')); ``` ### S The generic `S` is used to represent the type of the `schema` property passed into `Form`. If you are using something like the [Ajv utility types for schemas](https://ajv.js.org/guide/typescript.html#utility-types-for-schemas) typing system, you can override this generic as follows: ```tsx import { JSONSchemaType } from 'ajv'; import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; import { Form } from '@rjsf/core'; interface FormData { foo?: string; bar?: number; } type MySchema = JSONSchemaType<FormData>; const schema: MySchema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'number' }, }, }; const validator = customizeValidator<any, MySchema>(); render(<Form<any, MySchema> schema={schema} validator={validator} />, document.getElementById('app')); // Alternatively since you have the type, you could also use this // const validator = customizeValidator<FormData, MySchema>(); // render(( // <Form<FormData, MySchema> schema={schema} validator={validator} /> //), document.getElementById("app")); ``` > NOTE: using this `Ajv typing system` has not been tested extensively with RJSF, so use carefully ### F The generic `F` is used to represent the type of the `formContext` property passed into `Form`. If you have a type for this data, you can override this generic as follows: ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; import { Form } from '@rjsf/core'; interface FormContext { myCustomWidgetData: object; } const schema: RJSFSchema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'number' }, }, }; const formContext: FormContext = { myCustomWidgetData: { enableCustomFeature: true, }, }; const validator = customizeValidator<any, RJSFSchema, FormContext>(); render( <Form<any, RJSFSchema, FormContext> schema={schema} validator={validator} formContext={formContext} />, document.getElementById('app') ); ``` ## Overriding generics in core As shown in previous examples, overriding the default `Form` from `@rjsf/core` is pretty straight forward. Using the `withTheme()` function is just as easy: ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; import { withTheme, ThemeProps } from '@rjsf/core'; interface FormData { foo?: string; bar?: number; } type MySchema = JSONSchemaType<FormData>; const schema: MySchema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'number' }, }, }; interface FormContext { myCustomWidgetData: object; } const theme: ThemeProps<FormData, MySchema, FormContext> = { widgets: { test: () => <div>test</div> }, }; const ThemedForm = withTheme<FormData, MySchema, FormContext>(theme); const validator = customizeValidator<FormData, MySchema, FormContext>(); const Demo = () => <ThemedForm schema={schema} uiSchema={uiSchema} validator={validator} />; ``` ## Overriding generics in other themes Since all the other themes in RJSF are extensions of `@rjsf/core`, overriding parts of these themes with custom generics is a little different. The exported `Theme` and `Form` from any of the themes have been created using the generic defaults, and as a result, do not take generics themselves. In order to override generics, special `generateForm()` and `generateTheme()` functions are exported for your use. ### Overriding a Theme If you are doing something like the following to create a new theme based on `@rjsf/mui` to extend one or more `templates`: ```tsx import React from 'react'; import { WidgetProps } from '@rjsf/utils'; import { ThemeProps, withTheme } from '@rjsf/core'; import validator from '@rjsf/validator-ajv8'; import { Theme } from '@rjsf/mui'; const OldBaseInputTemplate = Theme.templates.BaseInputTemplate; // Force the underlying `TextField` component to always use size="small" function MyBaseInputTemplate(props: WidgetProps) { return <OldBaseInputTemplate {...props} size='small' />; } const myTheme: ThemeProps = { ...Theme, templates: { ...Theme.templates, BaseInputTemplate: MyBaseInputTemplate, }, }; const ThemedForm = withTheme(myTheme); const Demo = () => <ThemedForm schema={schema} uiSchema={uiSchema} validator={validator} />; ``` Then you would use the new `generateTheme()` and `generateForm()` functions as follows: ```tsx import React from 'react'; import { WidgetProps } from '@rjsf/utils'; import { ThemeProps, withTheme } from '@rjsf/core'; import { customizeValidator } from '@rjsf/validator-ajv8'; import { generateTheme } from '@rjsf/mui'; interface FormData { foo?: string; bar?: number; } type MySchema = JSONSchemaType<FormData>; const schema: MySchema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'number' }, }, }; interface FormContext { myCustomWidgetData: object; } const Theme: ThemeProps<FormData, MySchema, FormContext> = generateTheme<FormData, MySchema, FormContext>(); const OldBaseInputTemplate = Theme.templates.BaseInputTemplate; // Force the underlying `TextField` component to always use size="small" function MyBaseInputTemplate(props: WidgetProps<FormData, MySchema, FormContext>) { return <OldBaseInputTemplate {...props} size='small' />; } const myTheme: ThemeProps<FormData, MySchema, FormContext> = { ...Theme, templates: { ...Theme.templates, BaseInputTemplate: MyBaseInputTemplate, }, }; const ThemedForm = withTheme<FormData, MySchema, FormContext>(myTheme); const validator = customizeValidator<FormData, MySchema, FormContext>(); // You could also do since they are effectively the same: // const ThemedForm = generateForm<FormData, MySchema, FormContext>(myTheme); const Demo = () => <ThemedForm schema={schema} uiSchema={uiSchema} validator={validator} />; ``` > NOTE: The same approach works for extending `widgets` and `fields` as well. ������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024153�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/form-props.md�������������������������0000664�0000000�0000000�00000042274�14467713645�0026612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- title: <Form /> Props --- # <Form /> props ## acceptcharset The value of this prop will be passed to the `accept-charset` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-accept-charset). ## action The value of this prop will be passed to the `action` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-action). Note that this just renders the `action` attribute in the HTML markup. There is no real network request being sent to this `action` on submit. Instead, react-jsonschema-form catches the submit event with `event.preventDefault()` and then calls the [`onSubmit`](#onSubmit) function, where you could send a request programmatically with `fetch` or similar. ## autoComplete The value of this prop will be passed to the `autocomplete` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-autocomplete). ## autocomplete Deprecated, same functionality as `autoComplete` ## className The value of this prop will be passed to the `class` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form). ## children You can provide custom buttons to your form via the `Form` component's `children`. If no children are provided, by default a `Submit` button will be rendered. For other ways to modify the default `Submit` button, see both the [Submit Button Options](./uiSchema.md#submitbuttonoptions) and the [SubmitButton Template](../advanced-customization/custom-templates.md#submitbutton) documentation. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; render( <Form schema={schema} validator={validator}> <div> <button type='submit'>Submit</button> <button type='button'>Cancel</button> </div> </Form>, document.getElementById('app') ); ``` > **Warning:** There needs to be a button or an input with `type="submit"` to trigger the form submission (and then the form validation). ## customValidate Formerly the `validate` prop. The `customValidate` prop requires a function that specifies custom validation rules for the form. See [Validation](../usage/validation.md) for more information. ## experimental_defaultFormStateBehavior Experimental features to specify different form state behavior. Currently, this only affects the handling of optional array fields where `minItems` is set and handling of setting defaults based on the value of `emptyObjectFields`. > **Warning:** This API is experimental and unstable, therefore breaking changes may be shipped in minor or patch releases. If you want to use this feature, we recommend pinning exact versions of `@rjsf/\*` packages in your package.json file or be ready to update your use of it when necessary. The following subsections represent the different keys in this object, with the tables explaining the values and their meanings. ### `arrayMinItems` This optional subsection is an object with two optional fields, `populate` and `mergeExtraDefaults`. When not specified, it defaults to `{ populate: 'all', mergeExtraDefaults: false }`. #### `arrayMinItems.populate` Optional enumerated flag controlling how array minItems are populated, defaulting to `all`: | Flag Value | Description | | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | `all` | Legacy behavior - populate minItems entries with default values initially and include empty array when no values have been defined. | | `requiredOnly` | Ignore `minItems` on a field when calculating defaults unless the field is required. | | `never` | Ignore `minItems` on a field when calculating defaults for required and non-required. Value will set only if defined `default` and from `formData` | #### `arrayMinItems.mergeExtraDefaults` Optional boolean flag, defaulting to `false` when not specified. When `formData` is provided and does not contain `minItems` worth of data, this flag controls whether the extra data provided by the defaults is appended onto the existing `formData` items to ensure the `minItems` condition is met. When `false` (legacy behavior), only the `formData` provided is merged into the default form state, even if there are fewer than the `minItems`. When `true`, the defaults are appended onto the end of the `formData` until the `minItems` condition is met. ### `emptyObjectFields` Optional enumerated flag controlling how empty object fields are populated, defaulting to `populateAllDefaults`: | Flag Value | Description | | -------------------------- | --------------------------------------------------------------------------------------------------------------------------- | | `populateAllDefaults` | Legacy behavior - set default when there is a primitive value, an non-empty object field, or the field itself is required | | `populateRequiredDefaults` | Only sets default when a value is an object and its parent field is required, or it is a primitive value and it is required | | `skipDefaults` | Does not set defaults | ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string' }, minItems: 3, }; render( <Form schema={schema} validator={validator} experimental_defaultFormStateBehavior={{ arrayMinItems: { populate: 'requiredOnly' }, }} />, document.getElementById('app') ); ``` ## disabled It's possible to disable the whole form by setting the `disabled` prop. The `disabled` prop is then forwarded down to each field of the form. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; render(<Form schema={schema} validator={validator} disabled />, document.getElementById('app')); ``` If you just want to disable some fields, see the `ui:disabled` parameter in `uiSchema`. ## readonly It's possible to make the whole form read-only by setting the `readonly` prop. The `readonly` prop is then forwarded down to each field of the form. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; render(<Form schema={schema} validator={validator} readonly />, document.getElementById('app')); ``` If you just want to make some fields read-only, see the `ui:readonly` parameter in `uiSchema`. ## enctype The value of this prop will be passed to the `enctype` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-enctype). ## extraErrors This prop allows passing in custom errors that are augmented with the existing JSON Schema errors on the form; it can be used to implement asynchronous validation. By default, these are non-blocking errors, meaning that you can still submit the form when these are the only errors displayed to the user. See [Validation](../usage/validation.md) for more information. ## extraErrorsBlockSubmit If set to true, causes the `extraErrors` to become blocking when the form is submitted. ## fields Dictionary of registered fields in the form. See [Custom Widgets and Fields](../advanced-customization/custom-widgets-fields.md) for more information. ## focusOnFirstError If set to true, then the first field with an error will receive the focus when the form is submitted with errors. You can also provide a custom callback function to handle what happens when this function is called. ```tsx import { RJSFSchema, RJSFValidationError } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'string', }; const focusOnError = (error: RJSFValidationError) => { console.log('I need to handle focusing this error'); }; render(<Form schema={schema} focusOnFirstError={focusOnError} />, document.getElementById('app')); ``` ## formContext You can provide a `formContext` object to the Form, which is passed down to all fields and widgets. Useful for implementing context aware fields and widgets. See [AntD Customization](themes/antd/uiSchema.md#formcontext) for formContext customizations for the `antd` theme. See [Semantic UI Customization](themes/semantic-ui/uiSchema.md#formcontext) for formContext customizations for the `semantic-ui` theme. ## formData Often you'll want to prefill a form with existing data; this is done by passing a `formData` prop object matching the schema. ## id The value of this prop will be passed to the `id` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form). ## idPrefix To avoid collisions with existing ids in the DOM, it is possible to change the prefix used for ids (the default is `root`). ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; render(<Form schema={schema} validator={validator} idPrefix={'rjsf_prefix'} />, document.getElementById('app')); ``` This will render `<input id="rjsf_prefix_key">` instead of `<input id="root_key">` ## idSeparator To avoid using a path separator that is present in field names, it is possible to change the separator used for ids (the default is `_`). ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', properties: { first: { type: 'string', }, }, }; render(<Form schema={schema} validator={validator} idSeparator={'/'} />, document.getElementById('app')); ``` This will render `<input id="root/first">` instead of `<input id="root_first">` when rendering `first`. ## liveOmit If `omitExtraData` and `liveOmit` are both set to true, then extra form data values that are not in any form field will be removed whenever `onChange` is called. Set to `false` by default. ## liveValidate If set to true, the form will perform validation and show any validation errors whenever the form data is changed, rather than just on submit. ## method The value of this prop will be passed to the `method` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-method). ## name The value of this prop will be passed to the `name` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-name). ## noHtml5Validate If set to true, turns off HTML5 validation on the form. Set to `false` by default. ## noValidate If set to true, turns off all validation. Set to `false` by default. ## omitExtraData If set to true, then extra form data values that are not in any form field will be removed whenever `onSubmit` is called. Set to `false` by default. ## onBlur Sometimes you may want to trigger events or modify external state when a field has been touched, so you can pass an `onBlur` handler, which will receive the id of the input that was blurred and the field value. ## onChange If you plan on being notified every time the form data are updated, you can pass an `onChange` handler, which will receive the same first argument as `onSubmit` any time a value is updated in the form. It will also receive, as the second argument, the `id` of the field which experienced the change. Generally, this will be the `id` of the field for which input data is modified. In the case of adding/removing of new fields in arrays or objects with `additionalProperties` and the rearranging of items in arrays, the `id` will be that of the array or object itself, rather than the item/field being added, removed or moved. ## onError To react when submitted form data are invalid, pass an `onError` handler. It will be passed the list of encountered errors: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; const onError = (errors) => console.log('I have', errors.length, 'errors to fix'); render(<Form schema={schema} validator={validator} onError={onError} />, document.getElementById('app')); ``` ## onFocus Sometimes you may want to trigger events or modify external state when a field has been focused, so you can pass an `onFocus` handler, which will receive the id of the input that is focused and the field value. ## onSubmit You can pass a function as the `onSubmit` prop of your `Form` component to listen to when the form is submitted and its data are valid. It will be passed a result object having a `formData` attribute, which is the valid form data you're usually after. The original event will also be passed as a second parameter: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; const onSubmit = ({ formData }, e) => console.log('Data submitted: ', formData); render(<Form schema={schema} validator={validator} onSubmit={onSubmit} />, document.getElementById('app')); ``` > Note: If there are fields in the `formData` that are not represented in the schema, they will be retained by default. If you would like to remove those extra values on form submission, you may need to set the `omitExtraData` and/or `liveOmit` props. ## schema **Required**! Form schema. We support JSON schema draft-07 by default. See [Schema Reference](https://json-schema.org/draft-07/json-schema-release-notes.html) for more information. ## showErrorList When this prop is set to `top` or `bottom`, a list of errors (or the custom error list defined in the `ErrorList`) will also show at the `bottom` or `top` of the form. When set to false, only inline input validation errors will be shown. Set to `top` by default. See [Validation](../usage/validation.md) for more information. ## tagName It's possible to change the default `form` tag name to a different HTML tag, which can be helpful if you are nesting forms. However, native browser form behaviour, such as submitting when the `Enter` key is pressed, may no longer work. ```tsx <Form tagName="div" ... /> ``` You can also provide a class/function component. ```tsx const CustomForm = props => <form {...props} style={...} className={...} /> // ... <Form tagName={CustomForm} ... /> ``` ## target The value of this prop will be passed to the `target` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-target). ## templates Dictionary of registered templates in the form. See [Custom Templates](../advanced-customization/custom-templates.md) for more information. ## transformErrors A function can be passed to this prop in order to make modifications to the default errors resulting from JSON Schema validation. See [Validation](../usage/validation.md) for more information. ## translateString Optional string translation function, if provided, allows users to change the translation of the RJSF internal strings. Some strings contain replaceable parameter values as indicated by `%1`, `%2`, etc. The number after the `%` indicates the order of the parameter. The ordering of parameters is important because some languages may choose to put the second parameter before the first in its translation. In addition to replaceable parameters, some of the strings support the use of markdown and simple html. One can use the [documentation](https://github.com/rjsf-team/react-jsonschema-form/blob/main/packages/utils/src/enums.ts) of the `TranslatableString` enums to determine which enum values contain replaceable parameters and which support markdown and simple html. One could use this function to alter one or more of the existing english strings to better suit one's application or fully translate all strings into a different language. Below is an example of changing a few of the english strings to something else: ```ts import { TranslatableString, englishStringTranslator, replaceStringParameters } from '@rjsf/utils'; function fixupSomeEnglishStrings(stringToTranslate: TranslatableString, params?: string[]): string { switch (stringToTranslate) { case TranslatableString.NewStringDefault: return ''; // Use an empty string for the new additionalProperties string default value case TranslatableString.KeyLabel: return replaceStringParameters('%1 Key Name', params); // Add "Name" onto the end of the WrapIfAdditionalTemplate key label default: return englishStringTranslator(stringToTranslate, params); // Fallback to the default english } } ``` ## uiSchema Form uiSchema. See [uiSchema Reference](uiSchema.md) for more information. ## validator **Required**! An implementation of the `ValidatorType` interface that is needed for form validation to work. `@rjsf/validator-ajv8` exports the implementation of this interface from RJSF version 4. ## widgets Dictionary of registered widgets in the form. See [Custom Widgets and Fields](../advanced-customization/custom-widgets-fields.md) for more information. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/index.mdx�����������������������������0000664�0000000�0000000�00000000271�14467713645�0025774�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- title: API Reference description: API documentation for react-jsonschema-form. --- import DocCardList from '@theme/DocCardList'; <p>{frontMatter.description}</p> <DocCardList />���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/themes/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025440�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/themes/antd/��������������������������0000775�0000000�0000000�00000000000�14467713645�0026366�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/themes/antd/uiSchema.md���������������0000664�0000000�0000000�00000002013�14467713645�0030442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# AntD Customization You can customize the look of the form by passing options to Ant-Design theme fields. ## formContext The formContext antd object accepts `descriptionLocation`, `readonlyAsDisabled` properties. `descriptionLocation` can be `'below' | 'tooltip'`, the default is `'below'` which places the description below the form item. You can set it to `tooltip` that put the description inside the tooltip. Note that you should have antd 4.7+ to use `'tooltip'`. Setting `{readonlyAsDisabled: false}` on the formContext will make the antd theme treat readOnly fields as disabled. ```tsx <Form formContext={{ descriptionLocation: 'tooltip', readonlyAsDisabled: false, // other props... }} /> ``` These are the `formContext` properties that you can modify to adjust the `antd` presentation: - `descriptionLocation`: Where to display the description, either 'below' or 'tooltip', defaults to 'below' - `readonlyAsDisabled`: Whether to make the antd theme treat readOnly fields as disabled, defaults to true ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/themes/chakra-ui/���������������������0000775�0000000�0000000�00000000000�14467713645�0027304�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/themes/chakra-ui/uiSchema.md����������0000664�0000000�0000000�00000001761�14467713645�0031371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Chakra-UI Customization When using `@rjsf/chakra-ui` there are a couple of ways to customize the feel of the form. ## Styling You can use `ChakraProvider`, where you can customize the field components at a theme level. And, `uiSchema` allows for the use of a `"chakra"` `"ui:option"` to customize the styling of the form widgets. ```json { "yourField": { "ui:options": { "chakra": { "p": "1rem", "color": "blue.200", "sx": { "margin": "0 auto" } } } } } ``` It accepts the theme accessible [style props](https://chakra-ui.com/docs/features/style-props) provided by [Chakra](https://chakra-ui.com/docs/getting-started) and [Emotion](https://emotion.sh/docs/introduction). ### Limitations - The `chakra` option is only available for the Chakra-UI theme. - The props are given to the parent component in the individual widget. To pass styles to the inner components, use the [`sx` prop](https://chakra-ui.com/docs/features/the-sx-prop). ���������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/themes/semantic-ui/�������������������0000775�0000000�0000000�00000000000�14467713645�0027656�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/themes/semantic-ui/uiSchema.md��������0000664�0000000�0000000�00000005621�14467713645�0031742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Semantic-UI Customization There are various options to pass to semantic theme fields. Note that every semantic property within uiSchema can be rendered in one of two ways: `{"ui:options": {semantic:{[property]: [value]}}}` In other words, the following uiSchema is equivalent: > Note: All fields have the following settings below as their default ``` fluid: Take on the size of its container. inverted: Format to appear on dark backgrounds. ``` ```json { "ui:options": { "semantic": { "fluid": true, "inverted": false, "errorOptions": { "size": "small", "pointing": "above" } } } } ``` #### Semantic Widget Optional Properties - [Semantic props for TextWidget](https://react.semantic-ui.com/elements/input/) - [Semantic props for CheckboxWidget](https://react.semantic-ui.com/modules/checkbox/) - [Semantic props for SelectWidget](https://react.semantic-ui.com/modules/dropdown/) - [Semantic props for RangeWidget](https://react.semantic-ui.com/elements/input/) - [Semantic props for RadioWidget](https://react.semantic-ui.com/addons/radio/) - [Semantic props for PasswordWidget](https://react.semantic-ui.com/elements/input/) - [Semantic props for UpDownWidget](https://react.semantic-ui.com/elements/input/) - [Semantic props for TextAreaWidget](https://react.semantic-ui.com/addons/text-area/) ## errorOptions The uiSchema semantic object accepts an `errorOptions` property for each field of the schema: ``` size: determines the size of the error message dialog pointing: determines the direction of the arrow on the error message dialog ``` Below are the current defaults ```tsx import { UiSchema } from '@rjsf/utils'; const uiSchema: UiSchema = { 'ui:options': { semantic: { errorOptions: { size: 'small', pointing: 'above', }, }, }, }; ``` ## semantic options uiSchema for array items To specify a uiSchema that applies to array items, specify the semantic uiSchema value within the `ui:options` property: ``` wrapItem: wrap each array item in a Segment horizontalButtons: vertical buttons instead of the default horizontal ``` ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; const uiSchema: UiSchema = { 'ui:options': { semantic: { wrapItem: true, horizontalButtons: false, }, }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` ## formContext The formContext semantic object accepts `wrapContent` ,`wrapLabel` properties. ``` wrapContent: wrap all inputs field content in a div, for custom styling wrapLabel: wrap all labels in a div, for custom styling via CSS ``` ```tsx <Form formContext={{ semantic: { wrapLabel: true, wrapContent: true, }, // other props... }} /> ``` ���������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/uiSchema.md���������������������������0000664�0000000�0000000�00000033607�14467713645�0026244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# uiSchema JSON Schema is limited for describing how a given data type should be rendered as a form input component. That's why this library introduces the concept of uiSchema. A UI schema is basically an object literal providing information on **how** the form should be rendered, while the JSON schema tells **what**. The uiSchema object follows the tree structure of the form field hierarchy, and defines how each property should be rendered. Note that almost every property within uiSchema can be rendered in one of two ways: `{"ui:options": {[property]: [value]}}`, or `{"ui:[property]": value}`. In other words, the following `uiSchema`s are equivalent: ```json { "ui:title": "Title", "ui:description": "Description", "ui:classNames": "my-class", "ui:submitButtonOptions": { "props": { "disabled": false, "className": "btn btn-info" }, "norender": false, "submitText": "Submit" } } ``` ```json { "ui:options": { "title": "Title", "description": "Description", "classNames": "my-class", "submitButtonOptions": { "props": { "disabled": false, "className": "btn btn-info" }, "norender": false, "submitText": "Submit" } } } ``` For a full list of what is supported in the `uiSchema` see the `UiSchema` type in [@rjsf/utils/types.ts](https://github.com/rjsf-team/react-jsonschema-form/blob/main/packages/utils/src/types.ts). Be sure to pay attention to the hierarchical intersection to these other types: `UIOptionsBaseType` and `TemplatesType`. ## Exceptions to the equivalence There are 4 properties that exist in a `UiSchema` that will not be found in an inner `ui:options` object. ### ui:globalOptions The set of globally relevant `UiSchema` options that are read from the root-level `UiSchema` and stored in the `registry` for use everywhere. ```ts import { UiSchema } from '@rjsf/utils'; const uiSchema: UiSchema = { 'ui:globalOptions': { copyable: true }, }; ``` ### ui:rootFieldId By default, this library will generate ids unique to the form for all rendered widgets. If you plan on using multiple instances of the `Form` component in a same page, it's wise to declare a root prefix for these, using the `ui:rootFieldId` uiSchema directive: ```ts import { UiSchema } from '@rjsf/utils'; const uiSchema: UiSchema = { 'ui:rootFieldId': 'myform', }; ``` This will make all widgets have an id prefixed with `myform`. ### ui:field The `ui:field` property overrides the `Field` implementation used for rendering any field in the form's hierarchy. Specify either the name of a field that is used to look up an implementation from the `fields` list or an actual one-off `Field` component implementation itself. See [Custom Widgets and Fields](../advanced-customization/custom-widgets-fields.md#custom-field-components) for more information about how to use this property. ### ui:fieldReplacesAnyOrOneOf By default, any field that is rendered for an `anyOf`/`oneOf` schema will be wrapped inside the `AnyOfField` or `OneOfField` component. This default behavior may be undesirable if your custom field already handles behavior related to choosing one or more subschemas contained in the `anyOf`/`oneOf` schema. By providing a `true` value for this flag in association with a custom `ui:field`, the wrapped components will be omitted, so just one instance of the custom field will be rendered. If the flag is omitted or set to `false`, your custom field will be wrapped by `AnyOfField`/`OneOfField`. ### ui:options The `ui:options` property cannot be nested inside itself and thus is the last exception. ## ui:XXX or ui:options.XXX All the properties that follow can be specified in the `uiSchema` in either of the two equivalent ways. NOTE: The properties specific to array items can be found [here](../json-schema/arrays.md#array-item-uiSchema-options) ### widget The `ui:widget` property overrides the `Widget` implementation used for rendering any field in the form's hierarchy. Specify either the name of a widget that is used to look up an implementation from the `widgets` list or an actual one-off `Widget` component implementation itself. See [Custom Widgets and Fields](../advanced-customization/custom-widgets-fields.md) for more information about how to use this property. ### classNames The uiSchema object accepts a `ui:classNames` property for each field of the schema: ```tsx import { UiSchema } from '@rjsf/utils'; const uiSchema = { title: { 'ui:classNames': 'task-title foo-bar', }, }; ``` Will result in: ```html <div class="field field-string task-title foo-bar"> <label> <span>Title*</span> <input value="My task" required="" type="text" /> </label> </div> ``` ### style The uiSchema object accepts a `ui:style` property for each field of the schema: ```tsx import { UiSchema } from '@rjsf/utils'; const uiSchema = { title: { 'ui:style': { color: 'red' }, }, }; ``` Will result in: ```html <div class="field field-string task-title" style={{ color: "red" }}> <label> <span>Title*</span> <input value="My task" required="" type="text"> </label> </div> ``` ### autocomplete If you want to mark a text input, select or textarea input to use the HTML autocomplete feature, set the `ui:autocomplete` uiSchema directive to a valid [HTML autocomplete value](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#values). ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'string' }; const uiSchema: UiSchema = { 'ui:widget': 'textarea', 'ui:autocomplete': 'on', }; ``` ### autofocus If you want to automatically focus on a text input or textarea input, set the `ui:autofocus` uiSchema directive to `true`. ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'string' }; const uiSchema: UiSchema = { 'ui:widget': 'textarea', 'ui:autofocus': true, }; ``` ### description Sometimes it's convenient to change the description of a field. This is the purpose of the `ui:description` uiSchema directive: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'string' }; const uiSchema: UiSchema = { 'ui:widget': 'password', 'ui:description': 'The best password', }; ``` ### disabled The `ui:disabled` uiSchema directive will disable all child widgets from a given field. > Note: If you're wondering about the difference between a `disabled` field and a `readonly` one: Marking a field as read-only will render it greyed out, but its text value will be selectable. Disabling it will prevent its value to be selected at all. ### emptyValue The `ui:emptyValue` uiSchema directive provides the default value to use when an input for a field is empty ### enumDisabled To disable an option, use the `enumDisabled` property in uiSchema. ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'string', enum: ['one', 'two', 'three'], }; const uiSchema: UiSchema = { 'ui:enumDisabled': ['two'], }; ``` ### filePreview The `FileWidget` can be configured to show a preview of an image or a download link for non-images using this flag. ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'string', format: 'data-url', }; const uiSchema: UiSchema = { 'ui:options': { filePreview: true, }, }; ``` ### help Sometimes it's convenient to add text next to a field to guide the end user filling it. This is the purpose of the `ui:help` uiSchema directive: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'string' }; const uiSchema: UiSchema = { 'ui:widget': 'password', 'ui:help': 'Hint: Make it strong!', }; ``` ![](https://i.imgur.com/scJUuZo.png) Help texts work for any kind of field at any level, and will always be rendered immediately below the field component widget(s) (after contextualized errors, if any). ### hideError The `ui:hideError` uiSchema directive will, if set to `true`, hide the default error display for the given field AND all of its child fields in the hierarchy. If you need to enable the default error display of a child in the hierarchy after setting `hideError: true` on the parent field, simply set `hideError: false` on the child. This is useful when you have a custom field or widget that utilizes either the `rawErrors` or the `errorSchema` to manipulate and/or show the error(s) for the field/widget itself. ### inputType To change the input type (for example, `tel` or `email`) you can specify the `inputType` in the `ui:options` uiSchema directive. ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'string' }; const uiSchema: UiSchema = { 'ui:options': { inputType: 'tel', }, }; ``` ### label Field labels are rendered by default. Labels may be omitted on a per-field by setting the `label` option to `false` in the `ui:options` uiSchema directive. ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string' }; const uiSchema: UiSchema = { 'ui:options': { label: false, }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` They can also be omitted globally by setting the `label` option to `false` in the `ui:globalOptions` uiSchema directive. ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string' }; const uiSchema: UiSchema = { 'ui:globalOptions': { label: false, }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` ### order This property allows you to reorder the properties that are shown for a particular object. See [Objects](../json-schema/objects.md) for more information. ### placeholder You can add placeholder text to an input by using the `ui:placeholder` uiSchema directive: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', format: 'uri' }; const uiSchema: UiSchema = { 'ui:placeholder': 'http://', }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` Fields using `enum` can also use `ui:placeholder`. The value will be used as the text for the empty option in the select widget. ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', enum: ['First', 'Second'] }; const uiSchema: UiSchema = { 'ui:placeholder': 'Choose an option', }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` ### readonly The `ui:readonly` uiSchema directive will mark all child widgets from a given field as read-only. This is equivalent to setting the `readOnly` property in the schema. > Note: If you're wondering about the difference between a `disabled` field and a `readonly` one: Marking a field as read-only will render it greyed out, but its text value will be selectable. Disabling it will prevent its value to be selected at all. ### rows You can set the initial height of a textarea widget by specifying `rows` option. ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string' }; const uiSchema: UiSchema = { 'ui:options': { widget: 'textarea', rows: 15, }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` ### title Sometimes it's convenient to change a field's title. This is the purpose of the `ui:title` uiSchema directive: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'string' }; const uiSchema: UiSchema = { 'ui:widget': 'password', 'ui:title': 'Your password', }; ``` ### submitButtonOptions Sometimes it's convenient to change the behavior of the submit button for the form. This is the purpose of the `ui:submitButtonOptions` uiSchema directive: You can pass any other prop to the submit button if you want, by default, this library will set the following options / props mentioned below for all submit buttons: #### `norender` option You can set this property to `true` to remove the submit button completely from the form. Nice option, if the form is just for viewing purposes. #### `submitText` option You can use this option to change the text of the submit button. Set to "Submit" by default. #### `props` section You can pass any other prop to the submit button if you want, via this section. ##### `disabled` prop You can use this option to disable the submit button. ##### `className` prop You can use this option to specify a class name for the submit button. ```tsx import { UiSchema } from '@rjsf/utils'; const uiSchema: UiSchema = { 'ui:submitButtonOptions': { props: { disabled: false, className: 'btn btn-info', }, norender: false, submitText: 'Submit', }, }; ``` ## `duplicateKeySuffixSeparator` option When using `additionalProperties`, key collision is prevented by appending a unique integer suffix to the duplicate key. For example, when you add a key named `myKey` to a form where `myKey` is already defined, then your new key will become `myKey-1`. You can use `ui:duplicateKeySuffixSeparator` to override the default separator, `"-"` with a string of your choice on a per-field basis. You can also set this in the `ui:globalOptions` to have the same separator used everywhere. ```ts import { UiSchema } from '@rjsf/utils'; const uiSchema = { 'ui:globalOptions': { duplicateKeySuffixSeparator: '_', }, }; ``` ## Theme Options - [AntD Customization](themes/antd/uiSchema.md) - [Chakra-UI Customization](themes/chakra-ui/uiSchema.md) - [Semantic-UI Customization](themes/semantic-ui/uiSchema.md) �������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/utility-functions.md������������������0000664�0000000�0000000�00000133465�14467713645�0030222�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# RJSF utility functions, constants and types In version 5, the utility functions from `@rjsf/core/utils` were refactored into their own library called `@rjsf/utils`. These utility functions are separated into two distinct groups. The first, larger, group are the [functions](#non-validator-utility-functions) that do NOT require a `ValidatorType` interface be provided as one of their parameters. The second, smaller, group are the [functions](#validator-based-utility-functions) that DO require a `ValidatorType` interface be provided as a parameter. There is also a helper [function](#schema-utils-creation-function) used to create a `SchemaUtilsType` implementation from a `ValidatorType` implementation and `rootSchema` object. ## Constants The `@rjsf/utils` package exports a set of constants that represent all the keys into various elements of a RJSFSchema or UiSchema that are used by the various utility functions. In addition to those keys, there is the special `ADDITIONAL_PROPERTY_FLAG` flag that is added to a schema under certain conditions by the `retrieveSchema()` utility. These constants can be found on GitHub [here](https://github.com/rjsf-team/react-jsonschema-form/blob/main/packages/utils/src/constants.ts). ## Types Additionally, the Typescript types used by the utility functions represent nearly all the types used by RJSF. Those types are exported for use by `@rjsf/core` and all the themes, as well as any customizations you may build. These types can be found on GitHub [here](https://github.com/rjsf-team/react-jsonschema-form/blob/main/packages/utils/src/types.ts). ## Enums There are enumerations in `@rjsf/utils` that are exported for use by `@rjsf/core` and all the themes, as well as any customizations you may build. These enums can be found on GitHub [here](https://github.com/rjsf-team/react-jsonschema-form/blob/main/packages/utils/src/enums.ts). ## Non-Validator utility functions ### allowAdditionalItems() Checks the schema to see if it is allowing additional items, by verifying that `schema.additionalItems` is an object. The user is warned in the console if `schema.additionalItems` has the value `true`. #### Parameters - schema: S - The schema object to check #### Returns - boolean: True if additional items is allowed, otherwise false ### ariaDescribedByIds<T = any>() Return a list of element ids that contain additional information about the field that can be used to as the aria description of the field. #### Parameters - id: IdSchema<T> | string - Either simple string id or an IdSchema from which to extract it - [includeExamples=false]: boolean - Optional flag, if true, will add the `examplesId` into the list #### Returns - string: The string containing the list of ids for use in an `aria-describedBy` attribute ### asNumber() Attempts to convert the string into a number. If an empty string is provided, then `undefined` is returned. If a `null` is provided, it is returned. If the string ends in a `.` then the string is returned because the user may be in the middle of typing a float number. If a number ends in a pattern like `.0`, `.20`, `.030`, string is returned because the user may be typing number that will end in a non-zero digit. Otherwise, the string is wrapped by `Number()` and if that result is not `NaN`, that number will be returned, otherwise the string `value` will be. #### Parameters - value: string | null - The string or null value to convert to a number #### Returns - undefined | null | string | number: The `value` converted to a number when appropriate, otherwise the `value` ### canExpand<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Checks whether the field described by `schema`, having the `uiSchema` and `formData` supports expanding. The UI for the field can expand if it has additional properties, is not forced as non-expandable by the `uiSchema` and the `formData` object doesn't already have `schema.maxProperties` elements. #### Parameters - schema: S - The schema for the field that is being checked - [uiSchema={}]: UiSchema<T, S, F> - The uiSchema for the field - [formData]: T | undefined - The formData for the field #### Returns - boolean: True if the schema element has additionalProperties, is expandable, and not at the maxProperties limit ### createErrorHandler<T = any>() Given a `formData` object, recursively creates a `FormValidation` error handling structure around it #### Parameters - formData: T - The form data around which the error handler is created #### Returns - FormValidation<T>: A `FormValidation` object based on the `formData` structure ### dataURItoBlob() Given the `FileReader.readAsDataURL()` based `dataURI` extracts that data into an actual Blob along with the name of that Blob if provided in the URL. If no name is provided, then the name falls back to `unknown`. #### Parameters - dataURI: string - The `DataUrl` potentially containing name and raw data to be converted to a Blob #### Returns - { blob: Blob, name: string }: An object containing a Blob and its name, extracted from the URI ### deepEquals() Implements a deep equals using the `lodash.isEqualWith` function, that provides a customized comparator that assumes all functions are equivalent. #### Parameters - a: any - The first element to compare - b: any - The second element to compare #### Returns - boolean: True if the `a` and `b` are deeply equal, false otherwise ### descriptionId<T = any>() Return a consistent `id` for the field description element. #### Parameters - id: IdSchema<T> | string - Either simple string id or an IdSchema from which to extract it #### Returns - string: The consistent id for the field description element from the given `id` ### englishStringTranslator() Translates a `TranslatableString` value `stringToTranslate` into english. When a `params` array is provided, each value in the array is used to replace any of the replaceable parameters in the `stringToTranslate` using the `%1`, `%2`, etc. replacement specifiers. #### Parameters stringToTranslate: TranslatableString - The `TranslatableString` value to convert to english [params]: string[] - The optional list of replaceable parameter values to substitute to the english string #### Returns - string: The `stringToTranslate` itself with any replaceable parameter values substituted ### enumOptionsDeselectValue<S extends StrictRJSFSchema = RJSFSchema>() Removes the enum option value at the `valueIndex` from the currently `selected` (list of) value(s). If `selected` is a list, then that list is updated to remove the enum option value with the `valueIndex` in `allEnumOptions`. If it is a single value, then if the enum option value with the `valueIndex` in `allEnumOptions` matches `selected`, undefined is returned, otherwise the `selected` value is returned. #### Parameters - valueIndex: string | number - The index of the value to be removed from the selected list or single value - [selected]: EnumOptionsType<S>["value"] | EnumOptionsType<S>["value"][] | undefined - The current (list of) selected value(s) - [allEnumOptions=[]]: EnumOptionsType<S>[] - The list of all the known enumOptions #### Returns - EnumOptionsType<S>["value"][]: The updated `selected` list with the `value` removed from it ### enumOptionsIndexForValue<S extends StrictRJSFSchema = RJSFSchema>() Returns the index(es) of the options in `allEnumOptions` whose value(s) match the ones in `value`. All the `enumOptions` are filtered based on whether they are a "selected" `value` and the index of each selected one is then stored in an array. If `multiple` is true, that array is returned, otherwise the first element in the array is returned. #### Parameters - value: EnumOptionsType<S>["value"] | EnumOptionsType<S>["value"][] - The single value or list of values for which indexes are desired - [allEnumOptions=[]]: EnumOptionsType<S>[] - The list of all the known enumOptions - [multiple=false]: boolean - Optional flag, if true will return a list of index, otherwise a single one #### Returns - string | string[] | undefined: A single string index for the first `value` in `allEnumOptions`, if not `multiple`. Otherwise, the list of indexes for (each of) the value(s) in `value`. ### enumOptionsIsSelected<S extends StrictRJSFSchema = RJSFSchema>() Determines whether the given `value` is (one of) the `selected` value(s). #### Parameters - value: EnumOptionsType<S>["value"] - The value being checked to see if it is selected - selected: EnumOptionsType<S>["value"] | EnumOptionsType<S>["value"][] - The current selected value or list of values - [allEnumOptions=[]]: EnumOptionsType<S>[] - The list of all the known enumOptions #### Returns - boolean: true if the `value` is one of the `selected` ones, false otherwise ### enumOptionsSelectValue<S extends StrictRJSFSchema = RJSFSchema>() Add the `value` to the list of `selected` values in the proper order as defined by `allEnumOptions`. #### Parameters - valueIndex: string | number - The index of the value that should be selected - selected: EnumOptionsType<S>["value"][] - The current list of selected values - [allEnumOptions=[]]: EnumOptionsType<S>[] - The list of all the known enumOptions #### Returns - EnumOptionsType<S>["value"][]: The updated list of selected enum values with `value` added to it in the proper location ### enumOptionsValueForIndex<S extends StrictRJSFSchema = RJSFSchema>() Returns the value(s) from `allEnumOptions` at the index(es) provided by `valueIndex`. If `valueIndex` is not an array AND the index is not valid for `allEnumOptions`, `emptyValue` is returned. If `valueIndex` is an array, AND it contains an invalid index, the returned array will have the resulting undefined values filtered out, leaving only valid values or in the worst case, an empty array. #### Parameters - valueIndex: string | number | Array<string | number> - The index(es) of the value(s) that should be returned - [allEnumOptions=[]]: EnumOptionsType<S>[] - The list of all the known enumOptions - [emptyValue]: EnumOptionsType<S>["value"] | undefined - The value to return when the non-array `valueIndex` does not refer to a real option #### Returns - EnumOptionsType<S>["value"] | EnumOptionsType<S>["value"][] | undefined: The single or list of values specified by the single or list of indexes if they are valid. Otherwise, `emptyValue` or an empty list. ### errorId<T = any>() Return a consistent `id` for the field error element. #### Parameters - id: IdSchema<T> | string - Either simple string id or an IdSchema from which to extract it #### Returns - string: The consistent id for the field error element from the given `id` ### examplesId<T = any>() Return a consistent `id` for the field examples element. #### Parameters - id: IdSchema<T> | string - Either simple string id or an IdSchema from which to extract it #### Returns - string: The consistent id for the field examples element from the given `id` ### findSchemaDefinition<S extends StrictRJSFSchema = RJSFSchema>() Given the name of a `$ref` from within a schema, using the `rootSchema`, look up and return the sub-schema using the path provided by that reference. If `#` is not the first character of the reference, or the path does not exist in the schema, then throw an Error. Otherwise, return the sub-schema. Also deals with nested `$ref`s in the sub-schema. #### Parameters - $ref: string - The ref string for which the schema definition is desired - [rootSchema={}]: S - The root schema in which to search for the definition #### Returns - S: The sub-schema within the `rootSchema` which matches the `$ref` if it exists #### Throws - Error indicating that no schema for that reference exists ### getDiscriminatorFieldFromSchema<S extends StrictRJSFSchema = RJSFSchema>() Returns the `discriminator.propertyName` when defined in the `schema` if it is a string. A warning is generated when it is not a string. Returns `undefined` when a valid discriminator is not present. #### Parameters - schema: S - The schema from which the discriminator is potentially obtained #### Returns - string | undefined: The `discriminator.propertyName` if it exists in the schema, otherwise `undefined` ### getInputProps<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Using the `schema`, `defaultType` and `options`, extract out the props for the `<input>` element that make sense. #### Parameters - schema: S - The schema for the field provided by the widget - [defaultType]: string | undefined - The default type, if any, for the field provided by the widget - [options={}]: UIOptionsType<T, S, F> - The UI Options for the field provided by the widget - [autoDefaultStepAny=true]: boolean - Determines whether to auto-default step=any when the type is number and no step #### Returns - InputPropsType: The extracted `InputPropsType` object ### getSchemaType() Gets the type of a given `schema`. If the type is not explicitly defined, then an attempt is made to infer it from other elements of the schema as follows: - schema.const: Returns the `guessType()` of that value - schema.enum: Returns `string` - schema.properties: Returns `object` - schema.additionalProperties: Returns `object` - type is an array with a length of 2 and one type is 'null': Returns the other type #### Parameters - schema: S - The schema for which to get the type #### Returns - string | string[] | undefined: The type of the schema ### getSubmitButtonOptions<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Extracts any `ui:submitButtonOptions` from the `uiSchema` and merges them onto the `DEFAULT_OPTIONS` #### Parameters - [uiSchema={}]: UiSchema<T, S, F> - the UI Schema from which to extract submit button props #### Returns - UISchemaSubmitButtonOptions: The merging of the `DEFAULT_OPTIONS` with any custom ones ### getUiOptions<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Get all passed options from ui:options, and ui:<optionName>, returning them in an object with the `ui:` stripped off. Any `globalOptions` will always be returned, unless they are overridden by options in the `uiSchema`. #### Parameters - [uiSchema={}]: UiSchema<T, S, F> - The UI Schema from which to get any `ui:xxx` options - [globalOptions={}]: GlobalUISchemaOptions - The optional Global UI Schema from which to get any fallback `xxx` options #### Returns - UIOptionsType<T, S, F> An object containing all of the `ui:xxx` options with the `ui:` stripped off along with all `globalOptions` ### getTemplate<Name extends keyof TemplatesType<T, S, F>, T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Returns the template with the given `name` from either the `uiSchema` if it is defined or from the `registry` otherwise. NOTE, since `ButtonTemplates` are not overridden in `uiSchema` only those in the `registry` are returned. #### Parameters - name: Name - The name of the template to fetch, restricted to the keys of `TemplatesType` - registry: Registry<T, S, F> - The `Registry` from which to read the template - [uiOptions={}]: UIOptionsType<T, S, F> - The `UIOptionsType` from which to read an alternate template #### Returns - TemplatesType<T, S, F>[Name] - The template from either the `uiSchema` or `registry` for the `name` ### getWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Given a schema representing a field to render and either the name or actual `Widget` implementation, returns the React component that is used to render the widget. If the `widget` is already a React component, then it is wrapped with a `MergedWidget`. Otherwise an attempt is made to look up the widget inside of the `registeredWidgets` map based on the schema type and `widget` name. If no widget component can be found an `Error` is thrown. #### Parameters - schema: S - The schema for the field - widget: Widget<T, S, F> | string - Either the name of the widget OR a `Widget` implementation to use - [registeredWidgets={}]: RegistryWidgetsType<T, S, F> - A registry of widget name to `Widget` implementation #### Returns - Widget<T, S, F>: The `Widget` component to use #### Throws - An error if there is no `Widget` component that can be returned ### guessType() Given a specific `value` attempts to guess the type of a schema element. In the case where we have to implicitly create a schema, it is useful to know what type to use based on the data we are defining. #### Parameters - value: any - The value from which to guess the type #### Returns - string: The best guess for the object type ### hashForSchema<S extends StrictRJSFSchema = RJSFSchema>() Stringifies the schema and returns the hash of the resulting string. #### Parameters - schema: S - The schema for which the hash is desired #### Returns - string: The string obtained from the hash of the stringified schema ### hasWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Detects whether the `widget` exists for the `schema` with the associated `registryWidgets` and returns true if it does, or false if it doesn't. #### Parameters - schema: S - The schema for the field - widget: Widget<T, S, F> | string - Either the name of the widget OR a `Widget` implementation to use - [registeredWidgets={}]: RegistryWidgetsType<T, S, F> - A registry of widget name to `Widget` implementation #### Returns - boolean: True if the widget exists, false otherwise ### helpId<T = any>() Return a consistent `id` for the field help element. #### Parameters - id: IdSchema<T> | string - Either simple string id or an IdSchema from which to extract it #### Returns - string: The consistent id for the field help element from the given `id` ### isConstant<S extends StrictRJSFSchema = RJSFSchema>() This function checks if the given `schema` matches a single constant value. This happens when either the schema has an `enum` array with a single value or there is a `const` defined. #### Parameters - schema: S - The schema for a field #### Returns - boolean: True if the `schema` has a single constant value, false otherwise ### isCustomWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Checks to see if the `uiSchema` contains the `widget` field and that the widget is not `hidden` #### Parameters - uiSchema: UiSchema<T, S, F> - The UI Schema from which to detect if it is customized #### Returns - boolean: True if the `uiSchema` describes a custom widget, false otherwise ### isFixedItems<S extends StrictRJSFSchema = RJSFSchema>() Detects whether the given `schema` contains fixed items. This is the case when `schema.items` is a non-empty array that only contains objects. #### Parameters - schema: S - The schema in which to check for fixed items #### Returns - boolean: True if there are fixed items in the schema, false otherwise ### isObject() Determines whether a `thing` is an object for the purposes of RSJF. In this case, `thing` is an object if it has the type `object` but is NOT null, an array or a File. #### Parameters - thing: any - The thing to check to see whether it is an object #### Returns - boolean: True if it is a non-null, non-array, non-File object ### labelValue() Helper function that will return the value to use for a widget `label` based on `hideLabel`. The `fallback` is used as the return value from the function when `hideLabel` is true. Due to the implementation of theme components, it may be necessary to return something other than `undefined` to cause the theme component to not render a label. Some themes require may `false` and others may require an empty string. #### Parameters - [label]: string | ReactElement | undefined - The label string or component to render when not hidden - [hideLabel]: boolean| undefined - Flag, if true, will cause the label to be hidden - [fallback]: undefined | false | '' - One of 3 values, `undefined` (the default), `false` or an empty string - #### Returns - string | boolean | undefined: `fallback` if `hideLabel` is true, otherwise `label` ### localToUTC() Converts a local Date string into a UTC date string #### Parameters - dateString: string - The string representation of a date as accepted by the `Date()` constructor #### Returns - string | undefined: A UTC date string if `dateString` is truthy, otherwise undefined ### mergeDefaultsWithFormData<T = any, S extends StrictRJSFSchema = RJSFSchema,>() Merges the `defaults` object of type `T` into the `formData` of type `T` When merging defaults and form data, we want to merge in this specific way: - objects are deeply merged - arrays are merged in such a way that: - when the array is set in form data, only array entries set in form data are deeply merged; additional entries from the defaults are ignored unless `mergeExtraArrayDefaults` is true, in which case the extras are appended onto the end of the form data - when the array is not set in form data, the default is copied over - scalars are overwritten/set by form data #### Parameters - [defaults]: T | undefined - The defaults to merge - [formData]: T | undefined - The form data into which the defaults will be merged - [mergeExtraArrayDefaults=false]: boolean - If true, any additional default array entries are appended onto the formData #### Returns - T | undefined: The resulting merged form data with defaults ### mergeObjects() Recursively merge deeply nested objects. #### Parameters - obj1: GenericObjectType - The first object to merge - obj2: GenericObjectType - The second object to merge - [concatArrays=false]: boolean | "preventDuplicates" - Optional flag that, when true, will cause arrays to be concatenated. Use "preventDuplicates" to merge arrays in a manner that prevents any duplicate entries from being merged. #### Returns @returns - A new object that is the merge of the two given objects ### mergeSchemas() Recursively merge deeply nested schemas. The difference between mergeSchemas and mergeObjects is that mergeSchemas only concats arrays for values under the 'required' keyword, and when it does, it doesn't include duplicate values. NOTE: Uses shallow comparison for the duplicate checking. #### Parameters - obj1: GenericObjectType - The first object to merge - obj2: GenericObjectType - The second object to merge #### Returns - GenericObjectType: The merged schema object ### optionId() Return a consistent `id` for the `optionIndex`s of a `Radio` or `Checkboxes` widget #### Parameters - id: string - The id of the parent component for the option - optionIndex: number - The index of the option for which the id is desired #### Returns - string: An id for the option index based on the parent `id` ### optionsList<S extends StrictRJSFSchema = RJSFSchema>() Gets the list of options from the schema. If the schema has an enum list, then those enum values are returned. The labels for the options will be extracted from the non-standard `enumNames` if it exists otherwise will be the same as the `value`. If the schema has a `oneOf` or `anyOf`, then the value is the list of `const` values from the schema and the label is either the `schema.title` or the value. NOTE: `enumNames` is deprecated and may be removed in a future major version of RJSF. #### Parameters - schema: S - The schema from which to extract the options list #### Returns - { schema?: S, label: string, value: any }: The list of options from the schema ### orderProperties() Given a list of `properties` and an `order` list, returns a list that contains the `properties` ordered correctly. If `order` is not an array, then the untouched `properties` list is returned. Otherwise `properties` is ordered per the `order` list. If `order` contains a '_' then any `properties` that are not mentioned explicity in `order` will be places in the location of the `_`. #### Parameters - properties: string[] - The list of property keys to be ordered - order: string[] - An array of property keys to be ordered first, with an optional '\*' property #### Returns - string[]: A list with the `properties` ordered #### Throws - Error when the properties cannot be ordered correctly ### pad() Returns a string representation of the `num` that is padded with leading "0"s if necessary #### Parameters - num: number - The number to pad - width: number - The width of the string at which no lead padding is necessary #### Returns - string: The number converted to a string with leading zero padding if the number of digits is less than `width` ### parseDateString() Parses the `dateString` into a `DateObject`, including the time information when `includeTime` is true #### Parameters - dateString: string - The date string to parse into a DateObject - [includeTime=true]: boolean - Optional flag, if false, will not include the time data into the object #### Returns - DateObject: The date string converted to a `DateObject` #### Throws - Error when the date cannot be parsed from the string ### rangeSpec<S extends StrictRJSFSchema = RJSFSchema>() Extracts the range spec information `{ step?: number, min?: number, max?: number }` that can be spread onto an HTML input from the range analog in the schema `{ multipleOf?: number, minimum?: number, maximum?: number }`. #### Parameters - schema: S - The schema from which to extract the range spec #### Returns - RangeSpecType: A range specification from the schema ### replaceStringParameters() Potentially substitutes all replaceable parameters with the associated value(s) from the `params` if available. When a `params` array is provided, each value in the array is used to replace any of the replaceable parameters in the `inputString` using the `%1`, `%2`, etc. replacement specifiers. #### Parameters - inputString: string - The string which will be potentially updated with replacement parameters - [params]: string[] - The optional list of replaceable parameter values to substitute into the english string #### Returns - string: The updated string with any replacement specifiers replaced ### schemaRequiresTrueValue<S extends StrictRJSFSchema = RJSFSchema>() Check to see if a `schema` specifies that a value must be true. This happens when: - `schema.const` is truthy - `schema.enum` == `[true]` - `schema.anyOf` or `schema.oneOf` has a single value which recursively returns true - `schema.allOf` has at least one value which recursively returns true #### Parameters - schema: S - The schema to check #### Returns - boolean: True if the schema specifies a value that must be true, false otherwise ### shouldRender() Determines whether the given `component` should be rerendered by comparing its current set of props and state against the next set. If either of those two sets are not the same, then the component should be rerendered. #### Parameters - component: React.Component - A React component being checked - nextProps: any - The next set of props against which to check - nextState: any - The next set of state against which to check #### Returns - True if boolean: the component should be re-rendered, false otherwise ### titleId<T = any>() Return a consistent `id` for the field title element. #### Parameters - id: IdSchema<T> | string - Either simple string id or an IdSchema from which to extract it #### Returns - string: The consistent id for the field title element from the given `id` ### toConstant<S extends StrictRJSFSchema = RJSFSchema>() Returns the constant value from the schema when it is either a single value enum or has a const key. Otherwise, throws an error. #### Parameters - schema: S - The schema from which to obtain the constant value #### Returns - string | number | boolean: The constant value for the schema #### Throws - Error when the schema does not have a constant value ### toDateString() Returns a UTC date string for the given `dateObject`. If `time` is false, then the time portion of the string is removed. #### Parameters - dateObject: DateObject - The `DateObject` to convert to a date string - [time=true]: boolean - Optional flag used to remove the time portion of the date string if false #### Returns - string: The UTC date string ### toErrorList<T = any>() Converts an `errorSchema` into a list of `RJSFValidationErrors` #### Parameters - errorSchema: ErrorSchema<T> - The `ErrorSchema` instance to convert - [fieldPath=[]]: string[] | undefined - The current field path, defaults to [] if not specified #### Returns - RJSFValidationErrors[]: The list of `RJSFValidationErrors` extracted from the `errorSchema` ### toErrorSchema<T = any>() Transforms a RJSF validation errors list into an `ErrorSchema` ```ts const changesThis = [ { property: '.level1.level2[2].level3', message: 'err a' }, { property: '.level1.level2[2].level3', message: 'err b' }, { property: '.level1.level2[4].level3', message: 'err b' }, ]; const intoThis = { level1: { level2: { 2: { level3: { errors: ['err a', 'err b'] } }, 4: { level3: { errors: ['err b'] } }, }, }, }; ``` #### Parameters - errors: RJSFValidationError[] - The list of RJSFValidationError objects #### Returns - ErrorSchema<T>: The `ErrorSchema` built from the list of `RJSFValidationErrors` #### unwrapErrorHandler<T = any>() Unwraps the `errorHandler` structure into the associated `ErrorSchema`, stripping the `addError()` functions from it #### Parameters - errorHandler: FormValidation<T> - The `FormValidation` error handling structure #### Returns - ErrorSchema<T>: The `ErrorSchema` resulting from the stripping of the `addError()` function ### utcToLocal() Converts a UTC date string into a local Date format #### Parameters - jsonDate: string - A UTC date string #### Returns - string: An empty string when `jsonDate` is falsey, otherwise a date string in local format ### validationDataMerge<T = any>() Merges the errors in `additionalErrorSchema` into the existing `validationData` by combining the hierarchies in the two `ErrorSchema`s and then appending the error list from the `additionalErrorSchema` obtained by calling `toErrorList()` on the `errors` in the `validationData`. If no `additionalErrorSchema` is passed, then `validationData` is returned. #### Parameters - validationData: ValidationData<T> - The current `ValidationData` into which to merge the additional errors - [additionalErrorSchema]: ErrorSchema<T> | undefined - The optional additional set of errors in an `ErrorSchema` #### Returns - ValidationData<T>: The `validationData` with the additional errors from `additionalErrorSchema` merged into it, if provided. ### withIdRefPrefix<S extends StrictRJSFSchema = RJSFSchema>() Recursively prefixes all `$ref`s in a schema with the value of the `ROOT_SCHEMA_PREFIX` constant. This is used in isValid to make references to the rootSchema #### Parameters - schemaNode: S - The object node to which a `ROOT_SCHEMA_PREFIX` is added when a `$ref` is part of it #### Returns - S: A copy of the `schemaNode` with updated `$ref`s ## Validator-based utility functions ### getDefaultFormState<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Returns the superset of `formData` that includes the given set updated to include any missing fields that have computed to have defaults provided in the `schema`. #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be used when necessary - theSchema: S - The schema for which the default state is desired - [formData]: T | undefined - The current formData, if any, onto which to provide any missing defaults - [rootSchema]: S | undefined - The root schema, used to primarily to look up `$ref`s - [includeUndefinedValues=false]: boolean | "excludeObjectChildren" - Optional flag, if true, cause undefined values to be added as defaults. If "excludeObjectChildren", cause undefined values for this object and pass `includeUndefinedValues` as false when computing defaults for any nested object properties. #### Returns - T: The resulting `formData` with all the defaults provided ### getDisplayLabel<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Determines whether the combination of `schema` and `uiSchema` properties indicates that the label for the `schema` should be displayed in a UI. #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be used when necessary - schema: S - The schema for which the display label flag is desired - [uiSchema={}]: UiSchema<T, S, F> - The UI schema from which to derive potentially displayable information - [rootSchema]: S | undefined - The root schema, used to primarily to look up `$ref`s - [globalOptions={}]: GlobalUISchemaOptions - The optional Global UI Schema from which to get any fallback `xxx` options #### Returns - boolean: True if the label should be displayed or false if it should not ### getClosestMatchingOption<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Determines which of the given `options` provided most closely matches the `formData`. Returns the index of the option that is valid and is the closest match, or 0 if there is no match. The closest match is determined using the number of matching properties, and more heavily favors options with matching readOnly, default, or const values. #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be used when necessary - rootSchema: S - The root schema, used to primarily to look up `$ref`s - [formData]: T | undefined - The current formData, if any, used to figure out a match - options: S[] - The list of options to find a matching options from - [selectedOption=-1]: number - The index of the currently selected option, defaulted to -1 if not specified - [discriminatorField]: string | undefined - The optional name of the field within the options object whose value is used to determine which option is selected #### Returns - number: The index of the option that is the closest match to the `formData` or the `selectedOption` if no match ### getFirstMatchingOption<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Given the `formData` and list of `options`, attempts to find the index of the first option that matches the data. Always returns the first option if there is nothing that matches. #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be used when necessary - [formData]: T | undefined - The current formData, if any, used to figure out a match - options: S[] - The list of options to find a matching options from - rootSchema: S - The root schema, used to primarily to look up `$ref`s - [discriminatorField]: string | undefined - The optional name of the field within the options object whose value is used to determine which option is selected #### Returns - number: The index of the first matched option or 0 if none is available ### getMatchingOption<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Given the `formData` and list of `options`, attempts to find the index of the option that best matches the data. Deprecated, use `getFirstMatchingOption()` instead. #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be used when necessary - [formData]: T | undefined - The current formData, if any, used to figure out a match - options: S[] - The list of options to find a matching options from - rootSchema: S - The root schema, used to primarily to look up `$ref`s - [discriminatorField]: string | undefined - The optional name of the field within the options object whose value is used to determine which option is selected #### Returns - number: The index of the matched option or 0 if none is available ### isFilesArray<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Checks to see if the `schema` and `uiSchema` combination represents an array of files #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be used when necessary - schema: S - The schema for which check for array of files flag is desired - [uiSchema={}]: UiSchema<T, S, F> - The UI schema from which to check the widget - [rootSchema]: S | undefined - The root schema, used to primarily to look up `$ref`s #### Returns - boolean: True if schema/uiSchema contains an array of files, otherwise false ### isMultiSelect<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Checks to see if the `schema` combination represents a multi-select #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be used when necessary - schema: S - The schema for which check for a multi-select flag is desired - [rootSchema]: S | undefined - The root schema, used to primarily to look up `$ref`s #### Returns - boolean: True if schema contains a multi-select, otherwise false ### isSelect<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Checks to see if the `schema` combination represents a select #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be used when necessary - theSchema: S - The schema for which check for a select flag is desired - [rootSchema]: S | undefined - The root schema, used to primarily to look up `$ref`s #### Returns - boolean: True if schema contains a select, otherwise false ### mergeValidationData<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Merges the errors in `additionalErrorSchema` into the existing `validationData` by combining the hierarchies in the two `ErrorSchema`s and then appending the error list from the `additionalErrorSchema` obtained by calling `validator.toErrorList()` onto the `errors` in the `validationData`. If no `additionalErrorSchema` is passed, then `validationData` is returned. > NOTE: This is function is deprecated. Use the `validationDataMerge()` function exported from `@rjsf/utils` instead. This function will be > removed in the next major release. #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be used to convert an ErrorSchema to a list of errors - validationData: ValidationData<T> - The current `ValidationData` into which to merge the additional errors - [additionalErrorSchema]: ErrorSchema<T> | undefined - The additional set of errors in an `ErrorSchema` #### Returns - ValidationData<T>: The `validationData` with the additional errors from `additionalErrorSchema` merged into it, if provided. ### retrieveSchema<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Retrieves an expanded schema that has had all of its conditions, additional properties, references and dependencies resolved and merged into the `schema` given a `validator`, `rootSchema` and `rawFormData` that is used to do the potentially recursive resolution. #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs - schema: S - The schema for which retrieving a schema is desired - [rootSchema={}]: S - The root schema that will be forwarded to all the APIs - [rawFormData]: T | undefined - The current formData, if any, to assist retrieving a schema #### Returns - RJSFSchema: The schema having its conditions, additional properties, references and dependencies resolved ### sanitizeDataForNewSchema<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Sanitize the `data` associated with the `oldSchema` so it is considered appropriate for the `newSchema`. If the new schema does not contain any properties, then `undefined` is returned to clear all the form data. Due to the nature of schemas, this sanitization happens recursively for nested objects of data. Also, any properties in the old schema that are non-existent in the new schema are set to `undefined`. #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be used when necessary - rootSchema: S - The root JSON schema of the entire form - [newSchema]: S | undefined - The new schema for which the data is being sanitized - [oldSchema]: S | undefined - The old schema from which the data originated - [data={}]: any - The form data associated with the schema, defaulting to an empty object when undefined #### Returns - T: The new form data, with all the fields uniquely associated with the old schema set to `undefined`. Will return `undefined` if the new schema is not an object containing properties. ### toIdSchema<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Generates an `IdSchema` object for the `schema`, recursively #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be used when necessary - schema: S - The schema for which the `IdSchema` is desired - [id]: string | null - The base id for the schema - [rootSchema]: S | undefined- The root schema, used to primarily to look up `$ref`s - [formData]: T | undefined - The current formData, if any, to assist retrieving a schema - [idPrefix='root']: string - The prefix to use for the id - [idSeparator='_']: string - The separator to use for the path segments in the id #### Returns - IDSchema<T>: The `IdSchema` object for the `schema` ### toPathSchema<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Generates an `PathSchema` object for the `schema`, recursively #### Parameters - validator: ValidatorType<T, S, F> - An implementation of the `ValidatorType` interface that will be used when necessary - schema: S - The schema for which the `PathSchema` is desired - [name='']: string - The base name for the schema - [rootSchema]: S | undefined - The root schema, used to primarily to look up `$ref`s - [formData]: T | undefined - The current formData, if any, to assist retrieving a schema #### Returns - PathSchema<T> - The `PathSchema` object for the `schema` ## Schema utils creation function ### createSchemaUtils<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Creates a `SchemaUtilsType` interface that is based around the given `validator` and `rootSchema` parameters. The resulting interface implementation will forward the `validator` and `rootSchema` to all the wrapped APIs. #### Parameters - validator: ValidatorType<T, S, F> - an implementation of the `ValidatorType` interface that will be forwarded to all the APIs - rootSchema: S - The root schema that will be forwarded to all the APIs #### Returns - SchemaUtilsType<T, S, F> - An implementation of a `SchemaUtilsType` interface ## ErrorSchema builder class ### ErrorSchemaBuilder<T = any>(initialSchema?: ErrorSchema<T>) constructor The `ErrorSchemaBuilder<T>` is used to build an `ErrorSchema<T>` since the definition of the `ErrorSchema` type is designed for reading information rather than writing it. Use this class to add, replace or clear errors in an error schema by using either dotted path or an array of path names. Once you are done building the `ErrorSchema`, you can get the result and/or reset all the errors back to an initial set and start again. #### Parameters - [initialSchema]: ErrorSchema<T> | undefined - The optional set of initial errors, that will be cloned into the class #### Returns - ErrorSchemaBuilder<T> - The instance of the `ErrorSchemaBuilder` class ### ErrorSchema getter function Returns the `ErrorSchema` that has been updated by the methods of the `ErrorSchemaBuilder` Usage: ```ts import { ErrorSchemaBuilder, ErrorSchema } from "@rjsf/utils"; const builder = new ErrorSchemaBuilder(); // Do some work using the builder ... const errorSchema: ErrorSchema = builder.ErrorSchema; ``` ### resetAllErrors() Resets all errors in the `ErrorSchemaBuilder` back to the `initialSchema` if provided, otherwise an empty set. #### Parameters - [initialSchema]: ErrorSchema<T> | undefined - The optional set of initial errors, that will be cloned into the class #### Returns - ErrorSchemaBuilder<T> - The instance of the `ErrorSchemaBuilder` class ### addErrors() Adds the `errorOrList` to the list of errors in the `ErrorSchema` at either the root level or the location within the schema described by the `pathOfError`. For more information about how to specify the path see the [eslint lodash plugin docs](https://github.com/wix/eslint-plugin-lodash/blob/master/docs/rules/path-style.md). #### Parameters - errorOrList: string | string[] - The error or list of errors to add into the `ErrorSchema` - [pathOfError]: string | string[] | undefined - The optional path into the `ErrorSchema` at which to add the error(s) #### Returns - ErrorSchemaBuilder<T> - The instance of the `ErrorSchemaBuilder` class ### setErrors() Sets/replaces the `errorOrList` as the error(s) in the `ErrorSchema` at either the root level or the location within the schema described by the `pathOfError`. For more information about how to specify the path see the [eslint lodash plugin docs](https://github.com/wix/eslint-plugin-lodash/blob/master/docs/rules/path-style.md). #### Parameters - errorOrList: string | string[] - The error or list of errors to add into the `ErrorSchema` - [pathOfError]: string | string[] | undefined - The optional path into the `ErrorSchema` at which to add the error(s) #### Returns - ErrorSchemaBuilder<T> - The instance of the `ErrorSchemaBuilder` class ### clearErrors() Clears the error(s) in the `ErrorSchema` at either the root level or the location within the schema described by the `pathOfError`. For more information about how to specify the path see the [eslint lodash plugin docs](https://github.com/wix/eslint-plugin-lodash/blob/master/docs/rules/path-style.md). #### Parameters - [pathOfError]: string | string[] | undefined - The optional path into the `ErrorSchema` at which to add the error(s) #### Returns - ErrorSchemaBuilder<T> - The instance of the `ErrorSchemaBuilder` class �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/api-reference/validator-ajv8.md���������������������0000664�0000000�0000000�00000007105�14467713645�0027333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# @rjsf/validator-ajv8 APIs In RJSF version 5, the original, embedded AJV 6 validator implementation from earlier versions was extracted into its own package, `@rjsf/validator-ajv6`, which was immediately deprecated since AJV 6 is no longer getting maintenance updates. A new `@rjsf/validator-ajv8` package was added that uses the AJV 8 package, including adding support for using precompiled validators. Below are the exported API functions that are provided by this package. See the [Validation documentation](../usage/validation.md) for examples of using these APIs. ## Types There are a few Typescript types that are exported by `@rjsf/validator-ajv8` in support of the APIs. These types can be found on GitHub [here](https://github.com/rjsf-team/react-jsonschema-form/blob/main/packages/validator-ajv8/src/types.ts). ## APIs ### customizeValidator<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Creates and returns a customized implementation of the `ValidatorType` with the given customization `options` if provided. If a `localizer` is provided, it is used to translate the messages generated by the underlying AJV validation. #### Parameters - [options={}]: CustomValidatorOptionsType - The optional map of `CustomValidatorOptionsType` options that are used to create the `ValidatorType` instance - [localizer]: Localizer | undefined - If provided, is used to localize a list of Ajv `ErrorObject`s after running the form validation using AJV #### Returns - ValidatorType<T, S, F>: The custom validator implementation resulting from the set of parameters provided ### compileSchemaValidators<S extends StrictRJSFSchema = RJSFSchema>() The function used to compile a schema into an output file in the form that allows it to be used as a precompiled validator. The main reasons for using a precompiled validator is reducing code size, improving validation speed and, most importantly, avoiding dynamic code compilation when prohibited by a browser's Content Security Policy. For more information about AJV code compilation see: https://ajv.js.org/standalone.html #### Parameters - schema: S - The schema to be compiled into a set of precompiled validators functions - output: string - The name of the file into which the precompiled validator functions will be generated - [options={}]: CustomValidatorOptionsType - The set of `CustomValidatorOptionsType` information used to alter the AJV validator used for compiling the schema. They are the same options that are passed to the `customizeValidator()` function in order to modify the behavior of the regular AJV-based validator. ### createPrecompiledValidator<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>() Creates and returns a `ValidatorType` interface that is implemented with a precompiled validator. If a `localizer` is provided, it is used to translate the messages generated by the underlying AJV validation. > NOTE: The `validateFns` parameter is an object obtained by importing from a precompiled validation file created via the `compileSchemaValidators()` function. #### Parameters - validateFns: ValidatorFunctions - The map of the validation functions that are created by the `compileSchemaValidators()` function - rootSchema: S - The root schema that was used with the `compileSchemaValidators()` function - [localizer]: Localizer | undefined - If provided, is used to localize a list of Ajv `ErrorObject`s after running the form validation using AJV #### Returns - ValidatorType<T, S, F>: The precompiled validator implementation resulting from the set of parameters provided �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/contributing.md�������������������������������������0000664�0000000�0000000�00000017244�14467713645�0024507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Contributing ## Development server We are using `Vite` to power our `playground`, which caches all the built `@rjsf/*` distributions. In order to test the `playground` locally after a new clone or fresh pull from `main`, run the following from the root directory of the monorepo: ```bash npm install npm run build cd packages/playground npm start ``` This will start the live development server showcasing components at [localhost:8080](http://localhost:8080). Whenever you make changes to source code, stop the running playground and return to the root directory and rerun `npm run build`. Thanks to `nx` caching, this should only rebuild what is necessary. After the build is complete, return to the root of the `playground` and restart the server via `npm start`. ### First time step If this is the first time you have cloned the repo, run the `npm run prepare` script that will set up `husky` to provide a git precommit hook that will format and lint any code you have added to a PR. ### Optional development process With the large number of packages, sometimes running `npm run build` or `npm start` from the root directory will overwhelm an underpowered computer. If that is the situation for you, you can instead use `npm run build-serial` to build the packages one at a time instead of all at once. Also, if you are only working on one package, you can `npm run build` and `npm run test` from within the subdirectory. Finally, you can simply `npm start` inside of the `playground` directory to test changes if you have already built all of your packages, without needing to watch all of the packages via the root directory `npm start`. ## Cloud builds When building in environments with limited memory, such as Netlify, it's recommended to use `npm run build-serial` that builds the packages serially. ## Coding style All the JavaScript/Typescript code in this project conforms to the [prettier](https://github.com/prettier/prettier) coding style. Code is automatically prettified upon commit using precommit hooks, assuming you followed the `First time step` above. You can also run `npm cs-format` within any package directory you are changing. ## Documentation We use [Docusaurus](https://docusaurus.io/) to build our documentation. To run documentation locally, run: ```bash cd packages/docs npm start ``` Documentation will be served on [localhost:3000](http://localhost:3000). ## Tests You can run all tests from the root directory OR from `packages` subdirectory using the following command: ```bash npm run test ``` ### Snapshot testing All the themes, including `core` use snapshot testing (NOTE: `core` also has extensive non-snapshot tests). The source-code of these snapshot tests reside in the `core` package in the `testSnap` directory and are shared with all the themes. In order to support the various themes, the code for the tests are actually functions that take two parameters: - `Form`: ComponentType<FormProps> - The component from the theme implementation - `[customOptions]`: { [key: string]: TestRendererOptions } - an optional map of `react-test-renderer` `TestRendererOptions` implementations that some themes need to be able properly run There are functions in the `testSnap` directory: `arrayTests`, `formTests` and `objectTests`, each with its own definition of `customOptions` Each theme will basically run these functions by creating a `Xxx.test.tsx` file (where `Xxx` is `Array`, `Form` or `Object`) that looks like the following: ```tsx import arrayTests from '@rjsf/core/testSnap/arrayTests'; // OR // import arrayTests from '@rjsf/core/testSnap/formTests' // import arrayTests from '@rjsf/core/testSnap/objectTests' import Form from '../src'; arrayTests(Form); // OR // formTests(Form); // objectTests(Form); ``` Anytime you add a new feature, be sure to update the appropriate `xxxTests()` function in the `testSnap` directory and do `npm run test` from the root directory to update all the snapshots. If you add a theme-only feature, it is ok to update the appropriate `Xxx.test.tsx` file to add (or update) the theme-specific `describe()` block. For example: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import arrayTests from '@rjsf/core/testSnap/formTests'; import Form from '../src'; formTests(Form); describe('Theme specific tests', () => { it('test a theme-specific option', () => { const schema: RJSFSchema = { type: 'object', properties: { name: { type: 'string', }, }, }; const uiSchema: UiSchema = { // Enable the theme specific feature }; const tree = renderer.create(<Form schema={schema} uiSchema={uiSchema} validator={validator} />).toJSON(); expect(tree).toMatchSnapshot(); }); }); ``` See the `antd` `Form.test.tsx` for a specific example of this. ### Code coverage Code coverage reports are currently available only for the `@rjsf/core` theme package. They are generated using [nyc](https://github.com/istanbuljs/nyc) each time the `npm test-coverage` script is run. The full report can be seen by opening `./coverage/lcov-report/index.html`. #### Utils and validator-ajvX code coverage 100% code coverage is required by the `@rjsf/utils` and `@rjsf/validator-ajv6` and `@rjsf/validator-ajv8` tests. If you make changes to those libraries, you will have to maintain that coverage, otherwise the tests will fail. > NOTE: All three of these directories share the same tests for verifying `validator` based APIs. See the documentation in the `getTestValidator()` functions for more information. ## Releasing To release, go to the main branch (NOT a fork) and then create a new branch with the version number (with an `rc` prefix instead of `v`). For instance if you are about to create the new `5.100.10` branch, then you would run the following commands: ```bash git checkout -b rc5.100.10 git push npx lerna version npm run post-versioning ``` Make sure you use [semver](https://semver.org/) for version numbering when selecting the version. The `npx lerna version` command will create a new version tag and push it to GitHub. The `npm run post-versioning` script will update the peer dependencies in all of the `packages/*/package.json` files if necessary. It will then clean up the `node_modules` directories and rerun `npm install` to update the `package-lock.json` files. Finally, it creates and pushes a new commit with those `package.json` and `package-lock.json` files up to GitHub. > NOTE: this command will take a while, be patient Then, make a PR to main. Merge the PR into main -- make sure you use "merge commit", not squash and merge, so that the original commit where the tag was based on is still present in the main branch. Then, create a release in the GitHub "Releases" tab, select the new tag that you have added, and add a description of the changes in the new release. You can copy the latest changelog entry in `CHANGELOG.md` to make the release notes, and update as necessary. This will trigger a GitHub Actions pipeline that will build and publish all packages to npm. The package is published through an automation token belonging to the [rjsf-bot](https://www.npmjs.com/~rjsf-bot) user on npm. This token is stored as the `NPM_TOKEN` secret on GitHub Actions. ### Releasing docs Docs are automatically published to GitHub Pages when the `main` branch is updated. We are currently in the process of automatically configuring versionable documentation on our new docs site. ### Releasing the playground The playground automatically gets deployed from GitHub Pages. If you need to manually publish the latest playground to [https://rjsf-team.github.io/react-jsonschema-form/](https://rjsf-team.github.io/react-jsonschema-form/), though, run: ```bash cd packages/playground npm run publish-to-gh-pages ``` ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/json-schema/����������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023655�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/json-schema/arrays.md�������������������������������0000664�0000000�0000000�00000017733�14467713645�0025513�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Arrays Arrays are defined with a type equal to `array`, and array items' schemas are specified in the `items` keyword. ## Arrays of a single field Arrays of a single field type can be specified as follows: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ## Arrays of objects Arrays of objects can be specified as follows: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'object', properties: { name: { type: 'string', }, }, }, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ## uiSchema for array items To specify a uiSchema that applies to array items, specify the uiSchema value within the `items` property: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; const uiSchema = { items: { 'ui:widget': 'textarea', }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` ## The `additionalItems` keyword The `additionalItems` keyword allows the user to add additional items of a given schema. For example: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, additionalItems: { type: 'boolean', }, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ## Array item uiSchema options Any of these options can be set globally if they are contained within the `ui:globalOptions` block. They can also be overridden on a per-field basis inside a `ui:options` block as shown below. ### `orderable` option Array items are orderable by default, and react-jsonschema-form renders move up/down buttons alongside them. The uiSchema `orderable` options allows you to disable ordering: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; const uiSchema: UiSchema = { 'ui:options': { orderable: false, }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` ### `addable` option If either `items` or `additionalItems` contains a schema object, an add button for new items is shown by default. You can turn this off with the `addable` option in `uiSchema`: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; const uiSchema: UiSchema = { 'ui:options': { addable: false, }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` ### `copyable` option A copy button is **NOT** shown by default for an item if `items` contains a schema object, or the item is an `additionalItems` instance. You can turn this **ON** with the `copyable` option in `uiSchema`: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; const uiSchema: UiSchema = { 'ui:options': { copyable: true, }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` ### `removable` option A remove button is shown by default for an item if `items` contains a schema object, or the item is an `additionalItems` instance. You can turn this off with the `removable` option in `uiSchema`: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', }, }; const uiSchema: UiSchema = { 'ui:options': { removable: false, }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` ## Multiple-choice list The default behavior for array fields is a list of text inputs with add/remove buttons. There are two alternative widgets for picking multiple elements from a list of choices. Typically, this applies when a schema has an `enum` list for the `items` property of an `array` field, and the `uniqueItems` property set to `true`. Example: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', title: 'A multiple-choice list', items: { type: 'string', enum: ['foo', 'bar', 'fuzz', 'qux'], }, uniqueItems: true, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` By default, this will render a multiple select box. If you prefer a list of checkboxes, just set the uiSchema `ui:widget` directive to `checkboxes` for that field: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', title: 'A multiple-choice list', items: { type: 'string', enum: ['foo', 'bar', 'fuzz', 'qux'], }, uniqueItems: true, }; const uiSchema: UiSchema = { 'ui:widget': 'checkboxes', }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` ## Custom widgets In addition to [ArrayFieldTemplate](../advanced-customization/custom-templates.md#arrayfieldtemplate) you use your own widget by providing it to the uiSchema with the property of `ui:widget`. Example: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const CustomSelectComponent = (props) => { return ( <select> {props.value.map((item, index) => ( <option key={index} id='custom-select'> {item} </option> ))} </select> ); }; const schema: RJSFSchema = { type: 'array', title: 'A multiple-choice list', items: { type: 'string', }, }; const uiSchema: UiSchema = { 'ui:widget': 'CustomSelect', }; const widgets = { CustomSelect: CustomSelectComponent, }; render( <Form schema={schema} uiSchema={uiSchema} widgets={widgets} validator={validator} />, document.getElementById('app') ); ``` ## Specifying the minimum or maximum number of items Note that when an array property is marked as `required`, an empty array is considered valid. If the array needs to be populated, you can specify the minimum number of items using the `minItems` property. Example: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', minItems: 2, title: 'A multiple-choice list', items: { type: 'string', enum: ['foo', 'bar', 'fuzz', 'qux'], }, uniqueItems: true, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` You can also specify the maximum number of items in an array using the `maxItems` property. ## Inline checkboxes By default, checkboxes are stacked. If you prefer them inline, set the `inline` property to `true`: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'array', minItems: 2, title: 'A multiple-choice list', items: { type: 'string', enum: ['foo', 'bar', 'fuzz', 'qux'], }, uniqueItems: true, }; const uiSchema: UiSchema = { 'ui:widget': 'checkboxes', 'ui:options': { inline: true, }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` �������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/json-schema/definitions.md��������������������������0000664�0000000�0000000�00000002042�14467713645�0026510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Schema definitions and references This library partially supports [inline schema definition dereferencing](http://json-schema.org/draft/2019-09/json-schema-core.html#ref), which allows you to re-use parts of your schema: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { definitions: { address: { type: 'object', properties: { street_address: { type: 'string' }, city: { type: 'string' }, state: { type: 'string' }, }, required: ['street_address', 'city', 'state'], }, }, type: 'object', properties: { billing_address: { $ref: '#/definitions/address' }, shipping_address: { $ref: '#/definitions/address' }, }, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` Note that this library only supports local definition referencing. The value in the `$ref` keyword should be a [JSON Pointer](https://tools.ietf.org/html/rfc6901) in URI fragment identifier format. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/json-schema/dependencies.md�������������������������0000664�0000000�0000000�00000011324�14467713645�0026626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Dependencies react-jsonschema-form supports the `dependencies` keyword from an earlier draft of JSON Schema (note that this is not part of the latest JSON Schema spec, though). Dependencies can be used to create dynamic schemas that change fields based on what data is entered. ## Property dependencies This library supports conditionally making fields required based on the presence of other fields. ### Unidirectional In the following example the `billing_address` field will be required if `credit_card` is defined. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', properties: { name: { type: 'string' }, credit_card: { type: 'number' }, billing_address: { type: 'string' }, }, required: ['name'], dependencies: { credit_card: ['billing_address'], }, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ### Bidirectional In the following example the `billing_address` field will be required if `credit_card` is defined and the `credit_card` field will be required if `billing_address` is defined, making them both required if either is defined. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', properties: { name: { type: 'string' }, credit_card: { type: 'number' }, billing_address: { type: 'string' }, }, required: ['name'], dependencies: { credit_card: ['billing_address'], billing_address: ['credit_card'], }, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` _(Sample schemas courtesy of the [Space Telescope Science Institute](https://spacetelescope.github.io/understanding-json-schema/reference/object.html#property-dependencies))_ ## Schema dependencies This library also supports modifying portions of a schema based on form data. ### Conditional ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', properties: { name: { type: 'string' }, credit_card: { type: 'number' }, }, required: ['name'], dependencies: { credit_card: { properties: { billing_address: { type: 'string' }, }, required: ['billing_address'], }, }, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` In this example the `billing_address` field will be displayed in the form if `credit_card` is defined. _(Sample schemas courtesy of the [Space Telescope Science Institute](https://spacetelescope.github.io/understanding-json-schema/reference/object.html#schema-dependencies))_ ### Dynamic The JSON Schema standard says that the dependency is triggered if the property is present. However, sometimes it's useful to have more sophisticated rules guiding the application of the dependency. For example, maybe you have three possible values for a field, and each one should lead to adding a different question. For this, we support a very restricted use of the `oneOf` keyword. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { title: 'Person', type: 'object', properties: { 'Do you have any pets?': { type: 'string', enum: ['No', 'Yes: One', 'Yes: More than one'], default: 'No', }, }, required: ['Do you have any pets?'], dependencies: { 'Do you have any pets?': { oneOf: [ { properties: { 'Do you have any pets?': { enum: ['No'], }, }, }, { properties: { 'Do you have any pets?': { enum: ['Yes: One'], }, 'How old is your pet?': { type: 'number', }, }, required: ['How old is your pet?'], }, { properties: { 'Do you have any pets?': { enum: ['Yes: More than one'], }, 'Do you want to get rid of any?': { type: 'boolean', }, }, required: ['Do you want to get rid of any?'], }, ], }, }, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` In this example the user is prompted with different follow-up questions dynamically based on their answer to the first question. In these examples, the "Do you have any pets?" question is validated against the corresponding property in each schema in the `oneOf` array. If exactly one matches, the rest of that schema is merged with the existing schema. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/json-schema/index.mdx�������������������������������0000664�0000000�0000000�00000000331�14467713645�0025473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- title: JSON Schema description: Documentation for how to use JSON Schema constructs in react-jsonschema-form., --- import DocCardList from '@theme/DocCardList'; <p>{frontMatter.description}</p> <DocCardList />�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/json-schema/objects.md������������������������������0000664�0000000�0000000�00000005732�14467713645�0025637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Objects ## Object properties Objects are defined with a type equal to `object` and properties specified in the `properties` keyword. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { title: 'My title', description: 'My description', type: 'object', properties: { name: { type: 'string', }, age: { type: 'number', }, }, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ## Required properties You can specify which properties are required using the `required` attribute: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { title: 'My title', description: 'My description', type: 'object', properties: { name: { type: 'string', }, age: { type: 'number', }, }, required: ['name'], }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ## Specifying property order Since the order of object properties in Javascript and JSON is not guaranteed, the `uiSchema` object spec allows you to define the order in which properties are rendered using the `ui:order` property: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', properties: { foo: { type: 'string' }, bar: { type: 'string' }, }, }; const uiSchema: UiSchema = { 'ui:order': ['bar', 'foo'], }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` If a guaranteed fixed order is only important for some fields, you can insert a wildcard `"*"` item in your `ui:order` definition. All fields that are not referenced explicitly anywhere in the list will be rendered at that point: ```ts import { UiSchema } from '@rjsf/utils'; const uiSchema: UiSchema = { 'ui:order': ['bar', '*'], }; ``` ## Additional properties The `additionalProperties` keyword allows the user to add properties with arbitrary key names. Set this keyword equal to a schema object: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', properties: { name: { type: 'string', }, }, additionalProperties: { type: 'number', enum: [1, 2, 3], }, }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` In this way, an add button for new properties is shown by default. You can also define `uiSchema` options for `additionalProperties` by setting the `additionalProperties` attribute in the `uiSchema`. ### `expandable` option You can turn support for `additionalProperties` off with the `expandable` option in `uiSchema`: ```ts import { UiSchema } from '@rjsf/utils'; const uiSchema: UiSchema = { 'ui:options': { expandable: false, }, }; ``` ��������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/json-schema/oneof.md��������������������������������0000664�0000000�0000000�00000004014�14467713645�0025304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# oneOf, anyOf, and allOf react-jsonschema-form supports custom widgets for oneOf, anyOf, and allOf. - A schema with `oneOf` is valid if _exactly one_ of the subschemas is valid. - A schema with `anyOf` is valid if _at least one_ of the subschemas is valid. - A schema with `allOf` is valid if _all_ of the subschemas are valid. ## oneOf ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', oneOf: [ { properties: { lorem: { type: 'string', }, }, required: ['lorem'], }, { properties: { ipsum: { type: 'string', }, }, required: ['ipsum'], }, ], }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ## anyOf ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', anyOf: [ { properties: { lorem: { type: 'string', }, }, required: ['lorem'], }, { properties: { lorem: { type: 'string', }, ipsum: { type: 'string', }, }, }, ], }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ## allOf When `allOf` is specified in a schema, react-jsonschema-form uses the [json-schema-merge-allof](https://github.com/mokkabonna/json-schema-merge-allof) library to merge the specified subschemas to create a combined subschema that is valid. For example, the below schema evaluates to a combined subschema of `{type: "boolean"}`: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { title: 'Field', allOf: [ { type: ['string', 'boolean'], }, { type: 'boolean', }, ], }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/json-schema/single.md�������������������������������0000664�0000000�0000000�00000010163�14467713645�0025461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Single fields The simplest example of a JSON Schema contains only a single field. The field type is determined by the `type` parameter. ## Field types The base field types in JSON Schema include: - `string` - `number` - `integer` - `boolean` - `null` Here is an example of a string field: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ## Titles and descriptions Fields can have titles and descriptions specified by the `title` keyword in the schema and the `description` keyword in the schema, respectively. These two can also be overridden by the `ui:title` and `ui:description` keywords in the uiSchema. Description can render markdown. This feature is disabled by default. It needs to be enabled by the `ui:enableMarkdownInDescription` keyword and setting to `true`. Read more about markdown options in the `markdown-to-jsx` official [docs](https://probablyup.com/markdown-to-jsx/). ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { title: 'My form', description: 'My description', type: 'string', }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ## Enumerated values All base schema types support the `enum` attribute, which restricts the user to select among a list of options. For example: ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', enum: ['one', 'two', 'three'], }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ### Custom labels for `enum` fields JSON Schema supports the following approaches to enumerations using `oneOf`/`anyOf`; react-jsonschema-form supports it as well. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'number', anyOf: [ { type: 'number', title: 'one', enum: [1], }, { type: 'number', title: 'two', enum: [2], }, { type: 'number', title: 'three', enum: [3], }, ], }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ```tsx import { RJSFSchema } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'number', oneOf: [ { const: 1, title: 'one' }, { const: 2, title: 'two' }, { const: 3, title: 'three' }, ], }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` In your JSON Schema, you may also specify `enumNames`, a non-standard field which RJSF can use to label an enumeration. **This behavior is deprecated and may be removed in a future major release of RJSF.** ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'number', enum: [1, 2, 3], enumNames: ['one', 'two', 'three'], }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ### Disabled attribute for `enum` fields To disable an option, use the `ui:enumDisabled` property in the uiSchema. ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'boolean', enum: [true, false], }; const uiSchema: UiSchema = { 'ui:enumDisabled': [true], }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` ## Nullable types JSON Schema supports specifying multiple types in an array; however, react-jsonschema-form only supports a restricted subset of this -- nullable types, in which an element is either a given type or equal to null. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: ['string', 'null'], }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/migration-guides/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024715�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/migration-guides/index.mdx��������������������������0000664�0000000�0000000�00000000323�14467713645�0026534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- title: Migration Guides description: Guides for upgrading to new major versions of react-jsonschema-form --- import DocCardList from '@theme/DocCardList'; <p>{frontMatter.description}</p> <DocCardList />�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/migration-guides/v2.x upgrade guide.md��������������0000664�0000000�0000000�00000006623�14467713645�0030531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 2.x Upgrade Guide ## Changes from v1 -> v2 ### Breaking changes - We now officially support the @rjsf/material-ui theme. We use a monorepo with Lerna and have published two packages (@rjsf/core and @rjsf/material-ui) with this version number. Note that react-jsonschema-form has been renamed to @rjsf/core ([#1642](https://github.com/rjsf-team/react-jsonschema-form/pull/1642)) - Combine all themes into a single playground ([#1539](https://github.com/rjsf-team/react-jsonschema-form/pull/1539), [#1607](https://github.com/rjsf-team/react-jsonschema-form/pull/1607), [#1623](https://github.com/rjsf-team/react-jsonschema-form/pull/1623)) - Remove ui:order console warning about extraneous properties ([#1508](https://github.com/rjsf-team/react-jsonschema-form/pull/1508)) - Capitalized Yes and No defaults ([#1395](https://github.com/rjsf-team/react-jsonschema-form/pull/1395)) - Fix id of oneof and anyof select ([#1212](https://github.com/rjsf-team/react-jsonschema-form/pull/1212)). The oneof select id is now suffixed by \_\_oneof_select and the anyof select by \_\_anyof_select. - React 16+ is now a peer dependency ([#1408](https://github.com/rjsf-team/react-jsonschema-form/pull/1408)) - We no longer actively support Node version < 8 ([#1462](https://github.com/rjsf-team/react-jsonschema-form/pull/1462)) - Removed setState, setImmediate, safeRenderCompletion helpers/hacks ([#1454](https://github.com/rjsf-team/react-jsonschema-form/pull/1454), [#1720](https://github.com/rjsf-team/react-jsonschema-form/pull/1720)) - Inject defaults in arrays ([#1499](https://github.com/rjsf-team/react-jsonschema-form/pull/1499)) ### Features - Add material-ui theme in the main repo ([#1420](https://github.com/rjsf-team/react-jsonschema-form/pull/1420)) (note: has not been fully integrated yet -- this will be fully integrated when we publish multiple packages with lerna - [#1501](https://github.com/rjsf-team/react-jsonschema-form/pull/1501)) - Add extraErrors prop for async validation ([#1444](https://github.com/rjsf-team/react-jsonschema-form/pull/1444)) - Add support for overriding UnsupportedField ([#1660](https://github.com/rjsf-team/react-jsonschema-form/pull/1660)) ### Fixes - Fix issue with false as formData on radio components ([#1438](https://github.com/rjsf-team/react-jsonschema-form/pull/1438)) - Security patches ([#1458](https://github.com/rjsf-team/react-jsonschema-form/pull/1458), [#1459](https://github.com/rjsf-team/react-jsonschema-form/pull/1459)) - Memo components in custom widgets and fields. ([#1447](https://github.com/rjsf-team/react-jsonschema-form/pull/1447)) - Introduce Form autoComplete attribute and deprecate autocomplete ([#1483](https://github.com/rjsf-team/react-jsonschema-form/pull/1483)) - Rewrite mergeSchemas to fix schema dependencies merging ([#1476](https://github.com/rjsf-team/react-jsonschema-form/pull/1476)) - Update arrays correctly when changing index ([#1485](https://github.com/rjsf-team/react-jsonschema-form/pull/1485)) - Update anyOf schema to correctly update items in an array ([#1491](https://github.com/rjsf-team/react-jsonschema-form/pull/1491)) - Update schema to re-render when idschema changes ([#1493](https://github.com/rjsf-team/react-jsonschema-form/pull/1493)) - Make sure BooleanField supports an overridable DescriptionField ([#1594](https://github.com/rjsf-team/react-jsonschema-form/pull/1594)) - Export typings ([#1607](https://github.com/rjsf-team/react-jsonschema-form/pull/1607)) �������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/migration-guides/v3.x upgrade guide.md��������������0000664�0000000�0000000�00000003665�14467713645�0030535�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 3.x Upgrade Guide ## Breaking changes ### Node support Dropped support for Node 8, 9, 10. Minimum supported version of Node.js is now 12. ### Dereferenced schemas for `anyOf`/`allOf` options `MultiSchemaField`'s `options` interface is different. Before, an option could include a `$ref`. Now, any option with a reference will be resolved/dereferenced when given as props for `MultiSchemaField`. ### Help field IDs IDs for [Help fields](../api-reference/uiSchema.md#help) are now suffixed by `__help` so that the IDs are unique. Previously, their IDs would be nonexistent or the same as the fields that they were describing. ### Bring your own polyfills core-js@2 has been removed from @rjsf/core. See more about [the rationale here](https://github.com/rjsf-team/react-jsonschema-form/pull/2211#issue-563700810). If you're using a framework like [Create React App](https://create-react-app.dev/docs/supported-browsers-features#supported-browsers), [Gatsby](https://www.gatsbyjs.com/docs/how-to/custom-configuration/browser-support/), [Next.js](https://nextjs.org/docs/basic-features/supported-browsers-features), or transpiling code through something like `@babel/preset-env`, polyfills are already included there and you won't have to do anything. If you were directly depending on @rjsf/core's @babel/runtime pulling in core-js@2, just `npm install core-js` and using a side effectful import at the top of your entry point (`import 'core-js'`) might be enough. For a slightly more elaborate setup, [@babel/preset-env](https://babeljs.io/docs/en/babel-preset-env#how-does-it-work) is probably a good second choice. From `@babel/preset-env`'s docs > We leverage [`browserslist`, `compat-table`, and `electron-to-chromium`] to maintain mappings of which version of our supported target environments gained support of a JavaScript syntax or browser feature, as well as a mapping of those syntaxes and features to Babel transform plugins and core-js polyfills. ���������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/migration-guides/v4.x upgrade guide.md��������������0000664�0000000�0000000�00000001356�14467713645�0030531�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 4.x Upgrade Guide ## Breaking changes ### React version No longer actively supporting React version < 16.3. The minimum supported version of React is now 16.3. [Discussion can be found here](https://github.com/rjsf-team/react-jsonschema-form/pull/2605#discussion_r792685354) ### @rjsf/material-ui package - Minimum version of material-ui 4 If you are using the material-ui 4 theme, @material-ui/core and @material-ui/icons packages should be updated to the latest versions. The minimum versions supported for @material-ui/core and @material-ui/icons are 4.12.0 and 4.11.1 respectively. This change is required for [support for the material-ui version 5 theme](https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/material-ui) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/migration-guides/v5.x upgrade guide.md��������������0000664�0000000�0000000�00000064672�14467713645�0030544�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 5.x Upgrade Guide ## Breaking changes There were several significant **breaking changes** in RJSF version 5 that were necessary in order to support the following new features: - Schema validation was decoupled from `@rjsf/core` to resolve issue [#2693](https://github.com/rjsf-team/react-jsonschema-form/issues/2693). Additionally, in order to break a circular dependency in the validation refactor, the `@rjsf/core/utils.js` file was split out into its own `@rjsf/utils` package as was suggested in [#1655](https://github.com/rjsf-team/react-jsonschema-form/issues/1655). - The theme for Material UI version 5 (i.e. `@rjsf/mui`) was split out of the theme for version 4 (i.e. `@rjsf/material-ui`) to resolve the following issues: [#2762](https://github.com/rjsf-team/react-jsonschema-form/issues/2762), [#2858](https://github.com/rjsf-team/react-jsonschema-form/issues/2858), [#2905](https://github.com/rjsf-team/react-jsonschema-form/issues/2905), [#2945](https://github.com/rjsf-team/react-jsonschema-form/issues/2945) - As part of the fix for [#2526](https://github.com/rjsf-team/react-jsonschema-form/issues/2526) all the existing templates in the previous version were moved into a new `templates` dictionary, similar to how `widgets` and `fields` work. This `templates` dictionary was added to the `Registry` and also the `Form` props, replacing the `ArrayFieldTemplate`, `FieldTemplate`, `ObjectFieldTemplate` and `ErrorList` props. In addition, several of the `fields` and `widgets` based components were moved into the `templates` dictionary as they were more like templates than true `Field`s or `Widget`s. Also fixes [#2945](https://github.com/rjsf-team/react-jsonschema-form/issues/2945) - Fixed `anyOf` and `oneOf` getting incorrect, potentially duplicate ids when combined with array [#2197](https://github.com/rjsf-team/react-jsonschema-form/issues/2197) - `CheckboxesWidget`, `RadioWidget` and `SelectWidget` in all themes now use indexes into `enumOptions[]` rather than `option.value` to allow for objects in `enumOptions` - [#1494](https://github.com/rjsf-team/react-jsonschema-form/issues/1494) ### Node support Version 5 is dropping official support for Node 12 as it is no longer a [maintained version](https://nodejs.org/en/about/releases/). Please use Node 18 when making any changes to `package.json` and `package-lock.json` files. All PR and branch builds are running against Node 14, 16 and 18. ### React version RJSF is no longer actively supporting React version < 16.14.x. React 17 is officially supported on all the themes where the underlying theme library also supports React 17. Unfortunately, there is required work pending to properly support React 18, so use it at your own risk. ### New packages There are four new packages added in RJSF version 5: - `@rjsf/utils`: All of the [utility functions](../api-reference/utility-functions.md) previously imported from `@rjsf/core/utils` as well as the Typescript types for RJSF version 5. - The following new utility functions were added: `ariaDescribedByIds()`, `createSchemaUtils()`, `descriptionId()`, `enumOptionsDeselectValue()`, `enumOptionsIndexForValue()`, `enumOptionsIsSelected()`, `enumOptionsSelectValue()`, `enumOptionsValueForIndex()`, `errorId()`, `examplesId()`, `getClosestMatchingOption()`, `getFirstMatchingOption()`, `getInputProps()`, `helpId()`, `mergeValidationData()`, `optionId()`, `sanitizeDataForNewSchema()` and `titleId()` - `@rjsf/validator-ajv6`: The [ajv](https://github.com/ajv-validator/ajv)-v6-based validator refactored out of `@rjsf/core@4.x`, that implements the `ValidatorType` interface defined in `@rjsf/utils`. - `@rjsf/validator-ajv8`: The [ajv](https://github.com/ajv-validator/ajv)-v8-based validator that is an upgrade of the `@rjsf/validator-ajv6`, that implements the `ValidatorType` interface defined in `@rjsf/utils`. See the ajv 6 to 8 [migration guide](https://ajv.js.org/v6-to-v8-migration.html) for more information. - `@rjsf/mui`: Previously `@rjsf/material-ui/v5`, now provided as its own theme. ### `id` BREAKING CHANGES In many of the themes the `id`s for the `Title`, `Description` and `Examples` blocks were update to all have a consistent value of `xxx__title`, `xxx__description` and `xxx__examples`, respectively, where `xxx` is the id of the field. In addition, some of the `id`s for various input values were updated to be consistent across themes or to fix small bugs. For instance, the values for radio buttons in the `RadioWidget` and checkboxes in the `CheckboxesWidget` are of the form `xxx-${option.value}`, where `xxx` is the id of the field. ### `enumOptions[]` widgets BREAKING CHANGES Schemas may have `enumOptions[]` where values are objects rather than primitive types. Examples of such schemas have been added to the playground. These schemas did not work in RJSF prior to v5. In every theme, the `enumOptions[]` rendering widgets `CheckboxesWidget`, `RadioWidget` and `SelectWidget` previously used the `enumOptions[].value` to as the value used for the underlying `checkbox`, `radio` and `select.option` elements. Now, these `CheckboxesWidget`, `RadioWidget` and `SelectWidget` components use the index of the `enumOptions[]` in the list as the value for the underlying elements. If you need to build a custom widget for this kind of `enumOptions`, there are a set of `enumOptionsXXX` functions in `@rjsf/utils` to support your implementation. ### `@rjsf/core` BREAKING CHANGES #### Types In version 4, RJSF exported all its types directly from `@rjsf/core`. In version 5, only the types for the `Form` component and the `withTheme()` HOC are exported directly from `@rjsf/core`. All the rest of the types for RJSF are now exported from the new `@rjsf/utils` package. NOTE: The types in `@rjsf/utils` have been improved significantly from those in version 4 and as a result may require you to fix your Typescript typings and add some casts. Some of the most notable changes are: - `RJSFSchema` has replaced the use of `JSON7Schema` for future compatibility reasons. - Currently `RJSFSchema` is simply an alias to `JSON7Schema` so this change is purely a naming one. - It is highly recommended to update your use of `JSON7Schema` with `RJSFSchema` so that when the RJSF begins supporting a newer JSON Schema version out-of-the-box, your code won't be affected. - `RJSFSchemaDefinition` has replaced the use of `JSONSchema7Definition` for the same reasons. - The use of the generic `T` (defaulting to `any`) for the `formData` type has been expanded to cover all type hierarchies that use `formData`. - `StrictRJSFSchema` and `RJSFSchema` have replaced the use of `JSON7Schema` for future compatibility reasons. - `RJSFSchema` is `StrictRJSFSchema` joined with the `GenericObjectType` (i.e. `{ [key: string]: any }`) to allow for additional syntax related to newer draft versions - All definitions of `schema` and `rootSchema` elements have been replaced with a generic that is defined as `S extends StrictRJSFSchema = RJSFSchema` - It is highly recommended to update your use of `JSON7Schema` with `RJSFSchema` since that is the default for the new generic used for `schema` and `rootSchema` - A new generic `F` (extending `FormContextType` defaulting to `any`) was added for the `formContext` type, and all types in the hierarchy that use `formContext` have had that generic added to them. - The new `CustomValidator`, `ErrorTransformer`, `ValidationData`, `ValidatorType` and `SchemaUtilsType` types were added to support the decoupling of the validation implementation. - The new `TemplatesType`, `ArrayFieldDescriptionProps`, `ArrayFieldTitleProps`, `UnsupportedFieldProps`, `IconButtonProps`, `SubmitButtonProps` and `UIOptionsBaseType` were added to support the consolidation (and expansion) of `templates` in the `Registry` and `Form`. - **BREAKING CHANGE** The `DescriptionField` and `TitleField` props were removed from the `ArrayFieldTemplateProps` and `ObjectFieldTemplateProps` as they can now be derived from the `templates` or `uiSchema` via the new `getTemplate()` utility function. - **BREAKING CHANGE** The `fields` prop was removed from the `FieldTemplateProps` as you can simply use `registry.fields` instead. - **BREAKING CHANGE** The `showErrorList` prop was changed to accept `false`, `"top"` or `"bottom"`. `true` is no longer a valid value. The default value is `"top"`, which has identical behavior to the default value/`true` in v4. You can view all these [types](https://github.com/rjsf-team/react-jsonschema-form/blob/main/packages/utils/src/types.ts) on GitHub. #### Form props In version 5, the `Form` component's two optional props `additionalMetaSchemas` and `customFormats` were replaced with the new, required `validator` prop, in order to support the decoupling of the validation implementation. This new `validator` prop is expected to be an implementation of the `ValidatorType` interface. The new `@rjsf/validator-ajv6` package contains the refactored implementation of the version 4 validator; It was provided for backwards compatibility with RJSF v4, and it is deprecated. The new `@rjsf/validator-ajv8` package contains the refactored implementation of the version 4 validator, that has been converted to use the `Ajv 8` validator and has more capabilities than the `Ajv 6` one. See the [Ajv migration guide](https://ajv.js.org/v6-to-v8-migration.html) for more information. There are two ways to use this new package to provide a `validator` for a `Form`. First, you can simply import the default validator from the package and pass it to a `Form`. ```tsx import { RJSFSchema } from "@rjsf/utils"; import Form from "@rjsf/core"; import validator from "@rjsf/validator-ajv8"; // Your schema const schema: RJSFSchema = { ... }; render(( <Form schema={schema} validator={validator} /> ), document.getElementById("app")); ``` Second, if you were actually providing one (or both) of the removed optional props to your `Form`, you can continue using them by creating a customized validator. ```tsx import { RJSFSchema } from "@rjsf/utils"; import Form from "@rjsf/core"; import { customizeValidator, CustomValidatorOptionsType } from "@rjsf/validator-ajv8"; // Your schema, additionalMetaSchemas and/or customFormats const schema: RJSFSchema = { ... }; const additionalMetaSchemas: CustomValidatorOptionsType['additionalMetaSchemas'] = [{ ... }]; const customFormats: CustomValidatorOptionsType['customFormats'] = { ... }; const validator = customizeValidator({ additionalMetaSchemas, customFormats }); render(( <Form schema={schema} validator={validator} /> ), document.getElementById("app")); ``` ##### `formElement` converted to RefObject The `formElement` variable that stored the ref to the inner `<form />` was converted from a simple variable assigned via a [callback ref](https://reactjs.org/docs/refs-and-the-dom.html#callback-refs) (ala React < 16.3) to a React.RefObject created using the `React.createRef()` API. As a result, if you were using the `formElement` ref, you will need to update it to use `formElement.current`: ```tsx import { RJSFSchema } from "@rjsf/utils"; import Form from "@rjsf/core"; import validator from "@rjsf/validator-ajv8"; // Your schema const schema: RJSFSchema = { ... }; const formRef = React.createRef(); render(( <Form ref={formRef} schema={schema} validator={validator} /> ), document.getElementById("app")); ... // Previously, to reset the form one would have called: // formRef.current.formElement.reset(); // Now one calls: formRef.current.formElement.current.reset(); ``` ##### `validate` prop renamed Additionally, in version 5, the `validate` prop on `Form` was renamed to `customValidate` to avoid confusion with the new `validator` prop. ##### `fields` prop changes In previous versions, it was possible to provide an override to the `DescriptionField`, `TitleField` and/or `UnsupportedField` components by providing a custom implementation in the `fields` prop on the `Form`. Since these components do not actually support the `FieldProps` interface, they were moved into the `templates` dictionary instead. If you were previously overriding any (or all) of these components, you can override them now via the `templates` prop on `Form` instead: ```tsx import { DescriptionFieldProps, RJSFSchema, TitleFieldProps } from "@rjsf/utils"; import Form from "@rjsf/core"; import validator from "@rjsf/validator-ajv8"; // Your schema const schema: RJSFSchema = { ... }; // Your custom fields const CustomDescriptionField = (props: DescriptionFieldProps) => { ... }; const CustomTitleField = (props: TitleFieldProps) => { ... }; const CustomUnsupportedField = (props: ObjectFieldTemplateProps) => { ... }; const templates: Partial<TemplatesType> = { DescriptionFieldTemplate: CustomDescriptionField, TitleFieldTemplate: CustomTitleField, UnsupportedFieldTemplate: CustomUnsupportedField, }; render(( <Form schema={schema} validator={validator} templates={templates}/> ), document.getElementById("app")); ``` ##### new `templates` prop Additionally, in version 5, the `ArrayFieldTemplate`, `FieldTemplate`, `ObjectFieldTemplate` and `ErrorList` props were replaced with the `templates` prop as part of the `TemplatesType` consolidation. If you were previously overriding any (or all) of these templates, you can simply consolidate them into the new `templates` prop on `Form` instead: ```tsx import { ArrayFieldTemplateProps, ErrorListProps, FieldTemplateProps, ObjectFieldTemplateProps, RJSFSchema } from "@rjsf/utils"; import Form from "@rjsf/core"; import validator from "@rjsf/validator-ajv8"; // Your schema const schema: RJSFSchema = { ... }; // Your custom templates const CustomArrayFieldTemplate = (props: ArrayFieldTemplateProps) => { ... }; const CustomFieldTemplate = (props: FieldTemplateProps) => { ... }; const CustomObjectFieldTemplate = (props: ObjectFieldTemplateProps) => { ... }; const CustomErrorField = (props: ErrorListProps) => { ... }; const templates: Partial<TemplatesType> = { ArrayFieldTemplate: CustomArrayFieldTemplate, FieldTemplate: CustomFieldTemplate, ObjectFieldTemplate: CustomObjectFieldTemplate, ErrorFieldTemplate: CustomErrorField, }; render(( <Form schema={schema} validator={validator} templates={templates} /> ), document.getElementById("app")); ``` NOTE: In version 5, the `ArrayField` implementation was refactored to add 3 additional templates for presenting arrays along with the `ArrayFieldTemplate`. If you were updating the `ArrayFieldTemplate` to modify just a subset of the UI, it may be easier for you to implement one of the other new templates instead. See the [Custom Templates](../advanced-customization/custom-templates.md) documentation for more details. ##### `widgets` prop change In the previous version, it was possible to provide an override to the `SubmitButton` component by providing a custom implementation in the `widgets` prop on the `Form`. Since this component only requires a tiny fraction of the `WidgetProps` interface, it was moved into the `templates.ButtonTemplates` dictionary instead with its own, reduced set of props. If you were previously overriding this component, you can override it now via the `templates` prop on `Form` instead: ```tsx import { RJSFSchema, SubmitButtonProps } from "@rjsf/utils"; import Form from "@rjsf/core"; import validator from "@rjsf/validator-ajv8"; // Your schema const schema: RJSFSchema = { ... }; // Your custom button const CustomSubmitButton = (props: SubmitButtonProps) => { ... }; const templates: Partial<TemplatesType> = { ButtonTemplates: { SubmitButton: CustomSubmitButton, } }; render(( <Form schema={schema} validator={validator} templates={templates}/> ), document.getElementById("app")); ``` #### utils.js In version 5, all the utility functions that were previously accessed via `import { utils } from '@rjsf/core';` are now available via `import utils from '@rjsf/utils';`. Because of the decoupling of validation from `@rjsf/core` there is a breaking change for all the [validator-based utility functions](../api-reference/utility-functions.md#validator-based-utility-functions), since they now require an additional `ValidatorType` parameter. More over, one previously exported function `resolveSchema()` is no longer exposed in the `@rjsf/utils`, so use `retrieveSchema()` instead. Finally, the function `getMatchingOption()` has been deprecated in favor of `getFirstMatchingOption()`. If you have built custom fields or widgets that utilized any of these breaking-change functions, don't worry, there is a quick and easy solution for you. The `registry` has a breaking-change which removes the previously deprecated `definitions` property while adding the new `schemaUtils` property. This new `registry.schemaUtils` property implements the `SchemaUtilsType` interface, which allows you to call a version of each of these breaking-change functions without the need for passing either a `validator` or `rootSchema`. Because all fields and widgets are guaranteed to be passed the `registry` as a prop, if your custom field/widget happens to use either the `registry.definitions` object or a breaking-change validator-based utility function you make the following changes: ```tsx import { RJSFSchema, FieldProps } from '@rjsf/utils'; function YourField(props: FieldProps) { const { registry } = props; // Change `registry.definitions` to `registry.rootSchema.definitions` // const { definitions } = registry; <- version 4 const { rootSchema } = registry; const { definitions } = rootSchema; ... } ``` ```tsx // Change breaking-change function to schemaUtils instead, otherwise import from @rjsf/utils // import { utils } from '@rjsf/core'; <- version 4 // const { isMultiSelect, resolveSchema, getUiOptions } = utils; <- version 4 import { RJSFSchema, WidgetProps, getUiOptions } from '@rjsf/utils'; function YourWidget(props: WidgetProps) { const { registry, uiSchema } = props; const { schemaUtils } = registry; // const matchingOption = getMatchingOption({}, options, rootSchema); <- version 4 // const isMultiSelect = isMultiSelect(schema, rootSchema); <- version 4 // const newSchema = resolveSchema(schema, formData, rootSchema); <- version 4 const matchingOption = schemaUtils.getFirstMatchingOption({}, options); const isMultiSelect = schemaUtils.isMultiSelect(schema); const newSchema: RJSFSchema = schemaUtils.retrieveSchema(schema, formData); const options = getUiOptions(uiSchema); ... } ``` #### validator.js Because of the decoupling of validation from `@rjsf/core` this file was refactored into its own `@rjsf/validator-ajv8` package. During that refactor a few **breaking changes** were made to how it works related to custom validation and `ErrorSchema` conversion. ##### toErrorList param changed In previous versions, the `toErrorList()` function used to take a `fieldName` string defaulted to `root`, and used it to format the `stack` message. In version 5, `fieldName` was changed to `fieldPath` string array defaulted to an empty array, and is used to recursively add the field name to the errors as the `property` object along with the raw `message`. The result is that if you had an `ErrorSchema` that looks like: ```tsx const errorSchema: ErrorSchema = { __errors: ['error message 1'], password: { __errors: 'passwords do not match' }, }; ``` The returned result from calling `toErrorList(errorSchema)` has changed as follows: ```tsx // version 4 result [{ stack: 'root: error message 1' }, { stack: 'password: passwords do not match' }][ // version 5 result ({ property: '.', message: 'error message 1', stack: '. error message 1' }, { property: '.password', message: 'passwords do not match', stack: '.password passwords do not match', }) ]; ``` ##### Custom validation and extraErrors In previous versions, when using a custom validator on the `Form`, any errors that were generated were inconsistently inserted into the validations `errors` list. In addition, there was an [issue](https://github.com/rjsf-team/react-jsonschema-form/issues/1596) where the non-`stack` AJV error information was lost when custom validation generated errors. This issue has been fixed. Also, when `extraErrors` were provided, they were being inconsistently inserted into the `errors` list and the non-`stack` AJV error information was lost. In version 5, all of these errors will be consistently appended onto the end of the validation `errors` list, and the additional AJV error information is maintained. In other words, if custom validation or `extraErrors` produced the following `ErrorSchema`: ```tsx { __errors: [ "Please correct your password"], password2: { __errors: "passwords do not match" } } ``` And the AJV validation produced the following `ErrorSchema`: ```tsx { __errors: [ { message: 'should NOT be shorter than 3 characters', name: 'minLength', params: { limit: 3 }, property: '.password2', schemaPath: '#/properties/password2/minLength', stack: '.password2 should NOT be shorter than 3 characters', }, ]; } ``` The resulting `errors` list has changed as follows: ```tsx // version 4 [ { stack: 'root: Please correct your password' }, { stack: 'password2: passwords do not match' }, { stack: 'password2: should NOT be shorter than 3 characters' }, ][ // version 5 ({ message: 'should NOT be shorter than 3 characters', name: 'minLength', params: { limit: 3 }, property: '.password2', schemaPath: '#/properties/password2/minLength', stack: '.password2 should NOT be shorter than 3 characters', }, { property: '.', message: 'Please correct your password', stack: '. Please correct your password', }, { property: '.', message: 'passwords do not match', stack: '.password2 passwords do not match', }) ]; ``` #### Generate correct ids when arrays are combined with `anyOf`/`oneOf` In v4, with arrays inside `anyOf` or `oneOf`, the parent name was not used to generate ids. For example, given a schema such as: ```json { "type": "object", "properties": { "items": { "type": "array", "items": { "type": "object", "anyOf": [ { "properties": { "foo": { "type": "string" } } }, { "properties": { "bar": { "type": "string" } } } ] } } } } ``` We would get fields with id `root_foo` and `root_bar`. As you can imagine, we could end up with duplicated ids if there's actually a `foo` or a `bar` in the root of the schema. From v5, the child fields will correctly use the parent id when generating its own id, generating ids such as `root_items_0_foo`. #### Deprecations added in v5 ##### getMatchingOption() The utility function `getMatchingOption()` was deprecated in favor of the more aptly named `getFirstMatchingOption()` which has the exact same implementation. ##### Non-standard `enumNames` property `enumNames` is a non-standard JSON Schema field that was deprecated in version 5. `enumNames` could be included in the schema to apply labels that differed from an enumeration value. This behavior can still be accomplished with `oneOf` or `anyOf` containing `const` values, so `enumNames` support may be removed from a future major version of RJSF. For more information, see [#532](https://github.com/rjsf-team/react-jsonschema-form/issues/532). ##### uiSchema.classNames In versions previous to 5, `uiSchema.classNames` was the only property that did not require the `ui:` prefix. Additionally, it did not support being added into the `ui:options` object. This was fixed in version 5 to be consistent with all the other properties in the `uiSchema`, so the `uiSchema.classNames` support may be removed from a future major version of RJSF. If you are using `classNames` as follows, simply add the `ui:` prefix to it to remove the deprecation warning that will be displayed for each `uiSchema.classNames` you have: ```tsx import { UiSchema } from '@rjsf/utils'; // This uiSchema will log a deprecation warning to the console const uiSchemaLog: UiSchema = { title: { classNames: 'myClass', }, }; // This uiSchema will not const uiSchemaNoLog: UiSchema = { title: { 'ui:classNames': 'myClass', }, }; ``` ### `@rjsf/material-ui` BREAKING CHANGES This theme was simplified back to working only with Material UI version 4 after an unsuccessful attempt to have it fully support both versions 4 and 5 simultaneously. As a result, the `MuiComponentContext`, `MuiForm5`, `Theme5` components and the `useMuiComponent` hook were removed from the export. In addition, the `/v4` and `/v5` sub-packages were also removed. #### Migrating for Material UI version 4 If you were using this theme for Material UI version 4 AND you were using the sub-package, simply remove the `/v4` from your imports. If you modified your Typescript configuration for the `/v4` sub-package, remove the following from your `tsconfig.json`: ``` { ... "compilerOptions": { ... "baseUrl": ".", "paths": { "@rjsf/material-ui/*": ["node_modules/@rjsf/material-ui/dist/*"] } } } ``` If you modified your Jest configuration for the `/v4` sub-package, remove the following from your `jest.config.json`: ``` "moduleNameMapper": { "@rjsf/material-ui/v4": "<rootDir>/node_modules/@rjsf/material-ui/dist/v4.js" }, ``` #### Migrating for Material UI version 5 If you were using this theme for Material UI version 5, you will want to use `@rjsf/mui` instead. See below for some before and after examples. If you modified your Typescript configuration for the `/v5` sub-package, remove the following from your `tsconfig.json`: ``` { ... "compilerOptions": { ... "baseUrl": ".", "paths": { "@rjsf/material-ui/*": ["node_modules/@rjsf/material-ui/dist/*"] } } } ``` If you modified your Jest configuration for the `/v5` sub-package, remove the following from your `jest.config.json`: ``` "moduleNameMapper": { "@rjsf/material-ui/v5": "<rootDir>/node_modules/@rjsf/material-ui/dist/v5.js" }, ``` ##### Before ```tsx import Form5 from '@rjsf/material-ui'; ``` or ```tsx import Form from '@rjsf/material-ui/v5'; ``` or ```tsx import { withTheme } from '@rjsf/core'; import { Theme } from '@rjsf/material-ui/v5'; // Make modifications to the theme with your own fields and widgets const Form = withTheme(Theme); ``` or ```tsx import { withTheme } from '@rjsf/core'; import { Theme as Theme5 } from '@rjsf/material-ui'; // Make modifications to the theme with your own fields and widgets const Form = withTheme(Theme5); ``` ##### After ```tsx import Form from '@rjsf/mui'; ``` or ```tsx import { withTheme } from '@rjsf/core'; import { Theme } from '@rjsf/mui'; // Make modifications to the theme with your own fields and widgets const Form = withTheme(Theme); ``` ����������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/usage/����������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022552�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/usage/index.mdx�������������������������������������0000664�0000000�0000000�00000000351�14467713645�0024372�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- title: Usage and Customization description: How to use react-jsonschema-form and customize your form behavior and appearance. --- import DocCardList from '@theme/DocCardList'; <p>{frontMatter.description}</p> <DocCardList />���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/usage/themes.md�������������������������������������0000664�0000000�0000000�00000003742�14467713645�0024367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Themes By default, this library renders form fields and widgets leveraging the [Bootstrap](http://getbootstrap.com/) semantics, meaning that you must load the Bootstrap stylesheet on the page to view the form properly. You can use another theme by importing one of the packages listed below. ## Supported themes | Theme Name | Status | Package Name / Link | | --------------------- | --------- | ------------------- | | antd | Published | `@rjsf/antd` | | Bootstrap 3 (default) | Published | `@rjsf/core` | | Bootstrap 4 | Published | `@rjsf/bootstrap-4` | | Chakra UI | Published | `@rjsf/chakra-ui` | | fluent-ui | Published | `@rjsf/fluent-ui` | | material-ui 4 | Published | `@rjsf/material-ui` | | material-ui 5 | Published | `@rjsf/mui` | | Semantic UI | Published | `@rjsf/semantic-ui` | ## Using themes To use a theme from a package, just import the `<Form />` component from that package. For example, to use the material ui form, first install both `@rjsf/core` and `@rjsf/material-ui`. Then you can import the form by doing: ```ts import Form from '@rjsf/material-ui'; ``` If you would like to contribute a theme with a new UI framework, please develop the theme using the `withTheme` component described in [Theme Customization](../advanced-customization/custom-themes.md) and make a PR! You can also use the uiSchema to add custom CSS class names to your form. ## Customizing with other frameworks The default theme is bootstrap 3. In order to use another theme, you must first install `@rjsf/core`. For example, to use the standard bootstrap 3 form, you can run: ```ts import Form from '@rjsf/core'; ``` To use the material-ui form, you should first install both `@rjsf/core` and `@rjsf/material-ui`. Then, you can run: ```ts import Form from '@rjsf/material-ui'; ``` For more information on how to create a custom theme, see documentation on the `withTheme` component. ������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/usage/validation.md���������������������������������0000664�0000000�0000000�00000073714�14467713645�0025242�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Validation When the form is submitted, the form data is validated to conform to the given JSON schema; As of version 5, as a result of decoupling the validation implementation from the `Form`, a `validator` implementation is required to be passed to all `Form`s. React Json Schema Form provides a default `@rjsf/validator-ajv6` implementation that uses version 6 of the [ajv](https://github.com/ajv-validator/ajv) validator. > NOTE: The ajv6 validator has been deprecated from the outset in favor of the `@rjsf/validator-ajv8` and is provided primarily to assist in code migrations It also provides a new `@rjsf/validator-ajv8` implementation that uses version 8 of the [ajv](https://github.com/ajv-validator/ajv) validator. The error messages generated by this new validator differ from those provided by the original validator due to it using a newer version. If you depend on having specifically formatted messages, then using this validator would constitute a breaking change for you. It is also possible for you to provide your own implementation if you desire, as long as it fulfills the `ValidatorType` interface specified in `@rjsf/utils`. ## API documentation The documentation for the APIs associated with the AJV 8 validator package can be found [here](../api-reference/validator-ajv8.md) ## Precompiled validators In 5.7.0, support for precompiled validators was added to the `@rjsf/validator-ajv8` package. The main use case for this is to overcome issues with `unsafe-eval` warnings from the browser caused by strict Content Security Policy settings. See the [Standalone Validation Code](https://ajv.js.org/standalone.html) section of the AJV documentation for more details about precompiled validators. Due to how RJSF uses the AJV validator in determining `anyOf/oneOf` selections and how it resolves dependencies, if-then-else and references ($ref) in schemas via the `retrieveSchema()` utility method, RJSF provides its own schema compilation API built on-top-of the one provided by AJV 8. If you are wanting to use a precompiled validator, two steps are required: 1. Precompiling the schema into a set of validator functions 2. Providing those precompiled validator functions to a `ValidatorType` implementation in the `Form` ### Schema precompilation The first step in the process is to compile a schema into a set of validator functions that are saved into a commonJS-based Javascript file. The `@rjsf/validator-ajv8` package exports the `compileSchemaValidators()` function that does this. It is expected that this function will be used in a manner similar to the following: ```cjs const { compileSchemaValidators } = require('@rjsf/validator-ajv8'); const yourSchema = require('path_to/yourSchema'); // If your schema is a js file compileSchemaValidators(yourSchema, 'path_to/yourCompiledSchema.js'); ``` If you are currently using the `customizeValidator()` function to provide `additionalMetaSchemas`, `customFormats`, `ajvOptionsOverrides` and/or `ajvFormatOptions` then you can pass those in as the optional third parameter to the `compileSchemaValidators()` function in a manner similar to: ```cjs const { compileSchemaValidators } = require('@rjsf/validator-ajv8'); const yourSchema = require('path_to/yourSchema.json'); // If your schema is a json file const options = { additionalMetaSchemas: [require('ajv/lib/refs/json-schema-draft-06.json')], customFormats: { 'phone-us': /\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{4}$/, 'area-code': /\d{3}/ }, ajvOptionsOverrides: { $data: true, verbose: true, }, ajvFormatOptions: { mode: 'fast', }, }; compileSchemaValidators(yourSchema, 'path_to/yourCompiledSchema.js', options); ``` It is highly recommended to create a `compileYourSchema.js` file (or what ever name you want) with code similar to what is shown above and then, using node, run the code as follows: ``` node compileYourSchema.js ``` > NOTE: You must have your schema provided within a file that can be parsed and turned into the set of precompiled validator functions. > Additional Note: If you are using Webpack or NextJS and are encountering an issue resolving `fs` during development, consult this [blog post](https://bobbyhadz.com/blog/module-not-found-cant-resolve-fs) for how to solve the issue. ### Using the precompiled validator After you have completed step 1 having generated your precompiled schema functions into the `yourCompiledSchema.js` output file (or whatever you called it), then you need to create a `ValidatorType` implementation from it to use in the `Form`. The `@rjsf/validator-ajv8` package exports the `createPrecompiledValidator()` function for this. Here is an example of how to use your precompiled validator with your `Form`: ```tsx import { createPrecompiledValidator, ValidatorFunctions } from '@rjsf/validator-ajv8'; import Form from '@rjsf/core'; // Or whatever theme you use import yourSchema from 'path_to/yourSchema'; // This needs to be the same file that was precompiled import * as precompiledValidator from 'path_to/yourCompiledSchema'; const validator = createPrecompiledValidator(precompiledValidator as ValidatorFunctions); render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ### Dynamically pre-compiling validators For more advanced cases when schema needs to be precompiled on request - `compileSchemaValidatorsCode` can be used. ```ts import { compileSchemaValidatorsCode } from '@rjsf/validator-ajv8/dist/compileSchemaValidators'; const code = compileSchemaValidatorsCode(schema, options); ``` For the most part it is the same as `compileSchemaValidators`, but instead of writing the file - it returns generated code directly. To use it on browser side - some modifications are needed to provide runtime dependencies in generated code needs to be provided. Example implementation of it: ```tsx import type { ValidatorFunctions } from '@rjsf/validator-ajv8'; import ajvRuntimeEqual from 'ajv/dist/runtime/equal'; import { parseJson as ajvRuntimeparseJson, parseJsonNumber as ajvRuntimeparseJsonNumber, parseJsonString as ajvRuntimeparseJsonString, } from 'ajv/dist/runtime/parseJson'; import ajvRuntimeQuote from 'ajv/dist/runtime/quote'; // import ajvRuntimeRe2 from 'ajv/dist/runtime/re2'; import ajvRuntimeTimestamp from 'ajv/dist/runtime/timestamp'; import ajvRuntimeUcs2length from 'ajv/dist/runtime/ucs2length'; import ajvRuntimeUri from 'ajv/dist/runtime/uri'; import * as ajvFormats from 'ajv-formats/dist/formats'; // dependencies to replace in generated code, to be provided by at runtime const validatorsBundleReplacements: Record<string, [string, unknown]> = { // '<code to be replaced>': ['<variable name to use as replacement>', <runtime dependency>], 'require("ajv/dist/runtime/equal").default': ['ajvRuntimeEqual', ajvRuntimeEqual], 'require("ajv/dist/runtime/parseJson").parseJson': ['ajvRuntimeparseJson', ajvRuntimeparseJson], 'require("ajv/dist/runtime/parseJson").parseJsonNumber': [ 'ajvRuntimeparseJsonNumber', ajvRuntimeparseJsonNumber, ], 'require("ajv/dist/runtime/parseJson").parseJsonString': [ 'ajvRuntimeparseJsonString', ajvRuntimeparseJsonString, ], 'require("ajv/dist/runtime/quote").default': ['ajvRuntimeQuote', ajvRuntimeQuote], // re2 by default is not in dependencies for ajv and so is likely not normally used // 'require("ajv/dist/runtime/re2").default': ['ajvRuntimeRe2', ajvRuntimeRe2], 'require("ajv/dist/runtime/timestamp").default': ['ajvRuntimeTimestamp', ajvRuntimeTimestamp], 'require("ajv/dist/runtime/ucs2length").default': ['ajvRuntimeUcs2length', ajvRuntimeUcs2length], 'require("ajv/dist/runtime/uri").default': ['ajvRuntimeUri', ajvRuntimeUri], // formats 'require("ajv-formats/dist/formats")': ['ajvFormats', ajvFormats], }; const regexp = new RegExp( Object.keys(validatorsBundleReplacements) .map((key) => key.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')) .join('|'), 'g' ); function wrapAjvBundle(code: string) { return `function(${Object.values(validatorsBundleReplacements) .map(([name]) => name) .join(', ')}){\nvar exports = {};\n${code.replace( regexp, (req) => validatorsBundleReplacements[req][0] )};\nreturn exports;\n}`; } const windowValidatorOnLoad = '__rjsf_validatorOnLoad'; const schemas = new Map< string, { promise: Promise<ValidatorFunctions>; resolve: (result: ValidatorFunctions) => void } >(); if (typeof window !== 'undefined') { // @ts-ignore window[windowValidatorOnLoad] = ( loadedId: string, fn: (...args: unknown[]) => ValidatorFunctions ) => { const validator = fn(...Object.values(validatorsBundleReplacements).map(([, dep]) => dep)); let validatorLoader = schemas.get(loadedId); if (validatorLoader) { validatorLoader.resolve(validator); } else { throw new Error(`Unknown validator loaded id="${loadedId}"`); } }; } /** * Evaluate precompiled validator in browser using script tag * @param id Identifier to avoid evaluating the same code multiple times * @param code Code generated server side using `compileSchemaValidatorsCode` * @param nonce nonce attribute to be added to script tag (https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/nonce#using_nonce_to_allowlist_a_script_element) */ export function evaluateValidator(id: string, code: string, nonce: string): Promise<ValidatorFunctions> { let maybeValidator = schemas.get(id); if (maybeValidator) return maybeValidator.promise; let resolveValidator: (result: ValidatorFunctions) => void; const validatorPromise = new Promise<ValidatorFunctions>((resolve) => { resolveValidator = resolve; }); schemas.set(id, { promise: validatorPromise, resolve: resolveValidator!, }); const scriptElement = document.createElement('script'); scriptElement.setAttribute('nonce', nonce); scriptElement.text = `window["${windowValidatorOnLoad}"]("${id}", ${wrapAjvBundle(code)})`; document.body.appendChild(scriptElement); return validatorPromise; } ``` From React component this can be used as following: ```tsx let [precompiledValidator, setPrecompiledValidator] = React.useState<ValidatorFunctions>(); React.useEffect(() => { evaluateValidator( schemaId, // some schema id to avoid evaluating it multiple times code, // result of compileSchemaValidatorsCode returned from the server nonce // nonce script tag attribute to allow this ib content security policy for the page ).then(setPrecompiledValidator); }, [entityType.id]); if (!precompiledValidator) { // render loading screen } const validator = createPrecompiledValidator(precompiledValidator, schema); ``` ## Live validation By default, form data are only validated when the form is submitted or when a new `formData` prop is passed to the `Form` component. You can enable live form data validation by passing a `liveValidate` prop to the `Form` component, and set it to `true`. Then, every time a value changes within the form data tree (e.g. the user entering a character in a field), a validation operation is performed, and the validation results are reflected into the form state. Be warned that this is an expensive strategy, with possibly strong impact on performances. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: ['string'], const: 'test', }; const formData = 'a'; render(<Form schema={schema} formData={formData} validator={validator} liveValidate />, document.getElementById('app')); ``` ## Validate form programmatically It is possible to programmatically validate a form using the `validateForm()` function on `Form`. Add a `ref` to your `Form` component and call the `validateForm()` method to validate the form programmatically. The `validateForm()` method returns true if the form is valid, false otherwise. If you have provided an `onError` callback it will be called with the list of errors when the `validatorForm()` method returns false. ```tsx import { createRef } from 'react'; import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const formRef = createRef(); const onError = (errors) => alert(errors); const schema: RJSFSchema = { type: 'string', }; render(<Form schema={schema} validator={validator} onError={onError} ref={formRef} />, document.getElementById('app')); if (formRef.current.validateForm()) { alert('Form is valid'); } ``` ## HTML5 Validation By default, the form uses HTML5 validation. This may cause unintuitive results because the HTML5 validation errors (such as when a field is `required`) may be displayed before the form is submitted, and thus these errors will display differently from the react-jsonschema-form validation errors. You can turn off HTML validation by setting the `noHtml5Validate` to `true`. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', properties: { name: { type: 'string', required: true, }, }, }; render(<Form schema={schema} validator={validator} noHtml5Validate />, document.getElementById('app')); ``` ## Custom validation rules Form data is always validated against the JSON schema. But it is possible to define your own custom validation rules that will run in addition to (and after) the `validator` implementation. This is especially useful when the validation depends on several interdependent fields. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; function customValidate(formData, errors, uiSchema) { if (formData.pass1 !== formData.pass2) { errors.pass2.addError("Passwords don't match"); } return errors; } const schema: RJSFSchema = { type: 'object', properties: { pass1: { type: 'string', minLength: 3 }, pass2: { type: 'string', minLength: 3 }, }, }; render(<Form schema={schema} validator={validator} customValidate={customValidate} />, document.getElementById('app')); ``` > Notes: > > - The `customValidate()` function must implement the `CustomValidator` interface found in `@rjsf/utils`. > - The `customValidate()` function must **always** return the `errors` object received as second argument. > - The `customValidate()` function is called **after** the JSON schema validation. > - The `customValidate()` function is passed the `uiSchema` as the third argument. This allows the `customValidate()` function to be able to derive additional information from it for generating errors. ## Custom error messages Validation error messages are provided by the JSON Schema validation by default. If you need to change these messages or make any other modifications to the errors from the JSON Schema validation, you can define a transform function that receives the list of JSON Schema errors and returns a new list. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; function transformErrors(errors, uiSchema) { return errors.map((error) => { if (error.name === 'pattern') { error.message = 'Only digits are allowed'; } return error; }); } const schema: RJSFSchema = { type: 'object', properties: { onlyNumbersString: { type: 'string', pattern: '^\\d*$' }, }, }; render( <Form schema={schema} validator={validator} transformErrors={transformErrors} />, document.getElementById('app') ); ``` > Notes: > > - The `transformErrors()` function must implement the `ErrorTransformer` interface found in `@rjsf/utils`. > - The `transformErrors()` function must return the list of errors. Modifying the list in place without returning it will result in an error. > - The `transformErrors()` function is passed the `uiSchema` as the second argument. This allows the `transformErrors()` function to be able to derive additional information from it for transforming errors. Each element in the `errors` list passed to `transformErrors` is a `RJSFValidationError` interface (in `@rjsf/utils`) and has the following properties: - `name`: optional name of the error, for example, "required" or "minLength" - `message`: optional message, for example, "is a required property" or "should NOT be shorter than 3 characters" - `params`: optional object with the error params returned by ajv ([see doc](https://github.com/ajv-validator/ajv/tree/6a671057ea6aae690b5967ee26a0ddf8452c6297#error-parameters) for more info). - `property`: optional string in Javascript property accessor notation to the data path of the field with the error. For example, `.name` or `.first-name`. - `schemaPath`: optional JSON pointer to the schema of the keyword that failed validation. For example, `#/fields/firstName/required`. (Note: this may sometimes be wrong due to a [bug in ajv](https://github.com/ajv-validator/ajv/issues/512)). - `stack`: full error name, for example ".name is a required property". ## Error List Display To take control over how the form errors are displayed, you can define an _error list template_ for your form. This list is the form global error list that appears at the top of your forms. An error list template is basically a React stateless component being passed errors as props, so you can render them as you like: ```tsx import { RJSFSchema, ErrorListProps } from "@rjsf/utils"; import validator from "@rjsf/validator-ajv8"; function ErrorListTemplate(props: ErrorListProps) { const { errors } = props; return ( <div> <h2>Custom error list</h2> <ul> {errors.map(error => ( <li key={error.stack}> {error.stack} </li> ))} </ul> </div> ); } const schema: RJSFSchema = { type: "string", const: "test" }; render(( <Form schema={schema} validator={validator} showErrorList='top' formData={""} liveValidate templates: {{ ErrorListTemplate }} /> ), document.getElementById("app")); ``` > Note: Your custom `ErrorList` template will only render when `showErrorList` is `top` or `botttom`. The following props are passed to `ErrorList` as defined by the `ErrorListProps` interface in `@rjsf/utils`: - `errors`: An array of the errors. - `errorSchema`: The errorSchema constructed by `Form`. - `schema`: The schema that was passed to `Form`. - `uiSchema`: The uiSchema that was passed to `Form`. - `formContext`: The `formContext` object that you passed to `Form`. ## The case of empty strings When a text input is empty, the field in form data is set to `undefined`. However, since `undefined` isn't a valid JSON value according to [the official JSON standard](https://www.ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf) (ECMA-404, Section 5), the values get stored as `null`. String fields that use `enum` and a `select` widget will have an empty option at the top of the options list that when selected will result in the field being `null`. One consequence of this is that if you have an empty string in your `enum` array, selecting that option in the `select` input will cause the field to be set to `null`, not an empty string. If you want to have the field set to a default value when empty you can provide a `ui:emptyValue` field in the `uiSchema` object. ## Custom meta schema validation To have your schemas validated against any other meta schema than draft-07 (the current version of [JSON Schema](http://json-schema.org/)), make sure your schema has a `$schema` attribute that enables the validator to use the correct meta schema. For example: ```json { "$schema": "http://json-schema.org/draft-04/schema#", ... } ``` Note that react-jsonschema-form supports JSON Schema draft-07 by default. To support additional meta schemas, you can create and pass to the `Form` component a customized `@rjsf/validator-ajv8`: ### additionalMetaSchemas The `additionalMetaSchemas` prop allows you to validate the form data against one (or more than one) JSON Schema meta schema, for example, JSON Schema draft-04. You can import a meta schema as follows: ```tsx const metaSchemaDraft04 = require('ajv/lib/refs/json-schema-draft-04.json'); ``` In this example `schema` passed as props to `Form` component can be validated against draft-07 (default) and by draft-04 (added), depending on the value of `$schema` attribute. ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv6'; const validator = customizeValidator({ additionalMetaSchemas: [metaSchemaDraft04], }); const schema: RJSFSchema = { $schema: 'http://json-schema.org/draft-04/schema#', type: 'string', }; return <Form schema={schema} validator={validator} />; ``` NOTE: This syntax works only for the `@rjsf/validator-ajv6` validator; if you only use the `draft-04` schema, and you want to use the `@rjsf/validator-ajv8` you can do the following: ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; import AjvDraft04 from 'ajv-draft-04'; const validator = customizeValidator({ AjvClass: AjvDraft04 }); const schema: RJSFSchema = { $schema: 'http://json-schema.org/draft-04/schema#', type: 'string', }; return <Form schema={schema} validator={validator} />; ``` ### customFormats [Pre-defined semantic formats](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.7) are limited. react-jsonschema-form adds two formats, `color` and `data-url`, to support certain [alternative widgets](./widgets.md). To add formats of your own, you can create and pass to the `Form` component a customized `@rjsf/validator-ajv8`: ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', format: 'phone-us', }; const customFormats = { 'phone-us': /\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{4}$/, }; const validator = customizeValidator({ customFormats }); render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` Format values can be anything AJV’s [`addFormat` method](https://github.com/ajv-validator/ajv/tree/6a671057ea6aae690b5967ee26a0ddf8452c6297#addformatstring-name-stringregexpfunctionobject-format---ajv) accepts. ### Async validation Handling async errors is an important part of many applications. Support for this is added in the form of the `extraErrors` prop. For example, a request could be made to some backend when the user submits the form. If that request fails, the errors returned by the backend should be formatted like in the following example. ```tsx import { RJSFSchema, ErrorSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', properties: { foo: { type: 'string', }, candy: { type: 'object', properties: { bar: { type: 'string', }, }, }, }, }; const extraErrors: ErrorSchema = { foo: { __errors: ['some error that got added as a prop'], }, candy: { bar: { __errors: ['some error that got added as a prop'], }, }, }; render(<Form schema={schema} validator={validator} extraErrors={extraErrors} />, document.getElementById('app')); ``` An important note is that these errors are "display only" and will not block the user from submitting the form again. ### ajvOptionsOverrides In version 5, with the advent of the decoupling of the validation implementation from the `Form`, it is now possible to provide additional options to the `ajv` instance used within `@rjsf/validator-ajv8`. For instance, if you need more information from `ajv` about errors via the `verbose` option, now you can turn it on! ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', format: 'phone-us', }; const ajvOptionsOverrides = { verbose: true, }; const validator = customizeValidator({ ajvOptionsOverrides }); render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ## Ajv8 validator differences There are a few differences in configuring the Ajv 8 validator. First, there are many things to be aware of related to internal migration from Ajv 6 to 8; see the [migration guide](https://ajv.js.org/v6-to-v8-migration.html) for more information. One big difference is that Ajv 8 dropped support for any JSON Schema version before draft-06. So if your schema is using an older format, you have to either upgrade it or stick with the `@rjsf/validator-ajv6`. Our implementation of `@rjsf/validator-ajv8` also utilizes Ajv's internal cache to avoid unnecessarily re-compiling schemas, which can be an expensive operation. The cache key is the schema `$id`. The `ajvOptionsOverrides` for the Ajv 8 validator are the ones supported by that version and not the Ajv 6 validator. Second, the data formats previously provided in Ajv 6 now need to be added explicitly using the `ajv-formats` package. A new `ajvFormatOptions` option is available on the `customizeValidator()` API to be able to configure this. Additionally, a new `AjvClass` option is available on the `customizeValidator()` API to support using one of the other [JSON schema versions](https://ajv.js.org/json-schema.html#json-schema-versions) provided by Ajv 8 besides the `draft-07` default. Finally, the Ajv 8 validator supports the localization of error messages. ### ajvFormatOptions By default, ALL formats are being added to the default `@rjsf/validator-ajv8` that you get when you import it. ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', format: 'email', }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` If you don't actually need any of the [ajv-formats](https://github.com/ajv-validator/ajv-formats#formats) and want to reduce the memory footprint, then you can turn it off as follows: ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; const validator = customizeValidator({ ajvFormatOptions: false }); render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` If you only need some of them, you can pass any of the [options](https://github.com/ajv-validator/ajv-formats#options) to the formatter: ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', format: 'date', }; const validator = customizeValidator({ ajvFormatOptions: ['date'] }); // or // const validator = customizeValidator({ ajvFormatOptions: { mode: "fast", formats: ["date"], keywords: true } }); render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ### AjvClass By default, the `@rjsf/validator-ajv8` uses the `draft-07` schema version. It is possible to use one of the other version it supports, like `draft-2019-09` or `draft-2020-12`. NOTE: `draft-2020-12` has breaking changes and hasn't been fully tested with `@rjsf`. ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; import Ajv2019 from 'ajv/dist/2019'; const schema: RJSFSchema = { type: 'string', format: 'date', }; const validator = customizeValidator({ AjvClass: Ajv2019 }); // or // const validator = customizeValidator({ AjvClass: Ajv2020 }); render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` ### Localization (L12n) support The Ajv 8 validator supports the localization of error messages using [ajv-i18n](https://github.com/ajv-validator/ajv-i18n). In addition, you may provide a custom solution by implementing a function that conforms to the `Localizer` interface if your language is not supported. ```ts import { ErrorObject } from 'ajv'; /** The type describing a function that takes a list of Ajv `ErrorObject`s and localizes them */ export type Localizer = (errors?: null | ErrorObject[]) => void; ``` NOTE: The `ajv-i18n` validators implement the `Localizer` interface. #### Some examples Using a specific locale while including all of `ajv-i18n`: ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; import localizer from 'ajv-i18n'; const schema: RJSFSchema = { type: 'string', }; const validator = customizeValidator({}, localizer.it); render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` Using a specific locale minimizing the bundle size ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; import spanishLocalizer from 'ajv-i18n/localize/es'; const schema: RJSFSchema = { type: 'string', }; const validator = customizeValidator({}, spanishLocalizer); render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` An example of a custom `Localizer` implementation: ```tsx import { RJSFSchema } from '@rjsf/utils'; import { customizeValidator } from '@rjsf/validator-ajv8'; import { ErrorObject } from 'ajv'; function localize_ru(errors: null | ErrorObject[] = []) { if (!(errors && errors.length)) return; errors.forEach(function (error) { let outMessage = ''; switch (error.keyword) { case 'pattern': { outMessage = 'должно соответствовать образцу "' + error.params.pattern + '"'; break; } case 'required': { outMessage = 'поле обязательно для заполнения'; break; } default: outMessage = error.message; } error.message = outMessage; }); } const schema: RJSFSchema = { type: 'string', }; const validator = customizeValidator({}, localize_ru); render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` NOTES: - If you provided your own function, modify the list in place. - You must process all the cases which you need by yourself. See the full list of possible cases [here](https://github.com/ajv-validator/ajv-i18n/blob/master/messages/index.js). - Each element in the `errors` list passed to the custom function represent a **raw** error object returned by ajv ([see doc](https://github.com/ajv-validator/ajv/blob/master/docs/api.md#error-objects)). ����������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docs/usage/widgets.md������������������������������������0000664�0000000�0000000�00000014661�14467713645�0024552�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Widgets The uiSchema `ui:widget` property tells the form which UI widget should be used to render a field. Example: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', properties: { done: { type: 'boolean', }, }, }; const uiSchema: UiSchema = { done: { 'ui:widget': 'radio', // could also be "select" }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` Here's a list of supported alternative widgets for different JSON Schema data types: ## For `boolean` fields - `radio`: a radio button group with `true` and `false` as selectable values; - `select`: a select box with `true` and `false` as options; - by default, a checkbox is used > Note: To set the labels for a boolean field, instead of using `true` and `false`, your schema can use `oneOf` with `const` values for both true and false, where you can specify the custom label in the `title` field. You will also need to specify a widget in your `uiSchema`. See the following example: schema: ```json { "properties": { "booleanWithCustomLabels": { "type": "boolean", "oneOf": [ { "const": true, "title": "Custom label for true" }, { "const": false, "title": "Custom label for false" } ] } } } ``` uiSchema: ```json { "booleanWithCustomLabels": { "ui:widget": "radio" // or "select" } } ``` ## For `string` fields - `textarea`: a `textarea` element is used; - `password`: an `input[type=password]` element is used; - `color`: an `input[type=color]` element is used; - by default, a regular `input[type=text]` element is used. ### String formats The built-in string field also supports the JSON Schema `format` property, and will render an appropriate widget by default for the following string formats: - `email`: An `input[type=email]` element is used; - `uri`: An `input[type=url]` element is used; - `data-url`: By default, an `input[type=file]` element is used; in case the string is part of an array, multiple files will be handled automatically (see [File widgets](#file-widgets)). - `date`: By default, an `input[type=date]` element is used; - `date-time`: By default, an `input[type=datetime-local]` element is used. - `time`: By default an `input[type=time]` element is used; ![](https://i.imgur.com/xqu6Lcp.png) Please note that, even though they are standardized, `datetime-local`, `date` and `time` input elements are not supported by IE. If you plan on targeting IE, two alternative widgets are available: - `alt-datetime`: Six `select` elements are used to select the year, the month, the day, the hour, the minute and the second; - `alt-date`: Three `select` elements are used to select the year, month and the day. ![](https://i.imgur.com/VF5tY60.png) You can customize the list of years displayed in the `year` dropdown by providing a `yearsRange` property to `ui:options` in your uiSchema. It's also possible to remove the `Now` and `Clear` buttons with the `hideNowButton` and `hideClearButton` options. ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', }; const uiSchema: UiSchema = { 'ui:widget': 'alt-datetime', 'ui:options': { yearsRange: [1980, 2030], hideNowButton: true, hideClearButton: true, }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` ## For `number` and `integer` fields - `updown`: an `input[type=number]` updown selector; - `range`: an `input[type=range]` slider; - `radio`: a radio button group with enum values. This can only be used when `enum` values are specified for this input. - By default, a regular `input[type=number]` element is used. > Note: If JSON Schema's `minimum`, `maximum` and `multipleOf` values are defined, the `min`, `max` and `step` input attributes values will take those values. ## Hidden widgets It's possible to use a hidden widget for a field by setting its `ui:widget` uiSchema directive to `hidden`: ```tsx import { RJSFSchema, UiSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'object', properties: { foo: { type: 'boolean' }, }, }; const uiSchema: UiSchema = { foo: { 'ui:widget': 'hidden' }, }; render(<Form schema={schema} uiSchema={uiSchema} validator={validator} />, document.getElementById('app')); ``` Notes: - Hiding widgets is only supported for `boolean`, `string`, `number` and `integer` schema types; - A hidden widget takes its value from the `formData` prop. ## File widgets This library supports a limited form of `input[type=file]` widgets, in the sense that it will propagate file contents to form data state as [data-url](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs)s. There are two ways to use file widgets. 1. By declaring a `string` json schema type along a `data-url` [format](#string-formats): ```tsx import { RJSFSchema } from '@rjsf/utils'; import validator from '@rjsf/validator-ajv8'; const schema: RJSFSchema = { type: 'string', format: 'data-url', }; render(<Form schema={schema} validator={validator} />, document.getElementById('app')); ``` 2. By specifying a `ui:widget` field uiSchema directive as `file`: ```ts import { RJSFSchema, UiSchema } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'string', }; const uiSchema: UiSchema = { 'ui:widget': 'file', }; ``` ### Multiple files Multiple files selectors are supported by defining an array of strings having `data-url` as a format: ```ts import { RJSFSchema } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'array', items: { type: 'string', format: 'data-url', }, }; ``` > Note that storing large dataURIs into form state might slow rendering. ### File widget input ref The included `FileWidget` exposes a reference to the `<input type="file" />` element node as an `inputRef` component property. This allows you to programmatically trigger the browser's file selector, which can be used in a custom file widget. ### `accept` option You can use the accept attribute to specify a filter for what file types the user can upload: ```ts import { RJSFSchema, UiSchema } from '@rjsf/utils'; const schema: RJSFSchema = { type: 'string', format: 'data-url', }; const uiSchema: UiSchema = { 'ui:options': { accept: '.pdf' }, }; ``` �������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/docusaurus.config.js�������������������������������������0000664�0000000�0000000�00000013042�14467713645�0024515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// @ts-check // Note: type annotations allow type checking and IDEs autocompletion const lightCodeTheme = require('prism-react-renderer/themes/github'); const darkCodeTheme = require('prism-react-renderer/themes/dracula'); /** @type {import('@docusaurus/types').Config} */ const config = { title: 'react-jsonschema-form', tagline: 'Build forms in React using JSON Schema', favicon: 'img/favicon.ico', // Set the production url of your site here url: 'https://rjsf-team.github.io', // Set the /<baseUrl>/ pathname under which your site is served // For GitHub pages deployment, it is often '/<projectName>/' baseUrl: '/react-jsonschema-form/docs', // GitHub pages deployment config. // If you aren't using GitHub pages, you don't need these. organizationName: 'rjsf-team', // Usually your GitHub org/user name. projectName: 'react-jsonschema-form', // Usually your repo name. onBrokenLinks: 'throw', onBrokenMarkdownLinks: 'warn', // Even if you don't use internalization, you can use this field to set useful // metadata like html lang. For example, if your site is Chinese, you may want // to replace "en" with "zh-Hans". i18n: { defaultLocale: 'en', locales: ['en'], }, presets: [ [ 'classic', /** @type {import('@docusaurus/preset-classic').Options} */ ({ docs: { routeBasePath: '/', sidebarPath: require.resolve('./sidebars.js'), editUrl: 'https://github.com/rjsf-team/react-jsonschema-form/tree/main/packages/docs/', lastVersion: 'current', versions: { 'current': { label: 'v5', path: '', }, '4.2.3': { label: 'v4', path: 'version-4.2.3', }, '3.2.1': { label: 'v3', path: 'version-3.2.1', }, }, }, blog: false, theme: { customCss: require.resolve('./src/css/custom.css'), }, }), ], ], themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ // Replace with your project's social card // image: 'img/docusaurus-social-card.jpg', navbar: { title: 'react-jsonschema-form documentation', logo: { alt: 'RJSF Logo', src: 'https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/core/logo.png', }, items: [ { type: 'doc', docId: 'quickstart', position: 'left', label: 'Quickstart Guide', }, { type: 'doc', docId: 'api-reference/index', position: 'left', label: 'API Reference', }, { type: 'doc', docId: 'advanced-customization/index', position: 'left', label: 'Advanced Customization', }, { type: 'doc', docId: 'migration-guides/index', position: 'left', label: 'Upgrade Guide', }, { type: 'docsVersionDropdown', position: 'right', dropdownActiveClassDisabled: true, }, { href: 'https://rjsf-team.github.io/react-jsonschema-form', position: 'right', label: 'Playground', }, { href: 'https://github.com/rjsf-team/react-jsonschema-form', label: 'GitHub', position: 'right', }, ], }, footer: { style: 'dark', links: [ { title: 'Docs', items: [ { label: 'Quickstart', to: 'quickstart', }, { to: '/api-reference', label: 'API Reference', }, ], }, { title: 'Community', items: [ { label: 'GitHub', href: 'https://github.com/rjsf-team/react-jsonschema-form', }, { label: 'Discord', href: 'https://discord.gg/fdZm2JZJrX', }, ], }, ], copyright: `Copyright © ${new Date().getFullYear()}. Built with Docusaurus.`, }, prism: { theme: lightCodeTheme, darkTheme: darkCodeTheme, }, algolia: { // The application ID provided by Algolia appId: 'LRQC6J0BO6', // Public API key: it is safe to commit it apiKey: 'ab28c5ea429f2a16f7360d8a55a25f88', indexName: 'react-jsonschema-form', // Optional: Replace parts of the item URLs from Algolia. Useful when using the same search index for multiple deployments using a different baseUrl. You can use regexp or string in the `from` param. For example: localhost:3000 vs myCompany.com/docs replaceSearchResultPathname: { from: '/react-jsonschema-form/docs/', to: '/', }, // We may need to tune `contextualSearch` and `searchParameters` to handle search for versioned docs // Optional: see doc section -- https://docusaurus.io/docs/search#contextual-search contextualSearch: true, // Optional: Algolia search parameters // searchParameters: {}, // Optional: path for search page that enabled by default (`false` to disable it) searchPagePath: 'search', }, }), }; module.exports = config; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/package.json���������������������������������������������0000664�0000000�0000000�00000002627�14467713645�0023013�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "docs", "version": "5.12.1", "private": true, "scripts": { "docusaurus": "docusaurus", "start": "docusaurus start", "build": "docusaurus build", "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", "clear": "docusaurus clear", "serve": "docusaurus serve", "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", "typecheck": "tsc", "precommit": "lint-staged", "cs-check": "prettier -l \"{src, docs}/**/*.(ts?(x)|md|css)\"", "cs-format": "prettier \"{src, docs}/**/*.(ts?(x)|md|css)\" --write" }, "lint-staged": { "src/**/*.(ts?(x)|css)": [ "prettier --write" ], "docs/**/*.md": [ "prettier --write" ] }, "dependencies": { "@docusaurus/core": "^2.4.0", "@docusaurus/preset-classic": "^2.4.1", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", "prism-react-renderer": "^1.3.5", "react": "^17.0.2", "react-dom": "^17.0.2" }, "devDependencies": { "@docusaurus/module-type-aliases": "^2.4.0", "@tsconfig/docusaurus": "^1.0.7", "typescript": "^4.9.5" }, "browserslist": { "production": [ ">0.5%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "engines": { "node": ">=16.14" } } ���������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/sidebars.js����������������������������������������������0000664�0000000�0000000�00000001056�14467713645�0022652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * Creating a sidebar enables you to: - create an ordered group of docs - render a sidebar for each doc of that group - provide next/previous navigation The sidebars can be generated from the filesystem, or explicitly defined here. Create as many sidebars as you want. */ // @ts-check /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ const sidebars = { // By default, Docusaurus generates a sidebar from the docs folder structure docs: [ {type: "autogenerated", dirName: '.'}, ], }; module.exports = sidebars; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/src/�����������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021305�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/src/components/������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023472�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/src/components/HomepageFeatures/�������������������������0000775�0000000�0000000�00000000000�14467713645�0026716�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/src/components/HomepageFeatures/index.tsx����������������0000664�0000000�0000000�00000003513�14467713645�0030567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import React from 'react'; import clsx from 'clsx'; import styles from './styles.module.css'; type FeatureItem = { title: string; Svg: React.ComponentType<React.ComponentProps<'svg'>>; description: JSX.Element; }; const FeatureList: FeatureItem[] = [ { title: 'Easy to Use', Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, description: ( <> Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly. </> ), }, { title: 'Focus on What Matters', Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default, description: ( <> Docusaurus lets you focus on your docs, and we'll do the chores. Go ahead and move your docs into the{' '} <code>docs</code> directory. </> ), }, { title: 'Powered by React', Svg: require('@site/static/img/undraw_docusaurus_react.svg').default, description: ( <> Extend or customize your website layout by reusing React. Docusaurus can be extended while reusing the same header and footer. </> ), }, ]; function Feature({ title, Svg, description }: FeatureItem) { return ( <div className={clsx('col col--4')}> <div className='text--center'> <Svg className={styles.featureSvg} role='img' /> </div> <div className='text--center padding-horiz--md'> <h3>{title}</h3> <p>{description}</p> </div> </div> ); } export default function HomepageFeatures(): JSX.Element { return ( <section className={styles.features}> <div className='container'> <div className='row'> {FeatureList.map((props, idx) => ( <Feature key={idx} {...props} /> ))} </div> </div> </section> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/src/components/HomepageFeatures/styles.module.css��������0000664�0000000�0000000�00000000212�14467713645�0032232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.features { display: flex; align-items: center; padding: 2rem 0; width: 100%; } .featureSvg { height: 200px; width: 200px; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/src/css/�������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022075�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/src/css/custom.css���������������������������������������0000664�0000000�0000000�00000002022�14467713645�0024115�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * Any CSS included here will be global. The classic template * bundles Infima by default. Infima is a CSS framework designed to * work well for content-centric websites. */ /* You can override the default Infima variables here. */ :root { --ifm-color-primary: #3b73d2; --ifm-color-primary-dark: #2961c0; --ifm-color-primary-darker: #1149a9; --ifm-color-primary-darkest: #053381; --ifm-color-primary-light: #4a7dd3; --ifm-color-primary-lighter: #598ade; --ifm-color-primary-lightest: #719fee; --ifm-code-font-size: 95%; --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); } /* For readability concerns, you should choose a lighter palette in dark mode. */ [data-theme='dark'] { --ifm-color-primary: #558be5; --ifm-color-primary-dark: #4981e0; --ifm-color-primary-darker: #316dd3; --ifm-color-primary-darkest: #1d59bd; --ifm-color-primary-light: #74a1ec; --ifm-color-primary-lighter: #92b6f3; --ifm-color-primary-lightest: #b1c9f1; --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/static/��������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022005�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/static/.nojekyll�����������������������������������������0000664�0000000�0000000�00000000000�14467713645�0023623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/static/img/����������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022561�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/static/img/docusaurus-social-card.jpg��������������������0000664�0000000�0000000�00000154702�14467713645�0027650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�������������������������������������������������������������������������������������������������������������������������������������������������������������������������JFIF��������  )  )/'%'/9339GDG]]}  )  )/'%'/9339GDG]]}�!��7����������� ������������ ����-hm-U m -[E)m[J m(����((�������(T���ԺXzUB[iE-UUAmPQ@����P��)@�������<:ڪբ VQVBE���� �P����� @�@�u1KKV*ڶڪm(U���@ �� @�D�� �����(�un&[UVBEPUThRժҊ����(�T�����(A@����:-KhE mVmA����P�R�@����@�� ���c-mUmUET((���P�P(�P�����)A@�����:ZUUAVmVP-KiB��� �P�P�������D���:*m ~Eh-UAm}���@� �����h���(���uZ*նURZU m��� �P��(��� ��P(@������:WV*ڶE[T- mP��(��������� ������� *ڪڠm(U��@@���@���P������^cBE Na\kb}gڨ����PP� �����( ��� �����{iB[iEU-њ�<w�N����(������(�� ������޾:VյTVQKtn9m?׋bϭNӗ'c��� � �������P(���������8mUm RWEX󗫵!mOiy^o3Y.ڴ=670ttq̟Tߎކ~qmt3ZO<1{NdCwvԆ z/Mky>nۧpWoQg\@v5_Wˀ'S4S5ֶop1M uN6Lvzf �<˓N����Dž[VҋVJ[KV}rv]'oJU^QMNϧ*<ߚ?�lDŽϾ ޱ3X}d4I_<W<'fExG=rѹf %͊l~Uγ9['`s>FG3 &ڿ\[Zp{sWϺ-=x/ǂKs}A=˗@����նZUQV_^<\<,w~w } peZ60PnohoD|pf?|ޫw{'瞂}^o7޺?.swzstOy&gc~cmf7^#z(racby sơL_dd|!qd2ܓfBt&w۞H}?Yc|xW:O7kv7 ����UVQJKit^8z_ZN.~oT/&a}C季PR#G7�,ޛQ/;|mȳAjbvo/t[~X8aw3VΫx_>uGo{\f?-{];oy=/V^-._7OYnny&�_xOϲyot{'l5^�����phQmAKijPz<{5i;h\<,w �o_!z@guym/z6no^}<=z)ټ/s|=S7LwwWxu1k\I=M~Xn#Bh=clnݯs=/Mo<|�/vW}>x2,l �����J-U-(mZ n׾WKH͞]}kP黆vb4Bh<潀7;ѽZ7_8Og|s�y/>)z TSy_#zuxP'n]Lw}=EcO&'63|mlb=.wyd<#xN߇y|m?cy= ދ|J#>x?����JTV@ۢuk7tҼk/8\kYy;Kyd:.kҽS4?Hm= y笺N}HM[ǒϏ垒=>S's^F[OؼiMg9>r#<ˋ>!zuN67c[ߌ7Ny?=㽃Lo ;/Mz"y<iފ|%:^'N@�����N#m[Jm.׾qY;5e;Zydz^^z)?SպgrЛGut'y wtg_]ϽIyy<O+X�hY5CZ?o75OָݯBzr1l~ώ=穱^y%}{{_L;M,ka;Su]ryx=cPܞ>'Lݞ`~�����'ԶХ-UAmDWS#Gm/raΗ~ψǥuӝuOjML>cfz{}.\x?;~7kmmծz--vp7uyl_GUH|̃Ñ3�Bc8` !i=δ޹/7G>;r_|8<-ض�����DQJZVڠ 1gs\oc4 [Omz%mg/<wazM|rn[KMIj9>nZ`;�DaUش yWCmΜkÅ~l]& =#ۥW~Gz^f17ŷzDZWG{6h/nI;;arAs���%EYTUPE����+}r y|P \o>y�'r,@���P���>����H_T*Q@���� P��������������������H*[KV҂J(���� ��@����� ����������"EApp*ժ(��P��R(������(A@�� ��������%E!%P-Q@����PP��* � ��(�@��������,DJBK^"PiE��������� ���������$$5P[iE���(�@�������@��P���������,JD* x>mPQ@����P��� ���P�����������DD$ mP���(�(@������P��P���������$OVҊ����P�(������A@� ����������$Y@Td')E� of:]gxϽ挦� �� @���@� �(����������EAY'MjYu'gqba</C-�@�s;�@��� �U����������TR"!_w^�>x|j]�}r@�������vSg�����P���������, K *J)C�yy>@�������q]ӎL����R@�@���������H* )H:�`k\VY �������p9�_g}f@���������������*,B*D (B9.�k Qy������ʹ-}�GqY*`fkcp��@����������"JD*+Ѹw kMCi6} r] ���Wvr;>~Ӏ��)@�����������¤ JD庼vÆ;ǩҹw?V ������Y-<��R(��@��������" ,J@ ,ߛ�.<SvB-{q/緿fdx],������gl��������������"TXXQbE"%%S�:#K#zW/dF<ٽ+c����ry|g3sw9|n3v]r� A@�����������B$DJDJ溜Ph_T򣇨����wswy.n��>@P�)GLv<���pp \���" >>䊁,*DJJ:|Pu:Ol&����[nng'?ֆyw i#}�2xh| ~GXd��G۟?8\˿jOܻ�7xN_CD,BJ $ <5o>K $9Χ0�j]t��� -J?L 4gK>P=<]H�Wuc:%<X{+y>jηܘƥqEo=+rn6b1{~a8Fѽvrvۏ'Ϝge^rWk\ڞS_!Ob&G?_WG}O>~!9x 纜�˧����gWxy<05/z4~5gȐ 'ys. ~|0py_ r<>]{'^h i1|7k˽z_D`ek:\!c׿2d~{4w+g=^4`=w=&]%ߞ�OtD�~}ir|E"%�Vx ���>ݷ֎Np~I 4zD�y;]=CBx/4?`k|?p5?\z&97-zX/c[*uנ ]_#>{Zm.^~#Duq}0uJoUg?a{hPK=Z%L�G/'e– Y:|h _T򳇦����wܼswy.n��".y�|{7f36GxA>ҼǨe˗|8e}f4נ ]_#>;Zuz\vˀu3k/o;u=.{~_ gv_.gg˯ogAO�5l<ο?mmQB�9wv_\~�]>pP^Ibu,m�����s9_3swyn3;s0 SҌLC!!}'(?D;)m ;+�?9�'XQ.Sk.GCx=vrxytv}{㯫*GN4_L1v fŘ&nvU^tsVEb]t�������� �-(�����pYwmr���XYRR P%HQH`@:\�Xk~mXp��������dE=@�����������D$ !",K),GUq:6i@����._��-r��(���������QdR!PE"% AIH Y!ں=@4/yQ����jඌɠ���9>X�A@�������JKBK*,ADHH�";gG�Nx ����_iބc3?N_񹳯��9Q{.2�P���������K K JJD*)**,"Ĩ"�պߛGK����r>kw[/S٫o� G!Y.6Q9{A9��������$YT$"S~g󌏼 %/2y4 JK,�j_a����9_N/3 eՀ�C[6}H:E}w؛3ϧCK;6gFjS^o$'kfAnӮfrk?)u`=G9r/PqnM8<ϥ<W7;fN 0p^v} >(%H _;wC�Vx �����s?]lμqzǫyyb=Fz/lMzA<o i޴euq'qT{xuy&1bu_cߗw9eYcz>}I:A|b:Mɘס>z7�=|;Ǹ|e3' Y Y pvGL����>Mr`� G!OEטmިvA- z-?;�C&Gq_GOyS{||Fo1Oɣi.jzw~ϯ<՜AM=;zлכp~q^U2g|'sK  X�uZGl&����qvna;.C83` m1?_7͗)cߛ3Ǧ<fo%~*7w:ǭ?&ONJ=Kwͽ7ĕ~n2LkUCG,kɰy�8( 'c]g>|_LN7$HB%%w,p Uu6���Y U���3|}ܱ`1Chy4o07Dl/;'۾ŮG+Vr� 7.M-?<çgط.'|s?]!揈 Y % ݱ�:ZoÀ���3<v_k<؀���o,h��������W4n" ,JDJK*@@)�Sq6i@��� 5'3xj��Xg?;n1{4�������� $B, ,JJD@ ŵ?*8z`��� 5'3hl��s||c@�������" ,@*J Y gzw@8Oa4���M_U8ַܞ>}ǫ9ycg75 9ʀ������ TX!PEd"QPbRAI(H;;�FպߛGK����|@ Ǵ�1#ͪ}������*DJB,))HĤDDD K JJW~mXp����'�:ok>~C~ۋ4ڽ8������" A,JDDJJJ  f~�Sq:6i@���� G{H)v؏wYٽl �����"YTd"RI`RPE%HBH%AYP# FSgL���-�ӃO8�re}ƶڽ2٠����"J D*)*(EEE}H$ !$ "JJ+ c;`ZS^Wcֺ0���NK�:qmq4޹=&l����%!@ $T bR""TT"X%PEE%"%X /E@����I9N/�S7z^=z7r����"KJ, ,JJDD�"DJ,X/4aϛ����)p�kv̑z�5N{TƲ=7r����D,K*)"GIBA Y ~d ,JLRtɭ�����}_�wK^�7['���� TX!QHdQd bEHBHE $RdY9�0:����'}\ :ͯoj8Gcޓ9=$e���ı,JDJK)�"K2F' �ĸzx'W�X)a@(�_ļ\,7�̀8|8/h=ٻSd����K J*@)$I))"! $" ,)A19�@ �����������"@!J*,,,@#H _ KJ*K%br @ �� ���������"RXX QH@%"EEBE"Y X XR!PH%dY3� ��P���������"K),,),@Hıv#"�����������$Y@Td"RPRR E%%BH%AYQd"QY;����P��������"   K*,,,@#H _$"JJD*,J��� ��������� bXd QH@%"EEB% Y Y RXR!PH%dP%e 6LR �����������K K JJ*))*,Ĩ!",A,K ( ɖ  �� �� ����EH?D )(D"DD"> ~CPP%"!" �I� ��� 156@U024T`f!"37AP#QSVWBp$%F&CDERa�� ��i?'!l?_hx�FkW�3^#њfUFRЛ WU+c8b2N4/>)lIcY,Y7ܟ_hbmeM|׉iu>;m_T2O*bOէhƎc�{9A|!޾cmRdw4ybGVyu^̉3ڽRM  %)͈(REO2!i(rdS*[EjG1*[=t\@ ,izG\"'7O!\ܰ2{|FIcj;u5W9Qq+CcȧUVPj,*}h~F"Uj�̻ j>L Utf6^VMCPi_EQ5l%Qc;Ư:xvr__9Y/(H9#$dn9Y/72@X{dgWIbh/%�1'XUٗj䛑r%DlIwo"ko2;sOVhss2di77&�1uj;r2A6n~Q�.PLt)e,5P.|U ܼu^hFG9cתM7 .}kJ1klcc:` Gc׵sQ[y^VMcƭ}Y=z'+(W]^z[._;̈ zoddr9 $+^y$dDΖ_1s5`{ Lo >e>]r=eY=hrBE(tR9#2*4Yc,S]24B�gE6%ǑWwDiZ==ǘG'嶞ҧ,{aIW,jWD#9OOlzցF\虞a=/w+#jLX!*ˍɿnWw&!dѡenY.%6=ֵUos/s~ =+&LGN-q#MS;V'CX F;ȳ4 j]Wh\" -fUAiHgRL3q<ޏB0dBLVKZk,1gF[s4^fQ,CjnY)%XF%@1AǨb2Zn?i#KRhlur\F{]#Yj'/^."mEcpQU.p ;_ d<87.dĎTW>_| T{/sQwQ~F=|p<b2-?FڔE-}iem坚ZѪ`xPP>˴ᢠ.t.z{6eXm.*?9A|:$BrYܶ⥆JlS0Gl ז,zOףu!輶❂U>NiPD8VB<7|xo !a4lzXdѿ|+K{Eui O,,HC= ;t}%MhNcx};4j*B�񮤊)ؖ6RM׼ ړeT&x#FE%:Idk9քa2܊SϩyW.<~?-^*r=PCunIglTNs3̵-D\[; sr Uf!L AJfhn̟*6" ^<n^tܙ\NHEhuxԭOG-Jdsh,Grkkz,OIbMnuNT0"}A|/K{EuG<R#{LhɠYQV>M{s^ǫ\&U!#[w02phȦs沚p\=܌e^<~Dj({CGax{J?eyCZ?3fu>ZEs-V�Aa^Xs~j Vr 8<']CCQn?t(�qܿ_? =c\9*X�NdoT]uN{fu &D~DOO!Ӻ T�ӕ4-ETy[s,^fQ,CjnvC(2lsY; KpP"O3f*M.{ TGLq!FNf""uQ,49HJ}#6i fWX״4|}Okjqm4Z*%u__"7sڞqeZ˖Z;z^zކ<lFZתAdCȎe7/s]a {Rr::bok0 Mcjuw-dEXWKb["5>ָTN V Q?g,ɇ�Ejj@5@5ۛyPӋ&?G"}: `9-swFrXIz2;2Ӗ!57Uz"**"BOUJ;q(͐I. "z+9k u(1'_Nn YN,a!D(k=e ƽpDOO-:1f* z5W-9fh> jBܶG܈0z0tY4ﵭ1\TMztf7Aajzmeq9J< b6mK4B~ PN"U/XtUE\�C7+�`Nk[>ذc@Eyc;3PWpƋ; )G=nc]U:K'-Y̞F�cCDNs=kl5_ fMIm^1񣋷5"neXtֹʍj*?\Tt~Cm DףXB˟K=r{8pbSr܄:*KGtlݧ9^ryP�5QS2$I#g7B/jC1\A^Q'i}1ֵ=̂"E( BBfy]ړX״4cecE DA<Hr릁F''px#W003${bFwrOiSh[mum:.H#zE<g>ureA`{\-Kc4S''tlݥs\ $ÆIȝE\{hƪ�oi7/>81V8ğc(Q١y_ѹrꪈb2 3mp@,y-uO;�0ˏܷ#u8C1]&\�w;Q#!57#‚"C!b2D%࿼mc 9:y-ťL[2Buw .-jרG Md3뉑$I${:j^,df]c^ܜy#ƫQk�rck#{JD�Ků/,w3< R/ TLXmF4d:eDˀ}L=Y@OҰsȕiQQQz,9&B;;]֙ca`qNBux*^7eׇv?}CcY NرڽkKyAA !ȱ*܅a*rDRazXh`5Ceۋ2,CYT@(8uvy5hXbՊS[/aQQU:.VȔl^.dl265b5VS#ۅGJnҫLIW2 W  TRsz{rS�-Ir>CS,G+zjTcams^ U炪҂"DcJOW7fmёm+Hkj"7Nk^1G7#yI \x;@YY=SNޠ2mI J-aS܃GYid| l_pI$BUuNV PM;BO_Z=(@P%#\s!OM %.#X<c7AÙl4D m'WhBwyEvh׽0.V8eݘ{KdVbE ƃXNӲrK:X5[IrP T\ f$"2.\A\8F М(9vrZUòKW'qU3Y5G 8N1D&TTDDS X#~XcD7׫ąC8=Qa^KkQ:޽\�A={XW�fA@ؒF:Ys ngģ9(Cvq<oRQcUTu.0a'b>P[gʖ%1إ$zF- Z9kkϦ fEGUVp@si>]5erͪ8s _fo9r+Ƹ\cz1=xk|O^6>'c׍qlcz1=xm|O^6>'c׍lcz1=xm|O^6>'ZVuEG"***~p*`lI:$#G:@k:$6ReI$^[yiRQ {f۫)9打,/N*Ie򗞉ZtIۑdĎft3gbfiWZ'b,~pO(E</VMdj bt۸TN|~iIVR),+,1R-l˷J.+KoyCUڨEEDT@5 <ܫu@aeǽ\A<WMUw|/Ic ld{c6rZ H89UVI *zѥ#ۇ*\[.@ts9W;lPbmReBN&EMJ%śb/%;iXC]䠳`$�{͹v id;{ǵZ3"}r~ɻ4Yfú4YX6G+͹_mnI !oIl(Y86 IGSAUY86 IGCU֐t4 3ܿç1f)LN=Jfd u_N4ͯ_f2j=z�LLlic͹B]jwdf~S#]Xu,(Yk.]cbs6o ~fzkfQ("4镕ۦNb7ܮr* r纹 :8 J϶kqKXdlt=B)жqIh]6dX "խ%m]G.I@R61ǔ+膠`",h�2kr9D#Ѭ7}I1Jk|)8NVvucbdB ƺ) SNSQaԆ\kELP_n"rnLDx(+3Ùq+f=mmYU9F'&w8*wG* 0Ms,I4\N^cؖ==5pɖ帖=UJ y;j&Qb78΢akTw6N(1 }cp (,X&X%/nj`&١̻?x ͯbo $ ($;|6~X:<SK ۹핍@pzm鑹^M53�_x˲G2z#s==Ȳ,-ɤq5$ -}`Bf7eSݚPB<AvL68|%U]!"ǽq"'3bŝ߾ݝȭ\tQcTC�DY=Q|:U:Lȅx,͔}nûu[}VB 6 qc%сb4$D V[Puv `{akٮk.b-gűrcod{a62pknIdP\[7{F }܋ǭ DJMnmb!SnC |bҩLj%;s&̫q5j\I"P)j~Ōr`.V]74W0o7>H1 he䌕Cs1Ln._eNSg<'b"mkb0qccr� ,*̒,!ܫڛ EiWY AnSKizHA,\jW)( D|2ɯ([e0dG*`!5ie ~MVu_"EX S)3#5b`2HVQgE[$|6[g='x#sZܺz:OUc ]m (J\:;#{# u-70 tƋn4qR ǖu|CTE[QȊ9f^C@ZqI[iWZhFoIQCqQ*3ۺo\ۊ\ةeE`PSqM ;>W4l/4(ṧo[3RUUL6n5a7y97eyw{9i 8Uӷ/&1#OUXSKwq~VmtS\vϸkqJOzq5 /mbT.!+ oA2@"w>79j緅0l&9zr"ɤ#Vۍ^0SAb#!`uJoFKIgUI]q9\uLx(Gk[Q. O5/ Xa[1ɂ)XzwCL{*,fk+v،fK}n avTo[œo)[Mܐv(5*ٯSxwf$[ב '̈́>vH1AdۯOYO7$�7spڽ6Uz&[~NQ^]"Y]^'Ve CmMFeM +o [RHȣ|^wW%%m`2KldZ  >Im,H[^km�-&,m)6b1)*:FTfUژHMk-EMW3�j1.Oj5aTAed*6ݲ Z>bl8{nN)WK'WC7i$z_/�鵳Vx"º9)p|nS'ϯ.!;~Lz�FMd]]*jFBN `xQi-$[:K,\0ʒ*#Iu`�2ڰv ˩~gfGq+_X^zP=ޛ;,!=ua4?dRpIWtgĦPbY_\F3*{H*>iYٌQ؅mCQ CmE.~K&C=n{-?zMgxWM6ʒ{tˡƲLͦlod3$�k!'lMxq%cwx4 X33ݺwcq%4Lv"˪¿ Z |ޮ-àre de_%/*ˍʪuZ8-w,|~c;n멢 !oIl(c(BD/Vˏ^_1*$m=C S|;)4ؽxds6 ėu_}ό�M;`19|[*]oQG qmdk<Y{;nS~(7.Jhc?�<\ܯ'jE"anpI m8"IfyƸd2]ow2w7]zdHd)~/h-3#x,ooþzj~SP4n". zɴQ9nm&�rԐ߿r"Tk"buvC TҷW>ىu{Uy ]nu^[K�kg8Z'0R8rl̢gz9#1cRe'G< S-zðy1S %M!2I|u;&kG`~ W"c?n=Vgx^{q%:`)� qY]Tޫ61XEw{OW1#>d.z}lljr4,՞=@s8mG;m$buL۞o|IS2vV 9}BY$�k?O\'5#K>ؘ7m ( ֭D?Q?=m&^z TN}OyÎE,@1 (,*hRjXX5'G}ںڢXHs)+>>[c\7wInqglUfco%7Au}ݦNz;xw#)Xc4RIvʅ+V%]>M]:.j$۬8:i&doby{1Rݬaf9U5XI'3}qU\&nI[̵g[MAX>gxjՔ<\YM; [y M14.}}&С'm^Ty%5+ݕ3r9Y6WT�1fc`LXb&hp L6H'Гfַb7?ڹ>Kګ`>Rw=w[5wz_h[;�&KkOo-mFh7-\:̎"K Xn& P'n:üa${* *( iWio5|49]9޴YeAjk罔"<v3m7m䰱!ᚁm7 lαIsG$R1}*Ht|Mu5X`YIq}U 2Sv'k%f?4,N_{.-Tb{n&/;h~8!EȫIEÖ9dp! 1ۓn[R<G$�k?8Z H0.dw-N7;l[6q<krXGz<qE0U2O[~Y3qٗE6ܿ N,۬/*d[.\: 1qr$5Mpuu>֒.˒P6E3}QzVd`n2uqU7&o]2hpߦn}Q�fnd{H雍;ҤU--ԏ"U}E QEqH nq|^c澸`ѡ`$$$mqh`xeLSp6 cX}6=]Z|G%bGWIIE S] Y181WUT u$BL2<,/]+5GykA\8Vt5S|bJTTEI\I(OUV?-[c DbOh$l1I[F'm:&ut(4r,URӝ*]Hs(a DY`ad#Ȣ2Hxa@; � %EM|:ʪ1 K<qU-9Ҭԇ<?9߮u 'FN|Ҋ IKX5/ꊚ'U{EY0!/)chXnvAxV-zC ƪϞhu]OC$Ba'h̹i0}.5c:*j@fpBfy9f3@ی[O+].|lS A3'+VX%rRiMeEM -UX2F=1ng Y� �[ q^%2,ʚQ%]hj:[kzAlL2_Y[P31.@ts9W;>zFܓbHn%^]9Y�1V>Ͷuw\F jV" l4E rbT]xO'^� �ׄ�kx�5<? xO'^� �ׄ�kx�5GGWZ\/w'I�_vc+5\II Ͷ1wf\$l:)=R6c�׋1�2�Վ\Ɗ%i᷁1c1Q  šW9?5ey=hs9{]"#S':2Anu5-ѝ^i9QdP;F'+)H{|ܛ20gcǴW"z)qbMgV1LMM,9%zksakP:Kz53eU E Q|nsk4q2kW Y4\"P7,yWŪtq pc9]m_`G͞~ح[0 N.!ok|� eg(؆@|'Ԩ h)?Yw{u01EuX`ΑKl#(2:<:K8MqOjf ۷[ϋmSgdr+c!oNykdIx7 σyTyXXR'^qOդ n`}K$cHx7w1;g\O{𜲗!c�,px X" syhzΤ,b-va֤&uSm"A>"!� O2!oX�1&6䘆5<r.Hxq7k9 wmcfSaZCMmnS$xN`VG 5.c8Ae  eQ=VXH @e36xbpüd0q=[LHȤ|0P`dQpȬrgJϕHEs\׵j/Ir%06EtЦI:4{`gk)kɄIRfW%(#|FnP#70I_e@\$=f`q߹͕Z{)ko tOKF10{.j45'DB5r;P7ݙ`we!Z֯.�r˿=}_G,C.�r˿=}IÖ]:&Ò)K9fEe6`x{AcvmU'$�hkh7q@qq9&e%ٍ̬fVK}wb@u[ӱ qP|S&{.ix\O l;Kg0rf,/q۲^3q}é'_ 6H)MA>sl2*_Xm(Y6WGQch[ Qalᙍ%)b.\Lny\UlŸ5/ JHA>c)[#a 8>/kl0r�qxeνy鵹x "9qE|u }G#:I:ŭ#Lj)5Ž*2v'N%3rqqgVlGԭY*m6gN]G l+ 8<n-=ckgzowOڜk\@�(QkAIaFGxUyf\\ d_$v`T7-ş 2emB痲N+^K[H(Mq`(i{,=<+>3BvL !d@y☳Dž(waʌ`L6/ ;`.yrTDH1L;yI9n ^ IKޑQ3Y5DvH;2,�Hp,ϔ Xwg"f9sSTPG I�_xyGK}^i9m,7Tݨqmk/Y;1mglu-$%YWrkb|6 >:WtɺxGsYq�c~gDNQ: ;U W`#̧Y? QRر\&_ÆcL%n�¶ 2mYVfkܵw;�}Vtq d]ՙ7c <_}H[k9D\'0EN{CCωW{pa3\3d_#nD`>^vGmkغwW=wf\�8YVMHSl0g_zqצzƵ-ʢ.adNک|[9wtk} D8ڡ|Mxv>קo{~(t}o_fuAI,^%o]Y),TO6X_ (7?u\k'zTџt+Q�kI[sv`(BJFâ qS:!$A xO '~V3Eb]e1wKʩrxof b-7/N*Q0-}*AU_JzU~ҫ_N�'y QD80wZX>&gX-RLrr@ֵkZDxN!=e.Zxk6[~h/ H1))A Jpr)3Ve-fQZ2>n]vI*[|Ld7Nl3(Z'yᖸM],^'L1LWxE eE#:2W?!�ls$v ,򲒶5ƵU5ľ]a&J< {/`ǯ*{w=Ʉ*pKX{ge=Xb>یxdƥͷdYb!9*xzIލf UHSQ\ff,<nXC wr+ey&'N5 YnSDMUb47-_mNgTsU\Cc_%s*ky^̿-\H"D&Qo<jtWαh)4\nRboew3!)D`C.RJ=ZX1,pҼd|7ێ@ҶH.KnuMΨ=}I<mA+_f_I!r̞9{9\s}lGNw'^sQEO?pràf+ӟi4k"$K0[dƱ(8V+ K C�!TEEENpӷ!M=w xeEY] dA41$� 4[)m&=(mǥC0n>82񴗬u dJ*ajk/�&K<_=]jPpU>C JG1m<os䨒n6 -6uޮʴ=!W*V$, ^"l(, 鈊}p!kU[v5`Xw<,&k-kȲ0EaE8 01,D 3q^N2Bټ/  = i ˘9cDBb=axew2x٢'kd{9•uB n#1chJ ^!J V;-Zֱkm![ KAFLbK;($9-�KM]`$<wGb0%IHgDfR#16Ҟ(QF E']CC,C2DHP1_.g)0C6"Ȓ_y0 ޣ={ b=үF 9TYY۸vDN5btUupkw[MHa|Kd`@s}lG|Ʋï}^k_E_ך*W澊5Uy}^kI·EELU@WZI?:C�6jO b<‹(9##~m ?us*΁ʏD?6ZVݘ:9rJВo!1swq~¦рaE|,2劣VADcj8%X, [ ",wL2LQ&U~ҫ_W=}*A8S?䃞M`mh0LK2t̞9{\to>lGfXd}BGחa@3G{UF3L*hIܱ\Y+]A<dV}Fi4)#gDvޤI0|>$"Dඳ87br$0j%0o1}U 슷/G^k_E_ך*pQS<P?%ցO4\Yete Ph,dj|r>'Hޭ~3`İ"/Y#uz}UQ:M8K;΁ʏprNS*7Q`sÍk5ȭɸV@Σ2FƲ0bvD6(L^_2_JzU~ҫ_U~Q)֟A4\f�TP#dU_̹ 6=+b_EUDDU\f(X_V}̄A#jYIX8mr9ߙ,CeE$ V`J=�ʍB/VkuQv:>+ά�JE KLDr/p/T;Ur"&R΅_rGѾ9fO\ c"/_OSJ]ݷ \;BUF#sq$>y$dq~'>͈j)U$j4մJ10N`;WȺFOx#(x''f3^:u/^ e ׁipl=5zFQ&/^~_ ׁO5\Z6Ux+Vʾe_ ׁrip\=5zn�i00ᚇ�dT"$�d ג!̬"65 /-yk �K^@_Z�אu<Q"uSLÛ;|"Pk>8QR'Q��cs�/�m�S� ���!1AQaqs "2Br0@R`bu#3PSt$C4cpT�� ?��@pcfj鞺gu,`v3kDt!�>{>MRXM ڄ�cx}m+ ҋ`9QeC.]jd 8<�m蓫MxXM!w馸IT?|-Gac>upGzE%na[k@đ ȍ+y9xđ^>#]iBlv6:9}ݙq�=Pu ho@]}R/Sb <[S=%\Wć (S\_&dNq,<uREtUT1&bf=UVK g WE].%3BKp؇ր6*(G�u [h@tUTX}"\|;tr5tT)lijx*NT1�($ե'2!ͼQή@W+{J7Fk<`q.:vj)HO0_Y7 }(QsEw#@w׬ʼbC+pAFYENsNnAE")?z]3Kpzp*O(]M,rtHdm7G]NsF&yn\qRh"geࣵZ�w*nɣ՜\k"ZR<}GQtsh8MD]XW$H�h_&Q ă?!6�k$a~yYd]^ϝ~;mp>wv2�5+<Cr Cpg s$`,/xH:0EOM3KpziD&0\6.m}WXI5XF5h Cb;羫6$]M-h|xßj1Ԅ2R28e691Jи]~M9t1uHy844#;Y&,8km]  ~׼SvM݃`پ!HB6#]ֶMG4 ǕFPu9ɍqh8mD]sC x\#"u;ab*YA]2oܫ2 xCkzNXHH8zY$T擝&h%8\y4 ?13Y@'1cp7udER@Td`Xh+٨"(ܪ,Efb�rQ0![dv] ]g7^N .M E:mSh$lw*nɣ՜O 9LĨ-ZFݓ4.{ XJ}CtIÅ9%ĉEYC2ɋ#Ъ;ɰ9~4bi2ƙh%8\y4$Qab*塓sQb(lA=X_GẠY3f�kE~jc_$g`팜nˡFeɡy�{7h9'rR:e9FRAdm(�=yO`?ip(mD]I;e%<2<__ q1TcSʱ>G핰AgɠrӌTd<jwVrASFs~$bs|ӑd u sq 1_%nJ8CY4ד˓B;C/Nyr?^M93&EkpG oxG޸<V7 < >e'Wx2ԣS* <uȱiGeYbMysc<h5O #S^Dw3Q˄&W,jj ̓ۯ2OnWU5|r $'~XԳ�MO< q)R]n(ҭIb6:2pF*XQнA o!<s[Ý.ǟp%Ҫ`팇 7`aʧ6Xc,9[p\xD}F\L'SX#i۹;<&V{hoXג.d]Bmx#̒8Qoy\o-6Ԁm\M{APQwNB,A +gDʍ SVo (mf6(),⢝Nr qrY yR:##E ^)I!a-u#b:`Q39 "xc* J <VXr2H͗F. ܢdc\<J`"1 DZ$ɯ$o,lE�>6x"9 )2GC�:KR;6crrp;c#)Sj^6Sldqҋ4~[ b$q=�Tmt$eɡN (QȌXFE(9/~QH+ݜG7`%F]##@Dgr 9"ŕy=?x}.CqlX �1 ,AQ'l8O)u_X? Go\&d7Ǵ7 (XZF'ӌ!F'"nalQ+XW3,z|&7F)7*u_35֠S1'ށɰ<8lk."DnH|C&1v 2(PN .C t<U0ԯޱmjb`�dIoZD<L70 kN#?k)R0cO#^(6_+y?'e9dKs_OIiv"  ,x`AiXu ǍޝmS{4<DN!>Ѱn0џmJ�Ue": Fly\J/GlN-,,O +<p`mRN ;r2FI�^S'5@@X�20 .4 |kD+]9HAOqౌg[w_I)1@� .I#,Uх:rvluĪXv0zmmFn6Lr6 _I+3nmGDRNp '!U68[u*$sg_0njq($. fj]\7!> tû+B '^I`tQt;ʷLNjIC@!C;�J4KJAXP�7.&1PkPr5T�dq־j�պ@JDچw >"3y!9+ F3`UƉTԈo9+ F3n^1�bŸHH "BE(,'oSjJv݅؜Q.~߫ho74@%LR\rjZekٮ_f}ekٮ_f}ekٮ_f}ekٮ_f}ekٮ_f}ekٮ&lը#P;/!o&;$:EY&ɺu4v ~i;' # FFSoʿF>WKrmCy5991O'"UWkn{20EJaآ$7ΊE /θ75<g=Fb܄N|׭�62�y1cj[v'CgP޷,BصԔ>q&RD7|W/,$͸PHnKf+:ۉzpl~_K0"^*&rO{<y]؟X*FGl8` ݫv,PEuƦnPqOOYxေ+JlA bd+eS;C9XiͼH;fI0$cc# in—cynHDSĄ˸ص 1H_!1%-Bd ##r!5*ۮt[W,\ǩk1ڹ#, d(\{X]mV1'p��KW, IuOXHW ÝQ3,Aܹ^PM "8n>.ߚ]]e#8Q~!zmwI"Ԫ9bpw-  i%�H珂JFiwA٢o17 31�m$60<n$e$,8u  ilE #UWjK q<&\:ܝv" ՇI4X^G2 $7ˎd|&!.l&:'ۯ G\ 8B8ޱPG<.ǎE 9x@ L`I-tJtl$�$C&E4Q%BsU >&VBm|W1N;&͉SȰ΁9>IBR֩eDgqd( Hd̰RI;-4 uxfǢAbJo{WD])LM'X'b1#;:*@�YrYO>8X}AbRˉ N,x V3yYn#X @c.~A%x䑱xM?%ShO-phAޱV<B*oJD*FA63!TÑhƉ[O On."2a'2Qre$ &i;Fa]$<$h4rb"Iav:H3!'rqqH|-aP$Q'Y'i>u*JXXI[m$bSX\d!x1ՏV2@IJ0PI6zb29c`!üG̥Rw:,I|\R绺y%aq1GE+;=ipS&za(v<Ʒ䷬'vU12nPgN4j� ھ3·(Ya*IHj5*9o A§A1cTCl&ǣ`;UX x_sɑXҗCb Eueޓ 871㥊7Tra†!@|j !trrOYf"?`MyJcoA\ZHcaĽ_\z2]D@nP1XAݚXmfX_I{3qSbfG&|UG'QbL@B fR~nS+r>Mc4 I72: Iq l^ܙj3Sttr'l4uaxzjaaGJ`axf.&)rVQQbSc a`又Ÿ18I@1ҠŮ #.Bg[H(\$pպ!s1|{vc뚢�⦞/!,z =sDO Fzxl4Z^^y=-p+^RHqIPwdXFb:v5a<A-Xsʐ3|PĚw{aqk\;u1 wF ( ѢXp3*98yq|K4,JқE?"ɃM.hbXV"46&d^ǦEXԶ&Q`Mh#I:qP98g[턵cF1RB_J /%wMnᵶ?8|'yƬ06zL108/weAJ<8pԹp'9k3�b< 硬B$yGJ{zS\>oWRar<"f1 LJt "J aqaSDC,d2:0*F^bkW=Z,\U]p޶Zc�+K�m 7$EUG=!Ҁ$J<O!?�b=|K*y @) ;́͵T6+D{h1 $(b'$ 5aW=zmQb$9P& .b<;,Ph$WlՉ,P99sEOc& QDI }TV"b9VD# Ămb`dzMJȀ<<)_|ie&56QOih&TaGx`T ES ÿq }j7I IOV|c@kxdRs.cf M0U3>ÎyE%Aqa@LՙwʦpXCH�-AVy<lk�&XMw2y0ґ�HW\8qC x%Klf.c Hl.UܶtSR<|MF$/s)X>7DXZt; iS`y9PODBBP&�#1<Ibΰ fr�/y8Q/�-PN23DJ^'�F�&F+˞)16&$6g0.$Tf,GyzπÅ^+8ֹ[0^G8tn"⅖h�CꘘVPsp nGx*c`mqED8D"�]<q#`F"(flJ(TEUQ�=)=|TvxH"Henw;rGIPHVuqV,d4p5GĒ2خ {׻)Z\7hWǧ+1VS?*2b@Pz2Ir@j .*HG<T88)r<F`Br1> 2pxzZ-Z7\vڸg k=bVNezsnb!Aw r#a X_W@}y~3\:sg$ThѰdcX!1m\u`Z qᓥB%D6-ll tI_zNϘ$ q -+"^k8[KX׺\ԝ|:ZwNt`5x)[> 93#�ϩIdtj !Sd!750'&0}OPcrILs4Z[h_6Zkͬ=~fefuL pŏR^I;yiI` cpbS,u-[#x X5u2\C]MG1G-,֐0ڴJap݊J^F9ycO#q`B(�Wv'|\.,:H`$#-x6&L>fR(T%\^ipƻ9%At)iW-̢/2HN0w?tUZC]5{;Q} 6n!HL*ELB"F+IĞO#C-93sHsQ.j;I=7դ`#jx$YVX:#a0( pxzZ-Z7\vڸg k=bVNez4ݷ `t+PL C&9OZ5`H�IVi1.jD^ 5! Bx�W6<&ju/lh6C:C#&2#s\(Č�=w',åKN]X\ujiq T )Z3S: ,"Ar�آ#ˁ4Uy�+|oj"bb2aۄĮs [مB0DDhE|/ÓY w&-ɼʖS6{k !8 -!3V+ 0H,7!V0'YpsrxH|"ݞ*FɈ\\Va.J<m(-IA( 1XjFEsF1lIm2BSĐx@d'S>Q#c1l<CY `ᢾT �5:s}(ἎErN믝mֵ*0j,+nIEC& Z6_m#clI ޡp}+xx$ȀdTLHqkJn0JT$/ j)c]`^ĸ3@n36=.D`j[q2 &H0,1crB�R)W2Un >NjXr 0bpd јl&( -kXDgfvyMSb )ٴAȁ4E�kq^�#+ lȐ"ӛ)5,qURjФ Xc k'*K Fv Y8<lhy`GkV,ҿSXC<260˛j;m{#�@1x;)/$p"+WFVSk?QDDUUE�lk.+ BT٢SG~fH3^92 8K%7XyEI\?sfvcrI+Q"XY F5A.hjCt@k(#d4+04n'{S6'6 Rhs3@VV&dPO0EƃmVS#YP+!~q%/̀d!10gc\J]Xz%xr$ܓ#?m?`HkLgFIfį)X#m>V1ۘR`/#sHdZ�t{UWK'],t{UWK'],t{UWK'],t{UQlmD-b$X�iZAӘKG I7kٮOf)=Q,5E!7`lνS(f`٪ |\vL<rHؼTM&䟅YR� RG[{ ^dԻIr,��:W1ȗ׫⤊AI�}Z7J1u0xI^('yB)fH/J <º'\i!8`,JқE? @bu|Kl2$؝C/<qe Qox.;�xy8n)%IP!y"(ڀm!_h$b&E)c`ᔍD7ʊH,Ga`lTǼnAsÉ`$z$[K^ ?|A.v*Bl; <x4xX�PM\La&@KGV 5kxq6vWq\.lz"~<Z$j|$飞 v2q2 ==5cF%�:ؕ*IR"<:J&c2�D r&5yX""f! _%">eTtumaD$G" JL.8k71V>.U B+<p!x 2 j贉UiEX9QHPDR\$6&3&Eq}a|P51Ӏ@ȃw6"lzm`}&#X ԑ &3�&Wtb0PƪT^R'YP- %y&> PSRi*n;*gpf�H_>қ:0<bCv@E"[/31ۘR`/#{w\5kBk͛ۯ6onٽf͛ۯ6onٽ& IѨRֹ—cF+3K[ l)I�6i(`eibwfdWrJ.N�Zf`Ӕp@ZQp Hv\�lrMxwֻr.хO thf؈7V>' KěJ2]ٕpXwTOF;:)}hs^֑z0l%XKPlS�m%a"JlXT3`9g6G9{PJlI%y,,x\4 ႊM:{i@b ba~71M#cɎ0cCo)2V#6+ 4"61&B p`. $x`όqC4,cekC6(2vL$xk f6gk..�|GsHr0J?Z_޽zկ?Yl$+)L%ef] ThL+MĮItQD�lK_mN ȳU`ZncE\jf5-1`GKS\+0𕇒֨K'rd f{<.Te(:*wHI}Fw k]S0]h,s +L!)G0$Jʲ,-YX/-pcڨ[K+ZgɵEc*2ـ<1!ap-c]e>uo[E|Klvr_oA 3%D 9szj>}_JW)lsw �-{P7(ꎽ_Z+W5^a@oh"|)_hf3>dO"q1_Pg edt={W��>yϭ6 C�gD׭?*:\jC ^J1xl/&+ ?SC1}6#ñAew{{^'Oyu7>up|oZVr׸^a=jqW >\,qfy/ϝ\ }\.<{5h5?֖.\kHy8CS- [r M#)D= 1V\NX+DU>AӘKGT.Fp]@],~tUVCѶbC/(B4D3\q6ii@q1o&_I~E}%W__I~E}%W__I~MbOYҨlʳ#9V݈[u hX2q�w>W^I݌#blTPK fճ*)>"YvWsHlFq2 nDZHxp?4fʉf9(~2>'B>#/]ƕq$/]Ɩ 3Kщ᜕Y{J󉜤ۭ" 6{hVb�W#$oBba'3,LcȣY�\d6EΆW 6HsG* ];%] VI&O3XE떽zt0ްeD aK51FqRbN4I/d\lQ;l0S$9 ['}=L Eax0%yWs O"mg>DZVz^cQ.FK#€*׺OZUշyvf$V'7p!7b[k5c4`Ѧb j+HIeW:h 5pO5z<NR6wK A�XC$QoRb0 PhZyuTޢB hs�+gkK\;22H؆S52%H YI$ܓN&a#9h BKX8W\\:.dq\BT2:sD/6}!Ȃ PH"(ܠQ*SwL]= bcܪ\onYMHVV ssH$bh7Dm;�|? cv1"Ԃ:Yy`g\` on9"CGP (bPP6 ,$iq5GXD2H7F#!J [/cPL3rNK"u{Pbp؄œ�.I6X&@OnƼ "@EDUS Xs�/aX,iӸ|FAb,΁C heYEXak!$hLd؍abmVFlR)>ȡO}M d ')@�`�с(YN,*t(  VE A(n/dݢ <diU T-[XY|C澺E) Q&b@MLToh<m6 7 RU bP^ɑi" g)�[0¤IbW؂,A'~08+Rx?tr7($JbDM`k;qsn—cyopGyļ)0Zb@m*Wѿ_F}}oѿ_F}}oѿ_F}}oV i MnSk|jx#׼]ˀ~_6߄g| i%�J珂6)AOfǷ�^W֏Ntu:R& eubl'F $ &ʭoG @6W__I~E}%W__I~E}%5E>AgJ^)*^"ڈ&)@{k ?K0"^*&rOo 3=/ebP4K40%xM"ơQ6(UtDH2yKjd(]v[sﮣL;]FyGaFBpfzks|XƷnaKJp?G>7ϯ:hHnh.sr\KlǕD6VΤ6K̶|=H)嵍/ja<){-xͮ\-saD\~R1,r湷EZ*يs0uuž o{a/RJgXW__I~E}%+ =*nQ{){-A;ĄP~?)a9cj=q <~ҳo+\rRݤq;m?)fDFbq~œ1P.s9#a4jkίasl;4Ծ +<‰'&& ;QFP+ DܠUx>`fӽ<yr!Ll1CGܿ*"rW/jhڮ/jhڮ/jhڮ/jhڮ/jhڮ/jhڮ/jh&RPT\s+W+8igSn!&@ͨ9�+�6� �����2 !0135P@"4AB#C`%p���'a.6ߪ؜c G12N�ojvt �cYŹTk%"X''XX)$pc]/كk;gdұx2 ] EҲZl .eHZD>U;6IC f@5GGhcTX Zi]ؘx[؂m-Үm Cyj9iHمAɽ$1 5eJ!NՐ�v Eo@8ojXlh R\ZPBE Av gfz[܉RV+s;a5Rfx6CY^*B%j40  Y LS#XW>/FƤj;CGὪƺ_c#]*F^zYD "E-k=$;(e*]J;^U}k1X�Ws w wpon$Dq]'SX'j`S+:/V<UϢ-<}7]FT_?(iKpc].ۆ:Wg]K{+-)t5)u]'tRq2fNS-Uw}gWZfx6CY^*H*<JT(,ueӕ@XW>7c?Ov ;A5Ὢƺ]c!]*?kcLq5gGQ"�䣣S=ZlцU %԰(Kn/ "3U"A|Εc%\2l�eM':mj~SQo@8ojrX��> E])}n-cq!9txkXB:vJ4A^U}k3QFm} hB)FԗPGJWՏ,sOSzoIλ%my5?)("S}kܖ0f-9g:Vj3&6 z\IS>Ras#mF^ܭAhcEZͮ1�I�*-f}xy<:h$DqК[CYYU#_V<U)6Z5/^vSyaO{]fReD蜻~ H"WFY$nM=5",vsZ\4/k;OeM[+γ24<58LIz%fn8ɖesY^*,mjP-^Vc$9S芶5SoQFePi_V'AF@,h#P/^vFAGh=ڬh\, A5jtkr.lѬVىdd#Fvϯb&�*[Sd8V xfvok)ZzNu/;lCQ|; (վc6<rNGY;0AbRH=c}E#|oe$yeEL:"[kprG$є'W[kȮQJEVw e` ܬhQ`! `޺PH5 *d#$GfУ[R]D@EКQE/`3)33[.hvG�25ۃo+kS9k3ݘ.oO3Uɸ곕WXZWXZW+-+-+-+-+-+-)om\>bBU&Bu$FIj4$}{tcחQI$VP T<r|lusIrIfOsiX?Filndݡglvm? {fb$,�5g~^vfl#چ-n'-իn`hfc𬂊91H*K"W 21M!+<q4`XfnUo%\5Ŀ\T#;x]~Z^<VvFWeZ5_%D^_v5M0@$"E miA'kbw׶;�~ZLµ0'tkBS{Pd=[j:Pb\BN9'Cwi H厔#S@N!  Ek߭t^µ:\~_@J'X¢4:VH4�m2y13IbHIܣyΤi <yדW;kOM6 ց\&�x Ǝ>_⟐Jɪ/4C4}Q_O�)W{ZA7@k@R<ˆֆ5â(׏6Yr6n],HhV )HHm)}CI=SGc#` jϭ6ԺF ;Ci M [AN%J7xY^U_%܏5?\'+yYQ|`/-(WZkh+AZ:yփ]ktVQ��;z �+@v��/giawY\&xy.]uV+]{^krdgE'\kǛ_ =~m-Qo䭓w<,;'{{$YZ|"Mun֗ݜys90NLslc‡WTyVEQ4Q>]_];"- |Cvggng6,Z6:):l&S0A3(@ITIIΕpj<LnGv\Uoθ뎯θ뎩; WlD[h�m4LtP(Ǣo5#,!)hfW0Zb UF^<m糤_8qeX7lh'<Oޑ5'Pr[z˾.5?\M8f8"ydUX$x屹6脙"'o8r:V\%OljKSZ2Z#H)=jXopbD&#j7.ľ;]{7�+JaPuֈiBZd." T,kKwW A"cF4% |,x]ow<l溒i}@W ;G=mydH 5|J7x$71G޽mwQK 2lR@8_OH9+Nɖ~Vvf㱓 /4bҰekn{YnRvҷEZmK8HJ7x=:x"1Tđޱ^iZkyG<x\BW>GsA$qk<ɷ6,." K&KwKm�|=z03rqR'GJ{KtGƗ#>GKӹ+Qo< HeܱTz-zN$_Ķm<FHQ;1ſpdM # F۫ i%I_ms p°QSnnT$E%rNd$)t)t)t~ytn{!lI��G��?� �����!1AQ0PRaq "2@SB⒡`#3b� ?��2 `J? `?&`%42 !"B/삂"|BL%O�/NQi{KOz1ŧx'<o*xkxAiu\IS&sKf bLa> ņ1eيNH5ї2mSl4Ng(cT4fߥQ:0MX}XxtЄ!H#Lpϋf9ي5ZT>DW*mf E; EBvAcڞ /D*-d g ;W k�B)|W n EMOb"i#`f(oj{/� Eq8QV8jVEXv," Nr^FOꪋ;_47~W疏�=˅BAZb86Z h@.*+�dN7@аXv,"cAcڞ/?E|W}_ ‹^F j7=09qiLNhb)ذX Oj~Hmoa~+]] ^Ѭy.QߢFDM ɐ8 S` d20tY�;ca/y#Q8ĨGZǐ'`Р�-Oz^KuJXMeVh XShn(g.bcCv4mnqj<4.\w8iP\;aeDr0+\܁/w< Y;3*4_m&9ѩهLrEjdWт@ƌ#CvČ]Ew;q0DyI8dyEk{W57i!4U75`k0 LF�p\I83$I U A'EX=ӦEluOj[SO=w  {\-hȴ"hp/7:AyQHa84:x'4f+<tlG<AN$9o?`ٕe `K(WV HZ׽|^J*/RyJ*/RyJ*7ü6Aan=O*;Ɨ�klE8i{XωV 1;E.@sM[gMM-Uu Ĉ*fhq Y;@Օ7Vٷxiqy$o m+ZvRI!aU  جsy {@T`7 ;NPvlS Twi;sVcD͞y$vTk [0)GP9 ' աX>4Qfx9\vw'K/#a۟Ȭ( 2P7H`#>(PA@  3<�\s^Ikip ' p cp#~˅y\+ϲ^F} 3We¼.6:(d4}-ٷJ$iͼ{ay�5;&fXe<G(ɢ(Bs]<�D%xJRk ЖPsÚH9 C+^HU'Z_*gUg.3(!\oq7߲oݿe߻~ɡ$`נH=nU \B5aWo s=onNVѱNhaۚvK&LW�eD{Dj(rh 7Ck6?%އz 三 @�L$k\rсZ+N3@Ll42™mVT扪גAjfa.jQDly""W�_\S+}qOSMvK֥ۖnq� E�}Xv7AɆ(&4�NjU#!羿;\oS?~Kq.6?$Aq#'Et,y$Veay$0~kId0:üi?Pu8(39_\S+}�2Lk^HfMtNUnnpT$9<z�zȗz %0; q"Kk{:lE1'@Ktu__&C'ԯxҖMP^rEq]V?sz&*O VYbM.Wx}T0P|A0P|A0P|AsRoE,?�V./a��V.cDaM<s�6������503 24@P!16A"7`#%BQ��� Lhg`lRas^ֹk^_X*9B k ʪX 佃{MFr7 k c3hX2𠛽[\GZcd{YYdlGp$CLf|^m;g#Dt,EDOu"lI�d]צrvdmbx\펊G^ݖe'fvmLjm1F6{*ZYZ`+ <: }wE6vu;AiSlڮL7 [[`eԐ"wvFH�qk _3.xD}GTxD fy3T' l$E5S wϫ+4�+6%wt {{F'6s5#⑒2<IM5 .[}6ÅK3+gWfVfkxoޅnRu戜D9\�%ٽ#S5U�Q͚~DZLM \[t&6(dG2_4P +׶)X5N}aY} YHXq8-wMY0>;&xʯ5W,9I[CksXsʯzf�|E+rϧXp&ؤ >J)Y\zI*UDZ`*}ҌpVfX/+qkK_3S35_XڤHD)=l\!EI9;Ɠ.w Xzږ0K=e6GSVViBVn-_3WA<lI_4-0 Zr>AQqd#477\ ֺ7(nYXH/ZDNc+ cHuE-zwjU?kf^vMLыgo:^o':[f%f*qIn qa;5N޽4n%H4"lMEB3ICsxkz+2VM"% ԬkV߽ ܤy4M)bqC!*9r9} Sl%8�qkL[7,"NyY*LSfӆμ8lHP/jW:[f%aDL2C-{W9V܎s&ZEC"~=p3Zp޾J̣gl8k= Vf+xoޅnRuF'xЈqdXR'3VtZ (!Xk 紳(HDUͮTAE gy4,vKNr? ÌDm<4I?5j+3e4+ u^&D?Jz,t"R ,M' ׯR+.o3"_Qܳ5_}O k7_[RuݓkTE )c>ۨqֺu{4<Dȣl1Gv{C21FHЎљ;/a�㣃0|@Cu8e1$_ p0a*<mY/Yn1dㅚwЕDi#SX5eUFڐ¬L=*5a&]f4ݛXxs#ܯsOj1{E#d"K3f)]b,m gW"U\EV*ռ&<'1N5ywFsid>;*'fdMQ0xi>ۨxkuSd|`DAEkU Zv_M˅ je᲌J&a8ș} Yc<"_J\juWL,,N?H!TJpuX>aYU6R;<<b:UC `nsiM\0g]`k=ycccXH+Z&F0Q[V2n!!ȱ�"G-Sk^^U{LdJ<ȱIKiVUXj8dr%[JC+$w<&.VNZ""rMmj,RG.G)D52R;׵u 5s̭2fGY#++E +Z`<d[fS棚uMY>*ʃmflpl2EKZ4VZ־LڵrK A6TZXBH'7|k^1ɞJA ]N.7/.ko[Ir<vMn^+_i-R;YlRvL5x�EECˑ,`s\@yZkRcRN{~=Sߩo39NEuW3tpLaBʲªUU wA#DsUS LFs9G#~jJT k v^1ɉ "x6^3^k~_d)I¦D1˺gJYO[$t{ݎG^V~^ 6V/ %[e|TG3TO2d^OQ)R&2IRH"4i_aH&DdY8ʕ'([02Ik'f�359Wf"zQW#%g;~8ߕOJrTݕ5(Oi#y o:}] ƦkUkZ(x`gLdrUV÷ٓ'VئM6%Sr9gHY|#EȵM-Vs5Ud&nlje+ [~i{v\2[ZG`5C\ ]jsbv{6 >˶XW Yؽͳm]mS1Sr39+q+?.3%z5OFY�!6x ȟFT \ ]Q;QlE[ > 4٤oiuL$:aK^ f4#G[UQE %@v2՛qfmj8ng] n_W?rS?ʸBo+4YP߶� OͲV{shWL!4_f;?ǿOg3SOw�=3,�k傰qJʱyrUin[ƻ#ۅ*'Wqq?lE/ʙ�7#*"ɰx;~U=ӫ${S�xdY4RgWʦvv`V/gju+mBRURMT+.�7O=̱xGlOs淳Y[)&Nn$:اK׶Y9L*11s࿢b~&/ˉ"#y1yLDFv:V55tfݬ{5>hSԏk}Akˑ3΂iԈw΋TW�m=3ŭqHZ 2 W B )-pA>vJ^$iX �+# Q!=iN� W95N U" 6V/0`u,( *C2W0/X‘&t'95<b=أv(݊<b=أ*M;^<ߕU,zO] Ʀʡ=¶A19LL1ƚYE nΐebkSs:|7-XNrZZۀ-e౹XZ_v++fw �FM$eX7zHIc7$[D$+gf=Pn.baL.(4Q"ad \펽$�ԧ a '3*I,aH&!Neׇ~xw~xwe�Fᮋ0ܥoy[x:lI4ڶz Ed4hkG5YmeT'!OOy6aA=;!%?l,8~^ |$Th|ߏ3 ?~a£mbb~?\595GNPբ[v=' IMAL>K\ r-Z&ZL칸u|}j;dcS[M0y֮"X< bVxY26;tDDDO^)bb~7]5\$4 -k$Nvz* G F ё]]dm #sk6YFM!�ɛZGU*-# ̻:C *ޛss41WI3)bѪ)%uhIZԯeE0MW,Ys@cY{n֩eBC=XTUCN*v+ɡTޛ�/X‘Mhz c<.x\sɽ7^÷4=bRK%^5j77�Ьjk|9چA;5I&U%B6YRgRQGNz_[0XRh䨮|54_JZ C6W�EdEolFKc_g4R@ٲX‘M f;aYb%J8vQeoǙi2ňxkX?W篙%Ъ1y+i9XѬ8jsl- "X!V Db-.O_ӠY-'øΑ6<.bMlbhk3r1&:jT[P^[M`\#D<PEaReiK"I_LcCY(- |{=߷w|~=߷wu|ZQ;;b̷`N^��E� ����!1Q"2ARSaq#0@BPr T3`bCc� ?�� UP�+,%4'8"0 ~pԥ0/{VoҴ:0a aᭉ̻4k(}0; iBbl%vŠ(c�iƬ�>)AjvۖȬ8F]谰1#(l5Ʉa`s30QYknUI N 1Yq=TE( -"lK}F-B:<)|X6 %Uk%[p?El(M=B2a[j9lK~ r{5Vl6!}Ta,df;eb%H�=4FS:|5>eW(v`:T}.{z}n#kn~�hg/v*AR5+[ w5g;t`G�= 4ߴW)l{Jn埤&_sc'`E z[ cb Yy 2XpI魑:e_t挼.z j;AC+R)c(ݝWPPa :{_QlAVPz۰f矶�+R[}J/Yj*0QRvڏsu j,^?ڮ#P^B9"Hl;YбRA˝ ߴW)l J+.YDmvRxILj>7.N_ryÛ&Igq6:D#F".X"T{߿'?/\62ߨB#S2n%C5ƘQØk9}-DGMVA?f(b,-\\v ?Ej0c_W -zutapn dPnY7mD6(�VM#gb@�\\zxvW6Meϥ~^_& 2=7.N_i_4e& j"Yc j'EcP|5>=ձmqBkOh2v7j>kn~�h[n͔<g=bTa238H]$we:k{/Xfeso+IͶ_\WNnK}G7&_s+Q}B.OQg7j"&!d{>S؟|{{@WK\qn9W7&n4^5Ϸ`οms�RG[0i`E?ݜ;^*m.7X͓oE6-FKm\mEr9kJIopܹ;~j/f,tPn5fSAj><ᭉw ͭ}y[MBٵH޼U 74cVqr�y#V j\Zr} 6�\󘷼?FxDrR NFO)0j@";r>\CBmhjҿ//sr92ջFٵ϶W|%M/WH | X5X0yO8j&|au1n�St*J+{ku aٕN5o'k§i5[]5 C`oToFo24_py([Q.Ҍ, *�<6jk,R畬Q�rMpCW�<Ǝ�F#xѵI52)ѳ)SN}RnB؍y*5 ҿ//sr9בPFR2e tN"8ֆt"Tj#`WXL ` ,E02KlUPwUo)].skeHb 8[ tOnx.a0;f&u@ڹ�(p/#6Y3GrFagQC{2vRr LՔu`a<;(]a(]2%">y~Q.Б(]tɕ*kQ}B2Za+*ubJ;kg%&ϫNI3)sbk"oj[v4UEC:b'L5RٴD�tqQ5; *y,da3XOݫP턋#kd9C+O!FZ63\R G[H^6P4[aLM°fSkQ:ab*22Xm#F+ V!& O$DI FϓJ8 }oTVK, ȅf,Y&� RH�䒵#Ձos�A L#|= Q7HFFk&Q B!c7cj� Q)4L�Fe{ZX`qƵ`Ax)dvԝT�m /#V$H(4@-!Lm h HG){(,E  2!�664uָ5�To`+'_i>5F :eVՕY_ՕY_ՕY_ՕY_ՕY_Ֆ-(<%F# d &6B|DZ#w=.�eMFIC"ڙCa%OLk n#kpa_.^&oNjXJƺdm`5FEv뫘$;)UovbI='4pFn_σ"h'=;+&S�<wEoG=.<]I\Gc\MZG_q^BAr|@$`<,}TAca}jWa'%z/mGVS+uY{f>nؤ�[sdQ{WmD<t3Fx J:nqx,;mPb�HyX-nzɄ;(lWQ8$ `z?Kޕ1H_|qyH7Oz>(75Bŷ B) `*MňapH,F/-pzE#1RrUE#.Pq <2@�`YHgD@{64pZ&@F%ME#=j&)T?ruBE`tuF�2~ )2X.S)#2 Vq{( :a1+FGT{ͼg@E&&ִ�9S`*F$nd ڠG)#܋:l琡N;[# P1K-YW`u+VA$4:Zm¥Y2I"I<ҕ: @Id*Bc@<JH.y ZA}XeGCxzn츟Qޮ@>kQ�{9aɿ�)𣾙%uiTi5 :~_"MɉZ\"$L[/7֧dYl^Rz$Rϓ>2 5�UL r4(59 biEM}`vPQwVE�49q[g+�EmSDcp.媥C$RH JY_�Z5%nFZޗc2.$ ɕOELTp@q?*z7m{OwM*Y;(e>? %*_O$VL0PH͑rKbE@]d+fB':n!3ZRN!#1 ]nС$$�jtTY2Jb1栰9B1{VE<ADlcRP.[>&(ՠ$<qYUŨaS{z^9X7^<lX:|c2+ K鬋Y?}d?~�Q!IDҧi v~ C*8 8�V%PoS ;2^a"?aE[X"ϥzPasF38Cj-Bl>J\GlWRe(e)m]^8x9\7^<s"و\Īqcq$h$l"V` ,&`00)]E�YgLa�ok$ �^FB\,e@"kHYY]8qtRʏ < �*<w94 WH8E$TR�7DW\?S)ݸ)IRT&nhR$`TS1'Y>DjH RIFwDQ>hc EԌuR:I$lZR2 J ìԌζVKS |iظA5)t"$eX`�hԹ{sx[4sk܇^oVùe r<?m~V~֮_iDYKrng>P),JVMr�*ؿ]l|s*8 8�seY/'}dQH}DNVME[ Qj?G̸㲋ڡF)h}m*YW<#ڐいг~q>Gp'6fE]|+k2[娘TJ]#f,Z˾422F%d!tbt4xQQ;G>&dEOFqP VS M,nx hJDW5&&2T2N"F+=RJF wB`$Q.-7*hY]I34I6I8n0i\;/RL c}7ZwR{k <]I++g^BAr|ήΌjR|*OI>'6Kg\QT 7`q[=eG i%؛eesbw¤/#2`~2L5%WTm޺xG53u褣K2"h'FnoK+F7#^FಆGsF`K(']\NI2H.O R|3sG7+30$ljn26"w5`93ɽO4u0Ŕt"Ẉp&QssG6 B)J3 `�ƪ=e!pKܟIC#DPîY{MU(. kwN= )6ApE}ھ<o<J8ɡdBz@c]=f}gQҬ5YW j>tﬓN>tﬓN>tﬓN>tﬓN>tﬓN>tﬓN"^6g|+#_@)iyO%lEd8TtRIӤ &8+/��������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/static/img/docusaurus.png��������������������������������0000664�0000000�0000000�00000012026�14467713645�0025465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������X��IDATx] TWV\v7G3Iwܢ&g * ( 0 6sb3tZ61&vbq;QvGLt҉{Q&SXDWV󝃯PV����������������������������������������",F5 _3ęj�^c ®`P&1/$jd6Km!8w�F@##5nrT.]jeg욻 /0&E2,|d-kj�^X-#e" 6B2ComŘ#“n'x׽2 _4c#$}vQM׶ ?SR@d#b}Cu@6K/`aXaQYlD& '%~,Uۅ yi$_竹CkA&�$ 1<#=a8*^ 2Ѫ90A,~*y)>Cut +Q "N{2+ZAp*225l5(&1Q:(ŧ6q�B _xX dAS\ͥ0~,^].33hۑ2.]c[?sLgC uۙX~f998lh>琚@=} >sAp4FblniCY4[ո? d,D|5?+ߩџ$kvr0" J33'o2l"_a6iߦޠ}:!=N!̭r].8 =4}>L@mvzձ]g� 0p鍓~5i*^y$qϴh3e�imSV2 rViB[F/f<䳶u_΀<.3lcu8c!>jw^u[Ѷk{z$7]l3.p O@w߬s4(π4bDT.I`H'{=[T@ީww:RnT-׏S49r(GHI[O>{[!ܝI@pzɣ̓ 6HgrGNg̖)0(DӼCޱ^fn5oaP 7p+Mx|㟴aP:3Ma/Qd|^~V;6_ ͵ϒt4 /Pt>\C&q@M&n94+iٸg{3W%F J9V/—^տwũv8e;fL:}=̍kG nΤ֌=[Z~f34k3QDij3` 'B#HsZƫ}�fxbÔbPBڵk1ƹO0p;4meeezj(zء)%%:t_ܪ=z;+n:m.\{W_}EN ;R۶m瞣[:WVV=V+}Q2-7߬)EC'NuwfSƜOVȌd2œԢ׷SO=E7n۷S@@@H^Qݻ?ÇG5;/;u 4i[sO?)w߭|(/˗/K.QII _^]cRL6MnݺUݻw4c E}UTTА!C,[ tBaX[nu(--DkF{8xvnӦ ۷v۳gOM=e1.^Hݻlogmx w2zay՝ fTYYiզ"##6ÇȨ4h ŋm[p߿Yc-шo[` ݶm25kƍ3ؿmG.Xfym~fF{̮XBn3l05rׯvΝ6۱ fV!Kƍ7dWm0:便Q5[?C֭6]]Rnnnk7&>c`mlقLިdiѣ>[C2Ywf. lҎ;(..Zn-s͊c  |<k4;V~fG#LjNokDcƌg|ͺUѫW//ѪUZ=t" M͞ :Tvǔh4ҥKe!qlҀСCXj=z$$ %X`̲3gΤE=4t HR0n.6a\dzbav.#a͛6mkґ#έDfM]o߾a,VbERKab Cd)CݑIL<raX*LǸ0w\�t3Mp?6p/dQApyAE&ԺnUaO:�l e B Ȥ2 L: H!LzL: ]@ QtN$ݪ D/9xm<GNt h6ݯ 2ᒂY1p/d=R4j@*rOV71Pj,@UA&c#ā AUmpiA GnWF ^9&{nd5Wz@%.0&d2\Ѷ@U발uabU-W"seY g zR$(hjHq ƹx i,Ҝ@*Oe'Y'rPs(:t,и-FܜM;%.]0 dBvb|h0Ԓ8`Ȥ뀎1?.ҀduVBa{fZp!Ȥk8 oiaO %zHUHN#Ȥkvp83Kz!| ]KP2]^io̡2Xg@SI0ͫQҽc$|#"A& г q?C~~ݽʗ_Ba! tD1E ?[۷2!'%Xpqx:hO&SWY\<Sw ];Au3ʭ@&];IBƏ.+n#Da' {9&.5A&Ŋ'rB-⟐I׉rԲYR=,W Sz0ea SȤ)bmD9#E~=oe0y=)GԖ[lE&ݵt0FѼnECR$H#M@Q=]S![\[[2"|?:RVSL=#$k^g@@Tw@@Tw@@Tw!Tw!TwG@ @ d+&<IV ȤsIW]I!tA&@Iy?Khx+3;$A&]p5掺MEtm ||YDZF{l$S C Ӽ:]x?)sUWbk&NmLvb>MjVa9ªQ?C&] vYtT/gW q·>fmS>jݓސ?!WW(w\YEL ~kv2DAp^=KtQgRnj ]gX</r28 L,0hE dҵ~ XZߋt5{V ۳hea,N`6|~-)C rɧIew؈jI|SȤ{pb&<'[Hs{BA6+{rR~m4 QO9>RSIwojc}ՐIܹaJ!qȤõR}TI; v;4>C .L[x2\ .IY/TXZpOA9>ϰVi/bYrdҽDw( U.MIGD&{"A&My:+{՟rk>R ^z(񰪤5d=^w`x^K,D8ݞ@3>/2;@}##nw-(,8X+F MqW@dXA. 4i^pu{.vl-qpHIpQF ɘl4솑;9dK l36VI q!8n2Ýrɑ@b9L$[Ι ZgZ6܍t^rF`<mR8p6[ais;0(T(+nO#։BU6GiZ8 &Jx^$L^=,K|:HprBrWG&QJ8Ujq}aWK}qȇa|x%,oP Bpka<mG ۮ=z)O ^)="'/D.e R7-2Oq9$k^g\h'4tnC.^&(0NT7az3 zc?]V*˨6cM_`D{\ͱ8XrRǮJqi8?SR`a܈'EޥX7`*֐SںR"Ԏ-}lM-P͹[`fZQ8(0[rU#&@Ʋ(nQR4 ?fIѳ@B MjlvwVd͕n4`I@ϳ{JJ>>ЯvY nq",ő[l`3x-!z"Bdϱq('h!*R�SzXkw&bG(5D\ +gEp4B̤_I?GѺx mtaB$kOvN^ M ���������������������������������������^@@n����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/static/img/favicon.ico�����������������������������������0000664�0000000�0000000�00000007052�14467713645�0024706�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000���������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��� ������(��� ���6���� ����� �� �� ����������_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_@`C`D_QXQPPPPS[{`C`D`D�_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_?`C`D`D`C`GWPPPPPR]b`A`D_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>`A`D`D`D`D`B^XTJIJNPY`A`D_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>`A`D`D`D`D`D`DVz>==KPW`B`D_>z_>_>e_>_>_>_>_>_>_>_>_>_>_>_>_>_@`D`D`D`D`C`GKѠ??@LPW`B`D_>_>�_>t_>_>_>_>_>_>_>_>_>_>_>_>_>_=`@`B`C`B`EZxKDDDMPW`A`DR_>�_>�_>\_>_>_>_>_>_>_>_>_>_>_>_>_=[vZ[n_P\eYv?:;:;JPVa;<`D�_>�_>�_>t_>_>_>_>_>_>_>_>_>_>_>_>_=VPNJծHFDDDDEMPQ��`C�_>�_>�_>h_>_>_>_>_>_>_>_>_>_>_>_>_=VPJ>>?????@LPQV�`C�_>�_>�_>b_>_>_>_>_>_>_>_>_>_>_>_>_=YTQK֫O߰?ž====>KPTѵa<H`D_>�_>�_>w_>_>_>_>_>_>_>_>_>_>_>_>_>_A_C_D]A]DO֘DDDDEMPW`B`DW_>�_>�_>]_>_>_>_>_>_>_>_>_>_>_>_>_>_>_=`A`CaASx98889JPW`B`D_>�_>�_>o_>_>_>_>_>_>_>_>_>_>_>_>_>_B]T^W^X^[UPPPPPPPW`A`D@_>�_>�_>n_>_>_>_>_>_>_>_>_>_>_>_>_=^HVRRRPPPPPPPPRa4$`D_>�_>�_>^_>_>_>_>_>_>_>_>_>_>_>_>_>_=^QXVUVVVVVVVVVꯐX�`B�_>�_>�_>w_>_>_>_>_>_>_>_>_>_>_>_>_>_>^<^:];];];\;\;\:];]<^=`>a@a@�_>�_>�_>�_>a_>_>_>_>_>_>_>_>_>_>_>_>_>^=iJvZ{`irz߄�_>�_>�_>�_>i_>_>_>_>_>_>_>_>_>_>_>_>^<|a�_>�_>�_>�_>t_>_>_>_>_>_>_>_>_>_>_>_>]<׈�����_>�_>�_>\_>_>_>`?_>_>`>_>_>_>_>_>]<ށ�_>�_>�_>�_>u_>_>^=O3]<`>R5W9_>_>_>_>_>cCt�_>�_>�_>�_>g_>_>[;!HI/[<#LF.`?_>_>_>_>_>];\;];^=_>a@cCeFiJnPrUx\{_t�_>�_>�_>�_>Y_>_>_>=(;C&RY:_>_>_>_>_>_>_>_>_>_>_>Z:Z;_>^=\;^=]<]<\;�_>�_>�_>�_>[_>_>_>^>O4J0Z;_>_>_>_>_>_>_>_>_>_>_>`?G/J0a?S6@*_>_>_>v_>�_>�����_>�_>&_>_>_>_>`?`?_>_>_>_>_>_>_>_>_>_>_>_>_>^=^=_>]=Y:_>_>_>,_>�_>�����_>�_>�_>k_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>_>B_>�_>���������_>�_>�_>_>$_>_>_>_>_>_>_>e_>$_>&_>&_>&_>&_>&_>&_>&_>&_>&_>&_>&_>&_>'_>$_> _>�_>�_>�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/static/img/logo.svg��������������������������������������0000664�0000000�0000000�00000014446�14467713645�0024253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path fill="#FFF" d="M99 52h84v34H99z"/><path d="M23 163c-7.398 0-13.843-4.027-17.303-10A19.886 19.886 0 0 0 3 163c0 11.046 8.954 20 20 20h20v-20H23z" fill="#3ECC5F"/><path d="M112.98 57.376L183 53V43c0-11.046-8.954-20-20-20H73l-2.5-4.33c-1.112-1.925-3.889-1.925-5 0L63 23l-2.5-4.33c-1.111-1.925-3.889-1.925-5 0L53 23l-2.5-4.33c-1.111-1.925-3.889-1.925-5 0L43 23c-.022 0-.042.003-.065.003l-4.142-4.141c-1.57-1.571-4.252-.853-4.828 1.294l-1.369 5.104-5.192-1.392c-2.148-.575-4.111 1.389-3.535 3.536l1.39 5.193-5.102 1.367c-2.148.576-2.867 3.259-1.296 4.83l4.142 4.142c0 .021-.003.042-.003.064l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 53l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 63l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 73l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 83l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 93l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 103l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 113l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 123l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 133l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 143l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 153l-4.33 2.5c-1.925 1.111-1.925 3.889 0 5L23 163c0 11.046 8.954 20 20 20h120c11.046 0 20-8.954 20-20V83l-70.02-4.376A10.645 10.645 0 0 1 103 68c0-5.621 4.37-10.273 9.98-10.624" fill="#3ECC5F"/><path fill="#3ECC5F" d="M143 183h30v-40h-30z"/><path d="M193 158c-.219 0-.428.037-.639.064-.038-.15-.074-.301-.116-.451A5 5 0 0 0 190.32 148a4.96 4.96 0 0 0-3.016 1.036 26.531 26.531 0 0 0-.335-.336 4.955 4.955 0 0 0 1.011-2.987 5 5 0 0 0-9.599-1.959c-.148-.042-.297-.077-.445-.115.027-.211.064-.42.064-.639a5 5 0 0 0-5-5 5 5 0 0 0-5 5c0 .219.037.428.064.639-.148.038-.297.073-.445.115a4.998 4.998 0 0 0-9.599 1.959c0 1.125.384 2.151 1.011 2.987-3.717 3.632-6.031 8.693-6.031 14.3 0 11.046 8.954 20 20 20 9.339 0 17.16-6.41 19.361-15.064.211.027.42.064.639.064a5 5 0 0 0 5-5 5 5 0 0 0-5-5" fill="#44D860"/><path fill="#3ECC5F" d="M153 123h30v-20h-30z"/><path d="M193 115.5a2.5 2.5 0 1 0 0-5c-.109 0-.214.019-.319.032-.02-.075-.037-.15-.058-.225a2.501 2.501 0 0 0-.963-4.807c-.569 0-1.088.197-1.508.518a6.653 6.653 0 0 0-.168-.168c.314-.417.506-.931.506-1.494a2.5 2.5 0 0 0-4.8-.979A9.987 9.987 0 0 0 183 103c-5.522 0-10 4.478-10 10s4.478 10 10 10c.934 0 1.833-.138 2.69-.377a2.5 2.5 0 0 0 4.8-.979c0-.563-.192-1.077-.506-1.494.057-.055.113-.111.168-.168.42.321.939.518 1.508.518a2.5 2.5 0 0 0 .963-4.807c.021-.074.038-.15.058-.225.105.013.21.032.319.032" fill="#44D860"/><path d="M63 55.5a2.5 2.5 0 0 1-2.5-2.5c0-4.136-3.364-7.5-7.5-7.5s-7.5 3.364-7.5 7.5a2.5 2.5 0 1 1-5 0c0-6.893 5.607-12.5 12.5-12.5S65.5 46.107 65.5 53a2.5 2.5 0 0 1-2.5 2.5" fill="#000"/><path d="M103 183h60c11.046 0 20-8.954 20-20V93h-60c-11.046 0-20 8.954-20 20v70z" fill="#FFFF50"/><path d="M168.02 124h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 20h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 20h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0-49.814h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 19.814h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2m0 20h-50.04a1 1 0 1 1 0-2h50.04a1 1 0 1 1 0 2M183 61.611c-.012 0-.022-.006-.034-.005-3.09.105-4.552 3.196-5.842 5.923-1.346 2.85-2.387 4.703-4.093 4.647-1.889-.068-2.969-2.202-4.113-4.46-1.314-2.594-2.814-5.536-5.963-5.426-3.046.104-4.513 2.794-5.807 5.167-1.377 2.528-2.314 4.065-4.121 3.994-1.927-.07-2.951-1.805-4.136-3.813-1.321-2.236-2.848-4.75-5.936-4.664-2.994.103-4.465 2.385-5.763 4.4-1.373 2.13-2.335 3.428-4.165 3.351-1.973-.07-2.992-1.51-4.171-3.177-1.324-1.873-2.816-3.993-5.895-3.89-2.928.1-4.399 1.97-5.696 3.618-1.232 1.564-2.194 2.802-4.229 2.724a1 1 0 0 0-.072 2c3.017.101 4.545-1.8 5.872-3.487 1.177-1.496 2.193-2.787 4.193-2.855 1.926-.082 2.829 1.115 4.195 3.045 1.297 1.834 2.769 3.914 5.731 4.021 3.103.104 4.596-2.215 5.918-4.267 1.182-1.834 2.202-3.417 4.15-3.484 1.793-.067 2.769 1.35 4.145 3.681 1.297 2.197 2.766 4.686 5.787 4.796 3.125.108 4.634-2.62 5.949-5.035 1.139-2.088 2.214-4.06 4.119-4.126 1.793-.042 2.728 1.595 4.111 4.33 1.292 2.553 2.757 5.445 5.825 5.556l.169.003c3.064 0 4.518-3.075 5.805-5.794 1.139-2.41 2.217-4.68 4.067-4.773v-2z" fill="#000"/><path fill="#3ECC5F" d="M83 183h40v-40H83z"/><path d="M143 158c-.219 0-.428.037-.639.064-.038-.15-.074-.301-.116-.451A5 5 0 0 0 140.32 148a4.96 4.96 0 0 0-3.016 1.036 26.531 26.531 0 0 0-.335-.336 4.955 4.955 0 0 0 1.011-2.987 5 5 0 0 0-9.599-1.959c-.148-.042-.297-.077-.445-.115.027-.211.064-.42.064-.639a5 5 0 0 0-5-5 5 5 0 0 0-5 5c0 .219.037.428.064.639-.148.038-.297.073-.445.115a4.998 4.998 0 0 0-9.599 1.959c0 1.125.384 2.151 1.011 2.987-3.717 3.632-6.031 8.693-6.031 14.3 0 11.046 8.954 20 20 20 9.339 0 17.16-6.41 19.361-15.064.211.027.42.064.639.064a5 5 0 0 0 5-5 5 5 0 0 0-5-5" fill="#44D860"/><path fill="#3ECC5F" d="M83 123h40v-20H83z"/><path d="M133 115.5a2.5 2.5 0 1 0 0-5c-.109 0-.214.019-.319.032-.02-.075-.037-.15-.058-.225a2.501 2.501 0 0 0-.963-4.807c-.569 0-1.088.197-1.508.518a6.653 6.653 0 0 0-.168-.168c.314-.417.506-.931.506-1.494a2.5 2.5 0 0 0-4.8-.979A9.987 9.987 0 0 0 123 103c-5.522 0-10 4.478-10 10s4.478 10 10 10c.934 0 1.833-.138 2.69-.377a2.5 2.5 0 0 0 4.8-.979c0-.563-.192-1.077-.506-1.494.057-.055.113-.111.168-.168.42.321.939.518 1.508.518a2.5 2.5 0 0 0 .963-4.807c.021-.074.038-.15.058-.225.105.013.21.032.319.032" fill="#44D860"/><path d="M143 41.75c-.16 0-.33-.02-.49-.05a2.52 2.52 0 0 1-.47-.14c-.15-.06-.29-.14-.431-.23-.13-.09-.259-.2-.38-.31-.109-.12-.219-.24-.309-.38s-.17-.28-.231-.43a2.619 2.619 0 0 1-.189-.96c0-.16.02-.33.05-.49.03-.16.08-.31.139-.47.061-.15.141-.29.231-.43.09-.13.2-.26.309-.38.121-.11.25-.22.38-.31.141-.09.281-.17.431-.23.149-.06.31-.11.47-.14.32-.07.65-.07.98 0 .159.03.32.08.47.14.149.06.29.14.43.23.13.09.259.2.38.31.11.12.22.25.31.38.09.14.17.28.23.43.06.16.11.31.14.47.029.16.05.33.05.49 0 .66-.271 1.31-.73 1.77-.121.11-.25.22-.38.31-.14.09-.281.17-.43.23a2.565 2.565 0 0 1-.96.19m20-1.25c-.66 0-1.3-.27-1.771-.73a3.802 3.802 0 0 1-.309-.38c-.09-.14-.17-.28-.231-.43a2.619 2.619 0 0 1-.189-.96c0-.66.27-1.3.729-1.77.121-.11.25-.22.38-.31.141-.09.281-.17.431-.23.149-.06.31-.11.47-.14.32-.07.66-.07.98 0 .159.03.32.08.47.14.149.06.29.14.43.23.13.09.259.2.38.31.459.47.73 1.11.73 1.77 0 .16-.021.33-.05.49-.03.16-.08.32-.14.47-.07.15-.14.29-.23.43-.09.13-.2.26-.31.38-.121.11-.25.22-.38.31-.14.09-.281.17-.43.23a2.565 2.565 0 0 1-.96.19" fill="#000"/></g></svg>��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/tsconfig.json��������������������������������������������0000664�0000000�0000000�00000000276�14467713645�0023232�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ // This file is not used in compilation. It is here just for a nice editor experience. "extends": "@tsconfig/docusaurus/tsconfig.json", "compilerOptions": { "baseUrl": "." } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023524�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/����������������������������0000775�0000000�0000000�00000000000�14467713645�0025650�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/00-quickstart.md������������0000664�0000000�0000000�00000006377�14467713645�0030616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Quickstart Let's walk through setup of a form after installing the dependency properly. ## Form schema First, specify a schema using the [JSON Schema specification](https://json-schema.org/). The below schema renders a single string field: ```jsx const schema = { title: "Test form", type: "string" }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` You can also render an object with multiple fields with the below schema: ```jsx const schema = { title: "Test form", type: "object", properties: { name: { type: "string" }, age: { type: "number" } } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` For more information and examples of JSON Schema properties that this library supports, see [Using JSON Schema](./usage/single.md). ## Form uiSchema The uiSchema is used to add more customization to the form's look and feel. Use the `classNames` attribute of the uiSchema to add a custom CSS class name to the form: ```jsx const schema = { title: "Test form", type: "string" }; const uiSchema = { classNames: "custom-css-class" }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` To customize object fields in the uiSchema, the structure of the uiSchema should be `{key: value}`, where `key` is the property key and `value` is an object with the uiSchema configuration for that particular property. For example: ```jsx const schema = { title: "Test form", type: "object", properties: { name: { type: "string" }, age: { type: "number" } } }; const uiSchema = { name: { classNames: "custom-class-name" }, age: { classNames: "custom-class-age" } } render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Form initialization Often you'll want to prefill a form with existing data; this is done by passing a `formData` prop object matching the schema: ```jsx const schema = { type: "object", properties: { title: { type: "string" }, done: { type: "boolean" } } }; const formData = { title: "First task", done: true }; render(( <Form schema={schema} formData={formData} /> ), document.getElementById("app")); ``` > Note: If your form has a single field, pass a single value to `formData`. ex: `formData="Charlie"` > WARNING: If you have situations where your parent component can re-render, make sure you listen to the `onChange` event and update the data you pass to the `formData` attribute. ### Form event handlers You can use event handlers such as `onChange`, `onError`, `onSubmit`, `onFocus`, and `onBlur` on the `<Form />` component; see the [Form Props Reference](/docs/api-reference/form-props.md) for more details. ### Controlled component By default, `<Form />` is an [uncontrolled component](https://reactjs.org/docs/uncontrolled-components.html). To make it a controlled component, use the `onChange` and `formData` props as in the below example: ```jsx const App = () => { const [formData, setFormData] = React.useState(null); return (<Form schema={{type: "string"}} formData={formData} onChange={e => setFormData(e.formData)} />); }; render(( <App /> ), document.getElementById("app")); ``` �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/advanced-customization/�����0000775�0000000�0000000�00000000000�14467713645�0032323�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������custom-templates.md���������������������������������������������������������������������������������0000664�0000000�0000000�00000024231�14467713645�0036076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/advanced-customization�������������������������������������������������������������������������# Custom Templates This is an advanced feature that lets you customize even more aspects of the form: _ | Custom Field | Custom Template | Custom Widget --|---------- | ------------- | ---- **What it does** | Overrides all behaviour | Overrides just the layout (not behaviour) | Overrides just the input box (not layout, labels, or help, or validation) **Usage** | Global or per-field | Global or per-field | Global or per-field **Global Example** | `<Form fields={MyCustomField} />` | `<Form ArrayFieldTemplate={MyArrayTemplate} />` | `<Form widgets={MyCustomWidget} />` **Per-Field Example** | `"ui:field": MyCustomField` | `"ui:ArrayFieldTemplate": MyArrayTemplate` | `"ui:widget":MyCustomWidget` **Documentation** | [Custom Fields](custom-widgets-fields.md) | [FieldTemplate](#FieldTemplate) / [ArrayFieldTemplate](#ArrayFieldTemplate) / [ObjectFieldTemplate](#ObjectFieldTemplate) | [Custom Widgets](custom-widgets-fields.md) ## ArrayFieldTemplate You can use an `ArrayFieldTemplate` to customize how your arrays are rendered. This allows you to customize your array, and each element in the array. ```jsx const schema = { type: "array", items: { type: "string" } }; function ArrayFieldTemplate(props) { return ( <div> {props.items.map(element => element.children)} {props.canAdd && <button type="button" onClick={props.onAddClick}></button>} </div> ); } render(( <Form schema={schema} ArrayFieldTemplate={ArrayFieldTemplate} /> ), document.getElementById("app")); ``` You also can provide your own field template to a uiSchema by specifying a `ui:ArrayFieldTemplate` property. ```js const uiSchema = { "ui:ArrayFieldTemplate": ArrayFieldTemplate } ``` Please see [customArray.js](https://github.com/rjsf-team/react-jsonschema-form/blob/4542cd254ffdc6dfaf55e8c9f6f17dc900d0d041/packages/playground/src/samples/customArray.js) for another example. The following props are passed to each `ArrayFieldTemplate`: - `DescriptionField`: The `DescriptionField` from the registry (in case you wanted to utilize it) - `TitleField`: The `TitleField` from the registry (in case you wanted to utilize it). - `canAdd`: A boolean value stating whether new elements can be added to the array. - `className`: The className string. - `disabled`: A boolean value stating if the array is disabled. - `idSchema`: Object - `items`: An array of objects representing the items in the array. Each of the items represent a child with properties described below. - `onAddClick: (event?) => void`: A function that adds a new item to the array. - `readonly`: A boolean value stating if the array is read-only. - `required`: A boolean value stating if the array is required. - `schema`: The schema object for this array. - `uiSchema`: The uiSchema object for this array field. - `title`: A string value containing the title for the array. - `formContext`: The `formContext` object that you passed to Form. - `formData`: The formData for this array. - `registry`: The `registry` object. The following props are part of each element in `items`: - `children`: The html for the item's content. - `className`: The className string. - `disabled`: A boolean value stating if the array item is disabled. - `hasMoveDown`: A boolean value stating whether the array item can be moved down. - `hasMoveUp`: A boolean value stating whether the array item can be moved up. - `hasRemove`: A boolean value stating whether the array item can be removed. - `hasToolbar`: A boolean value stating whether the array item has a toolbar. - `index`: A number stating the index the array item occurs in `items`. - `key`: A stable, unique key for the array item. - `onAddIndexClick: (index) => (event?) => void`: Returns a function that adds a new item at `index`. - `onDropIndexClick: (index) => (event?) => void`: Returns a function that removes the item at `index`. - `onReorderClick: (index, newIndex) => (event?) => void`: Returns a function that swaps the items at `index` with `newIndex`. - `readonly`: A boolean value stating if the array item is read-only. > Note: Array and object field templates are always rendered inside of the FieldTemplate. To fully customize an array field template, you may need to specify both `ui:FieldTemplate` and `ui:ArrayFieldTemplate`. ## FieldTemplate To take control over the inner organization of each field (each form row), you can define a *field template* for your form. A field template is basically a React stateless component being passed field-related props, allowing you to structure your form row as you like. ```jsx const schema = { type: "string" }; function CustomFieldTemplate(props) { const {id, classNames, label, help, required, description, errors, children} = props; return ( <div className={classNames}> <label htmlFor={id}>{label}{required ? "*" : null}</label> {description} {children} {errors} {help} </div> ); } render(( <Form schema={schema} FieldTemplate={CustomFieldTemplate} /> ), document.getElementById("app")); ``` You also can provide your own field template to a uiSchema by specifying a `ui:FieldTemplate` property. ```js const uiSchema = { "ui:FieldTemplate": CustomFieldTemplate } ``` If you want to handle the rendering of each element yourself, you can use the props `rawHelp`, `rawDescription` and `rawErrors`. The following props are passed to a custom field template component: - `id`: The id of the field in the hierarchy. You can use it to render a label targeting the wrapped widget. - `classNames`: A string containing the base Bootstrap CSS classes, merged with any [custom ones](#custom-css-class-names) defined in your uiSchema. - `label`: The computed label for this field, as a string. - `description`: A component instance rendering the field description, if one is defined (this will use any [custom `DescriptionField`](#custom-descriptions) defined). - `rawDescription`: A string containing any `ui:description` uiSchema directive defined. - `children`: The field or widget component instance for this field row. - `errors`: A component instance listing any encountered errors for this field. - `rawErrors`: An array of strings listing all generated error messages from encountered errors for this field. - `help`: A component instance rendering any `ui:help` uiSchema directive defined. - `rawHelp`: A string containing any `ui:help` uiSchema directive defined. **NOTE:** `rawHelp` will be `undefined` if passed `ui:help` is a React component instead of a string. - `hidden`: A boolean value stating if the field should be hidden. - `required`: A boolean value stating if the field is required. - `readonly`: A boolean value stating if the field is read-only. - `disabled`: A boolean value stating if the field is disabled. - `displayLabel`: A boolean value stating if the label should be rendered or not. This is useful for nested fields in arrays where you don't want to clutter the UI. - `fields`: An array containing all Form's fields including your [custom fields](#custom-field-components) and the built-in fields. - `schema`: The schema object for this field. - `uiSchema`: The uiSchema object for this field. - `onChange`: The value change event handler; Can be called with a new value to change the value for this field. - `formContext`: The `formContext` object that you passed to Form. - `formData`: The formData for this field. - `registry`: The `registry` object. > Note: you can only define a single global field template for a form, but you can set individual field templates per property using `"ui:FieldTemplate"`. ## ObjectFieldTemplate ```jsx const schema = { type: "object", title: "Object title", description: "Object description", properties: { name: { type: "string" }, age: { type: "number" } } }; function ObjectFieldTemplate(props) { return ( <div> {props.title} {props.description} {props.properties.map(element => <div className="property-wrapper">{element.content}</div>)} </div> ); } render(( <Form schema={schema} ObjectFieldTemplate={ObjectFieldTemplate} /> ), document.getElementById("app")); ``` You also can provide your own field template to a uiSchema by specifying a `ui:ObjectFieldTemplate` property. ```js const uiSchema = { "ui:ObjectFieldTemplate": ObjectFieldTemplate }; ``` Please see [customObject.js](https://github.com/rjsf-team/react-jsonschema-form/blob/4542cd254ffdc6dfaf55e8c9f6f17dc900d0d041/packages/playground/src/samples/customObject.js) for a better example. The following props are passed to each `ObjectFieldTemplate`: - `DescriptionField`: The `DescriptionField` from the registry (in case you wanted to utilize it) - `TitleField`: The `TitleField` from the registry (in case you wanted to utilize it). - `title`: A string value containing the title for the object. - `description`: A string value containing the description for the object. - `disabled`: A boolean value stating if the object is disabled. - `properties`: An array of object representing the properties in the array. Each of the properties represent a child with properties described below. - `onAddClick: (schema: JSONSchema7) => () => void`: Returns a function that adds a new property to the object (to be used with additionalProperties) - `readonly`: A boolean value stating if the object is read-only. - `required`: A boolean value stating if the object is required. - `schema`: The schema object for this object. - `uiSchema`: The uiSchema object for this object field. - `idSchema`: An object containing the id for this object & ids for it's properties. - `formData`: The form data for the object. - `formContext`: The `formContext` object that you passed to Form. - `registry`: The `registry` object. The following props are part of each element in `properties`: - `content`: The html for the property's content. - `name`: A string representing the property name. - `disabled`: A boolean value stating if the object property is disabled. - `readonly`: A boolean value stating if the property is read-only. - `hidden`: A boolean value stating if the property should be hidden. > Note: Array and object field templates are always rendered inside of the FieldTemplate. To fully customize an object field template, you may need to specify both `ui:FieldTemplate` and `ui:ObjectFieldTemplate`. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������custom-themes.md������������������������������������������������������������������������������������0000664�0000000�0000000�00000007234�14467713645�0035371�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/advanced-customization�������������������������������������������������������������������������# Custom Themes The `withTheme` component provides an easy way to extend the functionality of react-jsonschema-form by passing in a theme object that defines custom/overridden widgets and fields, as well as any of the other possible properties of the standard rjsf `Form` component. This theme-defining object is passed as the only parameter to the HOC (`withTheme(ThemeObj)`), and the HOC will return a themed-component which you use instead of the standard `Form` component. ## Usage ```jsx import React, { Component } from 'react'; import { withTheme } from '@rjsf/core'; const theme = { widgets: {test: () => (<div>test</div>) } }; const ThemedForm = withTheme(theme); const Demo = () => ( <ThemedForm schema={schema} uiSchema={uiSchema} /> ); ``` ## Theme object properties The Theme object consists of the same properties as the rjsf `Form` component (such as **widgets** and **fields**). The themed-Form component merges together any theme-specific **widgets** and **fields** with the default **widgets** and **fields**. For instance, providing a single widget in **widgets** will merge this widget with all the default widgets of the rjsf `Form` component, but overrides the default if the theme's widget's name matches the default widget's name. Thus, for each default widget or field not specified/overridden, the themed-form will rely on the defaults from the rjsf `Form`. Note that you are not required to pass in either custom **widgets** or **fields** when using the custom-themed HOC component; you can make the essentially redefine the default Form by simply doing `const Form = withTheme({});`. ### Widgets and fields **widgets** and **fields** should be in the same format as shown [here](/advanced-customization/#custom-widgets-and-fields). Example theme with custom widget: ```jsx const MyCustomWidget = (props) => { return ( <input type="text" className="custom" value={props.value} required={props.required} onChange={(event) => props.onChange(event.target.value)} /> ); }; const myWidgets = { myCustomWidget: MyCustomWidget }; const ThemeObject = {widgets: myWidgets}; export default ThemeObject; ``` The above can be similarly done for **fields**. ### Templates Each template should be passed directly into the theme object just as you would into the rjsf Form component. Here is an example of how to use a custom [ArrayFieldTemplate](/advanced-customization/#array-field-template) and [ErrorListTemplate](/advanced-customization/#error-list-template) in the theme object: ```jsx function MyArrayFieldTemplate(props) { return ( <div> {props.items.map(element => element.children)} {props.canAdd && <button type="button" onClick={props.onAddClick}></button>} </div> ); } function MyErrorListTemplate(props) { const {errors} = props; return ( <ul> {errors.map(error => ( <li key={error.stack}> {error.stack} </li> ))} </ul> ); } const ThemeObject = { ArrayFieldTemplate: MyArrayFieldTemplate, ErrorList: MyErrorListTemplate, widgets: myWidgets }; export default ThemeObject; ``` ## Overriding other Form props Just as the theme can override **widgets**, **fields**, any of the field templates, and set default values to properties like **showErrorList**, you can do the same with the instance of the withTheme() Form component. ```jsx const ThemeObject = { ArrayFieldTemplate: MyArrayFieldTemplate, fields: myFields, showErrorList: false, widgets: myWidgets }; ``` Thus, the user has higher priority than the withTheme HOC, and the theme has higher priority than the default values of the rjsf Form component (**User** > **Theme** > **Defaults**). ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������custom-widgets-fields.md����������������������������������������������������������������������������0000664�0000000�0000000�00000024342�14467713645�0037015�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/advanced-customization�������������������������������������������������������������������������# Custom Widgets and Fields The API allows to specify your own custom *widget* and *field* components: - A *widget* represents a HTML tag for the user to enter data, eg. `input`, `select`, etc. - A *field* usually wraps one or more widgets and most often handles internal field state; think of a field as a form row, including the labels. ## Customizing the default fields and widgets You can override any default field and widget, including the internal widgets like the `CheckboxWidget` that `ObjectField` renders for boolean values. You can override any field and widget just by providing the customized fields/widgets in the `fields` and `widgets` props: ```jsx const schema = { type: "boolean", default: true }; const uiSchema = { "ui:widget": "checkbox" }; const CustomCheckbox = function(props) { return ( <button id="custom" className={props.value ? "checked" : "unchecked"} onClick={() => props.onChange(!props.value)}> {String(props.value)} </button> ); }; const widgets = { CheckboxWidget: CustomCheckbox }; render(( <Form schema={schema} uiSchema={uiSchema} widgets={widgets} /> ), document.getElementById("app")); ``` This allows you to create a reusable customized form class with your custom fields and widgets: ```jsx const customFields = {StringField: CustomString}; const customWidgets = {CheckboxWidget: CustomCheckbox}; function MyForm(props) { return <Form fields={customFields} widgets={customWidgets} {...props} />; } ``` The default fields you can override are: - `ArrayField` - `BooleanField` - `DescriptionField` - `OneOfField` - `AnyOfField` - `NullField` - `NumberField` - `ObjectField` - `SchemaField` - `StringField` - `TitleField` - `UnsupportedField` The default widgets you can override are: - `AltDateTimeWidget` - `AltDateWidget` - `CheckboxesWidget` - `CheckboxWidget` - `ColorWidget` - `DateTimeWidget` - `DateWidget` - `EmailWidget` - `FileWidget` - `HiddenWidget` - `PasswordWidget` - `RadioWidget` - `RangeWidget` - `SelectWidget` - `TextareaWidget` - `TextWidget` - `UpDownWidget` - `URLWidget` ## Adding your own custom widgets You can provide your own custom widgets to a uiSchema for the following json data types: - `string` - `number` - `integer` - `boolean` ```jsx const schema = { type: "string" }; const uiSchema = { "ui:widget": (props) => { return ( <input type="text" className="custom" value={props.value} required={props.required} onChange={(event) => props.onChange(event.target.value)} /> ); } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` The following props are passed to custom widget components: - `id`: The generated id for this field; - `schema`: The JSONSchema subschema object for this field; - `uiSchema`: The uiSchema for this field; - `value`: The current value for this field; - `placeholder`: the placeholder for the field, if any; - `required`: The required status of this field; - `disabled`: `true` if the widget is disabled; - `readonly`: `true` if the widget is read-only; - `autofocus`: `true` if the widget should autofocus; - `onChange`: The value change event handler; call it with the new value every time it changes; - `onKeyChange`: The key change event handler (only called for fields with `additionalProperties`); pass the new value every time it changes; - `onBlur`: The input blur event handler; call it with the the widget id and value; - `onFocus`: The input focus event handler; call it with the the widget id and value; - `options`: A map of options passed as a prop to the component (see [Custom widget options](#custom-widget-options)). - `options.enumOptions`: For enum fields, this property contains the list of options for the enum as an array of { label, value } objects. If the enum is defined using the oneOf/anyOf syntax, the entire schema object for each option is appended onto the { schema, label, value } object. - `formContext`: The `formContext` object that you passed to Form. - `rawErrors`: An array of strings listing all generated error messages from encountered errors for this widget. ### Custom component registration Alternatively, you can register them all at once by passing the `widgets` prop to the `Form` component, and reference their identifier from the `uiSchema`: ```jsx const MyCustomWidget = (props) => { return ( <input type="text" className="custom" value={props.value} required={props.required} onChange={(event) => props.onChange(event.target.value)} /> ); }; const widgets = { myCustomWidget: MyCustomWidget }; const schema = { type: "string" }; const uiSchema = { "ui:widget": "myCustomWidget" } render(( <Form schema={schema} uiSchema={uiSchema} widgets={widgets} /> ), document.getElementById("app")); ``` This is useful if you expose the `uiSchema` as pure JSON, which can't carry functions. ### Custom widget options If you need to pass options to your custom widget, you can add a `ui:options` object containing those properties. If the widget has `defaultProps`, the options will be merged with the (optional) options object from `defaultProps`: ```jsx const schema = { type: "string" }; function MyCustomWidget(props) { const {options} = props; const {color, backgroundColor} = options; return <input style={{color, backgroundColor}} />; } MyCustomWidget.defaultProps = { options: { color: "red" } }; const uiSchema = { "ui:widget": MyCustomWidget, "ui:options": { backgroundColor: "yellow" } }; // renders red on yellow input render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` > Note: This also applies to [registered custom components](#custom-component-registration). > Note: Since v0.41.0, the `ui:widget` object API, where a widget and options were specified with `"ui:widget": {component, options}` shape, is deprecated. It will be removed in a future release. ### Customizing widgets text input All the widgets that render a text input use the `BaseInput` component internally. If you need to customize all text inputs without customizing all widgets individually, you can provide a `BaseInput` component in the `widgets` property of `Form` (see [Custom component registration](#custom-component-registration)). ## Custom field components You can provide your own field components to a uiSchema for basically any json schema data type, by specifying a `ui:field` property. For example, let's create and register a dumb `geo` component handling a *latitude* and a *longitude*: ```jsx const schema = { type: "object", required: ["lat", "lon"], properties: { lat: {type: "number"}, lon: {type: "number"} } }; // Define a custom component for handling the root position object class GeoPosition extends React.Component { constructor(props) { super(props); this.state = {...props.formData}; } onChange(name) { return (event) => { this.setState({ [name]: parseFloat(event.target.value) }, () => this.props.onChange(this.state)); }; } render() { const {lat, lon} = this.state; return ( <div> <input type="number" value={lat} onChange={this.onChange("lat")} /> <input type="number" value={lon} onChange={this.onChange("lon")} /> </div> ); } } // Define the custom field component to use for the root object const uiSchema = {"ui:field": "geo"}; // Define the custom field components to register; here our "geo" // custom field component const fields = {geo: GeoPosition}; // Render the form with all the properties we just defined passed // as props render(( <Form schema={schema} uiSchema={uiSchema} fields={fields} /> ), document.getElementById("app")); ``` > Note: Registered fields can be reused across the entire schema. ### Field props A field component will always be passed the following props: - `schema`: The JSON schema for this field; - `uiSchema`: The [uiSchema](#the-uischema-object) for this field; - `idSchema`: The tree of unique ids for every child field; - `formData`: The data for this field; - `errorSchema`: The tree of errors for this field and its children; - `registry`: A [registry](#the-registry-object) object (read next). - `formContext`: A [formContext](#the-formcontext-object) object (read next). ## The `registry` object The `registry` is an object containing the registered custom fields and widgets as well as the root schema definitions. - `fields`: The [custom registered fields](#custom-field-components). By default this object contains the standard `SchemaField`, `TitleField` and `DescriptionField` components; - `widgets`: The [custom registered widgets](#custom-widget-components), if any; - `rootSchema`: The root schema, which can contain referenced [definitions](#schema-definitions-and-references); - `formContext`: The [formContext](#the-formcontext-object) object; - `definitions` (deprecated since v2): Equal to `rootSchema.definitions`. The registry is passed down the component tree, so you can access it from your custom field and `SchemaField` components. ### Custom SchemaField **Warning:** This is a powerful feature as you can override the whole form behavior and easily mess it up. Handle with care. You can provide your own implementation of the `SchemaField` base React component for rendering any JSONSchema field type, including objects and arrays. This is useful when you want to augment a given field type with supplementary powers. To proceed so, pass a `fields` object having a `SchemaField` property to your `Form` component; here's an example: ```jsx const CustomSchemaField = function(props) { return ( <div id="custom"> <p>Yeah, I'm pretty dumb.</p> <div>My props are: {JSON.stringify(props)}</div> </div> ); }; const fields = { SchemaField: CustomSchemaField }; const schema = { type: "string" }; render(( <Form schema={schema} fields={fields} /> ), document.getElementById("app")); ``` If you're curious how this could ever be useful, have a look at the [Kinto formbuilder](https://github.com/Kinto/formbuilder) repository to see how it's used to provide editing capabilities to any form field. Props passed to a custom SchemaField are the same as [the ones passed to a custom field](#field-props). ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������index.mdx�������������������������������������������������������������������������������������������0000664�0000000�0000000�00000000326�14467713645�0034066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/advanced-customization�������������������������������������������������������������������������--- title: Advanced Customization description: Advanced customization documentation for react-jsonschema-form. --- import DocCardList from '@theme/DocCardList'; <p>{frontMatter.description}</p> <DocCardList />����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������internals.md����������������������������������������������������������������������������������������0000664�0000000�0000000�00000012612�14467713645�0034567�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/advanced-customization�������������������������������������������������������������������������# Internals Miscellaneous internals of react-jsonschema-form are listed here. ## JSON Schema supporting status This component follows [JSON Schema](http://json-schema.org/documentation.html) specs. We currently support JSON Schema-07 by default, but we also support other JSON schema versions through the [custom schema validation](../usage/validation/#custom-schema-validation) feature. Due to the limitation of form widgets, there are some exceptions as follows: * `additionalItems` keyword for arrays This keyword works when `items` is an array. `additionalItems: true` is not supported because there's no widget to represent an item of any type. In this case it will be treated as no additional items allowed. `additionalItems` being a valid schema is supported. * `anyOf`, `allOf`, and `oneOf`, or multiple `types` (i.e. `"type": ["string", "array"]`) The `anyOf` and `oneOf` keywords are supported; however, properties declared inside the `anyOf/oneOf` should not overlap with properties "outside" of the `anyOf/oneOf`. You can also use `oneOf` with [schema dependencies](../usage/dependencies.md) to dynamically add schema properties based on input data. The `allOf` keyword is supported; it uses [json-schema-merge-allof](https://github.com/mokkabonna/json-schema-merge-allof) to merge subschemas to render the final combined schema in the form. When these subschemas are incompatible, though (or if the library has an error merging it), the `allOf` keyword is dropped from the schema. * `"additionalProperties":false` produces incorrect schemas when used with [schema dependencies](#schema-dependencies). This library does not remove extra properties, which causes validation to fail. It is recommended to avoid setting `"additionalProperties":false` when you use schema dependencies. See [#848](https://github.com/rjsf-team/react-jsonschema-form/issues/848) [#902](https://github.com/rjsf-team/rjsf-team/issues/902) [#992](https://github.com/rjsf-team/rjsf-team/issues/992) ## Handling of schema defaults This library automatically fills default values defined in the [JSON Schema](http://json-schema.org/documentation.html) as initial values in your form. This also works for complex structures in the schema. If a field has a default defined, it should always appear as default value in form. This also works when using [schema dependencies](#schema-dependencies). Since there is a complex interaction between any supplied original form data and any injected defaults, this library tries to do the injection in a way which keeps the original intention of the original form data. Check out the defaults example on the [live playground](https://rjsf-team.github.io/react-jsonschema-form/) to see this in action. ### Merging of defaults into the form data There are three different cases which need to be considered for the merging. Objects, arrays and scalar values. This library always deeply merges any defaults with the existing form data for objects. This are the rules which are used when injecting the defaults: - When there is a scalar in the form data, nothing is changed. - When the value is `undefined` in the form data, the default is created in the form data. - When the value is an object in the form data, the defaults are deeply merged into the form data, using the rules defined here for the deep merge. - Then the value is an array in the form data, defaults are only injected in existing array items. No new array items will be created, even if the schema has minItems or additional items defined. ### Merging of defaults within the schema In the schema itself, defaults of parent elements are propagated into children. So when you have a schema which defines a deeply nested object as default, these defaults will be applied to children of the current node. This also merges objects defined at different levels together with the "deeper" not having precedence. If the parent node defines properties, which are not defined in the child, they will be merged so that the default for the child will be the merged defaults of parent and child. For arrays this is not the case. Defining an array, when a parent also defines an array, will be overwritten. This is only true when arrays are used in the same level, for objects within these arrays, they will be deeply merged again. ## Custom array field buttons The `ArrayField` component provides a UI to add, remove and reorder array items, and these buttons use [Bootstrap glyphicons](http://getbootstrap.com/components/#glyphicons). If you don't use glyphicons but still want to provide your own icons or texts for these buttons, you can easily do so using CSS: ```css i.glyphicon { display: none; } .btn-add::after { content: 'Add'; } .array-item-move-up::after { content: 'Move Up'; } .array-item-move-down::after { content: 'Move Down'; } .array-item-remove::after { content: 'Remove'; } ``` ## Submit form programmatically You can use the reference to get your `Form` component and call the `submit` method to submit the form programmatically without a submit button. This method will dispatch the `submit` event of the form, and the function, that is passed to `onSubmit` props, will be called. ```jsx const onSubmit = ({formData}) => console.log("Data submitted: ", formData); let yourForm; const schema = { type: "string" }; render(( <Form schema={schema} onSubmit={onSubmit} ref={(form) => {yourForm = form;}}/> ), document.getElementById("app")); yourForm.submit(); ``` ����������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/api-reference/��������������0000775�0000000�0000000�00000000000�14467713645�0030355�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/api-reference/form-props.md�0000664�0000000�0000000�00000022672�14467713645�0033014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- title: <Form /> Props --- # <Form /> props ## acceptcharset The value of this prop will be passed to the `accept-charset` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-accept-charset). ## action The value of this prop will be passed to the `action` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-action). Note that this just renders the `action` attribute in the HTML markup. There is no real network request being sent to this `action` on submit. Instead, react-jsonschema-form catches the submit event with `event.preventDefault()` and then calls the [`onSubmit`](#onSubmit) function, where you could send a request programmatically with `fetch` or similar. ## additionalMetaSchemas This prop allows you to validate the form data against another JSON Schema meta schema, for example, JSON Schema draft-04. See [Validation](../usage/validation.md) for more information. ## ArrayFieldTemplate React component used to customize how alls arrays are rendered on the form. See [Custom Templates](../advanced-customization/custom-templates.md) for more information. ## autoComplete The value of this prop will be passed to the `autocomplete` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-autocomplete). ## autocomplete Deprecated, same functionality as `autoComplete` ## className The value of this prop will be passed to the `class` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form). ## children You can provide custom buttons to your form via the `Form` component's `children`. Otherwise a default submit button will be rendered. ```jsx const schema = { type: "string" }; render(( <Form schema={schema}> <div> <button type="submit">Submit</button> <button type="button">Cancel</button> </div> </Form> ), document.getElementById("app")); ``` > **Warning:** There needs to be a button or an input with `type="submit"` to trigger the form submission (and then the form validation). ## customFormats This prop allows you to define custom formats for validation. See [Validation](../usage/validation.md) for more information. ## disabled It's possible to disable the whole form by setting the `disabled` prop. The `disabled` prop is then forwarded down to each field of the form. ```jsx const schema = { type: "string" }; render(( <Form schema={schema} disabled /> ), document.getElementById("app")); ``` If you just want to disable some of the fields, see the `ui:disabled` parameter in `uiSchema`. ## readonly It's possible to make the whole form read-only by setting the `readonly` prop. The `readonly` prop is then forwarded down to each field of the form. ```jsx const schema = { type: "string" }; render(( <Form schema={schema} readonly /> ), document.getElementById("app")); ``` If you just want to make some of the fields read-only, see the `ui:readonly` parameter in `uiSchema`. ## enctype The value of this prop will be passed to the `enctype` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-enctype). ## extraErrors This prop allows passing in custom errors that are augmented with the existing JSON Schema errors on the form; it can be used to implement asynchronous validation. See [Validation](../usage/validation.md) for more information. ## ErrorList You can pass a React component to this prop to customize how form errors are displayed. See [Validation](../usage/validation.md) for more information. ## fields Dictionary of registered fields in the form. See [Custom Widgets and Fields](../advanced-customization/custom-widgets-fields.md) for more information. ## FieldTemplate React component used to customize each field of the form. See [Custom Templates](../advanced-customization/custom-templates.md) for more information. ## formContext You can provide a `formContext` object to the Form, which is passed down to all fields and widgets. Useful for implementing context aware fields and widgets. ## formData Often you'll want to prefill a form with existing data; this is done by passing a `formData` prop object matching the schema. ## id The value of this prop will be passed to the `id` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form). ## idPrefix To avoid collisions with existing ids in the DOM, it is possible to change the prefix used for ids (the default is `root`). ```jsx const schema = { type: "string" }; render(( <Form schema={schema} idPrefix={"rjsf_prefix"}/> ), document.getElementById("app")); ``` This will render `<input id="rjsf_prefix_key">` instead of `<input id="root_key">` ## liveOmit If `omitExtraData` and `liveOmit` are both set to true, then extra form data values that are not in any form field will be removed whenever `onChange` is called. Set to `false` by default. ## liveValidate If set to true, the form will perform validation and show any validation errors whenever the form data is changed, rather than just on submit. ## method The value of this prop will be passed to the `method` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-method). ## name The value of this prop will be passed to the `name` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-name). ## noHtml5Validate If set to true, turns off HTML5 validation on the form. Set to `false` on default. ## noValidate If set to true, turns off all validation. Set to `false` by default. ## ObjectFieldTemplate React component used to customize how all objects are rendered in the form. See [Custom Templates](../advanced-customization/custom-templates.md) for more information. ## omitExtraData If set to true, then extra form data values that are not in any form field will be removed whenever `onSubmit` is called. Set to `false` by default. ## onBlur Sometimes you may want to trigger events or modify external state when a field has been touched, so you can pass an `onBlur` handler, which will receive the id of the input that was blurred and the field value. ## onChange If you plan on being notified every time the form data are updated, you can pass an `onChange` handler, which will receive the same args as `onSubmit` any time a value is updated in the form. ## onError To react when submitted form data are invalid, pass an `onError` handler. It will be passed the list of encountered errors: ```jsx const schema = { type: "string" }; const onError = (errors) => console.log("I have", errors.length, "errors to fix"); render(( <Form schema={schema} onError={onError} /> ), document.getElementById("app")); ``` ## onFocus Sometimes you may want to trigger events or modify external state when a field has been focused, so you can pass an `onFocus` handler, which will receive the id of the input that is focused and the field value. ## onSubmit You can pass a function as the `onSubmit` prop of your `Form` component to listen to when the form is submitted and its data are valid. It will be passed a result object having a `formData` attribute, which is the valid form data you're usually after. The original event will also be passed as a second parameter: ```jsx const schema = { type: "string" }; const onSubmit = ({formData}, e) => console.log("Data submitted: ", formData); render(( <Form schema={schema} onSubmit={onSubmit} /> ), document.getElementById("app")); ``` > Note: If there are fields in the `formData` that are not represented in the schema, they will be retained by default. If you would like to remove those extra values on form submission, you may need to set the `omitExtraData` and/or `liveOmit` props. ## schema Form schema. We support JSON schema draft-07 by default. See [Schema Reference](https://json-schema.org/draft-07/json-schema-release-notes.html) for more information. ## showErrorList When this prop is set to true, a list of errors (or the custom error list defined in the `ErrorList`) will also show. When set to false, only inline input validation errors will be shown. Set to `true` by default. See [Validation](../usage/validation.md) for more information. ## tagName It's possible to change the default `form` tag name to a different HTML tag, which can be helpful if you are nesting forms. However, native browser form behaviour, such as submitting when the `Enter` key is pressed, may no longer work. ```jsx <Form tagName="div" /> ``` You can also provide a class/function component. ```jsx const CustomForm = props => <form {...props} style={...} className={...} /> // ... <Form tagName={CustomForm} /> ``` ## target The value of this prop will be passed to the `target` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-target). ## transformErrors A function can be passed to this prop in order to make modifications to the default errors resulting from JSON Schema validation. See [Validation](../usage/validation.md) for more information. ## uiSchema Form uiSchema. See [uiSchema Reference](uiSchema.md) for more information. ## validate The `validate` prop requires a function that specifies custom validation rules for the form. See [Validation](../usage/validation.md) for more information. ## widgets Dictionary of registered widgets in the form. See [Custom Widgets and Fields](../advanced-customization/custom-widgets-fields.md) for more information. ����������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/api-reference/index.mdx�����0000664�0000000�0000000�00000000271�14467713645�0032176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- title: API Reference description: API documentation for react-jsonschema-form. --- import DocCardList from '@theme/DocCardList'; <p>{frontMatter.description}</p> <DocCardList />���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/api-reference/themes/�������0000775�0000000�0000000�00000000000�14467713645�0031642�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������semantic-ui/����������������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0034001�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/api-reference/themes���������������������������������������������������������������������������uiSchema.md�����������������������������������������������������������������������������������������0000664�0000000�0000000�00000005372�14467713645�0036070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/api-reference/themes/semantic-ui���������������������������������������������������������������# uiSchema Options for Semantic-UI There are various options to pass to semantic theme fields. Note that every semantic property within uiSchema can be rendered in one of two ways: `{"ui:options": {semantic:{[property]: [value]}}}` In other words, the following uiSchema is equivalent: > Note: All fields have the following settings below as their default ``` fluid: Take on the size of its container. inverted: Format to appear on dark backgrounds. ``` ```json { "ui:options": { "semantic" : { "fluid": true, "inverted": false, "errorOptions": { "size": "small", "pointing": "above", } } } } ``` #### Semantic Widget Optional Properties - [Semantic props for TextWidget](https://react.semantic-ui.com/elements/input/) - [Semantic props for CheckboxWidget](https://react.semantic-ui.com/modules/checkbox/) - [Semantic props for SelectWidget](https://react.semantic-ui.com/modules/dropdown/) - [Semantic props for RangeWidget](https://react.semantic-ui.com/elements/input/) - [Semantic props for RadioWidget](https://react.semantic-ui.com/addons/radio/) - [Semantic props for PasswordWidget](https://react.semantic-ui.com/elements/input/) - [Semantic props for UpDownWidget](https://react.semantic-ui.com/elements/input/) - [Semantic props for TextAreaWidget](https://react.semantic-ui.com/addons/text-area/) ## errorOptions The uiSchema semantic object accepts an `errorOptions` property for each field of the schema: ``` size: determines the size of the error message dialog pointing: determines the direction of the arrow on the error message dialog ``` Below are the current defaults ```jsx const uiSchema = { "ui:options": { "semantic" : { "errorOptions": { "size": "small", "pointing": "above", } } } }; ``` ## semantic options uiSchema for array items To specify a uiSchema that applies to array items, specify the semantic uiSchema value within the `ui:options` property: ``` wrapItem: wrap each array item in a Segment horizontalButtons: horizontal buttons instead of the default vertical ``` ```jsx const schema = { type: "array", items: { type: "string" } }; const uiSchema = { "ui:options": { "semantic": { "wrapItem": true, "horizontalButtons": true } } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## formContext The formContext semantic object accepts `wrapContent` ,`wrapLabel` properties. ``` wrapContent: wrap all inputs field content in a div, for custom styling wrapLabel: wrap all labels in a div, for custom styling via CSS ``` ```jsx <Form formContext={{ "semantic" : { "wrapLabel": true, "wrapContent": true } // other props... }} /> ``` ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/api-reference/uiSchema.md���0000664�0000000�0000000�00000013056�14467713645�0032442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# uiSchema JSON Schema is limited for describing how a given data type should be rendered as a form input component. That's why this library introduces the concept of uiSchema. A UI schema is basically an object literal providing information on **how** the form should be rendered, while the JSON schema tells **what**. The uiSchema object follows the tree structure of the form field hierarchy, and defines how each property should be rendered. Note that every property within uiSchema can be rendered in one of two ways: `{"ui:options": {[property]: [value]}}`, or `{"ui:[property]": value}`. In other words, the following uiSchemas are equivalent: ```json { "ui:title": "Title", "ui:description": "Description" } ``` ```json { "ui:options": { "title": "Title", "description": "Description" } } ``` ## classNames The uiSchema object accepts a `classNames` property for each field of the schema: ```jsx const uiSchema = { title: { classNames: "task-title foo-bar" } }; ``` Will result in: ```html <div class="field field-string task-title foo-bar" > <label> <span>Title*</span> <input value="My task" required="" type="text"> </label> </div> ``` ## autofocus If you want to automatically focus on a text input or textarea input, set the `ui:autofocus` uiSchema directive to `true`. ```js const schema = {type: "string"}; const uiSchema = { "ui:widget": "textarea", "ui:autofocus": true } ``` ## description Sometimes it's convenient to change the description of a field. This is the purpose of the `ui:description` uiSchema directive: ```js const schema = {type: "string"}; const uiSchema = { "ui:widget": "password", "ui:description": "The best password" }; ``` ## disabled The `ui:disabled` uiSchema directive will disable all child widgets from a given field. > Note: If you're wondering about the difference between a `disabled` field and a `readonly` one: Marking a field as read-only will render it greyed out, but its text value will be selectable. Disabling it will prevent its value to be selected at all. ## enumDisabled To disable an option, use the `enumDisabled` property in uiSchema. ```js const schema = { type: "string", enum: ["one", "two", "three"], }; const uiSchema={ "ui:enumDisabled": ['two'], } ``` ## help Sometimes it's convenient to add text next to a field to guide the end user filling it. This is the purpose of the `ui:help` uiSchema directive: ```js const schema = {type: "string"}; const uiSchema = { "ui:widget": "password", "ui:help": "Hint: Make it strong!" }; ``` ![](https://i.imgur.com/scJUuZo.png) Help texts work for any kind of field at any level, and will always be rendered immediately below the field component widget(s) (after contextualized errors, if any). ## inputType To change the input type (for example, `tel` or `email`) you can specify the `inputType` in the `ui:options` uiSchema directive. ```jsx const schema = {type: "string"}; const uiSchema = { "ui:options": { inputType: 'tel' } }; ``` ## label Field labels are rendered by default. Labels may be omitted by setting the `label` option to `false` in the `ui:options` uiSchema directive. ```jsx const schema = {type: "string"}; const uiSchema = { "ui:options": { label: false } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## order This property allows you to reorder the properties that are shown for a particular object. See [Objects](../usage/objects.md) for more information. ## placeholder You can add placeholder text to an input by using the `ui:placeholder` uiSchema directive: ```jsx const schema = {type: "string", format: "uri"}; const uiSchema = { "ui:placeholder": "http://" }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` Fields using `enum` can also use `ui:placeholder`. The value will be used as the text for the empty option in the select widget. ```jsx const schema = {type: "string", enum: ["First", "Second"]}; const uiSchema = { "ui:placeholder": "Choose an option" }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## readonly The `ui:readonly` uiSchema directive will mark all child widgets from a given field as read-only. This is equivalent to setting the `readOnly` property in the schema. > Note: If you're wondering about the difference between a `disabled` field and a `readonly` one: Marking a field as read-only will render it greyed out, but its text value will be selectable. Disabling it will prevent its value to be selected at all. ## rootFieldId By default, this library will generate ids unique to the form for all rendered widgets. If you plan on using multiple instances of the `Form` component in a same page, it's wise to declare a root prefix for these, using the `ui:rootFieldId` uiSchema directive: ```js const uiSchema = { "ui:rootFieldId": "myform" }; ``` This will make all widgets have an id prefixed with `myform`. ## rows You can set the initial height of a textarea widget by specifying `rows` option. ```js const schema = {type: "string"}; const uiSchema = { "ui:widget": "textarea", "ui:options": { rows: 15 } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## title Sometimes it's convenient to change a field's title. This is the purpose of the `ui:title` uiSchema directive: ```js const schema = {type: "string"}; const uiSchema = { "ui:widget": "password", "ui:title": "Your password" }; ``` ## Theme Options [Semantic UI](themes/semantic-ui/uiSchema.md) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/usage/����������������������0000775�0000000�0000000�00000000000�14467713645�0026754�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/usage/arrays.md�������������0000664�0000000�0000000�00000011606�14467713645�0030603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Arrays Arrays are defined with a type equal to `array`, and array items' schemas are specified in the `items` keyword. ## Arrays of a single field Arrays of a single field type can be specified as follows: ```jsx const schema = { type: "array", items: { type: "string" } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Arrays of objects Arrays of objects can be specified as follows: ```jsx const schema = { type: "array", items: { type: "object", properties: { name: { type: "string" } } } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## uiSchema for array items To specify a uiSchema that applies to array items, specify the uiSchema value within the `items` property: ```jsx const schema = { type: "array", items: { type: "string" } }; const uiSchema = { items: { "ui:widget": "textarea" } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## The `additionalItems` keyword The `additionalItems` keyword allows the user to add additional items of a given schema. For example: ```jsx const schema = { type: "array", items: { type: "string" }, additionalItems: { type: "boolean" } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Array item options ### `orderable` option Array items are orderable by default, and react-jsonschema-form renders move up/down buttons alongside them. The uiSchema `orderable` options allows you to disable ordering: ```jsx const schema = { type: "array", items: { type: "string" } }; const uiSchema = { "ui:options": { orderable: false } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ### `addable` option If either `items` or `additionalItems` contains a schema object, an add button for new items is shown by default. You can turn this off with the `addable` option in `uiSchema`: ```jsx const schema = { type: "array", items: { type: "string" } }; const uiSchema = { "ui:options": { addable: false } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ### `removable` option A remove button is shown by default for an item if `items` contains a schema object, or the item is an `additionalItems` instance. You can turn this off with the `removable` option in `uiSchema`: ```jsx const schema = { type: "array", items: { type: "string" } }; const uiSchema = { "ui:options": { removable: false } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## Multiple-choice list The default behavior for array fields is a list of text inputs with add/remove buttons. There are two alternative widgets for picking multiple elements from a list of choices. Typically this applies when a schema has an `enum` list for the `items` property of an `array` field, and the `uniqueItems` property set to `true`. Example: ```jsx const schema = { type: "array", title: "A multiple-choice list", items: { type: "string", enum: ["foo", "bar", "fuzz", "qux"], }, uniqueItems: true }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` By default, this will render a multiple select box. If you prefer a list of checkboxes, just set the uiSchema `ui:widget` directive to `checkboxes` for that field: ```js const schema = { type: "array", title: "A multiple-choice list", items: { type: "string", enum: ["foo", "bar", "fuzz", "qux"], }, uniqueItems: true }; const uiSchema = { "ui:widget": "checkboxes" }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## Specifying the minimum or maximum number of items Note that when an array property is marked as `required`, an empty array is considered valid. If the array needs to be populated, you can specify the minimum number of items using the `minItems` property. Example: ```jsx const schema = { type: "array", minItems: 2, title: "A multiple-choice list", items: { type: "string", enum: ["foo", "bar", "fuzz", "qux"], }, uniqueItems: true }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` You can also specify the maximum number of items in an array using the `maxItems` property. ## Inline checkboxes By default, checkboxes are stacked. If you prefer them inline, set the `inline` property to `true`: ```js const schema = { type: "array", minItems: 2, title: "A multiple-choice list", items: { type: "string", enum: ["foo", "bar", "fuzz", "qux"], }, uniqueItems: true }; const uiSchema = { "ui:widget": "checkboxes", "ui:options": { inline: true } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ```��������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/usage/definitions.md��������0000664�0000000�0000000�00000001775�14467713645�0031623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Schema definitions and references This library partially supports [inline schema definition dereferencing](http://json-schema.org/draft/2019-09/json-schema-core.html#ref), which is Barbarian for *avoiding to copy and paste commonly used field schemas*: ```jsx const schema = { "definitions": { "address": { "type": "object", "properties": { "street_address": { "type": "string" }, "city": { "type": "string" }, "state": { "type": "string" } }, "required": ["street_address", "city", "state"] } }, "type": "object", "properties": { "billing_address": { "$ref": "#/definitions/address" }, "shipping_address": { "$ref": "#/definitions/address" } } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` Note that this library only supports local definition referencing. The value in the `$ref` keyword should be a [JSON Pointer](https://tools.ietf.org/html/rfc6901) in URI fragment identifier format. ���react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/usage/dependencies.md�������0000664�0000000�0000000�00000011011�14467713645�0031716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Dependencies react-jsonschema-form supports the `dependencies` keyword from an earlier draft of JSON Schema (note that this is not part of the latest JSON Schema spec, though). Dependencies can be used to create dynamic schemas that change fields based on what data is entered. ## Property dependencies This library supports conditionally making fields required based on the presence of other fields. ### Unidirectional In the following example the `billing_address` field will be required if `credit_card` is defined. ```jsx const schema = { "type": "object", "properties": { "name": { "type": "string" }, "credit_card": { "type": "number" }, "billing_address": { "type": "string" } }, "required": ["name"], "dependencies": { "credit_card": ["billing_address"] } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ### Bidirectional In the following example the `billing_address` field will be required if `credit_card` is defined and the `credit_card` field will be required if `billing_address` is defined, making them both required if either is defined. ```jsx const schema = { "type": "object", "properties": { "name": { "type": "string" }, "credit_card": { "type": "number" }, "billing_address": { "type": "string" } }, "required": ["name"], "dependencies": { "credit_card": ["billing_address"], "billing_address": ["credit_card"] } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` *(Sample schemas courtesy of the [Space Telescope Science Institute](https://spacetelescope.github.io/understanding-json-schema/reference/object.html#property-dependencies))* ## Schema dependencies This library also supports modifying portions of a schema based on form data. ### Conditional ```jsx const schema = { "type": "object", "properties": { "name": { "type": "string" }, "credit_card": { "type": "number" } }, "required": ["name"], "dependencies": { "credit_card": { "properties": { "billing_address": { "type": "string" } }, "required": ["billing_address"] } } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` In this example the `billing_address` field will be displayed in the form if `credit_card` is defined. *(Sample schemas courtesy of the [Space Telescope Science Institute](https://spacetelescope.github.io/understanding-json-schema/reference/object.html#schema-dependencies))* ### Dynamic The JSON Schema standard says that the dependency is triggered if the property is present. However, sometimes it's useful to have more sophisticated rules guiding the application of the dependency. For example, maybe you have three possible values for a field, and each one should lead to adding a different question. For this, we support a very restricted use of the `oneOf` keyword. ```jsx const schema = { "title": "Person", "type": "object", "properties": { "Do you have any pets?": { "type": "string", "enum": [ "No", "Yes: One", "Yes: More than one" ], "default": "No" } }, "required": [ "Do you have any pets?" ], "dependencies": { "Do you have any pets?": { "oneOf": [ { "properties": { "Do you have any pets?": { "enum": [ "No" ] } } }, { "properties": { "Do you have any pets?": { "enum": [ "Yes: One" ] }, "How old is your pet?": { "type": "number" } }, "required": [ "How old is your pet?" ] }, { "properties": { "Do you have any pets?": { "enum": [ "Yes: More than one" ] }, "Do you want to get rid of any?": { "type": "boolean" } }, "required": [ "Do you want to get rid of any?" ] } ] } } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` In this example the user is prompted with different follow-up questions dynamically based on their answer to the first question. In these examples, the "Do you have any pets?" question is validated against the corresponding property in each schema in the `oneOf` array. If exactly one matches, the rest of that schema is merged with the existing schema.�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/usage/index.mdx�������������0000664�0000000�0000000�00000000351�14467713645�0030574�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- title: Usage and Customization description: How to use react-jsonschema-form and customize your form behavior and appearance. --- import DocCardList from '@theme/DocCardList'; <p>{frontMatter.description}</p> <DocCardList />���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/usage/objects.md������������0000664�0000000�0000000�00000004656�14467713645�0030742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Objects ## Object properties Objects are defined with a type equal to `object` and properties specified in the `properties` keyword. ```jsx const schema = { "title": "My title", "description": "My description", "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "number" } } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Required properties You can specify which properties are required using the `required` attribute: ```jsx const schema = { "title": "My title", "description": "My description", "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "number" } }, "required": ["name"] }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Specifying property order Since the order of object properties in Javascript and JSON is not guaranteed, the `uiSchema` object spec allows you to define the order in which properties are rendered using the `ui:order` property: ```jsx const schema = { type: "object", properties: { foo: {type: "string"}, bar: {type: "string"} } }; const uiSchema = { "ui:order": ["bar", "foo"] }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` If a guaranteed fixed order is only important for some fields, you can insert a wildcard `"*"` item in your `ui:order` definition. All fields that are not referenced explicitly anywhere in the list will be rendered at that point: ```js const uiSchema = { "ui:order": ["bar", "*"] }; ``` ## Additional properties The `additionalProperties` keyword allows the user to add properties with arbitrary key names. Set this keyword equal to a schema object: ```jsx const schema = { "type": "object", "properties": { "name": { "type": "string" } }, "additionalProperties": { "type": "number", "enum": [1, 2, 3] } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` In this way, an add button for new properties is shown by default. You can also define `uiSchema` options for `additionalProperties` by setting the `additionalProperties` attribute in the `uiSchema`. ### `expandable` option You can turn support for `additionalProperties` off with the `expandable` option in `uiSchema`: ```js const uiSchema = { "ui:options": { expandable: false } }; ```����������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/usage/oneof.md��������������0000664�0000000�0000000�00000003400�14467713645�0030401�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# oneOf, anyOf, and allOf react-jsonschema-form supports custom widgets for oneOf, anyOf, and allOf. - A schema with `oneOf` is valid if *exactly one* of the subschemas is valid. - A schema with `anyOf` is valid if *at least one* of the subschemas is valid. - A schema with `allOf` is valid if *all* of the subschemas are valid. ## oneOf ```jsx const schema = { type: "object", oneOf: [ { properties: { lorem: { type: "string", }, }, required: ["lorem"], }, { properties: { ipsum: { type: "string", }, }, required: ["ipsum"], }, ], }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## anyOf ```jsx const schema = { type: "object", anyOf: [ { properties: { lorem: { type: "string", }, }, required: ["lorem"], }, { properties: { lorem: { type: "string", }, ipsum: { type: "string", }, } }, ], }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## allOf When `allOf` is specified in a schema, react-jsonschema-form uses the [json-schema-merge-allof](https://github.com/mokkabonna/json-schema-merge-allof) library to merge the specified subschemas to create a combined subschema that is valid. For example, the below schema evaluates to a combined subschema of `{type: "boolean"}`: ```jsx const schema = { title: "Field", allOf: [ { type: ["string", "boolean"] }, { type: "boolean" }, ], }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/usage/single.md�������������0000664�0000000�0000000�00000005630�14467713645�0030563�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Single fields The simplest example of a JSON Schema contains only a single field. The field type is determined by the `type` parameter. ## Field types The base field types in JSON Schema include: - `string` - `number` - `integer` - `boolean` - `null` Here is an example of a string field: ```jsx const schema = { type: "string" }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Titles and descriptions Fields can have titles and descriptions specified by the `title` keyword in the schema and `description` keyword in the schema, respectively. These two can also be overriden by the `ui:title` and `ui:description` keywords in the uiSchema. ```jsx const schema = { title: "My form", description: "My description", type: "string" }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Enumerated values All base schema types support the `enum` attribute, which restricts the user to select among a list of options. For example: ```jsx const schema = { type: "string", enum: ["one", "two", "three"] }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ### Custom labels for `enum` fields This library supports a custom [`enumNames`](https://github.com/rjsf-team/react-jsonschema-form/issues/57) property for `enum` fields, which, however is not JSON-Schema compliant (see below for a compliant approach). The `enumNames` property allows defining custom labels for each option of an `enum`: ```jsx const schema = { type: "number", enum: [1, 2, 3], enumNames: ["one", "two", "three"] }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` #### Alternative JSON-Schema compliant approach JSON Schema has an alternative approach to enumerations using `anyOf`; react-jsonschema-form supports it as well. ```jsx const schema = { "type": "number", "anyOf": [ { "type": "number", "title": "one", "enum": [ 1 ] }, { "type": "number", "title": "two", "enum": [ 2 ] }, { "type": "number", "title": "three", "enum": [ 3 ] } ] }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ### Disabled attribute for `enum` fields To disable an option, use the `ui:enumDisabled` property in the uiSchema. ```jsx const schema = { type: "boolean", enum: [true, false] }; const uiSchema={ "ui:enumDisabled": [true], }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## Nullable types JSON Schema supports specifying multiple types in an array; however, react-jsonschema-form only supports a restricted subset of this -- nullable types, in which an element is either a given type or equal to null. ```jsx const schema = { type: ["string", "null"] }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ��������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/usage/themes.md�������������0000664�0000000�0000000�00000003345�14467713645�0030570�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Themes By default, this library renders form fields and widgets leveraging the [Bootstrap](http://getbootstrap.com/) semantics, meaning that you must load the Bootstrap stylesheet on the page to view the form properly. You can use another theme by importing one of the packages listed below. ## Supported themes Theme Name | Status | Package Name / Link ---------- | ------- | ----------- Bootstrap 3 (default) | Published | `@rjsf/core` Bootstrap 4 | Published | `@rjsf/bootstrap-4` material-ui | Published | `@rjsf/material-ui` fluent-ui | Published | `@rjsf/fluent-ui` antd | Published | `@rjsf/antd` Semantic UI | Published | `@rjsf/semantic-ui` ## Using themes To use a theme from a package, just import the `<Form />` component from that package. For example, to use the material ui form, first install both `@rjsf/core` and `@rjsf/material-ui`. Then you can import the form by doing: ```js import Form from "@rjsf/material-ui"; ``` If you would like to contribute a theme with a new UI framework, please develop the theme using the `withTheme` component described in [Theme Customization](../advanced-customization/custom-themes.md) and make a PR! You can also use the uiSchema to add custom CSS class names to your form. ## Customizing with other frameworks The default theme is bootstrap 3. In order to use another theme, you must first install `@rjsf/core`. For example, to use the standard bootstrap 3 form, you can run: ```js import Form from "@rjsf/core"; ``` To use the material-ui form, you should first install both `@rjsf/core` and `@rjsf/material-ui`. Then, you can run: ```js import Form from "@rjsf/material-ui"; ``` For more information on how to create a custom theme, see documentation on the `withTheme` component. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/usage/validation.md���������0000664�0000000�0000000�00000022015�14467713645�0031430�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Validation When the form is submitted, the form data is validated to conform to the given JSON schema; this library uses the [ajv](https://github.com/ajv-validator/ajv) validator by default. ## Live validation By default, form data are only validated when the form is submitted or when a new `formData` prop is passed to the `Form` component. You can enable live form data validation by passing a `liveValidate` prop to the `Form` component, and set it to `true`. Then, every time a value changes within the form data tree (e.g. the user entering a character in a field), a validation operation is performed, and the validation results are reflected into the form state. Be warned that this is an expensive strategy, with possibly strong impact on performances. ```jsx const schema = { type: ["string"], const: "test" }; const formData = "a"; render(( <Form schema={schema} formData={formData} liveValidate /> ), document.getElementById("app")); ``` ## HTML5 Validation By default, the form uses HTML5 validation. This may cause unintuitive results because the HTML5 validation errors (such as when a field is `required`) may be displayed before the form is submitted, and thus these errors will display differently from the react-jsonschema-form validation errors. You can turn off HTML validation by setting the `noHtml5Validate` to `true`. ```jsx const schema = { type: "object", properties: { name: { type: "string", required: true } } }; render(( <Form schema={schema} noHtml5Validate /> ), document.getElementById("app")); ``` ## Custom validation rules Form data is always validated against the JSON schema. But it is possible to define your own custom validation rules. This is especially useful when the validation depends on several interdependent fields. ```jsx function validate(formData, errors) { if (formData.pass1 !== formData.pass2) { errors.pass2.addError("Passwords don't match"); } return errors; } const schema = { type: "object", properties: { pass1: {type: "string", minLength: 3}, pass2: {type: "string", minLength: 3}, } }; render(( <Form schema={schema} validate={validate} /> ), document.getElementById("app")); ``` > Notes: > - The `validate()` function must **always** return the `errors` object > received as second argument. > - The `validate()` function is called **after** the JSON schema validation. ## Custom error messages Validation error messages are provided by the JSON Schema validation by default. If you need to change these messages or make any other modifications to the errors from the JSON Schema validation, you can define a transform function that receives the list of JSON Schema errors and returns a new list. ```jsx function transformErrors(errors) { return errors.map(error => { if (error.name === "pattern") { error.message = "Only digits are allowed" } return error; }); } const schema = { type: "object", properties: { onlyNumbersString: {type: "string", pattern: "^\\d*$"}, } }; render(( <Form schema={schema} transformErrors={transformErrors} /> ), document.getElementById("app")); ``` > Notes: > - The `transformErrors()` function must return the list of errors. Modifying the list in place without returning it will result in an error. Each element in the `errors` list passed to `transformErrors` has the following properties: - `name`: name of the error, for example, "required" or "minLength" - `message`: message, for example, "is a required property" or "should NOT be shorter than 3 characters" - `params`: an object with the error params returned by ajv ([see doc](https://github.com/ajv-validator/ajv/tree/6a671057ea6aae690b5967ee26a0ddf8452c6297#error-parameters) for more info). - `property`: a string in Javascript property accessor notation to the data path of the field with the error. For example, `.name` or `['first-name']`. - `stack`: full error name, for example ".name is a required property". - `schemaPath`: JSON pointer to the schema of the keyword that failed validation. For example, `#/fields/firstName/required`. (Note: this may sometimes be wrong due to a [bug in ajv](https://github.com/ajv-validator/ajv/issues/512)). ## Error List Display To take control over how the form errors are displayed, you can define an *error list template* for your form. This list is the form global error list that appears at the top of your forms. An error list template is basically a React stateless component being passed errors as props so you can render them as you like: ```jsx function ErrorListTemplate(props) { const { errors } = props; return ( <div> <h2>Custom error list</h2> <ul> {errors.map(error => ( <li key={error.stack}> {error.stack} </li> ))} </ul> </div> ); } const schema = { type: "string", const: "test" }; render(( <Form schema={schema} showErrorList={true} formData={""} liveValidate ErrorList={ErrorListTemplate} /> ), document.getElementById("app")); ``` > Note: Your custom `ErrorList` template will only render when `showErrorList` is `true`. The following props are passed to `ErrorList` - `errors`: An array of the errors. - `errorSchema`: The errorSchema constructed by `Form`. - `schema`: The schema that was passed to `Form`. - `uiSchema`: The uiSchema that was passed to `Form`. - `formContext`: The `formContext` object that you passed to Form. ## The case of empty strings When a text input is empty, the field in form data is set to `undefined`. String fields that use `enum` and a `select` widget will have an empty option at the top of the options list that when selected will result in the field being `undefined`. One consequence of this is that if you have an empty string in your `enum` array, selecting that option in the `select` input will cause the field to be set to `undefined`, not an empty string. If you want to have the field set to a default value when empty you can provide a `ui:emptyValue` field in the `uiSchema` object. ## Custom meta schema validation To have your schemas validated against any other meta schema than draft-07 (the current version of [JSON Schema](http://json-schema.org/)), make sure your schema has a `$schema` attribute that enables the validator to use the correct meta schema. For example: ```json { "$schema": "http://json-schema.org/draft-04/schema#", ... } ``` Note that react-jsonschema-form only supports the latest version of JSON Schema, draft-07, by default. To support additional meta schemas pass them through the `additionalMetaSchemas` prop to the `Form` component. ### additionalMetaSchemas The `additionalMetaSchemas` prop allows you to validate the form data against one (or more than one) JSON Schema meta schema, for example, JSON Schema draft-04. You can import a meta schema as follows: ```jsx const metaSchemaDraft04 = require("ajv/lib/refs/json-schema-draft-04.json"); ``` In this example `schema` passed as props to `Form` component can be validated against draft-07 (default) and by draft-04 (added), depending on the value of `$schema` attribute. ```jsx const schema = { "$schema": "http://json-schema.org/draft-04/schema#", type: "string" }; return (<Form schema={schema} additionalMetaSchemas={[metaSchemaDraft04]} />); ``` ## customFormats [Pre-defined semantic formats](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.7) are limited. react-jsonschema-form adds two formats, `color` and `data-url`, to support certain [alternative widgets](../usage/widgets.md). You can add formats of your own through the `customFormats` prop to your `Form` component: ```jsx const schema = { type: 'string', format: 'phone-us' }; const customFormats = { 'phone-us': /\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{4}$/ }; render(( <Form schema={schema} customFormats={customFormats}/> ), document.getElementById("app")); ``` Format values can be anything AJV’s [`addFormat` method](https://github.com/ajv-validator/ajv/tree/6a671057ea6aae690b5967ee26a0ddf8452c6297#addformatstring-name-stringregexpfunctionobject-format---ajv) accepts. ## Async validation Handling async errors is an important part of many applications. Support for this is added in the form of the `extraErrors` prop. For example, a request could be made to some backend when the user submits the form. If that request fails, the errors returned by the backend should be formatted like in the following example. ```jsx const schema = { type: "object", properties: { foo: { type: "string", }, candy: { type: "object", properties: { bar: { type: "string", } } } } }; const extraErrors = { foo: { __errors: ["some error that got added as a prop"], }, candy: { bar: { __errors: ["some error that got added as a prop"], } } }; render(( <Form schema={schema} extraErrors={extraErrors} /> ), document.getElementById("app")); ``` An important note is that these errors are "display only" and will not block the user from submitting the form again. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-3.2.1/usage/widgets.md������������0000664�0000000�0000000�00000012635�14467713645�0030753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Widgets The uiSchema `ui:widget` property tells the form which UI widget should be used to render a field. Example: ```jsx const schema = { type: "object", properties: { done: { type: "boolean" } } }; const uiSchema =  { done: { "ui:widget": "radio" // could also be "select" } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` Here's a list of supported alternative widgets for different JSON Schema data types: ## For `boolean` fields * `radio`: a radio button group with `true` and `false` as selectable values; * `select`: a select box with `true` and `false` as options; * by default, a checkbox is used > Note: To set the labels for a boolean field, instead of using `true` and `false` you can set `enumNames` in your schema. Note that `enumNames` belongs in your `schema`, not the `uiSchema`, and the order is always `[true, false]`. ## For `string` fields * `textarea`: a `textarea` element is used; * `password`: an `input[type=password]` element is used; * `color`: an `input[type=color]` element is used; * by default, a regular `input[type=text]` element is used. ### String formats The built-in string field also supports the JSON Schema `format` property, and will render an appropriate widget by default for the following string formats: - `email`: An `input[type=email]` element is used; - `uri`: An `input[type=url]` element is used; - `data-url`: By default, an `input[type=file]` element is used; in case the string is part of an array, multiple files will be handled automatically (see [File widgets](#file-widgets)). - `date`: By default, an `input[type=date]` element is used; - `date-time`: By default, an `input[type=datetime-local]` element is used. ![](https://i.imgur.com/xqu6Lcp.png) Please note that, even though they are standardized, `datetime-local` and `date` input elements are not yet supported by Firefox and IE. If you plan on targeting these platforms, two alternative widgets are available: - `alt-datetime`: Six `select` elements are used to select the year, the month, the day, the hour, the minute and the second; - `alt-date`: Three `select` elements are used to select the year, month and the day. > **Firefox 57 - 66**: Firefox partially supporting `date` and `time` input types, but not `datetime-local`, `month` or `week` ![](https://i.imgur.com/VF5tY60.png) You can customize the list of years displayed in the `year` dropdown by providing a ``yearsRange`` property to ``ui:options`` in your uiSchema. Its also possible to remove the `Now` and `Clear` buttons with the `hideNowButton` and `hideClearButton` options. ```jsx const schema = { type: "string" }; const uiSchema = { "ui:widget": "alt-datetime", "ui:options": { yearsRange: [1980, 2030], hideNowButton: true, hideClearButton: true, } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## For `number` and `integer` fields * `updown`: an `input[type=number]` updown selector; * `range`: an `input[type=range]` slider; * `radio`: a radio button group with enum values. This can only be used when `enum` values are specified for this input. * By default, a regular `input[type=text]` element is used. > Note: If JSON Schema's `minimum`, `maximum` and `multipleOf` values are defined, the `min`, `max` and `step` input attributes values will take those values. ## Hidden widgets It's possible to use a hidden widget for a field by setting its `ui:widget` uiSchema directive to `hidden`: ```jsx const schema = { type: "object", properties: { foo: {type: "boolean"} } }; const uiSchema = { foo: {"ui:widget": "hidden"} }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` Notes: - Hiding widgets is only supported for `boolean`, `string`, `number` and `integer` schema types; - A hidden widget takes its value from the `formData` prop. ## File widgets This library supports a limited form of `input[type=file]` widgets, in the sense that it will propagate file contents to form data state as [data-url](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs)s. There are two ways to use file widgets. 1. By declaring a `string` json schema type along a `data-url` [format](#string-formats): ```jsx const schema = { type: "string", format: "data-url", }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` 2. By specifying a `ui:widget` field uiSchema directive as `file`: ```js const schema = { type: "string", }; const uiSchema = { "ui:widget": "file", }; ``` ### Multiple files Multiple files selectors are supported by defining an array of strings having `data-url` as a format: ```js const schema = { type: "array", items: { type: "string", format: "data-url", } }; ``` > Note that storing large dataURIs into form state might slow rendering. ### File widget input ref The included `FileWidget` exposes a reference to the `<input type="file" />` element node as an `inputRef` component property. This allows you to programmatically trigger the browser's file selector, which can be used in a custom file widget. ### `accept` option You can use the accept attribute to specify a filter for what file types the user can upload: ```jsx const schema = { type: "string", format: "data-url" }; const uiSchema = { "ui:options": { accept: ".pdf" } }; ``` ���������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/����������������������������0000775�0000000�0000000�00000000000�14467713645�0025653�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/00-quickstart.md������������0000664�0000000�0000000�00000006373�14467713645�0030615�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Quickstart Let's walk through setup of a form after installing the dependency properly. ## Form schema First, specify a schema using the [JSON Schema specification](https://json-schema.org/). The below schema renders a single string field: ```jsx const schema = { title: "Test form", type: "string" }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` You can also render an object with multiple fields with the below schema: ```jsx const schema = { title: "Test form", type: "object", properties: { name: { type: "string" }, age: { type: "number" } } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` For more information and examples of JSON Schema properties that this library supports, see [Using JSON Schema](./usage/single.md). ## Form uiSchema The uiSchema is used to add more customization to the form's look and feel. Use the `classNames` attribute of the uiSchema to add a custom CSS class name to the form: ```jsx const schema = { title: "Test form", type: "string" }; const uiSchema = { classNames: "custom-css-class" }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` To customize object fields in the uiSchema, the structure of the uiSchema should be `{key: value}`, where `key` is the property key and `value` is an object with the uiSchema configuration for that particular property. For example: ```jsx const schema = { title: "Test form", type: "object", properties: { name: { type: "string" }, age: { type: "number" } } }; const uiSchema = { name: { classNames: "custom-class-name" }, age: { classNames: "custom-class-age" } } render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Form initialization Often you'll want to prefill a form with existing data; this is done by passing a `formData` prop object matching the schema: ```jsx const schema = { type: "object", properties: { title: { type: "string" }, done: { type: "boolean" } } }; const formData = { title: "First task", done: true }; render(( <Form schema={schema} formData={formData} /> ), document.getElementById("app")); ``` > Note: If your form has a single field, pass a single value to `formData`. ex: `formData="Charlie"` > WARNING: If you have situations where your parent component can re-render, make sure you listen to the `onChange` event and update the data you pass to the `formData` attribute. ### Form event handlers You can use event handlers such as `onChange`, `onError`, `onSubmit`, `onFocus`, and `onBlur` on the `<Form />` component; see the [Form Props Reference](./api-reference/form-props.md) for more details. ### Controlled component By default, `<Form />` is an [uncontrolled component](https://reactjs.org/docs/uncontrolled-components.html). To make it a controlled component, use the `onChange` and `formData` props as in the below example: ```jsx const App = () => { const [formData, setFormData] = React.useState(null); return (<Form schema={{type: "string"}} formData={formData} onChange={e => setFormData(e.formData)} />); }; render(( <App /> ), document.getElementById("app")); ``` ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/advanced-customization/�����0000775�0000000�0000000�00000000000�14467713645�0032326�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������custom-templates.md���������������������������������������������������������������������������������0000664�0000000�0000000�00000024610�14467713645�0036102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/advanced-customization�������������������������������������������������������������������������# Custom Templates This is an advanced feature that lets you customize even more aspects of the form: _ | Custom Field | Custom Template | Custom Widget --|---------- | ------------- | ---- **What it does** | Overrides all behaviour | Overrides just the layout (not behaviour) | Overrides just the input box (not layout, labels, or help, or validation) **Usage** | Global or per-field | Global or per-field | Global or per-field **Global Example** | `<Form fields={MyCustomField} />` | `<Form ArrayFieldTemplate={MyArrayTemplate} />` | `<Form widgets={MyCustomWidget} />` **Per-Field Example** | `"ui:field": MyCustomField` | `"ui:ArrayFieldTemplate": MyArrayTemplate` | `"ui:widget":MyCustomWidget` **Documentation** | [Custom Fields](custom-widgets-fields.md) | [FieldTemplate](#FieldTemplate) / [ArrayFieldTemplate](#ArrayFieldTemplate) / [ObjectFieldTemplate](#ObjectFieldTemplate) | [Custom Widgets](custom-widgets-fields.md) ## ArrayFieldTemplate You can use an `ArrayFieldTemplate` to customize how your arrays are rendered. This allows you to customize your array, and each element in the array. You can also customize arrays by specifying a widget in the relevant `ui:widget` schema, more details over on [Custom Widgets](../usage/arrays.md#custom-widgets). ```jsx const schema = { type: "array", items: { type: "string" } }; function ArrayFieldTemplate(props) { return ( <div> {props.items.map(element => element.children)} {props.canAdd && <button type="button" onClick={props.onAddClick}></button>} </div> ); } render(( <Form schema={schema} ArrayFieldTemplate={ArrayFieldTemplate} /> ), document.getElementById("app")); ``` You also can provide your own field template to a uiSchema by specifying a `ui:ArrayFieldTemplate` property. ```js const uiSchema = { "ui:ArrayFieldTemplate": ArrayFieldTemplate } ``` Please see [customArray.js](https://github.com/rjsf-team/react-jsonschema-form/blob/4542cd254ffdc6dfaf55e8c9f6f17dc900d0d041/packages/playground/src/samples/customArray.js) for another example. The following props are passed to each `ArrayFieldTemplate`: - `DescriptionField`: The `DescriptionField` from the registry (in case you wanted to utilize it) - `TitleField`: The `TitleField` from the registry (in case you wanted to utilize it). - `canAdd`: A boolean value stating whether new elements can be added to the array. - `className`: The className string. - `disabled`: A boolean value stating if the array is disabled. - `idSchema`: Object - `items`: An array of objects representing the items in the array. Each of the items represent a child with properties described below. - `onAddClick: (event?) => void`: A function that adds a new item to the array. - `readonly`: A boolean value stating if the array is read-only. - `required`: A boolean value stating if the array is required. - `schema`: The schema object for this array. - `uiSchema`: The uiSchema object for this array field. - `title`: A string value containing the title for the array. - `formContext`: The `formContext` object that you passed to Form. - `formData`: The formData for this array. - `registry`: The `registry` object. The following props are part of each element in `items`: - `children`: The html for the item's content. - `className`: The className string. - `disabled`: A boolean value stating if the array item is disabled. - `hasMoveDown`: A boolean value stating whether the array item can be moved down. - `hasMoveUp`: A boolean value stating whether the array item can be moved up. - `hasRemove`: A boolean value stating whether the array item can be removed. - `hasToolbar`: A boolean value stating whether the array item has a toolbar. - `index`: A number stating the index the array item occurs in `items`. - `key`: A stable, unique key for the array item. - `onAddIndexClick: (index) => (event?) => void`: Returns a function that adds a new item at `index`. - `onDropIndexClick: (index) => (event?) => void`: Returns a function that removes the item at `index`. - `onReorderClick: (index, newIndex) => (event?) => void`: Returns a function that swaps the items at `index` with `newIndex`. - `readonly`: A boolean value stating if the array item is read-only. > Note: Array and object field templates are always rendered inside of the FieldTemplate. To fully customize an array field template, you may need to specify both `ui:FieldTemplate` and `ui:ArrayFieldTemplate`. ## FieldTemplate To take control over the inner organization of each field (each form row), you can define a *field template* for your form. A field template is basically a React stateless component being passed field-related props, allowing you to structure your form row as you like. ```jsx const schema = { type: "string" }; function CustomFieldTemplate(props) { const {id, classNames, label, help, required, description, errors, children} = props; return ( <div className={classNames}> <label htmlFor={id}>{label}{required ? "*" : null}</label> {description} {children} {errors} {help} </div> ); } render(( <Form schema={schema} FieldTemplate={CustomFieldTemplate} /> ), document.getElementById("app")); ``` You also can provide your own field template to a uiSchema by specifying a `ui:FieldTemplate` property. ```js const uiSchema = { "ui:FieldTemplate": CustomFieldTemplate } ``` If you want to handle the rendering of each element yourself, you can use the props `rawHelp`, `rawDescription` and `rawErrors`. The following props are passed to a custom field template component: - `id`: The id of the field in the hierarchy. You can use it to render a label targeting the wrapped widget. - `classNames`: A string containing the base Bootstrap CSS classes, merged with any [custom ones](#custom-css-class-names) defined in your uiSchema. - `label`: The computed label for this field, as a string. - `description`: A component instance rendering the field description, if one is defined (this will use any [custom `DescriptionField`](#custom-descriptions) defined). - `rawDescription`: A string containing any `ui:description` uiSchema directive defined. - `children`: The field or widget component instance for this field row. - `errors`: A component instance listing any encountered errors for this field. - `rawErrors`: An array of strings listing all generated error messages from encountered errors for this field. - `help`: A component instance rendering any `ui:help` uiSchema directive defined. - `rawHelp`: A string containing any `ui:help` uiSchema directive defined. **NOTE:** `rawHelp` will be `undefined` if passed `ui:help` is a React component instead of a string. - `hidden`: A boolean value stating if the field should be hidden. - `required`: A boolean value stating if the field is required. - `readonly`: A boolean value stating if the field is read-only. - `hideError`: A boolean value stating if the field is hiding its errors - `disabled`: A boolean value stating if the field is disabled. - `displayLabel`: A boolean value stating if the label should be rendered or not. This is useful for nested fields in arrays where you don't want to clutter the UI. - `fields`: An array containing all Form's fields including your [custom fields](#custom-field-components) and the built-in fields. - `schema`: The schema object for this field. - `uiSchema`: The uiSchema object for this field. - `onChange`: The value change event handler; Can be called with a new value to change the value for this field. - `formContext`: The `formContext` object that you passed to Form. - `formData`: The formData for this field. - `registry`: The `registry` object. > Note: you can only define a single global field template for a form, but you can set individual field templates per property using `"ui:FieldTemplate"`. ## ObjectFieldTemplate ```jsx const schema = { type: "object", title: "Object title", description: "Object description", properties: { name: { type: "string" }, age: { type: "number" } } }; function ObjectFieldTemplate(props) { return ( <div> {props.title} {props.description} {props.properties.map(element => <div className="property-wrapper">{element.content}</div>)} </div> ); } render(( <Form schema={schema} ObjectFieldTemplate={ObjectFieldTemplate} /> ), document.getElementById("app")); ``` You also can provide your own field template to a uiSchema by specifying a `ui:ObjectFieldTemplate` property. ```js const uiSchema = { "ui:ObjectFieldTemplate": ObjectFieldTemplate }; ``` Please see [customObject.js](https://github.com/rjsf-team/react-jsonschema-form/blob/4542cd254ffdc6dfaf55e8c9f6f17dc900d0d041/packages/playground/src/samples/customObject.js) for a better example. The following props are passed to each `ObjectFieldTemplate`: - `DescriptionField`: The `DescriptionField` from the registry (in case you wanted to utilize it) - `TitleField`: The `TitleField` from the registry (in case you wanted to utilize it). - `title`: A string value containing the title for the object. - `description`: A string value containing the description for the object. - `disabled`: A boolean value stating if the object is disabled. - `properties`: An array of object representing the properties in the array. Each of the properties represent a child with properties described below. - `onAddClick: (schema: JSONSchema7) => () => void`: Returns a function that adds a new property to the object (to be used with additionalProperties) - `readonly`: A boolean value stating if the object is read-only. - `required`: A boolean value stating if the object is required. - `schema`: The schema object for this object. - `uiSchema`: The uiSchema object for this object field. - `idSchema`: An object containing the id for this object & ids for it's properties. - `formData`: The form data for the object. - `formContext`: The `formContext` object that you passed to Form. - `registry`: The `registry` object. The following props are part of each element in `properties`: - `content`: The html for the property's content. - `name`: A string representing the property name. - `disabled`: A boolean value stating if the object property is disabled. - `readonly`: A boolean value stating if the property is read-only. - `hidden`: A boolean value stating if the property should be hidden. > Note: Array and object field templates are always rendered inside of the FieldTemplate. To fully customize an object field template, you may need to specify both `ui:FieldTemplate` and `ui:ObjectFieldTemplate`. ������������������������������������������������������������������������������������������������������������������������custom-themes.md������������������������������������������������������������������������������������0000664�0000000�0000000�00000007234�14467713645�0035374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/advanced-customization�������������������������������������������������������������������������# Custom Themes The `withTheme` component provides an easy way to extend the functionality of react-jsonschema-form by passing in a theme object that defines custom/overridden widgets and fields, as well as any of the other possible properties of the standard rjsf `Form` component. This theme-defining object is passed as the only parameter to the HOC (`withTheme(ThemeObj)`), and the HOC will return a themed-component which you use instead of the standard `Form` component. ## Usage ```jsx import React, { Component } from 'react'; import { withTheme } from '@rjsf/core'; const theme = { widgets: {test: () => (<div>test</div>) } }; const ThemedForm = withTheme(theme); const Demo = () => ( <ThemedForm schema={schema} uiSchema={uiSchema} /> ); ``` ## Theme object properties The Theme object consists of the same properties as the rjsf `Form` component (such as **widgets** and **fields**). The themed-Form component merges together any theme-specific **widgets** and **fields** with the default **widgets** and **fields**. For instance, providing a single widget in **widgets** will merge this widget with all the default widgets of the rjsf `Form` component, but overrides the default if the theme's widget's name matches the default widget's name. Thus, for each default widget or field not specified/overridden, the themed-form will rely on the defaults from the rjsf `Form`. Note that you are not required to pass in either custom **widgets** or **fields** when using the custom-themed HOC component; you can make the essentially redefine the default Form by simply doing `const Form = withTheme({});`. ### Widgets and fields **widgets** and **fields** should be in the same format as shown [here](/advanced-customization/#custom-widgets-and-fields). Example theme with custom widget: ```jsx const MyCustomWidget = (props) => { return ( <input type="text" className="custom" value={props.value} required={props.required} onChange={(event) => props.onChange(event.target.value)} /> ); }; const myWidgets = { myCustomWidget: MyCustomWidget }; const ThemeObject = {widgets: myWidgets}; export default ThemeObject; ``` The above can be similarly done for **fields**. ### Templates Each template should be passed directly into the theme object just as you would into the rjsf Form component. Here is an example of how to use a custom [ArrayFieldTemplate](/advanced-customization/#array-field-template) and [ErrorListTemplate](/advanced-customization/#error-list-template) in the theme object: ```jsx function MyArrayFieldTemplate(props) { return ( <div> {props.items.map(element => element.children)} {props.canAdd && <button type="button" onClick={props.onAddClick}></button>} </div> ); } function MyErrorListTemplate(props) { const {errors} = props; return ( <ul> {errors.map(error => ( <li key={error.stack}> {error.stack} </li> ))} </ul> ); } const ThemeObject = { ArrayFieldTemplate: MyArrayFieldTemplate, ErrorList: MyErrorListTemplate, widgets: myWidgets }; export default ThemeObject; ``` ## Overriding other Form props Just as the theme can override **widgets**, **fields**, any of the field templates, and set default values to properties like **showErrorList**, you can do the same with the instance of the withTheme() Form component. ```jsx const ThemeObject = { ArrayFieldTemplate: MyArrayFieldTemplate, fields: myFields, showErrorList: false, widgets: myWidgets }; ``` Thus, the user has higher priority than the withTheme HOC, and the theme has higher priority than the default values of the rjsf Form component (**User** > **Theme** > **Defaults**). ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������custom-widgets-fields.md����������������������������������������������������������������������������0000664�0000000�0000000�00000024655�14467713645�0037027�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/advanced-customization�������������������������������������������������������������������������# Custom Widgets and Fields The API allows to specify your own custom *widget* and *field* components: - A *widget* represents a HTML tag for the user to enter data, eg. `input`, `select`, etc. - A *field* usually wraps one or more widgets and most often handles internal field state; think of a field as a form row, including the labels. ## Customizing the default fields and widgets You can override any default field and widget, including the internal widgets like the `CheckboxWidget` that `ObjectField` renders for boolean values. You can override any field and widget just by providing the customized fields/widgets in the `fields` and `widgets` props: ```jsx const schema = { type: "boolean", default: true }; const uiSchema = { "ui:widget": "checkbox" }; const CustomCheckbox = function(props) { return ( <button id="custom" className={props.value ? "checked" : "unchecked"} onClick={() => props.onChange(!props.value)}> {String(props.value)} </button> ); }; const widgets = { CheckboxWidget: CustomCheckbox }; render(( <Form schema={schema} uiSchema={uiSchema} widgets={widgets} /> ), document.getElementById("app")); ``` This allows you to create a reusable customized form class with your custom fields and widgets: ```jsx const customFields = {StringField: CustomString}; const customWidgets = {CheckboxWidget: CustomCheckbox}; function MyForm(props) { return <Form fields={customFields} widgets={customWidgets} {...props} />; } ``` The default fields you can override are: - `ArrayField` - `BooleanField` - `DescriptionField` - `OneOfField` - `AnyOfField` - `NullField` - `NumberField` - `ObjectField` - `SchemaField` - `StringField` - `TitleField` - `UnsupportedField` The default widgets you can override are: - `AltDateTimeWidget` - `AltDateWidget` - `CheckboxesWidget` - `CheckboxWidget` - `ColorWidget` - `DateTimeWidget` - `DateWidget` - `EmailWidget` - `FileWidget` - `HiddenWidget` - `PasswordWidget` - `RadioWidget` - `RangeWidget` - `SelectWidget` - `TextareaWidget` - `TextWidget` - `UpDownWidget` - `URLWidget` ## Adding your own custom widgets You can provide your own custom widgets to a uiSchema for the following json data types: - `string` - `number` - `integer` - `boolean` - `array` ```jsx const schema = { type: "string" }; const uiSchema = { "ui:widget": (props) => { return ( <input type="text" className="custom" value={props.value} required={props.required} onChange={(event) => props.onChange(event.target.value)} /> ); } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` The following props are passed to custom widget components: - `id`: The generated id for this widget; - `schema`: The JSONSchema subschema object for this widget; - `uiSchema`: The uiSchema for this widget; - `value`: The current value for this widget; - `placeholder`: the placeholder for the field, if any; - `required`: The required status of this widget; - `disabled`: `true` if the widget is disabled; - `readonly`: `true` if the widget is read-only; - `autofocus`: `true` if the widget should autofocus; - `onChange`: The value change event handler; call it with the new value every time it changes; - `onKeyChange`: The key change event handler (only called for fields with `additionalProperties`); pass the new value every time it changes; - `onBlur`: The input blur event handler; call it with the the widget id and value; - `onFocus`: The input focus event handler; call it with the the widget id and value; - `options`: A map of options passed as a prop to the component (see [Custom widget options](#custom-widget-options)). - `options.enumOptions`: For enum fields, this property contains the list of options for the enum as an array of { label, value } objects. If the enum is defined using the oneOf/anyOf syntax, the entire schema object for each option is appended onto the { schema, label, value } object. - `formContext`: The `formContext` object that you passed to Form. - `rawErrors`: An array of strings listing all generated error messages from encountered errors for this widget. - `registry`: A [registry](#the-registry-object) object (read next). ### Custom component registration Alternatively, you can register them all at once by passing the `widgets` prop to the `Form` component, and reference their identifier from the `uiSchema`: ```jsx const MyCustomWidget = (props) => { return ( <input type="text" className="custom" value={props.value} required={props.required} onChange={(event) => props.onChange(event.target.value)} /> ); }; const widgets = { myCustomWidget: MyCustomWidget }; const schema = { type: "string" }; const uiSchema = { "ui:widget": "myCustomWidget" } render(( <Form schema={schema} uiSchema={uiSchema} widgets={widgets} /> ), document.getElementById("app")); ``` This is useful if you expose the `uiSchema` as pure JSON, which can't carry functions. ### Custom widget options If you need to pass options to your custom widget, you can add a `ui:options` object containing those properties. If the widget has `defaultProps`, the options will be merged with the (optional) options object from `defaultProps`: ```jsx const schema = { type: "string" }; function MyCustomWidget(props) { const {options} = props; const {color, backgroundColor} = options; return <input style={{color, backgroundColor}} />; } MyCustomWidget.defaultProps = { options: { color: "red" } }; const uiSchema = { "ui:widget": MyCustomWidget, "ui:options": { backgroundColor: "yellow" } }; // renders red on yellow input render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` > Note: This also applies to [registered custom components](#custom-component-registration). > Note: Since v0.41.0, the `ui:widget` object API, where a widget and options were specified with `"ui:widget": {component, options}` shape, is deprecated. It will be removed in a future release. ### Customizing widgets text input All the widgets that render a text input use the `BaseInput` component internally. If you need to customize all text inputs without customizing all widgets individually, you can provide a `BaseInput` component in the `widgets` property of `Form` (see [Custom component registration](#custom-component-registration)). ## Custom field components You can provide your own field components to a uiSchema for basically any json schema data type, by specifying a `ui:field` property. For example, let's create and register a dumb `geo` component handling a *latitude* and a *longitude*: ```jsx const schema = { type: "object", required: ["lat", "lon"], properties: { lat: {type: "number"}, lon: {type: "number"} } }; // Define a custom component for handling the root position object class GeoPosition extends React.Component { constructor(props) { super(props); this.state = {...props.formData}; } onChange(name) { return (event) => { this.setState({ [name]: parseFloat(event.target.value) }, () => this.props.onChange(this.state)); }; } render() { const {lat, lon} = this.state; return ( <div> <input type="number" value={lat} onChange={this.onChange("lat")} /> <input type="number" value={lon} onChange={this.onChange("lon")} /> </div> ); } } // Define the custom field component to use for the root object const uiSchema = {"ui:field": "geo"}; // Define the custom field components to register; here our "geo" // custom field component const fields = {geo: GeoPosition}; // Render the form with all the properties we just defined passed // as props render(( <Form schema={schema} uiSchema={uiSchema} fields={fields} /> ), document.getElementById("app")); ``` > Note: Registered fields can be reused across the entire schema. ### Field props A field component will always be passed the following props: - `schema`: The JSON schema for this field; - `uiSchema`: The [uiSchema](#the-uischema-object) for this field; - `idSchema`: The tree of unique ids for every child field; - `formData`: The data for this field; - `errorSchema`: The tree of errors for this field and its children; - `registry`: A [registry](#the-registry-object) object (read next). - `formContext`: A [formContext](#the-formcontext-object) object (read next). ## The `registry` object The `registry` is an object containing the registered custom fields and widgets as well as the root schema definitions. - `fields`: All fields, including [custom registered fields](#custom-field-components), if any; - `widgets`: All widgets, including, [custom registered widgets](#custom-widget-components), if any; - `rootSchema`: The root schema, which can contain referenced [definitions](#schema-definitions-and-references); - `formContext`: The [formContext](#the-formcontext-object) object; - `definitions` (deprecated since v2): Equal to `rootSchema.definitions`. The registry is passed down the component tree, so you can access it from your custom field, custom widget, and `SchemaField` components. ### Custom SchemaField **Warning:** This is a powerful feature as you can override the whole form behavior and easily mess it up. Handle with care. You can provide your own implementation of the `SchemaField` base React component for rendering any JSONSchema field type, including objects and arrays. This is useful when you want to augment a given field type with supplementary powers. To proceed so, pass a `fields` object having a `SchemaField` property to your `Form` component; here's an example: ```jsx const CustomSchemaField = function(props) { return ( <div id="custom"> <p>Yeah, I'm pretty dumb.</p> <div>My props are: {JSON.stringify(props)}</div> </div> ); }; const fields = { SchemaField: CustomSchemaField }; const schema = { type: "string" }; render(( <Form schema={schema} fields={fields} /> ), document.getElementById("app")); ``` If you're curious how this could ever be useful, have a look at the [Kinto formbuilder](https://github.com/Kinto/formbuilder) repository to see how it's used to provide editing capabilities to any form field. Props passed to a custom SchemaField are the same as [the ones passed to a custom field](#field-props). NOTE: If you are using the `material-ui` theme and are considering customizing a widget or a field, checkout this [guide](material-ui/customizing-material-ui.md). �����������������������������������������������������������������������������������index.mdx�������������������������������������������������������������������������������������������0000664�0000000�0000000�00000000326�14467713645�0034071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/advanced-customization�������������������������������������������������������������������������--- title: Advanced Customization description: Advanced customization documentation for react-jsonschema-form. --- import DocCardList from '@theme/DocCardList'; <p>{frontMatter.description}</p> <DocCardList />����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������internals.md����������������������������������������������������������������������������������������0000664�0000000�0000000�00000012710�14467713645�0034571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/advanced-customization�������������������������������������������������������������������������# Internals Miscellaneous internals of react-jsonschema-form are listed here. ## JSON Schema supporting status This component follows [JSON Schema](http://json-schema.org/documentation.html) specs. We currently support JSON Schema-07 by default, but we also support other JSON schema versions through the [custom schema validation](../usage/validation/#custom-schema-validation) feature. Due to the limitation of form widgets, there are some exceptions as follows: * `additionalItems` keyword for arrays This keyword works when `items` is an array. `additionalItems: true` is not supported because there's no widget to represent an item of any type. In this case it will be treated as no additional items allowed. `additionalItems` being a valid schema is supported. * `anyOf`, `allOf`, and `oneOf`, or multiple `types` (i.e. `"type": ["string", "array"]`) The `anyOf` and `oneOf` keywords are supported; however, properties declared inside the `anyOf/oneOf` should not overlap with properties "outside" of the `anyOf/oneOf`. You can also use `oneOf` with [schema dependencies](../usage/dependencies/#schema-dependencies) to dynamically add schema properties based on input data. The `allOf` keyword is supported; it uses [json-schema-merge-allof](https://github.com/mokkabonna/json-schema-merge-allof) to merge subschemas to render the final combined schema in the form. When these subschemas are incompatible, though (or if the library has an error merging it), the `allOf` keyword is dropped from the schema. * `"additionalProperties":false` produces incorrect schemas when used with [schema dependencies](../usage/dependencies/#schema-dependencies). This library does not remove extra properties, which causes validation to fail. It is recommended to avoid setting `"additionalProperties":false` when you use schema dependencies. See [#848](https://github.com/rjsf-team/react-jsonschema-form/issues/848) [#902](https://github.com/rjsf-team/rjsf-team/issues/902) [#992](https://github.com/rjsf-team/rjsf-team/issues/992) ## Handling of schema defaults This library automatically fills default values defined in the [JSON Schema](http://json-schema.org/documentation.html) as initial values in your form. This also works for complex structures in the schema. If a field has a default defined, it should always appear as default value in form. This also works when using [schema dependencies](../usage/dependencies/#schema-dependencies). Since there is a complex interaction between any supplied original form data and any injected defaults, this library tries to do the injection in a way which keeps the original intention of the original form data. Check out the defaults example on the [live playground](https://rjsf-team.github.io/react-jsonschema-form/) to see this in action. ### Merging of defaults into the form data There are three different cases which need to be considered for the merging. Objects, arrays and scalar values. This library always deeply merges any defaults with the existing form data for objects. This are the rules which are used when injecting the defaults: - When there is a scalar in the form data, nothing is changed. - When the value is `undefined` in the form data, the default is created in the form data. - When the value is an object in the form data, the defaults are deeply merged into the form data, using the rules defined here for the deep merge. - Then the value is an array in the form data, defaults are only injected in existing array items. No new array items will be created, even if the schema has minItems or additional items defined. ### Merging of defaults within the schema In the schema itself, defaults of parent elements are propagated into children. So when you have a schema which defines a deeply nested object as default, these defaults will be applied to children of the current node. This also merges objects defined at different levels together with the "deeper" not having precedence. If the parent node defines properties, which are not defined in the child, they will be merged so that the default for the child will be the merged defaults of parent and child. For arrays this is not the case. Defining an array, when a parent also defines an array, will be overwritten. This is only true when arrays are used in the same level, for objects within these arrays, they will be deeply merged again. ## Custom array field buttons The `ArrayField` component provides a UI to add, remove and reorder array items, and these buttons use [Bootstrap glyphicons](http://getbootstrap.com/components/#glyphicons). If you don't use glyphicons but still want to provide your own icons or texts for these buttons, you can easily do so using CSS: ```css i.glyphicon { display: none; } .btn-add::after { content: 'Add'; } .array-item-move-up::after { content: 'Move Up'; } .array-item-move-down::after { content: 'Move Down'; } .array-item-remove::after { content: 'Remove'; } ``` ## Submit form programmatically You can use the reference to get your `Form` component and call the `submit` method to submit the form programmatically without a submit button. This method will dispatch the `submit` event of the form, and the function, that is passed to `onSubmit` props, will be called. ```jsx const onSubmit = ({formData}) => console.log("Data submitted: ", formData); let yourForm; const schema = { type: "string" }; render(( <Form schema={schema} onSubmit={onSubmit} ref={(form) => {yourForm = form;}}/> ), document.getElementById("app")); yourForm.submit(); ``` ��������������������������������������������������������material-ui/����������������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0034460�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/advanced-customization�������������������������������������������������������������������������customizing-material-ui.md��������������������������������������������������������������������������0000664�0000000�0000000�00000006054�14467713645�0041571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/advanced-customization/material-ui�������������������������������������������������������������# Customizing material-ui fields and widgets Unlike most other themes, the `material-ui` theme supports the two distinct version of Material UI (versions 4 and 5) side-by-side. Material UI version 4 is provided by the scoped packages under `@material-ui` and version 5 is provided by the scoped packages under `@mui`. The components used by `@rjsf/material-ui` for Material UI version 4 and version 5 have identical names and props. As a result, all of the `fields` and `widgets` provided by the theme are identical as well. The trick to making the two versions function side-by-side, was done by creating a React context, `MuiComponentContext`, that provides the appropriate set of components used by theme, for the particular scoped package. In addition to this context, a custom hook, `useMuiComponent()`, is provided to allow quick access to that component set. ## Example of a custom widget for `@rjsf/material-ui` Here is an update to the `MyCustomWidget` for the `material-ui` theme ```jsx const schema = { type: "string" }; import { useMuiComponent } from '@rjsf/material-ui/v4'; function MyCustomWidget(props) { const { options, ...otherProps } = props; const { color, backgroundColor } = options; const { TextInput } = useMuiComponent(); return <TextInput {...otherProps} style={{ color, backgroundColor }} />; } MyCustomWidget.defaultProps = { options: { color: "red" } }; const uiSchema = { "ui:widget": MyCustomWidget, "ui:options": { backgroundColor: "yellow" } }; // renders red on yellow input render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## Example of a custom field for `@rjsf/material-ui` Here is an update to the `GeoPosition` for the `material-ui` theme ```jsx const schema = { type: "object", required: ["lat", "lon"], properties: { lat: { type: "number"}, lon: { type: "number" } } }; import { useMuiComponent } from '@rjsf/material-ui/v4'; // Define a custom component for handling the root position object function GeoPosition(props) { const { lat, lon } = props.formData; const { Box, TextInput } = useMuiComponent(); const onChangeLat = (event) => { const { target: { value } } = event; const newData = { ...props.formData, lat: value }; props.onChange(newData); }; const onChangeLon = (event) => { const { target: { value } } = event; const newData = { ...props.formData, lon: value }; props.onChange(newData); }; return ( <Box> <TextInput type="number" value={lat} onChange={onChangeLat} /> <TextInput type="number" value={lon} onChange={onChangeLon} /> </Box> ); } // Define the custom field component to use for the root object const uiSchema = { "ui:field": "geo" }; // Define the custom field components to register; here our "geo" // custom field component const fields = { geo: GeoPosition }; // Render the form with all the properties we just defined passed // as props render(( <Form schema={schema} uiSchema={uiSchema} fields={fields} /> ), document.getElementById("app")); ``` ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/api-reference/��������������0000775�0000000�0000000�00000000000�14467713645�0030360�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/api-reference/form-props.md�0000664�0000000�0000000�00000024004�14467713645�0033006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- title: <Form /> props --- # <Form /> props ## acceptcharset The value of this prop will be passed to the `accept-charset` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-accept-charset). ## action The value of this prop will be passed to the `action` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-action). Note that this just renders the `action` attribute in the HTML markup. There is no real network request being sent to this `action` on submit. Instead, react-jsonschema-form catches the submit event with `event.preventDefault()` and then calls the [`onSubmit`](#onSubmit) function, where you could send a request programmatically with `fetch` or similar. ## additionalMetaSchemas This prop allows you to validate the form data against another JSON Schema meta schema, for example, JSON Schema draft-04. See [Validation](../usage/validation.md) for more information. ## ArrayFieldTemplate React component used to customize how alls arrays are rendered on the form. See [Custom Templates](../advanced-customization/custom-templates.md) for more information. ## autoComplete The value of this prop will be passed to the `autocomplete` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-autocomplete). ## autocomplete Deprecated, same functionality as `autoComplete` ## className The value of this prop will be passed to the `class` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form). ## children You can provide custom buttons to your form via the `Form` component's `children`. Otherwise a default submit button will be rendered. ```jsx const schema = { type: "string" }; render(( <Form schema={schema}> <div> <button type="submit">Submit</button> <button type="button">Cancel</button> </div> </Form> ), document.getElementById("app")); ``` > **Warning:** There needs to be a button or an input with `type="submit"` to trigger the form submission (and then the form validation). ## customFormats This prop allows you to define custom formats for validation. See [Validation](../usage/validation.md) for more information. ## disabled It's possible to disable the whole form by setting the `disabled` prop. The `disabled` prop is then forwarded down to each field of the form. ```jsx const schema = { type: "string" }; render(( <Form schema={schema} disabled /> ), document.getElementById("app")); ``` If you just want to disable some of the fields, see the `ui:disabled` parameter in `uiSchema`. ## readonly It's possible to make the whole form read-only by setting the `readonly` prop. The `readonly` prop is then forwarded down to each field of the form. ```jsx const schema = { type: "string" }; render(( <Form schema={schema} readonly /> ), document.getElementById("app")); ``` If you just want to make some of the fields read-only, see the `ui:readonly` parameter in `uiSchema`. ## enctype The value of this prop will be passed to the `enctype` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-enctype). ## extraErrors This prop allows passing in custom errors that are augmented with the existing JSON Schema errors on the form; it can be used to implement asynchronous validation. See [Validation](../usage/validation.md) for more information. ## ErrorList You can pass a React component to this prop to customize how form errors are displayed. See [Validation](../usage/validation.md) for more information. ## fields Dictionary of registered fields in the form. See [Custom Widgets and Fields](../advanced-customization/custom-widgets-fields.md) for more information. ## FieldTemplate React component used to customize each field of the form. See [Custom Templates](../advanced-customization/custom-templates.md) for more information. ## formContext You can provide a `formContext` object to the Form, which is passed down to all fields and widgets. Useful for implementing context aware fields and widgets. Setting `{readonlyAsDisabled: false}` on the formContext will make the antd theme treat readOnly fields as disabled. ## formData Often you'll want to prefill a form with existing data; this is done by passing a `formData` prop object matching the schema. ## id The value of this prop will be passed to the `id` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form). ## idPrefix To avoid collisions with existing ids in the DOM, it is possible to change the prefix used for ids (the default is `root`). ```jsx const schema = { type: "string" }; render(( <Form schema={schema} idPrefix={"rjsf_prefix"}/> ), document.getElementById("app")); ``` This will render `<input id="rjsf_prefix_key">` instead of `<input id="root_key">` ## idSeparator To avoid using a path separator that is present in field names, it is possible to change the separator used for ids (the default is `_`). ```jsx const schema = { type: "object", properties: { first: { type: "string" } } }; render(( <Form schema={schema} idSeparator={"/"}/> ), document.getElementById("app")); ``` This will render `<input id="root/first">` instead of `<input id="root_first">` when rendering `first`. ## liveOmit If `omitExtraData` and `liveOmit` are both set to true, then extra form data values that are not in any form field will be removed whenever `onChange` is called. Set to `false` by default. ## liveValidate If set to true, the form will perform validation and show any validation errors whenever the form data is changed, rather than just on submit. ## method The value of this prop will be passed to the `method` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-method). ## name The value of this prop will be passed to the `name` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-name). ## noHtml5Validate If set to true, turns off HTML5 validation on the form. Set to `false` on default. ## noValidate If set to true, turns off all validation. Set to `false` by default. ## ObjectFieldTemplate React component used to customize how all objects are rendered in the form. See [Custom Templates](../advanced-customization/custom-templates.md) for more information. ## omitExtraData If set to true, then extra form data values that are not in any form field will be removed whenever `onSubmit` is called. Set to `false` by default. ## onBlur Sometimes you may want to trigger events or modify external state when a field has been touched, so you can pass an `onBlur` handler, which will receive the id of the input that was blurred and the field value. ## onChange If you plan on being notified every time the form data are updated, you can pass an `onChange` handler, which will receive the same args as `onSubmit` any time a value is updated in the form. ## onError To react when submitted form data are invalid, pass an `onError` handler. It will be passed the list of encountered errors: ```jsx const schema = { type: "string" }; const onError = (errors) => console.log("I have", errors.length, "errors to fix"); render(( <Form schema={schema} onError={onError} /> ), document.getElementById("app")); ``` ## onFocus Sometimes you may want to trigger events or modify external state when a field has been focused, so you can pass an `onFocus` handler, which will receive the id of the input that is focused and the field value. ## onSubmit You can pass a function as the `onSubmit` prop of your `Form` component to listen to when the form is submitted and its data are valid. It will be passed a result object having a `formData` attribute, which is the valid form data you're usually after. The original event will also be passed as a second parameter: ```jsx const schema = { type: "string" }; const onSubmit = ({formData}, e) => console.log("Data submitted: ", formData); render(( <Form schema={schema} onSubmit={onSubmit} /> ), document.getElementById("app")); ``` > Note: If there are fields in the `formData` that are not represented in the schema, they will be retained by default. If you would like to remove those extra values on form submission, you may need to set the `omitExtraData` and/or `liveOmit` props. ## schema Form schema. We support JSON schema draft-07 by default. See [Schema Reference](https://json-schema.org/draft-07/json-schema-release-notes.html) for more information. ## showErrorList When this prop is set to true, a list of errors (or the custom error list defined in the `ErrorList`) will also show. When set to false, only inline input validation errors will be shown. Set to `true` by default. See [Validation](../usage/validation.md) for more information. ## tagName It's possible to change the default `form` tag name to a different HTML tag, which can be helpful if you are nesting forms. However, native browser form behaviour, such as submitting when the `Enter` key is pressed, may no longer work. ```jsx <Form tagName="div" /> ``` You can also provide a class/function component. ```jsx const CustomForm = props => <form {...props} style={...} className={...} /> // ... <Form tagName={CustomForm} /> ``` ## target The value of this prop will be passed to the `target` [HTML attribute on the form](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#attr-target). ## transformErrors A function can be passed to this prop in order to make modifications to the default errors resulting from JSON Schema validation. See [Validation](../usage/validation.md) for more information. ## uiSchema Form uiSchema. See [uiSchema Reference](uiSchema.md) for more information. ## validate The `validate` prop requires a function that specifies custom validation rules for the form. See [Validation](../usage/validation.md) for more information. ## widgets Dictionary of registered widgets in the form. See [Custom Widgets and Fields](../advanced-customization/custom-widgets-fields.md) for more information. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/api-reference/index.mdx�����0000664�0000000�0000000�00000000271�14467713645�0032201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- title: API Reference description: API documentation for react-jsonschema-form. --- import DocCardList from '@theme/DocCardList'; <p>{frontMatter.description}</p> <DocCardList />���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/api-reference/themes/�������0000775�0000000�0000000�00000000000�14467713645�0031645�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������chakra-ui/������������������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0033432�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/api-reference/themes���������������������������������������������������������������������������uiSchema.md�����������������������������������������������������������������������������������������0000664�0000000�0000000�00000001714�14467713645�0035515�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/api-reference/themes/chakra-ui�����������������������������������������������������������������# uiSchema Options for Chakra-UI When using `@rjsf/chakra-ui` there are a couple of ways to customize the feel of the form. ## Styling You can use `ChakraProvider`, where you can customize the components at a theme level.\ And, `uiSchema` allows for the use of a `"chakra"` `"ui:option"` to customize the styling of the form widgets. ```json { "ui:options": { "chakra": { "p": "1rem", "color": "blue.200", "sx": { "margin": "0 auto" } } } } ``` It accepts the theme accessible [style props](https://chakra-ui.com/docs/features/style-props) provided by [Chakra](https://chakra-ui.com/docs/getting-started) and [Emotion](https://emotion.sh/docs/introduction). ### Limitations - The `chakra` option is only available for the Chakra-UI theme. - The props are given to the parent component in the individual widget. To pass styles to the inner components, use the [`sx` prop](https://chakra-ui.com/docs/features/the-sx-prop). ����������������������������������������������������semantic-ui/����������������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0034004�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/api-reference/themes���������������������������������������������������������������������������uiSchema.md�����������������������������������������������������������������������������������������0000664�0000000�0000000�00000005372�14467713645�0036073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/api-reference/themes/semantic-ui���������������������������������������������������������������# uiSchema Options for Semantic-UI There are various options to pass to semantic theme fields. Note that every semantic property within uiSchema can be rendered in one of two ways: `{"ui:options": {semantic:{[property]: [value]}}}` In other words, the following uiSchema is equivalent: > Note: All fields have the following settings below as their default ``` fluid: Take on the size of its container. inverted: Format to appear on dark backgrounds. ``` ```json { "ui:options": { "semantic" : { "fluid": true, "inverted": false, "errorOptions": { "size": "small", "pointing": "above", } } } } ``` #### Semantic Widget Optional Properties - [Semantic props for TextWidget](https://react.semantic-ui.com/elements/input/) - [Semantic props for CheckboxWidget](https://react.semantic-ui.com/modules/checkbox/) - [Semantic props for SelectWidget](https://react.semantic-ui.com/modules/dropdown/) - [Semantic props for RangeWidget](https://react.semantic-ui.com/elements/input/) - [Semantic props for RadioWidget](https://react.semantic-ui.com/addons/radio/) - [Semantic props for PasswordWidget](https://react.semantic-ui.com/elements/input/) - [Semantic props for UpDownWidget](https://react.semantic-ui.com/elements/input/) - [Semantic props for TextAreaWidget](https://react.semantic-ui.com/addons/text-area/) ## errorOptions The uiSchema semantic object accepts an `errorOptions` property for each field of the schema: ``` size: determines the size of the error message dialog pointing: determines the direction of the arrow on the error message dialog ``` Below are the current defaults ```jsx const uiSchema = { "ui:options": { "semantic" : { "errorOptions": { "size": "small", "pointing": "above", } } } }; ``` ## semantic options uiSchema for array items To specify a uiSchema that applies to array items, specify the semantic uiSchema value within the `ui:options` property: ``` wrapItem: wrap each array item in a Segment horizontalButtons: horizontal buttons instead of the default vertical ``` ```jsx const schema = { type: "array", items: { type: "string" } }; const uiSchema = { "ui:options": { "semantic": { "wrapItem": true, "horizontalButtons": true } } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## formContext The formContext semantic object accepts `wrapContent` ,`wrapLabel` properties. ``` wrapContent: wrap all inputs field content in a div, for custom styling wrapLabel: wrap all labels in a div, for custom styling via CSS ``` ```jsx <Form formContext={{ "semantic" : { "wrapLabel": true, "wrapContent": true } // other props... }} /> ``` ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/api-reference/uiSchema.md���0000664�0000000�0000000�00000017040�14467713645�0032442�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# uiSchema JSON Schema is limited for describing how a given data type should be rendered as a form input component. That's why this library introduces the concept of uiSchema. A UI schema is basically an object literal providing information on **how** the form should be rendered, while the JSON schema tells **what**. The uiSchema object follows the tree structure of the form field hierarchy, and defines how each property should be rendered. Note that every property within uiSchema can be rendered in one of two ways: `{"ui:options": {[property]: [value]}}`, or `{"ui:[property]": value}`. In other words, the following uiSchemas are equivalent: ```json { "ui:title": "Title", "ui:description": "Description", "ui:submitButtonOptions": { "props": { "disabled": false, "className": "btn btn-info", }, "norender": false, "submitText": "Submit" }, } ``` ```json { "ui:options": { "title": "Title", "description": "Description", "submitButtonOptions": { "props": { "disabled": false, "className": "btn btn-info", }, "norender": false, "submitText": "Submit" }, } } ``` ## classNames The uiSchema object accepts a `classNames` property for each field of the schema: ```jsx const uiSchema = { title: { classNames: "task-title foo-bar" } }; ``` Will result in: ```html <div class="field field-string task-title foo-bar" > <label> <span>Title*</span> <input value="My task" required="" type="text"> </label> </div> ``` ## autofocus If you want to automatically focus on a text input or textarea input, set the `ui:autofocus` uiSchema directive to `true`. ```js const schema = {type: "string"}; const uiSchema = { "ui:widget": "textarea", "ui:autofocus": true } ``` ## description Sometimes it's convenient to change the description of a field. This is the purpose of the `ui:description` uiSchema directive: ```js const schema = {type: "string"}; const uiSchema = { "ui:widget": "password", "ui:description": "The best password" }; ``` ## disabled The `ui:disabled` uiSchema directive will disable all child widgets from a given field. > Note: If you're wondering about the difference between a `disabled` field and a `readonly` one: Marking a field as read-only will render it greyed out, but its text value will be selectable. Disabling it will prevent its value to be selected at all. ## enumDisabled To disable an option, use the `enumDisabled` property in uiSchema. ```js const schema = { type: "string", enum: ["one", "two", "three"], }; const uiSchema={ "ui:enumDisabled": ['two'], } ``` ## help Sometimes it's convenient to add text next to a field to guide the end user filling it. This is the purpose of the `ui:help` uiSchema directive: ```js const schema = {type: "string"}; const uiSchema = { "ui:widget": "password", "ui:help": "Hint: Make it strong!" }; ``` ![](https://i.imgur.com/scJUuZo.png) Help texts work for any kind of field at any level, and will always be rendered immediately below the field component widget(s) (after contextualized errors, if any). ## hideError The `ui:hideError` uiSchema directive will, if set to `true`, hide the default error display for the given field AND all of its child fields in the hierarchy. If you need to enable the default error display of a child in the hierarchy after setting `hideError: true` on the parent field, simply set `hideError: false` on the child. This is useful when you have a custom field or widget that utilizes either the `rawErrors` or the `errorSchema` to manipulate and/or show the error(s) for the field/widget itself. ## inputType To change the input type (for example, `tel` or `email`) you can specify the `inputType` in the `ui:options` uiSchema directive. ```jsx const schema = {type: "string"}; const uiSchema = { "ui:options": { inputType: 'tel' } }; ``` ## label Field labels are rendered by default. Labels may be omitted by setting the `label` option to `false` in the `ui:options` uiSchema directive. ```jsx const schema = {type: "string"}; const uiSchema = { "ui:options": { label: false } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## order This property allows you to reorder the properties that are shown for a particular object. See [Objects](../usage/objects.md) for more information. ## placeholder You can add placeholder text to an input by using the `ui:placeholder` uiSchema directive: ```jsx const schema = {type: "string", format: "uri"}; const uiSchema = { "ui:placeholder": "http://" }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` Fields using `enum` can also use `ui:placeholder`. The value will be used as the text for the empty option in the select widget. ```jsx const schema = {type: "string", enum: ["First", "Second"]}; const uiSchema = { "ui:placeholder": "Choose an option" }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## readonly The `ui:readonly` uiSchema directive will mark all child widgets from a given field as read-only. This is equivalent to setting the `readOnly` property in the schema. > Note: If you're wondering about the difference between a `disabled` field and a `readonly` one: Marking a field as read-only will render it greyed out, but its text value will be selectable. Disabling it will prevent its value to be selected at all. ## rootFieldId By default, this library will generate ids unique to the form for all rendered widgets. If you plan on using multiple instances of the `Form` component in a same page, it's wise to declare a root prefix for these, using the `ui:rootFieldId` uiSchema directive: ```js const uiSchema = { "ui:rootFieldId": "myform" }; ``` This will make all widgets have an id prefixed with `myform`. ## rows You can set the initial height of a textarea widget by specifying `rows` option. ```js const schema = {type: "string"}; const uiSchema = { "ui:widget": "textarea", "ui:options": { rows: 15 } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## title Sometimes it's convenient to change a field's title. This is the purpose of the `ui:title` uiSchema directive: ```js const schema = {type: "string"}; const uiSchema = { "ui:widget": "password", "ui:title": "Your password" }; ``` ## submitButtonOptions Sometimes it's convenient to change the behavior of the submit button for the form. This is the purpose of the `ui:submitButtonOptions` uiSchema directive: You can pass any other prop to the submit button if you want, by default, this library will set the following options / props mentioned below for all submit buttons: ### `norender` option You can set this property to `true` to remove the submit button completely from the form. Nice option, if the form is just for viewing purposes. ### `submitText` option You can use this option to change the text of the submit button. Set to "Submit" by default. ### `props` section You can pass any other prop to the submit button if you want, via this section. #### `disabled` prop You can use this option to disable the submit button. #### `className` prop You can use this option to specify a class name for the submit button. ```js const uiSchema = { "ui:submitButtonOptions": { "props": { "disabled": false, "className": "btn btn-info", }, "norender": false, "submitText": "Submit" } }; ``` ## Theme Options [Semantic UI](themes/semantic-ui/uiSchema.md) [Chakra UI](themes/chakra-ui/uiSchema.md) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/usage/����������������������0000775�0000000�0000000�00000000000�14467713645�0026757�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/usage/arrays.md�������������0000664�0000000�0000000�00000013231�14467713645�0030602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Arrays Arrays are defined with a type equal to `array`, and array items' schemas are specified in the `items` keyword. ## Arrays of a single field Arrays of a single field type can be specified as follows: ```jsx const schema = { type: "array", items: { type: "string" } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Arrays of objects Arrays of objects can be specified as follows: ```jsx const schema = { type: "array", items: { type: "object", properties: { name: { type: "string" } } } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## uiSchema for array items To specify a uiSchema that applies to array items, specify the uiSchema value within the `items` property: ```jsx const schema = { type: "array", items: { type: "string" } }; const uiSchema = { items: { "ui:widget": "textarea" } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## The `additionalItems` keyword The `additionalItems` keyword allows the user to add additional items of a given schema. For example: ```jsx const schema = { type: "array", items: { type: "string" }, additionalItems: { type: "boolean" } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Array item options ### `orderable` option Array items are orderable by default, and react-jsonschema-form renders move up/down buttons alongside them. The uiSchema `orderable` options allows you to disable ordering: ```jsx const schema = { type: "array", items: { type: "string" } }; const uiSchema = { "ui:options": { orderable: false } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ### `addable` option If either `items` or `additionalItems` contains a schema object, an add button for new items is shown by default. You can turn this off with the `addable` option in `uiSchema`: ```jsx const schema = { type: "array", items: { type: "string" } }; const uiSchema = { "ui:options": { addable: false } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ### `removable` option A remove button is shown by default for an item if `items` contains a schema object, or the item is an `additionalItems` instance. You can turn this off with the `removable` option in `uiSchema`: ```jsx const schema = { type: "array", items: { type: "string" } }; const uiSchema = { "ui:options": { removable: false } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## Multiple-choice list The default behavior for array fields is a list of text inputs with add/remove buttons. There are two alternative widgets for picking multiple elements from a list of choices. Typically this applies when a schema has an `enum` list for the `items` property of an `array` field, and the `uniqueItems` property set to `true`. Example: ```jsx const schema = { type: "array", title: "A multiple-choice list", items: { type: "string", enum: ["foo", "bar", "fuzz", "qux"], }, uniqueItems: true }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` By default, this will render a multiple select box. If you prefer a list of checkboxes, just set the uiSchema `ui:widget` directive to `checkboxes` for that field: ```js const schema = { type: "array", title: "A multiple-choice list", items: { type: "string", enum: ["foo", "bar", "fuzz", "qux"], }, uniqueItems: true }; const uiSchema = { "ui:widget": "checkboxes" }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## Custom widgets In addition to [ArrayFieldTemplate](../advanced-customization/custom-templates.md#arrayfieldtemplate) you use your own widget by providing it to the uiSchema with the property of `ui:widget`. Example: ```jsx const CustomSelectComponent = props => { return ( <select> {props.value.map((item, index) => ( <option key={index} id="custom-select"> {item} </option> ))} </select> ); }; const schema = { type: "array", title: "A multiple-choice list", items: { type: "string", }, }; const uiSchema = { "ui:widget": "CustomSelect" }; const widgets = { CustomSelect: CustomSelectComponent, }, render((<Form schema={schema} uiSchema={uiSchema} widgets={widgets} />), document.getElementById("app")); ``` ## Specifying the minimum or maximum number of items Note that when an array property is marked as `required`, an empty array is considered valid. If the array needs to be populated, you can specify the minimum number of items using the `minItems` property. Example: ```jsx const schema = { type: "array", minItems: 2, title: "A multiple-choice list", items: { type: "string", enum: ["foo", "bar", "fuzz", "qux"], }, uniqueItems: true }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` You can also specify the maximum number of items in an array using the `maxItems` property. ## Inline checkboxes By default, checkboxes are stacked. If you prefer them inline, set the `inline` property to `true`: ```js const schema = { type: "array", minItems: 2, title: "A multiple-choice list", items: { type: "string", enum: ["foo", "bar", "fuzz", "qux"], }, uniqueItems: true }; const uiSchema = { "ui:widget": "checkboxes", "ui:options": { inline: true } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ```�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/usage/definitions.md��������0000664�0000000�0000000�00000001775�14467713645�0031626�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Schema definitions and references This library partially supports [inline schema definition dereferencing](http://json-schema.org/draft/2019-09/json-schema-core.html#ref), which is Barbarian for *avoiding to copy and paste commonly used field schemas*: ```jsx const schema = { "definitions": { "address": { "type": "object", "properties": { "street_address": { "type": "string" }, "city": { "type": "string" }, "state": { "type": "string" } }, "required": ["street_address", "city", "state"] } }, "type": "object", "properties": { "billing_address": { "$ref": "#/definitions/address" }, "shipping_address": { "$ref": "#/definitions/address" } } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` Note that this library only supports local definition referencing. The value in the `$ref` keyword should be a [JSON Pointer](https://tools.ietf.org/html/rfc6901) in URI fragment identifier format. ���react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/usage/dependencies.md�������0000664�0000000�0000000�00000011011�14467713645�0031721�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Dependencies react-jsonschema-form supports the `dependencies` keyword from an earlier draft of JSON Schema (note that this is not part of the latest JSON Schema spec, though). Dependencies can be used to create dynamic schemas that change fields based on what data is entered. ## Property dependencies This library supports conditionally making fields required based on the presence of other fields. ### Unidirectional In the following example the `billing_address` field will be required if `credit_card` is defined. ```jsx const schema = { "type": "object", "properties": { "name": { "type": "string" }, "credit_card": { "type": "number" }, "billing_address": { "type": "string" } }, "required": ["name"], "dependencies": { "credit_card": ["billing_address"] } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ### Bidirectional In the following example the `billing_address` field will be required if `credit_card` is defined and the `credit_card` field will be required if `billing_address` is defined, making them both required if either is defined. ```jsx const schema = { "type": "object", "properties": { "name": { "type": "string" }, "credit_card": { "type": "number" }, "billing_address": { "type": "string" } }, "required": ["name"], "dependencies": { "credit_card": ["billing_address"], "billing_address": ["credit_card"] } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` *(Sample schemas courtesy of the [Space Telescope Science Institute](https://spacetelescope.github.io/understanding-json-schema/reference/object.html#property-dependencies))* ## Schema dependencies This library also supports modifying portions of a schema based on form data. ### Conditional ```jsx const schema = { "type": "object", "properties": { "name": { "type": "string" }, "credit_card": { "type": "number" } }, "required": ["name"], "dependencies": { "credit_card": { "properties": { "billing_address": { "type": "string" } }, "required": ["billing_address"] } } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` In this example the `billing_address` field will be displayed in the form if `credit_card` is defined. *(Sample schemas courtesy of the [Space Telescope Science Institute](https://spacetelescope.github.io/understanding-json-schema/reference/object.html#schema-dependencies))* ### Dynamic The JSON Schema standard says that the dependency is triggered if the property is present. However, sometimes it's useful to have more sophisticated rules guiding the application of the dependency. For example, maybe you have three possible values for a field, and each one should lead to adding a different question. For this, we support a very restricted use of the `oneOf` keyword. ```jsx const schema = { "title": "Person", "type": "object", "properties": { "Do you have any pets?": { "type": "string", "enum": [ "No", "Yes: One", "Yes: More than one" ], "default": "No" } }, "required": [ "Do you have any pets?" ], "dependencies": { "Do you have any pets?": { "oneOf": [ { "properties": { "Do you have any pets?": { "enum": [ "No" ] } } }, { "properties": { "Do you have any pets?": { "enum": [ "Yes: One" ] }, "How old is your pet?": { "type": "number" } }, "required": [ "How old is your pet?" ] }, { "properties": { "Do you have any pets?": { "enum": [ "Yes: More than one" ] }, "Do you want to get rid of any?": { "type": "boolean" } }, "required": [ "Do you want to get rid of any?" ] } ] } } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` In this example the user is prompted with different follow-up questions dynamically based on their answer to the first question. In these examples, the "Do you have any pets?" question is validated against the corresponding property in each schema in the `oneOf` array. If exactly one matches, the rest of that schema is merged with the existing schema.�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/usage/index.mdx�������������0000664�0000000�0000000�00000000351�14467713645�0030577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������--- title: Usage and Customization description: How to use react-jsonschema-form and customize your form behavior and appearance. --- import DocCardList from '@theme/DocCardList'; <p>{frontMatter.description}</p> <DocCardList />���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/usage/objects.md������������0000664�0000000�0000000�00000004656�14467713645�0030745�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Objects ## Object properties Objects are defined with a type equal to `object` and properties specified in the `properties` keyword. ```jsx const schema = { "title": "My title", "description": "My description", "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "number" } } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Required properties You can specify which properties are required using the `required` attribute: ```jsx const schema = { "title": "My title", "description": "My description", "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "number" } }, "required": ["name"] }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Specifying property order Since the order of object properties in Javascript and JSON is not guaranteed, the `uiSchema` object spec allows you to define the order in which properties are rendered using the `ui:order` property: ```jsx const schema = { type: "object", properties: { foo: {type: "string"}, bar: {type: "string"} } }; const uiSchema = { "ui:order": ["bar", "foo"] }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` If a guaranteed fixed order is only important for some fields, you can insert a wildcard `"*"` item in your `ui:order` definition. All fields that are not referenced explicitly anywhere in the list will be rendered at that point: ```js const uiSchema = { "ui:order": ["bar", "*"] }; ``` ## Additional properties The `additionalProperties` keyword allows the user to add properties with arbitrary key names. Set this keyword equal to a schema object: ```jsx const schema = { "type": "object", "properties": { "name": { "type": "string" } }, "additionalProperties": { "type": "number", "enum": [1, 2, 3] } }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` In this way, an add button for new properties is shown by default. You can also define `uiSchema` options for `additionalProperties` by setting the `additionalProperties` attribute in the `uiSchema`. ### `expandable` option You can turn support for `additionalProperties` off with the `expandable` option in `uiSchema`: ```js const uiSchema = { "ui:options": { expandable: false } }; ```����������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/usage/oneof.md��������������0000664�0000000�0000000�00000003400�14467713645�0030404�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# oneOf, anyOf, and allOf react-jsonschema-form supports custom widgets for oneOf, anyOf, and allOf. - A schema with `oneOf` is valid if *exactly one* of the subschemas is valid. - A schema with `anyOf` is valid if *at least one* of the subschemas is valid. - A schema with `allOf` is valid if *all* of the subschemas are valid. ## oneOf ```jsx const schema = { type: "object", oneOf: [ { properties: { lorem: { type: "string", }, }, required: ["lorem"], }, { properties: { ipsum: { type: "string", }, }, required: ["ipsum"], }, ], }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## anyOf ```jsx const schema = { type: "object", anyOf: [ { properties: { lorem: { type: "string", }, }, required: ["lorem"], }, { properties: { lorem: { type: "string", }, ipsum: { type: "string", }, } }, ], }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## allOf When `allOf` is specified in a schema, react-jsonschema-form uses the [json-schema-merge-allof](https://github.com/mokkabonna/json-schema-merge-allof) library to merge the specified subschemas to create a combined subschema that is valid. For example, the below schema evaluates to a combined subschema of `{type: "boolean"}`: ```jsx const schema = { title: "Field", allOf: [ { type: ["string", "boolean"] }, { type: "boolean" }, ], }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/usage/single.md�������������0000664�0000000�0000000�00000005630�14467713645�0030566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Single fields The simplest example of a JSON Schema contains only a single field. The field type is determined by the `type` parameter. ## Field types The base field types in JSON Schema include: - `string` - `number` - `integer` - `boolean` - `null` Here is an example of a string field: ```jsx const schema = { type: "string" }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Titles and descriptions Fields can have titles and descriptions specified by the `title` keyword in the schema and `description` keyword in the schema, respectively. These two can also be overriden by the `ui:title` and `ui:description` keywords in the uiSchema. ```jsx const schema = { title: "My form", description: "My description", type: "string" }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ## Enumerated values All base schema types support the `enum` attribute, which restricts the user to select among a list of options. For example: ```jsx const schema = { type: "string", enum: ["one", "two", "three"] }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ### Custom labels for `enum` fields This library supports a custom [`enumNames`](https://github.com/rjsf-team/react-jsonschema-form/issues/57) property for `enum` fields, which, however is not JSON-Schema compliant (see below for a compliant approach). The `enumNames` property allows defining custom labels for each option of an `enum`: ```jsx const schema = { type: "number", enum: [1, 2, 3], enumNames: ["one", "two", "three"] }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` #### Alternative JSON-Schema compliant approach JSON Schema has an alternative approach to enumerations using `anyOf`; react-jsonschema-form supports it as well. ```jsx const schema = { "type": "number", "anyOf": [ { "type": "number", "title": "one", "enum": [ 1 ] }, { "type": "number", "title": "two", "enum": [ 2 ] }, { "type": "number", "title": "three", "enum": [ 3 ] } ] }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ### Disabled attribute for `enum` fields To disable an option, use the `ui:enumDisabled` property in the uiSchema. ```jsx const schema = { type: "boolean", enum: [true, false] }; const uiSchema={ "ui:enumDisabled": [true], }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## Nullable types JSON Schema supports specifying multiple types in an array; however, react-jsonschema-form only supports a restricted subset of this -- nullable types, in which an element is either a given type or equal to null. ```jsx const schema = { type: ["string", "null"] }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` ��������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/usage/themes.md�������������0000664�0000000�0000000�00000003646�14467713645�0030577�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Themes By default, this library renders form fields and widgets leveraging the [Bootstrap](http://getbootstrap.com/) semantics, meaning that you must load the Bootstrap stylesheet on the page to view the form properly. You can use another theme by importing one of the packages listed below. ## Supported themes | Theme Name | Status | Package Name / Link | | --------------------- | --------- | ------------------- | | Bootstrap 3 (default) | Published | `@rjsf/core` | | Bootstrap 4 | Published | `@rjsf/bootstrap-4` | | material-ui 4 & 5 | Published | `@rjsf/material-ui` | | fluent-ui | Published | `@rjsf/fluent-ui` | | antd | Published | `@rjsf/antd` | | Semantic UI | Published | `@rjsf/semantic-ui` | | Chakra UI | Published | `@rjsf/chakra-ui` | ## Using themes To use a theme from a package, just import the `<Form />` component from that package. For example, to use the material ui form, first install both `@rjsf/core` and `@rjsf/material-ui`. Then you can import the form by doing: ```js import Form from "@rjsf/material-ui"; ``` If you would like to contribute a theme with a new UI framework, please develop the theme using the `withTheme` component described in [Theme Customization](../advanced-customization/custom-themes.md) and make a PR! You can also use the uiSchema to add custom CSS class names to your form. ## Customizing with other frameworks The default theme is bootstrap 3. In order to use another theme, you must first install `@rjsf/core`. For example, to use the standard bootstrap 3 form, you can run: ```js import Form from "@rjsf/core"; ``` To use the material-ui form, you should first install both `@rjsf/core` and `@rjsf/material-ui`. Then, you can run: ```js import Form from "@rjsf/material-ui"; ``` For more information on how to create a custom theme, see documentation on the `withTheme` component. ������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/usage/validation.md���������0000664�0000000�0000000�00000022015�14467713645�0031433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Validation When the form is submitted, the form data is validated to conform to the given JSON schema; this library uses the [ajv](https://github.com/ajv-validator/ajv) validator by default. ## Live validation By default, form data are only validated when the form is submitted or when a new `formData` prop is passed to the `Form` component. You can enable live form data validation by passing a `liveValidate` prop to the `Form` component, and set it to `true`. Then, every time a value changes within the form data tree (e.g. the user entering a character in a field), a validation operation is performed, and the validation results are reflected into the form state. Be warned that this is an expensive strategy, with possibly strong impact on performances. ```jsx const schema = { type: ["string"], const: "test" }; const formData = "a"; render(( <Form schema={schema} formData={formData} liveValidate /> ), document.getElementById("app")); ``` ## HTML5 Validation By default, the form uses HTML5 validation. This may cause unintuitive results because the HTML5 validation errors (such as when a field is `required`) may be displayed before the form is submitted, and thus these errors will display differently from the react-jsonschema-form validation errors. You can turn off HTML validation by setting the `noHtml5Validate` to `true`. ```jsx const schema = { type: "object", properties: { name: { type: "string", required: true } } }; render(( <Form schema={schema} noHtml5Validate /> ), document.getElementById("app")); ``` ## Custom validation rules Form data is always validated against the JSON schema. But it is possible to define your own custom validation rules. This is especially useful when the validation depends on several interdependent fields. ```jsx function validate(formData, errors) { if (formData.pass1 !== formData.pass2) { errors.pass2.addError("Passwords don't match"); } return errors; } const schema = { type: "object", properties: { pass1: {type: "string", minLength: 3}, pass2: {type: "string", minLength: 3}, } }; render(( <Form schema={schema} validate={validate} /> ), document.getElementById("app")); ``` > Notes: > - The `validate()` function must **always** return the `errors` object > received as second argument. > - The `validate()` function is called **after** the JSON schema validation. ## Custom error messages Validation error messages are provided by the JSON Schema validation by default. If you need to change these messages or make any other modifications to the errors from the JSON Schema validation, you can define a transform function that receives the list of JSON Schema errors and returns a new list. ```jsx function transformErrors(errors) { return errors.map(error => { if (error.name === "pattern") { error.message = "Only digits are allowed" } return error; }); } const schema = { type: "object", properties: { onlyNumbersString: {type: "string", pattern: "^\\d*$"}, } }; render(( <Form schema={schema} transformErrors={transformErrors} /> ), document.getElementById("app")); ``` > Notes: > - The `transformErrors()` function must return the list of errors. Modifying the list in place without returning it will result in an error. Each element in the `errors` list passed to `transformErrors` has the following properties: - `name`: name of the error, for example, "required" or "minLength" - `message`: message, for example, "is a required property" or "should NOT be shorter than 3 characters" - `params`: an object with the error params returned by ajv ([see doc](https://github.com/ajv-validator/ajv/tree/6a671057ea6aae690b5967ee26a0ddf8452c6297#error-parameters) for more info). - `property`: a string in Javascript property accessor notation to the data path of the field with the error. For example, `.name` or `['first-name']`. - `stack`: full error name, for example ".name is a required property". - `schemaPath`: JSON pointer to the schema of the keyword that failed validation. For example, `#/fields/firstName/required`. (Note: this may sometimes be wrong due to a [bug in ajv](https://github.com/ajv-validator/ajv/issues/512)). ## Error List Display To take control over how the form errors are displayed, you can define an *error list template* for your form. This list is the form global error list that appears at the top of your forms. An error list template is basically a React stateless component being passed errors as props so you can render them as you like: ```jsx function ErrorListTemplate(props) { const { errors } = props; return ( <div> <h2>Custom error list</h2> <ul> {errors.map(error => ( <li key={error.stack}> {error.stack} </li> ))} </ul> </div> ); } const schema = { type: "string", const: "test" }; render(( <Form schema={schema} showErrorList={true} formData={""} liveValidate ErrorList={ErrorListTemplate} /> ), document.getElementById("app")); ``` > Note: Your custom `ErrorList` template will only render when `showErrorList` is `true`. The following props are passed to `ErrorList` - `errors`: An array of the errors. - `errorSchema`: The errorSchema constructed by `Form`. - `schema`: The schema that was passed to `Form`. - `uiSchema`: The uiSchema that was passed to `Form`. - `formContext`: The `formContext` object that you passed to Form. ## The case of empty strings When a text input is empty, the field in form data is set to `undefined`. String fields that use `enum` and a `select` widget will have an empty option at the top of the options list that when selected will result in the field being `undefined`. One consequence of this is that if you have an empty string in your `enum` array, selecting that option in the `select` input will cause the field to be set to `undefined`, not an empty string. If you want to have the field set to a default value when empty you can provide a `ui:emptyValue` field in the `uiSchema` object. ## Custom meta schema validation To have your schemas validated against any other meta schema than draft-07 (the current version of [JSON Schema](http://json-schema.org/)), make sure your schema has a `$schema` attribute that enables the validator to use the correct meta schema. For example: ```json { "$schema": "http://json-schema.org/draft-04/schema#", ... } ``` Note that react-jsonschema-form only supports the latest version of JSON Schema, draft-07, by default. To support additional meta schemas pass them through the `additionalMetaSchemas` prop to the `Form` component. ### additionalMetaSchemas The `additionalMetaSchemas` prop allows you to validate the form data against one (or more than one) JSON Schema meta schema, for example, JSON Schema draft-04. You can import a meta schema as follows: ```jsx const metaSchemaDraft04 = require("ajv/lib/refs/json-schema-draft-04.json"); ``` In this example `schema` passed as props to `Form` component can be validated against draft-07 (default) and by draft-04 (added), depending on the value of `$schema` attribute. ```jsx const schema = { "$schema": "http://json-schema.org/draft-04/schema#", type: "string" }; return (<Form schema={schema} additionalMetaSchemas={[metaSchemaDraft04]} />); ``` ## customFormats [Pre-defined semantic formats](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.7) are limited. react-jsonschema-form adds two formats, `color` and `data-url`, to support certain [alternative widgets](../usage/widgets.md). You can add formats of your own through the `customFormats` prop to your `Form` component: ```jsx const schema = { type: 'string', format: 'phone-us' }; const customFormats = { 'phone-us': /\(?\d{3}\)?[\s-]?\d{3}[\s-]?\d{4}$/ }; render(( <Form schema={schema} customFormats={customFormats}/> ), document.getElementById("app")); ``` Format values can be anything AJV’s [`addFormat` method](https://github.com/ajv-validator/ajv/tree/6a671057ea6aae690b5967ee26a0ddf8452c6297#addformatstring-name-stringregexpfunctionobject-format---ajv) accepts. ## Async validation Handling async errors is an important part of many applications. Support for this is added in the form of the `extraErrors` prop. For example, a request could be made to some backend when the user submits the form. If that request fails, the errors returned by the backend should be formatted like in the following example. ```jsx const schema = { type: "object", properties: { foo: { type: "string", }, candy: { type: "object", properties: { bar: { type: "string", } } } } }; const extraErrors = { foo: { __errors: ["some error that got added as a prop"], }, candy: { bar: { __errors: ["some error that got added as a prop"], } } }; render(( <Form schema={schema} extraErrors={extraErrors} /> ), document.getElementById("app")); ``` An important note is that these errors are "display only" and will not block the user from submitting the form again. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_docs/version-4.2.3/usage/widgets.md������������0000664�0000000�0000000�00000012635�14467713645�0030756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Widgets The uiSchema `ui:widget` property tells the form which UI widget should be used to render a field. Example: ```jsx const schema = { type: "object", properties: { done: { type: "boolean" } } }; const uiSchema =  { done: { "ui:widget": "radio" // could also be "select" } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` Here's a list of supported alternative widgets for different JSON Schema data types: ## For `boolean` fields * `radio`: a radio button group with `true` and `false` as selectable values; * `select`: a select box with `true` and `false` as options; * by default, a checkbox is used > Note: To set the labels for a boolean field, instead of using `true` and `false` you can set `enumNames` in your schema. Note that `enumNames` belongs in your `schema`, not the `uiSchema`, and the order is always `[true, false]`. ## For `string` fields * `textarea`: a `textarea` element is used; * `password`: an `input[type=password]` element is used; * `color`: an `input[type=color]` element is used; * by default, a regular `input[type=text]` element is used. ### String formats The built-in string field also supports the JSON Schema `format` property, and will render an appropriate widget by default for the following string formats: - `email`: An `input[type=email]` element is used; - `uri`: An `input[type=url]` element is used; - `data-url`: By default, an `input[type=file]` element is used; in case the string is part of an array, multiple files will be handled automatically (see [File widgets](#file-widgets)). - `date`: By default, an `input[type=date]` element is used; - `date-time`: By default, an `input[type=datetime-local]` element is used. ![](https://i.imgur.com/xqu6Lcp.png) Please note that, even though they are standardized, `datetime-local` and `date` input elements are not yet supported by Firefox and IE. If you plan on targeting these platforms, two alternative widgets are available: - `alt-datetime`: Six `select` elements are used to select the year, the month, the day, the hour, the minute and the second; - `alt-date`: Three `select` elements are used to select the year, month and the day. > **Firefox 57 - 66**: Firefox partially supporting `date` and `time` input types, but not `datetime-local`, `month` or `week` ![](https://i.imgur.com/VF5tY60.png) You can customize the list of years displayed in the `year` dropdown by providing a ``yearsRange`` property to ``ui:options`` in your uiSchema. Its also possible to remove the `Now` and `Clear` buttons with the `hideNowButton` and `hideClearButton` options. ```jsx const schema = { type: "string" }; const uiSchema = { "ui:widget": "alt-datetime", "ui:options": { yearsRange: [1980, 2030], hideNowButton: true, hideClearButton: true, } }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` ## For `number` and `integer` fields * `updown`: an `input[type=number]` updown selector; * `range`: an `input[type=range]` slider; * `radio`: a radio button group with enum values. This can only be used when `enum` values are specified for this input. * By default, a regular `input[type=text]` element is used. > Note: If JSON Schema's `minimum`, `maximum` and `multipleOf` values are defined, the `min`, `max` and `step` input attributes values will take those values. ## Hidden widgets It's possible to use a hidden widget for a field by setting its `ui:widget` uiSchema directive to `hidden`: ```jsx const schema = { type: "object", properties: { foo: {type: "boolean"} } }; const uiSchema = { foo: {"ui:widget": "hidden"} }; render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app")); ``` Notes: - Hiding widgets is only supported for `boolean`, `string`, `number` and `integer` schema types; - A hidden widget takes its value from the `formData` prop. ## File widgets This library supports a limited form of `input[type=file]` widgets, in the sense that it will propagate file contents to form data state as [data-url](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs)s. There are two ways to use file widgets. 1. By declaring a `string` json schema type along a `data-url` [format](#string-formats): ```jsx const schema = { type: "string", format: "data-url", }; render(( <Form schema={schema} /> ), document.getElementById("app")); ``` 2. By specifying a `ui:widget` field uiSchema directive as `file`: ```js const schema = { type: "string", }; const uiSchema = { "ui:widget": "file", }; ``` ### Multiple files Multiple files selectors are supported by defining an array of strings having `data-url` as a format: ```js const schema = { type: "array", items: { type: "string", format: "data-url", } }; ``` > Note that storing large dataURIs into form state might slow rendering. ### File widget input ref The included `FileWidget` exposes a reference to the `<input type="file" />` element node as an `inputRef` component property. This allows you to programmatically trigger the browser's file selector, which can be used in a custom file widget. ### `accept` option You can use the accept attribute to specify a filter for what file types the user can upload: ```jsx const schema = { type: "string", format: "data-url" }; const uiSchema = { "ui:options": { accept: ".pdf" } }; ``` ���������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_sidebars/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024370�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_sidebars/version-3.2.1-sidebars.json�����������0000664�0000000�0000000�00000000124�14467713645�0031176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "docs": [ { "type": "autogenerated", "dirName": "." } ] } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versioned_sidebars/version-4.2.3-sidebars.json�����������0000664�0000000�0000000�00000000124�14467713645�0031201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "docs": [ { "type": "autogenerated", "dirName": "." } ] } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/docs/versions.json��������������������������������������������0000664�0000000�0000000�00000000031�14467713645�0023253�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[ "4.2.3", "3.2.1" ] �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/����������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021476�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/.eslintrc�������������������������������������������0000664�0000000�0000000�00000000164�14467713645�0023323�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": ["../../.eslintrc-typescript"], "plugins": ["@typescript-eslint", "jsx-a11y", "react", "import"] } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/README.md�������������������������������������������0000664�0000000�0000000�00000010262�14467713645�0022756�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[![Build Status][build-shield]][build-url] [![npm][npm-shield]][npm-url] [![npm downloads][npm-dl-shield]][npm-dl-url] [![Contributors][contributors-shield]][contributors-url] [![Apache 2.0 License][license-shield]][license-url] <!-- PROJECT LOGO --> <br /> <p align="center"> <a href="https://github.com/rjsf-team/react-jsonschema-form"> <img src="https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/fluent-ui/logo.png" alt="Logo" width="120" height="120"> </a> <h3 align="center">@rjsf/fluent-ui</h3> <p align="center"> Fluent UI theme, fields and widgets for <a href="https://github.com/rjsf-team/react-jsonschema-form/"><code>react-jsonschema-form</code></a>. <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/docs/"><strong>Explore the docs »</strong></a> <br /> <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/">View Playground</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Report Bug</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Request Feature</a> </p> </p> <!-- TABLE OF CONTENTS --> ## Table of Contents - [Table of Contents](#table-of-contents) - [About The Project](#about-the-project) - [Built With](#built-with) - [Getting Started](#getting-started) - [Prerequisites](#prerequisites) - [Installation](#installation) - [Usage](#usage) - [Roadmap](#roadmap) - [Contributing](#contributing) - [Contact](#contact) <!-- ABOUT THE PROJECT --> ## About The Project Fluent UI theme, fields and widgets for `react-jsonschema-form`. ### Built With - [react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form/) - [Fluent UI](https://developer.microsoft.com/en-us/fluentui#/) - [Typescript](https://www.typescriptlang.org/) <!-- GETTING STARTED --> ## Getting Started ### Prerequisites - `@fluentui/react >= 7.114.2` - `@rjsf/core >= 2.0.0` ```bash yarn add @fluentui/react @rjsf/core ``` For the Fluent UI grid to work, add the following CSS tag to the main HTML page: ```html <link rel="stylesheet" href="//static2.sharepointonline.com/files/fabric/office-ui-fabric-core/11.0.0/css/fabric.min.css" /> ``` ### Installation ```bash yarn add @rjsf/fluent-ui ``` <!-- USAGE EXAMPLES --> ## Usage ```js import Form from '@rjsf/fluent-ui'; ``` or ```js import { withTheme } from '@rjsf/core'; import { Theme as FluentUITheme } from '@rjsf/fluent-ui'; // Make modifications to the theme with your own fields and widgets const Form = withTheme(FluentUITheme); ``` <!-- ROADMAP --> ## Roadmap See the [open issues](https://github.com/rjsf-team/react-jsonschema-form/issues) for a list of proposed features (and known issues). <!-- CONTRIBUTING --> ## Contributing Read our [contributors' guide](https://rjsf-team.github.io/react-jsonschema-form/docs/contributing/) to get started. <!-- CONTACT --> ## Contact rjsf team: [https://github.com/orgs/rjsf-team/people](https://github.com/orgs/rjsf-team/people) GitHub repository: [https://github.com/rjsf-team/react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form) <!-- MARKDOWN LINKS & IMAGES --> <!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --> [build-shield]: https://github.com/rjsf-team/react-jsonschema-form/workflows/CI/badge.svg [build-url]: https://github.com/rjsf-team/react-jsonschema-form/actions [contributors-shield]: https://img.shields.io/github/contributors/rjsf-team/react-jsonschema-form.svg [contributors-url]: https://github.com/rjsf-team/react-jsonschema-form/graphs/contributors [license-shield]: https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat-square [license-url]: https://choosealicense.com/licenses/apache-2.0/ [npm-shield]: https://img.shields.io/npm/v/@rjsf/fluent-ui/latest.svg?style=flat-square [npm-url]: https://www.npmjs.com/package/@rjsf/fluent-ui [npm-dl-shield]: https://img.shields.io/npm/dm/@rjsf/fluent-ui.svg?style=flat-square [npm-dl-url]: https://www.npmjs.com/package/@rjsf/fluent-ui [product-screenshot]: https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/fluent-ui/screenshot.png ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/babel.config.js�������������������������������������0000664�0000000�0000000�00000000126�14467713645�0024344�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const defaultConfig = require('../../babel.config'); module.exports = defaultConfig; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/jest.config.js��������������������������������������0000664�0000000�0000000�00000000441�14467713645�0024244�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������module.exports = { moduleNameMapper: { 'office-ui-fabric-react/lib/': 'office-ui-fabric-react/lib-commonjs/', }, testEnvironment: 'jsdom', testEnvironmentOptions: { browsers: ['chrome', 'firefox', 'safari'], }, transformIgnorePatterns: [`/node_modules/(?!nanoid)`], }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/logo.png��������������������������������������������0000664�0000000�0000000�00004611610�14467713645�0023155�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� ��w���< Y�� �IDATxm}-K'ēSqL*E!c0>S *W7oխTB %UcGK̸f .qp޻Z-c'IOb޽WwËo ���������h:Ѳ+ _?.ak5������������������Xy=/^{#L��������%���������3V\zϖ[g,  b׍g&e <z� ��������8 ��������p.+~dݺu3"2OK`?UksgWN��������9S��������iG.$qaJJ#=Ǐۿ_;ݧ����������������Ғ|mص׊8FHqeK,HcRyЁ7>{ǿq7������� ��������pZ9c/|o쟅$Q$S$Tb=}u9d ����������������d_lGe"j|}[(r$0Jh'̕ksŭg,+G~+&���������(���������~S.< aF&}(%W&1F,TNJ9~gupj��������SŴP���������NzK.\>,u׆f|D$y2ˤJ8ETF/[fAt7>{ǿqG�������S��������pYr-6`@Dc7-SFRh}N۔^p]Yi {c��������)��������1XH.?]:{Ix'xQT()}xE\*\ "MgW��������85I��������8|Zv}=tƇV !DќWnFqrJYX˔ʴXvn쳏?8?��������NjS��������Im釯_/AaćEFᓜ7*u$dQB;gε3e=/:0w'U ��������p��������8 ,^tӖ[g7Ȃ D&JҿaVvQ0 "*C)b}1 }!Kȯ;=4W��������݀+��������N&Eew]GW&0BX)"jY~[Qvd>A%*]h?wYgZU.ZG~{{��������4hN��������'~S.!LRľ$Eb'* aIjjҜb[S&cTNS2ӜTJZ-Vm,{^;[#?ܜ��������]p ��������x[r_K?v"a&?J(Er0%5  rDSrݦ22LJ\T8_`J.PAyw'q�������w3)��������]kȥ_rqÆ80 i5DUSoCF�D)p^mҺarX{ywrGF��������J. ��������x.wl#|]yc3AªXG&)m'ABԜ:.Tn[՞׍6`gJe噫־[eѲsȏ~pcT��������hN��������*䧖]r[ϼ`j0F d.`2nN(}lP@7(174*>><FcʴTJў^}g'q~/��������; ��������l釯?e[/"׍$ I^$,Te<Z# 2ޯNUnz0_UJ tbh[ƻ)LsfO���������xN��������+> nr83PJjS>ÆOtJz'CmJm+& ]ZERTIdӟv{~kǎw=x\u���������oW,���������on"Ysz_{{fDI)y_&1HY)>CTb&_W)13IENlITm.Z *ǏG{f{���������o[��������?e3/X:5$>x2ɛL:5)ƒR1 ɐa[aLi5EInRQuefd#r۾gto����������������ୱ+үl`ź֋ui':`4+zYtb՜U`S:B)ќ֙r!4 RZ)ћ륃ssf7n|nǪ��������_���������\i-zÆ8,NJr#Hșߚ'1bU;("}$Ң Qu8ERnE}pJp֓ј<7,;n|衹���������Lf��������U ?x~[K\wM aFDV]Q($e.D2Z&\RPZB ۘG?~ L^c̴ oFmBVQ뚰FPB*y5f#lksqˢe_>ν~�������� 4��������?G.w^&IJEi,M*D7uCߨc RZT6ctJLK>rآV݈bZP,ss?կ_?w8?_m�������� ��������TK.\.Xk(I-)cщ HnPiIɹ YjO 9x29:~ݘ+JL.F .tbI &׍QWZO@oCssg7n|~S ��������ki��������+:cM[n9 bu"-%LtIQF_YС:N KnWI1A^Z<ihM:̈oMA?kL,ߏgz 웽ᣇ��������U 1��������.5wu~[K\wt݌HX5EMB:+!g#-S+>c0xF-R1%ԁ<ӂQȄT~mr<<kڅ,Z#?^w���������/��������7?ԲۺukHU֡#7AJsD0\ѷpLWĤD̺oA:Z\kOف\IզSTJv %}n>Rs f _+#.4Z#/9mv'p~3��������_ ��������-rٗ?lݵ׊L &P%RJ=D sPQI(ߞRJ~ TM5NOUt1Pi|r9CS2:h'?ҡ}7n|~Ǫc���������8)�������� ;7r7l 83!F ;M$L#6Xb׵T<L)OGv�J:|,RU$t}?T K]2AY5δb-%w2T6kѬ;v웽��������)��������.5W][{_o'$bi 0' ҎU@ݦRo5}p+_}\]dʉLܹ*`ZyaEYaK;9Z>-SJ̞8=#s7G�������� )��������>Zv}[yEd&FtFt)`B\xdޘD1R{oWNe\[e҈/'ӂ)N n8ѫSBN)ӕftc)MT;/ZԜk]bl7D_ Q~?/??mCO<8?_ ��������N��������,r_`kgt!0(b^geذZ/Ic (dR "%E"%ȑ#W\@<)Hp*jWU$=yeqGK7q{<V��������_]��������rްA]BA \2oV`P Ht}kJڄRRt;n\IKNv|&.RRSZ߰4U:7Vl\8kho34R;)0yLٮرw\5,��������8} ��������`[Hqy{օA aUm>DS>`r>2 lDG0Fl%uT~HH RZRT#pJ>]0iNyPI3Npkb?^fNK;MPӤy :/ݯ:kE W~[/[`c�������� ��������p?ԲۺZZDf&BJ`$J%V`,E4 r[oA)$AI|oh1+XB+`bF㻚Zhl"SmP8,/EH˸9ŷ<uȿ>}v';o ��������No!��������i_!~y>R}[FTDL$/ɭ%E0"Ne9U/7#p"Q5b*+};RSZ-+i`>XMv8\I =R"CCssf=ON ����������������pZrѦr?!v.5F$gQ֗ ΎɡqZ1F “jfJBpE0mQabiGpJs%2+Oi?Rѭ3R/|' `Poρ9ZTz&IJ;v웽ᣇ��������Nm/��������n";[+׭Y]=6$Dk*| 쇡.� ǷPJQϴ}0aIbr>3D5ļ_׍-Ad_7>fELib _ edF>[T-qY+,Xyx98ν~��������)]1��������p9>/mzƇVI$k'ig) J>ܑ&?\;Bg|)Lu1- UpGTsJDLM,f\/3cY^,QT3ouXqĮWu?>;��������R��������N)g Xw0ZRtAS:P"UdюC.D p4"i̩T'Ax}S hq7'W*6Nc!*bƺc <Of^U%n2bҡ7n|ncո����������������8ͷ7l 8#$�TpdW\Dy iSɛq&VHDG1AR("POεd{'C/p903e:36S7-[L7Lk[ˇeĢ5C]/~rǾM=t ��������\C��������N-;o}^n Yd)Q#:0 pꎼ^P㨠HTt&1RDFzcXRi[AN0tpE5Hn>ʜS_Ӕ)je}vFTUyKm5wu곴^�Li�[O-[u֪ .ds~qW��������kʷ ��������dt|j%_ں .\-QfJʼn:WLLL#Fi24x \uhb_B75fnTm;?N nO>y2}]՚2 i\XմAԴ1ysYeuȿ>}쳏?w8?_ ��������N>S��������8+=lݵJ33"A r UH#v$7 omM7^1رGws}Qr[I T)\ӛrLH+p/O0fLF{䴒1~Xߵ'| *s{g7n|~cz��������B8�������ryްAN¨-jHM%*<b%![ߌ[M^!<iCo ]K+,RFRHŵUeeF CS:ڿ TFZw<9kL!=@4ڰ\][e wطyG��������prp��������8 . /wnG׭.|BDV, N$J t&(6R~`e`e҇bZQ>LآѦZ]7\EhoϬ `?A:nWSƄz<Cۘk-{B^T=jMaGJ�JlHeՙ+,Xyf/^?�������� )��������d~n\r?tWęr.0b/\ƘHMDJJFRD4xx|ФSTdzPE&Rb7uEMKy5uQjf=U1KNTEU<iOsrˉH֓V{JH 붂*e:~7zѽq~4��������ݩ ��������x7ZrrɗݿcRLDZ!)A|TIZ'dRRJ.!7ڟL L^O(Cƕ.3!n}GbЈgRg?:qW~BT$IDI[TǫB(&S<bqKo޸;U��������w)��������w/k7|߶A"ҷ?󧰆 M>jc GȻ0-RSZt"*'ѩvzr"m=e|t]L^́EG! )2%| u R&N1mN1EN&3~14~a;mCs�������w��������-\$nU>ߗIC)Bi1Fj %tDOBM=ĮsTP:Y::|JjNǮ9jK|8%29î% 1e]1協Vvsp0Iu�e|MI%5UsW|=cs۷GW[��������w^��������v 7.侇:cLbQg$U jq4\؆L,}":}v~Jf0!*ި'ƘT1 JoK2p/ F֨~떒Os"aNikL`xT)V;;r}xymg=8?_5��������xL��������ξ/o5KIõH|�� �IDAT6ZB `.0 `(QB#e:81nwT|^t6D:;GK YLm(iFέ&]eujQܾtM�0%8{h}]'_eZ %].9.h?ĺ|%/ۿMy��������xG4m���������o+/kC7~{X0b3F>!:PR 9'pVZ_0m´gשlXj)QĆ$b#Ec vQawC'BܾJv ֩7i&1@ƟeV iQ}$v{ǎ}у��������x h��������9E;7ͥW~'DdU j #.3us{ް.5ݫP +I/#ݤ"atBf9m-%F8_/^~NY4zC%EP43h:˘CC~o!ur6 RxyR^ݪVV[/]#?^��������Θ��������xk{ÍK.g\FDfZM攪j# )(:Ѩp/H)۠]bqnC]:Om^hRƌ&tb8nLQ 0yjN &uMnQY!ۏ)Ci#RM/\i4rI3hձ:Qzy ġjՙrlO?r[<ģ{s��������#�������K/K׬_/1?zL\@%@JȟNJ0#(i!ƢC'z҇S~ZvpćQZǑP8$Hg?% 1yeڷS\ߏ)ꐉئJ]u^oR.|eއ7dsZƬ+ټJcsL퟽{sw��������!�������ds⻷|o]]'!̌<bfU =zNUJŇLiaђC1>HR)Uھ|OW>Nn0R{Ɠ_# &죆ꦞjQꚧ&ͤ ЇXB}OJ\tLW SaVtpE[&==;wݼ4&��������٦}e��������$Erg?ժo23/:B#HN|X9X)4o҉ ѲQn3i$YnGi(:b!ӥ֍>ޔ 󫧾s9e>)2mc2FJ8%ņR訄JO I֩k|8elhLT*PK\/N8澾_=b5��������C8�������й7ܸ/=Y#"3yO&aN\*,-D^ODΧ iFPb2M BVFu'< ;RD+1k9ή_mIعuc}9ʥrj?*ҾC: ErJbC!zFÉ n;8.܌u((zdP/>|[<{��������|N��������oheE?|uKN}?iTr!v.T)o+]0e_XQAYDt`QDxxSZOD]G2 Bpiۇo1 <vn|:~VD_\TAh?m'S~4NZܝ-(u0d{fI_oM83^=>ҡ6={1��������o*)��������-?G.ڸnڰA,Xc F`s .�b"f]qQA ĒFԸ60 ӏKJXET[zrRXFW̜4։!ĄFņD&_44aA^80SDm۸̰˖</5#馲Ni_u|uJk Χ4UGb|=O7{T ��������~= �������\pΫxXru ~_DV$6?vC&75^ۙ׍?w-%v ~K ~}jQSK;Ӡ_C#nR)ϫ ,17\!=u}$-sj9,G? ƹA4uhE&3q_6N~Քz`1~Wj`gny/yE*��������_u��������_Ź7ܸd}[r͚QSiv?D')rC$S_DRR%kB/:]j#QȡH]Q2uIOTm&~/|ޗxs_]L4/okLSrm^&P~D6niV}ߴvJYhާ2Ǐ>m<c{��������_��������~MK.\.C-f"2cZPJn*F[OETFԩj]ZaƟc82y࿬jSv:wpTyy V* \ bjlQG\FYLnӫ/k:ᛴNW_f;Ko3ơ h:B!44DlcZp64oИzE0bU.Cz߼iswR�������p ��������ϑwon 2!5vyh$DL!v>b0rV5,B0yB!f&M,e9 BujܜVK@!F;޴`D^Z`:tj`) 1tyr ϵsh|r}iuGOJ`GȰi3ƅ;8.|:۔m~ʴy@,11\M9q ܹwvzhN��������7`��������xc˿Xz?.!\/!*A{?s G+DH7$oI}.L+JGeۯ.ԩ?~I,n5`7M5&Aƴ)u�H_qOI.9FcJ+'d6nxHkwz9y0v�9.ߛ>ߋ3uA텲jɘ:TnJݷㄴߨt䛶46>k|W|G?xc��������FT߉��������ڹ7ܸ{n=c八(z4$6\`Jӆjr*u~UчM8b46,>4Ә"*tb9e 5G nV i\:▙ a&B5Hi19ъ2mL5ٽlLtjQDiSfZM2䚴NXrmtשTǥUj>J^%<}mrG����������������-rK߿c3)cK3*)~V Sf:D\Рx(?}C>b.6Dn+WipWux[砖61Q DapA؇a̜s-V넇w.:T2ss} &auB޴fR%G'f fVMa膪L9lft&<OtpnnM۽��������h�������ݢwm6lQxJrIo<$?z=!>ҧbI2� 7.D3̢Z]p^C B%0Km'2%t2u3L㗩t`W=e'|ſoh9  ʃ&6pXT'bƜ|=&X7T⯟MjV' vطGN�������t���������n"sw^o~KuGUa%taW?CWNOƻ 2~0? z\Y?o"!<B9?RQ~y AgPc%S3OJ[?,ͭ90D]hB\2=fW6M8<)ZD1u`NgEkt<_΄J/{5oq>k[oy/yE*��������$o��������8={ÍK.wֳVY#"3CgTJivעJ6pJdj?^ )}ÍC4*SC%%|8\`U(#?ULӁa;q)~ q|~F뉾vsDVIw;4.c+bTj<t&+^<HcB}H:8w'TtvpDO єQ&_kٿթO A:~#m=ķ0�������8ݴ�������iKO.׭_/ARԺ9trI*�:vUy_qձ6OB\O*T*bqc)Y; & Y9*_Pe(vUq4J'\D"sgh khC}ӲiMTu{g~4Tn'&PM}?�ma!Xv婗۷ q�������4F8�������pZhϻ 㹈%C'LĆ:n0)jEmSZb UCK3J LX9B)9l{R=rXvNZr~%آ2!.q@/ HFЕf y$:Y*48?LU4z}po1^HQ4Ƭ[H% K9=6 Mhx;w|T[�������p:p�������n"sw^u7?n]!NӐ *A5M{_-'!POԫN(�J>頖EÇdԓarƥ} J.T韺 ER0B}67- )u;_};;Gv)O'%V }bu'!g$һf&F$j񓔏c^s9x"hL?zEG<PL(Qg<cw*3W +oܟ,^#?3;VM9����������������ν%ݻuYY%Τ4lLB }80B:u2cj[p0Fv2%ZLcI VFQ$v[9Hѥ3FjV^50J(sѩf.E]'MZh: 4xME;%Ru8CESBƛtJkJ8ivC2}? |Q4`*qܽSB)e|egOÇo=ķjJ�������8M�������S˒.֭_̈ j81a>l0Dnȉ)ۙAC*{?a`?*< v WщnзJ3qC,TKtV*1Sc:k*9[,pJ&qu?Ku.TӨE~*^>T>ߐ}@'g SLq/w*nj;9RMb>FReM<6Zf|MOE?i^:x`n{ynNjT��������o��������J-?G.޸nڰ!vݨzqa C84 kUHh ; bȍ&b7{nHߺѿ+:"Ý@ڑ&tEP#y.lSB 4;7޸C :d/: :nhƴB*B+~),<#}b~Nk +dZ(D0*a^pLiL)~l*S(N?^o>z@5S��������*Z��������p,\,+?WW/-Y"2iKSaLDn(u6!]s提Sl+j"ꂕɺ4.ĥOA~2:="p$oh[K %LkPJ[@(Jb( kH]#[׵q q2-:ծ}y_ |9X@=m/ayKl%h|Mc%%6i"veeN# MHW#R䝹2yTmg澾^=b5��������?�������p%k/[ZfDLЍIATpP!T747M'i*HADr^]}B!n?=BQ&TGcY7%v\Hm+:ꦕ'o %p&u >=T-H|wyu榼'V@Prs4ƨM|Ok=| JT-%gA aI8vL{^4c k3/>|p-xlo��������Noo��������8 -r_n(2tDR�!kLT viCUӅ߇<>S;H:CQr+J#SX<?Сɇ_H`[։Fwi̳T+.=*'yƔ`fƛoZAWIym.j5mԻ|Gnэ#v>Ai'f2|xJicR"e:|i% 3aPT$auu:MPM Ot}6=�������) ��������'ϑ|y7m.pCt-5j(N7n0!`9߼ѯf3+Bn uc:@|XmJ#vRcԍ'QaRf:hhZ릱s8EĞ~y>3jNr>륯UO<S#/Dfz>+M&Ez<_Cu߆z]j]%m3-`/o8oiQE)I Eクj$zaΝ{g_=X �������G��������dg?Յy w2@npaV}F}n 3vxBUF&1z^L7PԇFvݔfRB*}HotNgZI>|B fzm`%CrX$ЉǷ֖Iqpojf8m0<kٸyk~iqr)!217O4E%5:"Fhu4ajѥlK;KSb|O;s_?z�������p �������8){ÍK~qZ&RVK T9Mj$S2j`߲ZLA0}ߦl oOm,]ycJUgDZԜbC+bO\' KR) J JIPRcǭ7ϧfvTqYlS*uC F܎THT8W&iArA�KݾfM".Y Ti6<*\8|DE<y�������ݬK=��������bK/\./Y~}2#U 6f@BrAgSz5_LB-…/Ajy2^6PCty1k92t K;/a?߶ʯea]6C*ƽ@r`I7ä[F>gr=WPf7[ʟ0LŰYwe%hP1n) Ks)oU@Ub~MKSj$\�� �IDATyꥃss6w<&��������$��������N W_tۆ8,3B@OJA}SI( p +)EP+iLQJhz\7v vACn,zK4ƣχ:xm& }5R׳1&H>Nd)ZpѴoU%х^GLgWy*[`GQD?Qy!Q}G)zl梏ßi@чi쿱 jLS/޹s{=8W}�������̀+�������x7. oƒ+tAd?0$yp(AlkFɌƌ: P7B1A?p/s*ԡM67mtiש>!�}Deo6B<K& JuWOt�<﯑[@n2AծJ#KNT]l_-S"yZU1mDFn[X_)TІ 3F9i8qLJCf$ߣjN^n[BV.~O6A]ro]ޕk[oKWȏ(R�������{M�������w޹7ܸdn=5kDd7xe"8! i0]ŕy1)vTDh-/u&9�M8n4\=FnX*BAO_?FsTjt\8E=7u'v8m[?_.U>_a4f׉y΃KY(#zbbYŌPB5ۜS$&c&?o&sR^QjnQkG_<|p';�������wZ'p��������iK.=m/Y~} nХ"npRNτGx-Í֋'رotILWK> `ӂd|Ve!Q6Di1Qrי:OǛ|ƾv)O ʒ_im3Ёat `.Ic?e¨6qhffu8,2yRCAkc ϓc2ѿ�tuť]t%z}q} eF*`㩗=3ynNjT��������*՟�������x,Z~\t?xӆ 2X`L)R.`C>h4%:R=4G(Ou#TdD)Pل蟒w 4S=wR ~t^iް)w~ .R4oAE:}/c6F$i_w#샿T|nF; 5n]XWuuCZWT ZoA=۰\5L'6zZ'J*)S/޹szj �������� 9��������x{u ?U+{KBRs)'kE!Ԉb6y'1MyD}DT$FJʫ֓r i.ABJsSA?=}} %PA#)4HC|B5LF~9mDLaԜ".XavKWig|zÝk=FKu{ H>u|�ic@cƓj:>MÌ٥rSq=m?zjz�������x;5�������;7ܸ/|k/JM)5<\ $)#z]0)kt \ۇ߷,pJ4OOi}\`J=_5\V@YW8zypu,oJJݮ2_5TFPÆʲQN50L T =>KS.鸍 `D`~0ZsdB$CWj$ ͵L 8! .qCDńOt7e,>3P} KQSTۄwSOzCۿ'8?/��������߸�������[rrݷcׇM8E�C +t]ATJV@~5tuU8E0y)a)>o{Q^#LN3H�7b!0rpuy} }=@|{J!54#=▉~ .j˩O;5ֺz&H2f{Qݫ&caՄZ-DM)*ARA7u4W Cnx%bM5{czssfx{vk��������[�������ҢEwtM.SDy[5:ϸF P2 %@l_De?]|GHۘ,&e)@(e7帺*(^7NI_:"/gvU -D)![㹤Q8%4[#?\$}_D”&/ 3uO?S̃yOk- v,a.v@)~7 &UĬ*=T]%en!cWO_{j^<{vܷ{\&��������o)�������Epj_~uQ(E&j)U1XYGi'<_^Xxy* ƈR_rD>_aJeZFyZtFhTqHnRMBjOQcu*R /h6tY—|kڙZQ_1Cی^X2'#S8~R;{pCVWlSs22 [UQ4vgG[Z-LmGR)K?{KKT!X'=0?0LNFmk]t&Fu͞|gn#/6&�������7הo���������x}kݺ ֬RgY*pP/Rl#D\:*LC@E#64~nzʏ 4ʋ*aqIRYl3!:<̮b^tp'l$G97oV:vĠ6DM%'^=^ZOmsl6TAgՓN7F~m6Ch/(Z%m3^贮 k&N4}9L]&}_|Çn<wj��������xTZ�������Ͳo5׋u;D1ʓC&gs3E]:R?$އ|hbjj:^Pρ)Wm*|\9FkI:FC'V碫B"ec1ر1}i\E|>*\NbZ({WLoL%4Gc%s,6TSB Ph˥2A:fyUeO+g銘-+ݤ"M}KwE!3 SSJv4婥EK7[es)ɗ>;5��������O��������x7wmnmri0.fhp-'O:"}J:P}݇Sx6)LB2h4oe9`+S %3%PN]1>NhxСZLh@@ݘPrAehNσb:74߉(”,Iu-1y?T}jb}㗅S-A*PH_ˆn~05GMZJ|CǮ)Ƈc.c~hS+Fup5sv _O{}G+�������0y�������7Kp\x__u7gt5ե E'U0<[R *HPw~> L0ńP|hg>*|a]rZSI{.ÚN ߇r D`vIޗ ٖD_os =|*Lt:@П^^TLuzς_O]K\M}s6G[=rA>[|ۈ4Uυj"BƵ(.T-`VVr% */? (AGA %P52ώy5rgny8>1T��������o柪�������U߸/|֪5kb5LrGa>H]=`ZϋWEۜf\PcM&2rA0fQ{ޅ`IF>ҊT<\?Q{E 0kq!*Fђ.?h_:oAE]7EΦ%tfz}HOS澈Y+-.Շdl"n\+3x"zelr,7xo6~WꮩlS/}Ko疥9VNL7%dԼϚ),wCkz=um?�������W1��������1g_z\t߃-[~pó}Ҿ臧9u2Tx#?{SJT%|uʲ%_L^DZXzǩ##Np7ms}I|:BdC&U %5?֋CU;3&hM3٧HU']ѾRp>2>+ udUl1N3O-<ޝ {#NH>8\a_DЩ~Aҍƈ0:RbD{lxG^?e.AϣCVܪM\)|g~Ԩ��������~m?O�������-^~Y{Woo=vQ1G1lDC?{ongUyR!RB*Զ:PR^:BULG0*ѱ lNvNpf{?kVIw]p~y}];U}2+:&4 >Jޣd7nNޑRԄTԅk6)) $sXQ+ cR>j+qNע$ĬwsIxcEQvOQ к}B鼍sĺҋS">j@k.d#\"1-G0v,$t]*Mp'5: ̊UknW܃N,uuRC+-֝^t޻tu!B!B!}|%M!B!B! z{+O\-r"i# Nн&]~BH$@n'p=rMo\;Tz8}D\+)5tٰ-Nn/Mlhdd}*!vju>VlCۛИ#S${%ىu2)B'ѤλPK݁>H KXk- ʤ#־FSFC VBqJU87=jC9DL~#Sxrr[Q&O,Z֯`΋Lp~`{ 奥/xu o|{\!B!B!!o !B!B!O;cS.Ï˹wJ1] -mS}�E8T{%@@1u`WCbC>Dr7M..U\/94A Eq a)(*u݋%u8dZAbE4~i[W)Ŗ�U1$XU\(zT !YRv}fDQEvei(ÊVSlc*B1h'pA)^}7 clݡ% %[_xy͓B!B!B !B!B!꧝ O{lY{ʩF=EjRv +k \uvXQxI-d`DtH:Lhav}o0z6!M$ vLj5'0'u:8pzrH҂R3=l(ڇN!~L;gߜHf){9Opm6nIvBSmr/)jvD 63N,ٛ 졽Q3lI RY)H4gӷ\ >7,2RF&88.wv^y5!B!B!BV`L!B!B!Y'6}9x22eu6Y\g\[B+pݏr[{]*9$K8r/"YeXҠZڠC񍲿Hz,6w_@P`8!Ils~_\%\ h};x9=3!tjQ3VS M#:pY]6H34ɯ1U0JXQDӶ*D AƼ8U?te ѬS;kƤݴ S.%n᥵).d( \sjI# D.C}W_wzK/zwF!B!B!;?!B!B!zwN׼?#~Dqξd/Ly^5J",aVRTZJzq(b}A6j޻lTIi *x&T I81EH.!o識OPK[\=,k0c,uܸ5ܳ&CcM['\`>{)="T&QT6L.>ZFa(ᄽ*4|h% -(ѕA(I܁DŻ[kˈ0v&8 }VL?Yrv̳c'Is߳~N 7kkM4J!B!B!`:B!B!BAѧ_uժcfN)23Guh.nI~sd/HN-#JtGaNėAY:v:߾={N}0ŸHvCҔxK-j:6M02+S#  I&`N%=9IkSLu)u=:w}aA(B =sECqRGvZs$H+DUΧԵesʬ)ZO4_iN+ T;jj_iatGٞj<F<:Pr߉r}SyyY!B!B!8B!B!BH<ArlYwORRPD'g=LIF`\ft.9B+j>7Tooʭ`E%qKwI :d("̉J@0GZ.mMkϮd&}k"N7Df:נAtiBH9wTAM]$~vӒZ V;ߊ`& nJlwB=:^"~8exU@hJ$DgcdZW{nm&q™ْ6vצϹ M 4rD{$<p ;~ׄB!B!Bȣ3!B!B!<8GS^}'Q7QlpD F1WZ'P%^-k">[֛[GӔ>jK}Ҿ46xЮ)2:9e ̏jPB f&QŬ%v+0.Xn@G"#:@UI[1̷pƍ;ϊ#5%f@o$-ZjYEc "P1r -.*+^! Dm bo'ۚ<^WЪӂt;f5}CĬ)Sb5ooǭ}I!B!B!C2!I[�� �IDATB!B!GV1ʓۋ/:d5-E0I>zLL.$UL憁z't@;<e`$p1+ྪkq3ȥUOFa-J]VÉi6άu_\@`D<rwik7ֹ5+)m*!3ELHr0^ly(:!PƱ"?Hc 7Fκ#C|CPʍs_xP؁n:I2vj& oPAUXLX`7Z9DJ 5@f;,;-Z ]}q !B!B!GjB!B!B!?Gv^|U$Ol䁟%SOVJ Itǐ Y:!1LnIBQXSzoXKHǡC6Ԡ)kL$R?\F*FRԽR :;R >^0?@ua!@#{.S い݃vxmT/E$ciu\k'rVN_!:hjqKJA`r,lm 8|TG}Uj/ZYcp+~fc+HDg]o|培Oe!B!B!}|M!B!B!`b<u~SN=UDfN)(N@QJQc޹>9A29%A7wA!U$(%"tkp:Wof)T.qO>R`'`lF=;[ xaLPlcU&eͦo!]UD6gCͦՏE(5> X:+J6뼁b:BaQW m$ dOx.[ *\ -@H:bc&qB!;Ё](<WPQ8./j_ͱ (:Qt[u]ը6R9yq C̐%\] ;/{wl[rB!B!B9( V&B!B!rqcM߷/̣D%QJRw?o+F'q[d-Pl Q9:HFۘB/lr-'Tч b PeXhTQǠ( <wJ"-nO1⢇+2`ouqtPxүC `ߔH"יhN;:MzAB}@*b^fY18օx8Jk>nj +lpO>T;Q\-Vu/q3Zƈd\- FlLjxJؖ_h5Q_z۶l{w-:B!B!B. !B!B!$t&}}c֬N66 #0n)ɑxD Meb(\~‹.r|k >Y18d6CE!֝PB dmQ%pѦ+Pm`IT']9( R]O.veκH'l2xo`|ݨ]XY;]h>j?$cʀbh n+vM#Qk1F\ 'Ys(13q nG;0SAHa<"MRD JԂ"CkPgюͬRV˽6$uC_?]}qO!B!B! B!B!BѧiU͉F?YV"M(/vс(Ew]N_1dh]J 4v~&YǕ,9(B0ːJ}qq9$Ea,C7XWh_*bWrVыPSP &H|0,%:N(oǘ4Y,iZTkI\X6@ E̾U*.-pEx^ u#*@tV>00{Kq l(\)%{(d vz(NpҎ)6lpTQ䶬;?D.-Y덯A!B!B!WL!B!B!<Aw;NIq.|+M0]\JO,r9NnuyKG訢1L #qCiSn@]q0*Lq;H<Vs1 /qj%+QxM Rw)H5 @ER6u$rڜ8ˈ$j-%5H[h9&GiPb^EqOQCD{�rdSm#W5>dsZ avԹ~jaL)0ZXe7߳c`#B!B!B8(N!B!B!{̽M?p/^(Q7uK19%#LyD FV`Gu &þ%'%drOi•ٵΪaVʦF ޷_WTyv_q"HahP=kYaA2Fq]&ݏˊ6KZusJ? Jp̆(}M5<w2UƒօubIݑ5_D(w� Ä"Ntfn.R q?G-+ .RbGE(*1 {Dm XJxRV8[35 zE$Х`Ƅ[ͽ;ͰD8eœzBpك{?ض}e޻k$B!B!r„B!B!BCc7rđ*J1YI;iր#LH|)u^sƽpcV]Q@\rI`o+8pd'x*.5AָuyB0EQ (&1eJ/.2$1zq)v<Fb;d\D(:])ST\)!xRS\v9ccQa$n^ųI7㩝Ɗ_&?p3H6zC(`/վy5H䠂sA;ԋ@ Z}). n?)8oh|b3&:=?[,/]]w^1=B!B!B!dB!B!B! Gv\~g1$g"~􁉆0 mS.%2}lv5A8ohW]cp-ټ*x8&Cb}b3m]^bgwт]=iC�hsUT&MzG#ɰ~ )v+ ELZ@!!3:'3̠H((N"ևRd"4<5; Sc<cƤNbJiM]WDm)ҿ )%]sQ^KDC<5h/DŽt<5?u]o|o}C<!B!B! !B!B!'ȓ7Ζu?v"3Q 9wE ODrgU_2+'ܚȵmHWu5iT'KLzފKsh`8P6hE;zQf6>!E¤(`Iy[/F4d @`[s:s#i%HDG@`_>XܟW~ҡ3tMr̓H$fj"a~ D{oA1JؖE1 *%`"| {٬2~p93T3j.\Fk;0I3"j_o-�x>kaSm|ώmK!B!B!aB!B!B!%=({ե/^Gn*L)@4!>;$V$g9 Re7mɖWNI٥">@gvo["B4QN.׌`u'1 YQRDmrMu Y ? Z ~@C/ OS"6 ha֏h=k:J REDE=ױn5RK,hzm(#-Tc<3A{zHL2v2$rATWmB"sQꨋ*dB1H vQ۩ qts,S"7tۮTd ,ӌk%KIN5][۱m\z_΁B!B!B7F\B!B!BzwNk֜gԝD<R$M C>٬*Z0 &{f7 UZ^}91bYBLxR׿AzA4fsIsG (1 RQ F@ Gٴf)& "6 Gm%E_ ]Tt~=kuX뗥 D }*"7!LJl#+a q.)Mj^Su Eժ?Q(3;dȅBMφ0xYBmM;`bv2sWd^ϔ1P=%=wӛO> csV=.|k!B!B! !B!B!'}ڙk|ѕW~O;Dپa"Wh %tk,;KVPR۵HK_ADkギn$btZ0뜂.$ئ]N; ĭ.7Bh O[; \NC ,3{#=n7op-*a.3~gk߷^H^ܟgS y!WQhj4Zehq+cMl] k$X]T(A1lu*cJb̀c>,ZQί^ϬWNP7 ;SΒ䷘+χˋ_}^yw\)WB!B!B~C/!B!B!nus%F׎˙$A<"*JVIzN]7`2Mv:ӭ X)AR Lzc9D|>`Sw}e FA@ŷ ؖ&6fy9wu-"qRZ*ZY ͽ7ESC0':OVo"oqr{a(mպ .k`S6H6XHPxiU^̢k7)lD$(v#vdt#ip.zኰ [Dv'Z5 VdsMV 1] sٖض B!B!ByY^B!B!B!?k}!SԫJ\>v b{%nii2,ZcdB?eD(߽3041.A^R+Sl _v%h2LnE3N4;s@BzdfJgRs@E'lg\VJ<1i(>rQq3x{nEk]c̗ʚ\Bpi /;G+0bR]=G UL_5'>5BA @`1#g 1Sr Ǭ?+^DjlmZ@nߛ6v~Fys/o/^_gw/u񚞳: \avl7 B!B!B!(WɄB!B!B)6WO<[.9dQ lvЃb%Hΐ4n8sL#ABkRBP K.ekNw8s<꯸1|KЍ%X_YCPP1Kr #5 aI|ÍuA8(5IF)Zc!Q]: dڋȗnc^>?~aժUrg_"MSsXSRZJk眠v.A )Q0@:HrؐD=YPSH<zZ"o$҄M2*}&H"FoQ3n|OEA=Q_ ׆4LS/J!O]y7~m^!B!B!D@!B!B!;ѧ)~\$B6'Ǎ }>Zv]jo9k $#;S~(tE-,~9˸s+VFҫ*�)'PMޏ i>?+*R@20` 7c)}&_%I~m'7ZTȼ>?f"){q=n?KV.k׭\)B9vZd먁j<Jh(QycŶe&*j;p=�&@E3E9'?m$ A h (2"zQo7j='(Q>,݀%l]ڳ{]o]׿mU$B!B!ek^B!B!B!)~[;SN)&/zG֛_ 'N)ɨ&e*Af<Xf/2l{+4–:tE$uCkM Otuw(A2g ĥ>|:}ple 7qrA�%rJX`Tڞ:(jPM=\W /foO}1d9_z8U,a54$I&Fvyq8*rc]F Iʄ#BV3Rr@ bR+(BNnmc= nnG- :H#;6X6.x@:4T|f>])V5qRʮm|ώmKnRB!B!B#3!B!B!o'?o\pASJWWZ@eN"pn效d97XksO,K8H9{VпKך+酮)Ub#BC("gv,cAKdu5i`Nzb4A9ؓ(ImήN$Ǣ?2_+N6Y^^v}t]'?dYdK_^މ^*N E[ E HrAQ{1H맭?L @<F6Q4LOnJC%JLa?<YEqؾDÐˌõ Tn,Ce_ χWSlzƉvl#*B!B!B!vWЄB!B!BlxkN:7#RJLNu9AiˉS,UAd#&&%$VN'GкY]%_:D PJ\ʇ\:-Zqn)˗6CCAB$82 Q"9E;z~uzdZp r>]~]2?nc9dǼ|C${ݚ}ZJN|KqrhmɅoxFK><"p)vJSY4 u, N E_4ݏ(P#N06yգSc&;"{xdA!0D!ӓi;68$`[z62 Y>i`K>-:;ϿooڼB!B!B᾿'B!B!g~ocreR!E16(wQ :YB}0dD:LudN7rOА4 v1ꤾ& \n͑r"%r@!KTOcJu08 'MGbf)w]|Yn<Eҳ+Gu=3 {o]6|lۓ @Qr_9XH>J|jJNl c�� �IDAT{VE^sG9*}m%Uk᥺[zX^tmqL.EP&8 )3"^h;+l}hww]B!B!Bgbon !B!B!7ܺeɧD6_/I̽S̲ڕkK4%컌x8|qꎚ`@zH؈Ps.,nBU᱿XĂcl(fJl/VC#IąL:(cVH$t&bࢂrj$j^weB"+RL{[Fy_)9fÜ?|YhԲj!,9\`Q8:V$bqT:xH(LcBRYPD"FqJiqG\y4Q ˝ vT8dW({eqC?~3~Qbr]+tI)mʮm|ώmKnPB!B!B&B!B!sϗC9D&”~�?w[.<$v>?:q $K:?gZd,ËJmNzׂ CЯ껾B98O1bVzFьZtI1qoua{7 \^|lq킵/:RJn]&׿|{'t,-=ry]<Y־<Y{˵nhg*$\ntۑl]Aqu%}ػ2U(a'8Paq◌mx;tR9,B7!Hm_6ӌ|X|JGaGxۉZڤh%lEp۷oy/$B!B!𷴄B!B!Biֿ5'/:1GII6NC~qo5jRbXCx _%"Ta3n.9M̐ENMgX2T&IL|7(Ѣ %"Aw%ET"2,܊V@"MA$Wo?5Hl7ˡ6/}d #ŪU@#Gqn,R=ඵQi *pbԜS$Z[|sDygc ksZoD*8qC %v( 9Ê_4Wb_fQgE(Ȱ"wtC^RیㇾϿ7~}%B!B!-~3K!B!B!瞱z7\u1ssYdcS&'kaDI N *I#X8u 5<0Z�%rO՜K@{-'?w},y-!_Lii)X� Rqn'E*ټw(M@v!v@ed19cg�jI@Xs1L Į](eoK7y_t,r</^2E2WWi4 Y[0:Q+ AEYDw^ܐ-U:)Z]|hfښX1K�t0deg,wul]40;x廮ۂL!B!B!"B!B!B7Iu˺O=u"J|:N:)qޱTYE0H_ik0< =ogHM:ŅGU PTس0D.=][4.[tias.11Ofw}6礊j۶:w2W ŊwU_ow(aN֟s#'yP֖:}by`OVp_1;dxL8suE]⤃Y |QBBp*%/Ȱ&6-% Q`i`qat1ź9DgF]|ʼn mw}jqJy/2 s%ܳcےkB!B!B7Du-!B!B!o쭛 .ȣ!wKθws"iP"{o%�:i#G޵FkWJB%K^l0*6X:{+' 9PZfraQNL߲ͫ?ftT`I X\g*n`M3IF^i/Ͽ_o~|[dyyNɲeݿ7*?x*Z sF(HLm=;{:XSD@l"Y9d݌u%qn&A(TfQE-.撆ۊ c:xkj~/FuGqQ[\k+Qc}w5#B!B!B!0!B!B!Ǿ|Z}R'۩ BǯOkkb@y"+NQwCm/J`G;Z\H "8%]qPi*^ B YZXgޫ2b:V=-I SetUEW@cժU_ Ϝ#GqʣLewhb(H2bOt;J}[!7}oR((rC*\` l/1x P F +Wa%0|1ZG{+WҰgW,i6s$9 jrqWrݹXJJ &zy7_uF!B!B!d_B!B!BY7z:I$F rK8i1Fy'!;3H!MAbi\Pݠ'FUDt]RZ!b)6>'&NҼk~.WR̮ۍ;H]amFjW&з`CNI]`GʔST:lv`Dz=e8f0=g҇?$Cw?ߺp]N~&Yzy{q*17)!5-=Cmì+<+ JV8 cDmܽ4"(ta)(wW9W aι-:v} )7z~>gjc9BY m@el2= oB89B!B!B!!B!B!B7םMI;DSP[3$^'2z&ǤJF%mX Z@b]F0 N$>TT GXĈ%*� 'OHEvp\vZM7Q],3% Hq9 @m6vNIa#i⡮ 1%" ~q̆9Y|9 xً8%rIR> *Ĩ!b',DTe0ˎC,."(LmxM䢆(}(h0 |x=jڱ–h9u[wN1v_~.:w0p\y\y%ܳc`!B!B!TVB!B!BȌ쭛 .0e<*0I &X/耄[хsZk&n {%k_7b O)1\:ٛk_uX~19iBinM;Jdѿ_MeQ8L)I܃\|oQ'j,H}+ ̫|z1{GpL]ж?{O>diѓ'u̓eΓ?r~+A!N0vjPl"yD ~d3cmNi0G_Z1Ys)֚?x\D {by(`^]o.>Xi/8꺭BV$k"ض#uB!B!B"B!B!BHa^so<zQ9+_k%ɿl?bs1[5{-~VuIO—5 +:Ql9)_{c+|FMWIڵ9E[Z~t5h,\dv=cP6썶4$`*b:{@](621\&סK~Po[o]\tSj*9ae/N:eKC-:5u+ TeU(I` 6+1a<p,84݉Ɍ0ŞuoH!)gqc%q3ϊ,2.3VAHgm^\aPnO}7_MB!B!BȔ:&B!B!G/Ox ]yw?in.MRHX]2d4P }k_6HEKh|ߖt-y0؈µ@iq*/hg V9v/XJ[(.iӈ T)w(�Av�u-GQ Np} 6%V`͒>ղ/}Cr)wF>U{Tv:ydǟ' K QMIz�E8~,? QK.&RUB C8hא1\3"Zj+ֱKՆ hN?CL,6wM:jB%q-(NEk#4L;{g"=w/+m uB!B!By㾖%B!B!G;'-N>,"baJ2OYBlgD "b։z� $G,:Ba'jC)!P�ɼEܐ!ɻlwHKZN*b_֟ /J6n%AEDz\Gg)1^nb,na MARSh12vpB{z0u"xÛ|/aN֟s˯SKPDZUWEP]"*K#vrX@ƇFE V2h"<NTvzԻQSZ*uv;q�%U;ѧ8!Lqީ˝%6j}eURX6y`΍:>'"v-,|K.wǶ%7(B!B!By2m.!B!B!<޺g_pFssѨ , �쯸Iř&dpo}hWS ܯB?@6Ba1b:< "Z2u65"kb@9\3a%ߊ]r 9&љs+PIHW.E):Z'Wtdb<93P N)3bv+˨՗o~<4>ne7.b֩g,kY:v֮mHP=D z}ЯʰVŸuTaB6cD[ Ol XQ Ƈ׌kZhژ9rFbv䕎 Q=@ {0YSt(~ oκ5H!B!B!B_ !B!B!Qc_yw=f(%p~ \GɾoNnqhM Z3<S|@b~ 67ϫ&>\ ]F2sjTM<O.vd-S߻,jvA,(AԵ:9-qfLVN$[`)m\&@MutMik$ur*}d⢐oUV3N{t/8GWt!U39e考{g!Á@lHuP41~-Eࡶӫ)^EO=D HxÈU.FXALm`/+4rXgeuZ4E賥uLX5ss ;gYs~x_F!B!B!&B!B!7ɯUlKI6jD &D'Ʌiy(dê䓆&t) BD\ٸu?x? A1Cf7qd XpZd�(WQEPLbc$>lKg \/N Cl8$/VʛsNs6eԀK ԃj詵!rߟz;_o$K>]z "q[He՞V6[5^ &NP;AInYΥA.qI9ĠV<xܣsSo\V(Qxw8+jڛ9`j.bS%*˴=xŕw_{ nB!B!( jB!B!B~~䝷nyɧ*QJ  "C@9J�]I$^].34u"qB;3kǕ/w-4iISkb4Kc2v YVH7TvxRkGMMR.Nr+Њ)EWD*hJ"Z˧?v[Jq̆9Y/Ț_~]%Ij,eVUt0S m&[= 6iP;AInDum}+!qiɒšͤ/0)>z,a/K0]}*׸3AI׏~Xfkdum# Beם ;/r=;/$B!B!_!B!B!Kߺg_pFF&k-' wֽC HX .< n*ٷ3zEEE9+0YͪYQE{uʳi > I[5$IBuZf&* l<uֳN/uA$iL&y3=n~|O]t]'?dY{/ڗ?tL۞RO=cʈ”<Бa)cF(rs@[Zt D %qx[}+αn\[X&E,t $Q;-z_D':-CHh;vB?Xbw:FKi#|Ꮬw53B!B!B9H%B!B!^yիSE)}8HiQ|,~ZL`NFF\a/ѷۉv;|OTDg djv%&W|sKIs0̏N@SO6VB;v'qn+n)Vcgo&3am$%)[U_i+&FuB2\܅ere՟'d|{Xj<H3gQ>&<(ΔVХT}6lkC 3#q6qU[I"XP8k MThò*FxH@8K"Dw6ݴ/*WņjyzY<(mE:um <hD-"Pz_̹_)b1?^^Z x[]B!B!B9'%B!B!'l<ckpw?in8 ia4 nmRpZ2#+_x-"㾂r�1mb<EbPNӄ ]ت(-Ѹ4IUP`/cK dLf^KLsh2sq6k;7<8WqMJ3 ֦9>sINڻO?$G|c/~B֮['O?s,=tytO)p= G u_x08/h׍X͜`:8ڹlH@ oSL뷍Ά_鬙*nr}_ߞQ| ys RD.E?Y :'}EQ@p�� �IDATG7iK{vMW^[pD!B!B! ԄB!B!rpwn۲:5MD)Auy_=_h×-dMl<mm+0\3u]GA(獉dtKvpWҰ_"H %6rMd/#^6w LGAOױ)mG@5FڷZX],%@~g5 |Kvv s_#uI"8"l"=xTlJXmC3kNE8WV&2vW@vDy 8_/aKPbvRM,,׎?t[ RZ p# ƴd-3Hhtr-ءpEu˶\rώK#B!B!B9c%B!B!/}'}22qK ɾQyʚGQ H8wd| !'+":CFAB 뮟Lj~R--8>$W&%Jul’l(-t'N>~~ޙK;XЍ}ǕC7G[dyyM<t]'?dYdKlccd` `EMq< ,A_AqJB5'8v9 Gtfn/ڔ .볜o#e3G 7|tʍdT_ke;0~\kwT?"LgqO'};oyg]&O!B!B!0PB!B!B9PYO<\2:b(Li6 wGɶc1O~C12T1؜YƯGl:^С󺵸Ħ @qX R@ݒP<Vb6[.)\}tVB^A6frYd2MTu7YLH$,X1R &aRZu;>!Yg?ٻbA/VZ%'l|^IsqӶ=7dr!=/=y(fn%B_;z5냧owX>|ѥÞZ0M`(9e`Ck8mk-z Ģ-%b18l,:`2=,t-}w\y71B!B!B9�*B!B!B5s#9^/ǔRf,AbpX<-uo@2$ B$dV<Kb67\8$=CJR.FǤEm*;:tƉ #Q– D@y*in'}މ:\R$ݠmI[WԬ!nv<k WL;Z1 jW2/??j>Ϭ]Nٳ?r׮=hBBdTNaP<܃v g(,`"B0XD9C؆ 4[7MВevju}L$Nxis-)F0\oRnGTwgUhꂂPR>l=ɽٽ7]yނ !B!B!@o !B!B!�wm۲Y?t,~$L) nA{=KJN׌~sJ='Y%Iڈz/$7!JL<jlsXHu%+?&QEBپFJep*6]X?~$MnU;?}EܻǏ-B>W??v̟ T=S"h͉Zl/9>c4~"G׌Z15Q @|De{^{<A_\P|pZ:j"XU`&{q,W�l;qk*@;n; ֛8<p]w}.o[BD!B!B!=+| L!B!B!/_MO8 d4$SmEチDbpP!1vPn_|YPwmsshɮㄢlk\8ZpIxNul*u{a06$'_oפ ЊMI ]NR/*kn;&"Fx,<ԾG}( G5MDŽ [8\'5/:Ip͕u{_7_]ۦku?MqʁKL&k OQ8?,/*CTX;DQZy^N% ]x?B m8 pZعyG Id(Z\s"s485yyBq]{[޺ԶM^)/}w]� !B!B!d?g"B!B!Hwᯞxt͑'rȆ2NO2&&+Uu]ȓs ONT+f,S~ ԼWs!9ᤔ$I*kỌSv̹W~NuT%ϜT:;N)V1R?7gq1N+5w 9`FZm)P>6 Q} XԶLu̩ x얜w+>;>YBH8∿xo}?~?wkOЯQp\+<p+: J'(C տ=0V(gwAqB gc-w8GEJqt9˻0JB0p^9ݮoY<V+&s.I}6dďi%x/Z>3A~qkP*Tpz~^=x\P !B!B!d?KL!B!B!!x y҆-ydGiCc^ID&*U3# #M\_gi7:!^xjL zV}|G,ar?`QRS(П\S@L*0<С�f]YB4HVgL\mS�ٛKfi^ tN9Aˏwg{xV(uL:98E3r}_T,ٟ{ E%8%4uѡR;Dօ%2O7X8ղ.!Wٸ񡋡ſfRs-y梣ŋAVߟOkV:?SX?ߴ{o]xۂ,!B!B!go] !B!B!d?wmݚ'+ OihCbȣ2{oQɝn) Imꐈ;|k?ւ>jyR?$VlDF6fŎumW q @]qQf[GGT6H\X$PLR1uv~naʋ?{8z(N9YIRxMڵ'>'&%z`4e"mChQDhUW TuA $AD) n\V`@љk!^  +b.IZHPm SKYl,1"?ր`eq߄DsVS3b_6c—λ-q۲ !B!B!'}.!B!B!<eot'k?!S_|a(:sȭ\:6i5c&Fٿ`ȡǝk[ "b$ЕVebst1՘r.\u0%{kQڽ:;2eYK&ۂ@`b1FmT kOugj˿O={%a ytgg+>+?[Edg;0:t3a_ݛx@g8sRM/{ DĝMbȹ `<%g{xNfeyaJB#:I_՗.;};;.޷Tc(q-ؿx_VmLOOl{dƀ\ h(Eܘ՚h@EhlcKl�33_!B!B!'B!B!.OY}ɧH=OD6EHFdJ$*=r\qא!UDEˍluXSi >N!1EtQdT8 hzaOd ֭Nv&6I&*AJJ-E4.*0,O%m#CqH`ѣYdC"W6j}p1؝㊏_~F)9NYqGŃ>x~OץϮ9Gz袈|oI& � B<QIՖ,~\Z?\pgu\E+ H-<t q$s)C*}vı]Rބ-4!`Pi L};#cI l)^Lyהi֋*,UG35PzW~U}܃ؾˮ$!B!B!< !B!B!X=7\ul8.wr(كϵŽٯ$T[ ʹ󉸵umo ,3 PJv/Z鰳uWt%~:%ǣIzޘ ^ޫtjlh�vqSsjƹH2kk\P_ eJ5~;𡱂"piA{o{ uOG}ot0|~^nWBDP|ۨ <j?T vИ1T0ssم&4n)e 0VkELˏo pYCV($jmϙMgڵ[Ui(Rh>̣[Aa"3${kF4Y"$ݴg7^yo B!B!BQ !B!B!;ΏsۖuzsDmA(@woX-Dk~sZVND&}+|vM7;+HX3~ .T/b<9ٲ8Bkkv=?MJbo'�.n,pL0. WCyu6)o#&L{˻ Zfv~n]W^t}틇)6߬8ǵkO|OH;UIqP gAu@mZ &nSlX)> i~XTAIk٬ʊZj2:~6cN=hDڢRb>G-t\l~`Inz`]we\rKB!B!B! 6 !B!B!;eξ4uSaJu(?_%yv4R>[яKGCAȅ#՗f|] BH;F$Й6\hg66]8W;]S}':E䦬D(H7C�aʬ\P:ܠ$z(,1}ͳ?miWso~+w]{խ7�)6ߪ8e“^c'#)/*<J RoxeSDlP7JeݳҋJDeEJni%c6&AN&#\ u;ץ#k}qSyF$_\MfKܓD(rR Qڠ=oxB߱}G;U !B!B!Έ!&B!B!<_=ok;%uDdC%<QER򁣇M*�kt5T\mN$v}"4TNկ`sR/˖͇ؖM;Jy2AQPҮV9ח{X:N_S1yޱ$0ĉʵ|JU2MHTb\~{E҂W`l9@uJ% }ѳ}G?#")9v#G>$Pڻ\w{'C%EAs bХΑv7UjSg82빙LSID?xւL6,K^xe_1mMiK:R3]&e{aG;j!KbRsh!jQY町x^υv-cY E+ S1[ 5%e/1㙎{vֳ<{oX~/U{Wqۮ#B!B!oeB!B!g{= [ԡ$S!HDSE*G(b<j=_#`D 2rh(hA@#!RMyk}~Tk|ʜk}!B,_+0{aL)b[@o=ż ȤhocUUiYZ|(5C1F6,t)"0Z 8\#:V;idF0Gg'D´~g}׉Q*l[MX`~NGת lOwf[``.ФN;Jzkٹ훾N0sȜbyEKQM9qa=ٍjMtZ N2VH~ /R +Q|cʤ݉ovkmءNEpd²}o;6 li#Bډklݸ)_FDDKNП rqzh/rB!B!BS%B!B!B"V;ٯ_R 7wF %vfg0semdw۽9ßn{1:. b/hTU‚P 'C}־USNZ 勔Ї' SZv0Y&/IcJ[\'0a\v D[Ɋc}߼N^?%,n qJW?{ەRGՋ <b(X*Rr$X@ql/VhE.ӵǖz[I%@r$bNX'�[@)je!A.jOvS=)\ֶɃ2L['kXOoqnQc5mu>Z|oz5B!B!B!O2LB!B!By9OY3ޒ'-:+8%ٺ T 3t5zN%P$a8X}N^vzơÍGZ 7k38QIX}Y[AL A졏D�Բ& !?}s8U2kwAq=?=Ǟ9Ed*Rɣ&1*-Jb QE</L*&6,HQQ&q:`v(:Tr/(i>,2ٱ58nm_,USGtv\21GC+\}F&P e{-D~(mH%)1CE YBʤgݶqկM�!B!B!<ЙB!B!{ˮert2pCG:tF ,낀!mutЭ@,m;ҧ٧bm@Y]QZUCQK\)vtqs׈G2-Tg 88ICpr/<e?MTP3 W %*/jUnYl<DRM=#R긴sc�� �IDATyo}k_v4mO"rḩԱdɒM7>U|#ɻ~t/;{8</YZˢ(.^7Æ,P,g7ހ17o! sGk ST] t6HA4 6\I*^ߕW 9FTeamϦ3%)'dR"@]lɓ xOe;݄B!B!Bȓ@s3!B!B!t,;Ct$}2QtA[ϴـ 5%}q(2գY@kҏb%[1:Є!oF(_&~,&ǽ;^_d~NW )` 1M>IOR2D % mz9'oCBg P"ܶI?#9eqTgNgϞv-圎n5KvAH'LNa2`*7V.C&+s;[[R ANtbL D"IkʢVeE#OݢMzm1K#E'ӄ v f12\@шMl?>5f%ocZD}bvoW;6K#_w B!B!)!B!B![~yH:)ޅTF q�f[o_TBz}@uPL1 .-S"A):,D;*aGstTbU_2N 8FNNp~$[J57>,m(PF`'x1(=r_ww?STBqg-N)ʆ_UrJ*:#\n..X`T>DF'S/JiQu XF٣45٭8[ŴkIi2/(�PS&5+<i 81. lEe"P8ڴ>rox%)mfu ǟ}l)Wulw`!B!B!f'bB!B!B8\g%O#-OrBoÜ8ʚ.> *AoKLW2/Tpo,"j' RAAQ{Q5d I&�¢Zx2b |EJ0C XV!sJ)_;ЬEFS *|IS>{>zY[>A?(NY<]1GW0{H)5h'߫,UY>!OGe]m=NQn n#kM4S݋*YD]2)n.uq)#չ 3R̔SnM,3- eNi⿑V9Yl⭬X2EQ}NRMY_tq㭫_w !B!B! 3CWB!B!B~s?c젗\)ҝrZ1iHRwϔS \R|S:UZ@С$M6ia}MwО@;9\b@ D-ml)6p9N[W /bAtFR(A`.O~OZpk!L2~";32jb!Y͛zN`|{WW˫O|o 94|?Xdɦ7|#ߌs/v$D)fmLfįJT]/ꄆ +FTd~:im)/Zm* 3 IgmEAO'# Emh3KeLv'#~YˋOjZ 'qjĦc`=L;d6ʋ,яx̥}JB!B!~2'B!B!'SV?y/[|)ewmq61AHk {#u96\03(LeڥxU` BC|};3v= Eoݮџ%xhF.h7'):ϜSvqgOT } !ZeI@͔1NEw|eo&iS7Og˱֜=~I,Q<- +Z N)'F%@`4Ц?٥Jy\,vM z"Ķgmݷ\f_"mEaH I&9jLʀڽ(Rb2b3TAiފ='{d~>B!B!B~L !B!B!da[1*QʐcwCNJ*(TAVas8A tPY5wx߬Cqxk질2}ء![񈭣)5GU'-w-DLt�p <YZ4.ma| DBa.`2Oc}447uzwn!笧 S7{8p†/\UrRJ%؛l)RXk{$Z+Ctn >zzh R ф'9}/iQ^Pxpm8M5tdQ@;fgq-5+A7mV3dG8W`z |ll>7'B!B!$B!B!䚥?-yxkYA5?gΈ(/ t\$b9oǂP " KNkΐ )k v}a-7nHjkTםI̜2^$mNlv@2xʿ)]1R5\NʦRD&b2=mZ?gG6= S7{8e)o|̾S{TmMeR3V|#@N(H)aB2T!(Nhx1u!bcNP[:UuPLioh%;I>$<i"(Iv#-c  ,eQbW=-3,>6nuk/v'B!B!B!B!B4+9]zʕ)II )Aء]F Wr%\d=`˅,VP eh]^0"cpxz_tz ֨}idﰃgc4cy-LԂums˜ %i"qsс'>Lܗ"<AT}lJg0;S{O3W@DМ{md,Yd{vl{oFg_ڿe`]ߛn=VФW7YeҲ)D^ME-+Hu\yig!J$Bmxm m5B 1fGq|{'u>'#I~.kzFzn6 >*i{�frM_?d3D6rq/\;]YB!B!B?/B!B!BH̲Zu?trgJ2‰.1#u&䤂{&/rbՖtdCӉ1L%0MEhc(GSƾ"H)cț0eq}{V`iV�O/Y^4$3e};VE=xL~7~g=fNY쩙S,+//|ӚeKЎ Mډ@k.-~"%WJ6*^5h3DM6˗m#%^~?Gk-:ܲfm{Q*X"=!`Jd3\⎶E}!${E xraF,UV&7*w|s݇>tU}U B!B!$S!B!B!Cӷ=eRIcvbc0Ibp!jd.agk։8kTy5Vl{3@]/0(�6U%n0H#PDE)A'ۢnƈz$Hpqܶ4AAV(ط԰ qKձ{~_?=BqfS >$r4AV5 Hj,#*I߆oOVF%/tk]ىD3 %y{MFn_]#TkƆW6gk}VED e^r pF" }D-9X._/1< ݷo~ B!B!OI!B!Bه9OyxKY8O'f0NV7Ab:f$$Hr|S􃂐(�7h&T�uSE@X4" $@[mǁYc3 fc0k@ȯ幜QYU!KԖ:H:Sm~<؎۾uyplt}PYl1#XSSb uجB$%h $(`#8}"r{Vbv-mX ?l@R͚ęXjZLA<lAI6o>u\W!A6mHmomgMhK[<vۭ7~ݥ`B!B!B> B!B!2f9>sٳ^reRVTLjTP; bmu Q,Un1d/&vl^\BEK :FMYC's*g�_TeokW_K_M' 2[E+EUo.Kݞ^?*ߙgJɣw˧~տv}=94|bLYdɦ;vls=?7yף|1/_Zou=05~2 6D7&%F"0JvlƩ=UHel_X5u>ف,De{( 3鶣L(bL{1SKj"!!J(J)bˆYr'zb8 ?xM,}n.WB!B!Y$B!B!S,}釬xǢUt2ؓ1"EFs?@+L@{MHd:'{~dY=tۣ۝8fA;MafM6U]=pJ=: smMUǧr-gѤ2H ?qO澿kqE 3,ncK>oZu%oI/&hk@Ɠau\ &^~ZVƢ�}0:>KeEYCEo̵Ho[CAŒ&z8=a�5']zeIK%0 +I6owE}x~G>7#!B!B! CB!B!B^[t/J)TFk-Kb&D(,6z 1d"ȢB$ 8*eÙۼVӂ[,9͔N|Ѳo}IRЭWE;A m7L&^Dt-@lʉ`g$nm@2SNJM Ѝqn罛w;9,nqJ _9N͔e!B6k&G]QqBPz$ ^P]}.F}$ U/|c2X1_n뵮]r_xFev9bޖ%Dئ4S &e~2ܗBҟw�]q1oW޻}p{�!B!B!{=aB!B!B^LC:$#HA@쏅Wwxу5eMtAc %Ɯݰx z?x\~n70ˇ%+T e)WQo{A^A-8aDd $m<cvrkzW?jG7e&řjrjnUZLйھ[[֯ XPٛ)cfO9GW0S[-n,$(W/oLג kK7jcK~6&;a72B mD-(R)@l91$R8L/VpPR&SHqi*`Rml2Z,lQ̤>s3DVPp2Or?lnۗoݸq.u !B!B!{53^B!B!BVs\˞uʕYd,JYQ_B1]H+.`2 Q@+ộx"Q2QGb3u@{,t-h0m2!_tIOJRVbῒ lB8i-V?m-XXי\RՇN*:] a ¥v˧~տv_m7o94|4}%KlqowgG&z~QC"&,BN!m-j8MɘZ%+/$>խ')-oEފ5b?#”vOیRm8{Giv muR%*#IpԫR<jQ2KiȜ NΒ:Sb?%L1N]MfȷnN7!B!B!~%B!B!%,;CVytrR06nT q8`6Cu{.] FT &Lt~%"xpPW e8_g8l( 3RL"i放X=}*̈́'?G;Nus}mJ3|^'J"8-rwos^ 3,n)c/agR)Y,p]J"AA*!mj„d-']Ƕ3أEBLܖt%IhP&#2 +j5?78.z8cV֟D^ TOL&N(` D^*\暠^ t@ͥ\+ی,,*\r]W^+B!B!B^D#!B!B!deAǬZR:ɆJ'0HhRN<t^HN!3-P"u]03b'j˥(lT`3%Aףޛ`<~uv7M-QzϏd/Ut徠mmUxv,\>G,+3 ٠*PRͯoݧ>p]5P)6|:7SG#nO2*D2+IDbŖDef[f/eY8,Q^z:^2k<d< C>[:j k_z/Jf~;zor}A!I2hR0$Yوq'׾ TZ^ޭw>!B!B!dB!B!E\מ<MGqRI T]jA]g 828gO\̘1 `mK<%n\2=C_&`(a`ho8J"<;K۩b;>6C�8|P:?%kk ^/u1'P�t˚|\2_5+J9ѿo{^x=]g{!,nqʘSr<�� �IDAT#s,)[eAx#DmYK[s̪+r/϶ 5_KN@Po9x !nQƗikV\ޗ eCokԶ/")mч[DY Z=6 LKwwtnK~B!B!1)%B!B!db9Ǯ[%+_:yub2@<]caH1SPz ` wtʀB BI 95eFv[{-CqK9E~R2P BZi :%T b&abaM |66Tý7[ym{ mϡ\0E.T�tB˳ ύ۵_?Vi}KCsg+Xdɦ|#kם+>LVJz"ʤӺB lFiDBk.If"S쪸.Zm{fH)BvV}o#60 F1_3` ̀6}[@b&T&fɰዃѷhߋ'1߆,|ā9:˖zJB!B! !B!B!~r/]< fJ)j Δ 0 LbPM9q{]mŤbugb;h[g-8s@}7} :ؒ'&;WNP`s_!|:~_fHjxj>_j u Mt}`2F57_w9Η�̜ٗ2XV^^5oK]7#"/)4S*Sɉ$\7NT mr& ](`]8{ ODHjkk^'MإYWulS|V;L Bᾝl.a}HLv1mGd<9a;feQ"EuM87�_kkw=\rW}nHB!B!E/B!B!E+>}ڃY*tRNHш:${@hPD FInwsLE-XעF1_doU (7 <2% >)(? N'S^ey๘{۞˅Hd/&%\`gLq8Z:+m;isi;,N)>gի~=Ҥ.J&d57/*zqzH n~qQ=쏓#xA5`t%@ED K'Q0ӫiý/yfpSE(QQ E+o tx)mӿܺu_B!B!BȢH!B!BY4k3ޜDƺ\ཡΔ"}vOq;zWag&)SG9>t-AlLT {[ ivSرGc׊Ԡf EvqH|>?. SY ʮ34SmؾmG/<O|Ρ,n(N2S^xՁ9EF-LiQ-Dkׯg(bɰ Ng'iul `BfI:Ime>{bV=v=*KHH`vˋE$p's,BI:s/KVD`zTC qYfE"+zqy-7N@Ծ_6nu/u B!B!B3&B!B!B}\}ݺgY"iEK\p*xk@ NlhELj+"�}0iN}p趭GL{o {3E-Ǝjk_zںEl݆M!"mp$+ Tݔb0wӈBk@2vdXygf]2 I㻶't_"cs>X,Ydvls_}>+g=\ɖEר` 5,/,Q&xОVk4!%RǙ^b9C~6GOj`&},[uA[#UlRAi|D1elz&{%EtR{RǦɭڢph:M_qȨ5%#7醻!B!B!dQ|M!B!BSYvortRRA&GÄvPrTxL@rO1 7t FY1|TՇ;MF7|ʶ, D `0mgӗqNL�Lp l,ʗ}* f/4*6Y oGn<.͏Ѡ)xĕ#sn9wgS7̜s;k5on&RfX(I,&S~R v6l'jNU|k&`\U>K)7=SF\~NJ W>יI쮂-YKл-ۈQߘi d06#];fQ~l̓3RPL iM^u%uG:"B!B!_ !B!B!{$}ꖵjUNSQJg1'�VwH%`|tAF}1pP*5#*? EX!ZpPŠSju#}_ul)9y{`8fL`&۲vNlRl$G(�>Dͥvb6-cf.m3P30e/Doz߸w_}S7,̯l^_ TkF[Ҡ nR}\G"щH˷u*rhۄ>Z&-.uYۉv+!Ju=D?eOZ;QgE/S2!JXRbX߫qzWgG depv /hXa NgAҵ;ۺ/$B!B!A !B!B!{/h7NIA1Duܫ>G/NP'sGOD&˚ЏKIFeB8L>MgX B" '7afRr �.sܠrYJŊ96DLBqL ӾtQN1;AVcۚ{e S7SN}f_txJ,*f5N 굖_�q$]Wrn[iHXH8S5F܆e֝laE,6Gز Rp2N=E8ċ4p|:Z+foYjz!}60i}KAژ_҆ˮb>Zԓm7޺׹n !B!B!{ 3 B!B!BLVWc}Y/Y$ӊq`J{ ,bNh�r!E-� 暠>svdieM6MyX'ᙹ;(%L' >3ÁPNZ[јaNr5)QlyӔ"QL$7m˪EA=swmO|O|_tN7E9I,N,Yi~~} c;Y5Gtw<c"+*k9PĬ Mq{~l_ 7D{䢳q8aJ>!d-LqbȔ\-RKj:oڪ}A,gR 2:~ԏ2+up]~i|acUkEm9q <g.[7xw"B!B!q M!B!ByXzxlvy$AmBt a@)DvdG%BWW1GNZg2D}LP 67]BvgR'I œŧDOnZsqWj&gurT.S$4X(h[W Z"%Hin9w )fN9⏝|I)T5RRBvi[?k#|Q2 m:c D%A=uVfLE53(ڱ[}u~[#Wekg|/ bdAU�#I\VEA6 \gW)>C6 YPPnl`&>6䒻vB!B!B6z !B!B!O}ꖵ:f*ISQZ T"he(*2RCaKN2@0'v׋07_@mH3kH@RoI FZҍ9^`s@ri=X:dNqmKZhr"som?w7ݧ Bq┟6t_yoKU Puȋ@R]zHDrLaI*NP/\XU"-Ag]տF|,Y}W*3EVш]6+:}PYJH$(Ay6Y+(bǴPϊ~k)kٺu_ !B!B!?k !B!B!?kpC^wƛX[qR R)i@pc`XY>H :\>cUN%۟$ᾪOLlh \r E}mW`}za4%ӯF\OPA7>_Dt| qI߱}ۖ^p֖k<!(NYP1S{{//:<%dQ@`֭֬WZ3b/iQ['M., T*h\D/ֲ@G8L-z}zh)ZD۳{\ؗާP RQ/$h FHTqU7+1"Ey0ePǿ_/ߺտ B!B!L !B!By8s[wKV<:"JT%oԌ&4Z1XJ!fE>`T{;ڑ3T^vsmD_PbN(F`Su6>KgLQU^2B/.v~[$un3*WVy>e.oN3ڦ's>[,Yd~Rvls=/&z􎃏9nCP@fý{Hiyp_C#r݊8~%.+,ҋ#'D"X pjOiB]LMRRmkى!OggƍQ/} "A)uec1a ^}G߆zOF[͟~Pc5j[ _0tā/\?~\ƻ!B!B!i lM!B!ByYz/)Jq` HhVh24պPIn gd~$ŝovg)>7S &,cl.NLmy jQh Ď U6 ]Tfq~t <C&^ssog9nL'S7̜򒏝~mIi6P\϶hGRiwf%̲1Wy#Lym% 1CL6/.2xIM( .~6K ʖQ6Tf޿`كcjHZ 846$ M,%JYYW\EvC>N_rGޱ#\rוJ!B!ByJtB!B!BR>WRZl?Y U%I7Apk$_>/P>"X]O~ʌ.yqϻ]hjTtk>Nщ߃F: |hiGo&0XLDiql2V}+>޶ͯuO/\+8eqCqS n9^)ʔ&ë񂬅(XeG-'=M E2BoG6̌bǴ8RDdPdmPdet_Z.,wj4Q3=IP/D'(hە բ|GE;vk' %sG$][o?w cLB!B!BSeB!B!pԅC^N1'9BRu9SL`:t=%NҊ*&}bl;Zp7*|>B8OYpM-| ~g6kKmOi^M-OʱciMډl)TP_P?3;AV2M`hZvorgmć|F~j(NYP1{ʩ=^uT4 f-(p,Įzj6#`U3$MA[͆&t¶J<DfoCI HE *"*׍2De:l68Cm/ |X 2xBY;kwƍ~:!B!B!Ig.%B!B!尳=nAG"BzOZ0%DZTVmWR7&H+0&QO l٬7GWiQ\߹G dAj,E<DGUb&) Jv}VFheiac$M`- Rq~i}vvȓs>\,Yd vls=/f8e8oc=,Qu_׋~U6 ɈU%791I|ߊb*04{nWVLⶇ|۷uu"C U`RybV!] ڴ'1SHRXqMkK eύpƌ=1S{%1$eoXb[}<_yg.[7xkB!B!G!B!By2xkN?w-]>tRi<jNuLZ0^ %(jN2%!ե$G¶\%+q@Pvڗ-?5L̜R 2q2zN즍?ڐu=ex\>v܃2Y(ʮ5_YRrN 1/|Wל|<0s↙S~v{U?{ښ?o"r]ע,%zhf7. " J\v`Ou|H"EE$(t2T0.61&GV$8)}DRr/YZsp:m嗒d9NͲRj6s}Զk[0K(@OGv8G|wބ7 x\rW^~B!B!S3!B!B!yglժ,؂K@%1J;]^ۘD$e (EKjucZ϶W$.D+uBⶦfj+K ^ db<پdOK0;\DeӗR +.Zx߄y7qFBQJ+n|S)S~ᦋU'朎M^fJo(cJJz;RQk_:3 <`YD:H|壦dmF.-@V_mu( |?E@RD9/ gPhRT*Aьٟ WFz2�� �IDATv$+(N v޷uk!B!B!? H!B!B19O׾-I)Tl l٥*h 1J,baI* #A*I>/% v'`HqM(%(C_A@ �+ 1 ĸMMf#LQ6$o`߶-D@h.8J@n9A_T1֊(9۷sgoY/) )OG+XIUbqϬ%fNeKpeDk瓬(0H )DCqm Iq$Wֹ] FRV>]Նs#Oh ~.(2s6aKVUoMJ uݨD+wۗt^%B!B!DmB!B!vsu:ǥ{uNi6Z 0 $J8Y\vQ@dRK_AR;E86,`s0":.-QBS6`\ GT>ɗQW\ 5S;ҊQCR%Ƨy賙 >s5[Ó!5X6N=؎?~ķ>M%3GD9I/N,Yi~~}?kvlk=ؐwc^~Xs"i&ex2@PO}_PDڗ_& wq[(^R2"WRW*≾L Ծs&Ӧmnk\DDod3TW}L> xmTvI}N3m)!PPm{fg|te>pӍw!B!B!??B!B!BK_s!_|I%0c<a/zSL*>/)P:lT崟AmE!ቹ"E�[[]U‹d2|iB1/t}Ack;!;y0!~j͝jMw_+} g찝0zqJ�TN'ꚓϱC$?[9eq){^|/_,x<T+mF>z76-}&բ~!Ĕ͸;ZZ8,'/ٓ /*S'-GRD\|zBUA^2$a:y9ә\%qyq*ߨm,ƅ0ٶa]zW]~!B!B! ZI!B!B-/[>Ud,Jf&$s+Nq ?$_"bECʽ838 S$* *Kc̉ EVC qa:`hk,zFq<dwP6"}CP~xuџ_P~3 ){拟?s:[{FY'N\@ Qv'reԌj8$VneTF6cJ޼:WUQ,Q})"k[\//8*K)!)̖+`ECub@-9x96uټa֭[o?ksB!B!BȂ H!B!Bȋ֯9?,2Tu@Xp8D9*JaZ`j9ͻߩEþ[T&qB4Xd:=3E+QcdnuuvUȊyrf%h^Q|#~.R6>hgAy`wugݻ~Fg;yڠ8eqCqʞ _ 8`EX۽,ll)C-zkq'Z|bXfmg Q,D]fX) l-c.$`77>KiRxbiE#h+#6QVR讏;@Zd nҗ6u^B!B!B oM!B!Bళ=+[V\)Xr,H".X1a `BHU P|͆q{&T S0_NK^ߐcDXs-^#T`Vh'/=ׇZ& cO'a>SKߵMs[mӷ٣CsgrV'K,4??=ڹeG<eߜ,-&N}~ B6k~(h iw&0j!A JkbR4*fV-#`ɵp˔D2Z82y-..skKg3AECʠ=28dii/yl"- OVTɦR: oH;pճ`-= ށZfw逥}v!B!B!~#B!B!Y9矷)dN) FuĦUp~Ȧ]@ LT#0B\;!wàC%B&LC?'\EQ9Hm[[뒟6JP:b qGd足.[Mԣ"Qc?1JC[inۭ7_5'l${ ̜a=c/gWMvcq_ 3R&8;~DWQgjgDg$:ג@FZoYŪ]T7%*.R.3Ynn 8=EYB'x1@"o{uRX/ w6x7kfcsݥ}巻B!B!B!B!2ʿeAǮZr:IA _ }^Ji$>:`NLM<5;3rM80ՏHW%EsV@ ;VaO˶FM$;ZLV4.72׭iC'[AI*ɟXn@(NYHx]kல3g]?8)EzZ$&NlrM= S7,~e?{:Q T.U3R3Hr[8!-Yo!6T)l=(QĐ(vdX YMXbEv}:`(>L(  FqQZXXc۬BqG^мڃT ^G D1IHJnz_{ wN#B!B! H!B!B>Α_?Q'xT(?iOt IA-fNYaP%JN*/]'H&uN>F D 3}D8Mq FqZ Z�SSX%pSEqXIǔ}ެ!90p?G߱}=_x=]d )S#s̾$ؚÉ%46#X,U߷>G*k*^QHbV%Etf|.P'1G6A;Gm:H+'&NJb+0/M@/56dW?A %oUp=kj+-$1佭OôNlm7޺˜B!B! B!B!Yqҕ젣VL"NV<QK,х(k/XCݳm^ ֺ*ЅjZ2d jت~/t0嚈 ܭAM<E 8snA˪#}{e1w?(qqq{bb9Pxpσ(-O||[ڦdED9Z,Yd ;6ߵWlz΃_vaDRYD@iu>뒴ZQxS3Wj{]Bj=zؐc}*FUe)"NlPN}R`C2BP clE?賶: 9hƫ2>eWYNږ;yΐ4Ȟf}#W9Gr^끛n B!B!}_� !B!BهX9;o/LINƀ~E Bl2 zuP�Bdzx*oIިXqRU3D T?L"1CKN^ V"f4m®O,3%vfUQH0w>ձL[ڲGUb"2Vqez9z4#6/ݼs\7dQ)fNY{U?wϖǦE;dW^g$iP+~IJ}[,m5{dNlT1%'1}[(do/Y;O ^gzYWTFl&~\Vz{Ve�{-ʶbe—Wg3bfĔ6q׺K?|UW"B!B!d:K!B!B>qygWNlI�-PsʌrX?gU(Zp@0QN1L-*a>SG/x%uKIgh+D%=\%1L~Wbs3mk}]]D)-Q0xDZ!j=>$dT)mt?xއesʘ E\K*yέ7/7ȹ,(NYPwp†o~~Cd*PIɽO"NA" msQ8AM_ S!(>IJȒdF"8ɐf}TNDTCт&Jb_R٢dA!o;ۘ�)/6OǫM2Dv(봦uѵ} lwscB!B!B/-!B!B!�G^]32 /”6&9ܕJ'%HbE.*PjED J5-\:-ܜnE|@q 6Az5ی tq9UjymN|3`Rl$ U|~ >u\bv }"t]ܩ]Ԗkl):jgu_7}*Jylǃ³|rFgYtP8ea5ox{.9cCY :s SjAn.I&&q ]�I$Aɂb�ʼnLDmovB!{Y-Iw$%/C /lml#JOF`\|+,*q&fNqw{ݺVz !B!B!�3dB!B!qtg+S'cQҧС6 J:)Ւ*x F̫"1r*T0ш4K j1 %Pؽ*XIZ"lƦO,bo0A%0 ҵ(|>T~?6Dįё۪b_p ~OMY'^?P?Ήo}kGEs>8Ydɦu? |-0zGw<V3IK{k'xp=E)5|ۘmd?^ءjϸ6[3@WDӆu7⾠=A6jk8gjWq4,yS; 6Cl9%hb>icU3Q$#6܋:|/T#:7"`;~2M-8G|#GON}evc B!B!d/ Q !B!BX9?v˗L)J^=QV̘3sqxZ鳕@ [M 4.P ҫ�.{JHPw yT`~5@oB�c1nN7B#UP?(pm[PjS0&hel;8m?/ݼsȢS7̜~u8[ |ﳔdsB N[HߞDg7%-SEܷ3h4aDֻV4 c-nC[ŶaD ͆jٗLh;œw '*1/TU\u,cTitYU؈oՎ ?u~%B!B!d/d'7B!B!B.˿_cVR||C<):s%ڙ*.͗-l }cs,jdxZ F̑ߓ�̉בߢiTӮd8KЬͤ - *5v`i͵XH448;hm 5-bVUb< *mӿKd ){?'lUӱeaQD IUb襫Z/8Bm' /VܢKȤ?r$Σ<5 Nٝg, 6n/J:Ŗ)mj,臠=Kx;eFue!}itWWYz;yr3!B!Bً~$B!B!d >K_{[4d;Hdl q < NHd j )r8dHi"Nɦx9ҝ"޿]pMe(2!KLg)`q2TK i]I4OVκB.{ڄl{|m[.-\F*(NYPo0{{{/_8|EE ) l+"ݷ}EGψ[Ў5-Œ Fl沺)/\^ HP%aE*ҋmmm$JKHbǯ>;Oܿ<2akjLX\A6摲jJڰ_O{úD!B!B^ 'B!B!zK̺^reRƁa`eܽlL2ݴdH$7/OeJKjJ_%%hm+[ƚэD@?)1 XFu qi1?ISn,}Obfͭ2sRD!<Pd)#'S <6J*lˣW+o>~mӷ]_dCD9ə],Ydvvlk=ؐ;~+Vt7f4~" '2-Y23I^ޯgJK-V!zRԶ]]V\#u5J┠\ߧv +wEJ|R~hNg$+!Aۖ h'C T2ηyĺI3ŽwCE>mf;Q3)x3Ü<`vvǑ'o|evB!B!ȡ8B!B!U,}釼k/you3xk'D=Q}9N$a\@f2F \k`;ۊxĚi4ށ"3-CYD8(G$*J{DI汙d2 ~Ki I@k6cRǣMk=x7?!{-,n(NٷW/߼C>y;"iHdJVZ?-'[^-xтfpQ;|E,#& vf){{%q% wq/^߫DG(]\ Rԃ y^Ǽ?^ oJ}<*uK>f~x۫e4wﺾ!B!BYB!B!8Y}1|ENdL&)RL6PLXkoE. -^Fph�mDV-[=;<;Th֝Wq{5x3t~0y}Xo c�� �IDAT#mEt0Z@WuݪFzgi5A5j_Ҵ}-*b!x ɞk9~@#X^k1k{㻆VR&YHk4s]lDZ<n<9={}|r;ŝS=84)vl~v{xY6JOO̙3s+fzf*_%ob" ۙ{KP/)"!(X\ ),ߣ)g/VXؔc"eE.I WJ"%<QKo6eUDnTqӢ$eA{ܿ}>PO'ow|}e}']"fx3z|7;fUo^7 ����������iL����������k-zG/;LM$$))n`rl<!?9:(TՊ@%Z8Am\'KB!8QDB?GgSjqfWyu}J{~rMŐ,&2'_8%Vc—d^IȳlT%٘ǃk2ϓ]򾯎N`q0r_W^{@Dg&$'7Q$h# )8_VTuPTgE&|8e3cUEEԞp$砬gdxL H pTn\)?#b k=tSsB*Vi+3B]?&/ش; ����������4b ����������LWgzwƎ>3dEC'ewr>B$-R\{˅҅Fu7!C?Vo ܟ(t6MYP}R%5Ӡl;jAS%4WumQ*kcR 38`Ɂ0nĪa{~nϹ쉟n~m(y~JR\扉fzf2{߻ukoχ8Q[滶%3!%X$׊7.Ke)9 |I+0 Aceݰ&�)ѝUX&WER`QrT2"`Gq *z*KT1-1p^6ek{P͓b]$kD=w"wj9;KP"Ly?~wg_A�����������L����������pHs9#W_͛R: 5RItOf9)HX]Q0$R[R=aZbyEU\ eٳhaI礧)'ðR엍mvO / cM iҨ �C,/ېA]M,:̫:vR':D{7z7c2VW6qOlڸǗ.`Ƃ)tNş_+iҙ %Z|Yk(yA%]SZ K|-cF9C ~v}!P]GZI*R(,;ADJJt:oD"6r[KI2Ϧ 캫$Gv1eS;=۱α˦TuXI&~=q/s ����������Cj ����������!߸;mYDֿ P 4RTxEAKiaZaXJ>G"tG X>$1A%\㬸,%<񂕠ȴ=?^$PqslD?{PpKb۩bnL)da]8'KqP=K(H]sYa|mwo.v3S7.hMs쒷$Ph(TEd#)daF7{=OmG2X/ʾV*{Z r�Q I!FpLٶ"Ak|!g(K?J1ohvtx:xWH'HrMiA}\D⎪HT|7;q5zxE�����������8 \����������Od_L'xn)d sS?q Lc-L*(Xr8UV cj|'*llX+J}N=YE;0X5$d|Sjwd mŮm+Xi_s=,Eè89.esw?9~+@�)ST\מ|G t#߅X/ X~c&,h];u١,rS{nNؽV:98JH&Swq]ITR;0iHȉ_yє;c&VI<qBl;j}Q&nF?:wnn����������� ����������S}ŧ'eLd4 }Ķ%8#bLOFs-Pyc2 _Ÿ[.##'ǦVv'U H~u(hOrxD,b>gW\!#H-ZDcm7%p:RTB~用b2PGxxo߳/|9=9ҥdxxxM3= f{޷nz~7o;qf[(qe._; _KV ;S(KEnĢ;̝(gG,fQG:D-G$R<9�@&2[rMX,Ic0)׍Vdg N5-}f/֫"H39g$N,ꜢWxt{##w9w3/z�����������"D.����������e/sGV]ǽDJܾ?@8Wي QzqŐS*@Qvl1,`D.X$.u_هFTyڻ6VRh@V50չEyawLu9`}kn+!=YX[sq gQ-鞒D!cF8/PlpR"??)tNυ3>ſ8\nvt&]=wr r(.bdn;䱺CGt U_]t) ;GB XLgŮՏ;]!Gtg"D,ղߟ"稘 b;¨[bEtCI;dm5K(Lկ.4|f{}nlJ#����������� L2�����������^֫^}ڒx*r)k4#LOv)ٔ0#n:M%Ѣ ؾN?#^<TĞxޣ>:V'oT47Ls3kN�#:8xH5yoy-"GQO}c7�:8ezq x>f֛z@yB )=LSbBtkŇg$+A6{`'^RKy B1S!Dl徐' 1-&/쑾[?i%lԸJQu#\Fvqk\ v6.m R^T_w皫~xX����������2: ����������u_<ddd0d-_Qw*`tRN#JIuj9 h<"0Vؠ֖1fAeJ BKufU7uWT6Ǝkl!6G-O FdCװtRS`IGQ1߷֍�p� N@/#p5_8rY2BL,D"T>7-sw X\.)Ɛ罏KcmȜ UԱ$¾sK9()eDw(%zNDb;T Os7UU)6I$< Tj(8f}# D9=D:it;6mmŅk �����������^t����������r3?{ѵ;z}Q x$L)AXz\% '0vUq[tMYuno9E]ql>4\&/Jb r}bTYDSEuD̵#e#(vpQ~埼N1'i%ۘ^.U9tWsݏ\U?xeOtC秔.E'Û'&&nq�ϝ={ky,~gUi:5OIGv! zJt!0qռl}HBRE,;M] (Tձr?E!Y!F"9VN\W[rj%&R�]yo&ù*f:j@lt2?W<rȼѿȻ;nm(�����������/!�����������xis?rW9mr'D'*EʱNOf)kS>ޘTz Y2E̘j]wx-MWc_b8X;P;"U<(7'k!XgN.ltQ7QXk^kWÕ}냃#Dɴu(;DXI G܃{<^{-L~♔Ɵشq/;/1�#2ABqg#Jjx̤w.!v!Bwr3ΊD\܁OXԯeACuғv9Bv'S-dn&JcrΜBɭ):~+yը:&&r utM{"vmtk6r:KR~ZVݢRaQq97cc?s �����������0�����������^Dƿ^uio>kR:rR%ةfjT`neq(qQ.fq!Z)+Ł6.sV"ڜEp#}sMɏ=!hy!VBzR+h|ȇS?!=bmA05rCjY3df1?}΍6� )oԱK'}JJ`04=N|I+H`W}{!$ K;P|+'"^5E1Vx#(O٪ZS}A(]`B9d!ֵ3$^O ߫|=uXHEI>1",yzNZlvU5~xÍ{<�����������^D⿺����������".}*yp-'B"m1?Q#6iD-FX2er|$B6Se#<xq| \-64߷.ET,mLIt;x'ụ@28j>5ıOSO]ۜ=?\B!CV rMg)2:p,} VzD4] S7 5+W=b0љy>_4=ǹI2E1F~QFRދH]SyY|'Y8);:#ťa@\b 6rZ'l q.k z5NT]V^^bEN$%><~;)1[!7wo[qg����������!����������a^twƎ^xq_B!k|CWۭ"ž7F)BPqc&T#YPb1m}q Ptc Ⱦ'>gl@u]>'B^HdE;BA.@Emq<u=.uxj\O7?D�0ҥdxxxM3=e{oݵ<׼yU">2Э)XN"9 Qr)6OQJޗEPCOX$CپN"qp Ct2LBwQQB#\m鰳oψ&qK֞Ψ[1}Yצ,ްܧzZS]@5oԵHޏ>W)z/<rdWȹ=7os����������q ����������xQ9O]{kc9vIQJ^3BZml'f2i 1B,>1+Ƒ­BMQHg+pSQ8OZC\sU=b#\qKqy"G4.o'7{2~Ȯ)r\UZNBR Su p&(7`r]޸�x8ezq x1ɝo[o9}>yQf>^v7f.m6";E!ZfY;H(E=t*h!ǒhD".!N'.,57MΎzdJ1q_IV�\~rRIt2vqR\ |K՞ iUlbO쿵[}a` ,HsBjxkڜr年wwmF���������� ����������WoY);Y#S'ZYxn)#5_v+T4$+Ji[[58j_]+fsb箳+e}I.fukV™x+q vI16D^oTU+jF V˸w�>h|o{YDzN gI߻c? wn�4MmD\'s۹s3=oԱK'L.ߓ9GߟcM|tst_>O`+UVSzN,[1%ɮbLIaMATz\rRyٽdp|V=AYIJjlb;_kJ2Y%C+:SAuJJtlX'\cx^ cǎ{7|oײ�����������<_S�����������χ\w/7(Z6(,l)>mA"hM xXsZpbV$rb]V$~C2'Sy5KX?#Mq2=@ Y'H S$Ni|<Y"<2Hu\rd*+D=i<o]ɕ;:vs S7kydG3,ɡ0K`#kv1$R?@B%,X0GM0DTI i\1T͵{<WQl`$e!,]bX9Iu䏁1?lJNAH^[d):b#wݱim+.\ �����������`����������/oXOYF/NˈhA.�lz-$fUŢD$iү|1Zw`1=q+V"хR3wr-b?kb]Or</'rOeԼw]Zr XK uziW(aJ(!X#ɧīkXmfژBxoyՏeOtCn�0ҥdxxxM3=cOݷNOߎYo;l3?]B=(b !F&%\ֹ2ptk57y= qG>P:pMXB%E06a ^$ʁBxC&DB] JV$yKVM-+drr-pɿ5ldHˆt^,Mqv#Ѫ9+O9jȞ˯xϑs{汛o����������y����������s.\}Ι7(:IP9Q"45(ezC�� �IDATZ7c1v⠠E.xb>ӳj)tI* $�A4}&1sL]O<*C1_|||�QY({G$ SzݼuL`dwK̨'私)/{06EeZZ|bz*b$Ȯ(U(>oW7�^"9ez)fg~?&ҙ j08S"s55( );\v q"xHC%^.dtV8c&2tݮN*2ƓS"TW+|QSٯ"}[JY97 |ݐcD& ZTv~/Ȭ^o$96g'&&/]sg ����������@_�����������8(N^{-9ثVyYHdj|X[aj"Q^ Ӝ-Y4҈79.B=1Zn=h1bCb-}ÈiO}مӢ +@HC?   # /}|mظ2RJEz:cO%~p ^C<Q/l{vO|w[S7C?ZS.y$3wwiUL^Gwp9U`VL8͊7Ddh1DViQ=&}M2ꈓ줾0BREׯSB$IySXvN-d-MWOIx$#"R8�\~5zxI���������������������`jFW僳/xҠX/LQ~wQNaJAN>gE)dT`ƤkH W¥f\S-O m;>*߂k [BC$NjyhxkK1tbQ:ݺpb,rL׊R I?B<1~\Wnw{e� )Pbw+Y{0љHbI+EF@RΑ?1Eu22/p}^,J -Ҫ.DYʘ}d!R"Z:[KUHŎ2b"I5[.0{-pNܘ])=Br}=]wޱq����������8�CS����������@?{}ʙo"3_Pc0_dUdNS-rsYtSTb~Ϭ*~]biA]mjڊJQ44 }_Tv\yZ8ppe\K"Hv^γL ɵѭޕA^It�fSoGVK/{re秔.E'Û'&&nq�{gzs7ia9 Ҿqb8%i&XL&0 8:~KȾD~Ss2'uҞkTOr$br=5A(9EP^0E%Pb=ѕD iHWwbOψ(V iUa8^Zyp,$n=jSg+sܹ<vlsC���������������������pP=oѵK9LQ 3UĕjZ>q?ק9F!ͤ E:=v ž%=3t"Qm Davl,fr}F(nXy@c:pF�Ge;*&9K-:zů6K7nq2qp(O|xۚ:adO>u42Q_b(9W$#Jyh*q& ,Qr6G͢ %(yRRHe$7sE$UE 6q)ިK8TU!N=sbZtlQ>XH9 '%elԍ6ʅvH\VWlH;;A?c:(),:9iΥ}v����������`p����������r{㒷0A^r!`[;HO G~OtXbLO&[05 Kу)*,紽ZDWg))_k\VR]QH0" * R߳_={^ ޻6.ډϲ+r$]h7cyQ 3rϸ/˚'6RSS}߻c? wq�Y6zLO̙3s+fzoԬ%β9K-|'u~ygD+%.dTQ,-؅� Uv_>(:+亚$Յ9o_ LR㲽Mn§g1?Z%o斡rDM"]B Y溵^WVޕ u$tovq5zxÆߺ9�����������L,����������0KfҤhYkzd Ȉ*taڔTTJ1ҀY?dU(&7XP֨O #ˤbȘ"uh6aZ#ڽyqz$>Pq\K-.jL]\<uҸ):fLJE:V*^/NᶔR LH>LG8iXͷe}{+w|s;C�b@28LF.x׬+‘#_@DgYAJ9P+yRbEyU ?҂.�Œ)2z^6/)'%7  c]u7Ls2f;-PB$5]4hlT¾1׏=ŊP]$nGM_e};׏yǦ5����������P���������� yʏpǎ^xDt-EyV0¦xJq$+TYDk;S5?PMZ4n<vykuA(B.M`;LaCEE /kR3j, wDN˗Ć'?{qIA?\ˮ1Diz\/ɟ!�Ay~JR\扉fzϞ>uߺ/~+=f~||vWl($24jS;]&THXrŠ uie'"Uj[Idߙj~$R#)^-ֳ^]GCTRw,K ]0%/dr@{PY:60M}EGbHrȞ/s>7os��������������������P8n{gOR^t×E)鹢HV8yJ1OYqe7Q(%"Zt}4`ˬ&F\uź)k+ט%Y7lwͮߕD^.݈TD>$ۨC\ax#%^'҇"@1kJ o+鬢:pwl\/-�0Lo NӍǷ5Q'ѣD!vR>sx[kҭ2-+u*(""#t!ٙ% EX_ 1K>.cWq,گ馢Ufܗ[ȈLu$\zӈIX tL4/JM,N!S9uo}k.g����������H_����������>-oI)- Xg?+ٺD4c|o+'Cjq+(,'_7zj\=D|Rw~#*!]c[&}Ǜ>!"n9CߺMN0ήʓXK=`چiE>fzB97}/E?*d!vXl{?v[i@4K{F\ɜ9svyLmOzK,b%%..](A7 E<-@UAEVM|'3iB ,Y,s(#V>F]Mug#yQvcLD*1ALKT_Rl}/\N|}68zĎ;p^ ����������QD����������3\w .8 Ö坻"+U' 8@XI5RJ)B )⓮j*SPrܚEg֮q&'6D4VX]1l .8F=X{qVX\F?:&59>%L:(qql `xiWZ{=~+Y�Lo NF.x׬+QN\@DgI�DB߱Ε )<r8Dn-n9U lJ@"D%Z!b`Ƹ&N"c$D/V-kD2ggDԭ[1gt"'N$) b_=?ɍG`ʖ%W–tݮ;q���������.5���������ĕ?5;ztļ,QZʗDUĤd4㛢Vk&.]Mʿ9Jb)�~p^( UQB سa׵5kLrvŵ_x{"Oqkp.'Q Sq#T#xpC#߿_Wm~9=�L3y~JR\扉fzf{o{Z8tD$ Nr'VQFsr.Bի)\ Bu{GUmR [k׫z9e5HtYHؓAŰ;\ȔaVi1@%b"G~UdݣzMunXtȼ=]G7~p6,����������xq ��������� u筘p cǞ|ysa˙xdE3)!9ωYA\BLEyґF XX(TWW~$ N$vxdbº{ϯ6)zumzh[eMocupԸmD;|0 l '6m\ѥ[ �'Lo N$r#[|G׌:"~9/;}!.|ACd"GSRd)HT@Ru|#Pr_ +цNh֢:^I4|eJ\t+Zt"$aLd,-Fsy"dy)s>w m'SnI3QF/Lb?UjS9椕+ϥk.7 ����������bj����������^,[>gѲ\5Ir[GY0iʨ-Knl2vr٠{J*9!D`h-NQ0ZPDś2OmSQ0BXٵ{['٧kؐ%i-w7.4"xK~stPRyNyOcSbJ8o7;ݽ?v/ongiN4K{F\ɜ9svyLxe>u쒳Y%QB HJ!s~tnj"+̐e˹HPBB JmEڮe]&0jA]S ɓ~X1߈wz.Nb疱yd+ =ފʛrshcnq⢣MG 6 bW7;vիz uK����������W]m���������� N^ēIaJESo(Sy%D*ޔ:+ФKR e1VLOA`SdkC# ,g%j2hQU> G?+ŕQbM5|3NSQs8ZK's{RǷ_?9c|s�B8ezq x3rf^ G;qA":KvJIS_D%x88;NOjV1%uN0%o9E4me:mAK۶v>nQo\7+6\?'d$z;*|29x�K^P,#]Mn[ک����������ӝ!\A���������W._OYyDnB5Wb5Q\n|B<Q^AQY_a=I,R)#u}X3%J3\&<^hD&$>qrf[±6f%Qޤ0Ϭ)˕j\003Rǔ?Grl޾cQxoݏ]U?˞9�`)KqM'Û'&&nq�\l}[Y99]|XeSDR!s-)9�EZP""~zznu/H~ZK~I[K'&V^>˽f'm3n"V TEL}VkJnޕRpNι#z[c,I3FhaZ{ @ſIՖ݄}Q#v/#ݹ=7ow���������W����������yypͷ^{(}jhr2PZ& ]"&ϒOM%S,c({kg~+u#drOˆ`U+q2c?5ڸ;=##za}?)! P&C9`c튈n_@%U"DOq˷6;to�)SL-ٺp #ל|k"RiQ%b s AM MjZY!DŞ] z )^Q9IvI%1c\?| dRW]^%*vEԓ5I Sti5 (̇Uw;G}IW_"uڴIu@c|JSYt*o}vy����������`Z����������Lg->m[h,0tTS']8%ʤ}MZe:uȵ8EvE\";qiЬEl0s.#JJ%v2n|TxSȺF +[g;'l'By+&R$c6AM\Cƶ),>5+1QO[E_jǶ.-L4K{F\ɜ9svyLym:v.%ȉHSɘ,B9+N:E**l=|#lږt<)@HPd?lk6^Dw™\5ǧE-:ԍ—&ǭCR&4y<uPqَ*&u>ePԑJql\>Ϯ^u6����������LK����������N|ͺKf_7 QZFȋ"ZD$LԂ*n돲@~̒E\lƸ'vV H_Hi*VaiN09C@R ņ@bmH!D1<>z#=Lp!j_{ }#: \j\9E_fO63C.yY&|4۳{W>۝�f�Lo N3 5k G~AtzRGQH(:W;Hc@u=$)bI6A(rL�?I?Šk$˧Htb*q9zMu/T;n_e@O pW,)7O=S&e;ݮ;XӽY����������0]•���������ޜ~57 /<c11GD ˆ1Y%ѓsA,2g3ω$Ӄ[Ճfn=ʧr|12̵8IIY~uFϱz#,dkcK66npM3J@m sQy309!EHzt,+]*vc,�� �IDATa_=_'8'Py�^0ҥӓ78ɞ>ӿ٬o:9$D)[a uh߈Qff\+Rȧ{aD2=) tEɱ Y{<OV [$$rM+nsg[?밯cՋ{_$l:؎& %91ltU6:)N(tEG{ryqsy7o'����������0m8���������`2G0v99DiAXx!.BDdB-.]M|[ट<1FKTI$P ;J)LFc[%!ޛ_QX8 Hdqe>)qkAN)j7! a̾}ڀˢQ _fvwn\OGxo, )�=e#[|G׌.z7ͣ",H0Ta,%jT ,]X*8ɶT^-&1MLBXE޺uR–^CwԾ/2n" ڈ0wO9f%L5d~*U`obZ J?& se=[DiǜOZ?e.7���������� ����������4~'߸-ļ  $1& z(7m!n10./^UʜU J\ VqcIΤ#dO#\~MP"-,!;̸T $4zbs, P4uP7woG/0Cifiۈ?=3gΝ;q�@7~%Ϊb6G]KZҁ!h ǩ׮C2zU",^,"CfMF&,9qɲI,]|=#5H,nN n~M{:])"5O"HΉƤ.}mժio9����������p2_����������!5./4&) +(BE[Ԥ@MvZdD)4T lzJǾ0O%SvMvpcqnMEPex�P[&p‘h}ߧ1<<R.iϋ 犲[/R}ɊS-ak|XԲP# iw]򁯍`q�bF.x׬+W}y'.Tzx"^U@@J-{Ik6)O&n݉%Sˈaga:E;r=gщVZƴ#t*2r=8d~D݉ۆ+I#Sٓ1IAr9e;SLtNS]T:~6ʹovݱim+V\����������$C,����������>?>e cãyĴ@; yoFs=]7~Yx&ˢ<5ű2)I JڏvTg,@sR\EQ]A|"Tcl;RcGf 1&oSGUc24%~uBꮅ?zK\lv?}yՖsٓwo~(�̆秔.q oi�˞>uߺ/~o63 ] GXE+$;LQgit4q o̩9{Wه<5 P[t"QPix7\jۋbS~ԏ8%XKRs^&% rpt_i0Lh aetlJLQ訑yG/G7~pvg����������R@���������pe}=v99Dl":֞]+Z"0BFc$vlC?%CϔP]I #l?lE|yPta!p6uq@<D.נ.W[5~ ApXMLVS9pV}pjP=GO޹q.8��)S�Ƿl~dÑǏ^=(Q:4w9Hjdғs$ e Q1HYݑaD8A4Bb1RR&&-ĭݫ"+xYICr۱X{_yt6Qd'>$;~̯I7!iU1i?ʫ잢|YDMs1.>]wr���������!A!����������soj7EDJAY[:Á=+哇) aN$}AApg{<Q[VO>I%((cJOQUčuAη4zze iH]EyIlorFM+*kʂVJdPR*vl{__n1�i^o;s۹sZ�o[ճ.)%H&o#9Y!Īذ9ȽHEUk٤ʉ/kw$D*bRӵWIPHLyi$sul]jL+"%x˦;{6ڗ~$|) nW.LO_I7;vkV?ƽ���������EW-����������1zKf_7\qN[SUjTM% \qڪFܩ'щ*jEsR|۲xCw ])fhH}1hͼaQ9V)Jb1 Z(?]nD,6YaQT*.!#A͠ Sن Vg`BD&v߿v6v� )�<wF.x+W9'Q%vQXqIXG" DkG2V.,%)EPR*4Rҷ1g}'tc4ڞ i_i6=U?aٍ� `" +F2'g!o% 6%/ YGucm+V\����������^6���������? /&hAblKS�.g4*n_SxYĥ2"n݃ϦKUe׶I7MS5VdR=sgѡ眰v\!W0TR_OrL3I-BF{ܪiV܋ kE-`\fݏӗW\ݛr�SSJN5 o gOݷK7gg:U脜Rɓ3I9ncQ,'K$Zqy-B \܍#Br̿z>WXګA"1ʚV,dk (v(/_ZA@d(څ8Ds|&Ggc1'D O{]tȼ /Ȼ{ӏ|v>����������xɁ8���������efy+f/ c=gÖ_3["Z!jr #NVeT Y8,@J:m "�\#BsrMq;8N"(b R?|ݢG0>0) gwTV$36r]V{SsƟc~]?q �8( N@-ٺp#WZbzONDtH-5r.+9׵.X2D.!v~֬Ǣ#K+a=ɼQf5taGwol%d+ZT&Q= iG]/}:$Ue/I?D@v,";LZTR'%01i H$!c^_kv,Z'ۛ^-[vE����������4L2����������k|7.y -UXU†aD'Ӈ+3R" t7Z`E.E߫"&bEvr=?KXHJc0xXⰮ&w1xm8?d{ m}I[N,$S1Ԑ2q6�W{I\vl{__�94^Q̙3glΝW8�B_=g/e%HQ8viMO| 9$$C)JT9NDcE!`+b-wW\OVݸu}X!a^m5a;dE)|0'{޽Nj2&-RO=i'W"rzVꑛ6����������^t N���������xf%EiXV=Rx%#-v%*TV§<B .dRrkmE" }+8{L#e%.)]I"GDN'y1$ I,VsH͝s{/d[i,yv# <y{=O?x'W>T� )�\Y Ǫ#F^S+R d2"PČXH#ǹܱJo'^cs@Lb+Ŏv_(V`9D8æ9D|[-^Ecq%٧x-ud$Do<2MX\Mn[Z:����������xQBx���������^:gc7x11G mQT%SmQLE.�. XՓ5=DZ[H k Ҧ<Ҟ%z6/FS,\_w b"e3޺dE5TwO` u]#Jpo@WkX?Qv{w?|W=y�fR oi=۷>tCz{f->s'ma?̌j%,'Q]@U=D~jj�5!#g5YN>F,~S% d8|PX"|j)�L~{S%h sJ)EǦ:NSI2p*ܛQBOBlb֔b⢣Fyylw����������/ ����������y{g/\cyÖ']? m|B".*rl*X-E_Vb)%P ܞX/Pi|GeY<gW1q1^ǰp{58{w{-vk#?bcPˣi+ Kۦr6.e:<sILbY|IOܹq=yo �Oq�^߲k>G=a߫G"zTTJvl-N$e<Stϐ}P.BJ)iؓM"ջ5Dvq6ɮG-")mȆw^m+TX?B&7Q8"I`^$A%!7ۉh$u~5?Z=AdQӜS>r?~]?����������i ����������[>1|꒷Ӳj{§@9GXw�X?*RHھ&<<QYN' 񥠮Z1E?Y%5p-!VFbpNi6flǰxuHnʻ+Yڍ^׿R>ynv'%22qP t\b{Pݽ腿{X� F4K{FDtz2gΜ;w^1�KpiD]r'!DB0E9+)9{]J<ZCtiK@=*[m_J?sBtd"vl<_Ukc>3,$w1^w#L!)ʫrH4w=5Ɋ[:sz6Rwsoq~����������M!����������׬dyhb7,.PjHXYLDc2ҧ*&E\=֬.eV2&R-P)liA(3kc9^FF8",X+q:j)6N2CuP:F^/E/r[(~TO /N]N�^p N@K5z媱xҤH "L9IIUt/m m2'(6L&I9x:/3JbMzQr%-7)N@ҁ.*6Ñ^miG:ۉDҜg*aK;]̸*Run[qѵn)����������f!���������xa9Cm/|sG#rrgڂ#fWQZ8 `)73bϊ<ϻ+ɢ9/EPSFb],'}k=嘃:%V QJ5r>6,dPƺ[ ؼFOzU')0^?+|˞{Cn�E秔.Et'Û'&&nq�`OݷK7gggIew#kNr^˹JR�,s6Ǘ)*!9JN$_qE.*ǯ_jP9.cJO`,f',?1NwDR8>E\'o* UYu)x/dXkOu訑yG/w1gݒ����������yq ��������� Ĝe+f/>{9˗a"_Q4ˍH#Q1Pt<& x|T=mʟ:l# ¢5#V)&S'ka-hΝGȢ%ڹTڹ \SdYtW'LR"8 \w_ǘ·h[&bp)LrLT:&}$M(n^TXwrÏ>t-�xQ8ezq �/=?k>G?5'r,53KR,JZeE嵒T+^PK!J *IFFd>%,! ߋS`?R+wRCS nϜ1כ(ͨ,9S bt7Z RK0hn,㿵'c}dlɩiN;fѩ|]nY��������������������#oO}ڒ73YRF=Nl_qU^P ΧI<"]V>M;#E[`/fL % x]X|]'D1‘R$)OZH7ie}"g?ڧH{!SQ^qbb iM&OVq5OVl čC;.ŭ�^Y6"ӓ9sܹ�^N޶{]KSJKtA)N(p"W„"j&sC`Iud Xd]b+~|ύ[ā,bm#-(׉m:Ɗc6$^p!:~WuY>xt?˧湽_f~cǎ{Y 7uK���������:���������� םʼn(-1g:E  6 _vuZ^,sD!X֑oM[`[cĹ&IdR# r|}X&ns>uzjYSOv‘ϑj(]TlXyXL=4Y>85㐊Xb0~~/n�S7�ph0r;^3z5ē%E"˞F:(1CxZ#X}Eڮ]{j/0{ ۝KD:dzT_:[P�� �IDATd=2 \ G~9/aC'zl!}1rs*uش].����������B���������9Cm/|sG.>' GjZLJ, %BHS E6؋4X>WK )p2'ݱg &$g%@y]gky!`ws%Q$EࣟS5)agnڌʶnR'lYMP8Lr,VBi㟾r.' �SJ"ӓ78�rg޷K7~cN?ㄡ_5ND'P ZrU:HQBڦI<"*3"\$Syn޻?=_We7Fkpq徢)">avk"" &X7Xαyb(E$c0O"KA\eoLv�?6AeJ$X3dKEGw1g ����������<' N���������xYb볳DtrV+RâFPXy,IA\K쌋ІPDR&)oh* ElD hB-闰ML3\1s~ ;ìn-L nwG :}fN4G!s"gsQXpO;kvo/~t]?qs�q�-߲mky ^}cGx”ҥ~NxLKnBkV0IN.O}bk)Uj:Eg*zUc+Y,l~jo$+>9XQ.1f8~E? .QXS-9EIПr/=0~ז]n+���������� /C����������poѧDt~27d Tl,&Kkp D VbU:hP%T DU"gg{|NQxI1I[` 3JU3\Aη '^j!s! ! ΅䇄s&A8bH^9{Zϯ>Ryp^>Rr+] &@*ȧ6c]E{-#[D 6RB1νϜ*'Q\|=Y?~VBil[_(N`nD]_<,*F'w7��rZj6N&###WMv?�p;c?!.fEy_l*)1 ];ydU4ʵz_'D.D($Z\-而ؾ y;QIKJ{~>h:S{B\Fm ԕJSċ&">w#`a fwdcd?e/wlׯ޵a3��������������������޻KV|:Uh9apFI)Z`NbIRQWz}-B).Hr5#(I7BT#Bu$= 17W9V~O'i/)! O3rESzVug| R8UgM}!itD+~:yyI9~|11}9ݒy[vF_{y;nD�#SzS�8b\7|ܓN !.6]JKRR׃zcyO&Zւb+ϕPkdjD'^ԋ)kZғhۙ]h4`| )HV΄&h_~J Yby̨ uhA#6z?h-+��������������������>'-B85ub'[!<S:%s$KAWKhR J 4YNUB1+1Mȫr^S^g4E0ʚWyEO!7*S|U-$)^H];n6[m\c_;yY7*FC<m,N3�N1^қog#=?94uhaw6Tk�U?!q'ΘcO BkWٻ(k*ib$^"*+SKܬw5u۔\״B-˦I~&:qSqhܹo+}o���������� N��������� ㆾjʔ㢔\i -x &)[)_TWf/9F_w${H&츢!4)b&ǫp(65wNϢPLbz?T *D4OfӼ. URsd}uIRk&gפ(*H4bW! T2HĦJt}q73l~[3��z'oo0Ќwn"<ǞWI4F),\$ &-xcDG^UVDdZ@AKAj3٢z27%2;m׌1s/6c0؃ċ^r <g,/ ^_ =w=����������_U����������@a_mm/Y)k:U8E&q-**$+tJ)N a+"Jh/&SYJSq%YJ*/N$©7-/Jӫ(DƄ7tj.>~%qņr,Iݗ:IL; X__䀘=ʹdbԏW>p7̡�7Zvo2000<22rd�Y?4"")* )/R{,+ Euj|4JGz!8C U0[WuacĻ4s;"kJ_1KA^+mM`8hVgh^n5Du[KVKkmeLXʎz]6p:���������L: N���������!n埸8vL|n0 3Ri\rҧsۗ(~2W:?-&( fRB@!QHd*urrJ'g:Wr>X a8M_Ǿ̻RG&5Lѧ-Kb% ~ΚTzY"2ь^K追oz!c�@@@o3g3}cO@ ׭VthIB S|{56xmd & X!) &)aB&L2qG*w[C]mT=|/ώ/ (lG n+>1Xhһyku~ݼiŘ���������d��������`23W/^7mߊ !N5DC)^IѩH- FD/m<;71Jl(6lzPuP6{q.ϑ'}w!b ʷsaJNr+/B+0rS]>JL{8Ѧ<缑^D!iO"/ރȄ0[^^Soi6�㥸cI{&�U^䁧~s}|<9Ք¼~ޕ@%%͈Jڗ{}~7 ^Jq ڽ;1 c>B| 8ޛ㌙Ԟ2/MC'0"Fj"tU|+yUEJӼtbzya9$sVN}޷L���������0I8���������s?~5ouД+#diE@iHEmZV\r, G&IbtE%'TFcE$B`B7f"&@g"J)+sƌ4Zhch$a^ĜD7%_N־4OĒo}+HN[žlrΘ޿O</7߿s[��z SzS�8:x-?v91zՕ΋~LtE!I^ě0 Hg!j<Aص3)&ō& i"D!N⒕,B!/YXD.2meRP%h' t_9]S"&XBE g->ߥzv[ ����������r/.����������G9 k߾pɒ¹)I&wۢr0d!P<&dRkQ[EV] |5 QU%%DSġX"9$%{1E^#I+H FADa^]AΔE!izlA}l.>/O`3i_j}QlPQ"UoiUUI}4qQ+۷=cܵ$�FUUZFܗd```xdd�6~箯s?ޚyaThydvDSA1QB1ezZ`Ej UȻc5v.D+rDj}ٜAEVrtB^P,1$}ˠEޱۄBT _{}u]S;~~Z۷?qwm瀙���������(���������Lg]_"<;OYP*Yted“bH FJ՘b :\f(:H(S!U\Hq*-r(u22e>y9ѧP6"`$vOvk}@{688Ek2M_=YcX۷5Y;rNJ+Oc"ok/q_p~,�@@˜Xpu==!j'I(E'J8yOo})Ec3c;uk —ODϨr*]رBK2b-Põȳ)㴄CTRF%[oMtmn} MʵYR-�uD*{6mzVb���������p҇ ��������yz7?xoE N%B&8dO%R*l&6Ma^aP׼Ě|Tu-vPJU@E7|n!҉\Xa<y=Ư5NlvN$"^&מ'J, dg5WSH+z߸@}n@b FC<su[?xNa�Qcw7266vd�G#/m{~We֢ߚ77GC,`{u6Ie}z!ncү?LZXnA6z{jM0άl|,^H9Xx/6'P&4u(<�4qs !}D/3HC?ϭ6{޷L ���������pq ���������Zνkq\PM20~Zl&09+OW mVV)hZ%9(:H !Tvݷu&":i>/J乽Z"W+ޘj#/<Cz^D/yg%.>4ƹ߽UknIsoܒUE�O|ݷe{pV(�Q) )�瞼=9f 3 ,Q-9?wp^NYŽ$bXAۧ֐睸@MR-v!$sA+}5G ,6 A'PWDvٖCY*D|]Bm}1FSbmys1o%Dݨ Up: =w=_����������GίD����������kO?(b:-TLYR:g*%K5k:29ld[\JEX&X'U&32X~$y*J>e6 8!,RΕi-^iKɇ|C%}|I(kW}H%)R#f*InU?eb1T?JrF_ԏ/}&�G%UU-kZqw{ᑑ&�L,㮯%K7RܡC'=1]_Q1T:NHע}7ͱ'5r}}|xeWAoct= 9 byU^;J'Mq<wryQKhͺ_ر_YkÆ͞���������= N��������QVvɻλH6PxT,(+rbKL#~^щ5~` 1rI:JʹG"}ӲD("n Nv'(H1'/$/-lѻD>;Iش7YK>TƟ'Gk"jdKC*TI Qe'<{Y<Ck/ۻ/z~�pTqJoq �+.1xu4^a-RI‹"iIqJWFM Z:MjT/n5;pHߵ(&YOBD"מ&pU!Q{:kl\s:4/g&WwS{<{xu{6m~Vb���������У��������h˿5o>hQBGS[Cd* ha~ҤJ~*7B$jKJrꚘ%;%X+J#m4ɏnrV*\k{r2\nƪ)HR36 p-쾸2&$C6[^^Soi:�z㥸ӽI{&�lOw[/9L U+~FeI[ 8e'pB7 FY3W+9컸4o 9nEv>(7cɴ,PjV4kϻ!HumqsxO4~@pU?۳ C?ϭ6{޷t���������1 N��������@O3pE_s獳ξB2©<*QXnHa!E}bŒ2%ű%]>G`gUŜ|lS|H\ 9OH 86#Q}^C5/BAr|W;c+&L1{L{) �+dgX<e}qw>|ಽ?{1�4@@G<79'یdž@?a\b+VYR\$ <<bj~0@B.|8hb"1\xJiqV-[ bUR+Zw[X8D!HljIu1R</p/Q-L0w`wbaˀYP3i_~N8t虽[1����������?����������m/^C<TrOOUO:mJ'N lzSX?ÓJkۈt%k,b_R)lX`mJѐGI?z>+RS}ݿ#궿:T6UQQܟx;S⒆V_mj>)A-1&fc#W/w<Uܵl�0騪jYڈ;ߛ \5��􎻾2%KC 8*(-NH9\)*U] ZBAULxOG<bڸ@&m|M,` MkK<Ǎf&XL*lf_D5Ħ$DĈhֽcE�� �IDATW^ 0���������p_w����������hg]rO\;I˳@R&B Ͷcd)%\JJm[ zI1DZ۸�?ݨ}uyLK}n쁲 aei$\H$=(HQbq~EBO3sy*ׁs#Pɲ'On%q-7\ ?d&��LZ Nm N�hX9k5_N@Jb$6R쟄);e~M9 1y8ץXkI?kkz׮TmkAxLo ܖg7'!I:_b$bphK[Y8 H4 a8"#Yg?xŷ3����������G0}9���������NŃgE)d&EaXBtEa�ybpIcv<~R&Oo{ԧZ[i#&(cR Q3 ּ"fK S!m.KM'}ɵR} zT ɴ02l/*s_yN-3ĮuhG?=e��0!cNv?*[~��^~[ߍtNN N BQu,,S_*xy<e5^ǮmfHþsaD%&zn?k%r(FQ /Sd/M#o~ O(VٙO#mơis8}8ލی1���������#S���������p3pE-w}jʔ BE„!A >7ALL1^] HX! !&ɑd"0I'x!k^d>*e1J'ό<$`{Z#E<Z5T)cH%yzK'^eUTlB2^$Щ̠["Qs[A��88� ?ܓ7~7&Uk܀]b7IAϊ*)},؊2O%&cnZC$Ec#01Mż;{y7b5Wv|T>JӸj"'F>3Aљbk)V$(^AYBNUpnhݻu3���������D/&����������G_ڷ/\$pn;3WMAd*n-,-ę" J^SDӫE>Id>LfrMi]Tc) O:sV&m'+(֢^$HidTǧ̮ڏk[_ ggFK[Tt);8$(%'wZ;mź9}eǶ'VO0���FUUZF7j�01Kճ/YB~br} 5<fQqJ}HU~gv+;wg"GQ-rW=agۣsF+ֈ,&4B ESU$rB4+"kjw:K3|~iDL(y;gߒb<@9^hU5vswuܾc߰z׆ ̦�����������_c����������bKu]ܜRHD#+ (BԷ 5,$XD6" -<) b98MiM^"M_`XgxˆSahy$Io.#VR+\B9!$2I.+iN&{r]PE?,sDe2aV7=Ռw ?7���qJoq �0wŅ3_s1s2.R\L9ӆs('틘+{olUk|fAf>-h:⠎- *:_cE^Ѥ#% ߕ!L{.O, _lZZΜUP}<lkݞM~Ob�������������������Hˮ^<fMgV :BxOt8֔WNg1O6%% %pRìRbc*mLIrsfb; *>4cD.$M!+[FpI>9_WJvuJW?;ϽfgQrи(%?ܶO-}oi�� 1KH=Q�mOo}7<әgyB5uHpx)1#^! K] TDd/L43Kϋ+ :(&E_&%(TQ'0[%V+/_;TzLSDڽ{s5tUS%*0l3j*Cݿϭ<fw{6 ���������-��������� p%Mr!zO`QKh Tj!Oէ**!}NRe5M砒W>لpTbYf!tBq4(oܢ%_5"S$lOCWct-fHM]CV^vp Q)^RۋSD{_e<.AĮԳ\w?j����qJoq �G<릝0 f]!ۦbA4@*fiBtV>梉JQ&XCo&-ClR"{DsrZKs1&ʡ5Q /Q D?bW?emr^}]Γ_y,IZ`j -9t:veCgnݺl ���������M���������&s:+<0qO炅T=D>|>iνY"O.-D:B (V|`+Vp4=PK)+'k-*a'G&ȧ>)X{̣++_Ó} +Ju:yvd5z![/U+b ij_cY��&UU-kZd```xdd�?~, !|(%ק+EOc U`#dE)wTTZξIDoޣ9kLmSGѳRބE06IωXGe5]E%=~} 4Zka+;vlVڰ���������&+���������8K޽ǎ\>"*Z<5}D,A%k}uk"૒gؖr5(E_:6uK| /Z O'eاAdc JViɼ]*"QWYas Rý&uK$F"wҌkR+8w^j~F{wWxor��SzS��osW\8c Ow{bh}0‘f:_>bHXyM3N<Tx@zxӀ}uE9Of<QIt9Q}~uc@z,Q5wmomMVEzN/V/KƼaܨ<wk Yg����������o}p2���������lN \s-"=A RM|I/_Ȓ+O5P(J '!Qjvo$p|">֢,D9JS`ʾm`>n$vTd}Զ9yԽ"*w^|AeLj|bۜn!iaRB٣FcоݷcZG߲�_":9x)|כog�mOxz:x_fSG(Љ SHVzXbXb+*WxzYd-C]s$"yI<HU!bjF/RP^UbM^U!Qz tlrO^N2T‘r'tv# 6 GahܹOVN={uB���������7S���������s/:n|m .ߘ2p6׵\DUL 2U4XJ2FԱ]5&aLrOV}I^(TY3<Z4Ȧs"hM$!i (cͩdPz֒-3ZeÂl]dU`F_rΛѽ?Û��88�FyM=շo]!xW*B-(mBἓ /rE"trcPw}EɿbMޟANU51K^3s6ūT^0D~fcq #`N$hiCkɱst="}gP3ipޭ[ؑ����������o<Ma����������k޶pɒbQ)2u&p 7rJ;ɉUH;90Z_JFY|WC c">:sY\[1vbv}[${G!O8AN؍o$:ӹDb&ʌ/߭_}RuIU,O`yI{Wvl3_ªߝ��TUjm{ᑑ&��q,V:k‡D[([Ӊ] "lBU"4RLL–mCCbc}xhX7%G+Ҍ׮DF1Öކ Q<)xTEQ%T׽c]6x���������.ܟE����������({ݭk'VE*Z%$q ՕDl)[")ȊJxu"/>z|;[5%G 9Q Q:=KZK*,`Z6%0bZ> },g ,Tn/:71=f\ӧR$r"\Gb"${= {>9睍 W<7k2�� �◇͛wJG0!*t'c$Eh<鳱>D Z"0Zq.Iٱ;6g"%<bF?|YC-oǟrC޲wW*~$H[<vF*b-ص.dYg~����������o�}p"���������#8_g, TNu+xJHߛYBǓ=9-*fqF!FRɪRR|}>U_-xm,L(ќ6v%qQoCe>V힝g@+k*9WHi𞝫SB/NUksx“O#f e__׹/uhspG>Gv�� N1^ &[~��Ҷ'<[ߍ_3<#‰i&C:�hks&&CwMkE8 /LA(a~ KD'|>Ͳ( .1_P$yӒ10 WŸƒ?G�DWrFcmk-GCٷϭ<fw{߶����������q ���������P}E ƙXA91ZZ@�C\@"!6i$*(9#UvaI* RO&$!9>)*[#j͌mRanD7DZd' u4Τv0M@" '+]E ʪyAM!W۩:tGD��kqJoq �=ܓ76{\pl EN\*&`Yh3i-D;^S(T,qùKcl|V3%qxckl>G&cn~]{TGHڴvuQX<1 R%{{k5!ޱ"}^ Z@~ߥVٽ[1n���������5~���������Xx}׼m%r!3 }CxU -, hzqIꄣB… 䦕XzUIIIEB""&rت)dߕ{[El4Os- M.ZɉAu~85YNXk4*vejl*,Y(:m?~k_X5��LUUZF7j�;u.cc¡rz޷8&)"p#4&4׃7KKΔx25J'$h8l#n ="T)e\ieߔCOtu2&IbzwlVps���������u����������xu^ry_; I-9OrYUN5|\ %EZ\M' A^}k v-RZPQ)%6O)+]Wk&ѻ|>to'2yLǤ1!LV YƥKe ǻ? Ymopų!(��x88�V3wŅ3N<e\҉Z"ehlh)ډxr~=޾vۀb E9MRvl"eZHM\6ysu*qgj"8TͤE, )54A eF-Ӥshvo~nϦ?xŷn����������>8 ���������.'^vw4}pѢ@<xj6E|Y/Ŷ%A5BdVOmeRܒDRCzh>%s> 2I#alMp 8(1FFdB͸RJM&JI)=ζ-WzEKrFSs=Q#&75y4}WeGv�́N1^ w&[~��uOw[_3<NB8)8q[&zӏ ~:0*(!Cn LAlU.R )KDjg|hZv0)vt,J T{IԿp##cX񙬴<VT72Wx~1wﭏA ޽Xwhܹ_'+>{7n3K���������8 N��������ݿy㬳/LYmo5LtaTm!SuųgE-\G*`@زTJjJ%x$ R<|('.hx2H$${IbzyU#ӄ<D״+h]ٝ6ǖ?w?j�[�) )�#~sO<n918Qs8Dn~N:kJD,e z%L+"~TeKGKK#I8%j$:~%y6SEG$6X i5V3cZ@]~9P뙽[c����������t&���������Ѕk7^:+K8qtM@}AV݈JZ6#PsbF-sJx!g1**LؑOLQ&*ɇ*&ׯݚ*8=*vxtj&J"DPtjR)Q%j Y=OUUy-wouZ-j'?6��RUղV7j�p;c|1W}rCz1?N崛u`#*6"Y:{"2sd;19M=*4Gc[憜f�� �IDAT! ύ7U*)r\ۣ=mihoWjw]5}+;vnVp3��������� ���������@n>*RUu)IֈM;pLP 6!_"2Qq  T c#) DNnWd%aE dReX+"Z)i0gB4Ds & YdêD&;7^.)i2)l\??y.%L;yۿ!c���� Nm N�]q/~iBޜq^߹8C%TkSQC"r% hѐZ)A;Eψ8bcRpwzZH};mh-&~*&Msxe{<G/-qE9|A myZ=6=����������0}/��������`seW/?|M- D+BT ?DACp.f*sNѠמ|K+Ix%;I|__c٠"-)&NnSnU:SgaIۡ kOH**6*MG5ȤԃF$b2f$ǥnL h<ھmc~dg��VBD'/MM3��82yiۓ^ߋיg,:u$pR{$ b:>hRsvB!y33#L`VAbW6:#!/9”fɄX\pkqoF9D@ח${}ëV>w3bc#C??Y9mw߻qY���������@ )���������py97|m^HSR%\im6ܿ!'K뱡REW\᧟rJUYLa@xrTTs1t$0%%n1D΂gb3VVg|O\ ZХ"aIdACʣ¶#·5 @D_}:yoE btؼbG��a@@�^x瞺yM}w:jpnY$#I`BN[n̶ |FJF'.D'brA3"D1xsT'"qw&u,Slu.-e[#Py/Iٍu|)T|J'R#0j̡t嗝ٻ=f)���������t���������km/^BX.=%H^׿C_XEy$[[FC%\1N*oz_~-TN|5k}sgBoBjrR-ɂakūĐE*9YZM3|l|_{9],<O>2^0%9yb>z`'V>O0�eVk#Oo2000<22rd�߽]K>,,uLCBkG}qx^<y߲d{qO7|%YBT=E&}[lG'=++4#Q4O&|NtܪՔ)Guع'z׆ B��������0i~%��������$zq}bU{.L'{}<b+:B3LD}yE2i݇xERV{ bs2ia(qwjJ.{lH �Q#K1GE $X\'|Ii[E=Bid+QkwŸP{_^޿w7ob<d��) )�^e g ~K7N7E*vCB H!:ܷzUNÓH ͎9Ӛzݍخkg)?DJ}}YK<M髎[ݿ^w[-{1HcY搿sggٴ/- ���������&%}���������8/郋VN-V8t.eO!kr5Q| +] D~ԜR+¼@%t:CKIVŸ!Ŭ~:)M85MtDi^}QzHb񈴞D&b&!G_PC{B CV?vG>Gv��1Kqz-cccLv?��z=yyƢjԑIW_E)=}egxYL쑣'_[RNc%T Ą(7F Q'[3'd6sڙ=֞bROLj]l5z+%;V"LRqfvkAyJ} Uؚis埬vmf&����������������`s.:n7: hԕQ&0tТPA"#%'&p)^9񶮴Rx FN NdBPNr(%<y/6ΑyٓP.㝦ڍO "/.fiE2m.O?">"6xBU6]mtشbG�� Nm N�:/<sOݼϞsg$O,SteDVgG!ŇORTŨJ"dJc' R82[{M37fCN?9~nO4vsg=1vݭ$’/gҫމ~BU-yveV뙽>��������}���������k7^gE mr{N_oaQW #(!9e)N0}Dޗn:p)C*HsWﵟ*NJ!ʦXܧ$)#V$R(>;99@,IY(TBzNZQMiJNE}?Fcۏ ��zZwU�{%KCKMU\b ^-0}sTblS@4P qQW~"dlk"Z!;bko{Ҭ(A9>4cxkړ =wkHL x1&4ܷhV%:}Z~c'Vu 0���������Q���������bN򭗼Ub[tPߖ>PT`$ /4$u$B%$6Ju9B=VT,aTbJ\5$}1�QmzJ$0ю?Qd)&"zch##┾:SN$0}Se.@"v-l]7I>|ًz-dS1󯽼;+{C��06��F8|yxڜy}JDd5/Mv Ԙp<$@Iъ[K6E?Hģyq([&ץ~s'ŜQKK\1+ޞBI RMKy!ϲۙ DZwӖ蓷���������Lp�������|~7M\(שPNO.Щy'ɤX4 -ǐT=TV`,|\JhQ-H T,!O9rClwWJ]WT/ChHb}i|R՝0 kն χ֡#~�N1^؛og�ptҶ^}z_~/|_f.ZtSGb'~aJ5JHAEw>3A35Q+Sh bj-щ4"m5ŢMk/U6B 2>+ca(/\쐱aWYEs6ݸme��������(���������(|̳?L©R$A&~ElzGNipDlE EHA&" AR5nGP6Q%?BYvA _A$iL1I=PWĢ'}E,uWvgR/]&$ɧW%2T'F|2= J6߿~ӊûc��p�qJoq �hGkٳ\0+Oo<|!)}aO4U+ub)G CE$0,Rr)f1Z1Fo<t(%3-vFmz#{]nտHU}HUܗh,6)ls$&!Wd榠CZ@]s¡C؞e��������(p���������У,\C(;99$t0=tH^_�SggTLx/*eDLy ƪ)l՞wڱCU(-8^}/Wz*}nE+)g( ,1}ĒbTiQT-%9 A,K)CU6ƮO*Mb?cOV>p~c��2Zj6&###WMv?��&g޹xR4xTH$ %_JoN<vb̵.5MϝkG 425_\|/BԷ΋bm{Ap=^dfiU厝۟X}] ��������f���������/';#QC\M]b䏦-rGSDX.b- 2H<K^ '\x:eKvPIJ2""y;zmyj7W%1̷<5f}A n)9Z^Ooyf?k/Ŏo~^��G)6��&sW\0c5_qyɁTQh73Q 艣.64}o\ܠSp#;~ohuP]Dz@rAneÔyH!E\R~3fOKKA߻"nByݞM~?Ÿ���������=Mn��������p03_<xM8#B8oLAx? lk5^N2)3h)^am{Vj39l<'Ėlx'1o`k쾪*'Z~yWCGAnRQMd}RJ%ɕ$a %3'' &m}#;lx:ۮҏ~z4�":9x)qo߿ell�mOڿ^8:c}SN6d@BY5re/8EICc#:s641b^WS56 <E#gJD],krQ)N$=8RTU[}Xx]D僨[yikC??^9mw߻q1����������������(ر7g>M!i|Myw橐Jh:4d`#(t cF(rVզ(:B ^΃~!QK%^_tuMp6{N iKTe~3I[C|sE Ud`$0&҃>{)EҢ3mG+Krx̼Ͽ[V,nj��I�) )�=޼9~w .ElT<I N7m#8yˁ/XK-6։bPb5ؓl.sJ%M”/:Fe"e-ĉ]zhw [4=)JCZ@]s¡C3����������=>���������#w:_υ*E&K׼SUamQV6XEK/ חxrXߞNZQsIR2PꄗNDnjQk^D~9BD/YciW*r?Eb {i6Ml+*.UbϿg?ٍW]A��DTUjm=MGFF~��޹xBp#WHlۈYb&6DVDLȺz}SX5&UiuuۿZRӯϛ ̎-Cƨ!ط靅MFW;)3<kn[sQ~[ϓwW&jS׽}'a |���������=AO)���������8yn>*R[q>)O]{.)i׽ncY Y$DIiݡ,NB>UF Lk%#AtyJ:R3{C"Nˮ; *ڿNZMO\fx-0/fBϿ_W5�$��(]q_ӯMw)ZVtݡcFUiAWi\T^u~o'Z]lxXSKIYsQq/*-8ۇ$ k|J?e§Q{Jncn rqM[~?��������On��������[Ͽί.:3PXC>ɿNh)#L %^p0{TQi$E6DBBj\n#bS(_ʺRV]e`Aʎrւ fG9NzтRJ ٮg7R߉:L5.C@>ud[+{G%i]##;�`BD'/M3���㼴?[{?Wt֢EﮦN}>pr";hTQb<!ÇL8a 8 ).}FՇ#u$ M!#g;V}Y_l)Jם~<˫o}Msnw\;{34}fpE����������������Gڬ_McfE5DBoSh@ xI ?% F,8 mB>TV aS>EZ V]j'oq^byEj%Ue:i#YH/dg5]$D}*HT+2 1Vv<+D^/n-+t�����}oc fY8&8hb1!gN\R SB+hiahB&>Bz]G)y,s_*[^sB[i127bn?״!lۆzrnæ_mP3iЊ}=���������8���������p6^;}o'":T̠|g; Í:N&b!p)~2n_JjibGShx#rPfϬM &v|v/a~/yk mP9"Y9kl]}OV!3J/%WZxSbW\2#N5o<���TUjm7zᑑ&��gk]‡tc4TNImJȅ_o~J<qY>+)Đj#HLM-KQ\msrUДZ{Sd;o;5{?qV6LZq疔b!8�� �IDATWƮ۟]k?8L���������x 8��������8yn}bU u&H XrVDM6uz )MIrR!QJ$ON|?Iu?-%AbbjWtI!\"t$%DR:"/K^aHP+*hR)ҽ^?)R)WlRN+)H lAFyzy/v}Wl�� Nm N�c>_qڜyE*M*dAT1541Y"F)s{|~jݮχ;aqex9Mlϛn'*iI'oćfhILIy&"mGn-<9���������E��������Ǽ\}7ig('NX%%* EQR ](xU Y=%ش�PIRHYBު)Z .PEND \"WHjieH:ɵRoMC$Q`C;΅))CIC'UK*kEL`BfbF֮G+o<Zܾi��@D'/5@O߿ell-��K۞zgkoo:goo>B8= 6rK_R?}-}O11OclHm <?oW1Mx1 J.IZ^}BP׸ݺ6GFM o-rL:'{IE?y cy=KzWFX_9)coLA6y[${BC枰orw6���������o)���������G{_)SsJ@xoHv"HWՂ rS `OamQiyr{""Žl"ƐO8^+I -ImgvB **|<ANJ"{+,KJ:*Z?ܿ~ˊûc���88��^{'o>fW1`Nэ#6)3p:NQ=*zx�AQD-mϓ<r޿=af2!4?T!=IμM}x>fuCC?=\0<ǹS =odzuUp:Ϝٻ=(������������������ z5o;}rU?_)aIPߣ8X!]&4v|"&.'E:٤3GJȢhUƜdZPnGW$5 =D|/�D٣%}Z'ǿ{t| ۧ݃oo+%XS~f/I͸TljϞx؞o6��`BZj6SU��gS.Q#YUHٽeFS$0BlYAY^#RXUGMZ̵Jؘ?{lWU !FG* ]5<mˇ-yeKGm_A¥Qkޕ@'t#t HMidWg5>'H 'd9JYs#\GZŽ{` ;"hKi0EXR>/UٿGZؽѵ[;|߽��������J_���������<gZz$V616;G.,b U| T*L7(Bay+zIBt`VuE arAKlp8#5F0B$e|23i.QDb(sEnQk?%`1B)~$cY`\ȋύ?]u?A���4Lm N�ߜx5iLA#Epxd!t+Z݋w <鳶wY\2HEJ9!$)r*bE}r}1ֱO5٢MD4}5?Q+O-~q[~+m���������^5`j��������k>윛Z?KD7dBXw)`~ �PpM>" l9~SrAtTgi 56-οdMiGd�9G,a@XRuZ3j ATWyX֓]w9}lGź4;7~Wkdn ��ÂOK)զ&v��߄ѡ:sKKT7Ib>}MFa2%s 2꘵wԗnVj Zed9 cSuJ_[1 ʪڏ1r=ۢ/j.Z5\'Ba!6ν"ymR>ն7b~fV2x漷.?_>sCOmy`u��������#)��������̜WtM׽VqǽZO1{IT0 !qM"HQAnɞQ؄�-?(A3&)>̡ RI&3 0Am˪BMfVO %%2W&"B $Cz' 7E0kiqE%(^|?0g1g˺+>5ܽEoU��8ejq ��r~~o3?gFrH`}|ڌ"$2DmD[n]$qͬʧ_k H98J-WsXq 2=*4;hk+PӾ}'!oa\'jE&JhI& &ZLUu ^s1w:��������ey��������#wܿfwGD+ȄtrG}E2rCWP '",pξC |B- IzQjvfOxmG&8$Xٶ-v(mɼ7b~Nb眛+iUHf"cgjNMuUi=W1'WDg+߃Js{M$ģ*Z{b磿X?=0��߈t+NM̙{~t��y޻(XmuI ,&PW" QRYu{'Xs)\W;MV@[+gIIRJRus^ PZƮ.s$FD.k倫]v ~;QMlχ5O [POZ"mz~]~ kp������������������+ƙU'L'u&.auJ Bj~zM/"�jFI)]ۆ R01UG_%2D#Q mئF*DBgݒ<֊@d"sH+N}l3qe؃n$BX"6m(dFa{_w=W7+���┩ )��pdɊ7,'o9oH5TONKWm1EoW]"%)ɮmh,~XiCrs#\rmƬ˃*?<]V6=B+g5z^Q;ciDb?S3Q7ۺ{���������(0/��������p8-[xgtib(-&Eh7Y)ʆ;-}R~YaJ<&\ X7k'``8Pn (뽀.D[1$g#kkY.UN*CR3i& (9vJQޤӢyR= SʝzKgF\qe(+M[ӔʈP{Rgw~3?kF}k��+3RZ NM7���Gѡ:sKK\͘1BNkv,hů~ʺY׉":J˚^EUdmuhziEHH$m&S˗ BhTpPky5}"M=:5 Lh=xʶ7Y,g׈ZϚszjC��������� �q ��������p\y \{h/ jӽyuPD 6Ȕc `paCcwIH#՗]=,(3,IjQ )'#DkUF^"dfe7!O&ə?r|)):m NDvDM%*z>FTgmNsT§YSY}6#5A[Yc9/]|7���8Lm N�W?n9w9gD81:%f$<6/ %h[{n;jlFn0m^13{4 )w+-_'gVDLRu5}eܽAg:iy¶mxh1Uչ',^ >xK���������8 /���������&ùwܿfwGD+I.zrXP&`LHQy~e?#JY"ޤDU?v=(%5&�UznݱĢ jvRQ?ddUOH(im::CMnO;U*Q.M"2q 8[S+MqN>!%gxF7Q\d6sVJ#;yW=зF]���UU|̙3{t��ڼο."nE_QjGלٔk!赘?,]v?qHUD^'ۨ\ݶף3G߿D}tcDtF FȪ㴴�Mڵ{ף{W���������/x��������mpZ'WlB;w3:ٔU dD+2y,- �C4QB†`0&0XwmS],#q/qj$Y?iwA"eGܬى$zikWfb\R_0.(Y1QFȯ?s[��WS6��kǼK.}â5qSߖ"NYI RxҬHQ+yah5Ery7_wױ2bv#;~G RmV^#H#}1\V߂R`SE]7X7at[iGX1Y>M0e(h/nǎE~{]ns�����������������ߌ|l7ݽ~KeLZ\'yK\_Kr%zhOQzA YD 0,"9^+)7n[z8G )LqshL#~ZX9oqiKξqme2,l$'73TMLhNn#�7wةfѨb=&KU^;î��� |ZJi5=5666vt��<;4tpƯ}+:,=:=|zw(,*SUYA2SsO!(cfN -7HPʵz0]`4"#^[j%"_-ʁmYעGX9*{OǶƃƖD*ѧhD=٨<&{0CI-Ϝw3S["���������l|���������_qҼ3NwJbZ+^vU`5ϊ9I֪]E"de;2$ 'SnG> EJ%EM]< TdݒeLEOe6HgT[| fBL͸*j&I;)jkV�}h)u#?\7���:Ȝ2A��8zxǺ+恁مy`m}_)用/'iwV,+Z޵ۥӿNN\\AQYc Idޚz‘ƔX�H.9ad^[{^_<m\6Zmoxۆ\���������h-�������� qWRoas 9SS)Q ^5b$+"X�e?.(pgXCFn\MNA3%!ؑ&ds\Mg\GXYqˀD6-b(/&y>YQ%Cm>)NaS?UShHssvbǮ_C!��W S6��w޵fwAOҾb|ӲrH!%}{a߾GO$c SW&'XI6P9> "h_fssZgXc22V&:Q?߅`Q񵨍>ܦؽ'k?vϽ[^ �����������������x'7\up > gNn:Rk(mW.섍" H& "ר؊S $c Q߮xZm vֺܦ_<?Y^W Eߊ&/w9S',U`F>~U:2s3"JeAU[22-kNL)~nt]n��q��8:wɥoXO8se8_h-H)\v&^{"5)A BŒaz`kt6bc#GhoSza,9tnTkm跞sio0 ?Q^j*¿צ}[Vm[��������� D��������9-;릻:{Rb^AD $NI(sIOO 2�� (If8i -t,l;\2ai["ǬC&tCW;~ANY͏3 r(#/'69k L)"aB dX1Vy1ɷ=W3BٻygtՅ׎dk��k3RZ'15666vt��m<;4tpƯ}7U3^$޾`]"Zr+.Q[R] ?J_d"<$)z ףVf=:^阱ּFТ{HԲ){A)5sfe2lB_2')!+(i*l,9oszjCp���������P���������@D'-S>Oy2R7sF^$6b;_+"( 0R#2Yr=I H 5LSzL2F D!Q۽rWC ƅ6UK\8*l?5ӎZu.O%ݔ!sbKk G"! :T~d;Z!"6K29&р *loM&yfqM��8@攩 2��ֿ+RJH{4MXke2cn7:uÊSq^0cRîyI~~,[[v"Û呱cגq6B}"n}\���������h���������X|5w(%ZF^%&Eiz<^ڜOM>:RXAN4t QDzи &m26k{OS %%0 0)jBC%E 9eIOo@81R#0)~A1KEXU%rςf;'J#{]oXCu/��S6��]^sy. OP�D74'jrT W�� �IDAT4ZO_N RE Y|k|V*Z}v?>h#;&g'}ExgkLqIEOD}xSSs V(\8Mڽ|a[^pw�������iE���������ӜpuvB멻蠂^$e7`Db�S7nkJ,z6sC~ x.8wRݷlUK69~v{iL{9d H-\wHvV?, ϴ/'%2IN$%(<ئN v;>w떭n,���Z N@��Sy\Ek>qND] 7Y LC cpz'Z˵ա྿^2\vjkڷQȱJƐX|} |:Zp:۠EFD,i^&\09R(I,JVDmZG ��������4f���������q5:{Rb,(?6A2{Hh9BO\x!,wXT})A>ЀTm"P!ޢgS<[뾎?!؈~*a-cܯSC7xpm1!aoa1Jӧ:o3k!k)[)xǚqPgn]uᵣ?>��pŢV)MM7���SgoѡCxjƌ'f%veYr_:_SD[kQH>_ S[ڕ\f>^"[/!&C@Eo꘵{p6gS+465֎Jڧ}oa4ȊGk]5A&mF"!9WfMg͛7?|z\e��������`�������iě.\O9dJ>e92g}T~?[T54T ;W]޷&J h;u"7?j,%$my&ʘbHK՜-cm$8ϰ7}Z{+Uُx['V"É $کW6V<qw���L9ej)��0yǺ_MUwva yy[a<ۡG-՟u7kӒė߽ F b=h -Fdw~ui7vG(jܯ&-^f! gJ[BXbӋccctWo6< ��������L#Z��������N,pHVz$.D*l)EQY6v}JBCElG\/ra0!QXAdK;&=Yeq�ҟXJ߭8%*3g+ E;L-.{.fYtrwݢ/=عo֨��`Jq��8vλ> z{<Vo-OfڙpE"&?L)$&}k˗/�۰}kr}yX/{jz=E˂z^Եf|8z=<0 T|d>aʾfU'ʴ!dP~];>{BKq����������������Ӓpuv7\Br_D/h_KM*p+Vh1#bEgvs (A 7t]e%1Ulu4 S$BgϹUx^gE.L^b6irϹ3eDS5u [d4 9w1;ynt]7n&��`Jq��8w%M3?gQ=�:ЕS̮C[оrY]ugZW^iWg԰slW5ODc#kLk'R[\v4_^zZ% Ŵod\QҷwPÑ}zNMnC+6W��������8�������087uҥy\@1TDn۠ Ih\g/wYlspeOL[i[U#S,H0jA4"귞ڶeG?,amݵ ؠRӓ \`&٫ Fa$dPHa88+ꙫY<'L ݩ.u:{]}ᵣ;"���,|ZJi5dppp}��pЋ;7~[tOOXjƌ' ?GI3bׂ^e! $$~}[wa벎UΪ69^NKy-ߩm~-)W(廳VcGkXaJ3|CIt9VL9&`|OzS^Ϛ7ot|7zjC��������1 )��������']Zy R~݌'OaPo2 CGQ`Bζa6. `XQ,lRL2I`h zكbgvrmKX0`@HY#*# m-_SI0Esm<Ui\Iu}JvcJz,#?-|���:Lm N�c?<[9?g?gJ"}v I/%u¯]}yr j/EӔ*e-^Rb5Z<Z+k`,+bIwdDb2Og/fW"s=i?G}uYfӑ# w%S[Uu}ꋹy|#?��������cD>��������_3kyъrhp[躭#$9*mfI2!D-OM6u*f%Cs""C/_vp|[j?2TبOϤ6l$"df%%#rRD:KNdiYz }O/k&HƛV>ڱK_C���zwdΜ9_޻wG��X]^se !5x$Kfm;.bYgIFT1zv M]?HG\:~tmIF& LzjO0ƶyiO͂Җ6C^VdY7u,mﰮWO/w nP��������1_�������� >7-_*qU)1zo-w0IUTM}-BD,e$Ϧ{DzUǞЅ<!-n0g9ZM,s=sΑЧ hN#y"0"EB=APX8bgF=$cee)]ޅ$^~ンW/'L>-[���s@28��/ |ƙ潕w')N)Z9XK]N5lt:8I~VOXDC@db8?322Kqb(K/LJ(gHrIpQȥKĵMnwWm-����������������Tk>{g߼nYKeD4'mr-zۮ탹iS()y\%c7ec-`aSmsMRnZf65st%`<S0kԐu/b=6cCxڲyiM4c  {^Z<{CasiK򮍟^;c��OK)ӝ no��CCwnڷҡtIՌOn}4EODfmrddڲx,~-m}]Wt&rDub{-<mz&!3xTgGX9zҿ+,`qα+|z i{yF^gΝs-��������p &��������䋮8^%SG$v o2:u3d$H:u%܁MM ڳ9+k7s٪T>T; ~g. 38J䳈QeM&7o%]ΰº pQLlLi\\50aP V36W|U��p̃)SdN�;֭[֕v̉ž$d~4שΎN,Ɣ: '^&"RJgU\/q!=>!`կ J|ѓ$@+DKuki5ɬ.HYTK}93⻲ Ӧͷ|1'��������08�������1nY3)W?e}\ڂ#-|M-:89{Aݍ_9<z2b&6{$#P2�P_XDm6@Y/ Q09 Eu@[?Qm'vv=&kD͘ľYX:Ƚm^PIJER6ֿI_o]jЎ_g���LK N@��;Z3/` S¯ b{qQ]&^Oy}v+U6k/$|*nM0M:Q!X׋JVVpE.xbԾ('dѢ<gkwXŵ{<��������0`��������,+Oxժ<W|Y9FŽԞל:% uƋ#(  \"ݽk�ϑmȃHKbL] G!뉂=ny+DYP|_ڣ)bH3^s=2OiZ{S#}J>V bAwRF~܁w|߸e��`Zq���̿7,\ 3?{_[rT_.$:Z!ֵ�CאywDiW!l?E%XAZ`Ջ)z}h%|;'fݖo>mf52MnC+6g$��������`���������G9eg߼zۉR "a]>i9BJ^gW_;&Ѐءˊ͟"`ծ WR N8Î%)7GuVņ*qUn ,psʰ.m>1;A q[xz=x$FnG왅NB2 u+V\0`I]_쏮ۇ:��cf>-wj288mlln�� ܹq=tc',]21cb-j.S hÍr^]WQѢ9N6zήrGqS,SmƊ`-jg:^8^RV’x|ez,,/#fk1)J1bkg;et|9��������pq �������)I]q҂w~_qљr"6ڱ7[2пT@+@XZ68MTJܖ:&)\6ͥQJtE^ATƗMޕJe6̄�#YYH˶&QٞX] c*?o"1/2H 75v z:Vؕ?UdG._?p��0m8ejq ���G~sܹ?goD,D*vn}>ߧxoh/ov7hH.i?I ?وɊRv#X!K)!B<=-ﳙq$&*)</wǎώӷ_e?D`!.,x\zp,SeU)|1U| :?}n��������QJN��������Jݾe#-xKdGޒ=EԦmw+u/EC uU T2Ge%S?B (|JGv))Q\蚶>%|7ڲ~ֳ+'l;2M-,f!j}*AqSI`7;u x:C���TUNnʜ9swޏNw;���y֜lBt+Y:M?gee&yjiŭ5~Y=yLr8=]5OBg^*ߔByjO*}21#8;ؽѵw/U��������x ��������E<qUQ+P{)Z|.a|S"sjD[Tx3(kˀ؈ġ d6Г:]Z:=n~]׳"^P:Πױ=<&.^R}E[J&d"辩ΜH({*|1L*9Eύ>3|[���@ )SS���LK.}9k z:-+ی\矑#ZO~)~ -ԵRR~mAv&Z4Qi~䞤גj)m1͑*?BJmnv,:Ė=2D}FҦ[os��������< ��������G+زoqYKߑ*${"Z1X E)gʪν9~YSòM!1 IEp 7[r־_n֕zO.eBjŖ0be䟅݋6umr/[Y I;HJJ[ ^#wPYqwT[^cmdhC9g4+Cl_ݱ}���|ZJi5l25666vt��vFܸ:x7.]21c}&f'= B. ֺxS͌[l+˜2쟱`?/o]&Sؕ>iR|nPD[-z׾\~*$ wQgͦtǑ>HT#D$J.MҧrGxּSF^gΝs-��������S��������u|'y_</;?т|Co72kIsB "@QUe)\!7ǿͶ3xs~g-v/(":l !~ϩVͣsbgѯfTp*D'T$eYgM}}_>(Fɸv{_/p\'���@�)SS���L<<[oo͝{smf~2L#fAJ^laV0;dV cԷhLZX!kŞ6){hƗpr<MxY+Lvһi(וc(CZĉIܜ_o&7./{F8U|>x<s��������^C��������x 9\hEʺ>YRE,�o/4ֻ7aۏ)BT7mA']1 Q {6%u 2ڦJXҒ$VF% VZZEprw3b-+Rm2kO|<=i���UU|83gΗQ<$���˻|É-/U#ITYwL }\$Pݾ?!Ђ167H@EdKZ<O?~l~^r>gRӖutw8�� �IDAT^,Ҕ/["XGҜyrR=Vݻ̍k��������x W��������̂OlrūV%J SkjhʼnDeM* n$ڎ  Cڳs$l]_K쳖Drh6K3$|3U0^rJgx#Ed^>RrXAptߟpLk8%*du]4'j.ٗ>*PR#-<s|㖭>���0 N@��7a%Zf͟wzOҤ<1~m#߂ʕ4/½BLY Ď>[ g`FyHYFgLJyT {BNil<ד4ާC⩶eOeldhO$0-MOo\}���������*3��������x-wǖ3Z/KM[ڀԆ ؗTFR,IGz[w\cy=n>}3p93ʜuk\a'hښ+2" #* =2rvVfDm=1Z#'M@SFߝM}I[jFBSCh^PCVH'u^:_쏯gwlv���& 3RZ {MM7���Ћ;7nzK̮;n1B,/w/Q> R}zPc󾅸+;RZs,U砮kQ)d<6e>gk\~R#ѝY43bf,h[~6On)z>WҖΛ7_>sɇ+��������J��������U䋮8-Oys4Ad&s022DA>T@^M as4 5=Q2./#TƺlŅIೆhDAԗߺnKoAVD3M<hߟl(WɷfeS;+@MȈT(kJ?ik{lov|hG��2Lm9��+;֭[֕j<;nZ.Kޟh/d Rxش]kIDm:ɭg,IK>`%::�G2XT@|]?&!}(Q}W1�k! uOlYs˷sޙ~0nYN_w}P-dTozqll7}k��������m��������q獋R&pل@BLۭ,H]&qE ]O*b|j RHl`˶tø0f8 D_jKE%)41w+P)bnXwR^/gi?Y_@ b̞8YgA}aFV5#Kޞ?=(���┩ )���ܹ/j?T\o~")lgKr$`Rdܚ<$5nNjIGgDAGF|׋{|!m6޲G(f'd8.}8znWdA"IvO߻(��������pr��������<qUfo2I V{aC*⦺'m^e:˶26:K"]0ֽؔ*''7ڶȅT)ef868oh7H~m“&ᇶ7ᇬ[1 r7&α*;:,~_m9R<=lZ7g7|���@28��b%5Yˢ"ֳ)IDϥ" i-h@X?.PP^ܾd@m(&5FB܇E#h!Z$Ic=!VPD:2WK֌rB*mo,/ JCr|//ZmmշN��������0�������#?oyw0e|& ^Ι. &- Wnܽk2\`ʢ{ a)% 2cKi󘙛z,vk^L$GpCZ"ǮK5fsC/ vi'Vo :`Ӗ}O֙cdPS]M]~<©/?k}t3��� ̧VÖSmcccMw;���x:s{{%3LY?Jf.|=)E�}~)Sfͧ/2?W&܏ۖ?"vXLlxQ%y7A :윲 qifw}6':[I .߽mɏJZz/UIϚwʁ_w̹s=!(�������� q �������#]qҙfJiA/p6̊1MT\vYnS#fwYTZm88sRm15K uMkl3X%ڜ^` JPR>3|E):]9gT7콦Lm{-:J}-^!%jkʐr{}{]/p����WS6���8䑑ߜ9wYxJtFusD}ζ!p@ΗSY<ܵss.-[hOt>j>|5ј{s4Kƺvf6^QG񿣑I]t":yg&#zi;lEz/>|饗D��������a3.��������p؜{k~k;#J+ԉ}Bl>b&Qm?{ Ҫ66NZdl}'v!v4Aɇ pUU۶HmK+Pw琂+mv2m~-b3=%zFX +Ѳh66 Mx%1/k/+ 7!"%Cǿtê}֨*���pݝN;dΜ9_޻wG���zkN\ܯ''㏠`,mU气r_ ڳYiֵ< YN8$)BK޿"@%EjbзEmq—|o.g'ö\lWֵum b_CG#K6=]qb��������eq �������WpZ+&ZV͎nYo*ՖUlrwmeLr×uyFeʕF߸Xk!`{%g! �]/ۀZ RATl`(( t&utȈ۬mkIoϊTh/  3w|῾e{x���┩ )���^ ]r/̚?t"Z>{Z B /"qpx^K2܎ͬa){n ]׎zG ')qwqS/n?)79;K]IimYQJϿj1łnĤ*)?ݦ}Vg4��������e2��������x%wǖ^41_Fn4^VaB6Fجey~cf!\D$/!5˩MFOtJ'5M2ܧOl)%Gw3W$PLnE:xqMcZ76TMotN;_nj!˨sYwXF&dGdD:/xo_ }vag ���̧VSmcccMw;���xuyvh΍C{%CDgaŸeޣH$"-I߅xBf$>_‹E 3WYѥ=du;>;NIIKۓL 'D/현GIu-Eb v}[jf'QGXƋg\Г[r��������$���������椋8-ft)^yȓH\oL!6fT!r"&x> 3fkӘLv9C nRin“yrN[$WF$VIٰ/S٪ݎQT~y YY%_[Z~R<(���*)SdN��p4/<m+"^d^3PGq *uڈ)~H9KьH:3ID!o\o)OMIE( )]ygͽ<k?.; pWdȖREs0>dhJik^{ng7Ǿ17@��������`U2��������0I~Y yQZ,1~#BBE+2OvCl~l,_,QV)LM,UGJFX'7 lws6.[mKQVhۯL�)['jG Z" V,rv"ٲlʍ0s_}߽gԙ���x8ejq �� -RGn/R*KT.{ZBa22cIZ�cfuD[G{f|-뭊#9a}Or"aGtHMc뛉h_}jSѮifRό1I3}E]"fiC'Ud7&'7\��������Es���������m͆+Oxժ<eXaE*)fdNi6SdXщX[9mN ex Ⱥɲb~E,ٖY->3K{{1KRM/^D~>51EguE3qt+@� NT- 2^Y'rHrY4s -[9���S6���8ژw%ٟ}q֩H%Z##*(d_ ]q"|)^_Fڟ̜e8fEm.~NⳔ~{dtV'"I q$X<d9ߏ�#Ni>f)rigRٷu\ym~��������@o��������yWlٙZ?%K2"Z-z{|k(8oqr-6DFm~.OܠM:ÊEִ8R&$-3di9KioW,:y lelS YJEV> @o롗' Hx];E&4vqA6[ >`}]R9&cnO{ҁ_޵?㋮}va7H���5OK)3 no��óCC/_:t}v5c": z) VVb=!y_ɭo÷*{G|,Z ~6y_d5p}lZY$aFGkOT >JوV/erY?Ul VCLdH#Sӣ'dnlP4!Bz/9-YszrCC#�������� ���������rEWw~_quE)"[JFCY̡70)J цl#ogAL)\)VXVdzKuZ擯߲\O"o۹{1b1E,Ȑ2`"iH2\ͨ"peG6)"h&" wͷP[)Obk<wo|?����8 8ejq ��?2[3=t9 ;1?Dg>8C{sw?JWq{®}[^_-D"6ޗDLQmXY\ZdlaL[)%)/nD'~E8b}yoIH5/ ^rʽ7U8U| UKG\��������@+�������>,5<&Zݲl2<VRlrSv^[NALfӹ.G/͉AFl&)BĽz~Aݔ 2G\d=npI|ʵ)n+q[UAVP%F'vD񬬯&$RvhS3mܔUVyax_UQ���bzwdΜ9_޻wG���kN\ xya[I qJtD$m%EǓ&Uz"gGߨ]c}@zrz£VϬфOkHI9ٺ9ZyE!-:s QRmf?aϴ}7i,+T|W7e(T}oz=~k{ "�������i ���������zۚ WxU=kHɝmg׭TY'&IYŔ"FkE6[F}Ԃ,gPjERnTٝl6XoSS&Z\e<Hwc:QyfEv d  FX(>>gRGY<1P_ygv-[I���GLm N��0wɿp͚u3{+37*W $YI_>6em^}MJU$\NlQB[:&:zoZv>. �Q>2+F:xdHCTHIMƢl(} !I qT$"_]c[fVgx��������Ӟn���������W3m^?󬷿+J9ٚl_l?j2b6lI~=5Ѳ-)ZN]re)Z<GMbTz RJY̥Z9ьrc9{&3g CB?u; VmWϕum|[.ԗ hM*'Z#y陧k/vta7]���(OK) no��١/{Cx’ϮfCDgh@ wu/GVҟT0cЙi)//Lm{/kGm`kYIr+wRԡy->lӷ}Xgw]j;ćD>'ޱ0"e 9{U͝I(z;C93�������i_I�������|'ͽӟq)0ъ^"%f#8+[O7SҖ͖"`%IU&r3ر=diFP"G9a39X\ϤdtQuDM#o)5a-O!UEI{6LOPd$\Al'|>C>C+>���L9ej)���2XwSb5T#xhL/ůdiDT=;xef`}_>j_2/r%)OK,ԜyL _.<BПdM=&z\eęYSr64kӡ~~7? ��������v�������L'}u˚Y;V(AI]ꔫ 19YuKo#!1;: 3IhJBEr n<I:UI˪@ =ddn6gVE8SW2l7%Y2nc?.]#/ ܱK7o���┩ )���޵7l)r}piQt x~ ik;{c|ַdȇwyd4�� �IDATYN%h+um} Dzmx`Cwb`X{|ByN<vmg3VćoW{>3y޵3>[w��������L:�������‚OlW"DipEmKɍܜq%ow�u K2Y5˥_./s_&:mB ]Sբ6D'98.D6R"CtR\$OujS^׏X&۬{W"{ |dz$V|rgشhqKiw<{ʸ(kno���Lm N��p0?k5f͟z܁O9P2 v>Hŗ@ۆnzlOº<Tzo]O6ўHCge~ Pd2c2EiZ&kgR~hcf#D"J3_58h?Zod۶?V7��������ӂ<f�������~z՟.;su֒t/⎲,U zdD؊KJ)2鵘'~17}))r|釐4'd’^nPh�SU?7Ƌ2*5.6~^ξbl6T<?݋v߸y[HdSļ~7<q(!xb3߈r#)/gw>ck���0i)xvSmcccMw;���<;ŝ~<.=0{ O- (SfbRwt|gȚ\F`{{Gx ?SDNpRwd^|ZW¤q  ϏHCHdȎOB#hCDԶ%=kk'a鿅Og2?to>d�������@�������ӈ/3x/'OVy2Bb[\ IIXo6YoSά9[Od#(`9Pb) ]_^mEEtE6tBh+,KZ)I)ʮ~cmk^[2J9SnK m?o_mV&DƳoؽ_P�RG���88ejq ��c<2[3=;8ћ&+JPג->s)(&w2eؔ.[KyA!w=\ .WNf2vG kJQʬ OUBCާ)٣};6%:XLܖgZOofXUu\}qI{G\)��������$J�������޿fwD+rRכ,r"%k]_ӒZbȗF9uf$"ۊlL&m <썻gCteH&#:ĦqH=u;~p'P~=XlMm9r?p>gmg9ʉgc;h.S4{^)+wv ÿ?=nX���1@UUt:̙3{t��c _v/nPkWHN0mh?Nm~xl6&/D1_7YR}hLU)9N۲W'MRW_UEcqHs 3׉7IQvo3nM5kgnok�������1_Y�������8XfÕ'^rU(,#2(brOޯ.kHj -f4 >d[b =[$7;sʍ dyǛx]́8�%ڤ"am+e;'m7's<W+r$r7c[Yu9Ѳ<wOl4s?y۽閭C���┩ )���/d9knX7kәhyY ayIǀ96I!m{Nb"wլjAQ))Q^obm&!/ >2ES@X"[eLP8iq{=?>,WFGD-cG1nGW�������p0G �������&ز3o|3,zNE j&4[" uf7}m>iFfnޝaLfs`56Bnf-|)d1_H^iݞو5؊hdY\mQǐg$!%!–W Í zhkk4r3UG+H\pқ{%}4Ps`??G;����|ZJi5dppp}���mF^ܹ;qɒՌ{:gxϨt'ʚÍABȵI?E +b'WZ;XۈMO:8Gm=|mo<ٷKuBߣ+>~՝t5PAC^,P b]?D0SZZR 0#JTh182u)`+IptA$2I8&~<{4@a{~ڳ}+28$)MV-Xۦ$)6!7Mb{Myycv|z7o=M�������`q �������8]KG_#w_ȯ;f^YD"蒐J0!!)gk\ mE'mE(y]~3{E�!j6Q f QJ?%Vc綤0HP섪H|!7X\"'IyR=̜b<{Z(EтG;z~f]|:]Sc;΢olp���Q N@��`:c` Ϟ O<yGGgHLZ_V2zʘ.d6<}=4dNoR6%De#H{ʮ XؚK kЃjGT|r>yvsIjlld]IYUG֎Qbb5|v5/'oo]'��������S!�������)ˢ[vO#J)%DVS/ H&LnFd:4WMThXU%EIly]VVӉڹHm@DUMWBh˄;kx 2baFH)#)dFkC }Ĝԓ"E̤|!_'_j)]#K-+<sבd+Q7_lCwr���q9ݏ}̚5m۶}d��;֬}gђbBcz(fȑD‘'Zɒķ.67Un7QQ^:>ɴt-VYVs#LrvIQ?5vV$VO?j,R{`~r۞- $ǥ'{ںOtݖ{9���������������`1/otɲe/70O"#)܊*2JǬneFTe,$JТh=|*"-\!u}IөUGعM{yU^;!ڝD'Od Ֆ^dBދy@u 6o'~ Xy喯|a���)Lm N��0ݙw'_{M~8J%~=<Q4BA)Wr[;|xt,VU=s6%L=+k56ccw=עz[ I0ϢO$k,Alts&7ו}&Ih\Y7+1~u<pW�������L)]�������0uyw8|©"$S~_I( 0@rWYjjSV1ĩjb4/m}N�W ZP w'eIZ 7YRH+{zjd1v`[ס$ \mg6d\k$J{ڦ8YOl1lypkX^?G^knuS���f>6t9|j222v||���ӗ]6=/ݕ}ŧƘh>8Ș G4:u`+LP OIhK$Lk!Bm JZf"zRSKjJEm{%?q06`zgnwSFB7^VÁv#Z42']዇gZ����������������%KFgYs琫Ҟ}E;!!T@ד &퉄DX^PQ%Ȫ(ud6YV9ɂw)JKGj?'u)؉ u*&.O=}uJ^Ai*Pv&u]#Գ,_l%]o:Dt$~k:+{O]c���tS6���hN~K!%fɇܻ:v\$jS}|j2t$(G[R8rRsԑ3N#IbQ;#dul%$,dbRQE"N}lkm?l*F\'1M'}Gǿpy��������a�������yi1쐺UA"$)"QK:j9Jyi%əF!+Ʋ &$yѼ4~,2Ilg^."!7'P d!ŽT3Ik%0_ IaӤ0GI^1JGbbO\~lnǛ^s����S6����1g߱f<(-2q7S*,>&+Y2QDEc"U+HՌ]GR16a+㺨=-b\k﷢ )D#q�(PC3$H1Kl;1jTϏm)$全oéϤD2so6DWӶYg͏]orϷ8c�������Dou��������8yueA"%0I!%lQU*S@jN'b0g749يa$koеT\)9]SL~? "&si}cjvO=` kOZs8 D4vHpR_h}"$)ٓ%}Z_Oɠ:L;-_a���┩ )���@7.`kW4<oq)ђ_ZLXLj 5o#qJ%B+VH,u)XKQI*%"OIT`)HV41UC-U%SZcOdk\\Y}HO>NJNbV^_<p �������pH1�������C9ؙxǍ3,^L1jt4GDJZ*QSXVSa0iC^)Q8~>U m0+HUO}&G!PEc:>.U-!v2{etdƊD^G\}dMۆ؈RhJhCn${%-uo1Nt6����2Rޘw���صin޽ufƌD4_޺js1;∋!YQLtT0Ut`q-1r,Ib^01-zdXUTB6@h<2>YmI.3$c"NfGcqG|-obR},2rҶ+>J;ޢysv|Շ/}{p3�������!�������!޵tt<g_4I\QeфMU['z d&h$&AurVd%' X& &.j~%KBjXQ-J,>)&6!?;T'R*KWK T%Kvjor$zK>o΍ ����*LmP9���8pN~K"L:? xdJQ","_5%|%V;!1"}Lێ/l|:`עa8pދ*Ȋ$pdpZPw:)a?v+qeAFJIT-E pOi}?nb��������:]�������x9 ];|Q__oE!DHla +tBF>9<}(XG &X#N,IJKӥT[i 'RE,ZTp'49 U>X&&w x/dGϪZd_Z?wMl[϶pS7߾k3 ����!Lm N���^:|m͊<,D9U+&%5D]@ĎǏIF茹LD='ZD뵞G9a:U`8QL+ ? l-Uedh<d"IԬE3ٓ\A[uPFUM�%u R8<Q>==Om'u[g��������W(��������U-|}K-K$ZJ_,|KBl`Kq%s(=b&VSDme~r"{/<w/p*՗V) 0X|F}"H4_Qk*i53TֶgTd}#)-5Fj}:l_۹c-;���0)Lm N���~>]pI|_"Z2@Րm5-*Q$x6^7l#@DW%dfP8@SSEqGadTѤP@uf n#f]q%Q:BxeKN'_LʱєT3zd#^:�������f������W n/& QiT9OY˜2!O11EJ,(b*Ɍ7 ^lif{^+8JVцm?~jH]$M_RnЧa;R} i۲n.VoYK_%)n.=ML4YZKfI3ZcOv|ŹW޸nk`*����3R|VPeddd ���ॱkӦ矸Kw}?jfƌ14c9V^.e-rHu*Q)v~iIKQBb”HTu_WcDj+ul-ϛ߈oR1bKϗ+'cѓUO4֔NOIR~I>|7Gzhk ��������������xy㻖r͍G$,/D>]\nTMJъPۺ8ZQj.Zb*ͬr]J."b\#S P#RIZCVb<?[:Ť c %:(M~"ɉx7Ʈ~P T^xPE R:d$6;l^۵;7|cs$����S6����;֭skgy O:LD}JoJ*HPDb>W$Jz\]$1NWVe'bzEBx?,x Rg*#H5ߌzEy�� �IDATjA3N8'-b Sn{/Oy8_LOn߶A�������"�������x9];|駥.rRS s q#Romqb" R–2~+mD qR\us9>6մh.1vfDs럤vQ1"ѯ:.~_C'fꕽӕ|j=~4f_R .kY}~[n^{|]nq����x4MsN׻̚5m۶}d���8X}WWh+|tNNtK\\b^W$ѯ6"p*":vWQ=ES&^ַ 6&vEDvLa"2?WZ<$gV@a]Ϗ+1{*]W{R歛7^rϷ���������������/otɲeih(/{J$L3deF&>ZA# d E$IVv D>vvMe2iP+,1p)u)Paob&Hd̽~쩃:A^Nd^#wS>+sǓίqR 1vW}喇]7����@28���8̽ෆ]{M3;[5%]hk?<G\X5r@8CU :pji[e^R&;DCe%2˓hhl]eJ+:ٯޏch::6Zs( JR\,~<xrw��������l �������0;s _qŋ""Z-LEEKºA9j Vhl Wf ٧[tqιr ] niJ٦g_~`.qjRTl3QÑ0$`RU?wLKqT9seֻv$mLd=U{!K~_+νbu[���� Ǧ.&###k~����&7=۾tWڷ/1|+ b$QJQ @dG >aGɱ'.j.Ia 12*ZPvMz9|TBĢiߎ[8ń}#UE36=#:.̹O˵hsJ-Ugȼcv|Շ/}{h3�������AG��������79'{Ӝ9<8q&!'OƴUUM`pM *-ITc|GR[|meE"[t Jˤk|3a韮J)#^{Ve>PNP[_$bǷB*=jSEr +RtjPYwٖ}ZgZ,-)+]o���� TNڠr ���sM+/.}nDid-:j$ P./-BEA4Dl*<}O滯:r q=WDWvj#oiWt<LVbJ[AElSTT>`Uk|y-$@Q\-mB;<Cλu>5&.mDZaűN\\>nu�������p�������8ho93((ŗ uI@OBn+UM1{,֮}Zq%h)C54)If]I$_+~*'~7H3+OODnZi-J9~'2/$I%u;+#竍Rۻy=v9���q���;bEDKHQWE2"AG_RPQ#ViDvGԈTlVj[XB;׺dRBoxqHD1.[ٸ q021Yu:"?_D\>B21CVxy SVUI%]lOm'?}ݖ{������� w2�������\.Y'\�’.ቮq4FNL6l=26LE;*dV"V8Ұ>;Rb.vhE<}>)uI Z]F&é*גFRNJQD5A'`zshX^Kc/<km_9[vf���e┩ )���+ >ګo7 ˈIw"W=+kqk_WJRbc7_괿+>*ctD;!|o%*۪&yF!}?p%HtenbJ4h{LԵG{u"?Fd3K`�������/������� VqS(eA4#(ቸD%B_EmE62GMQf^N,Z̼z*Ǯ 򳱍[4j"Z|GjԱ\=\g_`5 )_:m,.Z1WlvM.v8?l_[zr-\jؕU~ދ;mX|u[ ����|lJrx|j222v||���b'/ۻN]<̘1Fa3A G=C/#wV1Y%Ts=$v舎tȘ^T#PJH;#BNgf_uf1/7$68qwc?'iEe{7Q׸n29ruz.dqf?bZ4s1;O>z=u�������sq �������KFpǍGa3.dD0E01H,2BBWDm3iE===&RTabZ6}AR&\Rصom p+赽vihi${{J^F">%I<r]ƫz P_XIn"gO p2W]s7���)SS���W7>fXx$͏"0LIEk5ddl%a#5VbV1bcbP$~4\]”rTDQ֭m9V1!1t|2ԘUĖw"w[ru$vW6(RJ<R"4PZ{5|?{'v7�������D�������fvN#RI5#^q!WWJ8d1%)+5Y& }َL&L[+T|) LeF^m$ZmX):mkXQ~RWS' 瑾'!ٗXCb=VLSփJߟB)*/c?Í[nz9@����iszd֬Y7o۶#���wo?,"Zb+~Xɀ pNjw=cE':[Fdd/r* [5yM?.E:7XKV(uk*+=y&hDD.Z_蘫Z;FQېh'J*vAYdX6s'Vt͏}m[{\��������D8�������+7,Y, \Dm "Af NV)U2Hx|BW1b$:RT1Y*IlP)_בWIX>%|kM`@ş)+Q{һnԻN6th*6!a&kr߱s;wl+V3����8Lm N���^p\}ȯ{K"Z<9<f^Z5ml':ESc:B "G]Q:7 l~'KkvmC֒NjD xi;qqdzOY4kz{}0g =QH?[ EVdmTڴW?ȺGV��������\�������/oƙ',^/bT*a*퀾"<)O}ו'<2-]Fe݃|TD5SZbrKVm * ^ /Ljrj Sq|oDU^9E5y-[/2j5tEvX]{d*J^o3_O+vo\-���� |lJrxj222v||���P`'/ۻN]<̘1FDH2ѤnD)=ӎMBX jgcx%>d.gq@ !_~`?E*=cnM-O9ȍN~'zJd5BjTJk*kcV1ri3{"hd1;OCϜ}&�������@'�������w-=~WWy݌Kh %f>_ VBYNc / uE+腪d` ە+%7k*6 36{Xmriܺ>"LNZCĂ/ZQH+}b&Z5߫=X-I[٧|熕-:Y/l$d}vwvg����^U N@���zX?X5ó߼ O<@BT"-:j;O߾ƭ++Kc|Zb~}J Va?9VEj,\s#/1H'8. HW_oc(.bHXBK~B%-:D22G%̚|U;h )G.Z <~ �������pf�������,ܽ+O> "Hז?P ΘLE`)>1'qSSYĒm�6$U UXR\d4"QZ#dRڦB?TQҿMR>įFK3sF qd2MJ:-4I�oHҎHʋrT執<^߾`{���p49^~d֬Y7o۶#���_gq1/9Qt KDHhWĊ E�'wbd>>6'펣q:h6QA&1TLˋ1D\ϿmuNY !-VȆ=Qjm0fp6"NƃًEy]C_r5<zS[7n=:�������PW�������+n}^lm alOR%v∉dWh*} % 5E!$",ґUV(H,f"A',7'bݺ I TҨ K+#DL6}&O}T'qOG B^ȗM4+–&I$;۵cܺ#����pHq���`j0]{MP ~j {bhI"TQ|MY:W3.T^w_" m%BL=Te28%TX2FۈvQe5!1q޲%5 j]FK''9 @~_rT|sۤ]Kp�������.������tg=+0S#1_D KԫL@E#@,d+*/"~Eŏǭm:]~-}U6jَ",ueDϵCFSItBW/d~'?~RS)W,Lyd2\8=]`~oܺRD{_3H[{/?m%����0)˱SSNw?����:7=۾|WoǏZC3f| F꼹FR#1:R ~"U0)B!axL|YRŸzH%Ӯ%R#"~>)5ASWHtԮ>Vz;dU[> M4fUnGUæ&^sd߾o(asi;O>z=u�������i)������� xӻ<7a3RH!vPMN"BB"{H1"#Hv1DfJ24;TdRo)rTŜݒN)N٫ҎQT9ZTx*TqL俾bo!E/j#AY%&ݣqH0f-C"m__nݷwM ���CS6����S7fYXpf~Hh kw_GL҈Iw[5 Sw/ ()!S1/(yR 똉tZi lttsE;;(R Y[R)=SɋSX,ybu������iJ�������LC~+O> J" e6a+U  5]ְW0JD4NϝX- KVCU/*# ;RW:; VWXz uՠkN8Du{"r9&~_m&^&JG : ԩĈ䷪RP]U"1 V^#ODEr -?o}ۿ}s���)G4zsSYfݼm۶Lw?����SXbgEDKjjxQy\)ȕCdtuLҮ3D֋J" %mY%.jo˄,|e}aG ^WR;v:A"NX3ks%Ѯ16=cn$CԲ{OiVt}-|k[�������L3������`z%˖L %j J:0XdQ<O�ٗD/ zL+>gWfX&s%onϳǻ)~T!BL׊tV\ |AœhV"6 _%>HaNv35XW Ѿd 4'~-v=;v+a���┩ )���g/ꛆ=(-Q D(>"%~US$Rq7?lqIQ*v:OW˺ȋWŎX-vR[E[m"E1)i .$u{=)L,: 'dkkHg_ w>-OPuk??\ ������i6������0]{|5+S.&jIJj1W)!P) 4HhR`2 d_+,!s2Ge1~YCem&l *UAAUmŚM8Pp+h#*I&2L.?e߸^MU#]Tsɱ `?{<8q }!(ω}2^EK[{IcoދnW~+vo\����0acSJc&###k~����27=۾|Wڻ7<1&(D-YQ*1Y#sUs8U$Rb~B YQHw6` yy/Q[%TQX~c$~JxKCroѵ([Y[b IQʤc=Z4<gΓó}mrM������`�q ������`w-}ʯ|;.|7ļDB%K,'E`_'UK8t)rb%XEv1A2RID&F^+iiW1'울UHC4Ť֣IJ$E;R؉XD A Ů[ >&tF a) �� �IDATƬ뭧!H~{|OQw ;zƞ[ywO9|c ����SS6����vš߼'<IDD2@HN"Vsfj "iZ*!1ACdWɊQbI%fbD MzaDvi{!k0Z(NƋmm,]S5 ;u{O [0wt}SX,yb@G�������������X{W<3"% -fScVIjJDc ˁ@_K*!W:YB|O=="AmO'YH"2g 8xVN)'=Q^1fijZD&=nUXd׾ BʲV'aMl|{w���ԦiszƩɬYn޶mG���"g+zg3FIN.7lcIǜttMG%WT;rscoFx"t :)aK1gW@PHT)L}"褵m2/rcGfŸ !e+R[]8t5=y&d[fZ[7?O_��������������A[q{zeRL.jdҨ* pmz5W=K"ˋ$h?N& 1KӯBa!Ȥ� OD21I#QJ+^2Id?I^/ 8AXJY! !N&˄=VRj֗jF'w=;v+a����&8ejq ���f/7͜78"^L5 =&;FwTSM$ۑɷ֤u[LГ 5 Y-Jbc! ik;LۦN|h<amJ#:;tTQH]x\zTĖkw}{_ר} Vod#\m�������x1 ������9~;n`|1- q򙬌 EP%-BOdծHRL_B$\9e\T#_j.)qcmT^/ە9KG[5_~)Z*(zRM'|M&/R)OﺖZ-E -z(lzY4S, 6qgO|m%����facSJc&###k~����^n]wo8G3ƈhZ.V(aaXSRcy|)c9Q"IW.do_$8<u#UiqIiX'%)uus X|OYP! b.E'rAe2n_yU/}{hS`�������&8�������`w.}'{Ӝ9AJ85H-)}DSJ:M 0WCI0%6;@ *\&횾P&K6sX[+vUdl<:5жϳDIj"=ĝKd*3&yz]GUtEFS~ـL;R;5-=pc?q���5 *LmP9���^O7~_['8&Z2X|HEb/H*U Xoݷ^K "m"*Աʼn:ڊ,SǓ*^_^#U<&'Oj*Z%7Yڕ~YKND"9NxTz&{[/t</=:�������������S抙'v1U0(_$SObH1qi]+6#0$Fۣo3?'' kVS%c�(pߊnJj'HaMO#|z{C4'.I+ 7eUuzJX]o϶}vŲ}s���i)SS���wŊѷ~V"Z&#"\$1[9ltT5 ]pX@ Fk5'k%?M;; ~e>y\L&fdy (uT(N8aqjG 5kXt6Y1)lǜH&{^Z穭䧯r{D�������0E8������s-ks<aJxYKKJV+ `ik_S"a~(F~w]RUotҞ8ƨ׫{Lm$AJZ`Ey'ryIO+)10O&']'HhJ<NNljt~f)mbߗŇc/ۮr[v����kS6����ӗ?|ix{KF~W|되1PHAQ):xξ@( _V3UG0D:j3v?&BUQ{UfG/8'jH P|{c$#ǖ}L=NAҎD$Z"kp|[nx䁥M�������S!l������`s;ׯY9S.&`#$L }?cѿ.Wb .I:#@ NU4H߳k,,: @%ȁ&R TȄe -uGS I;v9qw*G $_T S{cnj. gJ޿rX@5:^~1~̝_~sؽqV75����|lJrdddd���td'?} h3c͏\QO{FRcRؑINPepcdSWF"$&2&l$BCW-8f}Ol/G4Y\TR3Go�j /o9ShD} s s,'ɇ~gG}6�������08������0ey95+_ ͇XJD Ȉ?ʧ|d�K儘9M0sIfBtңDiS2v*[y1KN`*oĠ_j|6> 'OZ-E+w`O"}Rb"Ʈ8C-%#|D9.q۰d][[%};V퉖VbmǞ[W[;���┩ )����ؾ`խkfΞ' ?IHT͡@|+\3(NU⒢jN ex:kضpK^#B픾A>n1,bzN+ް{%{i;ڞIJ%6v[I^x' [X7ad3 }l7o;bB>~8y >I�������pȲ?�������d羹bIADIek- O~QN DU@r?yz]b&̉Mc\!F5O&Vӌ>d5I$&n9Hq"OFgvDtB)4b9q$[ب\qP(9P7 s ݶoײ4Xy֝7!J'6>~w?i0����MӜǮOMf͚um>2����w|e8 Omgؗs[s@J5پ+.UK|6W1lS^BrcF6S`wT%FO{]ͭGLS eտu=f| 4ȦYGBhˆ&y)۔>PzN,4\穭}������� �������0Wޣ]<!uQqVa#42_sY!$;Ȉ+jՏ$:K$ Y ҄$~+m$9[@#|%M& #WhӘ^ǁ&/R "ɚE o&{h Jya|߶ʭoy-����S6���� b|n7HEݛbJW :_$$2#F$[+#a+vmۮˡB?^Fgcm ;G,6m"֭+b[֢=n*%_H|O4z\9^B![f`w2)zGy`r&�������!6������08֕w4`b"Z7;gkn"%L$`D J-p(l)Xr1LIqMM\3VئfX\%ҌK .aQW?Y?&Eȇ}BQ>Dn`1.gJڊ'RzSir*,Ʃ2)[Ī)E=^3w~[mu���`Ǧ.~w����]x~m~O1cl -F,9&g~n*LnlVc_Njbv9Nn+( -m짽ֈf%WD'|ه5+Li{2eUb)aJ=_:*կZOu7xnt|^ Ud*^㥶‹͜3{IW-x1Gg�������b@������8y9uWWm~aQHpd6A:&"'԰yinF.TUJrJĜͩ_A% UV8Qs.Ď,%apPE]ZITJ_%@%q5kQŎTN>GJ#y,YnIMRiDJ[J9Pխ&8.2nqd3}[<S~|�����/) )����Vݺfx~ቇ3D<JDТ^‘UPa_+|md%`1E{AhO fm2f:;ȐvLRcpSx�HWEacz>,~ecQc_nõ4q ,ۊ\{QCm ?ܾ{ݰ�������p0ɟV�������r{W |iDAƧHQ!%;Cc#(]|KVRHNVN\KM{h%%JP+$'0DZA H$tcьNVڈ3[\3vPj6b,. TRR礣_)HhO3ϵI,9$"vT["cO<߾k[����isz̚5m۶}���쯭^1zg%JKHĢjM K$QKa60ió6&$Ӹx+j1Kce;5}cٓ"螛5տfC3%3O}YkoPO]T6ƊKt^d%O"Dvw*hn~7_8�������U�������6^}{K/xíI=R!ha2~<UĊ\윁kܯW1Ȑx1>ud\WV~bFNW-}%&YJ"UJmR3`HO"()qLD9<6CI S'hKo|玧o_yի����@28����/7ڏ4<oqD$wE*<z6L}13"rvrl'\1}qgY[3S+z"jQ<{5j JGDD"1\~,d[ ,p؄d 88XA)Fqh"rՔ*iI,Ry<xS������Uc������*GOf.X81J V!p|Is" SI<F47lJ\'3mn;kXfMnk+p+l2VYſmuuTu)أM(%ixE}|W-&k{d껬SɤI=V?%^̝_c:C7#�����3R>w����M?|~m~63fLēhDԗkJ~:qI5'c)qF#Q2vVqamEdMZyL9lF\f,b[V`"$.TK-a{@ŷ(G S.N*,J,D9 a?Ӣ9<<~tC ������WS�������:\2뿺Wq4K,jHd.82#u'R*Jџ&FBBºT" hx[VƗ9ިHТ7c( -*ɾ-S=9'!RD$>Y$Z0D):e?bԟoLL^$%beJf*ٌ;72cѥֳw������)SS����}?U_\3<{־#OZx85$QR5g{QL )z2gCOc6Q])jQ|Q 8pR]R^!i پnX EAB.~f-xbqYW,']")9u$媬uq"b>E'?p^=}�������������� '~+f.<{\E}}Q:`3kqcLT4it2Y +~>"&6k5<vHX \Iu-BSTJK2IU#'Ycˆud'W&g"\Lf%㫁=I:;q?o}Ⱨ>{~w?����x 4MsN׻>̚5m۶}d����8g++:󴳈xX8EG3I M\/8n߫csb:h/^"E*bt:K{.58 fmc,1~6*QW55!V&gƧm1v<]I F RsMfy~6?vm=�������x��������x8[s/[־H3+כ$S(v^,'F4-FT")WdNFZ0l\SMv RdBk}wW؞*UXX;.+!*QIX֭JARd"J!H6}=)J�öo2[lyq|׎o_yUk]����S6����`2Oc7 ϛ{-Q1 d UJ0% BRJuXaG[ D/v%VD%H-/0ʢȘdv`,,ޯkŁ=%'AֱFVŔ=Xz9KdlL= -z <U�������x������$s?3+ŋ=DtI%.EOWOٙPbD"̪M}?6 .eJ2lW'T ;cد^xY_DŒ* %f+H?uה ³\`Ȯ%+R`MyrE)m/SbdL@"(JkZA3h-w~S?tއvo\7F����� f>6t995Y;>>~t����7'nhǏ\fƌ1& .=`FLܡ4J\-z" )ryMvnW\G%EE{+s �� �IDATZG(ͼUkslQKLANa.U\?yWbqw}{r_=fIW]qcf������� S�������\::Si导 RJ'ȗ]z$zj¨HȒ&E!%R|aY$\E>bUDFJ"`%VJtd̢jQmBOUkLJX,Ug!(G#Iqݲҧ|)!SL@ ,% SVWdKJ1LWa˗&l[v/]zo=o|�����2Lm N���fYXx$gx۸8D Ou BX©TTB![q%ըfm_!yZ @$vٟ3}l,:zV"76M,){ݕP8]ZĺMSⷕMsR׵Iop̼O9rщtzOn_d�������8D-������AU內ƃJ)N8 S\zJ Kq#~˴&R0&;LuDC͢26b{f՟Rh-_5>TuēY"lu{ U\u£4B'6 2ߍ)שG] D:d-{ͷ\|����9oNMf͚um>2����+F~Y1;]*;2H&H,2BqE]ylRI%%c12S'קK&v(v߹X2a~br85$/! <*G钾<LH<w-]I#=ўTzySki][7o3m=Ή�������pp�������ثo}Q^, 2=v%<9b jQ0UJ,6#۪Yl:(ҊhMa{akI.y>fqD>[_ޒMW?=q#!aL{N'�@7zIԱe94؝<Vv-JdD4vdu^!$s^&bp -t玧o_yUk]S���� )SS����J1O7 ϛ{܄HE[ClcRX*+d}A9/AE!YS&(CE*bb1(DV0Qb:MS:{%ZB!vztOdFB*]od 6p"^1o?aKTx%#ң(n\5J.2>KX������@_0�������s3=}|/ϔ.@25aS̽_Ze 7BLpƖ⎵ *L<_ȉ>bg]T*N$:$$ԉ l^F8?ө I{Q"Yg̑E[;YO%-?? g9����)SS����Js\~+f~DԯD1;W}DT m&럊@#Gۓ_j/ $j="tU`tU S T1XM^cy<d"ǧs6[ǔrIƧ RB\%s@c~jc2jz?wM��������Cp������`1Υo+^6Ҕ d*ZRaKXH�5$-2;$=@mp+sfOKjr S5'WeH5ҖPR6I%9%Vh(W!\J n#Qܚ}~8d>5^nSi@(FU{*ov|@:Ϥ,RHl>JKO9|㻮)����3R>w����;?O/~mx~ቇ3Di>[&c8hc6f諍VbwR1X3):NjE(d&%LSg2}HޓɵN:B:7.=):̀dƐZF{u؎@2'<+:73/"nN9r `{On�������s�������/W}s/ti{ :ANL; HMу#"3$\9za+WA~̈́kCd/aLF2*b$\d灵~TD*V3I:U![,R9k.cqZO_s ,߆^!'J:|/Vm>k޷~5����x@唩 *����;Gb 2.'C)SuBYe2l+, ia-׶)J唞='c{5"*5ٺ"9؊s/k$Mk<>Cʯ?ڕL5\+ԒTȽGu7%!qt-gם<8I̴znxgr{ܴ��������������o8ei xOO &R*Q.u'~-rBRB)!`/&DvLB !َ!n'8=1LW셗Jq Em<hEaM*qNQtZK5l~ O@X UH1ݞFm8sǏn_y_Z����x8ejq ����]pIo7ڼP%樗ԃmtL3ԁ39\At_/ ?!=-╌h-8;ƱG1OUN*Z|cZ=RzoCE_MV AD$N}Q!ZbT0-)h:u \RX i>+V9���������������?s>57\x11't7d”/2)( qM*(N, Sd&?7si}JO\k" } :t"V[YXWE1k,K #[=Du[X]RDS#-"V߯` \Ҿ٤1sYxrrXzZ{!<[>|އvݺ1 �����0|lJr}j222v||����OM{>~ECKq(14.zM!Tb\"{G{' ^RPqE[1f2.xe9]\czydnL wK]ZWI=Gr=&gf>ls.sޜw(.3{IW]qc?e������~8������}ѷ~+_?_x!K,`/D|i>'\B&jL֨5jrj3*+]c6r:A8 _5eZOzHή*.znU<d{%UuSuDp{`:eoG8n&Ix9 J@Chmȭ6( D۲-4UދEl$hhvC` n<ƭc^s%KZs9S;~r'Ԛs֒Zs5-FS3 }m lNE,Brrq]|{Ors uםmr����x`)M`N���??ܣ an6M*Qqff ٮWl1~=ώ-%s >J}R'{arm+mq~EzxT?ץ􋪘՟GFi"QK%RR˜Mrƕs_1XHTDYaWyi&!V} 5taOLڽ{=ew�������pd������.N[^~2٪dzYKPEܥѶ'4 sΒe7mP&QFΉ|EgD9έsLێF%a )2biLU_˰j#PUr)b$!g8Z[^ۤ߳5[v ����4Ͳ^wh299yݎ;.����}7}K?Nڥ<%dmO}@eIos=RFE:QGsyga$I -2ٜvC 86V5$gkD1 oL9&9kKJsv'hfܞ8DT*/,25EPjk飏suWn]g �������@B�������]p\3"*Ɣ2#~4Ɋ'T (c+�RO L$Uޣޣ)37IJQ71$c`,?WNnvT2 gj"h0.a9h+bEg=^;:HebׄoIlVD`[wO?/\mkM����`����[q/vyhy6m1OȜ40�ä')2S"2dvTgaS%n#I+U#K-}TVsbi~v?|5l= L+>KSŏAuBHR9`m іe;G"J4IotAΚ8BݱqwW^ �������1l������ce7_s%K)EK1e9D,$#|CD Hc,mEL^SEޏ&=?eqg.R6 <QErY#/:l~F>r9iWW'ngE]VO`R&UO쳬[=^$I=l>)BYSq0q?Y ~%J[ROg^̽wns����ǥ.3M&&&6LOO����}gznמrx%2,sΙYj0A#tH5m4f2Lʹ9rz0rqTYcͯJcKpڒ7ύ]MGvUe^ eV;i\~|͉>s9y|vWhOvѯzoA;S������� S�������s;>qկ8p%3/ͤA 5 %yJ,YQ=&H( Vs^-UՊ'*HHeUf( 'IW"ٛ)0] ៑ҥ1DR,܊eTR}@ >%IsH}VP9 U5rgf-N;Qpf+z3?7Z?mr����shs ����F7>ϝ'.<73hs6s| $hsPR%*9ceL\=�(j*gM6Lb"vمM5?.nDC8L\C ޸,5}T3JdRL$5`~vR+zD>SNL6Om{u������j������,[^~ҥDtvvd#]ĦHG;21'ɠ"M)M.aZ6ش뵵2O %3dE"bbM'{@>gVId{4N}DϻhrJ|fҰ"G/aKCog_OЖ_<m^u����4M݆g4LNN^cǎKg>����`xWjN;GDrޮAEA27s>G3D9WJ:g)vzCN~R[k[Z8./3%SgY??gʹTږg%$G( :.#а\<rWʂl[}ⰭKO_ȽW~ʭk[������`V/������,cG?w+|48UE4&)NxB+T4Ř6lxeh?7} Z;FRHI1QLcIVhדLkDt,.q -v ԖH**3ӶqT;`J4r5s5}2۔7"esJlWJ=?z n�����F�SFS����0[q/vy=' 5ҬA%D> Ӊ6g>ִ&oe0eRцi2(vW=c#QneW9(ӵ˳{s]%kDe?k[FGl\O:LS߫޳wwԆ܋Wm������:�����ϗ\; ,!)ѢHӂS�BFQ54Dі)zsϥ<BM>hux"O|4ԏ3Fb_bjijsq}"R8A0iSFIȶy]5P}lWё1)nɤ26Z[_,5XmFWc+v/\u{Ϻd}wnx$�����<|\J"<dbbbپ����Myዷs=pSl UbDUWjnWS9VU5t?GV fLix M/%1?枋e/⮶__+kcJs\K#mOƪR|ZʹT >+kseajy{s-:>sOLJ I|>U/>=������`N�����`2s~$Eė*8R ]zI#$ٖC9!;?aDHc9&0e`%S؊52vيBNGXFdjGɑ='6**tTN{js9=3uM@F8[gs7ĵ@Msz9T<_tkWu\��������Lm|t!̼oRɩdLls{$"䡒6DflǨZUĴf[\V Tz RdswתFqޓdefh>|i.bKyCX{T]/)$no6a{)NjP7/k5FR#?:qo15|aO/~=������ u������YtVKXׄ1& V?GPxC6Ey oݒbJط:'?lULiES'9r삽̆x-box_9Xȶ?SoP/U~nX 54.^;w7 cJ2KLj߳U]����$M,z&رپ����ؿxW7,=&=`"e6ItiP|Z1Dpյ09 J<v&+X#LYFǯ|6ϚYYOy?'&6�'wT2*yLUKHS}t- {9{*m{XUrĔ?/ksuWn]g�������-������_1?8݃ ]$jQd8J/>1~1SU7|=_m$Kb3cI^)ؽHYnRdTsc"\^7[HUȜܚFuwl D5KF{Oum<VQKsR}Oz?7����8060����`eފ3O׎{IEzek 2ؤL#}j+(ޘ+GKKʛxμQFRF�� �IDAT㑩 4ڋWHr~Z/1'!ӸO<SY"bLW{iO3t{1s7EO/Ö$?'.9+iMo_yjD������~~������`9ݗ7_s%KļHK_O>$/+ W&N*ñE #2'kLf9`d߲D{eb8TlPG<b(}r^QkȊeQ1Ji tj|;bʞ)Ӓ~)LyaPFCܞ瘢 3oMwNg6����`?K)]g9LLLl^7����< |oMxÖrdsЁۙyLJW @.-ml?^!H9W*L)C *3ecz}|1%ǩ9_6 A,oncOx\ ZE"~d{CT:&2!L5n."7Oք$V:^[Fo?$������~ )������sWo}ksA+h_'g_ď|+jY}"mRr?BGnPO V<nR\1#a6B]S)uSe@":i8'I?*=%/ ̢-:(Liu H{ًUb*yC:[نueH ;VkƧ02}(sd96myXOޱ.7E����SFS����s㦟r=Ci3-1zsL]Խl4è*+%8C+Lj=nRz<9o}׵-Tr ,]ץl|N6>/M)F|N =tL %E:`ks<yoOb/w?0"uXu)g?{ʅ������t������0pV|ҥ)0! g^scx\VK>" l\^m d"}f}MvP"GY|^սs,%'e<a70T4ty.5FC zEqCJfEk0)4%(ګc3g2;"?|ϣ?v ����4Ͳ^wh299yݎ;.����ÛUspD!9mO~frd^UZR>'zRd *\˹=e-)0&יfa@z%hyֵz:F,Od s{urvVΑ nc;ړJpT>>COY uVlڸkl{+?}ֵy5�������4�������#~@88SHTE3 SϬx\jBGjXm?F"s0L}vL6?({el_F\"ֈb*(&Ym<#+8+Ѡ>H/r߂䯳iSNlS%2/M1٤O D~64ٷ)$g)@[wO?n�����1060����`6r3O׎zҌI+'vm[kph&g+ e R@-,I^We $~;x'E{S;g>l𰇇ɹri']sQt*%7RMcvmjfjæ{j������0�����p/;5嚗%7,,,5{HC ,}E5b5=EA8[DbHjv ^IWQ %ZOYs?hԕb5Fn M<BcOfȆٝ}pKw[eE>.hV^<Y5hsQSd~SUR~G://|u3m����0`RJṏ&}����~xks#:h;/([Vj@)E4#RMZ^jnTKǬt3X&v~u`j$3Z#H4'.k]kSR^yoŭYVRv$Վ!S,"e"F9Ϥ'uA3.d[<e.5r{40/7>|^|{е������0������09?~կ\Iċ\Yc= cȆ kR'1%lBL/9'aJ4tOSH^J{7Z.$6FיiF~ ㄔ8q/ XIG`wEiPi)Os'"2߭SH44iQD- 8k8ʴsۿvKVu܂�����f 060����`6s㦟2>_yCD; !sw1ϵJm3&2Csl.AP>c|m !ŶSqXZ$]x;DlLcmAJC8ɬC=u9s ڃg >1{&miR1Y#%S�]djctTc15ͩg6yjS������Y�������# ֪t)%:̙_ՉYVHlJYJJ-1gP%x e; !Q?xa{J=)vĮE߫eԚSѦƑ2'~S Beac43*E/2+sk۠Jz}SNSזԚ+<؏=?_-����`4Ͳ^wh299yݎ;.�����M_9_zzR EdRVP2Wp.2??sm]S2e}R[Ū=yrPEQUȃ{Q,)�NMX9wy_3GMSϘST!01sev"VşawZWQ) x$(x̼_=W|ʭk{������}@������}qi8[ Y \U0 'B" Y{R #u"b*QIZm.{RFc1>ް"$b\"194 6j�ҵ7f?I4YY]߮Tsnĕ&%"jřDO|O~`\,����Y ) )�����y+|?v|&^)F2)fOumȘafF}ukh &+Ff%yl[AԾ9[:&W%c<<f=; >\DUPf6y"Tܮ0ÐHTXkQ?^v������OK ������x8ݗ\KĴHWHf쓰Z kk=atpUߣϢYr[꼊XrLgdƂ]hh0TNfjSm}~xJ 2]}(,~Ei,%.keީlKvkIc+ѐ7ȵs~>U%xI`qcBϧ }g]}wn#����� w\J"h211azzzl����3=?[/%<e/۞(-j{Ø1C ևU};MaH +vEnrk dxhwVF`޵ }dql|yebqL~Cd՘|5)ԈƔA\92G^<>oS'}=o;t[������'9�����eΙ~|+hQ1H gY $k J*1$2S@0x]|mZ'  SRE>1(Rm 'ſ)`rRݨ&AMXDTYIRBqVeItѺ[\[g)!Q}Q=ETs1fzg#P_ZwZoК#W1WS44$Ag6:+c&-����������7VN>'BLhATNH#3t6ikfi;W(襱ƚ<o0b<mLӫ+U}-ޯ)QRM#zKUw#BbF Y}G^59>}&:$5úCr!aƚS[^3<(������`a"�������ozKrO2-)׬ d`"Io.3ڇ`,~=ͬi@e*wTYiay;75 OX^{y^fYMUN OGo&N_U,ڳ*ud/{g=|ϣ؅;].�����(4M݆M&''۱cǥ}�����ěUG?)Fe5f Iyqr}ѥm *asYĞsQU!E)kUܿrb]=Wjۚqkka3/JbbcDFﱈ-އ8LLJwlXw5+ZY[}T jo<GO]y������t������%eG>wao> 9>k6-MDIC*uS s$j`e~0j!)3U1!6Q5%k$%M(QU2e# JȊ+IUIE昱zLSsjԤNU3٨X_#e":1Kr~ _;4��������gފ'_kǏ=f~ߤR"Oj2@bLe80mOrRM02u~K蟈0#mXsk(&Dx~̚N0J9KcAg#.Mʟūd,1VDtcJ*H=3לj5*VZ3Go_ǫ ������d ������x8yr/YB ,RU<RԽG5ZVЏJ_rcQQBTRX҂.__'@EfYsAew`bGP3bזe. tjJuXUѝH1zİS!DT8މ,&h'㩽Fn@VRs_};gs����K)]M&&&6LOO�����7</ _5{]zyS<"iL5JdnU5f{_Fyr1Hy)s%?mwcjɥەϱH2rljgWXUX0F "L{{2c2x|ܧN}s_cރ������%������q߽_+VLDYCM Ii+PۢK&آsGe/H`"6HȃT{Z<W3!+uL%\ qV"4҄!VEBWe!Zlficfa)>J4N=_RT_'dļAVaͬ gRF1R-FXCm6鍷 ^;mr �����C9e9����gM?yܣ?E$L<cRFe2u%jo\c2ΎEΈ!{!ASMɌg|Z:,)=v69kϷ myϙ(2hӵF4*׬FWiuIKH=KyT+庱stsӜrEtz6=������~tm������d֭:ĥKl�1(YJ JJ '\ŕ<k3GK)|6: ')'EUQj ^0-tMT]gұn9Oc0F,VQSv(Z3ptyrz?1,仑&)P:ؔρغ߳U>õ�����^4Ͳ^wvk4nǎ}�����UxWj뗞NDNJJ┨Z߶"$Țbr$sڂ6qzmzfȢ<Sí:n^Ou1D}n}0$ϭ3qR`r1N&QL-' sYl{+r<������~k�������~k3[nRJggᩔ8(47hax$u"Jc /ZNGՠ~C$k0uٲ-j?NۥU)qS`qmט!Vz$f!qTkvc4x]I_0$0nĭou'XΉuXQF(S;vvӧpS�����060�����zbk^c_CLU;,UDVWI&YqY0OibƓOۅ !|j6XS >Ov觶6&2pS":,ȼQdMfnM'ՈubT0(Mm;+x������[a �����o_yU/?~ɿNDmhNc nk1 5^dIa斬_]!9ǵ,JRSk f]۟:6,ŹRciz?X/y}: 1})ϙhTskByf>דŰ'83G}ɂz}7#19`+^ܹ_;gܢ����/ 3R;7LLLl^7����W噇~KL=]<g젗mg2)?7j 5?l[ϜԵdDzGy~d2,^W,{U,>BFn#=1qU5 i"&Ѿ:J^ֽ6{K 7ax:yѓ/>=������~�����o9Ӝ>O+VGLHDpXmWqzV5?o#)X8Rjs,2S=-PL]F1*YxޚGJF=c :2OQV_PVB1_xvO;P,<e JWE嫆&BAߒ s$D./VXߖ00W1Vx\e[7.X;mڋ �����SFS�����~LmOV-s'?EpÛph-DC2J6TKrYCYαJcJ ]z]nɔ)9i'v3Ɖ^jܚ3ErAi:q9<{1bĚYMhLz ]=%DN'ɪS;Zx;^oƻ������C������SV|ҥDtLD,=.'j&I'24tx$4EDBsk7EUywN-7SzzZAfpB,#.4Zo4C5nXK?|nuIʽF�>4Pyq,mowO\j&؋|Juzw{`g]M�����4M݆M&''۱cǥ}�����~S/: ;{m@ࠐI�� �IDATj3z{{6udJ,da1۟,waCBJ1jB,!HRc& D\Rk֐!sJfX.B!VA~J+J!M4ڒZ\ek1v #3W)R3fܺ;Ϻ������_+C~}������`G?wg\+ή�S/�ע(7zMT?_dI5K0&M'rjwc^&PkIm9Na4qo^Q*߬/Q8C^J+vloiayH]<xzu]A_A4PbKܦc]* =mݏݺ{?vw&�����) )�����yX>~5>5D\i3IbsJ5cĆ0'?8_Lݲ0j;(A\ 6WM":ىDyMw3:=Oy <a%rlXE*)DecZ $f0=6>l51}{V~Y9m;p"?Z ������׆������9}; )E\~_3"s= K6VS0E Ȱ}]+S+qË?�{M4暛;atTKGΜ2 M$Ƣ2koIcՖ$:"(� T٭{߸_ �����~2����〉CTQ$B%L7pkHΌ s%ۚGTe5s"rXk Mk@|^<e{ 3H-Y :VE.FzN ycLӚeʳ}(,+6RphNjv~[;?|������~e ������~5,;wq哯x[VךtC3 &8)zPdYƐUQWIN2L/TR0YYf2형iCU 1n`}i?S}I=g>Im6VD ^?Dݖ)9WgFT{sPAȝ(ZP+)_T"c<i5 ]鍷 xuw�����|\J"h211azzzl����;7nOV-s' !L-s@@(Q׹9eirQE^;3L0?Q;'$!v`A;SD{{S~ZҺih)j`WQ r\e q= "Q?.JYejԧq <y9‹y&޽yr�������f������˱SVJ)Q#*1{G;kt!!؟x}%qœu&5GyjUp$hbiFTH ےci_ňb'DZ"Ҵ-ɂk^1ADE`?uYI%2js4ԱeMQԀ~&#@E4dyi<^'~v�����FAS�����^:}WyӉh3{d{jn%iEd9_QCģbnTmX>qy֦ SR̮_J9,56s>]"kTx%+{;sYoDՆteA.FNtu"6UCՠ|M}HUAVx%dG{k#\+٨������#������dG?wg\ qqY]' @2eĿ7gDsCq{2b[NK'uf ?v{iBK۰ofǐFkT8p+YËh;34T]5lzGUR|lf&I,%qқ7^7]GGh���������y+z];~r*Ɣ2لk+BāPj;=HfHI۶3ҞDF,sasTW:O+C9um ƙzț;SIUskETQCO\mo@"Ư}ٞv=rZǫ ������+������=Gç-k~gkۉh)6X2As$VJ2^ 8^fc:F?'1ڀ*! '̺TH~4SNn=MMRYH35w1y_X19M5?g |.mI?bϧη4Skd{㉽}fl̇-x}?gs},�����3R[>LLLl^7����♇~tkz[xAm'1̘bcvܮ5ß:c~5t'ќ5o$麧#^:CoMX+{t 8~4|6>ԟfWUS.n PDל(9~(G>czs_£.������`9�����G.;w+no\V>L('U?Sɪ 6X[X:Il>_h /\!\',*pĖcK#2$17 AFP)b*:nkƓH\␧z b#chM;;O5jIcO1S\{>}}6k*1•Ou󟕺>'!%ڲk uܳ������u`Nm`N����7ڸ\L̝|MoR)9bjV&VLrpAD&]VM *"'wMe3ހRWP?>Ȋ/J_?ϵVyv2Uiyi4saWDk0t"c,m5̵Äu#D6G{S/LzH=ta@ /LSr������Cq������@O[u K27h%mq߳ opH4&M sd,CV>'Yzd,R{QW<;13[+tgV2Qo:O`0 HPUDTF=rɜLU9uصu=jFmF1oyno.|kw����izFvql����}e_qՑo<t"Z0>/$)x�!O"~ǥ6EtV]TzHǗt{Y?XR(<T&c6鉾]vW>QsU~^7>u QäzA3QF?/5!ĚKVKbHQLkp|ϻ|>?'eO}+>u嶵}M������F�������|Ö\gbPbEB X29/ZZGfYSQbϞGh4^Y%}IFI EnEA&.n,ڤpDZ`{SS2-OԹĩȍľ4P**c{[vzj?~ AS�����4zo9&0�����[S.kǏ=f~ߤADX79!ūx3/[ 0% *.v3+cDUvy5AۚXlo v,0mbUqk&kX z9"܃1u/ڰ{[/;+߻ڵ������8������ Gç抛zK=5vbZ45Tt.Dޜ[@VC}*MlaٮFWUeI}97mZQ14Ʈ"35H]՚ąPu}_Sm+?0 TRqOvv821RZ,Waf4Yψ3|_O%3Fa\"zγ'yKc ^z7^sߟgsk����� wSJi&}�����y/<t×o{_ȱIP9WshMA꿣 K c'+7wzj++:wd%)`(H;̭!v}k9?Y^(k$*ŘϺmSƗzFjlԶ}&yՋ~v������R�����`VqIJs:ȹsDgoϹ8iqwUH*q$|Rd4I9ڔQO*U<{ύ,ߢM]gե}2"+٨ &OKLfHf >LV$Kd1CȾ{]9L&i5-~oCo �����9YnÓMP9����`ts7js^T&8fTsE䫞t:uSPã1nSu]WuױJoN'0 6UHAVzOiĩdԎR)ZeqVVfƍX/\xCUT^| z_|������q������}jݪOX&Qũ6aUm;'QM&ӋJt K"UgzW>6iaDfdϓY.VS7|Ls+}lPɦd*TJxN5V|4c%s{T:,dG쟐7o.|&�����I`Nm`N����=ʍxӉh8)0nFAK >W"qsi;M'|;>W,ϘhX֌b /V&ۦC[C^Wni0sIc"&\HQ+QvDk=W|ʭkoֵ�����` �����Y˫?vy+{gx~)s0)ptUO4V `򓴹P'D΍PDD;6 <)rJʠbOSB4m#4}1< %]H,ut+'fII3auj*RJϸdV1ƚaS)ETOT b[vO?>v  �����Q`Nm`N����Mx)ٵ7RZ>&+M~l[joDcC{UV]1[P%W$2h- =s 'hM:5VC\.͓J$ Ymo|P2{Oc39v?fjæծ������1<x������zO-׼|%v"Z$/wTSk A_G`2d1ȉ7mds9&?X'eLaƒF�V"F6XiMw"RY*+S+gcYG?K?zMTŵ|"tL%!=ncJMsᶊ^oW=޻;�����`K)]'5LLLl^7����`x/<t×o=_xW [ۼW([MkO"AN,Ir}Bqmuw6EWrsBб#Q޻*xxZ*ڋ5c;:#9.0!F5Dk$=Nacz&|oA�����Y)�����`VsIJs,om<p%-ZiDjI7 @/q='g '|8Rr">ꊬF²DH"jq;I4R $qt"ߔU|:լºZzJ69f#"s$:5$QG\)MTxs4xk0"LWaTRq4٤-?`>~&����� 060�����6;7OV[Ə|ГB̛IE)0D�y@T=#.o@)Km)dⲒDdL ֮7ʹqQE ,۪]~dd(aP5}H5xU0̽xJ{!(g= odF_b+حp3>S‹q&z63D�����`V������O -%s䗓sl!u.I{-5{ֿij5uX=U6ǤOĨ9Ŕɉ#I> 7U,GCk8/m*o)nzY8"+z,5 *fF50Fok̻C%2̬ayo nU>õ#����Qie^6<drr;v\:����`ጯܸ7tf^:iCT/m!GXDUE+庒bK4bDƓg%Ϟr"-*ǟgXE�>>YIYdIATQZĊMb_9 }D\o Nێ+aŽgEo~rO?r_mwu������ρ9�����:^Ϟw9ɜo%=6g>6,N>X)"DbБa%\ #$pfHsLU16*sBD6?$QbfG攽'n.DK񆊾œ FQ'Ӻ¢ g7nDrBJX|SuT9 *ި K[vO?s_Oi �����*060�����[S/k>Dj%e5DRXX{(=ɣҬ'= :/5:mg1sFmQq#Z3F;&w)D[W<K%“K1?VדYq8J`B)Poؘ-6 hԆvm�����؏�����_yU/?~ɒDt30O'hy䜮BL1 6\]S BF#/)_ ǣW d|nF$n2պ+yF*_vycy\O.WQ)#\DYkSfR9 7%jþkŐްC]R Žh v|7n]ݹ�����iExĆu}�����'yh [s?pؒtP?/ߣD쨏5 rEr,4/lx#E5dDc{, vEze2 g^/õH"j A$ѯ_WEܣ*XM̪aKr{5 uB{Ҩ} NX.z4LFb|ݓ_<~ܧNm�����9�����9~W9}|8>,ipka yL*QvLy<R 5.+waD'>'mDl?LIdETrbR O[Q`aDucv/3,xG,tԍ%YU$+8yojKI?4mLۿXO_5�����060�����Lm?﷌ϝ|B̛YT*%,$A1zF!/*E(F"xL; sH 3X}FQM2f4|>Z֡)q V@6={ٍ{iT6;h©S;e!-3<)7������#�����pu.MΡ,tׂSbזߢ#@WO*PotuJ~�� �IDATWkj}6fѠQ/Ԙb=}Rk0uTgOur8C=$,F arc[ʘ gX$^NӾ*E:rܱHs#v[[? ]{�����FizGvql����_qD\U9jeFJPzLQQB=K?\"acP'[+|>՚ā\o5= pX#CQS"Jgи &R5E}},УN>$e )2ËHkvt#\q~Y�����������:{g; 唜t`pпo57ݘk)Y[B6 *:ˡ:*X,!7ռ#R t=9[M" kįU'Su(3Jd Nt2kNg0MԞk\qyLg$jtYU S+[vO?_޴z[ �����/9e9����`v1ośO];~hy)o_f~8-›R꘩=+ [DT]hfXSF_r-4DRpZ:cKԌ^k`^oA;N~A%|HDk6lZ۹]�����09�����`NMW|%f:ATBd5 a^IYl;{2 QlBQdk@Y<%+l(EHMe 6׋L:ϢD:y^Z/J0yM2utiFw ʿ͒a/HxXEug?ǼnSHT؉Jg$SS߸Kvwvd�����ǥ.M&&&6LOO�����0[x/<t×oM=aK;L /?lHAvٚ4NAe@2Yt*̛ˁVFOid 1k2CըİkfhV+i6\ 6|v/YI�xrKg?2M[iLTY٠ubf-wS'}>1߽����������_pIJsoo|['HXT ڠoHq2G/\>H-9b$HEM&aS } 듼z)Qŀn,'^L;SD px߄[sIE0qBi,({0k]"cJ>R0)E<c pLi\!b_&k%u\'�����shs ����dj]n;+OZt1o&wkn>�ó)(7Tx>HT:s[>5WIxTrQ'Vx:6b )znjw0# &+GX6Vh6Z6:U1c5k½hAI.O9t"Zt;^<) �����c_����� >z K29.?l*]^BhXٜ/\FaΣ*E1Sb9br<CǶIjnf4#M (,w~ggFq{glC"9w-%ZߊyIOb 6GT<}c>õ\�����0khfY׻ O|4nǎ}�����/:;=uOpjn$RsD5ȅ2XLJS0^jSʐʹԹ3׵&$` !r<<~C=1jGi_c562Bf"$zt˜kcu|zC]OvrOugZaZ{gܺg]_������Ff������F߽/.8|ʕA<mN:߫|9r5G&-j(aV;7]/5y<BD{RNaȱ~:ɘdaߕPB䢤.=#5b?͠Z1k_2fH3Y68 'rC>&Y=%0~Ǿxiw�����:`Nm`N�����cW,_|׎{|&ZdgN>-y5{TӉ2ڔ=IΫ2~ \":TKT=/g*1;~DV)v?np7 -ƱS6}tQ;|Cm~lpq}k3b0۝Pֽ#Zbr5SZ۹]�����0S�����w]v+n_Zb>NenMA gf0mJx}t& :<cD^˹o;Ѧ fQ5` J|R"=>$g6d= LڗņzZ~//2T)uO 'f뽰 c19}dUnΖ߸Kvwv�����`RJa/F f>������zn{×,3vA</vh)ڧ)'>GU6'8j0?66"BJe o2BT(Se mnD\H Iiƙ{j#bYewDD1`oWOǏ9?_6q{oA7������00�����79_Ʒ<oJ!{ $͟ݲڄ0[DS5?"La")�XE5NߓiSF1p~=J4NSsfcX#|u E1ʥ8]d<sUMEuotɽVpX9f%N*rڈb ,jMvR䴡ȼb�Tc\kRNy7rO۲kޱdœmr�����j`Nm`N�����z'oe|󇞴"<0{Mk.v+5:D-缵7AWbUHra/<B]k$Q$ E8έ K6RSP~CE)b4a"DxYM3{R{spۨ8bn/LSr�����������`[щO[JDCw)#sVɨ8jQb4IGTЙD;x-rdӍ,/:I|wwnQ`]j'b+B]`kk6ir/ra7TOu]Q CLgkAf ng>v?\+X ������4Ͳ^wvb4nǎ}������ݜ/:;ת).> (^.-ؽαTec~Ƨ*~_gL2a]}zBUZхYbU*JP{S7}ՎRop"ѤcށpHJ-,A.7Ǽf/'X~4O5ӏl+mp�����` �����}W__viP;(w܅2CA*1luAZ52FCVm\5t5ö̜BD|VXт`MU`e$ZQm:uA%Dz} $)u[mgPa&qW aD^u|žp}m4ƼeO>kM7������`Nm`N�����{üo?K8hy%=}g֠z#IqNXO"1i� [6P~E"z.H樂 eV֥4ki fH; ֐0N$}ظ:cv]Ԣm~ޥ?L̎^^GÚ~?Y �����}1<�����/rԻ>|WM,\4#3J7ȭ2Tقt?Wed i_L,OU'hx)ou6 Ս`?sL&#5ɘg "לLy1Ծ}5k(%K樾N u_v[\KGܵB`ilK{k.uߝ]\������_=K)]n`bbb:<-�����0gC7[s=pؒtP?v Ŝ:D.Q6%oM'vhlzM%U1Ӏd ksZH\S$/1P݋݌)M%F&DJ<ʃD +‰jn<uW@>7g\m="Z<~ܧOy=!7/������^b`N�����G,;w΂?CωNFN1>-=9^.w<|7U5b@= ̕ɐm *9Ϊel?SUw׵6 70JRÛ D }qJ"AJ왱3DZ<fhe1vZOEg0AjL ;ȶ3[}_ok'g^~}K&E?LjTj{ >MVĮo,_d*E"+553ƕl2\chknт`-S?o~?L������9evs �����x>l'݇|̼J$*$,⾘_ #Fdʵ6R+^TC-W)v50$z3_W?5ɮNXh%RJ\O\~AԺL_ևUǘL1=mq|X W~_w@sʿ#9bf>SNEݴw�����xp�����jq_y'y&sM/W[UY7Ȅo2_OǷ,Q~xbRg(p5'%E$bUo^Jl8WH@t" ݜ<U&pD' 2}l9/J"YB=//w-w=֛ho? �����^hfi۶w 쯌099�����>l":vlj'P+Queݶפ&p~u&+PDƖH%'vjۜR۩g1Zӈqs&8/�L-mO`\@Idb8A-IScvHH60aS[&Sf<������&�����Wc._saK/X߾Ɣj*TH}qr|uY<qi$ƉdN7a-Q]D104֘QEB$"FI4*&lj /4oޮuˆdH 0pRK_6q'gMe3O^j?_,������C`N�����^,GS׏.xq٤"_u/)HEkX=≌#Dd$ )DVԩ{U3ň5ֆS`Ln:_6h3LsOF-^LT,1e1YlK`VXN|Zsy������1P����W7_t?~ෟv1OD'"�UDHԎH罋(X$(Yޙ Dqw1'# *}l/$,{ J+\pUd馻z"DH`Af,r_43U5Y;{T9Na@ju/.ϐ꺻[hϯGw_>'ܚ������x0)K؆us=�����ˍx?O{Ǽ栃&ha1Z Fƈ�ΤIh%65/ѿ'7b6_>8k3z`81n%@TVfX{ jJY5[HkAD6NYQgg5DXcQˊY>g:BXSmSn-xΓ.??0:[Z�����������ƥ+-׍yWwF <�3}_5"N"+b[#XLhAnXK- =݈,&9e>vHV?O1Ǯ&1 أfacCec`PYZ.@z9:(ž8eHG: Tѯ2Ə.:�����9evs �����xq߃Oƛo;dv%n63OT$F;yD_;dK> 7.jUj'0a9o*(]exz:l^QBV4uMVec^AU{'u{=K3>WH}}gTqʳcpk!+i𩇟z/ȅ6m~9�����xٗ?�����xXWw\u&/,|n~@'ek>Dl[{pF){Sy=If?d;{K:ÑlC`Z.smXM2ݳ3RK]d'xyĿ Sўۂܔl g\SS^ڋLRv=7]uю~�����imލNo\=������^zgq63;_u% x'm=%q/e"Aadw_Ee_Pש�Z�3zMk)1XT:M{f\{'鵮O:Gi~аPN=>C_Lgd������ �����^|oXz 9/kC0IeRP"ޮ$s)gMojkyȜBwډ5ejTK ,zL9.#e|bƗDU&6Qƈ5D ɉDySX8)-@U.᥌ХlφcT{/.x˞g_ҭx`&������^40n`N�����/'GSZ}zKoߪvҬ"!J(̺6XӋ%KOۨSZW7Sujp#abKwa8unjD}&wlM-:m[va]i}}"WƮR7YS &ҙbn[{V^5�����%f�����/'oq5^w%tKT,UA+os1ֹgiUUn Pҏ#l|Ȍ!os.. D9$B7X\쓝›/r\k,$j/o[a`ϚkF͢M#*5yl*[%\S Er&D: ANk)Dݱ_<f�����EǦ.Ag'ccc8�����_nn^{{k/Y<ouMzf{ %V$Y$7F"<^GТu'XH3E 6iIab@вWU1 $|I5gթ޴?Ņn7<k$Ps[ $ј"0ѷyIF۽]G������^"`N�����/ o\bqC\IL'J 1sj,G]s]8U/} R"'Y&menAڽ:#׮p9$~&RCOvmY E؍ 7^I'y}I&1EԞ5}gf?_%&U_�� �IDAT+<!Up+ffEU[Xf x:W7=_$������^f`N�����^ vxmN>Pb<mRSǕH "vT $~?9& @lD{R‚OUj6U6ijR&kAI&: ')暭c?gª}eUGN/t&|KbS_|/=7�������/W*������/+>3|VMLޘd6HgP� qo?ZMݺJ%V/9+zgvi/,@RDrO_"<J=F^c+?}}Pw*߱s`ٗ&zN2X9=ma{ڲMOg:������xhfi۶w#&''W8�����W~+3fs){d4$O_On}^kfM~>rc0ZK.`&s׋ |RE`2^S^حmcm5|{QQfgj֔ (/fA6_mxOxw~Y7������//X������^^7,S %: R⤧d'&ѥ|?T"Df[)mV^"A_KFb-$Q'Xc_/bSG#&КCLJ[SQ^VN1Dat~( RS\c`Q Bhb-~۾U{]c������^f`N�����^-~cX}肷Ly ЯX}ȷ͚?g�CU'pN6^؍9;94^3"c2(H&yPW 'B߽Ě[z ,2qfzz=nF8%f~Nc'<:~۾w{V^M����� `�����/:~EKN#Dt⠛46B?qM5_*&)6/֥uEθ%q5ո3yHM+L"CT=mI| ֞c2{WuRT"X&H>sk2f<g$yJ#XĻ5GĪ \7EcAnCHM7PjoƗ韝_>'�����M)]XN6LMMq������<;7n޵海]=|y "Z% T7GjN_N(*hF7#sԏqa/]@%kB^qBQtT/faLavmيkeOruCcJ_{-2cJ4Npݿ)tp$_:!sQUUa)ODxl[vtه?0:[Zu������y�s �����x;gżc>y˵ֲW2ӉdaTUa sFuN*kҌ@biXCٿP .&CDAn_wO`BJJD{X1qn&+lذ'V SLxdI,C e_$3FF 4b)Jܻ@+GOY_=/G??������ 0n`N�����6{nCia'/:<mRJai@a'"xZN0QܷGHs?[AR`DS`vF @<8+2hclP3b6s;qnۦVߋt>L𤊱R_S:i/9SOE=?g������L�����?w?3|ih# p} 7 UqYĉ>6#L`JQgaq_y-:Q58Fb7eSZ@0V'꣬4arm2+D4y)Ƭt{'53%aXXOdFeg[ ;6�O7x&l=5W]Խw<�����*4ҶmFg'7LNNq������WgMDEb蝊Q>/+}*)͠|&)vL Nuz(֠bFZ3@ړ lk]pJ=fb-EL.C݇8M6Ʉyz:y*W($8C!լ[Sf>����� D_������{M["1O~o@q&gJ\70>3+Y<fbPIx sƉxVOa}fKo{Co䠉yVD@,i!�YM]=5_S<l>[L1'oq �����)S�����oV_?-sC:uyvՠ\|DRsmڡ̒cWJ\[Z q,/efFaOs'_^3E7χ–tPsyo<(@V*H2 ;Ɋ+/scݶYy?������z/�����u5~EKrf:VU&K)o}_%`e3F1_t9yz O&Ǭrwc gsccFK[Lco ,W$7Htr<hRr{>Tqw˸$뮊H|/ f;2.Wlq1[S1WJz~[ݳ?kg>:&����� f>6t dlllԺ�����ˍxӮݏqyAM("rc򵚪&izPy 0R51h^KRW>X3j {TJQ!$GQ"Gu0?_Ou)9nDaah.^&P^/6\=u:G$-]'??rֻot����������@2>਷VJIn{'+x꒚ uu꒷FM^·L-}ųɄdJsZmIzIދȥ?OZ3<+2d(scԈ0=r'08@FD[Tь%wwPn 4ecUnQ������GrS�����lyǮ?ᑦIi 9#(sz被J,etZ4uCj(^iTg6S_%Qܽ]9-w$kE77saUJ2XWh*:4k +Zo`:Ie9ћQk������̟������X}+>3aiaIYcCdn\ a6Mֻ/yZٷ'AX&u]AE#k=练hoV32HkTaDmI5)RUzKkFIFWK6GPzhˮMo?ϸ>������g29�����&~+uDTZ ǯ$@x ˥֕нNri"IJÊ.= e`8uzJ4s7vMqe&X7u CƚQl xRgr`j=3V7ک'S7^3qwu1������s�����sc/CY<1Ot~=d5SlNХ(_GysT5L6n=4!U͂ݼgӷchLvݒ= /dw^2fعbOɓJ2RM%}ı5>Q-|5^#4=l0}}˞g1/}7�����s�����0Xcu z6PP$2H ָf~ ,OC8n+aukdqGbGmף]ka8ByP8CDN*[ |mE8= mj$`p=\������Ã����fq'oEKrf:}w)@/wyke`RU \2XC;ϼ>@n'D?G! TSJnJ@Ale,8}[gL'ٸ{e]qY !uذB$/!||#mb"SSw}&&0}-M諸8Kh)[HX[ݳ?kz鲏N= H������cؔ%xF SSSz�����aͻ6޼v׮GxyAMB.z ô|`-b+ApaYv/6jULʡ G'3ފij,9ؤռ Ŏ#pρg3PmTOwUH1O58D._)@ *jL VQ69zΓ/F{]7����������@Y1oڔro-;8p%1 r2'MVJYWm_|fbg6($_KN34{9=[s<%EA&AF0[Аn2~r|:4XɝaaWO(/1hTK, rjY(.LY\?{t�����`�s�����0[qCOƿG>%&2e(C$TQϵlDN�v:K,V9 .:2Iq̑5֋xQ (g ޕ]g}i> =-Q&\~%&zf4(C6==\+ (Uۓ׈~zi26&2LO9}dyOip �����s`����ퟻCN<L": ʘeU2Df3*^yOI'rK~<ҍ,HOu[=.<~/)8xȧ9NҠb!Ɗ0S&;_ѷ}~^qIQ?xwd;v2ĭC9)kɼa"�Ě.~;q�����`4Ҷm3099z�����~󵿽<%+I=L<2T] 6^WH-F NR"Ymˆ3<2.O\6 u YSHF+>X@hkOa^ mޘ -?xdqx5èI5V3=~)~┺Di<Oĝ}������ �����˿xY<M;F/F|z Ӊ1*yGR~r3#Dl$K$Bҗd5n11Te7̒YTdY  ӗGH?)#׶/e/=&I/$H~e&'ѰMJIkFҚukN4iNIt�S멝;&?/}o�����, )�����Ă7U׏.xqCl6p18/Ex-5[̩ij|#Hwc1q<=>$6nq{i*{vlgm[M ׵ScXT,1SHoXinẌֲbpYm߳5n.�����g����`n1q'nE.!Dt"夡5P}_.8s,\NTv2(H&|/tHb^e~##y.u35`DU$O^.]9)C/nRvyZi(~ 6sWq,u0Mқgl}iUObjlo~ڟٲN= �����53Rsv266ajjj\�����xms6޼]q;9 f^8ܜ\VU]y0{W/p Ha+u κYVMk+ٵ9!t ,f)<AՐ`ط #pCu$.M#ҷʲ{!>Nn8$Jz|f: Ms~oyҪ][w�����xs ����a{V;^w軗ODe2HK>{weZJ$h# D &˴ +iX16']c\l}9=J;ǷU7!DL{k(q !XF~c+N1FH‰[ˤXK=h)WO19EO̲AF7Ĺ<*:ܷSDghGA�����5)S�����k=w2݇t¡ļ0JAĝfkj<RG{D]y'uō{Vs!*&*}?G7Y RӄhBGҝǥ^#E}#L$ $DS?fַKmYW U*k꿩|>rmlq�����op�����c'y&1_'$6M ƴvLt'RIQ>6G/[tlgGOϩ*uN_~n4a%*ZXd# >C8Woө b'ۑOd_zw\k/G5{m͏⦫/~jq������x4Ҷm󜝌099z�����9{Qgq67P*JPt=–hzI^\}?؛"BS^k-7Ѵn 35I'BR4JeF6I|2\-|j$ZTÈc1')XMnM'RCqk>Or�����fT�����`˿xY%nF1ř,Xt1E4A9%m2j$eTqS_V,y$8`I;BMλoen1k/S;3f"%F$^HEA+֨2`Ň; **3oc*dQ&q]48)c}Ҧvjm__| n=������ƀ9evs �����+}{GOjco{q)MTM_>#ƴva^^?1t'qM>V>KC83lXE|67 rLgZ{Z)(>W +泊!'5~>oyMjPl}˵b^5}wDC5ap=\&:�����x 0����cE?c'n,ID˙vP܂ ;/ %T/UsŲB5(/7]z8ˌ<iKesn=Ty..c)EywOQ[lzIgkmpafJ[+019!Ǥ/IeqWnwsÍ{*pMԷ.;c< q������^0)Klg'ccc8�����>ܸ幍7r{kGv^<B"GB}^%՞'y_ܯ:lSZT_kD[%YMDIC%a Lyáظdc ٭q/Cΰg[ɤ - ȓrja2Z7<l#Ej&BJ&&&+,֧ԛnzy~!�� �IDATx7<K>0:[wct�����09����5笘w'one$i95W CS2"wl@LsR9S{N1CDȈ"4`DIc1 "'L'MqN>Aqi;1AdIRQ.T>ܨޒ|I -6ҠRJyR'PԱŽp5"^E); ^MS|[?w=H������!`N�����;{nmN^t(7fН5@/@[9AJG^wP]$NɱR4M'I g&Dھp"FX IӨf\Е%cU?)9*9XGd:akxεJozBYbwf v1XUhGS?^ ߴ?�����Jh����ld'y&3\U3B/Aq&_:5 {lM:'Udq5Nkts(Wk/L{RBi: *$Llm 2dbV5̐elS΄&ߕ!h[B~-˘O"~Ͼ<alzvb#OtO{3n0�������M,mn< z�����=_+:̳aJV${:j;rB#R"d5FEb[FbsC/ pp$/&F&u/mXЯ'M../\)Sr@]8P9}CT %ߝ%kU~ک-?/\3qwu���������‚o X~5-t kTiF4Fz21i *ԓ׵fᵦK4V$'op[f7X{d. Ӿޚo6.Ƶeՠk~ ?H uv^7ӈsIU[;IɖH ٽӖ* $Q rBkBiΧ}KqۍF������C29������{)W~t[cs&'^5 )R &13DmxXI$ٹ^=p,qZt c|OEѪ%EZ׿.8a`}l=yO串RWaO~AGW1Ê15=̥ XmYy#�����0k �����]3}"^NL'UC!c l\3Ã*HeZ_9'nlL蒒B %N>i8?uՌ$=Tlb]|Y쩄$٘[3PK=dƍ`_&{zSLMٚ>+ٵcc5BQ|^KwRAsMuv鲏>&h�����0`cSJN6LMMq������s_nƛoݵ#c/ vD"Q!k?X˶R:ICmkɦ;%#>؈IN"rdܫ~1EPW[#O-v*kd4FZwV C^K2a5Pk;,1J79o~<d#TSf#eCMytŔ|/Shk3,ƥ 4c ޼>voލ�����f0�����28gżc>q˵cVUS 'К{I{UuUa%c@c*G=0JRgH$r?AͧH~ף\"= 6˜;]1XW5>}YcltqJI54Ԇ63Տb8$6rPd*dǼ]v&/Cͦ_=ow $������@Y )������TvГ?n;dv~Cy3/-@ZaʜNnZ&<mLɦo N׫&:eήN7"Qt=h7lV3Qmgρ9UmI8TiVnwx\kMB28NQEWv&5Q[my(`9OR׮Z6y13z)Y~޳g=�����E�����W~w\<O][ENHsDTlԨN$ޜ"I]LbMtJ\R)Jrs\(鄯5^UȊ}49E?"ۘ1ITΖ3@^Hِ1Fw''Rubs\^$2T`!7ىM<y?u������9J4K۶v2>>~������"^yO?C*_W Mc?y+^i )zz<'DJ$3CخNv'%S C6HV&L(A%DɕHsk֡}Ft\_ȸ$ O2T^ve^Q2հzfݮXZezԚk&޳.F�����`����Y>~ӅbybnRIlIJqkrzxi1984QP5Sdb3<fW12]JQ{Ѯ8{jnr,@Dy|5eD#<2iu$mq,rjYCA[3{|4ՁKƘ"]bKKNWJ_;o}^������0� )������̂e]|G8b>7/<a"eV=PhRZцb6[w `Hcx)L_3mCО,UqIHN5 I|J:l!i=_<X#]k{$tbfcQi?\ָ�����+w�����~>~k_hir">L;CCdP{Q-ۉ_J%mwhA$6 wGmdս2k'AƧmgac>*H]k|rl`&5N*8l"V:5q;'resrY&R(`$ۻj}ra4u-Ҟ_o{[cg������腙M)]wߌmZ�����@Οoynͷܞv~%'9 "Zŗ>##k.Zz75ZV0s_lDP:b=9 Ii<M4OIfQ9D_?Tj2Q29zRnsoEDm}Ofz;$M$]ouOj_RUT;'.X_]YC:}xN-]']?rֻ ����� `N����9׍( 9GՠL@AP#+uj$=I$~ٰa&Om+m"idb]f2a+=ɽ1ti,Iޥ)CsCSk>l&4Q4{ޞ)%j"D{M‹}pru4QI4|<a݃nC�������)S������7Г݇|I@qU-l5jx)&yWPJ"e.NZSݓk"s9^֬>ؖ=Kˆ9l]651v*>.eIW:MVO@uaFI<{qR]"SgkT2DՕbnO9 ~|?b �����^U?w����o~+^™g2IT)AaHAԝ(cs*/mOꮏt5:qLOp-M޴1tO-\/lM[+\'YK>JtġOIDִU_L)45?ƝdA3$=W_|mD]^Cݔ+ ɦ][7?2ū/~jq������4Ҷmoo\�����㜯͕Gu|..)AGj!BPma*0yHF\+P .,NtHJ(~˘XhiqVtsU[NhcJFgYv/$}cvie9·2;2l5CՆD4=ܿ:z[S_f= �����^z*�����^i/|9+>.ΗBf?b`bR4k,_2 KNS\]=D%L# red[r (__ O  Z'",ǩ^OȽ='uF>919{ȫԷooCe\mT3o3Oo>/������70n`N�����`W~mo9ΕB7DƐ  aC6OE41DZp_9Sh/;뮫1c5)3 Yw^;jr%bpy[VGj2FRMy.MYӊyqEޙm%o#-ŠRYs5.�����g!����xu8/nuo?uI":N䮢C)Pn\Z+ǜ=),$2PcMDcS A%FN6|gNzʴs^L.ml0sK YL%5v H]%]wֺMg)`F2N*1.5ɱJizc2.Ju58\DgmyzOI�������3RњmZ7������ aϷ<[nOv=zĒwk:hѻX;Ucᬢ]ʯ٘g׹1r窔78!-"8dxz0fo[9 68ˆ,䘊%S[!ҹ#t8]N`(5=qNHVvB{*דxVUeU9uҬBTɡ&Xb?^<z'k]n$�����s ����Y1OrػWщdajCNلcca2em.A#+WX8C^ G&W눼t}DGMhSmTl�_ydh5'L7kҠRQb]0F 0EaySOGtcLiS*:FM;3mz_鑋OoX ������^0n`N�����ų_G>%CJ YCqBQPVa.@/OBX"'ДF(T1hfغ^kLzjz&JB` /x_H>&ŧ p2`*kel FV \R )ubݞZ[uukv_MWD[jy37v">#|?d �����xىJ�����/+;x gID2"_;6f._[f�WAEWr2rHF'$Srd2up"ɦcB!ژCqPeƞDUEQ='G2Dք#{vg9Dl4=oGV[͏L~ꋟZg$������D4K۶ћ099z�����sWygΰщSN"5'17{U{'ѥz(Q,R&צYa eɯ# "G֪|%RV~(MM.WIEXƂB[ۚ^L¤V{QKRBG}Ok2qњ)4O)cAS[&S_f=�����<_�����/|{/OӇ /3JX9lIDR*Ra*ed$uq$O:o#[5%+ v}̐:TfJ|8erWX#&їדHeJFꉃx~8jYȄ[_R1LTӞgԝiΧ?_:yۍܢ������/ Sf70������`W~t[#JJah(h#l #F44/DKfL(A_P0v֕"Jiܵ޶rn<uhB'+x}2ZwX#IK_p[UQ1%x~\,I#֥ڬVkϥŠm> V!�����00����̿w/no?u 5Nj6hF[el}=(ռuO]>50[jWڅ\O{W2Q;ԽEdp[6W-TLBrn{5k,*Xf?˶$)ub>1hn39 p]K%D:yDYլG`X;ѦlG?������EǦ.A$g'ccc8������R[x-v=zitNQu3XQu5!88p(O"L$Xe&xRР o %b{]{<<voV*sü&M'I/@?Ê,DVbж!5gK m<#&c%,/>;Owݻm���������2r9[{\94D Mis3QǪ捨5fjd&!HuܚhUs "bL㵩cN-l%-kȥuyPȵʼ;>>("$*Ĉ=+) *;qVqML+V`V%Y&̥ɾ 7;r4wްA������K)S������xyqCO>vn;dvqCi6]ᄥ=qF _ul!R .J%$Aȼa.+k遌@ *r'n:<} Cu5ySTOp 0e\}ᰋ|l}?/^jr'늲"J7]ΦeƩv/>ŋxG.x?i7m';\�����K�����$g'q:H7PJv<RzJ00i*"󈩬TbQԕT*&S'yjE2D#)lL06΀WxF@~G*6dD|u√<>ޟ*Û]0QjBc4[&%޴y.~w<�������4Mmۻ z������xx#}D|nfl~GYEP*d8$f @YU`55ʬh-Ɣ{%+~'M%B H , EʡY#rRuE|x袦_|T=WD>gD 5$Qy3I" >pDkL<Чpĝ{6zT�����N�����/8gf[Q!)B\"Ogl0ydb)d~|-f7u`*wL}EK>G^oIE}9aw]JE.kۊ\pqk{ӏ򶯘v0g6θ:5k +NdPO`Eک'zɯaC0������e )������,XtԫW_?-D (:-223 9A }nP:lr�� �IDAT;')aohn"_5Q!�ä]KTX xj⑦C=`Λ;tꑴ]KaDȪeslekQ_}OգU M'I:m> V^�����A�����^/ >q˵[tļMt*~3ȜcY+K^j o,}SL ( eΝt2Pz8bqѹkg0aPەsxO\OmȜD~VU3aT5ɿ Lsf {6eZ5}&TDmO}+=꼏M=z߄������Ǧ.Ag'ccc8������J[ͷܞ߹&B'B}PEc # -yfKFkZ'GdD 1S6)li]v@VSr"~wWU_+٬IWKajp6py'�\ /_%$\b¥ }(kf)&R}0!'̋GU][w >�����x����"9[;k29CL|;G<l V2<n_2V511@BެM&(e\YY\]x,汹 Sӌdr>$֕萡 <0bΨqEyAtwDIyze$%37C"_igS~? �������s������^=/6:݇Ci3-,_T$X]{zZ'"U-/_M%ś5`O~Bdg~v!mv*ӯ=πE@S@ϬfC׫ݼډX2Pgr+qK$"4a:^+tZҘwC?/ewTCk}үIyw1E<:~Z4)-^={6o']0����>2�����qq!'q:11ݶp@1t&DbTL*<M /ʮJRײI$w&ԈmL)n@6& fuTb&cLvr&g˼,ZvŜ*[cjsD4cp6%϶砝}M$xQW9h"Dד<bݺ7=7O~ꋟ������4Mmۻ z������x#zDtn=͈Xe]/Jˊc= ʑ5FX89!/|RXjS6sT*4alH DZ2E#G︁N *@E zLJ)yI*'BD;ZP_բي$;&ct;!xzrcxY;}OOg]�����^ �����{c Y ZQƇx3_cO1>fK"Rƍ{k 'l>|u#ƌ21)ݗcw0߰Z@R:Ef ܠjIJs\Ƀ=xFOޓPUh#/6y%#JiۿzɯaC0 ������U� )������_l蒫W]?-sXUo8m1 C\y@u CQ,\+A"'3:f' &QӋu)SHoڌbC+)yrDV$A{t|HI*jaUn):OˎNftVԣ2Bgp}p=Z�����322M�����Z[/YBLRNCE3˦]rxx?Ο)v>G[Y}:HbNQZOP? SڇUszb;SI,vi)viv[?fr ZlBmƨZ3P;ʏSO&%9Z~y\GWӊLw&jl{\U}l&\_������3RO`v266ajjj\������ ~v-]};1yAļp</VͥǴ61R|2B]7^՝q˂OeB a=mrq 3!R4(Tj?c ښ6Lnm'0**#ưYN1$czʺN\(E#|YX\<`Γ.owݻ= �����s ����>p--zֲN?U17I0p5XÈYlťHg$?Hlb 5Lƀam+aiar r kTr dr~dk\ (,HΗaڠb?gHQNVks#Խl*%1_M@y.$32Ivd7|o ������;`N�����zt!}IeD.ֈK49PL"GCF$DP7@<-iVen)yKixzpIGtk #***L7AnC FW8)ʵm=Nd;V&yŚD[s~DV):іN * VrJ,}uŹy9ŋ|?{l'3�����<�����Dtw\q gND+DV( J{j QaBXDdI`Z#HH44؄_>(B|q#/յ4^T.;ikkP hI?3Hg1y$̦]zȘNӿ(ӈ7{E]n5#* .b#9暌캷=vOlֿ⧿>������im{7d||s=������s~Dt^ȌV6H` pG¦Zv}/U '+um{Ki * '2PtMT %⇪(E_rlTPbsSMH>|-cWIJJ$FL„BiWܡbLyɾjN;"ZǷ>Otw~Y�����!p�����0d `VXAeDId"3Ʉ4U4L .@BΨ,W$ e/2SjqK6_h2&H3 .:)F!'M9A1ݶ)&bi$5Ҝ$ϢMdfZHЦTNj]jsG1ZOۦ=SOo߾6M������;`N�����a^o>&űS`dICq|cD}Fb0#Ҙz]=J1%jRtVv׆mq\ĩt>Zgݸd;ΰXm@?Bij-f viIkҰS7xU>\Ukܺ����� �����]}▿<7,!j)'[JHeR&T/ph\VSQev1iz(%l%HK%{6O>41)LSy$WC:&0dYVUV'ݰm+K{7㐉K &{K ǭC6r ,>ASj 2MMuZNr={21R9rG¦\տG ������M)]5;055n�����Οoyg7r{ڵ×<yAļp(XqRUщQHegu cd~W%Mv(\\ *se{&Zm*pdZY}QPsʪ#r<f֬s*1cql%bPb>eLi>xOso|=SW[aNY=>voލ����a`N����x{{'nvݿ;<r$ubJ10-f26)krӉi5.+M!٤}&[1'Ll6vvnHT\]8S)\cc "fYjiHr AM?dh�ΈLEJvn:ܾw(#Nj~W|ч"ul*WtS^UQ$u|7G.9v <������` )������>Г?˷2݇Цi6Y_ԗϽa3I7w<RЩG`{I*t\5J5=fRDj$4ᮚAĽRZUs%y,IոQ6lL-Uf3Gc⮵*xZÓ߀OXs9K6,n>SOEMn~Ow����` ����0XxW|3 2jH!bWN™eYNs4<=vӌZXrVٷtBPSlIU. .9R:dJ:iZFM|0 3!fڣӓޯza۟6\"[*^۶)۵6a$6jmkl6=͏l/{x������ YڶxZ&''W8������0YN?Ub ({`:րR͕Ţ$Iks>MMEJZ\5h;31^|$DHϔ(rMX2izT5dm[WČ!M,uj-ֱ$iJqUe|youTXkOW:NZo'~k??/��������� ްLAΏ 0aIxBDR9B)D23֓KS{uP+Da]Oz-I$#3_gҌab,Gwc1%{/Ө\fesk.i9R{FTG nS;s~_'������ )������6XlW~t[#JVs)/A_F{ٌFA3F:ʵB.?$fu658ӳэIyVUWQ\ 2!SxRbqXhWk޲,[ŅmL.H2ўz"YU̘QJig5T�����s<f����E?tڿ<KъDt"f1j"NH ꡓTjsI:/d\7vM3¨%P>)s.gQf3)Ɲ) 9u(]& 9_~-YJO<d.Y|/r&I%?N-%~Ge j* AL#wA_۔=۞W}g{9 x!+40zǽq6-MGqiھE[{*w,W"=5@B dw콟wε+`vcy֏z2z2]sj˦fB!BFU=&;7ouB!QgÏ8y͵7uN#;CTb $*$\IVK6CVB/(Z uъÊT)Q, f-0"paj^�SVM"(f}v?(ET;i+${0b! J+>}sl1rn')Ok(KU͛gk>46Ƚ~CB!2à8B!3#X9{}C|,L3(ޡ.H+qD8 &0`&01bϦ8`!pUJb�F1JyJP +vP #Kn4Ĕ}Rp%WcZBW!$=6:z.P#6S%O T> JV=l;{s_?m !B!# ) )B!_][庱o{yd RJȓs} aEuyJ N[C!A Ö"tA"%.gz0vI9`D-̋UO0Mk[vOb+gA{8W~ y(0o#έfޜlOW7mO<FvVbf <F>y\7NS>zv?*%BO)"BOY?yIK2U.DUoM#Vl%`^I(T ̩IH݌ H(+<O�|x[{$@0! F_Ck{_Zwr =D>_'o| jUh^xM{PEEw~~G~49`%�ʶ_lSwmxF!B!MӜvΎ&sΝ;t?B!r_d<'ze1,C";]#)Snlqk"!׌% &pEFpQL*+2MBϊg ALnN8'X[M5B C9ŏS&?c5xn`}u~xY4|\rK>J 98ij+/|N!Q5B!dbEW~*j>V6109 l|Q0N`ZK*CZ Gbb>D5H-c|bT{J%aϘ|T֌UAe\:",1˗arm" BMa~)Ow?ϯ}[Wm,B!B(Nm(N!B!dg3_zG+" $0VUʐaH{M*.wVrxb-.q, k |hbw}M*(HIDh&tdg!\lk iD"f{lCEڴ]č{ՅmB!n&!BWGˮ7wꩪJE3é7tpĸ0~HsHH1zѐl)͘jv}iiq~rIc5Z3QQ~Ӿ ĞtTD 6pX DʽҽoWҰ`BJ? z}kqxuo||WmcB%?eRls[O6|/||jB!BٯQcBkˣƩ[g!Bٟ/N^͛ {:ٝ!%OXuL0:RB ǩ)$ݜΡI(ݒ�4躐I2-*JS^.DQK$<x)_<qT G/y(ҋ0jn΢C lV"7e y@g<GYx}hl콏~CB!J~'B)8c>K8R[Nb,eRŗJHEe DR}Ӌ]b/*)*E(p3gלe5솢uml-E)dRW+>rl<Z̅*$5>DBEt>ImN]48_ _UTdLJ?VMֳ߼0B!) +B!2x|C/?Mnyန$j KDhMoZc<]l\{V es hMu<O9<sM?`Y7bfXvC R$.֡G@PƗʣPTV^q߾/`ހg{vB!GL!BȯM�� �IDAT'ti᷆ /ׅ#& Zb#wqjpVZm,B)"Q UʸZXbX;/z|اqm+hSs0'O&NXft]3fr߃ஏ TO&*R/߷Rc;gzwl!9i<^ܱ_Ԛ}3B!SFS!Bwc@ (wBZ|IUER$RRA%:teYE*.7ƉF I:,ƉgnyW1N-s5!}\%$=(+D4bug1J i:BmKkmiN217_q;nņB! oB!#^}UAgU6: .ѯt~R \1't:k@=8 H>'xcvqMS*luc=hx](*5~ n A3 BSWlV1ޏ��sJ1H\|LmݩߺjB!Bf$6B!2c^zX a�OO{0E^/B�b\wjWj?dT(DT(^pb*ըW*F$)qU v6WT6 xb`b\&붍Ġh XO8hނƄL<yw?^]t$B1mB! oK]vo8ӃJU](P"0R5 8 )ld'@1-0bf(I4YSӔl 8$̊q-"h4``g$FIL2oq %hRxO8hGMt?m:&ykJdԌ*ۤғ?+W>Mmݴp!B!dƠDŽpGSSSt?B!2Sy/N^͛izdzyܠOdVbu&m֎CN>ȽaϏbNN%r-)&?\L& ߘCFA!0 #J YU)xTbn#=\56F?TҸf644?|N&/QycV^`n>'"ݳ{B!dD8B!#gk =D$3j:^,A<RRq'I~4DՁ=& jeJ~U?NJL?'BBSaO aq66y,n7)0x_Rj0 �;lhbj+PL5hw p\Ahxԭ۞e;>wn\%B!8(Nm(N!B!ؽ{ucs{ǴGEuAs4j/~Jm 5qTEN.=ʜ"Le<wp_GNB7V^">WQ?W%}[BobE(9ӽ֒8"̺Umj#&m! QR ϻv(W=ZE5#Xts//uT@!SB!dퟻO>iR\X%{tj^J%-e[%۽m)QBA1(tv8"LlG �n(}X0^y$9TlGNH#bqQ.pڌO#؈ ~NwаkNrEliIͰj)>^Do5I2 _ s#ypǽ AG|/!B!ivwɜ9ssε3B!n%GDdyq2O!k*:φB�s2siB̪(ݵ4nJ& Nj,{}֮Ui!& S d~ϝWMinȥJRc`qB43mHªhذ{I2:Ƿ/-b^B!}oLB!&/j9G0Fj!�4.i ^&WTQG݄oTC `G$Acn ;E &Ц8Dѷj,C;Fkǃ:F49Hj݁6wLA0h�c i+pԀ q!7FGw%H6_]ۍKkc͓a=O~syU5B!Bf<6B!B1o{_urE*н(08nxjᢨ! -j9A׷:Ij;+2Xx =MQ$b*{ϮɊI5 BVҜe"4)ýIe'n/f<rZG^i>;_u"y\؛6L<ywݾ«B!dp!3缋ĕSEu,_   jp"FҸ1T3L^]! 6j**Zp&<`Q\by0aQ Y%NU4sl4/Ωa`e q_ ƀ_ex,'oj6ly=ߨ/P4 _MboK<Mmٴ B!Bzb4855uL!B!釷8yN;AE*ÏCsbө<ee<Q4 1II%K|$J7Q\%`ΛzKlk3z~h:dan+YiZlu+(I'1dk/WmhOskFsVm>yؼ{^{{n!?<!BȾ)Bgf{o<ODZ 4XBԟ`lpB1 R Qr{f 0"꬈M%AN?*S(J W(ݮ*yM{^ākw,tqHW><@"F/Q"/kOc #mgR|;o%|;m.#B! SFS!B!/M۵uW IǏ"ȕEeiO^bቩLJ{)G'fÏk ID(>Q-<cePuZX 4d @$J3o_`\$}F;A/9}>ktBZյ3O! iD|?1_kQ73}eH8@|{waQ'~t}?.)B!}oB!| <KCrʾG"e29da 0a,?{^lj~J" k1?ܩ>X{'40-+ f4 ZY'6nT Q{hš43zc7繫6=?_=aȸ ViJ0>pi(q{wl{pח>woxB!B*4Msf۽CF9s|aΝkYB!Wʙ%G%$. stx\΋lsšF]R(11hWj >Y(k筕0gyx$-WR?pW\KZ%)Zs'6Mb^<x=xV�c'> վ_hxvcۿ{/q˷B!}U<B!_&ogZaVES8 hQjDrhhXq@WzMF Uc^$!.&hבUb.I>W4o{a=]hxر^t\O)ns?|N K3P(kAI2i|Ru{oĕkkbMBwṧϯy{B!BH ) )B! WwlX76-NJBhPKNJ%?%\JƉCu7N9�a$ rUoc9TCHE AKꗫH̟XL*LQ3OI!֨gƇyomR^6'-s[vGjdڭ>X"Ǩq$L v΃oI]]w{B!FB!d_`ι-k|qBi(8I+Sr.U{`\9"XPWb8l!p1\*BX1/6`ڸ"ͰrM`Uz/ 7 7SJŕ�} !ײַʸ^F9F́ƾFb�6Gb-z%?Myb},.U$JT6|3~-( B!AU !W855u+7B!/N^w7nuI;CTXq+д .ZSĖM~\#,)򶐎הNz2V$`e~cuƶR7-E]+YR/Lb90M +)`݃&4y" B(n,/?/,wcv{JE`ɷ,/2wn!!B%Cq !B~lMw89Dda iE\pXdCrn2+IɃAVQV;i=؋&82�@F/q=9.ɏ A:_C||88lofuiH$:j-C԰?v^~M&s"Z?k]imiz,T O!s߻,ܶX!B!B(Nm(N!B!"'ucs{IǏ꣢R3􆽍/} )՜m(rpQL^A3ԎسMPl.gI(mfՍNꒉ&>\BMJ^G0c4�'y56);a =?w\,B|; CY.>z wB!NL!BkqɃOZTDVBn<U AJh &g`6V+uC,,/zE eyjxUEi+ph#S<`|&m \zJ@a,`TW~6MjrE%vD*cv K۰i? | >g" ӈkzW>l{wl{p?woxp6!B!4Msf۽~M̙;w~ B!:/9]X&S x~YpX5HiAka9;''r#SEUD91)|&Yk+o !tͽ,O6Mj�#B5yϾX?{!m2k~#֢ {|o6}O<߽.q]!B^cB!«WlʠhORDXAs |@x- uXBmtkjR\GT3WL@ΟnN4y\=ƞ8c`s]mڇ~Hѩgp�>T:{1ܡwT*tU&o0|Ʃzv5u iUDH.6]qUe2<SO|c]7\Q!B!UцB!Bȫ;׍-J$zj~MNKD%\]@E7wSJQL_Df,m1s>! R$Kô}u&́wYmM6|r^Q}uJ}caY 1اĈt%o7Q,4i_}y)h[ ^]]w{ !B^C:t.!B^/{ђy]{o_|*  `E压I\+=o ưߍ' A NOL_ud J0FEMh0(d!O!r9٬Of8ߌ?ڏ@2]>ځBj_/X%џi{1lO+)bZY>&Ύ3{\k^M_?_ݲiG0B!BPcBkd|||ԭ3B!W=oq򚿻)<gGv>ZПD_)!fRog1v\ NLuJ\mV8D y,YPQܢ)Lj0꾗(&~brNM~PHNnzDDw'NtshҼr6>ܰZٕhl={!sf<TE!@q !B^sf-[9C߹bEsB,4xN3a"‰B(UBX 9=^@9pm {ņ=B"ri5A;=mfև_d:X"0΋=AI\g-pgv90log]+ԢX Ϯ? ?y@3 K׽j)n-Y=߹mB!Bk�) )B!׊ݛصuW潇-<nL}4T@QPG/ WXyD^+JJ 1M0iNHx6)X}P=@B:T.Cycڐk!Z.sf|?vI${{/gj{>fƧ~k�%+-./RSX|Un=[!B^CM!>yKx gB},]cA&q ,Mt&�㈡fz7I0%}1;)"ee!R*1U\$nx2BT>f# Jw}|ĀUS`,Uch\2ujn頸ߦjbkh}u?{'tٚs3B!B!!MӜvG9s|aΝkg!B!=.9]/A7}(9.AAh\ĉX< FɧHnk!@.0ζBa#BQD0+6Ŝj/%UPIvN;GcJ{xBĪ5Vl}If\7f[-פ.mw؎\&Ƕ/^㖻/_B!W!)B!b̻ՇjeWQUx&xLb &XԉRJJj\)Xmt�"krb4`QEk`NSAڢ8\$0Gi?i3@܇d&Q?mN?"!75uzhl[yqRtTyN+qcgdx駞ukw}몍B!B!6B!B^OxK?nlNJ&]V;mo;�RbLn/8@Q`ҥCF0>/`BrhEL#Ш a`gGM G8_n<҉VL$5xnˍ{ۼ:5�@-omH{&wqW B8B!*G}%< "2"bFA<uG8NI фU 1.&)~Qf łV%TQTHŖ}+TBC-Nؽ] * A? Us6P tԊqmTW^S\Z;Z&_B!By-8e8B!O#86vj_�� �IDAThʴBpy,\^.]DP%UӶZ}S~Ć]SŤO:Q@�څяH<()�:0o[cywUm,qsUD{e]`loJe3(~/ S@%Dnk7\{ !Bt8B!Zr[?}:kt<OEb@NC?`"TbZ`z�MC_Px} $S>'nT^f}I)FP8+\k 2Wqc80+ ?x[!ʁp]4V;8?`v8~e (HI}ojHOeZg=,Y5רɀg7y㖏,=߹mB!B댪BXC&n~ B!vܣ1U}TD\̤'`+KP GT|mruJU0g%A^<&Zd=QbԊ#͘uvf̝ڤq -p/H#:х(ꐼدP6b+6"`]j1_ –JܬK["B=w {lb'IAcN¢FO9^OU/u}߃B!+2!BűɃN\TDVR9cNZN zF UUX#luI Vh*kO~<"p&V)OmϢ~.<1ҤҴEB+}=*`e*+_WZ(F+B9nN/vSa͹2d}ܘۿ6h>wǶw~k~|gq!B!uSFVN!B! y՗ӗ@qt͕*ύ<ƩIO/>锽u{1Jȑ+V̒95\*68J%?U,TnIrB7GI733Ι@@_ j@>jLKx^0+yo/^[zB!RUB!1«Vl4MaUhXۼq: }#0 [/QR u}œb|[TGXʈPPp'Ryt-϶$(UUC-Ak~:܇ !'eFmk>4)Λ6MU5_Lwf OsO?kbڝ7\K!B!36B!BxK?o9VEG\1+>*Q,EwMQH|@b,Dz/VP1fL?I##E-j_͇sjn�l3/b2eXeݪJ$TrfLw,Ou]w{Յ1B!�S!ssԇ/Zro~CVJ/(<&VͰ-{.UOx?l,ٞ SiP!)m'S]f/7oejlcԁ` KMOk bEG#vfALxAG+j]otPuqIM_YWB!B/ SFS!B!']|'>r遇*/*@`AaG%'i&&X@j-m>24UT+ p&' @D09.$="L)3>_NpR)UkՒ>$ڳ8%O`bE۾Pv{<w:Ji`NB)FQgbDӸjZP*Ϻ?{7ݽ_6L7>!BS\!BY9{r+V'" SƝppJ KB4)'T4yZ[ Vr_mv7q8PG- Y\E m*j3ahFW ׂоQ;çnmئj ?CQkek9ȯۭuy㖏,{o\E!B!DTh2>>qjj֙B!BȾMںk׍=ra FU} # 1@a?[ %^vۿH|/&y&dKj+J6gk5{lE2!I4YIdFqUtx?U"i;bhS6Ŝwq9k]w\\6MSNݫi㺪(~sc!},j:E ]~}m}H!B^_ !B O%KEdpTpsQ"Ty~35*)&- \Ǫ R `�K27?(ۋGET 5 H!ߺڬ՚hG A+IWj)+ 62( Ǔ] 4@sq~-_lOL10!B!rh)B!}3}2QY+TSD*8 }cs-rrvzN cC~8]"Uaml[`n B-udh+9|5ڡU[<{Y1�Uc$%Q|*Զ,er7aTQ:g5Yƍb&?}so#!B:B!1«W{V '5#݂)r'�_ a+p(Li+<Q+~1kItK[\p_+Ki+≮&fD) -^a/XuB8e뭢.0i?UAFR6kU9c^잧v]njcmB!@qhCq !B!dc?;ߞE*Cr/GvS2/]d Hx5M5<l1"�<\PQVhMG{rJ!S<x[GtH/>);Awc׬6_<SsdIL}[ -(W 0sZVpL{ ffbs9B!!t !29܋ԵWOզ9GD>(.e+Uhp;~`J,[1L%zMFhb%lSL_XC03kXw,?mHmܱ]YsE2Mp85Aw)QFr]9Giy1flu(^Tܳb/E&%ɋ>p[6(|E!B!zLa e4855uL!B!df_m/2ԅ;ˣ-(rr!uQl$]<")'}E"dS u llϠJ!5V+U]^$5B|B֪/1l L%19e }Zq1g0]{c#.q})>]o cRؕ>ϟӓ/2Ƚ~CB!8B!߳rO]{;W</R*/R$)F #! =++ lE'6c~K{$`BJ?xA|:I6U3iy1ЦIJw4K~cPZ\@G>x qa P Oj nƭ{mB!BȈ@qhCq !B!dؽ'ucs{ƴG%JՈSEZي(| !y>Ih-1?~蘤-*2S&XQ$K>1ͶBZ0$(B'"U m Pr OOp,3ò*N /N8du9ga\˯cX|+},F8=+߯{pwa,!Bf,_ !2CY <%KEd@@" 9ԍA<ǰe{c?Wi\rޅS I=$Hb -'Q LŘ"Pu#. `Zڢp&CXN"Ɵmhk+ʘ2NR4rcB2 p�6;6G@ϜFOW&#> "B!}ivwpF9s|aΝkg!B!ə_uɑ>m./ ($5-TӍ 6IQ`RыC!OSCζ+ Pi"}?&asy'T`6wR{fܸyJGWK}t~IExr{茊޼ nakHBS7!uij~soy݄ByB!d1«W{V MH0j$] VpN,ReH$^sKH]6䀕`TC X-kMbDm =\SVhĈS]M hlJ,IcgKV7Z(_!ZFiZ?<UuKq%gm) ={]Xv׷X5B!BF�SFS!B!gr׍-NJHrb3)_ adOfMӧfG> @zsNez߯F q"Sw!+Å 8=!op% >0]0xՠ&tQmL[ɖFKĮ7s9B!hjB!d_?~~ƱC(ũ:4 sTD?c$i*NhiZFQ"ɢ\U .ĺ"MS BVq1ElxQrRR cZ%Zoe`Q*(`mdp=4ߩ/81~ERomZ:T&黢9Vd=7}w !B!dĠ8e8B!p~_sګb h䔶<LIbOþ$1 NbD4hot=M5L*s-")rvl#XIjqK TIs@Q_.y4쨔4?Z{uB{{rLKbGyuCubB!tńBˮ_rB bȰ*# @?U Ga)Zm W<MZD.A;ZǮ揱Kx?LΈT)*h`]nnV+}^5?DEйOc1t?/J0&1xOqԘNqKCGӤgk۳ogB!B!zLa r4855uL!B!dٽ'ucs{IǍ5Q @$'UsT7i9wrXQ/Z\71B8&p|hô)Nk}kkZR>s[ZWl`?b(s&k>v {y2s>mbû j̡]k6ϐZ\A(إ`Wy55fE ]~ym}0B!5^1%B~ʿO|’ HX)�U/*]8F\D@hdX׸UtR0NBJGB^2 MmmCFҊ? $V*Bq?8QG!qswgE6״8QGtM.8oeK"m/v ܠc)jbRΧ(*}ړc&_ܱǿ|ٚs3# !B!daцS!B!+Kfe*() ">ҺeLcxHAleLZ+`Bb#Q)E27nJ5"{8vR+k5i% SO| \5Ӂ)-_0u \DK5=Z+%^b<|B/G!/jgʠ)~:+bBN3,"ΪiP,X0I5Vbzl_5THq164$b -#L?W[kU=ArRX~}`=┊N]SGb]|iIYٍFWd2<'ڝ7\p !B!P2PB!Bٟc֍˱"aIV#Wyμ?�0tmA%"딄#(d1_@"?c;?f$UD퍜 Ll+Q8b'V#rA3F=_ ™[Cqm^mp߻m?1T w!mŋiyz3;^T{q!12!B዗SWDqe&x%nWsƹ$ (Z |K[cm栙ŊJ "ePljwмDx7I ]>LSin<³ য়d fɦo1G*,CibHTO6)AxK7ӚgDi>9q{P]IvwtW>3yΟڲiGюB!BTh2>>qjj֙B!Bɞ8y7^2gw:h,>nH9؜DS`nRĠQDmӜlG!L|ʽ/!gnGLy`x˯Tw7>!yCU_@ ^�Q"81XQT,Q3WMTQF*,*h|||萹G}$B~)B~ʬe+g}ٵWs xD)&X)b@5~zJyֶq0pq-, ~hu[Bឭ}P^.".7o5]|`itP &_E|`*hO9k$ۣ,965|N-(W-OKR䳛qx{)B!AqhCq !B!d&{Ol]F$(.•t?Q:4rh_wOc0^U' De>᪒$ zq8V#UvYRTMcc_b><C^4qU GaK{ &hSZG0}.>H1 \m=NC o۝' r hF| _.G,>^O/GvbBy*oB!d7ɃO\TDVOX%!xߜRIQw<N&zSV>֊"rߎGW`,śKXqB?\e}*Bw-|jcewp=REpcd"8iGlycg0YIBq5"+S6nҗ=;ضw~kg3!B!d?i3dΜ9_عsڙB!B}7wLBX r{3_K« bJ_W˰b"Q`(/8A݁tO|O;1ع$>fmҸ+s}C2ͼ9J>BnsH3AjL߷<i Άdf(t`K= JAy cbOl| B!dd8BُW~+WvNB S)�� �IDAT!ID `ZщR"'>H"6¢m '4^d�Ȍdl RpU/|VFRdQ:\alH0>)U#5uɾB!n 7SB@$ψz=.zE7"ؾ"`$5ہʍ<D;dx駞'~B!B цB!BLe3_ucr,n0H@LbY@{DQGXG>i8y?&3Q2שz7XŌeOZUF>">D{"b&W#^>yfJ[ɥ".1SENll!|"D$jYa M|> OasԊs&vݽ;B!6!BF9^dO;UEQՅ|*d1 j>ajFXBBۈCgp] \j 4 n7m\5j+}@a?tU1K &hלQ"2_ 1P#4ӕ,I1y%zJ(ScPd؂'`p(c?mtvPmM똔Eg}|j;B!Bf zLa ~4855uL!B!d/N^sMᅽ[fpvvFtR)9͜Iʜ{|j|yapx_M PM9.j܅ 4bM:tCd}?S S&o'sg[1-CBiAa 7BW -:_U"Y񽊼Ow+ ;g2;M !2R??!BF7|5쀣5H[)V:R�KlW ^SF"Z*mk,zdƈ&D9jl Red'mJ[_UŸ#,BA#;a45AW}aby Fi*!˧("YۦRզFqL('oLǼ섾 ?֜SzgƇ/*J!B!3 VNmX9B!Bsm5PJ("17#PM"ac\"WpS�v&bkbXt+W%1<B)hYUBeݐf㠟jvanZ/bXÍN)~lrE#`= W%\8fzC <6߶|*&'BHPA!kKEdN0(B (,?8Aq(Pj�,OT@B!. 08"N;oלp΀ Z ԔB䫊(Ş5X~`:( 42 a <AS>=F@0QTϒ[zqΖɽ?_lO6LёB!Bf 6B!B}7wL$,77t$05 S'橌V#N S0`|�h%*8e_L&0;;U(1[tsYt:ZQh9CD(y?DK6ؐ$QoǜsFIW jͥML/x] !BF!B!d_e_:ghLLb!D'x"KTD6!MaAzJYR TԕAێtc�&H!5LEߗ9! " 2ր]V[ƺv~ ;I }G8~cQ}^$ &hOR3Cn]yyV&óO?ϯ}[Wm!B!X(Nm(N!B!g1vʟ~l$RAQrd:=ȣRUB48QJwm˪*ض&q[}xF.oqf\?EeE"è ӤmN,&Ru>N@6“Z/'`U}Tɜdɻ7?WCK!};!BQ|EK|O=U/J9; A+DGR, (вrΉ?{Q4m$UA49�DR\h8oT Ij Ĺ4.4)$%R wݵFfO*"<x!L4 'OU?MLKz3hM.-1᧏Q+Matʤt7]nQ,B!Bf8zLaLè2>>qjj֙B!BA<k)<g @]^7 ;4U(^$&V6<j@r7I֔7?4hzg� KγFӍep/@?-@~\{>a?H4oiVex@c?vƗ/7M >*B'J}sU)F(x�<kk&{=8j<tؼ7Ys؜/}CEcB!sPB!ߝ=k&w =VK!xP|u)  b- Lxq aHLӊc$_.JUkf[]Dma IO]tLqu8?[dޭ^Q7?Xߤ�F8SlS (gc`O\UFj.|nOaO{jB!B!CQ2PB!B!ٽu=ra'7M.09L#"VEJ(Hc9$CN`FA;�Rl W� M`.sd+($եc1銹8S7XhV|"R :901Ϗ_SAK-K\JAxE]Hv}G1RςYȓk 66HTN9bzuY'{GB!}!B!d_xA'.]*"KO0PRu^ (&^6n4NZRj")ƕ+  U*{`[b!X؏M ;e&OJsCҰ+of�-f9m*(N:S& m%MP|Ե.#>Oy !B!iin{tmȾ˜9ssε"B!Byyw_^rO_&A 휷sJ^|}1sI-Ð[ lҶ6Ź [~ݛ'8G t*2_9Yij%۰M?YY?h=<k"5y!>Q|F: D+(iqBg?B!B! /X]uN{j/Hz@?k<vpZpmT[[}O ))Fj%/HbZZ+c[=hD,77'f|�XIEЂ/ڡbԮ1X~hMy*n{'>?hhi">ԞrߺjB!ByEP2PB!B!?W1vʥ[7>cE@RQ@ P(<Y1(p? s֡C ˱ ƑxO-혹Km][O))6elM;\cT؜ u90K FL&GEMD}LωՐwLWy^DұBPဴ0=?ϹxB!d B޼rğ|ܩhZX.՟"'F-??Pc&Ub T6~i+}1LRP +ax4AADrkv퍻 $W91K6VSV(G䀠8yڥT ʹ5>.RX3|6k ONb\4y|-ŭ{U~TdR^zi瞛?pM;  !B! EU !vیoD!B!=oqo /2봅;CT;~}ϐ4>k^WHp+8NNC 5%}H&�VR9RxXbkWn ?It $b~X0ϬR?f~C~>b9{>=? 90gVc <Zҿ{a|MϨuN5h||oh|{wB!)B>ٳ]+uYz'BXюF Ф zG? j$Z1oՐN(# FAP꜁cUM}YSS (@S|5Ev4.S̕TNZQI<.�e ?նQwp igvp\ N{a}nǥgB!B^SFS!B!_M<uׯ{7-<PQyD'R GBDL=;Kb5|?sRZTC(#HTP[APĜ%f,\xL[?ByL:J1J)>n0V+-! 'Q@Ȕ=V.UVwM@:e(W|ODJ1Oke9/RųN9^Oo^n{-?*6B!+obBy]937^|Kq/з%a]lueq]0ˢ+鞺�L,TB|ߗMAL+&xqx?sGEyߒlVj8 `V?Q*Xv8RMS\<tOJ1RȔ%{Լ s|m?L1!B!WL4gv;dΜ9_عsڙB!BE9wL$,'5|LZU4`U dd큆F{BW1HZw=i*/N|BZ 7ܘ"n!}+k9*[mt| \)j]x:vƶ7# Iy\O˗-~B! _}!z0ޕ+i0ſoC5KM~/("+0f‚X"dprJVJ\'{ZP)ǫU< 'YQLg&\y FtWt$P5u2e~ aO~f3v-6OLǞ >oo]B!B ) )B!1o{N=VTb9xXS'1RʫW(b_-o/$ɱccύ8ڹL~Yl&VJ,;cP[xx(I%k"y=$XOE|'ۿ'E)&hGr%E!@Uu}'B!trB!ͫ/<Nǟz'(0Pm�@. 4n^{1N*A$&1O,FnW $1 ܉,[D TOP1k BiEGPd5@u�SO+`iEm~]'tKm Z̔ڠړD<yx}|=|}MB!BWDŽ{Ʃ[g!B!5^ػe֩ gw:p.?{ <qaڄo@]ǑrvXȣdGCtWL|N'ZW gr>Hms?k[~he[1QvAorb3=3ˏ`IZ? MNM]#+ {,]Ϳؓ= &Lsh|='_~h|{wܾ4B!fPB!NϞ5o\qȻ:9AN']XJ6XU`H NGHY?%G BN ~&"PmSix �a-N2`{QVX}H~H,^aܟND~pm'=Mb;o*1ҷ[sރ,&A @TRbN|n?.={Ͻ_8B!B/) )B!{غo{Nz>" Ւbr,wC ĤkNTzDk3XQ׬j'nl_EZ_${ 3Xͤ; R,nܬiW(o:va[p](()k|kV0ʹk{)( G-c;1mq!s0%ByjO4Y'|7O޷ewXB!~!Bȫ̱OwUE}؞\O|(K dLSS;U€N>.jPI ^7N/hNTsQ0M;/!eWVJח(lp*7 Q0 O-&Ň<`)`lbRE`ȕ@rLlǶ}5Oݳ !B! 4Msf۽M̙;w~ B!גӖrLLd5HM ؤlV+8I+BG1`%"۱o}N{ɟ]Uy<k'` 8�5hV-hѾ Tz!G q؎֋ Rc`$$H"Y{5|~u 8p\3WF2|zcWiuUW{-1$9vP1)db̉mS?Jq,bR];Ǡm.{~l9��������s͋ETܙBXd/T3BO@#-3q8f%Kz9vzkw)tJ%L1OM9zds-e'kWhk~w)v/T6Ѧ'Pm Fe09e8B!߻_{Ⱦ_\W*7��������T Nl N������g>e޵ SfL?.-[D@ʛ=:OfK¾f)*! mKHGi#>=KB@RR~Ҍ!ga JLYc_u)Fol֘&EߥhМ bJ)yYL;[.˄lP9#JoY.-P����xS���E~._zO>(I[D&6Kk9m&p'B Aba쌮#:>"Ǯ|'ߤ GÊV`uL5W6(;їT467)ҟKWduޖyd>ui[ʔ.=V/zls\2qLeG_uaϞm} <ckWo*M �������7f>6p : �������j==kz)9s̙JP 9G :D!ΠϦ#V1jjAo7eb_N&]a1ɺHIx;Μi?۩_ܟ")�9أoM=Ȼq/މ}>x'r㇦Lu+zuR7*8�� �IDAT+ᩅؔm1ïɋNkӃ����T N���DÎv SY<y%A idG;;)H9!3'a-8%$*@8}J9#"'(?$$IS ˙ypd!FaȧiK)ߟ+#mkb]{Iy^'پdx TtjeH ?pۣ+w�������q`q �������l]ԋkoS9~ wg{"Oi6.ȉJzAJ<+7gŞ>SኬUYW ؖނ7<DN: ZfRܖ{V[&USB~NR{:V8}z)vE@˃Q}?V}"9G~-=nzCZR$BSUܩs/U]?5[]a����\���s1{>3&-'جg!l!hGJB謑IXOOrl$9C?—UcH$jD!9dv(|:FSۓCZlHI 9kØ-Y&ñpV Zcǧ~N^u�{.BDȧ8&-~ FyeW7��������r:`dxx+&�������߼#~Ӊh,PxAg͐GFYr:~!or+!J)벹}Lʓp֙;B+^9p.U<@*뷇}xvsZ59C}|W(}4KLr^֔} Xb\E@[ǔ,ֿ|l瞸xyU��� S���_/e.9d1S-PUȑ?@$wIO9 ,g'>)S1k_ͭ}+Ik"=ʓ}Ƹ^%n2|H?BoDڵ$SU|EJ=CVcT|icqs}z-kW r9'dQ:zu/+6UM��������o 6�������/g>e CvqhA:ďKX!PkI>% ,Lf"/Qn6K{b_* S{͸d:(SK38s#~TiKXq ++E3j}%*6DɌh ;,D+:Ɨ/FB@yHk4h[V> ?sKav����P���Ǒ?ޣ,_z'ċ;̳#ѤF¦~Qɜ0R}7d$MB9{b`Pi{!c(yW-W8|c,i(b =bg.<'ǨǗ2|(~s˞,iгͅ;JuyQ1f,?g!buAz+9⻙9Q(}ޯ}a_񱵫7�������0!K`dhhh�������dn?ݳ'=Sg^0y3ϔ;IhCgݿfUTb9s6dtMt͞t1CIn_fN6^!cm q�̸Ml[|.% `7{j{>g`OLc2tl'QT6HPC)!rL,G}%r@2Jq:88sΔc_9>mY���^8���uOyߙg3l3uB/k)Gvؔl꒎|T/b FHQXan-״S;sǞ!=S9xRىُC3[+#c,Eh5BvDa&=V8rt9z@+v{w_Gl폮xܵ�������) )�������cO۾14|ϻf D4Ӈ뗶Qʘ+2)ѻx!z!)LQ /(͢_93>q-Yh#yL[&�AtRV~xzp[r~m*<|So)P7^P2VB82%Wd8yU:# )nm&16V U59>z[[��� S ���@ <pig UIĐ95pY7844;8rZ.2t4 !Jt@\DHvU:Xih7ΡR]岡dgPj_LkHC9}%nGt4g< ٫%m;fwGd~wm6ys¬ʎçںo?A��������):0+MWLt;�������yib^t8D D<?|Iݾ!{Vp"Q8Bj k|&oM!IcF1W?&R"F:~dQ"9"Oʚ"}+]k gFz|l\}&����?����`9[tT\uG7oYul*- *8fn*}QT0^|!E:3l9$련IQ)dR2{JeS_*P6X1xMDA%9Qt1cދ .C&PxS(?/ۉIa'lGyw=yn]xu/+FUθ�������� Nl N������}g97͘~-[Ꭹt΄Q:<3WNr{Y\R VS_xPc'=WlBR{iΎ̾_!U=r][W<d0^] A8A-%0A2ZW!뭗oY.������9b{ԒK<䓙""V%8;zVi2QT钝,)%)z%wsq=HeݗՎFUliTh:?}cc7ZX;B 'PvJkA }BJ8,h/mܳ9ꖫc]`w]e{VbuJn&;*5"c7mfx]r׾_񱵫79�������g`cC`FUcccOt;�������ʶZݻL=u8<mߊW97 ́vk1iP2fa <߷(L,Q{!r~}lw` )qxzdynI:r|,Aߛ7u,X$e7Ic ~&yNcBIJ5F*1O"?eΔ_=.skY:�������~`aG]);y䋓(-B$}mhlxAG3pEPkV;c 'j99祐 -F :Uj_΁5L+ډ3v0eK3PQ'/׼.Lnjɹln_ʉ!3"XR/D)xߔ�H]5B_%E;Fc9$in#6GW<n_�������� 6�������`ѧ6O95sj03nc)CrO[ R&oTW.8U8PRIJN4 `KȄ˪C"f􅐒 >+#R/b G.l(z+l4uc^B!A OrkU;#E",ljAu:ߘܓs49\Un<f+��� ����ů+u|"^Vqѩ-^ri"6;E8q%>^9w?I~%T&suVڳ5"K1If)M%yNԫcv-w*A7ēKt@i9HNJr:a5}55vHkzDHq ތ~a~yy;�������PUu]?Lob�������旯>N9BX6 K7Sx]70Z,(I2ጤY":R꞉5S؁z%E[wnG Ol IŠȲ6~JqBpҜjӇzHN|J>ǚ1-߱瞼~ҍ>����k����=EVTUĴXdqbzQ_1EM8?X{*ڜ"�ςͱ߁[o-%D0N4'6SKBIQ(Z{|If~$d)Mu2Ev< HCžvDCWQ_0cY䒜a?Ieazl/O~+1�������@2@�������ˌ?t%yЌ+Pݍ:]WRt\S--hPD4DdB h,m>^YHcW!ܴ.SlO HryݛŊ]TCrA"@F1, oYiOV PUX=ו%dڴsi(x^{c i[wXW:���L@:t���#ԣ?"bs|)}/ZOΟ~]DQ{"M+PiJ H;1=GJvVfʲ'32U.6չzsCAmј6. C#P}6…4xeTmE!K?,/TfpGmA7٨_{^|ޯ}Ϝs՛@������� |l`244jlln�������Dn׺etOkgZ6L22"塅1 \%~x*,zq+R?B " vc`mTbz}P!}NjZ$7s,Lf&X0ECWȾ˺T?`$Qb q=řSgPeTFy*) 2ϝ2]7=z_���8@��`2w;W}A?,LfSCHzK*xF uV%l\ oN, = ms/i[\rEe;җ!#&:8@rQcxX1N)�){IRP5]wHa+e3ݤ`!)/+)D(|0bnp0|n_ �������0@2@�������Om^{mߘr:kW&iSYR$(Y\zV+ //Fޘf-8F[]m49IT `MfFa Ԏx{FlfY.hJHdxXgW_TJ +~\Q>^x[lK 1fC:CLn>҅lu����'���08sw]y 8x btT�V]{U<B'RJc!9QA*MqΩg�plKz}r**5*4*TxAbڕ~kt`B}e~ۨ'm 5F#=`S"cemqv+$;tݳ:5O/Y{BDv=Բu91vnnM˼nyjW?W޻�������@RUu]?Lob�������'~Λ}> bNRHI"˘:.AoWS+RҴ%\ׂ-lSiC�&j5ly,A=gFFaxL7jFrs1i+(aQLv)YAɦΒ@$(Y!&;bf*Hd"L|{�������cE}h(rIjE<‘%Qsm\rOh0, ; -mKgP*vׅ"O؈4:eJ*H;L:ɔWH=Zi'ŶM¹X>N:O7ELTfN))7~*MHLC[ƶ_|j�������_q`q �������8w/n:f8b^@23F!AMs=!1{.ӖN߯H N"z?iE,#}T S}O!HYI뺳$>[-k+"野i }TA%<t_mZݗIJ1$0B3dztoԩŋ .?[݀�������G,ԩC ?΁̋#D& iAےA ڀƦ 5:tfje8ar8cTW"gtr\L-,ꠊnZ‘"ZglH' =TGDmSҐUo3wlŸZG6 ~6РHc[h3j?ʊ۾[_�������SS�������`f>qՓt0-¾s){ۇ6V 7$sdw?1i}Zݱq&I!ܠ`΢pEvS`Fb]:*"&Lvu<}E Nb1c(Rb#J4?y|q*o.fCdSI=*SEѷcaͅaO]?#W}0���&��w%/=3Ϫ&Ms(0)g4_ &{0^k;Bg::DRu#:Lާhg'4guy2qꋲ~"?Ǒm3DAN<!<;{ UI#Ӵ!?e/ytRpm*+;]lY1ئqҌE߲Kv)ePm^w;]4�������f>6p ft0Z566vD�������l}r7#_笙C\Uhև+ H{y/>^G$r]0ugfv[fH~ @Ɛk>@y-(=Tԋ]LR,1/l,u/ޡfl'S{U̘꜠.rB01Ybbu| (i>ԑ,H(e1ͩjplylKO���~B_���~u'̟ODˋ>Nɽt&Fz!3psejXh;rqˆSZƩGy8$nl âV6WaQ ڜ$L@R!mr)ȧ(GE{*)ѩgj=SJ+9r'H;VBs3hS782;* ‹†mg?U ��������=Ȝ2 s �������L,~7_}*aE2:- %cTXtq%co\b^ (g6Qu| Uُ]lR?kg|fyNCS]әSfQYPs)[T[gbl6n~u ��� 4-���.Bxog5 P2%,WnaYZlZC[D7Q�� �IDAT8U{Wæmh'N`#\d^8+N7{1Lp]+Y|B1 \f#ΐ")FŹ'6(d N5YGH#p-U^vF!ut{*2iqQY(o$'_֭ ��������`�������x8C.>k!c#ҧ;&#!n'nQ:߲9Q ɵ)E5P<-S'6AIES~;ٮ0V*okwi~J<6R{&NYRop1jV~(.auتwJblfoY.w���`a���rąWzo8O""-SoZrB =_8}?[V1EG9=L,>sỉs]%mڲQ!:OT!WʋKF"bz4n-(QSF2uzդ&6u'aJ񣔢W8cB<ٮӼ'AsvDVkPW9v ��������5|l`244jlln�������Hl[q׺e߼5#:'f-cfY5*!}lLnYlI}|ߐ?9g0qaIǫ2;9"=JQ䤏t?8D6QضË;lunG֣7y/F4#h0d '܏<`miq31e+*tDNʖ,xÜ_9/2<mצY��� ���x~C_{҃N;j䋙yv)kD;4b'P'v>DvT~a*!3嵱K,"FH7*FٱRtH;p0uc,9E%b"(hkVPX洖Ӣ(⑜$ z3)kd M97BmjLw׈X˔W)}!V_e+/JqO|w/ܱzo��������& 6�������e6O9}!b3Am�M@g{d3B EYe|^D)R6{/a*%IY8RȅB\R#a3RHB.k4^ȶ:&GiRcR6mqC^ɌCK1IQ+n)XH7ua湇 _ؚ��O���`p񹻮|lj!, <)@֌*CJv }T[ȖŰܾN+Heh:\j)w>l:\\O70~_18N)WAidSǐ(_EG'XJB kc" ~|Wݓיku&tåv& g;@4ϮO_y依nP��������&UUQCdxx+&��������7oߚw:- ڈUq9~w !M{Amۻp.5)} ]TEu>f! Gsf? d9%V"@16&$kBN;?6֣N{lկԭY&N5%6Dc7?up}5!���`����QݼWN&C STz^>/z6vF\@,\i-u dN^\vIC2Ђec92N+vEV?rg9Rş]t3@ry$KUcSkf#//}z[_YE���������))��������$3>Kơӏ !,oHi'LIG!_G ϥ}w'zE{<#lr6y#JD*gOI\@%(?+s-Tefцt3: /<tdXg[|O%2օ|}+s黴SQؒ~/߲+[\g���}&�� q+Nd 8+."6\Z[H *=''A&Nt/ ̩ŹLa=%>KM9,Ե)-l}bEwQ.-ң԰8-ޙ,yƦv”XvCL>sN4ŬFts+]feټsn%덹boKsp_}9] ������� !\7`0Z566vD�������>oܵn7w^s)ug=!M r@{XKHбz[ЃRA^0L,}hx.eLᬛ2Vopl#`Qv!bb]@QU6'L,~[*"èvXL!RTmsz S RL9WNO~M>=���@��` 8w;t5/䋙yv? S(kEZK .货Ȋ'H?M?gl۶>xŠ#CAQGG-H<yp*ؼ w%PQ' kaOe#Q;a$QRhKy/gDeJ9K]'}|x[�������D��������%>海)G9Dh&;qo]oNYb* :h3c !p{,))/+xHSBnCCbݢR=x0V ٢BZDE1ăP"m /̋yG!db\hdm Rԣ.^{P\("sy;g}?<屵/F���} 7"���7}'w>-Kf(|Xr^Ft"嫫%9伩^w̽>,#Y,i*N v?\t6C8bpC[__KYRr:ಝ/rDc.uƤeq( B4w>y))aFv{[ُxս;��������h3~| 4::z& �������x_^�-;!Sޣ'HsN!G Mq,AףB1ҵ6beB,Yގ5l(?/'[b?)igI*3W?n4V0JU1 g4qLf,w<sO\l{���Ƌ���~u͋| *@##?`-" u* TTƣQhOBsR\z&d=1H]DTL9\DUR"AI^8o[GqJɖ{|rhcKVt\dCž߻L# ^xMf<5__跾5�������� Nl N�������Fq]7͘~\9Elr! pO+H*A&#p \AR P]P傺FT~CAQ*+$|\ee/:FUhF P!uA""v�ƙmWyFn䊃6ک;HU4r.F>e箭\ 16]ʖ|xnu6���:���G^S~ï<dhv좑{ z2 RZNxs/+H-3L4IGrjbɫ:NbQY6T:kfwD3B3.ړ܋‰|6ODE|YtarCItUUrTQ߅(_sw2m֋a$W.y}g֮:���������`cC;`Z566v?& �������ض~uv^3YӪ&ob{Q"IeF|=[DMFq'~$!%u|SOc:4#Ⱥb_95bQW fv` ^D, MpKDq/~;'ݏI\S_9-%3٨.ca\_͙2cxICÇGv���~@��`᝿}ޡKn_:䋻Wߓ#-%p}~"Q:/PZcP}' '(Tc>+͂}6E,gBq-1E!Wۯz^89/vً9hoyȅ:Psz̜]-d`klnY8Ub#ÝVS~Gv>w;]/��������0 6��������YٲknS>fq!SPAg.\"A6ۉN&+DeP>]槬6aߐ8Y\udKws>(-b xejW1g1|JJs%LƕB7Bmr) KxHd3+x9\Us<p՞-yu���%0ߣ���Ưpו8j]!ϴ|F Pti4 TPwyzXq9{<xK ZhY)"I[Ԃv BR7ą]پ{ci@4^ZV_YC- ZtWrf3ľU1rVZZgG~���������ꌺFGGv��������o?t"ZZqi zs _WO(BP0?غC@|A)O ١f !A|/#Pt;asF~\;>T$_^ӌ%ZSM(6$2"d%)+S0>6q/]tt���F?���.y;N_tAEMFX.:{NcimIQt`E]Z=J\/ڳ$.-)x>UԂ)Vkz']7"[:}X-Bv\k]P)gwJz4y--4'^E€a:uSS~+}HgzuNwn{GOo篬r��������~ Nl N�������fk|yōC3CG]6"y;$�IxٱwP!Qt `{xqKؘqbEQhSCBKb=6!.H 9*/L'N`!NtS; וyZ.PQGRkWF'_F)XẨ:j,'~ࢫnum����ow���m ?u.Nf."dNH:OUd@9p}'E_>HLJ8[A^p"Cn;NDݮX]%]W)%8Le/Dy'[eͤr~v2pǠ+D#0TpH߁񥩡]Sؽ"$Mў=}gιՑ՛$���������?#|lm0Z566vD�������_me߼'ڽf)M:`&&Lb_>}7\IqPgf"F%[g3ʩ):V*>b3g!ZO�?0E+i a3bK=6GI8>Z)~F[J篚S@K}P6R+8xJv1Gx'/>ohxk|i<���q ��CCvYUg=QJ$.К*D!v0]J\Eb>mJPR"J43t0ur#ZXN0EkuۦԵ}*5Vݣ=g(UUma-%2$+TRIG\rl5,g yԺOWx��������98e8�������ɖOm^s8Wx}꬙CĴfw�mqQwZBc%0 mPf`!ұY 1Ū~yyMīP'|Pؾ{Z@b9[[щ=4_+V0uD ؔB}$\¦6М\O'^zó[[Օ���" [���o 3nN?-/"K~Y2Zпy]Q˩~>4r&\غNaeҨ:2; y|lL#q|H6Jv؃昺TI_ws3 e 5U'5B<ETl&Fb릂𺫹s³k.o#t ��������TUuF]MWLt;��������xkXp/@ dC(?uc!ZSEz  +!_RE$now%?fc2d| ;;X^7q!. lV+ѿWqh)fAm" ) ĊZէ X;O_:K(j~{ 1BmK^.ظǯ_v}57 ��� )���rė]Xq+SX]2 ٬Y".㉨AR"D--sbZi*Z6 g#ujG$o8(k{IH+AN-w)~sK]V{lgm,ga?eh<Pn+;FҧWV ��������$ Nl N�������V3c7<cqQ+:1[Y buS[8J!,\|QLHb$0=&sߥr3VưB`xRF6EI E(Ґ2>"VDo[c|K&^uD(W.^-PV{آVmwVg@���Mc��x8O:}y)UU]Dfl±䲩n*.8&aW:1Fm֨,ps0|.$"r{[U$j8Gc,_B^ &QrqdqIh74ޏx=|v^llԜ0oVvUJ (N>:UtT~^ q[t̻m%;uh=/nkp9:z��������xacCЪ'��������ul[q׺ewvtSg1? IB9 S@) ǁ:wN"ژ?BAXG+MdF!%KhB3 ;}V1+5LF([ٖE<MIQővmkKLx9h&ƹ!'%SuYmܐɐj C3t;e]mzѧc����)���t~K:3bf헀]HH؄e 泦҉)�,N'PuEy9*tY8D=FP{k h(,4GC)$G>$_<K'?H!Vc\ojVB6J<pk,֙Evommhmcm,'9 G:) Pgc~uߛ<tW<l��������@2@�������bˣO!1�� �IDATm^stO5sj3a ERloE) aKHJ``E.9 dzElFnpWy&('*,""T̂gd̓_։k J›d'#HIQt-ʬE:MlUslXu/7q &H~rko;y}wu/0̖־���~ ���ٙ+<a|f^ӒzSW$T&i 1$HtAB//J5ikOvTv«Bл_i!>5td<2*#%A,e;{Y~ZmL9ۣAJta&!SJC2yE]Κ)PSnqƸtk_\U([��������xkꌺyFGGv��������;~ɴ�-!*\$kv:6~_ iCP5[օq۫! Z̄ɢؾoS7rgAL3)*P!.C_gakh뻱XW0J/+&C_`=䡦2~e7X~۷ظǯuk(���ρ���~ė?^SS,Y)[r~Zki9tT1D!L^7)LqY4^@c.-Kb#*,ݢD99)DΖ̶Th>>תabQNYZֵ ojN桞@-{ʄHR:V:Éjg+SU߶mTdƶPzz_K_Yl�������� @2@�������Ɍ?tȼ%c0N1 R<2Y/.Y~6f* tHga4[h1I)~T2΃L\o *ԇdRڲ7Cןl۸"'i&#)g֡B;.3Px&q?_coǫ҉Vlj-+r⿾ ���`���~S_s <fgK{M5Q,D(?-GKP }*l.굧݌ltW\/䱋9m1:%ߥ`;kJVCZ\xDl .-Rۗnwе4@ *=VyQ{=/nks.{ud&q��������큙 !\s&CCCv��������av[v=aO0D4S$ԾQ}=zOR1(Jb2OD(d(Ix…  lXBƊp6~hS9tLyp3FųP\܈YJw2COuKJ1')"7)P8HV +ݯSf o;?>whݛ|d���8��;CZr҃yV5i<[.p]'Y =\\v6/>U6\gU 8JeݡS%cXPpXԾt4m='Srm/Iqx1yTm65G"i�N}+%I|"N(42l{ퟆԤskia'O~_}'\�������SS�������� lY57/}{foTr ɠbI3k6 @4H}A!R@b{9"zBDjK@tFl!+JRCK1/( )PT]ڍT(Wq]f q>'>q/b-0yJ1_ ؒ sJF2$ZxUO} e`>my9>x ڭ���^( ���όw_y ODeAR8$pX5-2\ZFlˌ2^(תSYiQOT^tbN,'*M-~)`(AD0qSx-H*iĜ|!sҴ1&X85J}h'uN;-+'`mحid7|G{w��������PUu]?Lob�������Ň%7̼ ﵇B~y؇[2XV _aH!:5f6,VjbCb}Q2JN.Ɓ 1w~L,* Yij*.Ԯ룚`/wOěCwSUSFe8d"!yێe=\]���@ i���@G}.0,,H[+ Z@V&6,~I(!^LJ1--JeJM{%niL75E%_4*J.WWM ! 9K]km$*&HPΑ$\;z5"jѰmu^!-@f?ZR7x_/~rܺ��������} SS��������8Cc73|qX*2!h! 䎾haU Q) B b+rq 31> 5tFB,fo|)#3yiϰRg[mK#.Ie&"F"?(e'}<SebRYd\_Ԣ|m/~+���(����ዮ8u7SNa.".Le iB"'MDhiTx_nd.LAA|<7Vc?f̢JKԂ E^WkԖI2XA*랉ą}s5εKcSԫ͛R^-rg •-ĥW)OY(Di{<.{F|OY3>��������dž.\ &CCCv��������ms{®k2kZɛhf쨋ُ! L1*[~ݒ ""?X-AB<8op042C_E҈X(vi .#>m<nN1ֶ*Fi`E&,-1}/%F"8Ns0j02_RC'8=B\aJܡGn;?>Y�������h坿}ޡG]s҃N;j䋉y<!A`="Xf1#镬,7ޅsQXFEi\dڅzIk۟u3M9hlDU$ VN8m~%4v-Q8Gzؠ<^ eGs?ȿz~l? c 兄Ɲ 2ړ߾p;�������� 6��������ٲ?6e7uCs̼+RJ`AB@"l71!Y)d ExjбT`E"J2ADPRmɑ x裔$6ż1nFj2SP$IJ}ҳ̢9UA۲1,'q^˜E SLNf7u|⟟ag<v�����dһ|ljSZE&/bR!29* X`uju\{vQ+ ؤL~OJţ\w2$#�SSJ l6 ؋ 5he~RN5khZkShɆUCaQOa-=!'G4b__X 1IF\I *J>}b6|oWWw;��������RUu]?Lob�������wW[NgDzEYB\ɰ&uD.^`Cd)^xqhoB0LI!c0L(DO|q!NHu"~b K.ؑc{%C:5<~ 3$Axp+ cVD%Կ8TxPϽ/V ��`Bz ��`r'|AB" @.ބ"egR=:L{*ۏソ~}헲Y~Y{D\ MⳢE}AA-S_C/k$7ZDD@bl v [l+V;i.I9üy;/iPrj,$O=-eG__u��������q`q �������A9y|ơwN)k"Ep C> x+@,ʊ*e Ȱ\(?RWl.ƲH!$\ĈGJcuk]L=RQ[cB()ē}q?Yu JKEY`n`}0_r_|ɇ��`��r+NqE4$ BR>S4M*AGSVCDu/0>SbR--i^1Uɻ1d#ۍ!4Քu<Ż!PjPz-EZ0/S:%#->Au)}vǁF~}_†ιՑ/6�������}f>6p i0Z566vD�������bۺ{k2kڤ&obwo4 `J&DA5tk+nr')%Ǝ6lH*B-WIԤ]3ؤ11& SlO~TwIS56CllEbrJΚ�6x)=8s3ȱ4i1МGns{i#0��L< N� ;Cm;wv&MOD4[Z/٬WT}L \'ǏQe3!0/?-eyC4)=K$ Ai)v* iW߯5UEdd,a\T64UU#ƛF'&V9ZN.nnRjh'}v+p��������) )��������-5,ƔYq"1"!Da$4rHL3\K*N." W*}mF XTч&a" bDX=;3w)nǒ\\QʚҖF ?+3(KLg;'n~+濒MA b)V\9JGYJ!2j^z᪚w¬K]uxvck���0a(`��(w]9&3ZҋQ+!/^iA,$L!f1b8Ud$|QbR1Z/<>K^O:Gn/6Ẏ[h/FS:(kOV?S?BquTJl,ƚqxRvJWl|o+ܷ�������� UUQCdxx+&��������?G_'NdJ34n%L1G/g]1]N*5Ka{Py8g)"mc}ʱ .>"&i%|*v'uIƆCCzײ0%4g15z,>D}q!V"\Fɶ`&$4Q=dߺXVh3 JХ ݹˏ6qe=\��Y���=?~w|WUWbdI2.fTXK.<e 6mO TDJ'@CEs5P`֡4>/fCBs,>S%mלY`.]KyQnJ^WBDpik]"VxҺگU=\%q o*ىK'ON /|_ۊ0G;^׿-|j��������0@2@�������`c<%q1ӏc`(JByka4ϊGOeaip "Dž>&ׯt�4OZs#0\J1P1 i~0o^ݮ&Ix2 Z(yqBD³kAmIQS^DL_w~`շ:��د`z�`p:uۮ?O#&>I 7*DNزR6YN M,SjOszC.곻,hդ2h3*w$=7KD֒?P;[|?1sG`)?K'/0Sg)9EVjΜvfBcJ~e1S^Xs҉wC/K)D:=\[⠈g+nsWs٫#_pu�������� 3Bs8 �������öw}ٷݻL=eִ7Lm,u\wpP<MqExQS Y䒎RǫHB b3(WJRd#z}Rl(gS*4#ƖgM|<pW zR֒B;ZA "_f ϐ|C.&䔪zeL霡Gns{i] ���%��}ܾWN?I'0ۮ \z_UҶҐb�׋(h'9UoZTd�{}N!ԈĂZ][H4g -qt#! RSk^Y͒hEC͇#7iOa1zMl8ܾoli3f&!v#B+$O|g>v;VxU���������@2@�������`eˣy-˿1tủ~\ hf$D)$B \{q(2)!|%qpK b;~L”3|XhpTrul`+ݘ.\nOebl5oHRy|"+kcR)bhBsR|1+?Ma"dH!ӎ YaySN\g<v#��_G���#~|ĴئTK? C#:@7ӭ@ZՈ\ʅPh1KPD NZoyr@<١FpkҸ)/P$ Xܑ2 Ui6 '34MioYȥrioP UL&NbOaZm !=Ko?Up��������Ψ!`2<<|��������>ͿzL (Ʊp;!ch =3bX&6C1&YBPS奬(b5Wh6q::pW0RT[NP}.Š:C3טx;٥ɧq}D/|)*$ɴWæSF6qǗ.[ޕ; ��~��_po^4\PGvLyIl}}W"b.KOvjJJէ0QJ ,! N\֌5-ZCWR^[aK= f%bY5w: $4)^T:pN1D DqFh}/J5Ulؓ>C2ܴEy30R |_ծ!��������`?��������gyK>z11RDk�l@*$6A Q⡱m0ԧ~}b=t|G ɍJIGttϸgZ C"$HC!ަNMx10*T!Z bJdZvǵ1Q1WڐIJ%C$CZ Adj>ou���0t0��qĢO:^�� �IDAT|mO9oU1I�$tE;UY3T,*ieuA R@:B*֫gJ"IHc[gSe,(^{q54"'bM#C9吵$(Jlu~|v]-6$QNӛ J)dfGkV<#޳y۾_s٫#(��������dž.&CCCv��������01ض~u˾u隩8mҁ7~sQ!)恛ȓHJg`Bbp E}J$Wh1cG))ij1nʤ1j-i@Oǵ"{|cǑ{L̉觍۶[BZӦ<×7C$N1*_]qF&p*7=Ug:m']~޻FUUϕB*Ah>05[J("<bBPnB /)[~9!4AC�#l#2mk9诹Aye?9IFzТCwmw����p/Xw遯>s0R)6Ft%8R'hPL&ASYlIt24Rb?KUs14 SR uR?w>Ȇ8 a�W^QoU$bQk(.r&~~W13Kֿ 0SavQmn]Ƙuȟ2;_߾ݛn+��������<ˁ9efs �������M?~gx]2[y.Q0 �"2|j(4]9# J (^RǢ[mw9J85Jv6\P*Mڜ(R/d2 ~LBMHZ#_:UH#<.qD/:bZdK,c/?_rΩo6ݽspc��0��0x%_МL&omI+L/r5SHnc(52LP Pj _GG=#TQ"QH"Wi Դætm봕A$3l[ խ6؄&jPO2ר߈Դ2>KJլݠjݪMմv^5y&KGUf~cOrz.`7{jɝWmn��������,i7mm<… رc}��������n]O"Uy!D-b6Na3 D )~,H Jg"F#ZUR7~ږ[͉&#zXhe쁹2G':GmCkt/=PձÃ^E=xk&ƮUu=)ScsreuS~{u7W���3o@���3E[a4DacD#seN124-DEܟ m܇w`E[RVGLz Q�=a,)ϒ8a _rt6F>Ed. :stߜ cN0'yͭki>ɦs1/З>y/r{P��������,攙 )��������# _qiEGg5}d͂>Y1_LZ >8pk8AR` [� UǴ|;kcIsX uO=Ԗ'Y3Exݓ]!SҌXÏs0Em("_Hd#Q$FZcˑ}9l"5bFi[7+ ��d��3__d+5̼͞3DbHQd?`k4Q֎MCqOҔHPdjWg(&o)<娆ftjͼV*`&$u t!p)#{wy.<eV&f.&Uq#>w0wgov-b9ձҾnZwse��������`GƳLLLlq��������{~?}>r!+_`0w}̴S2ZR:α"ɰ^C +_BC!1QuږX=F -;680TΤa G+ g1SXx8g[O#SE^)e9b5`Q;Y͗UmI!VPGR[X=6u[>qỖԃ ��`��A?__u)4gR..&ih`S.jkAEWzj,*Df*s\L( , zIpd�.z1ypOf7)Ǿ\ϲL:o|9*fCc^џ+MO&2$TWPIc<e=[?w1mc.rDgAoۿN߽��������,攙 )��������fm?~}/xcLV"^œ0\_0) { NmsOhm2%YEfB1mIrhbn7}斌Hqӄ͎Bdպqqn_F .Ef-(mׂɖu(M?ʘGl e겴1%&dx+^_rΩo} ��o��`?ㅗ|Cs_|ҙȊXߚPw)اȗ ܩN~3TwQEK}i7uL%h6蔛E5>>!Qk3twAsA r^˺V]oԉOWp0~l݁ӆNo-:n9oy~7 N8@/2DMj[_.:P_l5_BD}w}G:{ǯwW ���������4۶6Vbfp+vql_��������?''1*)"HL764J@4AJ7R2n#MUUXE*aQ^i*gE["LzlHZ7TMiz\;ӈ`Jc}A} d5h[5RKJ,MJ+XTug߿s{í6���WY���_Ox[HM3CGgh0;BCzJ5\X dM9G@D'.J ܡ/:X(*0(C :~\ڵ$׮u~z3 EfnQBA%H6"$cqEFy}7/,'0 G. lKݿ|K- ���������29��������xl7<ŅAG.::ƘJ\(k)ơ;ԘMČ \lnB©>H^HiTrd3G`LYi2` W"-) [-ӨV<ܵ'ްEijX,sl r'&յl`ȼF"9.Yθ5;o7J����,xV.`%s9ļ_f35ݿ3dNWN3r PRVv彜bt8s4Z)aɾE67?%lYy7邵!Eæe֕>[h w&d>ۺΠSo2k'K{7PQ6n٬SZۍAn̼Ҿnw7[6 ���������&RJgcUf&n���������LǮ|#{!+_`0w}Dd,i l/U 1?dafnj~"^)/czz-Үd폼OBbOF鎸m|?R;õ~<d[޴45MEb>sdc^TWD,EF7PӾ,)--} X#A605vtq?ԉE/7����Ϙ/`ݥShÉP e9(M*)4ƶ) 16iv4D& K-y:AgwٖZI')kzQSlЭ@5k۠xI$32Ѩ`I3}J6kUནF'pqAHbyL*mGAnilPqW;_o_uM7��������kSf40���������hу_vme%ԢH ^& ]N\j4&G #~:E|ݼ2J܏Zyh-)Qo\#nuc@q׸;I~�K$zdsX%(YU/-rIܷmIveNeU]fV4ki,?_S[wnn}���<ck��xx%_/ztf|uY*>q:}ݚL',Ұ}~ᦔK"sN&RLAfC=0J\=?e"ތbǦL ݴw}ഌ9AdvU!3z]1fI<3o@1ϋmj2R/nowݓ;;n=���������0-MӼmoOW,\;vG��������鵗=5O"JAp!c}͆4.V;úVCƚK5ɺ2It%%&Na#ݒՅ4_d='$1(qMRݮ<+&BB#SeMvZ?nlYRedI~$ +ӓ4:%ckvo۾~{q[s���O;���O?Nzu=ޤw{Z $lM&qi5Et,ڜ>0hAEdh)i#̚O/PbJ&72$ce"y?!k|.1lϫM:RMEjE_2mi_\w&70���������<.`N��������<17< yG,<WQ(mZ IK` :is0"-)uq:5mz2"֩i#8,[AQs)&q]ir%]k3.}:2*]d.aj8.}?!1ϑ?6k~ۿ t��� ��>_c{91EKݎ] ŬL!"废,j\)m@?I\ƕqlhZ\ .Mn1M:WGUZqMj9ِB#dq3,cbђ!oP=AbTu5ҋ~8mD/2ǰnlXt%-cԖ]v?Źٲ~7����������<nXƩg:���������(w?|>r/ɡ9QZ#Iʢ!$2fXQ3Q O?S)PQgҭ1h͈>}cZNR<BꔵWջa;6HSzYχeq*m\/!)CkY|dr_qzl%d\JbQƤl)"sqjAEƕq&8?봃`}6���s ��<i]_uyoD/0b4Mf?"U3j`րb?T CFC9\)I|Pΰаu|,&RrEb�1u"P۽ M3-Dd+,AtT}МHd8QsaN qHgKZLj47w:}~��������Sf60���������O;o;?_옃ykJx4 Kt񱜢Uz#a "kU (,L:cᥝhbd}ixLLytSOo\-w=ʘ6Jh#Fs;EF>դ^ƿ"3Gb#MX S|g%j귖7 8x1sN};77o���O)_9���B䒯~`^y<t 2Ļs0Mq5<@QAP@9k4Dp ynMNCD17:ͭ)HIc\~ҋAͮdLZqkT2nAKYU ɗs<{'J,T9g\g>]ݰ-���������`yc۶ L.\xŎ;Ο���������<鵟\O"U,50YPBYGBU^"7l&R֞DZJ*"Hj{u1q a[IkMYJuS`n.j"Qa!'Ե΅YkmUcKc(yԡZX~u|)'D["Z{vK>w7l|8*��g?��<,zߧN? gהGL(9xP皱%̠:\"*16T)Dρ�PK`\Z4kDK]jG7 Hy,_c\!@Pb;_:_ Tlja֬ x`.ZyETh\xE%%^4o]'{6 ���������x29��������x8O| O8h"^ET(6ӅX ӕb\2XtjJAWڒe }:k)$t' #љF%0zq®$N&.Ҙ3GGJkˤL72͚e5<T9,VZ5Zen 4o]*y߽̏^ ��N6��dr[_SRlƈA_p;{6uCGiB^;{ ެ9cArPUw4 IJ.f)uKֹ/2ϐ Ѩٙ<jQl)xF_b/!L-.vFa&aT~fvQeǖG6|__>*��������I攙 )��������SYy}7̤2P"f\Uj3(#L#_Q/'mZ!m&D%:Օu"}3=z 3C_ywmeV.4(Ȥh,bNr݅Ȭ*цR8&e8s*;鎩ُG\޽|3ߌ ����IbNu>7aI݆8,L*34M+㶸jÍuSϷTˠ+)ׅfKQ17:%&@ Ja;3 i)T}^ $M/ڭsnϘګ%J}sN쟺0d8zܝk'5NTk)+(-?o,$iS 3M>ݫWz1��������IJ)ULLLlq��������Tmxރ]r1o%JKR#\#TnF7X`-Cc: 9gIҚZ)ڔr…1;MhWa* p:>CF`XǮ3udL`bu�m4HG!k>yr}sy)㠮!4r%l=g7D˸/[/=7q޽s ���O:���G\}+_AL)&F*gonp#C0 b3Fb2È0'ּ">?�� �IDAT)Gy`1 bTeZGS I]@#/%,n";g!5Bf<d[7r{I؁)|dNĺ4$.ݦ$us7-n:>_}[��������)3dN��������~V]ɵfI,*R  FHfQaRcbL+pגM܋4!4,*G1dq}Y\d>\ǡu1d>l3[}k* \I{U@BӼr}vJ0#&KZmE/~f~p.�� ��}:ߺ:5MRZ76FC"!bb sVkL%2HMd<QFδⲬ4"Cx*A;#)պ'Apu|49Ec;ݺU JԖ^Ψ|҂oR,D>]hHgH[vytͯЗ?y]U��������S )3S��������g#O9qʋuټ#?:TXꃊ%/6dQ$%BIkC%uN#""<Yy H\8#mOtjLqfM66D43`l&i' ԿAL0X ,+g<$;JuKǵ]]ڸÈ5VopօW����\Y8bkb^3s ^HEFƝPsGYwҵ/. clWi*DQdv8sqL6A%0K�$TF^~};))K"�y佱\4fINt<r5Oil xNf]|'c2kjm }_g}���������xaRJgcg&n���������<G|?~ȝ/xK9`})%RRd\)$t*YB1&t~"cE1zM ZlT7] [D,_SDhR5gM\$JߥLyY^ttf}}0uU혭K,Ut r-XY.UV$YߗzqZ>q]K=ԉE͛"���OS�� 0u_.}ޫN~3 漽a^up\7"L [YE HN]pǩܕFiT|I.>Р ֘NE.~N̤נV: r xd9}3@,QHt'ڈT?XS /,�k'Cn€>Z314"ؤjwD;_߽z7o���������O0l`N��������YvnOiŇ쒃y+/&!C}g(]_�sOra6K2tXsM)M<7RQh_(<m)ZjK ֖D[|=C|gma ,\M%Qz@̜I4YϰNMn$mPK˸,_/}ש֝��q ��p_s^thM٣4ruoƮޓq]{L̴e_i IWa(|i0٥OLb_¬YtB"]5XX5CmC4%fq{sdov]z9SG&"cm46PB/%/s!pS?9 ׋&~?w{L���������O3MӼmocg& .bǎu���������V}岵 ^G'ȸ˪M+Rߛq(DۯUj h\Ԕ{V䳤D7n/GsU\Zc"^Io,&N$Ne|dwrΒbD} !*ەׄV\nΘlD<2_uwLm۾|{opT��L)��{:}މgюO%XS멱7EccaA2.|tpa␛nmNj^Q߾hK 3*'=Y,wן@%%qM#9I68y|f3A1)%ŝ0ӯʟ9WJWN_ÛT1~2ٽ?yރ_M���������0l`N��������?<y+/zeXp41f`Zd1ҶwhcH?CHhn:IwߡCsкPp+~|IFoiǏeI=֍w4c6QWJ~YGD?o03rOnrK,5V78uRJvrǭκJV���zk��|}/=h٭;l" cr,dI]J:Dgj:5d,uFp}3?rkצ SSOA0I~b_䵕kmϘe^2>+qvd1zy[l,eMRNt?Cw��������3)3S��������=kK]y4ʤ2Zb3Tِ?4֝$ %thTDBuJzl * &bdXcxE'ɺ$$=laM%ګ&PC<c6VPЮ4H-TѱQﻥ3?86T~_Һv_j^[?ot}���p ���_7Ӝo|ͩ6>0D9+/6` t.IpJ$4Q&\3D0$bleFsUy\DMZP]A3kG|,NueOyYE^\stSA PMgrz*GKꚋ*WU>fXkxD{^n 2Oի��������`J)13855ul_��������`dw~f'34le%)L$t%ŔVuSHz u*BwĝÖ*XFhHGS4Ij<L y4GŚl6#p)EʣhoSvA1ԃlv(k-Kd)^IWTji+_dl,Dq?˹,_/=7g;7oy������d8E<>gJ{▞DXݷwv ѿqeK[Bf1}HCےQeAڴ".6$dxdS4(LuܬD(?Z9r`}t T#>DB[fm{ƶ'UDLwuNU[&Lĵ<oy-{* SݭG߽}޷v��������~2l9��������9vI,*B{B$uMpJ$kUz3mDm0Tk-׺U3ݨaUo+"q԰I5b. %s 2pgDl*<D͒Fkr\5"h|QfM,-JH|"Tԕ2XgWdmѺU]կ%yt뚩m۷}_| vw���g{?u7qF;޹;r�A2n6GPRlB96遳,Ytn8v' D=]tk-&9cza1Y7#]9 K?Z%Ri>KDsTǤ ŘǬZL<+2"GiK;erl޵˗+7u�������� Sf60���������3r¼.:粉#=4(MH>\Td`j0 -uvH^LV[# 5z,<pJJ[4h4ab4>u])tu'3賽?6R13k}aIJ&!k+KgBym[Jl�e,r>A}{x͆fJi[uY]n�,g0���$~q.s80R",b&R}:RQC#vF#{lrE/2 !*M-Sʍ{ʲi§b(Ɇe2�3!`Rf!ۯ5g%O`QE9SFUAc^[}O2U2SۙeY 5aJ}FP~lļ%Om'/O6���������`J)'43855ul_��������`{gFȝŇ9-bOLhg-y=LGCP˷BĝVj1r~gk!$;>Ê)I99/#)|MLT>}Jqב3ufs(sD"Ǖ;qN>R͡5){gijh;bCi->t}6E���F��D4:dG]W|2͙v)E;b4H 2;$Sڜ 39dO~@7yc\ޑ/Fn94$&5ᦌOt"5u5TTP|59ꍬD�aC~1x .'D֓tuU#` p>0s^: 9@gRd˻OG|m_z~ ���������50l`N��������f&;o~gyba{>vAĴH HE@g)|)Z#}/ܢM"m1X3M|fHcRRwLB;L#4X^(T5Z9IQΧFT:8.2 Q>GYt domu;}h=(DX_rW\r #/7޵cJU$5_<~yJA^q%s&n;7�YS�#/ڇ 5*52=T8za\$,]7YTD!jD`gt\OIltG?C27ff|&X+u6&Eh?\ &NF<!g<{j1&ݖmLp_UQmxJ@M9<znwn���������14Mƶm'63Yp;v8��������0Yu''*32ޣ Y5T tAEu)}שDk}x}/l5"kZ֌f='3"Sbl(\g(G衤E5̳l,A}ב]T-ӎˆbXtlDF$Aٵm=;%6>L��0K �|Չa58ݠUWJ\ПD&A8SJ!6Mux '4nb3 `qYk3 +QNX}c4FUX` ][7^r;d!e#][g4b$3ȳ<ݻ~=ի6%��������攙 )��������#O9a/:粉#=8-2&IBD芬Ƅ$N&ݎGf.�ۃTڨڑϖuD\IǦ'1}C]1I\~?o'Zwa\(R$fcF[mZs=c0fp|]@y~.u¤ݺ $�� �CO?Etk"ZJBo?3PH #6mou]:zgQ_:@e80+57RtJ:`R\/Pw5D1W{vhc1+A9�k/M7ƣxlMQ>3RkWF$׍klY|ͳ#sQ~[^/yIiK}v/voX{.sdn���������0Q)f&n���������<u׽}#}|ɂfyҌtƔGoFBR$~D^O�vkaSdcU+2~,'T"/)&)c/|ĉoO2:4ȹie/2iP*$:Z1bqدoC<w֙K/sJ~ÔDRǺ8fy%ta*L7rMrW5ddC+;봉EMw�g10��f O8m⏬y>d};3/ey x<vfrMƒf:j&mȍ 7_4W5AIl> 7$QנU矫hJ'85&!G y1k9H#KFǾǗ Bc#(d3?W޽y]���������h`N��������<yOi{>vAĴ#F!EJZM" H_|`k$׵q',M%EBYT\-29KyJ KLqr-CwCBp\"vz%iܑ L#B\LdV^}%뼌 G,q24V-oYqȲ%w*k-��A�ǟ|y+_Ao`Ing5Zow|Y%g[kh"-˜vM6w2Dݘָɕ]:ةn]ZGv2yP&Ż*ȎK\Rg M.J~vAF)\ty䳲ۗkl-٨TF*ʞ|t-^w {܀���������i7mm<͙… رc}��������g3r^$"^5ġt%L%3I D eٌ�%qt,E㣤2fP5JPږ1IlѽVk\sBU/~FB\+V$Ae)h,Z9nƑz(Q[@6ʧEqDYC5m 5Yeƒ&~w]lrmoW_[�<�g ӟwwRZvAqJȤ  FYNdj[ʐ! *5|l?9FdJ¼YwNj.k3Ph1EUA}sQ4]i *%hǡ Xrc9` 1IZ5 H=s|e3uϺ3$,:SJݿܵMq��������)3S��������0oE\6ÏU&d#tCY=2$q-u~x�}ei<# [cV M$Ÿ VSJ&yIVuk2Q *#\bcbw s&5# e,:nj_z->9lÚ;ÒUg2;{]:�g ��09;3oT{@V61(@| 39^H뺨(rWlc\m.(/#fI%3 ߕmj>k,kwP<FuȭaVشS0ȬB4ֽYL=_&pm?qCϯhmpɴGn_/���������f0l`N��������fKwc]s7W[J>5ߓf{OnHS N6k#93}mz1ה@}ІQs[1iBޗTmIdIU$U^<˨9 33옒3=:*C}3g�� �IDATNXg6>6^>ѭ_[>|7`�`k{�`2u_/\W| 9R&i V*74!@Vԑ[㉼Wwў4y u;_7pus5 {#zQ34f|z wAwϯ.Zׯ>j,.rpP<`m[2uenJ"PIj Yʵl1Q&rD÷n}kܽy1���������<kaRJg L&&&6NMM8��������-mrׯ?{^z1m%%JL% 6)͏76O}V Ycz0G2T.QIHΨQSmH3152<P_I_/uW`,/e9yQ}p؎5(}TςUg9q҃交r\GזqӬ8d><@��,!+ ��f$?|lRKܛO9]Ɠt2+JVSKɲ._otsjLPdAЗUCpgdf 2Έl&2CY'CS N,gX׭%|TNju:k\lՓ)[\ǮLmٲ* sG$4oݓꏿsn ��������Y2l9��������ݬʿ]'VNLduTW;~x jw(i{tR=z)]xl9IȪz:5K@^ȍ弙EeI!UqD2wM.mCMf &I<֪\l{=Ȏ"Lߜfx*E`}ٽm\rn��fI ��3yoxa"5y3747wT <J#5]D>9IhbfY>2-}|oHϫ"L1FӆoN度7d>ӏD`P ӀϖE 3fY,,#QϽ:qQ>8qA\mӭ/7&=+��������攙 )���������x)';s.8~тFʼc Hպ[ʚ jFIe3Qb&é&qAWf1& ko8b:IZHbbuϺ:,aU2L5&9/~ADgJBeƍ_8a-w|3/�� ��f >Aoyϻ&RgKIf n�sFɔ2A_324ZC5q>oK[|fu|R|C2rѰ3l,"݊=ř,+>#Np+W˧';`ڒͰCkn}44>{c5~fQo2ok���������Sf60��������� }g<5Νw<L*0 +Z>`X]ch+eG4"L1EIDR 9e /"r<<@ѨBp:1Ɲ>"i]WRPk#QͶcuSu-3zDy8c;aK[kOLӺԦg_y= ��5y��ϙS/Ⱥ{O9cՍ\ݰ{5g3Sjʦd/?IRI6]}mŒۘ?T? `f_Ž$L)'kP%׈E?v@BepF:5RyT1z{g֬ 6TÊ ʳm J(Si?M7^ egU7.;/ \O_?;myS7 ���������`VGӟLLLlq���������v6}O,>t/; "K졯l4=`XY#֠(cRC=H펑J)3[9GreJe(l+eNמ^T뗃nmiNٶuݫ/GCτ<YǦo*k'H*Y39XsΰRǪulܢw)ʩuިh YS# 7+^| |S[t��`?& ��W`^ f~Ͳ1Wl0 nt i")RjCDaDE0 Bbmyy?d2x=ܓ.�]|fT`B^QT3#-ƜЕuW2>I-i^Qgsߦ٬@=Q!)#;my]ݸ����������Ȝ2A���������+.;W dBdFQ_%تC&bxPY3K:+2>hZp'xsUz5phH9nDkOu:$gx5Ny-&N"eAU˖}P?dC!I[=z-QǬh`GBh#D^Փg?ꋷݰa�����si3q6a`iU%YX1@$Hl�j9TduBC݄Aՠ;P[ݼwέaI !l7D% `g!D[n6rViHfJhT˲b6W?*-e54IR7 @b>coO2Lͯk/]U���������9es ���������SNιlÏTH%J*ƔNAhlGQ.}Ɛ߷2buz\ -1YDIݗq38kfQ7dEJ -R ƛuqI;znaAR˦%âm52~fP?L&|/{wo<��`?g�؟9l+/|bΒ㎣y3/K٢~wŽduqhp/jȐ7nc^gnat]אyCrAe%-TR0GנP5D[5e^t7x΢n./:oc4* m:JUWS봏̴Q5DP>4[GUc(])ҾnZٲ~W���������NᨔXƩg:��������� f]>^w{|ʗ,0>"ZOTJhiFwi U9c0_D!emT`uB:o27 `ٴЎvJouv\h-Qu ii.+/B%JUhɺ֘BR/()yJUCLdvMjiHL6c.JۖU:' j&'<|ײs8uޢCMwE��`��~ן6Gps<w02fej1UmKn td6QSn>vRXKMj\^&x}L&IR H^2H3M7QUS[ 9h:> J}"bkGf3s mccxDϰ?T0QLFk'4>/h#t헀1rחq)|w挩~ ����������'29���������6Mns3oT\U,2r*LJ[j}aU/CE:rRΘcF͒'ڭr$dKLC MR͗zn)i6^H?GVﱫ_oH^5 ed&gVU]%\֩wdY1=.f=ٵ7PX4+Yvtzߞfڷo[ ����9_/zD&20HӅJW I_we\WZN4YUkCtџs(RS7FZMlSR##sz2Fjl*Sy|FnK5y� .I a ĿjrVzL"ۖv`=skTmt@ԍmwO>t߹{7q���������i7m.Yp;v8 ���������vIDiUIҙ=Rwla)͌> 2< Δ"L%y ]u(#&9DL`LPluղ%mNI[PZ+'-<ѿKALߵi#9];,Z.;m#з2mеS`K3wz<qJi=;%W_| v�3)�Ezu;@-GHFRRlZW fn�s{C@۹)3jOm?QHSΔ?mmVd K# <$境q-eHr3c";p!"gۥ1{\KcLkb�l0Fd7e3߸ 'xFTl宯\j+���������29���������(/<y/?_6EG*JeP# gV2擔όd-nM"384,)}e%ל5zol|'4rĔD:Լú\kFYMhHYFVW&ڪYH.J !F=77a^^ƔnKfe2[FN8>_暝μJ7)��x�aSnz钖64H8IlOcbZ ?r2H]F rf ߯[ ]Q h3Í0XbcJFd2EkeqԶ6rIe[e; F|umD"ӧX.T f j2Qް_v ���������qs���������<QﬕL<ҪQsB4BҜhI:C\[]Gh~!@gYy J)cMcp<[mCѶ%+U6Hh Eڂ]eZhAJ4sVƔ _ fUVd7>@34f.2\_4rCJG~o��42b�)~i ?7sxG4Ώw.]M ^?"oh>8}SoOir`2`Fq/曋^2z/Q34Ƞ*ܐs3aV} #5 J;Գk=4 ڊF*9Uhi3"tmzg3Uc}n<24]?QJȨO&||f ����������|TJldbbbԍ}���������퓟Yy{ˎ92`_)^zH2ÅjO5M R&]O8da31>[4΁@bI^27aQ;!8z\Rt;Ud[9eDͣV cMij~ÌIcm1*c 3YcՠÝ),eq+Yvtzٻ޲t[ ��x�iM2KE9f߰em)ӥJ]%o$LJ65F5l'yg6"+J)LwH&-bod2k]QvMcG\lJUTn5gz<9_1r<LlgޯS}RfE?ɽ۷N>tn ����������Sf6Ȝ��������'7}.xHeQQS[f 1e<1ߥ~H]4+YTmŴKNW4$tSu8R4uWv9)FbS<WSs&Y8",Qh2dRմP]oFuiN'M1FSDoW6օz^{ێm߿a��O#��W6ķg9b3^l`D#eOR:=} TjHLRۮs3h &N^OdqhMQG nWE2o31tl:53쫵Z@^h^#ݿյ3���������?Sf60���������0o\x41ʆawmFߕL&WxCضeڬڥzߨ *Iֵ)az8CF,۲l1z;s±>d:2ƘJ) uش֋鉈E-5f !v>cJ{l;bltF X^[o<+ ��&Xh�_]2^NMDK]w٪gFEnk+wczӵ1ӕ #m}ʞθ15E8I4(-7<XYTø!qnRJ69kTSdlڊ2/&^.0 EFd K*/& ,: 4}uѷ'w���������<AXǙƩg:���������e]>#}%sbZ%?^-!u4siR&uF6#JGzK!KC6Ԣ1EQdn` 6[CH'ETR9F<\FWtg Ი6{|W,hL?r>=u1EŤ)Fmzr|w-{N,~6l-��<�xJ9_i0Dn;S18[ #y3KJ=ͣܘj#Etg_;RI5jW/וeoGXî?i`+ *QWMlwh�D+Io<7}ADٸ3`~sJtf7&T)}w6T/jyr}S7:���������x9efs ���������Jv6}3<옃᭜h MQHE2ieѰ=˘2Il oLaa_C[-aTIԊqU]\RwsKZQϤZ6GyYÆ(b!1K%M%?7TrĢ֍ *d2HJՌQY|4;q+Y=-o}vn��<IR�_w/:۔]?Gk`*GJ9ν!!*AƎ9ֺK952~z^r)S3mQ(]:9;عd<d2z.~4p]lVG3͛{1iGz&jYkɽ۷Nꏿ׷ݰ ���������Ii7mmd…Wرپ���������xzXu?]e'ћU2&LF_V$/HcO!$A6GS<%2׈+k Cց'ڍTn,I4P-J{=cHՇr5 2ڬ!Z.Wi9@f5:< zr,accשC㧓L&ZJO^^f~poanQ�� �'Ȃ\qĉo=UFi&6oVu<4 rM' "2+zQ\nf6|%H eP1 M*,tS̵Tjgsx= a<98[|4֨mU#SFc L,~Am>3g2ώǙ)ns-*EΆcSW@*MԮ\|,���������S)3S���������tSNhbTaYCIAHaITv+"ڠ r /.�� �IDATN.D^)ڸ]*B /K+FK͜.i+ȶ"&1ʘSGU[>\L&Ec av: 5ʌ˔DuϼJ7��x x�'y~.{Z S‘MGn'7H<+J]+u6'(7%5䊺,<ڨIsE}1Hc(EYuk9qH~,$7-f^c_,iL.t <ڠd3ڟr, ;'Y7??fvK:7P>W3(W\sQnhJ߾_[g˦���������BXƩg:���������c]>_ʹ:8`ωy1x)U(z)=ܒ$jS9F}NV%׮誖))jܐHiHh\y6YC#0saPLl2k=#}jMԇn_|"E<pͩR٘RѠYK֤:4}cD*m\ЮF]v|,wĂwi_ r�I��'њm]V(F8@S>.۟Ͼ '*.;JZ6<ͺqlr9\~v^\͆(Kn䫹Èx9J2$}RA(uv 72rT6֦MN<FIy~:ʞ)bd&2ш"uw?ō���������iSf6Ȝ��������gyg}柝MC) S#ǘ?& Rr9'pIzZaZe45X31HfHNf|o&fkae0zZǶ).Ac'>u`2mvYF3]]!A<;1&3Ӑ-攮ydo}ʧtuw.��<`N�<!xSJo#7'a CC'z-P7۶݆55Lݼ9Gw_lPInLYaZ.+j6U_u۸IɡXXGˆc6$6d6Ҁ8B/A6 ~(0rқtgTc̡f<Ͻ|wϣ&"ԜE\\&۶?]n0���������)3S���������Z5ND'2jvM 1,2e$qʎ38M%)_DTUsA'0Xlh%mx0es͒) vfa$i܂K~4kl-njl?q9ٔ[Ԯ~1vl%W_톍�ǁ��SxiܨRTÞnW;ΠX bbMuf[7e8|:I*o#i*ф ۆΜgZFm&N *z-a!dٴ`[6&pɿ[P5H=/HFM_K O]S_>pݿmt���������x9efs ���������'<^^"^U2(w<c(ej{mIuS|?2h/=LY5{ƌ/kdFp²V8C}_fL&qR +c:901{XӋYT>3[2fP3ƥNZzYx��<o�~ Yr܊Ѳ]aU.xOm2U-c$Í1H4XIRu̩MYnlyblXUnX:'>(G@-ϯ3K$rL?X>vY0`}HdPƙkL_B7+b [|oK\;ӡ# VHp̅ Aez8ZL&"^(9ck=n+2Mcc \ky:J_~W/ym.sﯕWݟ͏)%S֯ybչ~?1 ���������B8&Ƹ??99q���������_~oP#3OO±<_fpLO*&Gfym xymRtKh] -vxc?bgBmp5QJD\c|a^L#o'&x XS|yibҸ =pHF4^]YV&8$TWɣo?rᢱ#{|f@���+ug-1V[H#/])t1YA]-%]\lw,E!BOhT!VPZ0(HnMhʸQ&ذ7R5|8Uf-؀\ 1in pV[l.v1S D'LruBzck燋.>(ݟ2"["L)Zv:W!LwnYqƒ]L7����������^c 7S���������7sO'>˭cGo3=N!G*K<L߫إ,GLLb0V!-GO' 2gLIqP}}ih)}5/DMk(si<ي#B"w@>8Y&p ĽR[?QJ^xPsOeTdag2VSR%˔U%i\uS^?p}'~_zr��ӎ_(�`ƫ:Hq7;:%:f.ʛOǮﹲSmKmEf cG#K(,|\vYēS^ 6u`# u9+6wNIC&hAF  GX DAm6^4_˔1ޛi5}[{oe& ���������`/߭ٳ߾}My���������͂lլ3�"-43Fdv\W R*y>†~p8ADdüc&J}PRX,ǡcH6ks$x-s=<Nkxrp~ZrW}GO|[ 2N{h\b)}jbd9r)[oz]~T���o��xdI dYpEbQ,!EVIq~81IXWZ^в<7A&B\1YEl֏@}Al8doo[ v뗕r Sk9ҽEH$'A |(8_J/ކ=_j>9Eo]rjH;}f׭uwl���������ˀ2@N��������p9g|GUz6Pl0fEG`iO(,vk~p"2 ;,s Y;"s^Y1*֮ Ų2ađMS1_.xC#&7))9%'f-իܧ.Tso;kH%-ʍfd&㺝޴qך�i9�f.^y :CJ _j eS%CfJ `,9_ .!3M1xBjh;4rד6U$#4ߤ7AϽިWufbDZIcm݉RLbr Jk3׈/ '*޸l+ _jg2xDTO_Y7|FS9���������^ r ���������V,=Gڔ%FtZr% QT ] ocec 3HtN-8+.&BP>~&&K#_'ŘmHkGhWdStvK)QޞT716ل8d"czL\YX?~nt ��L� qE3mB9QK \h6}b\-'vJvSoX|/ǣ싔J ʫ͝Wxԛ_S>;A)Aص.Y}slT&Ф9TCL YP,EJ&Ii5R~!`ס4FʅCPsoŔ^?WsfŇsˊ3z2g���������bBc'''7Ny���������sO'>˭cG' Ub<7�?޾o ej�#KAbNQQe`1K,M1$֥h,↌MD̚_<i'42D́^ǒO˸O dkT۽Ms,%,3SbRATO)Ŵ%4c|BMnb7h/zS.Z ߜ\Uᔙ'e烏=i&�0-y%�ilF{H!67.PIZ agRV,n%TxAֶ"R nozM 9oOյe:n$ MbISH{ryv_s&&Zc u6>/6k3m(Lޱ屟tO{î.���������� sp)���������v|V:shnE 9I&?ˑwlPh66R )z< *됑VX]<VM[+oĢ1'=4R<9J=G-"SY)>Q(6&9u&*"P墦wmݱ޸z]`&�0u�ӊ/~\paze:Gțo&cFsڝt:<T?#;Nv& Ii(U6 ABH1]XUJ}0ߊT,Lxy¬sDBLI>Q.l~Z$zkc'K8g&+cfS���������9e��������}9ktޕ_7zs(&L"QNYtP~5,/:?NI_m?lCsW)0vGd1x]ɣ{2ϐDOh9f6L ;N̸#fEG:mia%eҷ\3;{ލK?�`R0=xG\9T²i!;AKGlIlL4y&7Ē~<!ؾrSv $6,^JQmBWS3y=9R5`uv\ViSn*~y\C| R�s߽*Q>4kj/m/@o:S sQ&nJcSwR b1AԿ<+Ͻo1���������!#pLq9m8rrrt��������� 7/?7wl_[o8%`ʁ8b[Td`�}Xryد .k"c`R,2réN<ZRbáy,u:vsbav-1x&;ǧב@5,,uҀ:Ce bCLӯC cdCY;<}󬟟 qK?փ?4 �E�4_4c';3R >!HYTu'1MMuՉzM*c HdːCd=#@T VrGZ7)v(MN\1ցԷime+͵<J/#~Ugu3.5If_/Ad3 ̲f bu/gPTYvrsW-t���������`AS���������/2Y:X1.J~ 0ᲱY ~P\)6'^V ˺GYF$!%`A]^u-lb1'9sNzwU<*g7џ &5kMQ2h& qs_u/O>;kf3s�gq �Ut7Vۧc\VXe T&]7OV|Fp{0!!%2RG@S6el<'ͦ`ʵ '뾮!_;k&׿YL %o_'GF3. #Y"czL($֘ͬ3tC+9^S;=MW_72���������r 7S���������/?[5댓&adCY1~x~!]%Dv%"L<`xBSyذn[UsF̥,gF:tX nF'g1E?.X2H !oĤ阵h8n6/Oǽw\477eqS˛1ס\i~ߵu][ �灜4K_4;Km(;| o'ҵY[H~<FzJ/ni{_4 7!kd1K2HGd~~FņeM0_o鉐}10mާ@ *?F`m B/o<D{q2i&:Kmr?S/<̮['X����������S)���������9FO?_7z9JX8^v\.|ג1l){E*/c>y!bQi1D_3k2mzmAMD\a[{%v- 2_Rb1#ːR)v,*l2lve`bM}3EJHJ-:L팉{7.j(�`+ �Wx婇C+考& ,P`U3XVYYt6 i85 t׼<LBf=كlj9[mGz[ak/Ցj/y0k"Lo"EY}ggѦ<oV;✴m?S7#"jfYlsЗ]wdߍNYXO_Y7|FB����������S)���������.bi'|x:(, ;JD!G ~"5y] WtnFx^x)YiCוvK\Xb%E(38n'̐PbE<^sS̟(f) 9onbܘ5qqcҎ!(/IF#XB.D%jA֭E.NnaX�>A/1V8oBo9mZΎ2(ok"[(B l! lBļOnӖc zy-ۍewr~Rj9؆(ZEֆfE![>]#l&eG);Mج_9z%+bm;R6N^\[t+[~'sˊ3zz���������� 1!cb˱<���������`g扟N|[ǎxK3N3*B!Hat&zd%�d2 -G>� :!\(tYCçxr$&C&bt<[ ʓqyYLQs1bR;" wJ9>P["n)6Cu9)7g9C-D[M~O0C2qO)7@)'٩ɡ sp8U?W�Sx�!戫vz'e5ۆo4+v h's[n=xe#e^SN{" ?咾i<W q�� �IDAT+>BBٰ$/ <a_EDF5-z]3kdBs\*dFC|xf_T|>\SiWgI7-Oty]���������0@S���������0]Yp۟uƉg6bD.bNø:n\<nfa1}t2] 9.j1s23(aD!̴Ҝrdܝ'نD̟^B2,؉yvbn lѯDnyҟPZ4!׀uLvb7]ںciֻBj��=� /Y_,E&޺hK jl.b@ӟ`y\j l<yEzCPb({8D*F vOEPָ!9)u) c뤿D8M[oJlY/K^Rz_"ɧu.���������4�rp9���������ә;?=㺾Jo*AR  bAmLxd2Y3a&cMH**{%VqWZVh1cUcL6i֤RH,"ˋSQZ ɄeV2cƜ5s哨X攨b+a٭ GMC`uI~/eȤc7Y;w{Z3A�%`9Vw쩧D(̥?2Õorj;L+4蟩&yIeפ}ʒKSlJAhody]lϙ$"jdCiP 1EMK`i 5zN}ߛ&}\`65S=c\Zi=T_ևmFևV=€QlĩEgt{_P<lYT?}/_+羿'!���������iBrp266v>���������<'^|o_|׿ ":.y& O@=6$Ń$x1^i*\6Qd#] J=g8g;F~h &AŜy;" rPˆ#O}$rʱ82^L+qx<r^_bJ6>~*ω $2V@i;Ο#}󬟟EG|'z��9!uo_4c7>m Ź|C\4uAnp6 MjB8:!~c {S]LcX)MXt5 ,*vvr߳7bV̢g'HW1Zy5ɍO5esb_|hvޱN *ќaKz�XyG. L0ĽN>͇���������`9e���������@s#?Wo=^~s+Tb>r(V"*)P!BTyfGbqT2J̕7.Je .Yh؃U9ΤXbeOQ%蹒K+X1e,M ҢRELBI77_ 3p@F\GLXSB PC<yN8羓z$�k�^W}cǟ~:-#%,pc\g͖BlRiח^|ba7S!9o&q}؈MrZ.ڤΌ"u<6uT0jSFR~:+n[OrI�gb%sWQ[J)[X_{m|ޱѧoZgذ����������@~l 'gϾ~4���������eլiKX|&ލtlʖ"`qw2.v,h`'=Fĝ=vLצwfb"&hEK)y}kT'fA b|ǗαNʭ덲NLuIC\:mUvO|ڛVoU�/0�`ob%kt֒% 6ȶ/1cEncRk .Ibd% G5z'6vFÀz -g9697vfv zi#:|iSy/DU0c_, 6nK/6jlՁ̗G% }j2_W����������Ls 7S����������|>ѷ^yucG͞CдL45ٸҒ)DA 1%E=dYeJ1H*\‰ g-1x2N΁/^~y@1~y k$3Bqe<Hm<"l1Ji-/NhIydġgP{̢Ct62^>sT$\rJ?3v7i{^K��r �Ca<u=Z=bWJiZ'CA)}+p冧^RT ٰu87fY'A?J^޸҉ gnE18"ʆbdǎ7県*#Y RuR0716R2)HM+e]Ts=MAU=3J3Q~~&+wʈq5o"����������rp9���������`0sW\x .]fI0%bR]cT",8pI%%nnji@bxTū!R^KmHQm4*O $8"( "n`6t%2VdK0ID+_)Uׯ*.N^_?[ f��{j�^cf_4c?ɑ^D.fA$c, i# Ebvx@t3n/ybf3o`|+~4fo/eh<5ͱp6D#5S:MmOQ^ \Br_*8kl1Q7[yO&0{&^Ο|ze����������9e���������ʘKC'2&,4rBx/RQJޠRHD ElWK$\i?4Ar]+7\'$ENS#2.󛳋0fJlkT|[ЬDd'1 a&U4RQ$ddRS쟼Hĝu'5_[3q��q7VpNy6|H:&VfE -Oz2Ӕ zA>eCl::Q6|s@m蔁Hz^}ᤌfAzp:R~X/n򂰕tRfZq搵ψS56s2#qq-d 2ޱѧo<p.34����������`2@N���������XpY5Ap,I2\rhΛ6{*LLlmGHrêյAĖE+oX4G3WFK+J._rʤztԥb}5gI*%QqaHE UrNUЀev̢'kz]~��{S�8k;ϏUDL )lRHJ)l#Z7N捜%*Y%ΌA|+M\7@rWI*YkjW(i릜}u :7;";L%u]9I3CPU7B8_ ئTPē/mjnݰ7?jG2_0zc?cf3����������) ���������_Ι?:ʋ=j WA!k2fER4b5CD闺9^[TZ`pÃ+Zd1nz89%[Jֽd\~8\)dڄ"%G\Q~MTs.{KfZђ +_zZ<ד^Y__XsÛ6.z9�xͰq� ԱX8@a+6UK+ZPYL؇zW�DYF&*IKcRCe3I +9}ǯ#X/s2BٸE:35TҚSfu='uڗc.e޲Mb_Qsx-tQPL/ӜD樹bz{֯~e7 ����������{rp9���������Wg O{ˇ/\聣A!h1P5& *BfSVR.JkDOg!ދ!,$6G9^LMF INR͕(kU=:5 *֭dYi$8M\o%="yIx-xɖEw?~=l �xq>5��I^E3fydWJ1No61D LuORFIm I$y!o9o]ڢMuׁmNff، sa")*ŠXmV̟4Z`2Q(*k79W厲&Pږ-;lC~A-0oQfw2%f. ����������b 7S����������쇗C'O@r ;#Dc#{hrC &lܴm)aE,+2GWeFʉ$ep?퍑Z+|bA$A9H2Za*u䱥:eܜ.kŏ c2Ԋ2<={J4ڔQS)n=7kk�5r �!})̆dB=7S :5`.I#:Ȋ-žċ +P#lMLPہ$ރgZ36k2yȹJY<<k ړp 0;&&6�)3f!FLT򌞻Nq!7_:"TBؽcc?k.~ ~����������r ���������ǂt8l"ZHJ,BzAfL)aDʉAbB ɘ>W1`Z!8%^ܝnJYe֠qqN ;,4RHr ],Ut=^dm/ ѶTmւ +?wmݱ{~iֻ�k)��}t%Lo�X *"7E,( Y&R&J93t:f/ 6KyF܅Tcv̪bϭr=!\) Kunx޾VX*}AĘQ<v#ת=Ji$R:Jbţ́^v_Ԅ0Q8_?cfb����������Wrp9���������sλF='R\(0!ARƓKDGP{JrYhkؾxREV+EƼl>|< D?0d\TRL-t=rGd016du Frb:iMoڸ �׊ �uq+O=+c\V;%CL{ϑeCeEQQ$ɓ҂ޘ2H|]@Oyɬ xQq}(R_)yGƝ~;-YRLݎ&ܜص5k>"|!ɑbL޺sV>elqYIkGLߪQe<v����������@Nn ����������z8CrG~jу&UaNByC\_/ĖTg{\iˋRl좓ME6"̆*_?غ +-/ ӛ�v=d[~sb sUӧ38Aꨣ ҎcRĖT[;z7s˦+n`�kiόfMz…o9}) ZLtrl9+;,+MF*\$]ٚǣW%0q,&eЯ;QAE=7YTVμzF3t (X_Rg꟞<^Ӫ1\)fzD/U~2!{ـYKu9I<Gn*=H'y<_ċ->|!!����������o&pLq9fr8rrrt���������W1:va/BUk&39=Z2<لbgrH>$M|]22Ę2ILiXCfVanZ*LB(1gr.>\lK-@{ߛ9Bz4 \\)qAK\%Zc5VEԯHs*29?8]qwOO>5�8��&oyhY>{,mO` !%*cFُVPHj舋D&xOl+ff")1[yٜ+ϳ rP΅7~w#8-vn (]Frv/+KEfAG=7M-E/Zorudb|5? L����������USdN���������Ͱ?]5Ϣ28ۈDH0댺�alA:PgS)= rɅJWqkbj6VV Ӓ7w:dxNG\dQuyaJrLdk93gyJf.x+ 2^[-Z"c|a"2>>gTnr'w[z3�W �0->x%[LdèEY$$c:WRuh%g r0 \&Яs L !ص5߹KQFt`v$j iAhcCA$5f|'HD^!אuγT֕").EBj>#xx]O+vf����������Urp9���������7Qw=zq}I5-ðt~\ƁȺ<ٕ'ÔCC+"SWiƪe71 źkzy[>_b㾝L-Ks"ϽԒɽ(B^SZxS$S &zBnlbM \Roί۹ibƥW%��^e;婇bpDI)\ Ϥ|^:CgBn<Obl;ZQrA0cdy<Oć~dA=+q1豫zsɄjWY:e`љRl3AJ"^xRZ!z-7sFH2_XS ¼tQd}>zj{���������_S)����������yNZ.]jуI* mJՔ4QbxPk%hxpyh0}YHd6-tl: ӨLlxHjlmJȤ"/<◱@D"vQXC+qH&]G}'t'xsA+:ź[6] �J37coyz/P[>+%O-2Xв3 o;YbSn`Bbk{Y>7PA|Eɒ3Y!H!;eB82 +:gGYVK:n#I$bY&W%X5y8cZ<ʲ߲W5xag^8o>d:����������~1.,'cccONNn����������dG:n;Ⱇf0g4xx\[Dꐳ&'(1"=ĚeY}IJ%X4p�� �IDATNPR}63#dߔ�γ'Y“/rLcbJ&)Vy\\W~,+ztY|9x > h-ӊwL7':K\tw_蔙'wz�=�yoϛ˔Ma32Ffyc),eMZIV"Bx֊RGXl^)=Fb21%|la [R3Z~ lF\yE6^Q5+Т댭Joe6GPJ6k_Fdy|\nh7EL|>WOg7]s3le����������F@S����������^{U<YTLd$ص y&ɀ³- {T[rL0Rt,hblݴJ3 !u>EMOo=E;z|1PZ-g$q6ÍS`U tp˳No͆u۶??Y'[|9s���7\fOM:SKF!ϰ6F0PξB-=A(& !dąR3 9l˵v5̎1F-*NU6ɦZT=|CfeDpg1oT]q_qu* f}4,y_<u~kne����������7r ���������Qw׍}q]_ńya~:eU20Kce%H^X)^r.XͼϜ4N+O%i$#v+㴗˺}FșJ:[ ]<Kçy+eљdd?}/x"'xQVn-Qf/qĽ^֜�";�x+O;K1"Z󇌤O)~.], siL #$!ףQO3I!V WYAoH,Alxg1df>+}di+suj}: Rʊ>CoK6ŢHs/qݕBZJY3PxjkK+z͓+zjٻo^}FS����������xM2@N���������ػ8CKN9ҥCzTTcÇ=qEKă=I$^:3JYQr(L"3DY'(eqaKWM[1@б<ZMs$GeOˆwMCk1{P-oQ$-�{dRTe_`� �񺷟7cW}3#EmQ:x.`=\ѪK�lI$oOV[ :VE0$yHu|!mF<2 JOAd!QGIM(3pqH^t֞T:gHu @9Fzה~)";|=Zf^sERg].O ;}~| ����������W9e���������w2^z<t^&N/P]@zsPŸKl-,P"H3Od2}9/.Xx&%̉>]/d+}i҂wT+i (xx@nѕE-2oEii뒣u:e+qv?sk/a�s�9X9rN@˴9,?o;/ _Zl32,'A$ vrLFq,s^Vb LAHzR{% Y4r3Q9O� U7.E&(%fj;JBOZ#ZTVZ鯿ݨ_+- w`޹ѧn]܀&���������kr ���������͂>j֙'#Ƹ |PK%ac2ޑr"~OİU$cKl*<͋+k.D^"bSŹҞKK*dc'<I:/eR A -ߺ].vd޺L'.+$Q7;.s]?F$^K9NwO|u ��:kn.eݺ-SEJZ, eVlדWK-5cWTВIAlԢ'Jf`i6 dJ'a,KX];O%;mԺ͏eʨ6zTMX[bRN>J^kƳP#gFYSJ4j+ĺo.f3m����������`rp9���������`s揞v=jŒ DG3Y5�<CSAnouu2;sa}2r_ 2q$xBADK5~i)]rFe)yZѵ ]֢3zlj^ %N:MKxLݶDĦ.~}n\zZ�@�g梕~MG9Ds˧q`W@61R%l[ō|Q·}Ђ577 f7# E귮K 0jփ^VqaEvq̞KX_vrn"ŌϹ{s(L_xl+M|i@Pkz꟟{_L ����������WB8&Ƹ2?99q���������3?ˏPï?7t'XRYVzu?L=Y;|}?V2ǃKX#-JiO n;^#":3k\,~Î$x<Z$ͭ^+=.پl[;t]βk>&2[Jo>OB)od}fq؛K7v̗~��)�(^fMW0ow?P(oJD yF Fo@)[6 %OV+Rl@lPiH&zSeLك6l @_X#`7e×CzF5|^٨y , oYWMo1i*w]Ϗˍ/?-<//Oܷao_:o>D����������`(2@N���������vn~tv4cFCѱI / KeX<ŔR"3yoY}YHe*͊~}gڎ$3l)J<1y7UY)4ru{RE#/ݞ|@Ɵk-r^~99VbњrڋZA\ tΉ'P]o40q~MoѲ/?`b(-)&>άq?8Z`,_L)X$Y`"F ]Uw:VF&Ty鈾X [f -CRkI OI}Sfl7?* rCl'28uYp$Rߛ>1N\{ŝuo؛wly_Z_ls:����������WSUuXdo߾<���������� # n̪Ygx6ZHICƅqk{"2㇗:qBTu<2 eD>`۫T*/T)],M?3$hx1RǪn ml ¢2sHY?̲=*ZhE,lۑV> =ςgDwmݱ~i6`:4�05G/>^?U-S{n$_P9 )gԗ@^.Xy-59_o6uJ8jlԇ~#iL2bk,iFjfwFĽ+HkW7"3D3mcj*sx^( *2g4O?k7)�����������Cr ���������psUt g~AU+_Qlm$rZL&w3cl]Lxӗ,xHc+p/8B-ȔFs[ jH6|b@t裭Gel-3N۽tFME׵z(}xs~&ݸ�Sfy+O{%F(2yRE gPA;fM5kDҮ5r/QE5cS6RuwGKOGbJ SmYFOoxyikx罟2t^#lMR1n̽AΧXfܝ&EMsGWn$����������0@Nn ����������]qi'\zF:TK*"J[>Աk eL)Mho#"tM7|A~llF4ȲuGg " 3+zr KF!(6#|U\/m &ηhp[n_w7�0Mp~ yft'G{(2%>dupI}P *m~þ|ubl:tD!B0uԵ|ET]r$d-V(wHo(%ML)k@SWT"Z)WIϞT&ėE0ece/ه9䂊6_tE$&"y O\s'L'���������P9e���������o1ayq+XWBԱD\b)^=n\0}W%4<=&|m"#et{w" E-!gh`<!ץJ)mYVx5|<l2'VHdo)q!ֿ<[#4F/?O{+] &?sP6#,OD._y dzMBfZK=˪"ֶ'tT2c_Tb D̹C(mZó! z{I%zi٬2SNu'k 1>cۣOx]f����������`h2@N���������7YpgV:ㄳ# l7qo:0H<Zŝ &Тd!b8i=Ll]I#R +BHyb3|HÖk ř|EljȈ/2xOf,mu9umH*᛹Q9>=]Dch[Kݵ3P�Q̟ �U_|~"uBf2<3t 857]WH^]a"e(OiC*R$Olْ;dTQK_J6E̳!R^E57 V u%yІOZC 2u͉,*>2yAwxܮ?;nvz ����������) ���������}Ι?:׍u$84'?,^duҵNΑLHī8:JQtmeD&y]|d82 ޫ(Sck;n3ع*">͖~Bm)XTJ/B*1%IغvN^Y<yXYu;7=ik�ӀO�f.Zy!~hp6uk)PYk"b#uRIAD <K6!F ^$<k xυ"6qE\^^Xz8O)jl>AL#{ %P.cұ XdFU$Ɓq0Rc7q֎bl>9P|}'GuI zחh����������3@Nn ����������bi'^zF:"-AeAǮzRJlrJu<n-$T{ (R LELpLT6~} tx?|[ρ?ouK-9/e(ZH"6]Sk+_0mx%KL+F L|f=aw׻t=w7B�Ct`_ef>p޻E#/P+&о/L ?L[!Rh~K #h3Uȕ'I*TN W8="6r{!PMWr"%1TU)J:6%y3|@ԉPx;bZG!n]$5?lC3;1ŜN,i6l '͇^���������$pLq9Vo8rrrt���������}ou^qCBD+!hMNmC8|#T >.#d'븴ck"6\-JncЁ݃*G3) B *եe NfrZIzOLv(k#i gNQ1J`IeC]uA5RSf<'缓z$b?#5o^L)JP:Rno-Tby nR$FԦd{}ͤ2Q(dܰY8LR.-Xr\a2Lk.`ʳ˄!ף&>!oTKcSZU{DyBV:q)^FN܋M:ϠSf|jǶGkN/����������@S���������� n̪Ygx6ZhBΚ�}U*GdPVe ,lD!ljLD9$rbPFZirl%2J`"Ej;@Qsa΍}?(4{s`qDaO|uݵ �CLo'�CȬY<:u"(Aebٔt@)J'UǪ(okQGDV^1gy>tذSQ4/>xHQٲs ysfא[\)u㶞 #D+|Ӭ"vc^}zmn<>?_7}����������4S)����������ӓΙ?:]7zshaR:fj^<<%-Dĥوicdlc~M=Ȣ2(FԭD2_@?K&2zޭ.b!B-wt\{v[cHfaWqV4yelO]㾇7{W5`Hq~>f.Zyع\͑,(d#&hDjIп^ޕv"bYo\֞jɄbMH۟Z-{bFҸvLN;W#1?FΧ?09f!buKA-kmZ**EJuefl)z'is<ʚ_F3����������`Z�9e���������0bi'\zF:Tň,QDyP>tVi +֒U%L!ܞ(Hrzs{4}e̼M>:4su۾ bkDq~m_a1eL){Ǣ8TIeL;<H,pD(qܲ/n0�0d � 3<oơ]jGEQL*L(vJR|KrC_`2bY'GuAER"OHbRF3(ȗT@Q|LXaU:-RSElX[ޗ:c޼55zezYTt,K76э'QwOM0zGR̀C|N/Mܻa "�� �IDAT>a����������L+ 7S����������@._܍ !,ԂHYNTAd|d#)1R< ~ͤj�+¤&-ڲb&N$DuΛ }-_&;Vzq2_3xruISpWHvIČ s <Bj~~_3@�R�r?:rio%  I v#n8PN &D#9hC#צZ->9H(,c'?-xK_Pb 0uv/FcXn57<en𵛢(&3OLQבA7"Ì]i<9K:_޾ѧx]"����������0퀜2@N����������]j'M!,L+ݯHģZ r>v"zAJ=EXu;I%U"X.۬-OQ Rm14\J_uJ}LxRXPDt:̢,;XbYJ>癌U9}-#ɭ۷~ as\,!Te%n4bc><N8!Dkxfwyd,cQBJ,UDP})jF׫h! $g^Jt5WFX("EtwغjЮO61b/ rD&z󻞚>u ����������@Nn �����������}+_7zsJkQEkJH᯵bX"*,W+R) {M%_M6I&̕)iI |eXr(YVx {~.I)";n5=#b-YMRVI?kwAZuxVL`MlڸtZ(�{1c�؋hKchY pi"�Zzr^ :zxB⃑gѢBj?/}; eؒh҉zW'CL˵o_3̆6[%̱ M=3_yTN`{Pdӫtfj]O^c:aC[c18SLNh׷!}t���������ir ����������h->K/cMBhJXP#"@id,2B73x"W2^\h*S2 &21=TR2Ą2:xK4:rz'AypkJDƦa.L/D;vn{ׯ={-s�{!, 9f>` #/R3tC+!눊EhcL AL}U_kOe22A*28iOl^kd"^_͗%1[8v{-Ʌh62F">.2jX5m<l~lM|Bιfg6k+ƒb}zy⾍O|dg4����������;&Ƹs1?99q����������莇?[G8ןx!Xbx<{O#ӡ+N,~#_rEl/%Ӝr)-yudy"P( viOoOYT|b^-H<?<!͵ovITdrMO5׉NJ'udasB8es x;C[vn4? �?:ry2+>yc"ܵMVRRb28>MfRAqɬ$w#YP1ަ>mr/4F.ĝ t躵a(o*]`h֏|8kob*u%UErM,<r؃**3Ċ߃M׭~/6߹L ����������� dNn9����������R'fy;(P3YHGc3!$ J)^*YD}$ԙ01O5"ǒ5&O8^e 2P,SP%W 7sc }Kq~v?  5xOS_߷!.d۲ HTb9sO|/vL' h-5w/>?Pe6xDt Y= RVZ$q$QYMѪKG1n;=ȴ!P=ڔƒ˖c}IEZ< ?'ƼsjeDe~!*z/r:]h5ԻB6hC3|}eOݱvi�����������) ����������siWﺱgGD `}%Nce鄚ضh +YF.4 +BK/{<I8笤 .X1EAibmD\?8U{mIc>Ḙ3<<iZdbs'4\ 1bI3D;(4}( ȦKW555c梕K1"Zf>gg5/h1\`QN`6$dMcE*&C9ry9Ẹӂk̿WTם^7Np9/l,1UĺwmGk.sRe֟Dvhv97~dc2xw=7_/Y;������������9e����������~NZ`~R XPL@Td\Ȍ"b+')ЍcRYJ!D<ÈL o`1ק{YR8M-ߨxT"!vxH mH:/bwq=tfnv+v8oMW];�Vз7㐥>Y<@"W)#eA ^@,ZKF.XH_LB.aD5$PpzJkRkBi$'ۉHc)DH'|=XreGY]ykwbwMPq_'u]1ܻ'/����������+�9e����������-.=v.jIE(Dq|BxwqhEn-(""ؑڍRbҁH2ZifIvoVH@toVNv˜Bރ3my%4I7|F%͚Baєkƶ]bs/�0.7̑#ǟV "QeAE"b741iBJr2XSH/VҧcTrry)Fkx=Ԍ]*b}Bl"xPYQzIHC&E[Oֻzr0RCwlϿ|ſ|sn�޻UNF{hh.!t=(`+> Z<V1n4!mu5A: -$(H"(!ۼ3ǭc^s%*^ks͵?���������!S)����������{oZx'p% RZ!s(Υb&rv)�z\$,vy"Kp$0QIX!цnQi|+k7 $%^R?[f!GLR  b~<v{.*9 ³-֌ǫȨJTʶtt^<h, �{ ^Ozg_87"h٤'+"y FfTR91FHҜz_a^*#<\{ZE31+/@f<tT JhKպ@f^,~#LJC�g0#<O@ mk虸eӯ޼k_O����������-@N����������oǟ_v{LˢRbbӢIqӏqnTR,T2)$6$)*:J[79+MOZX9XTF MG<<\cf0%.㬼n~=c>]Lme󫮢&L/& \įS2 ~\x)qC+,%ugL!3?RJd?E031N5!rF g1P-M @xb-7RT+'(nP"(R׋EIi }Ǡ1)qxf BdbuKgbsǖG߸����������9����������jNӧ&2K*&Re!Ŏ)D%T(1DQG)/[g<mLyL;BͪXFO'r,*M2}-T 1m>ͦ $9t+% f9*YD{/;2-AiI_orm+KXxTm{CϜ=ya`)NOB/ FWLS<DeٸD|OzJ!Wi)Hݔ6KSgbR5פ8P',(3ͩ6² 4_:浑I_NA !H#rmςnO*}l=煷eUމLAq5) ,96m}yO`�����������x !L1^5O]~����������xذr/;#~zNu A\Iesl&˶B*z'ݺ=ⱉJOY3GGk.48n=4&.N,2^T7Bq?n)\QƘvۍ&{I22u]!:ND^#Z *&_u/Yqj:SO/V/M� _|s'͜3:Z6LuH&{ՙєAD R_TId!iL6e%נDbMYDx*#'yɬ/dfOYjܤv$B6 ^C>09טIlA#z̩rRȶqhh'6A;Evώ~ٵa_-]Wo\L �����������dNo9����������ݜE 9sbJ`}*E=.A<Dm@v*'(b,$*{K`q}1EbXD[^WuŊ0Ll:sǽcz])x5KչRsTd>3X̔ea{g2ؾx9^:4eEq34+g,]/Zl5x W#�o!\~˜‹n֓\%'4 YV&=S/6= QDi E%~s!'u%"ulϲfWA8:C^GOkW-dJs#+_"RɩhvXq"חeLP NspF–эo۵O)����������9����������S/8~;eQՉO:!AFK^U»seECEula;*I8,—E Ei.SՇڊܟ`dzMm۱QIlQErd*I4ecRn׋nRY!H&b]nX?xi ߋ#g_=c+&L c`A p͠3ohrcQ򂽕'AS;d5g.-%|ށ #/k c]!YIuaLnvDz0f}ݽL?0{?Dc2A`Rs(HJ(خ\u2:3Tڱn7m����������`/�9����������&ӯ{~'NDfiDdaYQH|ϫs,+^vEQ"ȉb a<S<=X l}k9OVzl2fJlPu#^݉.̬Gb,… |&7EADފzъ&aveEj8E).b~_2{bh�~=s-uĻCDd֛ )[4JKY9!*!m2>u?Ij Œ7*\ml\ESnW*Gɏ*\K)>6TF?/Nd[ItNj#š"oAs:?"(IK+@-t]J"G^.l�����������o#S)����������]5ċ?|B+pBme$2Q%\M4"N9*ҟ\X#)xRюSm%lL9]G9MGrI{j]0Xdl&8x Y酋!Hӥ)c yhxMxM`GS-|<suOx{os3Kwo_|s㦝0)H|i@E_tPe4.}�v`T¾w+fP)eDŽڐchfEALB#| v=u63^LtWJ DMm2̦ɽ_gFr5#MvRJ#2s;͕6�����������{) ����������Nr޽},DK:ī:@åkMq%v`(lf/1BHԶW+#:%]ַ$aHq6H eHRzxsh\^UT3/Y^תB[޴vڧgڇWn5oOz!g]870JT6ٗt2{"(t3u"D] oX~lLE`X:5)g_>*ήRJZ摢V/P 8-g<T"VJ\G̜e'=ց 8j/b޿f~{kUW̾"赳RNX]eto߻ƅ�����������mrJ9����������LC߷0x1'*9>/E, (~h|cR.)eءe(|CΣv&)E[_ݞ~Ǻ'әL<BJ2&<2 Efl*Rr!9LI: %r 1p9peMēOE]&dTq9hbK7</1'-/�#g_=c+ %f% U}.KFLil¤ MFPbFP=y #/̒ĎwWF(}zY\ DGD/%ẈoOV <m!3^{/|;\>'_N!{~e~бJ qs|lN 3k׎͏u/o����������@N���������� \5韾h(Ya1 E*.,>/R(rHyM&Q,xq%̖-ӄϘt\|F<)dq@RVFCjUY_+/sAuL!ݧ/r8sbs\i3&*V?{V|�=n7�zI[x]c 擺髯kh-z!yWŲp E.xN>ǎ@a>j#ҐV¾=&ceIkٵQzx굛$$-x~ U@&5o+xM)^ @UKBٶz/Z��������/�� �IDAT���C@No ����������}zi2jV<NL BBL23B $NBW\9C;qɯR jr} '2z˶xS!CڝugǺK%X &UF><90\g.:+ �zj5/%v-5a".דz.67Tvn}nfW聽B_|s͜3[oya4X"a#$b/_#(Fp92RK7$n!>C/]r.H< *ZJѲ±'3.[VU(NYU^p#.b#%$-Yǭ5}Q$!@h]g|u_/7c&�����������@No ����������}]3N`WPD&ȑO"r~7[dMW"wIb)ѣ^)z&rTBN#[uFP"wش!8elg~xLcp2x(d}F*Q=)F,SupSI~ۗÛnXMKoZlf`"0[rօ_ؠCq},2 v$uמde]<˴f5k6BEeҾ*D&nBtV%t1Z'I \Դ>dŔ6OH'rLy/aD#g=$Zboi A^aVĉ 8w?\1^et^,5������������S)����������`_w~m)',)y,,XFu /*G%Tcv *ԩ/`ḍ:l=+xxz%b2Je Z2h'4R)L۲> >ULԴȤ->BJqTWK-,3&_cݴ, � )qG>;cϯ@DLm'CGQc),!.h7]`}<u3qh!@ciw HhIe.6pk~FI^"R)}!& wM\·<֦y7c^l*Z;R_B \:V~1iT?VtJ?ޚu;<K2�����������؇@N����������.<pḡ cJ4ќL9gIxKȑKR{YL9~6ʹه{YXsYCJfVJhE)% 5 ٵr wdZ<!G|H'&Id!BaR.1gtv9e]Ο<·̤H xzI󮻮}ıb0SCt"k]%Rl& OtBY*Q˰ҮK#:e'I^ގ"D}"ɯ<>V;EF gs4!qQ(ʑH=(r2/@,+PLz8ן"T3mc^Y<o����������� S)����������8WΛ?DCy'a,65؉sDA@m;&ﵡ*]l->Q#{qBy"l)bl|Q:eN:Q2Ό"/>~gZ&27g~Xnҝٺ[p T}W6sf'S<0_VeB)_먅_ngCX87הAE (-6" Gv>_iOK_O.XX])xuXAH#ip8&2*o݂!Jl^WOJ|u&$XfA�����������G@N����������ȹ޸3O9g,J>FB> ]CD\*nG}s9D/|\E0Ia6KNq)GeB~owM8fYc"JsI&S _/=]6BL 4m:+cZ w9V׭ꨬ*\u^zܴvJĻL8-s>kZA%؞jA^LM"^BĞoTK\2m +6*r9FD~\ 3vJ Uٹل !.x"Sv-1zV-9N$0|OtTI͠y-,$D\6!q^JWT7mtm׼����������@9����������?kp<cQY6ND| OE;WDULs|/eص7:ǣ*KYLRrLza+G4q J[HW_ehE7OOFmvBT\kʮ\YkUYTX=޴L�+pϜ:W^E Nی#idЁDuNv/P/sŞdSCf5R9&y!1!#K({"VY60(,k"ibD|}As2Ř!KF\0_j#rLB!"O&JFR۱ܶU͏so\O= ����������> r ����������wNriͅ M84pr|233*,H(xA%M${ctWL?x >N8JqHRzxz{YQ|Ҽ|ͰfsbVEvk٬Ut])x҉޵sΟ=/!3p@}6¡gΞ48Gؒ)͂f>/,VАRH!$ƥŕV_ɮek)D72R"J"996T8#Vx/x{{6UN΄֋͟K$QVbfD-C}ʚ:l_bˋ-4K����������@9����������}O?QǓ'3KP~͑MB\J8Bمn:ݏQ Dԇ P:kTg 2Ȍ&FC&חq|AD)S|N-/{A6[^>Cy=ȚR)w-v~N�~1wNz$ج"{*`Ԅ  $nE'К.#ZBXtTJy$_PW7 #RXP?*:XZJ`y 8΢׵IPQQOvQ%-q7eA1Ϻr>2&�L1? y/;oFv_Y|U6����������@N����������~ƅǜu91Y"O?盌#!p+*>eЙ:v'p!at WvD$ġ"qPgK19cI>kv[f% Vd_Jf28U|j#9‹H+nXGoZ~Shë~Հ/e!g͝[ :bJdDs+_|gu$+gKc-G܂+34 АA浝ɸa2,/~3=O#=FE8n kh/-SX'%/]JP%#>V[Zb' 6@b; *l$r?#etz~}0�����������} r ����������zY~C}״Y%$%#\HW9)7M"WǨF(a(l$E.b1+GpE}@Kyx˅K9 , utdL[fV㵗ʛ=u*6$1RޓODuѥTD5K7<nZb:-%3&^pC&eKY8JYV,T:$ J(Z Pf RYED%-M^ MΫiVXER W|ٹvXWm3lE[VJ1K^ u-5w%cZ:ۼONf(oʵVծjw߲_Y����������� 7S����������)W9O_` hVRBF`\7J<GǶ]̡JNK4|踊 M'yTz#[ AX3+s.$ڍ"0LvgnĎ w/Ǫ2p$/xǚ$39XTmuW?{_pC{ns`3fOwu#}l8U '})Y,Yi Z/2ؤVZr o-R%%ΫfExbHmuӊC|cגSLլ5G C&8Y}k+k~k"2ЯB4 T~ceZ| ~˼C#[{l+-4����������`?rJ9����������+MOPZ1Ҭ=a$'1I-$l+I0.oD!L'Vjk$7CHf.%$'L="9F|qG)sI%ʌ&=O쐙I5xy]b{2'L+My/㲂^N;6my%_m678Y0w̙Da>|0AxpCҀ5C3XaE2.2L(l1y&1vlGO)vjPCe^WUTRd_RfS:5'q#וXXZ5om::LS2%sEsYA*t%rٵ~򍫖m2����������~r ����������88u{]gcݿZ)D#axңKxR-ml\1CxR' i=RMɞ M} (?.+As2s꾯xX$thiwߪl(em2BZ"⣣o1Xm<u28 ,GnXEk^ =NЗ8g]7)wS!LVAEʴu? Ps0_ y2E+fYR+#5 N O+KVY7U:nR1{^ 8yv-%'j 8ۊeijx9.&bIv[F7nk^pJ38�����������S 7S����������9x<x1'I*2> "AsTE'܇ DGR'xm6.H\%ReD$DLJBc>h kn#Q6O:ٿZ7t30$?=_p~s<>Ub,38\^bc-^b΀qA1ygg tЄ D4?MS �!_:W-+ŀPg-2Ȍ~$jdrǑ4e𲧤sm3~R}z5/+wPK8emTڋ[󭔎%#zs^`폾d[8M[ѿ/}Dݷl 6����������ρ@N����������*\9韹&L$ Li! BpV6т/ˏ{Lc2SeDn2K%cDtNH47j*rd(YC6ΕD9Hї"ZڨT&^?Z#8suۤdHcD<?PvU;r#<·Fm;c#?o8sϥq SԡӭfS!! 云J6|f P΅Ϋk;6]_ddmzx.2D!eb7uoTX&dRK?>)y3(s'M)Ԃ^εS'ۦ[[m*s: ~94Pl;2o 9Si+tS?*������������!1˰u�����������V>u?퇟|`hc=X@~`!^YO8"Jj78J:;I`!Y`uSxlvY_ b<|!24DMrPMiYPK=|9ŞBxuc,WK`K1eI<%%q$6c)WtIJԙZɧN Y +K}}ŔzI3gv20;I9 "!?$NsWo4v3x4㊃1EH \�cIgO7CZFa39^,.z\g!!XTA/\\97P~yE5k tW5!o_y 22S~ٵ`pFv_Ë/߸j&3t����������� 9A�����������sH(7:Κϑ -ԟdP<K 5>J&+ _<9l+LљNlh䵷cqNӴi2nȢ3㔌)bDE'm#Gfe=1FI݀*m ]w-Zʭ3W ا?y M9 /<=M@f UITI䍄5 }FȱJC R\D='gM$c刑s ~5ѡdަ[Rv-/I0-K9Hگro!vͼs<wu+ vTkG-JF–l|[y4����������8�@N����������03}KacNB ea kϯW-92g{(VF>*Kd6L# n*SϮ �}#Xԋ/7E}XyDK:f#oGJ1BBQOИyBX龯L|8//br?J*}ׯXʯ|{ɯVd�m+쓴Bߗ:+ RD#28?I<]Dg)mlX2H|/1=BRM3MHTF#XFβiZHcWJ+<3L)*):lUn58N[.n;HWKar Ӥ}ci:e$a$V;wl~_ 6������������rJ9�����������~ʧ.7q$n&O(ಆ~`Eԥ+8ΜҔńK& Ǜ=Idb{>nV5BnljjIK88II4m *M=]$�Ki7 EXY^kY4F-/,WΟ=OmyMA-S@}#]w]c k1乨 oy 0e7&.T8E ~Fϕ<!śym/umT=4b'-PY]VD^%5AJ}SL*!PdG)c(#}xb\嚬;5Kk\P<~������������9����������@3gy}ԢV4f}U0)EdEְqo+qXHX$ 9/+n .c<,-�%^W^Xe +鱚}ё,Hy%1>*.Rd5/?7J'61 S:1gxgo5\zm SL8}tǾti3g '!ȏ 2nc\xJM%* Y2\= $YI1"36z" ˸Af2<z}bGP!.v1XbDcQG0R2LK8b%#ז,6Z_Mb 럛f�� �IDATq1Avi`dϿ1򍫖m2������������9����������9},*/4e)J4Š.G<3xW+Dɬ6{ lj`_L%Z0QXb|⬏'=ގ7I37]1(ir\*QSR<nlLsobH*,kJ=)H j_ҪEË=jY`ZO0~xт9Cg_87V+'U9؜\ܰ7.xr[!׭,뷕8Ϥagj343vV,{ "NXrAϛ}G4=qMܢ̠C$4]cbVqIBþH5G%%)1yBk]+-6>p5JQ������������r �����������{1x<cI*y!=]E@*IL!UFDt^e݁g{,ԣ\=W(8y{V!QOPêǖlR𣄹C=t2何"Ȃ³kT=QPC'9"JeDŏAoHïXʯ,]/<mEk4邫fv7 L=uz[N 9�`7-Iunb^nW&ȃSi1&&O>{QG֫/: l^ZzB箧o$tTK"{b*AOY E$wUd+Bcroӵͅ52G1,{v݇0]l{^쫷x+[�����������!05x9'FGGc�����������/cͷzh׶1A^N4Cy_!,3C'8SS^-LĔC7,1œrJP?<6Fwȑbh52xhdP`~0y1-/ɔ)K]KuL=Vu BS?ƧΧ"ZH=iU8K>4{]ßc6\+"LwKDmS^Ǝ^Q\RS6#f:lbQzlVE elVN)AU2+s:cF=a,ccӧ1Byn=z)#"C6mwiNٿ,~voɳX[00}t�����������@O9A�����������~78×vˤ$L)<^̑N(c0mՎ~"#b=LF%[Dְ'Td WE*ޕK';QL:2ؑMtߺ>9m7εWNS&5/[L%*KL,+ R*|<ӊR0qKr{J{!keM+tgn5\zf!SgС|qf$C!@H7&7oM*_ .UKޜǹbRh)3ɞi:/nFѓ۬]?9ʚ/3!GEĎJ1W W!p^Rz^~6J*m_Yˑ]=qxV-d�����������v r �����������~GyCRCQdne-eYPr|#:"zwT[ ,:U&" #K8b1z҇Gyo\f'xq.^!y"_)YfbXcPC6I,>)+BP ¼u>Ek^*?-`0~:s9kܪي[ KRua1ŤpݞY"d ";BeST&72)UV 7#];o-z5h\^c1Z(Y"}]Ğuc:noYS}w?x=eo �����������@No �����������sg ~7w Dt=s9 Kz2̆b Qڶb+b0˥)\Plu;k$=2@hb!ct&Qar,vcqp,%c}T2k 8cOI4\yÇ6  bcO%=֜{6y>|U3&}vpip'6wdm6,|CjIȒZ:baRAM49SpYy%)Ƅa<Hmbt&7]rJ7ܔ^ʕfo!/s9{{yk@⋮\cm!re֪~Πʔy=B+nSo]?̾zˏWb �����������!L1^UO]~�����������o5z衸}ǚ#fL;5~BӸ䐳dy {^fbv1Jt\g'q.ZP~ "g\iG=FHCSts:1'KK*X4]- ȑoT`s5bbJ,ϴe@"v8%<'[KK-_N2qɈ/ Jtw9\xqdws6S@Nٛ@Ϝ=Ɨǟ~yq`'ѩ&:SE?pBo�DAk vf&3D ~:h,-Θ"ek~KV 1JTc>z/S Z8k~*W!yA82KLJ,&}_c&CMrjze11es+O`4�����������@N����������c;xO:ZE":1eH H%`xIrh)oe]9!%hdd1kHrNa|ޮ>o#vl3zs[|,j$p$Uxf;⽩"=Ց"rlR z}vgmWXsТ&:5Q/wU)mx8x :/_=n̙17A@Ec _ u.yk/)\YAIgl[,ufE:a|θ] Y*k3@y(Z`xkl)yzY^Y<{J0ccQaRmQzKG'QٱaZ|6������������VUUV?2e-�����������y~eg|""X4R iJ$$R(5`Qx8:Ԣ4#uyRi?Ya;&9|\9I:*Mql^#ZJRzCˆHQi0YtJL1b?g5o]w-Z[ͅr|2)tE rscc OBk/Soedx~ )xh'Sg =~CcOZ "H<5PFNHJC4ɁSƳDQWhSɹ۬$rܶ%yIR0/1Zn^WNfn]'A;Gho6nzk^{pJ�����������-@No �����������rg~_<cI*<J #^<9C#ԑhnx>/Ql(^^^_1Jq[.4I#Mu^gZ^+c1*ƛի(Eoܦo'LWǻ[%xV:bEVbkxn>N{YՏ=uמ[gvuo 1%7 L=4 %Szwb~lS)S>*deb繸<:u)͔ ]zS1xŠf�!g&\khyfq̗;Z9+I0=g>"VIד_.ZJo4)ʗwPk%ӑ(r~Lp9W|kK5BUGǟ0s<�����������-#05xV?zbttt�����������]wֲvm۾o4㉔b;M8Uo,Dfуg(ѡlLd S,e=!C>~l^ C"|K<eu>oxFiB /< ]#W΄4ISK*,_~oT(_1Iӝ7=Z*<X;;a)b9MUx/i<O<.CN?}amz Մ@Ϙ=igg͢7P8Ӌcqt 20R͠@/D> m=)$vFBdI'Ev/UeT1F.͢AX neMnXW 5OZkc†7/Ѭ3%X֛k)_gǮѱo +b9|F~l>wGG������������r 7S�����������;lXx|O:H"E:1?;!Tγ0 [+z$Ʉ>]R{<~'cIif0}26XQ}l)ZctƗE>Fշ~Pi/"3s Ed5K]3iIC} ^@\o?Jc"Ysvn(pgYH\zӋhB~9>=iO /?g㋯_]i8;~W:ؗ>33ES(2PD>qӨ vs#ˈ1b_�\dV(Ʀn Å!ϰb.k^#>yf)dM9v _V}Su⦘AԊ[y ݫhDj+^{y}v+@  ;ktddžuϿ1zx) �����������xhZ߰ɔ)SnyW@_�����������6G>B8gE"{K!D!)mhf")eA$cZqD<YEEND7eDTVS٨1YyYw&~8,rQeKq,򏸶ƢƟ3)IdTf&C)(B6ƽ<ԚσCw /Z<hOn5?]bSЋss[CdFܜk*ߗEUbG% �z#G'!K}g%>.-S8fWGP ڽz$|eT\Pvi^*1zQyqZOTƭ]+zGho6nzk^{pJ3@�����������r �����������ǟ<ḣNT@uX6%zxV}ere@pzO^sU0s 1Wjde.xҋ7Ddy)̓ ) \$4`b B>cm"afk#Z" YҥV bc2~O/cν|Ƅ 0aLJua?{H n.ī[DCÙӲ9KV:h]M补VT9)Hn yw:>>Rw`$_qJ>..#Ӈ7'9tipןgU#l(XB2s&U `}[Wo�����������r �����������<\53w<>2BE'ܢ`syŌA Mxsy&gݐYEoLXw5Qȱssk՘EI+l".E~򷬢>H]#DZ)RkiXUO~zC[^{�{F'4 }#&^|~O8_ zDV.=>`mnnм?a\%_weRV#uOR1Aզd?goL_Hb[yJvajAE FVi]Y!П̘2Pɭ]?}/ך%�����������u 7S�����������w8kw}"BfQ-9J#tRվHAP^V>7œJ -,-MRד>ȬDx>ʌdB.sǟ11D?::mUxܲqh;+e$bz|̼c-c38h5FpQŒX\lx-o>s濮޹}S9d xɗ>3~(eJFI 6߼Ju9VP ;ױdbe21C7Re|3AD}ayF4v^ެ=1śήEgPuõYiCW8h2ruv=~ozU¥,WF;~ghddžo^|U6�����������#@No �����������q_Yx̙'CgJEPwi\ό&Eh%%^Fkho"!E%fZ3/D˔6Vd=SN#鼌=Y uGsEDqLz!ؾI\OiP.Su_ه8PSo7ֿ}xVs49e1tEΙpsZl)*hk^V}XyORl4<mRt7n9vjQI\xBFjoՍU@}Sv6:9rSunJqd WNzOunỈ-6nzk^{pJ3u�����������; r �����������&S/8ӯ?;Eő :XZ6Z.eHd41*%;R'9LѺE*qs=)&\Xʈ"#B=bj';sd{Œz}97_2gSvԼ.yusղc{%^gXL/jZr VN .Ws~e%&šl@e6ݶ2v|K)A6Hȣ+k'3ծmxo uWY92rEpYPs橵cJUei>1$(~LUTi?-ۅ ߝ#uvuKcVu48-?q6x+�����������!L1^O]~�����������o5\/նqƿLNLƝ ^swG))9r-`GJ:g`^C=z#5_( FI pkKg)W:3L16i:ףɝE,hr’ˠn:>*=#I<rmRKRa||=IQ>/ϙ3_O_رyf|ctg̞4,}eDg0eyt];GDž$2H fflxʦyL*\RHL<S>ǿYsǘZJ5ۘDe~: *[!%`vg"Y`2k]?H3 #;<忟t�����������ا@S�����������ڧx9vk gR!$<)*v4K\Iӏ*U 1S#nQ~+cWGմ2Iw=!D+7E�� �IDAT3BMwtR^d;1YI"ϯDR2}HhWW{-}"¨,9> tonmߺ޹}i4E2u_GcR$𛋕E8/x_K:׮<Nb](%EAhO1GXQSGP6m-d{z-8T%ز|-cגVOYY.Hه]Wg~ 7JT;ܮcte$nXË/e̔�����������S)�����������~K 9T3E<:͕DH2>ď yjFt"2V>40զ~]g$U!(Ke|82ޗR#4I/IHu{H/@x"Z{b17bxIJC.Y`2LM l6}ɭ^2 [p`2~:sϺpn7?|\\O,ђE׍Α1g omP)OKM %J{Qslq I^ ! ]UPHݩWn"9׃' *ee TT2ر;cOXqZP S76}k~����������� 7S�����������??7k}BqϜB,>*}]<0(RM<CuLBZa0RJDacT2nEjf^B-.tVbE5[RndYSby|Le&.hcG<<Aͱŕ5.\e1 38' cCK_ïXت^"Хu j?;}SO;-pipZzJH !+b(7 }L*` ?fՍ*4+Cu߳A~ 9R HI֢FwnZѴ檌02-ϏUuHζ~qvݣUCQ^T+.)8`h _ ʓKSTU?ݷ|mWܥ�����������쳄/'CCCO.?����������~^ޱe׶1QӸEba%~ELDl/*٬xE'H&rGm-bI%q4u5V& 9k˳xI <ɇgYSn5b 1MwH 헜Z#T\+e[ a,+Yy9;ۑGZ&vD_O؟̙_O_رy@SBg̞43w~yG>AO ߻ AJ^B )q#rE1<y-d_bm' nͯ?|ݬq$g.UgrPrOAض'}lV!zL)a{Oﻷr|!v\~});VX_������������} r �����������ˆgxޡc1R?! di6pQ$7J!VF"J9? �>I%jᄿVWCɎn=$}5d6&kHtcBK;ֶG\�a{y#eN$ /qPZSF^8|yV%Oѡl=ҸF|Iޗlsr]:j&O?>:/Y!'?:DD\;myݲ�Ll52@~}Vt";*΀jY$EݯL)hzd_5ҫ6/qiځ}zhc{&xٔF mo{ U0k 'ɯw9|10ځ6c+c6{~]/sղM�����������hZ߰kɔ)SnyW@_�����������ν >sѬ4XGwe (M=T}/Jd)1t:J2t#XYkC}o~|\q2\p x-kdeɯ*j#h $arY1%0+;'@,}ƛB_.cz,Zs>mi2XLMֿ{}xV:�?u1'O.v3΍!eo ⦖q.>n 1R?Vateg1Yug>`Ji|KvdPn4΍咐ǮEw*i?ҽF*#(YH 2LNzdel!ML:T5 Fέ>T2]J`�����������rJ9����������?cpo|",.&h8C#ՃS=X,'v4I'\<$ I k˓P&y2n]JJ($-nq $a{p}k'.d'Q V*|NDH*llbs<)0)h%8pѦM4Տ=yמ{ɜܟ݄<O-}ljTb&rR]/-y1)2IHJ$WF%HA^9J99Z_ާ& =;Ef I*:%5 FB=;KfZ&Q[bb'x׈.RbJC6f#:-\MSTU?ݷroya+f�����������%05xv?zbttt�����������/;|kCն|߉G BVE|pd~PsYЗ;(JF &k-cwm&Z>f篐Lq%ņp7gQayKGu | y/"F/;EBNn *B2(K,U*OzQ?3_'/ؼ>i!|d.L)2߃<Z63<JR#&bG}N[N&!=LΪRTFoA 2w0Y9<D39 *i+1<h|dёCb #ɑ}.-%%֮6SGuI9++D4c͊e/f�����������dNo9����������y'ey6 bDSI)EAd }6' YB !ؘXݾ蒲c?&8JKeks$p6@Crd])bM#EE 9l'-bq::Cnv?LElS-=21vN[Ftn]s翮޹}6'?ᐩ3谿gZ'Ƥ"OJ3c> }SUinHMKM|He�LK ?+�ġT5ep(<)9omF6b5l6MV0wK1ӛuKZ6{ŗM�����������~r �����������G}+x.^<o/a"/!l"ߴ))iUL) ur;vDo|L%32='d-wd"I?y֑"-rBj=k@ۋ(ps%<KT2\8~2Zm*lã6}r݋>j+4E5B^`g]8 S: ޘHHK5`>&f,!$�^w H67<e_Pעi<3%cRxhrEIjM{WWc#wi:~WMl%g>Vv~궽\UliUdOlo-ol%+�������������S)�����������8LC߷z1bXBL6d D |-XkWFDѲ gHg� lD#-"CyWf\vx^\܊pĤY(D=^)-qeMݣ }>e$=G]1?9z1`+6I6N1^k髏y| K^%ΞIJ Ӥ 1SKnhM>B8J9؞+ߠ7AKa )E]>Iy!.sox\ ) <!lQC!4m:.Z(kF%+F5yT?Esc+w3OS ^H!,NN K%"rN'S2)9U~ѻn{9㕯e�����������엄/'CCCO.?����������7^xyۚo=Pm#wґ~N1Huhceѥ*+Vj."BCr a(?=U 0)YALI}T݌0^2PΩ/|z.m5dg1CW1ɩoޅ] G cqاy*;8M&?x_\2YQ_Y^8RҹzN6N؟̞_ ;7o3k߯ث &~#.vAeJI(VJ73~\0mmb"&f<+35OMnYk-E;= }oR?gG;n\rey+60]uiri,L"QGS֬||DJ nz`APTx%A68b0qoZ-hL_$4#MHQ- 1n8R* ZVUPu^wZϜsQ:{}5ڛs PiD+04Fu'xMա!B!B!iS6tN!B!B! zG󛿣#|"cqu-1jy[&\S5p9Zn-~M~oA|3 3.LlmD@XMuܔ[" ,o* (bx(6rd.s,(0%ful*ݞ^vƫo{~8c MK}?VkE)-ς'mn=4GTm|J T+" s`lE cJF2 Z鴮݋G K= kMա% JZyOl'9f E*^PG@ź@NkXZ[vd3=-]r 7mk@!B!ByCq҆B!B!BɟW&HAȁE"Ea6Pt: 5o'\afsu5b:jXW`ʯDP8Iw3fåeH[_L&]/j]7C18Q8e�B;ţof7m事7㱐%Ӳg}^qA?OpTX J$fbq2VD/) h5gaKҺfVe ~~^1Ix>zNyim21qjX4R<&߃Ny|k;m?z~ևB!B!g,m(N!B!B!9ԗ8n?ߡ"dJ.ʗ1HQJ垀IK< u!:E,C)Aw:kHtTɟwy뵮7bb/ 8zi>qI(oӉFl̺KL+&$b\Yc:4嗶pka%}mmÇ\û yZ 4dfWV)xg'3~մa6̖s/X!8D(B#un} /:ۛ=29"<8IXekASXgyZm+F.5~ xMׇ4-@Il(0#5xʽ;[ؽ_gWaB!B!B3S6B!B!B/:|E$SpN " "[\X_x#QB~_ *Qh fֺkD~ tEqYq)1 Sت)) 6Sci} kw>U =UY_O<$-{+>l Re5UQl9PnMB5(Ё6~AgycG|q qu|umzAPdWkv^m&5T&!T)MDv#lMܮ|GY B!B!<8eiCq !B!B!+􂳏87GG:'kJҙVsQMC iևJ-!(Hi(^")֟Wb*c W<+ ʫNۊDVC}s e~&Vn3X*pƕ>;c;/^_{a۞Hk8=XyΛ>#_zXE g{>Q~=ёuS�H]+mzpe-ӱ:samfꍁ 5 pw\$_$FPb05<5>>~Z"ոBsL3_I;7.`7m B!B!<8eiCq !B!B!d1^>@% bvoP#TK/_x~sn”+K~=;ָo|Ӽt5]^;xPd6}5|4D8"T%Acb-HcL_u.Ul؞[@CپMw\rśħkbz3;+[2 3Rlg:xoqp]#PËX *'jo "NW`,Mr[cv~3#P\kܿAY_ZSO*Ew<x2Myvs);d/{B!B!B!P8B!B!D~W7t١DNRLb v6K`Q\N@a6D' `/ƱE*b.Yt3n;H[ }7XrP:@/+ÉFM|l]; O?$_p F f#p�z 3;ao ~~OafO j){Wa+I"-+ Gxm8^%ed_lu/!TJk(fE >>Klo:haN/ŷ/qvFf%6*{S�D5G_)?RUY󁯌X%2J¿ƞºlzHxm1&gdO]v'ގ^w?_|ؽB!B!BYU=<dOfٲeo߾fn!B!B!d-Ϭ[خxG8^yJ{(hq"1޻5w<i9bVTL@n箵IF*2j̇ci_+vTٶ+sUMi_Vf ѯƕ½(40VlcT%4o6L~GmiDFCeL{ .p^מ3x\4__U9DU/Nu&п(;R"-':ڴVqDCev0zHq} ti]�� �IDAT>TjT:u C'Rpγݴ⠘q<!rH^h5>'IPm3^Ϛ靻7~9B!B!2�S6tN!B!B!Ky]xo|[ef4+)djH3H_ | WԎc{-Jr`mS .)Uјírs]،i UA3;ĉ2ZCZ.at!ߗ]wbjyr[KQɕۥν=u} 3/kvo۹񊻯]>s4Gþ/<Vs5{KB5#�p}b׆% EQoA[7+ZK*iTP�yjYY9J'-P &(51g֊'rkXV! pO_Hš,YcgD)]v<-7|nK!B!B!@q҆B!B!BOk>ǫ~QK'+'1p%/$pB7d㊹ޙ1f\x( oh徚9f 8ڈ/ 1BLEZWZk;T@Bv,a>S F+LZn)8 ~5^O6AKX}Û70/J~}e{>849 @?gŠDғȂP^(?=Ym" бN-E8nZњ8@`8ȃz)#PR\Tq(" ٍDf,~BV`c_2(PZOδsۏ~OB!B!Bȓ┥ )B!B!Ny~ǽ?\ zS2%6pB_h$CBCEē~*q Q[Jc-cX_<R2":&0n ).(_ssrM}60y19Iq;Xa7cyIXW9Tv T'I}{nOkz/!Bf~p;V.reR=OE N`s/ܸW3g: k@m+$gPtE;^wm>\ɭJ̪kF[Cs\R ~M~^m^RNըIkL!v, jUB+/7AI];@B!B!B$zxJdٲeo߾gz!B!B!?[Ϭ[ڽy>{ݟR:BCwJ>5ξt@QD#خښl'1e%FD:,M.YCi/.}֕漖OST[bDDG)ש7ZMMIP ;6Y;}Y0~hO\];)rn4KP9mb+y?yћO|ݲ_9pݽqeʊ9׼Ffz{ťؤ.NZ�*5#0}E#DQ" xQWz^ wShW$S*??EumAmW4qfA+3Ղ<6yaI%D RlعfYw;8ps;"iWpn;4(HQqnݷ7B'B!B!!,m(N!B!B!<xx||}~_!*("Gй޻fx7_5ͥY[sd={##04^Mc?j9Q[f]& <wclyCh~h(ib(I�^j\ʦ >9z.@? &k8XU9parkdn )z*iSž/<V9/4"wqoEeT4H�@nw|UBuRX9[x=AиM ,!܏>gnm4)'TEqݭsw쳽2ӸݬbX= 7/qݴwҜ _!B!B!d4]?<@!B!Br?WI @D`ke[cH3߭h_S2lo~_oHR5 P#iiɶFs^ q\*˧& $:0.q EN`M/\~@tX/!NbL ulL5Z?w7\i݆˜O}Ug3A`QyhQ7\ܵxwph1:6Je̖XJbVVўw<F TD#82qoih_->֡a]f{ގk )QLe.ܶX/}r}X8!B!B!P8B!B!Tq)/{C>E*VU\j]MsV;Ey4ZiiJ, 0RlSH. &1uuC!J?}.ZbX[C\3b B@a8F?Ҟ37~m/4(WvLRC3 @ZHC_[7~?Ys#߾/f|S/:vWa+WXr J?E-=Z"nmvJ;)1 %Q•TV1qMqҖaLX %N(3uOٯDw''_%6^~O1gumx>XGLgR|i^;_:{[+-6b96?.{3lx@!B!B!)@UO)],[۷L!B!B!ϖ{߽3v~sG{ާGCsm4n'F,bΟp\7ThCyoIw;Dv/ 㸾),FB\ ߌS'Z~PK5a\4b:x㫆y}tTjE7P Ja;!i}6F꾨dEI(7?/^sO|_9p#w~{sAUڊ޸}r2uJiHrʜ}R>pإU_W{J@8GU *(aSڃHGZ1w^`6C(|^՚j=s^O3Fhk4/FYyP?XUW[J2mb[^vEenn~gB!B!B:,mB!B!BEK?sN|$9)Ob:T!q_iEBSȈ'_KDe[-2v9E)0a@(ĸ<AAwt() /75&0&'uqZ:<Y9ENeG绦 Lm[>VZ3}.ev442 g]3G%i4qJ=Bx+3�[M[5t~Y m xd/HxdfĊ,J_f>P Z0(Mb^LMX7:ij\iԬ} 1ҩXf<{ZSىǞDw6纇6mrÇ/vǺB!B!B!�(NYPB!B!BEpA8"f%X\ʴƺkH.lm[/6EkoUQoqeC\<tASQSNiS7X&xݭ=Ժ74qb[yB E8EI#E`bUi7&ovA9?%@~po^7Xg` 9{|Yq{g ;//eQ~_IbK/V@�9A$pHftIx`HLc7މ#hgC!G]$nxJ,Ps&?"Fhc{صż簃J5bO)\7j<s9ٹ}˶/^\H !B!B!<P8B!B!S^q?e|HuQ1$=ۄ:g%5$2Z_n덛~b-h(YQMb ƺ ' ׆ s<X͔p&txi4hiRČD >"H$/hP8ЈõKph [-c I5߿u77uW4,9_+?4sʕI<9$YNIj[k?iXHIF`Tl?IiC7E4T!W=ڌ8 (} 2Qg4 qYux}##FQWaMwXHF!L \yIf]zg N7򏹏9j hlnap;`H+!B!B!<Ũ)2Ke˖ݾ}y B!B!br7~fw?#gSJGLj]MyFډX!حફiח7!m@QʮsQ:R+Ƣ0ŖwA'vN'B._NKPok(+fkuB Y,j]К0zo%?D>uSU\;s/Eo>eo}B=9TeXU9Jbz0<9OuOv 8r^_][וuYፏ7{y/^ t$'p[Ъ *Á ט .Fcn; Eۮ97٫ÔB!B! )K:B!B!B^ygqΉoTdDRjLq(?ӍTa~qԓݤ8\X~"ZY; }\LGqQlƋ!mtR'+8~CFc 5pO =hm8& Wb$>袲{έpōW}W^ص|R*'#+񒗈qp*"ib -H꥞[ĸRy0(v| nZP]UTBVr_42n( iYKŜLZJkCڻ͋j?'5Q_*SNQk!kmm;=;?ᒷoݰnB!B!B/S6B!B!B$^>Gj*PR' ՆGaTsf.+bRku#fi870^\!Bleb%/s@3(p-"1MLbQ_GJqdQ+d0ƈVѹdH|H&!Z>AO3!4؁SB`LކHl \us=l ˊ׿}NxYTqW-F˹Bz7|Pxa+&%qD,N+N$  T1" X SAsLv̔QʅO}hZ/T{XD9'b�ǀ"tQ"v{:';o !B!B!)KS!B!B!{{wGI1%Iعf#VjXw/ Ftok -o7mǢ8~$ag2bKc  BՎY)Kv 3A{ܖkh\ ~ lq9]\GV1I~{n']o'Oq쵯x+};!<"raϨ :ɦŽ2?< PZ<Ń6KI:<*m =xߏg!1/|Ie ?D 8,Ǩ+-e쪭x%:ي.@^ >gr1'£_Gbյ !B!B!8eiCq !B!B!dO?&N*^T )Xas(_sl'KtWɣTqC50%~Fm7YԺyD4x#24j1k5gMv>^Sxa;49EQ{].h0!fi,k8U`M1Fn{7n֟kw'aDbUW}r")h8ME*bi Hd.3dđMUI= OoJݼ|troָs|yhbRЮSI`[wWk![N Wba׃hn~p7Aeƻ=u7?sV !B!B!P8B!B!K?7HF$H:wRڱ^kKp,ܶ(�Y|BZ΍N, �<bHvLO@eHX(vzGsNkR=SaOuAd##xɟF*MWZٽmֻ.?v͇5M=Yk;,FrJ"[xR-a^dN`1<{6B+tYc{]-0UQNA8HN%(P,b]n`E3a5sډ J psǫr NdRBDsÛ.y v@!B!B!d┥ )B!B!k>^-NBH5"pDg6`}E)w}ENq5\O&boh$Oǿ# bBVa@G0F/vFÈx-)owQM@HSNkU2]E{T/NMq3-qPc2kmzhpusIPϗtR'nɒ0u8X޷8fH f',6<$?p\X6_**0Z0C@e:㱊;Xi8sӊi-"ЊEDd-obaB!B!Bq҆B!B!BRSet$[U(YÈmڮ9 ,Xk!Fi C?$(~ )[C!/7%Cs$/xySovk)Ź_  A<x gϱ߂ku7hU?{&Ģ ,9_OWLSc&Q'h.b~oڬEPHp;*뉢36EeaǎQcgt!ufW5E]gomVGRI!μ؛bV7/@$<kaMa@g*^RXuٲ{gg|h&3](FNsu_g{7<I!B!B!{(zxJܟɲen߾}<B!B!B[}`ܼvwc8`f$GJ")}_j\M,eZl Q%Ѭ?OuNK9L/Cin*uH$¸~! Axsn`Tjͺ&N//4j]3"W'>ͫVC+3)T#P1SKo2"PžAdv&5ڷ Jl>_מ{rG{4ˋ�� �IDATw<^3VUtJ -$g1В>C7?MJ-Q9/\6Z""} ^XG\_9ludú|g>Ѭ%yٱ#5$q8W1qJAsuި̮83:\$x|!<B!B!BY9eiCB!B!BRgWUgFrJ_;uŚ\'.Pu*9Ź:Rl]QjVC^ bK@.Uz5`ozBF4:`=6\Z0D'[7H^55։뗁a%We27%){بO^ qM@RDi35wn/ܭ￾kDN)&?^0xPɍ]^62[DOkt+8N"-CN9.$ѝZΌ B?Q\#8QG V٨eJ̱|1rcBLσG""*|p;fQ/Y3Ҥ\} }u;‚!B!B!d@q҆B!B!BӁ?W@eTJ$FxR׍#$# a\msLىaE ¨CEEaNqсmn�$LKN3K=Ą*^2jW@LbmԭkQTAMj\.[{[(JG؇%C56=Iz5Xb iʲ^\EsbH.1=Aº@%7R"0uA<2ܦw8Q F(G蟻@.xɄ>[F-IAL]ɻ9o)0uNqfm[U?'ׇB!B!B┥ )B!B! ܏^8R9MAtĐF}W ۮ9FGc7"J- n!p+aR'x+8g{)ԻY /ޢ]=i06`wch2(cuE|;8Wg$lr܃̱f6;GE*UP0%i hB]ϘQ^8z1^a!<9 %Tpߐ4i715v*T?M*qsXlm  Զ[?_LMH%⠂Yot?Cq oк' Qe<vko!B!B!B!B!B!柾w[wʋN;pƣ=k@rn j}s*",uDj?oa-ynR )˔]IsPzZ] ЍPJk-yWԨ}.|ǀpcW؉LB@6XgP4oM@1c7^$jMjʫhi;.O0t #jK"Vжƕ|/RLFPEƈӊ& U0:wͅ+e!OO y=YRxm`mkTYZ=!6QQ1%87-SO-L>A+WʽO%YŸsc3h؇ӝ|~)B!B!B!B!B!<uo?^WKuҺ[@]pX>e,X:$+(@ږ* H,"\@ŵ&AM9uu@IUSJ˺j=VL{\/࢓c:`jM=&,q^h^=z8Vc솠wm_/N9F0E^V 4'>M 2(i^3׵~jhmo}Ԍ%׼dAqxIN}ܱ1KԵˁ$ x}k ‰Եy(/V<S89#ԼP{W'-ذeR7cVwf܋}zUP3[xx[<U~Ջ.B!B!B!B!B!s ׼?R,<r/a )%Ua$�L!iAyGX#Uq}wS,`7ڇL:V;Jlat6ev iM+&!�Z_s\E0bfIqXoTujDˆVs^5͵8x&ԹsڭuɊEE|H0&,Tao[g[. ;}ENِ:aE1dòT"I?FDY|f`fK,V+jD9,B+wfeE *ַ{s�]6=pܴėm;{i]c/ӝouú͸ !B!B!B!B!B!O)Ǿv~_59-ƚTA#`Ӎ1F?vujĭjkdN ,aCdYgQki[NSSB" hj&X]jȘ]SIw0"4mKnSk>F#X_uR6 j\E$-Gˍ(i}nRh6/cf)lC@AA Xl`[Α"W�"fR0œ(BAbTk* py>Szl'*3Z[ZGG! ;/IhS93G91]OtSB?Lg��1Xҩ /..qc|uwRׯ\umB!B!B!B!B! gnZv<c^˞B$, @ ´. +kXmr2�)]50EUhb$8B):~=0tLPCjZ[%$!u(Iƅ$5n__҇vK~^ZR׫WM "d k Y (4%Yݤ6Y7e.f R'>I(ZO=~9Ɗ&.n( N,-Y迏{"0n >ت :Pǝp;L/hp7C?$3e Sj>9bܧ9!,Y:1OԽe2 S!B!B!B!B!B7έ9u{.N 4dJ|nTOˏEĕs{݀9XZ4Uva[<:q &H'޴bIx?>`(�FSV=U4Q~&yxC:o;?|Dj)5oF,ⳣRE$ERյ0E( NV9%(* N18¹բs(:tnE*֍aq]TFifH!Xﴬ`Ta-1W~I*g$gA0@|V M'AbBJwW 6P] J(\yAq;{_ W0R~QW'&[)Qs o~˕:G!B!B!B!B!B٣{5/>tƯ-8�:LReY=dl`!\'URBtVog6FMSU@j,i"n(&& u?E4ژZ>+ȱ[6fA9T^jq}$9U�b^`.Yc{'EJ34d3~3Q>^]Cϗ/7Wy%.AE4]S,_PhqľRbLз` Ygúe'*ZQ#I&ysDaQҭ$Lf'Suq _ԋa`HASS%i]{z۟>S3fds $8ZMP%_s;m[x\@!B!B!B!B!B٣Yw?v)_qϽt)*'&n~1\+^{ɴ&Vm|/(7uǘ`Tˡf0X rPPkס7W:yב~.<kqƤ- Elb%e0>[_+ Dh{4<kkMf|J2 Q?Vo(Td<iP|20k<o .'uN#9,&Vbj##Y*\GQWes {׷(9%9a>^ V)g]|wj< kBqR7os7%B!B!B!B!B!%˦ݴvE+/:uZ"zRqȆN2E'JS22o XY" cT sFTZdkhd ."LZ?S7E 8n:{tDy)gȐ.� 5h&`|v|f[+qs98Q€~:Z:vxp9/{\?IB|<Ud1AЮ|&{?LdmX*dJ&F>.EWB{F 7f*gnRT>΍"i2ZuǑ<_/k*|.# ~p:XN~1g^_r_Onn}_?B!B!B!B!B!B>}?^OnXN_7ʵ=? <U #f$ 9z0f3Ը/(;c?vf̀ss2/K^Kh,c1yD!aCx&5@<VRә). wQb$ 4T?](@+̕T)K4-5$p�݂d(#E.6jhY1,`VEeM$A}@Fy%hck S!C7'(ij'PGHa5N'1{Z7 d:V c'yU?#)b".|+.8{09!B!B!B!B!B!i7}__so!I֡H$1~4w}jY@UϿtEъoF]*֊XRF_:h [oP8Hw9ځAh\[q +j�Dtcsuӌ`IP!u1(y50n-qNәX=Ao"hƟ#*8{Hngݙ*穛]gY1:AsTY73)s 4xx)^fגFUVRP]0l4ʧlzЮ8,rYFȌ֘'QVP$:^r+l'؁"P;!}(s|3~ԟ3G.Bs_|Տa0B!B!B!B!B!BӒuoG;e7]ЃTѓJ}3! h<||y:TL_믦&/5^7ѓu*Ԏ n4|KF$W'3ƤEwS׎S^DŦ&U}BkJF7 ud U-d {89p)<kYP<CVUU555'l4A7g\_Iߩ*O'ICXg$gRASx8KTTʛYNϴ}{6R}XGE]'YH*#YII|f%o.zQ"J#DxZz'w+S2j߻0@*w ͥnaᱯ_rյ!8B!B!B!B!B!BӞMkMkv<}?4]7 �Btmgj勸%qQرD ; gۇ�y6 }]<|IYVޑR $U+QE1=ćd{vIIuNj]*΅GiHw*"2B[ȂbH\d Uk$mNFq&+Q6۪\wht L@!<)\7gXk ddeE(' BAԊkHp{UQ̋P'ᑮ;?NRwD@&+{}I >**;gwLhvT8]`dvv(L!B!B!B!B!B!u9Y?$T-kш"6Ê~ '/ڗP_q-J,6h60B:qֱT> T,EB6Pĸ~(C9MXo&^:ZHBބ;)E/V¨2zF,Pw͟n KU0}}'8b)#wz%ϼK¦&p ixz$JԸm${'W<?z`Ұ2*5vV]#*ʃ!Gɂy+C6N ǯ2V>ybX0Caoad? RIDsÛrŅ'>W!B!B!B!B!B!hn}_oyo5Ygr=٢b-TgP|RH^[6RM+'1 Q]݋X'8Yb ȀZ&)j�SJIWTEn?P�"!easu;bl9)1 ˹%bЪ* ʽYZUZhVHÃ3ҖIM Gj' dٶ#x@"J/\á Jzl ǃxS\F h"pgYᵄiʠH}{5V~YTcHvmyߐǁ@43uP۾eۍ{OͅB!B!B!B!B!{G>r)?:ϖSΠd1ĴoZjw*><pHw Ъ8H|LtU@=Aj*E9@ \%x#JV@=b/r,e<hZFeD7&H_}ALy_ԏItLu6fo1l$?mfc+J+ TEaLᐄq<#Q |47(xx% "+Kdg{>u+;NJ☖*d 5In*#+"/p]\$,b);oJ<|7p#׬64#B!B!B!B!B!6]߱:wuDN wi\,ФQ Jƀ"< RW%M*$6o vI 11H#ԐV 5|AQƆu;ZQ#nP1�A +e09h&`?wy_Qr Z,}TpJ̛΢ PLߥP% `"'q?b lT7qN |``"jD!Y8{FՎ_/ƭԏ݈ GR+V s1_b˺Ǔ}y$83v>]D,a.yۻqs ~ B!B!B!B!B!B~Zėu9Y?O iXMͿTGס~BB6P9 *8Fwh#X8Q%|\kGqNkFET''xuɝBB9*RsR4|$kR5^d^tyhF1%{IݪZʋۍ̙?}:x�� �IDAT;aHRUTZ팘D\F _9(񂍖(fή;Nx֩db"iX6KÒx=un'7=W^?U!AB!B!B!B!B!Sp{>ry>t=[r}>@q0mR[ >)ЀjkkE(PȦ)n#&>ט%TKe4b¢v/c"ц>(GƊ7F Tc!CS/@,&If[M4ZQ23yn_ 9 ].?NV3FƏ-vc7LδZR%(Tϣo\T(>iC.~dsD*ڨ�LZIDIY85<o6L@9s{YHvȜSr,^ʶF"ٟjv0ŶiȗdsncݎYB!B!B!B!B!3^pTS`Zd_A!g7 'O&{%X?ujLW{)G�ɑj,aLK&XoZ*sTgxȃ�Ff8@(*PTNx&J]1'8~%z$Mn,☑z̋& [[5c2&2ϢqTQ?,tj: �n9syGw%CӴG :re{jOd߀T"&hq/24na7n޿B!B!B!B!B!Byټv׮hz-{/w$A-.I溂 M=^.Šup-u>ԕc=yVYI#Mc}CqlFjTLNS=7;<ٸ9=`"L"L}]Vg7=ݨ)5T ݸz%"TxuC?lH99& P%'D؏UUI~f׉a кQ1۪NTV P/x8a f^pJMޡY>9EdDJ2p7^Fa !B!B!B!B!B!]W}u9Y?.$W,j05ض<qy,-&ֻ�Q:bQ]s Jh Vu`J:Kx c 8~344~|IiHQkmg2h$'xPVu*G. LIQ&66.pn* oF΋B5#Cg"ȶH%q֑0v'hp`Hu]{}>CN(@~aHEn:JT-<_y~aB!B!B!B!B!Br{>k=ԇn5eZG>zX=5quմk5H,dIP]RQJ ӌzXca.=Xf*!&LjsbZ EE++rO̓5›1rN6(1 UL1Xฮh5Ƃ8ũ!Pivz)"}Zk,%;Gʂ(@4Jnk"b+69ԙ.>l"*<qlmڴ\"}vo<::Q•,4Qqc:v&AE-srMEҎm>{_7mB!B!B!B!B!BCXwG>/J LzKrxV E49jv:b N.趒=%W^kSJ!۶4ckK$Gp1QE*Y Y` -I-A8ohD1h3LkSb 'fŌ/:8Q?֬U5@A~clP6ˆ5#1J矃r?qR4n"UVԂ9H(Lg@E O=0vX9J,yJ`W[2.!_8 \J(Ϛɺ(v, •dupo+ta,.0S7޿ !B!B!B!B!B!daM|V^[Ӷlrr)j >6Zfq*Q ]F֑jЁN, bZ3ެ|ȴWWx~}s{ uۚ"u"5giR'5$֤9 F\AFyΨv#X-A˘Y]d)Q-j,�I҈15%pPXE|@U\L<U bEjާH-I񇫸da~*U'R&+<!SY]!{qus_x)B!B!B!B!B!]ܚ.<vtiܒk?YZM_5eHnSj>@ tq0WQ'2ްR FuJiyљgɘDf� *zTMqT11U\_2[GO @kv69jn0%MT-7k?R(U"JH7{=9ULJqX2ryVp!gGdX�Քiub)8uT#3JvN{ԐQk&QYV8&3ϛAh,_E*9}MaL'PY=ڟ\y٫C !B!B!B!B!B!d p{>k^>tƯ*;I/Z"(ɥ d� Sȯ $8n'A\+kё or=K\m9:z@z_ڨXYj!70 د7sc0 qAb\Lo=Y ԋ0h옢p ψ=FN0ϝF6iQ1ʓ ϱc$׊TPPeN$l�ys!-CqzW$a}ꭂ򘰎8O*꧱}hXT,Ɩ*'?  :{I]͓۟B>Fz}xx5ɜ<Go?SsB!B!B!B!B!B!Oֽ9/%t}ޑ"rdUYkZ]KF*ɴ/CMG7py2^?ׄ-*(1"@l:Cm:jk1kU#VswbH45 CY3 ]p,pAhItF,pa j7̺k- C}"195}=ie@9dߴ.Z-:`d\SL#!A*rﱃH]A c Xc?0naop#׬6B!B!B!B!B!B8o6\:weeZ'S<WZZ?"5$eaJ ",lPWV_HyC�طXcMǖwp)'oz5qAAM],Ea3Rꪠ))n4ɊyrkFALbbQ7՜*\9F@uOggz`,xI-;H\[ta۵#SMK8`#(r #~x}P@Ć1Y)F|G3d(=WҬZ�ej+9.s5PW]M %ڮ= S!B!B!B!B!B!Owėu9^VTnAMVÓdʲ‡'h8 4"@q5z|P"Hb*kQhQ<Zk,B 50g#Fmoj!uEYCJ64ʢb"_nc 8x;A4:^k0J>?'Kl̂O;q M62M)m; kI<ylIH׾yK/GCQ Y7|ɍ)DmE2W:W^N!B!B!B!B!B!Ocn}ϧ_}ݶkIQATG'(Rb�?\J :J:܂>08F7a=|x*b> 2�bLvƂA{2A〽hiD{hS΄qc{aDL3'ۊ{>N牄*h# }2*3 @T9;z`;ŘXPL cP$nlՃ1FrڤTAI>.$wll h#TܡRrR_D_;s>C3gSMZ!}ţsi-۾t|ӧ8B!B!B!B!B! b?C_{e/s.]qAGN*0D5٦^Ԧg-Ĺ :[wTeQF/cm1֗GSo LDy|_[7"V�rOJN' `R Cv3)4v,QAǕf#9S|u\lxD A=х#Ɣ(]219n aJ``<^8Ǩ;JxG= Ɗf-^*dNxm 3}l 5d&.naop#׬V!B!B!B!B!B!L|G7ߴqG-{-w\E&*ux7/�w[ZqcՐ�NXOJ{C`e 7~1&(Xp,(b;;NsEd@RQD"NGM9C@n]"`L?vJJ'ƒX S} ڢtmrk&*\a1%ԾMn7/V)aC h#5d>VmFHYp*$ 2o^86~كq~k=7)L!B!B!B!B!B!6w}Ksk-u I]\ Wvh5$ !M 5BǗZێZwSSA3(kz,AQN"ZLu-kX㶨 'jj Ԍ-`DRς*0Ff2 y48 gP.!;.9_Ft9O07ڜcMOXZbO?3͙8A*N&N3{-:"5q~-M mE1Ӹ8LY3EFJBʱ}Co׽/kDtB!B!B!B!B!B!?>˿>Y7J8V$ с#Y3v*YQuhA| k3Tc9X][X$G$1:CLBkCKu"r/ͦ"2n {y n$A�3! )Ѻd[VdFdW].KI6⬒ؒfwk+{Imyqo,Y^;;%dV, J4%Jԅ`^`st(" `<sy~=#_C n5[ZԾOVZTtPjS֓:cؠ2%\"0K?ql(lf=:H!hA9~SK"b𡺚Y IGW& Ji*xhS{5dPN2aZ_~Wdϟ|HOk׮?~/OOO?""m���������������gŋ߳01\Sr׾u2y9(9@9ϾqGψWqqh#L ;aSKTsWkc!#T֔84`GP.Ԡ*s=3XQT{e%ю9M!tUFz0%"b3̭p=fd(sg-n嚍gAlE Zc&iKb,]^)TӉ=;W(L--UM(vG&</_|ߐ^XÐu]g///(����������������߳e˖_9u'd;ߖO% h4 &LҿK:ztBTIw(~7D=_&^$wP_Ǵݭ6m6fב`յR&%4r͠LU]O`(q0ɷWj{To?gsH1h؇"GԞb+|<8R^;7i FKp+ [ff׺u5Y4?piU\:+Y:*K|ji.].]K.ի[����������������7LOO?xʕ+7\$Os'd8(G}*P"*A?WnPr1B>>}b6 54MTXd|.H+O٧0TOҏ1IROFM0!LՆKұɤ0OsM`/:Hsŵy1b|+.SmɋiǠ94C(9PYaCxKl%I7:R@R*ԑЭ-fߨ%FLIyWt ƔHB|I$1 &~ܵO񾔣$%Jnj=OGe<j^ȩS?\D����������������lN8e\|Y~?}GēڽrGb(9y\y |~,E,G&\PpϬc`dWg'm:ҠGtSJѿ[FLHFlrD):�U(I)ח_7ָE"RCWe;!rz99Ū9IB0@ځntD?|L t æUwz, y[e>+ �J#".Ji\;dwq?y:"<CHh-C6?Uɟߓk׮ɋq񃓓:t3sss?""_Ԁ����������������ps|_p5???bfvz䵯L{FJsQ7$HnENJh$P*(i6)Q )$b%ә7OWTY.B7s>>^j�cN$\E7<F=m2dig)>"/9ѧf|SZgRָAEz14Z(8cNTŵ L e9_?H,>w-L 3!_ɶ? L6cCᘽs(>Ue]K Li~ַD8_}]vaҷjX5577}۷o?cǎ_[^^Yyq����������������xرnڴ闗~;g/>!sO|].?tL?/m{t_2ճ, %X7*DExU�I_*Z\Ѣ[Qd`[V K[P7S:[k?=o+enEͩx%U>C˜ w*Wdl`xtĦj!/Db�� �IDAT}!}K Yv^I!m$(<2 ModzJ֜W{Y 6qEE tr6{Jr;b9|"62}%kJ.s?/{rx\]r}ۗ.]zիW%����������������t0==_+ K>'}B;%)9?CC!\lAb?ύ7hHE`AfrNz<N?S:'` R74$eoy}I*{rgtSftd$JA4_8)yqI+rs0N0m$(C-ʚ.M ǨABVPs1`J9@b=Ɣr:)aIhfdd2? QcF5bPޔ4đy^_I1}󟕵O|OWǽTN:ED~ǏUvq����������������훝؉'˲W._wtL<*k#VUQFbUy#1~GIB`2 yC&jVq�CZ9yeiL$P{RHcarL ш }$P"4PǚP:~h^7כZ[\Ue<圆QA>6MŇ>Zm-p׳ 뤮IMx6"~98^gt~!Hn՟DYIyV,]%&LԘcOE<!yk׮Up:tWd"����������������pc8WWW|~~~GDN/sʡ@iHTilK~?STa[>RA(\Êss8#eb(`7H B3lJ>/_C,yFPEL0]q&Oa&j"=~QHE$C ጯ1 (K.Fߤ&1PH>R|h!ښLq}./ *yyDEbCIv,Į1/ߓ!7nJ1kAPsƏNjjή蹐nj?tSgAUSsssoپ}'Oye2����������������ر'6mK[__2e_+mIjyn sz:&7D}yݜ2,Hџ>A?+/%PB96 |L6Du{`Jb1OOh[s NZ7tIx!)q5ljc&+Å\/rmjTƉ*L7\qKͯ>I7Qu0|3!i%]gKtC(b֠bF;cN*`qt%/AaIgKGe/{_+WtW\yŋgn����������������67NOO?xͶaIlK) Lw<Oa~tC,}ӉiB+`HDj(u"ЈdtTä ҤfEt1K>ƿ>4v& `r_`N.ڈtȄg\rߓI36{1\%]xC%*^{:L* ֹBG-1PHSzTɶj]U*}Kȭ)Kc8*|#)O;uyhQ?$O~P>Ч5lN:EDÇannȗnI���������������쟙...˺r'侣eY{n9o)m(R ?B"LDܖC*‡AE�E3&ӡ '39[3vծ\jKiltFT(.g(? eXztJp'5&W.!m)],jtpz UqBZMt Ŭ)NÄLﷂV&4͹zb#TBPqJWɩ۬?)AŢR|'ϮζOއ?,|rڵj7:t[j����������������n58𫫫kaaaVSr׾u2y99޷? }+|VJdTOID+F%"F{(S<'_5b(z}`[Z08.B'A;|c؄-Gu: bu[%Gy>R>YS@:+%TmJB)yC7OYVHu> }KboG4ąV|E9|om8 JשϪf`6W_3N4R:|WOʑ/Lܺa[o~殻ɓ'FDn ���������������]w6m-'.W>.}ϛ*'%SaXb!j,iF%||VHҼm0 $K yŷ=d4Sa7QF|VaP0Qtv>1M3Tr!ePN7G !7_I+&P4˾8%Տ^mT DY Ar|L7TA7LPnN`W_^H_~.M^I /f0M*UPԏqyQY˧枬rJwʕ۷ǟ~Om8����������������7NOO?xr%C/c%<0%Gu`y>W`&D 9E2k_B!u80́_]DQbQM܄96|SQ$9s:_\ B7O_CoƵ0rB0sRA8_7FQKC.4nP)!{C5~zѠBQm#: V/OqխyMt *Ql^bC**蒷c|=7}3}vSO S5;;?("_m ���������������ॴvvc'Nr\,G? ~xrU^[IG/_Ae| S}=6&’ %QrءG#TF謂41_<߯b5cFrT`1E/F2G{bs:�>iCU7*] A܇v~=lPt!T>c~Vm}eQam%uˉV2k ǟID7. j>oZWb(m;O|T]&}_8t~HDn���������������x68pyz䵯LVF\S!Bl"h}dL AiՈ'AUstDCp=W3|C!vZ9/z=jɓUZ©ZLjbm'|pNpܠbH *QOLM+O4~U\ger 2|N0s [c_#O<>$_[9_v7{`w-//����������������ߴ}6m-q'd˕e_#~[݂7 <s.=oZUl@*lH>g :a gkƒ~yPws,(|RBgjJKLt|AlAv}ICZ EdU}|:okc~6ҩ&rmQ)P5jPc�V5zPN2cR$Ն RM j_ւ ʠ维Xn˱{ZDI _]8-GN~V'yn4W\\{O?O?7����������������08==}}[%C/c%<0%sL~|‹\ʠrÈj9؟2P_Qe|@!_y0@+'7X1q$j1;S^L #9UM-:#A%[ ФPz,Cjt~j| 4*djQ}2EK-喐 a@eMlH?>_f(nQm%k?C Hͯ0|3mQwjSLJDO~P>Ч5ntO=06??"ō'���������������vv'N }/O?-G? ~x򂬽f~[K$/r."Q%$HKOJɍ4R�~OF@)M"&[71bV2tBK%a])*T>!IJעU<YhmB١Г".CPOjc]#IT n'5 t}) a@ew I/o5 .Tl]bQ1%tjEѮ_i}Oɵkת9orr Y���������������P6<xVWW5??qwzG嵯L{Nf}7jI?}E(G S8"ph= �:c.zN1UOlۉjOLyah54܂5MKɥ)I 3OiK)Qk}ZcD D oהA! qV ITϪtN;dC!4]+J7PiTꪺ%!WFY]#_<oWWWa۶m;k׮_?yO���������������6sΟ'On^'d˕˶Ffh|a )bRm q ]v/)2TD @BѯCTOGd!*2~?/ٴ~*:R6UM54ʘl(ׯg9MJa w;TM &tQywH|j^!PLJ#*:8WU<d24 I&I7Ɠ>xOT3R u_:+G?x|jjzjwտw}駟~+W [���������������ܖ455q{5ÒG!ȗdx gMDn NA%#때*0*XRjU1U++/{<A} |j` *#be|CVI3{=>t0g.aqZ &>CDՀ9xSLLHcT#{mKiB.(ou><tf`թ(WY,s|iF)s7>b$c~q2ӛE7;~!"���������������maO8W._wtL<yA^[UaD%JT R@?tG 71OVXK^2j#E$&cZPb&(v]Ōz:lp3&`7nrvPPt+G6QT8r. n]ѕ3<1]=ETYT3uZM>ȣX\%zk)_2y+igw}C'>*׮]Njw&''??33cǎe[��������������[|… ?6??q N/sʡ~ O Ae9|_:>iCc= ]*H ܣ\_tLsnLɭ3%(R%KBhm/oL~yv4蠉o;S( I}~{aؒ_*Ɣܦe i6o}mR㠋neNsY9)Gqyߔŷװjرcl۶]~ɓ?%"���������������[Ν;zrr痗7s^z_2˝o̼/S 9UAD(!F0$\E7 H!M,j2:NM/5XtNe<19dI49#jKJb3<(GdQ+) )`8K4Cާ<Fsi݌b-~ IԵ1)RD|%V_O *ߢnx Lz)ܭ{SU?A8wpܿY9࿖O=)xy]zz߹{g˗/����������������izz/..6%C/NKx࠼oM#9Q> "w*i|UI=Az_D$43ܵN1kkiZuGEt !QJVyļ}Ag߸jޓ!.B(yFЈjY7*tI|t߲p|7mT欍8`H߭eQbgoXl~ }lonP1ItfTƘ< }POo3g ӒsǏAy-���������������n*ggg?~ĉY\\μ\,G? ~x򂬽zo'+<"|DTIj-*Qr:r$&"J(s "tcM*0 F|THҢ҈{ic`tn Eb)dQa>9䶴=y}}7*nr]-j`;voXsH,wSv = ygoIaWy~\>O0r{Ç?'"l����������������n[<[`=I^>%dptnUInELLY6"J9=?:z~}!5ȇ4 dM96Zy}gIuaMZzL 3=?u̽u4R+ M-/d7s7Hߌ.6q`$D.B=_՗5Ɩ(_k׮U7/ݶm驩_M���������������sΟ޻wɓ'3t܂ӟ]y| %"FR#>%Ѕ$UGn()F:,_9@z�-aٺU8K[u'HZnҞ܈EpP#W11/XӘs\S Vl"}偂m~Qp&%PWI*1@:M*fo+funii={;v���������������lt.^+ϟ̶L "lJIT<a#@ufL8EA]Nb%SG)1@VJ1KpDžʜ|K KPO:֭:TK/y0tҨ_nO)fuZۉjNQӬn?}'w e~%v{oTI2Μ9˿~?%"ߵ���������������x {ɓѷPBrDJ 7u#%rX'.Ҙ#S^k*/ >JHFOK:b8^L<EcrV!sWYnDב|.W̸#g93[ԿCtx#Fu~H`"qa`G 9ƜܜJHʶ>Ƅ$z_d? j:n5Ǐ>|s"o���������������mujjÛ7o>1??=�n-=^�� �IDATLIt^͙ѥ5R"HRX c" IHc<UL)P &9͘)ב[Zr>&VPr/~FF|\HϒFQ6>cZGv8T#><|C(]DF $7/&!7B1޸tCvTY ?ݲsӜrkn۶myjj7D0���������������[ڵٳgeii]=-�$a QM*%$3,ôOT )uF_+|Mj JP-(*O)n\̌ ?LURg*r ̔zoC :Jt[GFŔq tܭ)-*F<4Q4}]LI7O 0eK t4Bo\S^1vݓ[իWo߾;vI��������������� . Ooe$ԯEVR =s!R:K HE#jc%_^7'[J:5J*lKp%\Dc庢(y.NVI+K6'n5~ [wBwF62B \)*KtcJҩ=]/biB>%|qqkzꩧ|9;;���������������ugan9}hP-E\ -,ZWRp%KP!7 ņL@F_l<v!ѤS:R7D۞2`/PJ3f R ^橉ZW]׫i?ֿA |Nd L-_U#�Aq]i5nB00Qj#G<""���������������@eԇ7o|b~~Au�nm% C%}IP]Jԍ!Nu*]ePÇ!r%GB'A_#ss>{)kqg BKrYw~icIez}CˠK%}H+C7 DwJtIWTHd=>7bP箹 J_՞ ]E{s=Q/_8:b. رcoܶmob���������������ڵgٳ{cOn3),B %T%>NW* Id$Թ&WSEJ@!bT |A$ ҖVInC'64S.uy -6}jH*m%CRMIW 59Z[ǾP@Na뮵$}:47d8+dN/7mի۷Ν;b���������������6\p_vNf>ѠZRsؤ/6e%UB'@AĤCj0)-AM9LZ vql )3*;L%n\5f 5qhZTL!DsXiNq#腕 @9Q,vLAt(4R7eZ;82!^-*oPqMk 8 l]n)ў?Ͼ'.RJvSOq_=#"o��������������`Ӯ>t7~Hr`. c|8ʹ90c8(Yh/B!чt%7iAs˟Ekm)XB4$7li?Q5?R *[%.cƔ& RF{}HP9UDt GT ^owǤSZc~5=ǚphAۿWgv7??Ou9r ��������������mll޼y~~~}6V)( J(%1JE\Ii )M#j>#Pc`qe<p)%0T0%FW1R&;~MfTH(ɍ4|PYNo@^^*t qs)d&zHΰ!ǷRrnGARnmkm"bI2}ep[c޸m۶婩#"T��������������඲{gϞsuݍJ=/DVl"n>!Q%ɏېǸEI?s#:|#MK䖔r9 RX\Z;ԄBbJی/c;iI| %7gQJ:^7딍 *ro\;H3\:sSFFJMi>$tL?(&S>sniio{w^��������������� gVWW Oܑ#O禕JQ`XIa:JI.4mZr+U#D$bUzɾ $q.s9j)!JANQF;p@9Ҁ)0Dyu!NJf50Jt?qܠ]h% {9Fp&O\}̙3w\x333gE }?���������������pKӮ뎞<yn&%dOჁJGv rJlD?^LE Nj*&2} :JrDA53sxT)lg/:SǯNznV1>4T/5+i>ɟe =^P-$],c%6Reh-N\&_-OQAF1&%k5naa=rȣ"o���������������n [~g= k-B)tXEgS~&tjϨ3rmJ aPTm�^G,RU2ș�34D,b4%ypli,]ߒUjP 6bW{,hMb<@ �xT�zϏ#LH]?:ZOdt9MLFmptSr).8L| 𿌏;[Pe��������������Qk׮zϞ=+KKKK :*.@%a%9RեuJP-:dl!5B.Tk'm@M=\.i1Y>=Լt?Qm|]ZTR?:e̲U8cA -24i<ޗ`4)_ ձ:Va'U^'ct�\io5Ƅvb$<LX\\|׽{qΝcc���������������pyS.\ŕtEpm#Dr>5KD["%dH8ʥӿ*0yZ%N߃f 1QtoL{|:&=ME%1Zٟ=ޖXWt&hƈ%XrmN.GYc=o*diP__3763ixgΜŋ:33sVDX����������������|gff>uѥw/Iui i[ѥ4Fǒ7)iz2DMdrEʛ}Efj&`Q5 D*>+.2BnzA.e&VI̟ISz:~rvҺW:̒D|H#ofu c> ("uFfDrbJ#95= Hz^pwu9rQ���������������etԿۼyw / 2 X2~> *Q)PB.%Ћ c ƤAtת!קcFfx<U 7P ޷s5Frj& 6|?΍#.euÅ2\^^oVص1M�r5 ֜|b#ɤrt&Q ֙ Kرcoغu*���������������R޽_{:vߨMFbi8"rD='E0IaTXQ%Ƃ ZT8U:i29RaPryjr Ie%FU"aPϹ$]HS0$j:7mڈjƼqin_(7$]kNr=I~Q];QPLJt~/}Kk&TͿ},gy&,..ؽ{qΝ[0���������������xϬ$)91=bB%!ĄN gEVTS[`uENR<j zҘkP.e.�[Vŵs5^7 9#Q9fEG!KZiYۤ&X<~9U IcAC >SoGQ;=3>R*TanVWrzG;s/^ՙ"u���������������q3333'O˾[2z`9% I )Ԛbܔ,r[KPATuO#ɡ*5~L]VTsP .[>C0:t 7+AFgT3?WU;22Ĝt| fU1ajjt>)燨8{i._E{#ժ˴7|#G|^D���������������9556o<]=ķ)Bp(t~P$#5Ԇ29%PFPyEC*BRGʺ\Lf[ e[b}CQkU Ryh̶D!7Ur"Q)` k܉OB?Pۤy]IsaaHC9UQPnv).Ա~^;v컶mvrzzEd3 ��������������o@{{KKK4X$EՄ}K>R P y D8ɭ#5'}ȥ/&arC*c\ 'Y|bJ7N3ar!rΈl^uQEVyU-RB9'\b)n:f5mL3jeA7"Jpcqz3yW^ {sο��������������z3|uuE:Uõ=DTՄ":ҷD}lĔKBlH݂0AmJJG ZJ&1UfJpv:Ð,)9Qjg̅${?*tHעK 0 mmK: ff>1!ߪR&[UFg:7B :@SXQ|dMzɍ.�ًMn "={vŋs"&���������������ɓ'1R-%$RORxU(A9~RWL.Ѝ,q Ŵ|!0125p DL@}t&{YfݱNJK{: L_dҷTa'A3qʮ5斘%rL57R)b2.a(g_Ws@^%oaaaou9r"-��������������M6-,,~0lK `JNVnjRhlB7*Ab*UquQK ʄ n)*ruHT8'I̚|щ5Kי pG.]?C?oѱ !Zdx쟩YQ߭=:B"}vTW\;1V %(#j̘+}H>j^zLKm4;v컶mvrzzEd+��������������t{w}~qqG]qE*נy$qy\X}!'tkITa/\!F[ۥu3[3ϡ:; 6t^DUr8!42$n=UvAc4áJݸyuZ>*`>KA ]cԹ1I&~vR5z!A}!}0Ĭ+JnQ?JRJim ՘)h22ؽH!aPgM{*Kիaqqos=vh�������������� <򿯮-#Hn.P1@uDzP_Bȿ $F<LmH9<J{'?lkmqm'pƾE)c9Bi =VAuV.gaPsєbOAų^F!y<�Mȉ*ۜSJjog*G }wMjff月-��������������-~Ϝ<yr//u*>:)WA >P)ah>Q0E|A<LJIR&FuiH}G9/*M(&|=uSS kc uUxD3EKii.甃$IOH e؀6y:rhm:ƇyNڨH>6͊>mk+_#VZj5󻞃*+iaaaou>|19���������������-9=={6m`0ZRoPBy>a%| 䶎,J`kv&$jܪŸ"FҔLėLw5e3n5Ӻf$Sg0rsJJҌ%:>*LQZRx?XYS�IЎYk;1hy9/[ 2<f"ѿDn{jF 1ci]x ܶml;��������������-۽{{󋋋?zڵۈWNT@,A#F8 PN: KXb{,sjA􅣔Uf)1z= M U@z04i:z#O҆n9eJNyIq%H=^ӡ4<IըScיߛhT`Ki쥞;p3zjX\\/ v��������������[_:p՟[]][WZ \‡}yeAlȠ;#*1!&<h UKF` .st ,+y4.zHPII#:`#7 QLÄlb y$n՝ZؐLt& 9kaꕆ7¢6M{'Fop;{ .C΋ța���������������7E{UYnJ {$|fR0hg" FB\ل0[X}!E191cf(gJID66c+`4O0)J$ H ƒ)-;e[(!ca}sZN!KZ^rpON`e8\o �7'NÇ?&"Y���������������7;?iӦfS}_ 6d":hgQ5)&&'K,E~ 9s/WmYvr?2<Ԝ$5J8R#dTTI5CR=W!?9q ~?YIW﷞>O|YR Dj:ժ7OTM/&߁`0ܲeC~WDr���������������^Q޽{ǝ;w,..ȵk:nnF)Tf12NWH):mP-ƅ~Q]H?]8T7BA{PJ"OtfFt1rSh'UNA$2c\D52j>k|0Bݰ?a5q:ɩk^OZ/0)ߣnqQ�� �IDAT?L4>RݛI -2SZa`TJ48psxgÉ'=saϞ=?m��������������xE=vMFHAQ*쿨s#Ջ >2,%з�JjparNvїrsS<r&θQ^@D]$8tS Ǩ㪖2o@iIm* Qk{ktl3p/TOe8nR(-O6TTtpM+++tС"� ��������������eq"=l9n >Iz?9VtwqS ;dհy Xngh\GGp/ψzz?ԚƙR3%ok*<tX n�U$7 ZʿW\j#ާit#6>_ U[yfSUBQs7SJs7*7'N~LDr���������������^;?zw[XX:AU֌Gã~{ HK:UBRvf qR״ӱy0CA5Z^ ZC*YltX\B'G958! 25(6ExjNW1RPmFqmK1sT�ʉ$5 dnn;lٲ833"r'��������������ۢۻw?ٹsyy7- AҪJ0El#t`PK)݈CI9P"]#@jUk[$=߇tKȧV較^5AhWHQi^A @}C-5Ŵ4Q * 272k>q{J+EЍK*}ٰݻ{č��������������xQvϟ/^V▤0$= )ԡ 3R9Ǿ.aFJ9*gu?^M%Q^|Sh_s*fs[Qŗ�KǴ|:@7HɁj1t*r-HiPq.(6&#/oc t1T+~Jiiu?UbfffED��������������|SFԌIR"(4HAQ#5C_ ج<.sԋms@ԣՐ2DӢAПS;F=qj n IU;զ<`T&\wB?vEk qK"9yy1J72h=qʺ<9rq9=��������������ӿwݍn))Р Qr{FP cNHѭ&gLNT(!qboK|.%`A'.5cCl`ZGOGiTZ)i>2R"AšzBi:ؑmDݣ J:~(g5̤m $"zkY1AYgifp?/hn 40-l0ȱcǾc˖-l~��������������޽{Ν;-..?CŸT tXJ o@X0ܞgd[E|r\b<8R8jEC.6R~f% [m6ğ?諾* ecKP#r fFﻀѡ5PQs⿴CߖB6[m$ȄƖTS}nu>l8q;{o���������������ϝ?^xq[ۑM4዁Jf6UActḦ Ĩnsչ:_L8f(%1.c *ObV.kֱ݅A}MƓ!=qɯsBGbMM*`A+*4{TEl5"j/DR;RFsܹW¡CVDb��������������A?;;'O:/nkjd&Ԕ|dB#񆐃Lձ~\?re"nhZPt I+Q2%̢{2 )bB,ܻuܬPl2;7'Vj uᜨ:'_Om3߆w6Қml)_V!p9q9rq������������� bq_M`S<_Tծ3qqc6 *qb<t s9g4pRe?LNS!J&B}›3{"'o\L袂&o 6%wȄQ@e4P?=ИdPܼB5ͭ7<ƦkҤRgp rرزe¡C>""[��������������6}]wunqqy&`:U0%:?_Qgu9r9'嵪ơLrZnO6ԓ zt];cc9 !*Gv u`&TC7Ԡ65W}/!BFtPK Tc饧ʜe%b Eb렿.ҙTsnG>l8q;{?wn4��������������]ϝ;wt&n,6Љ螜W Y>.O{^Ӈץz| tcY#:^(L)hN$OtY4ڠFg|[JYt鞒`Q-+EЇj1` 1~>^$ JmNPSA5U1wR|#OjgQ&OlTΝ{?9/"o���������������nqGfffcSvs3q DF q`}Ո+GqlY][*԰\Q} PIhL[J@Ojf?%~c|,CZY  $2:أ:ǸC^ Mlۊi6۟[ SJ6odYjU(}#=wJѷD5ׂc-s{C/F:#b*L®>|K"2��������������ӿw|}aaq$Hz>wov EgtIZiS 8& kӲon[%1:)e&A%?B)Q.RM7dRb&݂֡R:a'%d7tRJn,[S]L4UMjnbIHPIWR>_h*`0l˖- 333;7��������������]ww/wu׹~'F  �:RlK K?FSbJF>ܠe:%LrcS@Hu`#FP>K9 cu2 *đ6H9%E#y ;qō5B'hVn+ .tM*z?cKm;KʤJV qE\O)߉ g ?gϞս{w23��������������Jwsϗ.]z>葪RrZ=| Ql8`]H\B>8$DVH:˖l?I Zw[Uqi,ܠ&ѥ (N- 7\Xm'z~)v+!sLHfm -f~Q1U{J`qVג:PC:DntleeUϟgSSSE|��������������MWbӧwqS`Z=Tj=G`E"ѭ+}J1_v8 PwБM.tsjP;WuD_7ue:F4RN.9${T9O%=ц)&rR T=1+=2k -�7뺣GL$��������������KjǡC|ի^?V/%6*E .HҋCATwAvnwyڻ[RwudI}WnEQ18fH aȄ a !pBB0 d01 qyXR#R˚{kow\.{zZ˩z<>@=pW2e)69? D,uª,wٰ6h}Q&鴨T.l $dSD"adˉerCdE(m1f&G[yIƞ(7oCpEX i_ʼn1_6/^FFFs'���������������~*핕5=# ,I.dM> +-'CapW sWk6<R,6ccz2q\=N-gCXH"/ ?XqLT&-&o͐nCܘ/]LkL8[oLZS {m}k k8T k`d)]_=}Ι3g;F��������������<�CCCپ~ݼys=^+CX>kQ$3',N=o)ؒy*ѯg* \1%Ewi $!AжR-9ވFМC(mL7aTƆwCm(7lK+I_F&o�KlIbMh3 ґ7Gn={pK(�qocR���������������^ n6^__B%[8I 7e$|l8_ci.v},%XcJ;d9@Kښb!&axVTbRF~yMj6Xc<ߨN$ <_ Srs1FJkiI 7J'2"K>}Ew xVWWTT 3,��������������5:a3W'{B>4q(5 q=,Di,ٰe&CB)%SW bJ>a3Xk)=7 lP1"̦%>m#DwF&HLFv̈́q"SV8VѤ9m1F|~{F~yɠ|_WXG�xIv\x=zock��������������LNNɓ'VVVh4xx l HїGUl1q1DWJB I>Ð4cE!HY?a|51Tbeٌ%3s{nE"29EȈ`j4q""NH1Uctۈ7^7Ȇp㬸i G,646YZELE^dUMhO)j^s=eOޙnh��������������% {vv޼ysGx%ҍK(${u !M" eY-G Hk{"@H5s?Y%ݟs{6p#t]Mqv%~7968#4SLYV MB,>SJ-Ċl sѝ8isM M)Ũ>R_bPiwq:#眅IJsZ:kB5%y?tkL�xnܸ1|j71 ��������������}<|C�*GEĉp#X<OXև_J&sMIŖoE8"^Jdt궔yĥ%E "Tq_J- k9ިT1ѫ>JS@i਄'B$e7Ub.Ɠ^|CML;56V9ꚲv"E#�z~R .<gYds�������������@dV˟Ŧ�@!78~f^Й$"s R,5ϳ'KJ{<!6ms4aCXI.*×C ؔ3EYRɦ2-5Q%,*4K4\ٺy m[/%@u%I_OސZms?wˋa9V�������������'Nl6 ('lѤ!HK%bJ٣m(~4< \2\c}N*`ɡ$__©HzMF?lLI.Yx]qFnllĐ;(uI1·8bMO.$kU1}^'M9>D=Fa4 tTEUA#xqyl#Aw]^^ӧOLLL|�������������'{fffomm}۷Xp:+݌d!3*Je'D^& :q|Ĺ֥3NW,41$#)i&CeE±Jq2B%a =.e=?pεEHE\nUHv^xFF5}5* T|X)~ #!C*Fe ]pƍׯ`V1|�������������cov: o){V�$ *. /?lc4s7`q}(6X^ФM ׌A}yV*6CT81Z"&hx>D㇟GI폋a[rnhUB6Vĵӯ xjhfL1 �NY6PiN4E`__vJ@1x…16�������������� ~~yyɄGؒrN NJ+*R B:G?) is_M)TХl 2㊰O+󌹎4X+C:cPHbi`@K߲T9L-Vo¹rm&5b>^i=M:>S-1I�(jDJڸo// ŋuΝ18; �������������#ohrr8qbkee彍F�4HyJYd!$ b1AC҂ ys!m4IF+;GqgC Mc,'L,\[`NYřI($.LBzM)NZFHG%b (r)UכTҚO[tCn,!++(&mx;=sy3VU6&U_ wrN:3gϛ�������������3<<B`&''}͟-_nGY \;#B#i ُ[V?9cAYXMJ%% g=10bպ]qmy+iHs뿎nإaj'RDoy3Rǵmx ,9q]GB1&~Ɣ2&Po\:Qk0)f!&ܟ.+m)B8&Ynd?]v'ԩS{٧�j;Ƙc�������������xd<BS6`FFF333齽5OXv�� �IDATϼНa$ aq-s .fI! lrq9.ۖWF)yˤ9. 7qk@cҽ)IgYq[I7J8acmiڝSȄRɽkIA}7&|._ 9xvl>qP8Ϋ%ܾ}gvvv&gff~add�Q.\xs�������������uraaC/// VZu ;88[__{ƘC5FQסPé|BŠߺ DfHtE>J.$Y d+ .Dxܢ:me!!oZJ㪉gdXƉMJylfp5$X=iHZg VI&@|:]GE  +iV}I@Y$^"R||9آIj Ll=88j?9 r:zs}s�������������1455ON8FQ/VZUz%>B/lЧeQd}9NLЈ *wHsݟ1 ` [0PنRPAI\40aHy M) �[r0IC2iߊJtCrrb&M),ߒV1GI#I+rZV?9fggfxݻg\SN899}ݒ$��������������9rfgg777 `&''zhdpK-B4r,"pKI%rθDVbpDgȆft+Z[bХu,Ƌ(ios^C2OqRz*'>a-! C44UM*%flkf75\ 5.TL~~immm~||:uja�j;Ƙc�������������g_8<<Sl?0Xccc͙:_!`</s6 8Y6X8puxC:!263\I0$܏<bX6i` vX\Dðy*^si{1S7jb^.L/N<yoCB: q=[ir3# +:?W*q^2boݟ9333 ###��T^?p Ƙ6�������������� ?fj>7Ƙ×@x>ުA3s 9,P ({8?EČFє k掘ap]0.'?dJ2M,4ym`qESbI:<э1NtTls ᑘBғW0L1QLK6tKoLq\H3YpzbGv3MQZ2oowq2IcKja2$C*2S>⽲�NvZWv6ŋo>zs}s�������������u7455'NZ^^~w:VZr/s>Dڮb|ˉxC8E Ŋk))B,ɰ #D-IzRd@s"b~dJQ:!gvZɚSqulm&IG׻BxT_iS 9L?}nEjlhR1}0>J,V̱o3cB&Hyucl3:<cN5ŔLXsssj�ڽ{+Wwԩd7�������������x93337677l)0X_]1|-O[Pʞ0C;y~<G5V yZ* }&%S-[b:<XSIpfdO�Ma(V1"L)$lo-_HHOM[0[I|¥Gq W6wHu %F51Xc<YQw~mǑ~}ʞ�ʾ ũ1m |c^|ڵډ'ԩSw^@�^ׯ1_�������������=x7O`5gff~gq dM+vhHFX$8lMqY#oK//?͈c㳡nS'\m'rsDDM0±Nӈm($kQfax^\1McLKpKץ$rE]/H؈#oJ~m@/c.6{B*VMWT䈿dPt/-FBoyرk+p…1=��������������^S ~nyyymZZѽo2 EQ>>R u.m M"b-#it V3T8b Y\R_%T�$ J~Wz ptB*1US=~]XU10 ^IùnH8b#f ^ğ-'H/Y 7 6$0¨yAH@f66&[uR2{*]__޽0??GG� ŋ|ыΝ16�������������� MOO'Nlh=v jV׿z]I=+o زK~BK\(o�̀C J B \d#6-'y<@|GviFETDC&\䞔 X^`|ȖIθwx|Iň/beGf1C1Nh9O;Fr_M2bipvܟ[}`WP޽{ʕ+=uԍw4��������������93337666 0Xcccyc'_A32+"*(}PkEELN7yey ]Hs?OMfҐƘ_#ņ#jʕ>wC*$?d##? ")*!fce@ŅG |"e~ٲ)S4dP#%7͹vho?wU+$o..ٻwu]V;qן:u R;;;C7??bR²c��������������x<x7Opk֙_z we|9DWzhְɤFܿI0ʚLp<1\X}TܯEҶ|hcǥ-(!Rdp YؔIכd**3~񛒇ptI@e UDžӲJA8=J:xeKyM1BKo5QAQ,G$tu2$*{\IF{z}Lcǚ$�auuD .`9��������������@><<<_�`ժjۛY__Ƙ7/{JR.^`fbqy裗/( Lvٴ%!,"mC^;m?1ji+wB&]fDKO'9dů(F1ONx|-\+'M\~߬sl*a&a&#B $ dI+P'V8V~qt ?wޝ#ۋ/ѣϝ;Ac io�������������`hzz+++j4oh~~Jzk^"c߂$LQҢ:!s$*pƩJ0 Ô?nd 9D]}KТ7(xSQXdۊSrDnL,$ ﻰ&0z!mRsĉ'A.UfO  3O1mnHETBF6kҐ @IkMB)~P`ZX]]}ss٧�{+Wɓ7&''@6_�������������89z!n.0X###_zA^<<;\*(B~ aL>z�xi_Y|.@X0%(l.ᘢ$^dI@x EtnWEs%F#hR!U{4y&cp+9}-ߪi&B&>]*NQ2rqnG_>ېR 9[ 5I]`ɵkǿԩSwވ �O7ommm}J|��������������g/ݻw7OpckNOO֙_bKE죰fkŃ9}("_qd8DL U@Bc$OF~j+6. q|:خVي7׈}Cg=gL5b"I$ u|GL0hؖVcL#'pp&Dwz˹w6-A%wJ9ZGJ? 8|٘ocgggbzzFFFo'vc.p�������������SVZ^^>ύZۛfcu z~b>%\LTNA~X>o}?B"&ct#f|I[g\#d:|@8tWxat^kP4Lӝwoi!S [LbC<'I@mM~_0Hh%!?&,",+"<o�KpX_,D d/yrK�;Z6� ʥK. pܹcH�������������%C\^^~gz㟎0WZ[WVVF :EN!hι9<˜$Q҆+q"Ġ#ma&T' ؒqN^pdmFk+?g'OS,r7 $aKiMrV%V⵼m s-{[i7k DD~w3M,AC`^ssϴ'CѰW\yɓ'oLMM`�������������:z_!0XGGGN[ѧWa'I$ wd + H BkJ4$e5=&3OVm)8V6_yI3JȘȃ:T닽KOlI%TJ)Ng>eM+X Aj1I6:=FMʠ3o# m1?+vv"fR@ o@ !)k׮-ӧwO<P7oCCCb�������������g/ݻw666ƹA`5~'C~?.,02~c޳}y|߹ɳ%6~F9I D|#B>J^ELEQ:V OHVT!V.JXtln~䗣X#+N|! i8 8cV-T$Sɠ$~DJjwwnܸ1933###��xg1m�������������CG꧖sCVnaaf666sM6l0gm -'a<"k1ηӹy%/!Tb⎬,DN6TY7Dku=I /C#a8q°żԽt"M*U%顼q'Og"~LF{%7MwJɛk\XkmzMK_.+$]^w|V51�ҥK_8w܇1'y�������������`hzzG7j'aV֕/6l?+ !B'sjQ-_;X0搽PюEtC/,iG11w%f?XCt cM~ )aB 9<R+"#?!%bBCݐxe_dc䍋&ħjH'M+Ư $!$\/_  _:A&M%zιϙ]y$f <Frʻ7mOMMP �������������NK{ cǎ%ç/IJ6H. AeI+)bESO0:P'Bo[`CC^lQk(2!#!D~SzV4wwb4#/5뵩3x:\b*IdbX�ccoIC(VЎ tn{?MJ3;&cLTУOӧw_|7=�������������<@.,,\988Սq6Ǐ7~lccݻwQ~)(kKZ@B&Hs6y.l KŴ$E.OJJ?AXHI$-.>L_bEgBJhXQ-#K(q*\}J'RᘰF1JlCϱmK!~Hqzs?^ӤL {ݎ:&\ί_#`oooܸ19==3###Gr#luuul~hii1�������������::jE6jjݹsgvssL|`}C FJ(y^,1"$b\yCflFPq!3[O|"m*s"'+P6z"K80/QPlrZP/R;$YF"*|\ :yRU=2zNhKI󉬉)RŊ1:6GlԆ!YMu8EJ6ļNFppp0???1ۋK.~6Ɯd�������������􏍏///jQ.Z/6l?.l`@2ĿUs BsDiD7xbl|h?鵡"|boC(TKғy5I!<ȶC$daFXBA>{_} T30L $ 6/}><buox ضŪ=f@Sr;~.A0esEJg.VVhX]]}sϞ=8,x4 {wMoڞ'7�������������J靍o94`o;v+1Gyen9*D-glC?$)&i8A#ף%(;yӋ 3>dR6~fY9N̕vmfwSTBR>Vq\CD(.IN{&g|#JJbUSJIȩ j&9'~aV"㊰KLu.B*j8~q}zǏO}lV<"^|w={#G7�������������𖅅+nccc ㍩8}_{_5x<dRH91>L61=!z,=|[k X(:|ߟ=e'9HC5?>Hb[Xhċ8$<}ۤ[StNrb\:2#hZr&ݜd}ӤRin@!u8̝;w7n鑑c@!w㇇υ .c~�������������JY\\jɕc�RZuZwܹ3mEWc,x IGKXh�� �IDATL*!^L"&QCt DzȚDlY_חk#d9 Q$"CixGul6 M ڑ֚J%Rֱ-'2#.* ITp$PlxqEiylr|$m4MT&',V%BMnH9Ӓ_#B-1rsݞ$�tϟ?Ƙl>�������������sdzz֗j=Zvj^1fqQq4aKV;DQDHK$3ā{@'!L"HTB"M>̐F%A<qE�d[?{dKLXGs]ѵ&C5bILy^kRgS?%[NAȿ >b}J' fxDžK2\d>6kձ<C[p}ٳgFa/_'OnOOO1f{�������������Oѯ{{{<O ԭG~y^1vCeez>'83M$>ܢC+^{yJI{M$ɴu;z$TPԸ> &䒠G]1ӐU1=EQjXeaMt%1Oh Lj%ӢRS#Q ,} sϷ2޳e%|grpoE%'u*YuW^=766ߟ>}zIY4yfucc;Ϟ=_�������������- Wyss8Ǐ7޿y޽{o93*+7ȖDZ|jaWWˮodq/煌A^I[Vxt=赺0K[D4""M|kKJE- F(^[XI^d8D68# PR)BN&+1yM!&Ril\gHH@I^MlzX_358Oƍg~jddx8\zx+Ƙ-�������������X;j+++j`ժj{Ν0<qO`M12 c $ q<X")Bk8>'XB}/2|8Gxs IIh'9/d@ͩ3ث2qPXx?7�&ƇEJa Ns"b JT;s"UgQ䦕dOPz Bo:88jҥKGs�������������#333?166V+{U.Z/1<I-E$B(EٷEĤ!HHj#q!đ`B) ;,/bCn!w1%WQ2ddmbM E1s'α1aŏ<)d lnb\m֔b5Mz: =ҭ3"|Q@Nȯ$6Y Ae{K߆y/V4<$٪_j>ٳW�<yc�������������hoo€u/o6<D*WP~ICFz嘑.Qaܲ HNSPax}]DSK \ Hy?PJ~qjz+~091"[VT񗒡&k$b➨�NvHp$u9Ѝs u6%M>!ay _Ҧb,+-ZgTzѯ>s'}3AyfummϞ=_�������������#- y[ ?q޽{do'�UiF`K\dt" I: 9l?dKq!ŖMZ!]w<q~ʼnu$JL r1C.q㬸/>0"J|ԽgLS\SQC2(Q懜 7ܩ/wP M˕|/df{{{bjj'GFFO~�vF㷖:MFOs�������������pfaa'WVVe` Z;wܙNc AdТ,p}*mFOK$H,. \ YIHrm2"_ Wε}S{OKm{)-m2YŦcsCO%L {.UO>#p:m*䶕yYI}\Ng.Wr^'?888hZ-�t#G1Ɯd������������tdvv_|AT`>h41=*!CɳsfzmHEkF/tŠFtn ,*?^Ҍpi[6ȶ0xϳ:#6 ",kWJIŅFgVOVQhQ $rmlIF*d<%-"Nܯ0w[6rʚId FQo8GH5JZrrk~&#EVmgϞ} :<<4/_~ɓ'ggg3Ď������������alloLMMX[[ƽ=lzzѣGƘi! zƒf>L`E(VkD&@'%QA_֡ 27=F֕כ֖Qs?~>H-bNPc T{RIH'N%mQ9Z~>5f 'C(b21d B@$mUK?_􋕵783#eRzѿy̙e�xpn޼Y][[Gy[ �������������o.,,, `'''xcc̽{ Bs. 6 2T?W#&i5)~a dzk*gL:=n|qiی "LR_|sr3(kS1Dsx62b㒬%j"hH-.V&e2ݥћn[HXᓴE5ňMR,~,ul\xbMqF=155>x@]6vxxec33������������� TO,` Z;3[[[eQ\}IsITQ%#Ι$!r YH"r�%pa4 KZzIHbzdH+&IIPoCqa]z*iMw NHʽ4Dl=C"2`W}M&|]՞R$!>;5tJQ[.nH~ 7/XIR7^ULXWJ@6:.e9Vl0`.]Z8rȧϟ?Qc)�������������#333?566vmyy Z?Fl^1fiVEI|%[<x(Y# z4 } $qҦ01Z_q@:N)wB<1Q1VЈb؊S\iʱ]m' -!bOdPESsea *gtov~$JwIZ:!cX)ي"4~2{l ȫ KZ]]Vg^�^o8y1Cl2�������������FGG9-`n9rYYYy<*0@u>OϋF葷6A$N{.Fi;LI&^׊}Jg|T%a{&M8oS>]qNg$;[=6*?u/.o'oi- "DC02c7<%khG/Ϟ$U=1G㒛5) ;eիWϏ3gfˀyfu}}������������[zkkk-k||prrnnnN~dFgdBBȠ*`g}U$`"N$"_3eyFHU^ix _3,1T}ҡdkkME5yBS*_բi$dq_}- 2nmf i]χr[fn&jRcyǴP"̷8c0EB\>Bxe퉩>::`vXZZZ6<������������2jyaW~{wwwjkk#xe@s& e1ĉF=7V=#B'2J%iKj8)B?t&nL~0v\ !Åk0ڰ~$t=|`‡8e�_ #'SLYoIIcؒL~e_NSL% $!##mmv=y /t>kr-WV``.]pȑO?ƘS?�������������,Gfggzll[_�Ÿ5g{17HG~?&L $Y .iܷ,9%+m;|9^qp i@C8#7$bDƥ9 | : WTGQm Fķd-""L[_b(#"d t1H$`kCیmEJ_nSL4xS24G_\CMa1U+F۫_jzKl&0X8qc�������������Pkrrrgmmx 9+++cg_>a[Lbx_cc% U0N!|ۅ?sx q?\8rbb&Nݙb7ؤÏ[1"!UvZĽT\lNV4o0?'6bsBQjˉM)2 Y[UT{jVR[j$9SW^022U]`n߾]][[ֹǎ+l?�������������(o]XX߹s_mmm5`NNNo*uȂ kU0DlT) G 7ȬBqx^X+$M&ϩ_32KF:;d6 -ъy(%94cZ_Qy戮".ߒk:M, TELbv9˵F 6F魉+>q:*ƚՄĉR %{.K~me4a%_~~SSS|ttuڵwR ������������ 7yܹWO? j;=Ƙ&73/q"ATFlqCu-<80:!)&̀ Č|ЈwJp̉sرUF Q3zl~qɵZu)V5<Ӕ)dȣzNJ`:('3bOESD,#qq{T2ϩӤbP|ZdBuI/SoߟjZv<@.]?j9^������������xѵ+Wj(0` h45dD^T3%p H$'Y(A_?/#1tb "T]�Qy�_$]J6ˈU,7_ld "hilW&|G|/4D HwKi徥 8^{+<82b6F}5eɧXַ\omUq{Җ9ȣyXXbŭVgϞĖl6˗qĉ7 q �������������<?5;kkkg kzzš<cy32xI瓦S|?egv:ƪvDa05S\ f<Hsr6+шm->PކV5Ĩׅcc̯hNIeCdB?V<٦[Tt wj\:/9$>u!ޕ_"Ӧ"C="RV%^ӄu&%qO==ǃW^3gb}vu}}gggo;v~�������������j;w7É1l6'RIx~Ҷ} @<f D%^Ƽ@>X5jA!y}KYZAي0#=\NQ!+X2,"ьQ{M#a &4k&k`Ihbi8$0$nWv{XqRR+iJ7¸l3W''''|tt6zT7<������������xLL...QZz~ jݝ~]PP֬4^}$ OLz0>%y:<+@H ĦL+Z;U1 0a>.Ne!I TB[9�~bM>UFT i*$wĭ++NTաp5ĉ_qOIoR)+0t [_d0oíoߟj�ҥKCCC1c)������������#ώ-//nղH`>h43d>"P tic2O'q!BCS\dy$B+2"~mH?Lzmua;FFGpNgeHoP;]+i"UJS%GdD%ـ6O2d>ƅ<[Od^X W5EGk|Tȉ>io/iZo={g `5NHzsss?a�������������xT?~k&&&v]Un0X/ geeYc l&)^?bۆo塌P@!|_U6L2b|",1C3iŘ<Tڲ3uカ2Q~9T*z(=D Q| !\. ߣxl啍+2dCĜc'\| ض+&V+- W>=22gΜŭ�֭[k׮[������������{[V[s/^~} nllL6a�a~!n'LC7C/JPCkD| �UjW2~ *~oڝvMƎTTXEWHQ} OdOJ-6^HvѤߤW2Meń44JO>4vnS:^'cW_/6 5xx;�6+KKKuc̳l?������������U*RrsvZ탻S[[[IϦ:֩$!N(E&e.�|�%\Dd�D V r)iAM6r>>!ǔ t1`J.E4}tk\V!>_4ąmْs[IkJ#`d͊^Ĩ?Ɗ۠K]Vlӿ&;YJ>Y<Չ ylTPhnnn~VU0`.]ӥcΰ�������������`Gfggnttm0` n4cnO4It"F"װb\1Ǹ0�� �IDATa y,[3di ˨k9]Ꭼ$I q{zDbAG vdY7512SrLISB6K|dINYZB2e⹡a'䔒gul^~swY'[&{W-Vaeh~^]]Vg~ VT>ڜIc�������������8qoOLL쬭}~� NZ}ʳƘGA `>5Q<hKVMlhH3IF|~;*D =% > !L4a�K܎{.\O;: ˊ-N4kCp$ák& e}^46qqNFei .#ڸPߝm@U_[sW^}ѣmrr%0`nݪ}ѯd������������ j۷cl:0XO=3gVa2l֑P"Bn�4HPHtYEN3b}2IÊé}2b}D6=1cC^$̧8/StɈ ;S ֒>#.LE�32钄Y|Ro\C֖DWjjNװk3*%. T M[[[;66ϟ_5<������������x@ϝ;ǕJl20XîV[aZ#BORE,$&>/KbçO&Djr1q~>!Dp%iA0|~Z\/ccMQ!}pMm(edMYşoYZ2T2'i DN*ݦ`=I'Rm%i&'+20$,i_iƇ]dFW},nT%.Iͭۛjg7Ɯa������������N+WvA[XXtx^1&7[:̐_:`dD6b8b|ğD66 r s&�S:/~oÑ+V洲ЉoBA7HzqzԽ pzlq`VM.$aD֬/ۢd$hС@G5%N%_0F56gT3<vVWWj2??“5NHssss�������������'''o}~kfffZkeeYcEєf4dI. !լKz/B+J'؂:& $vPs<29jdML*X"C26[U W)ڢĄϜ8.k֖bHWԱ"Mם@2Sz&tۢ)Uk}_7Kޗ3iY0v=sj,]IKdƔWM1x=YǎIҙV]7ƾ������������ }vV/F<`zÉ___hZauN?(tdKB)EMFI)2;Ą'Nj6 '6\5"|1ڡŪ"c)ţ|mqδ+HE_Q4* kpCk&/wuRuկ/|7+-sNj$>kyk/X)[khݻ5199`W1oa������������sqRzvZ7oݺ5q} W7zm#ۢ&#FY%c *8D^u #ZOlhF'X^%$!|I;]sSM.TY[E 7 N!.܄(je| Åc4!pE邓%3֝pmY6S'N*nb'K$I|i~u6EHGܧ;MJO%ڢ0>GUskkۛj|١oiiƘ33������������ızʕn<<0h 5cns"r ^ PjQ;w)qvʒPTD,BKH {ımyEgDK]\?*`uؤd_+mƆ*irR4�qB C]ljTn[2٬N~zICr.%@E&fiqa~3*iciguu=V-/pj6ҥKoߜicޝ�iuIVV[[fV.ϓt M7":HO+ *0:(�(L(-tM/HUdeeUneyē=|izZ|s=B_F�������������gϞѣGC/�6335VCJVC!z/?e _@SPƛb0$\+8䢬6oFen7:t q]b:Y}ek7)?hj_6.A6X"i IL rɆ]Bj9  %:c-"kf*69ebjcN###a~.]9u{Y~������������sss?q�sOLL|Eg_\$: D`F!*vB !l1B"\<e4N ax5Nvu1s 2]}&4蹄Cm>f4T{K\<R%ـڔ)a: �:r*an!B!b1a^:pEFި":lB-އ&?&) k>>t)b2'TƩ/^dsŋ/ӧO`ݺuG~ʕ+",?������������Ҙ|E +++v`FFFvSݻ}lI>-R.eEV 7A }3AS )Fl=%5*`+6/^u ̷R?LR? ə,d? ^)nІm'; UG^@NUM65<c>SϥzٵKݻÇ3v O͛ի ������������xaɓ'_T /vJe^^CyCb~F8gyED*68�N5&s0n8gʪ,|z.O ӸU:9֘ Sp)#bé00f)E/R 1N)^pς$_͛QagńY9Tt>:9^i+*(mγs4V:<<<v+<`ȍ7̙3Vl������������8{7LLLl~ǏZ`fff6s_y"ryWA�CE6 c\ n9сxRk26"<@B19KH5„ɯPɑy8w)\6=__Q!9|/r*QbKr| M>'{-m(zUHJ١㯓n7P=9Лayb`%<#cjZYN9'Nʩm`߿_t?vҥW^y},?������������{ܭ8vuܹX[[{O* ?SěV ch>4O߳ҏb:!Y#KWߝ{:,p1cId{n,&tcL̎=v"LҫG_GM#.NІ+[c80ȓ>s>>f&,}&)Mpa^a܃g;\v\=ɓZ__ӧO�u֭<'W^]7������������s‡  Hn?p޽)"%[r 6U邪E%xbXC(j/= 1DƵ<R�! $/bSJު1;n bBzc%Eg+W2);T&&k-"z!!AaZGZi+EO)j<<VDRp$^Wb1m'a,YhI׶骃ꁬ=~'`挗;wÇ3V 󿔁qƥO^z"2������������ϼ9yһʒWA7u:.B}(}ᒦPnM}q!G6_4oC-.) " עsQޚ}[Ha&ZmbG x)tcHh15R_0PM+:єS 7E_f.SO5X4z,蒏:8(VIluyppyVWX`z!/>sl������������9wx=~x-kfff9[dQSk4IadA*aORXEE<?/ӥ44|lo {h|Q-(t–{,0jb/q*,6Rl3lC!NVQ Yck>>Bé t7> D6ka%/1WZ3a}w410YKKQcS)8ޯt= Sqbuuw^y������������3sssݻ޽{mܹsO&&&mmmm{,?z^TkITN Biwq.B3 >K$-i<w䢛X򹈚_s9WP& 秥g? 㽔B1bpC׌[E_ºעkS ݻ7 nǀL8/H즡A%>*^T캛TiFQM1O!FḥjfM>911gΜgu}˗/7������������˗?TGVVVf`FFFv{MnllZq1\,0qDbcB^ /k+Q C<ǧ10 8f:@M* 3!;Phx\PR W]QN UY GL'e*$5$6tܬ]:Q&M/:"٘&lq$oF5x3 ڈ dpoLW/s`g?y՟I������������=yʒWA7u:.OO 8*Wo<пJnBzߛ$;j &qN96IB\cm$/lA<|ܸamهm1)sqrMT ,0Q~II^H/b$*�T G|bkK>ZR| 8RIi#V1sV^Tm*tT:u@7L<s5mu}ppyVW^@�qƻϜ9j~g�����������ܹsxŭ?!M-˿QDn;]ЌQbbs&as1i dsFNT>8U_TF`Y-иʌi}&DS%,2WڤI6Gv!츺ᤨJ4Τ/% K;BJg&A3lGZ5&Y/I> v?gddwMMMm``ݿvdzzzW^,?������������{{^w߽{Is= kkk"Y~|f ")H�Yۈ9Wy{ji8ΥS#I&R0!%"p\8a SQ5T6:b!4vOèT) WuQM%E/ CwuԷQɐnogiJ) FSPE?GﵖJU!ךޞCB4yxz}}}ŋ̙30Xo>|ʕ["f������������ut/#Ngkddl?y޽ͿtT�|ƜzϿj1R!TUȢLc!?&r<D!gl169!L1G BŒ%~Yr[np:8R+ F".Ht>DOLdጸĕ"Ϋzf}%,]@"9>p37,^6Mm(ẽ+=*a]Lx}?^s|޽߿?j0� ͛7g?yڵI������������5mZԩSw%6??_tJDv�|TgzjQ!]HD#谇mˉKL vB&jC1j<HX߲BEe-BV,d½MùziئlW7rN )ԒUItF:B*aF")]WȄq>;.]Ca[TzŎ};FN{|&v>88 upp ׯ_ӧZl������������?ouݯ}Q5;;!"_f^~B� RD%IF.SG89}31{s{ TGfǷsJm-. a{  -%KOنRKYe%OGTz'܃-Qb&7č3ٞKq*9z0G„[T}:s44d^ڒp=U.&%5)aՀ__]YY155râ{gΜ,?������������pwy�<Ν{2>>S"3,3^_y4$6Tb M$1$Ko8Tu\Vb/DQBJ !UҎ2I(U?3 fm>z䷜zlp,b'N-;g"aK0TAWK- kjIɯ'}t5[TtʐOLW}x?SW^y6zr-y ������������D._EQ|L,`v'ݻ7Go绘MpUR%Ct{HxTB,ͥ꺦m$R^@_lLSiq^3a^4OV>w1d&lQsJ5W!qq*V9Mφ}9Pt8pe4A{OٳXNJZ{L`8'rAf+s_xtW0`7oޜիW?$"?������������^bfggS:(K^im~~_t:_%"�<M=ynF,\mRE%z'攼=FSD ذJ /'T<�� �IDAT\mu AŴD4AR&_bC+0]7 ǤuEQsx( Ớn ^u5E_Äb%4@դRdP[l^ aQ)ƴdϿ%AsB8?�ONn; ܸq]O^kZ<g ������������29\]]=*|`.]tWD|yy DdUCHl;qN<BlHc}o# E3t d'>e熀M{ gpMy}ճy;k!i^.K:GtnJFmjI"oCiBC{$KLP& ,qޮ)9l �NsMnMMM;{ױ������������x snnnmggooll`;wطܺukZD~ $|Ҽ/禶P|jK)B9:'øp9ql#5sN3$աo ތT!JG\}=CޏBiJdՔ 7աΎ˙mWS؃|v+M#z|mzKs=yR]# F3Tq^sk`O{Ν鉉zW`ȕ+Wn[X~������������Z/_hQ^YYf)[Oܻwobkk{LU* B>~ jՈlj3U^*uI=pU+j*j&Ne WwRѽRݶ-N1EYLN#=ؼCsRuoe*YPF7StGCH?G6y&ВG�iZ xSEodk֨0^g\�oota7oNEW~HD&Y�������������NZ;uʒWӀAn" 攣 Q9)ǀI3vÞUƛ դiIE> \6b@ߦw'i84Rͷ(jkrsBzQk7ЩI؃c$iLK1>siDDK?9m(*sJ59iL[x9yW^HUw7Nʃim�|߸q]O^k? ������������x.\Sn=z`+"_VYbF x#ؖ 9 S6al nE"a :jcKZcx4_ASPl*4k\ײ70NCPL:cMxCTkK=M%| ĕ'8^vY}[||l%TN󇆆~& ÇNSSSΞ=,?������������#nZ( օ i ˏgGySIP!8c%᜔ !YQ^ !N7Ml7l; L-4?w&&"ҔH۟kWEQ681v�Φ8{aC K9EJH5!GABc4Tgcfssc>kzxDU5hHΝ;u'l0X룻?|ʕ"������������ϰ˗?Zu)6 jŭߖ`>8> /MP#5xըb#ORI;?5 Y(w\=L@�{{\O| rY?kR-5\/_a6"MQK?ҾI8'-mE^tM Uۛ/b'm[sһZP$KeM*ǵϛmjnW',k83VS 0`7oޜ*W^L������������xj?6::3`O_v_-"�<KzIY&0 EHt& x=$LB54B$Ŗd@j<Up#܋.pq~B%">nP=eD*xċu!IQ89THQ,NAKKc�ERnbiXZp6+eCyKE%*ݒϮd|1}&T'4vc7nxӧZ?������������.\M㛝N5 )[.//UDXk<|,8 肌H,WK4-)0WDRk B4u9H,M�9aM8Ѝ-)?a(x)|={B*T\kHlCJM k3#yӧgow׼z< ZlQ-Z{ I& HS`)Y|T;uK 4,t>hhOOOo3`=|vhjjٳg�����������v{}{{onnn`]pa… vuuuZD>Yc3(U{0#aE\C67-ÙPQ 803audcn!&0f>T$/f(GF#$N M\Au"T|lM gp_mn@Rc]B OlyqśE'CYɃ!8~x=Gs~0=I.V޾}{rbb;Ϟ=Mk}}}twwG\r[D�����������`�Z/_XQ?t&Yp`FGGVzxn Hu0{/*ˆc eNpN+@HCtfbm(/?s)D6c[]5MYQ!dT-*Uw=B]2>5ؐДbi?9k8l&& ߿yEM ʨĐOxbv'nj-VL<ʍݝlZ_ryTQzD������������OévOGGGZ* RQ2??n" )P&;q%F\&6ol76CF(m?gqPy 2"K!ERLB](DMB!rP5*SpFe(*Qk]Q'렏3Sb#T\Խ�yM5τ4Ns`I38VNϼnnۿv?oܸӧO������������� .|fEҥKwʲ巉 ˏ}Aƒ+5HD coJtF}Ps)QyHgǰ{ȧ<HPW/BCwDEȧ A\SKBp%>*A4moPbsZOzi(o'1?ΆJLÊONLቓf|szyo`zat~jjٳg�����������û[e!p~֭ ˏU-0s K6LlOM*U>Ǭ-)Ӎ!TDjXn֚b azE=>qH,!Kaou^g"\ j)Mxo2!٢~+&VZ+I qh/&�ֵvN'k5T-~y:I/m@򾾾ެ)i<_ķ={  _r嶈�����������˗?VuIѲj{{0sET jH͎Nm )Q/Sl$oO -3bcaEͱR!yJ:-o;)po|*1%UףUpZKZsXTTCbZRwA1Ch$x>Rуy>I;]RNyt0˂AM�h) Cu ^wNZ /Gݼys(_zC"2�����������5jttttqqqe+_ E!ۻv+"�|8aZH?ض"Zf"{?KgSCIiZIƎ0I鬂.6IY[|MLf!i͙&!Іׁ{If nפ[yJVtW1#6QIaSRK/37e0L[QC8:}Skf'%*M `v{>n" VIpƍw>}zn^-������������666ov:+X`fgg˲巉 ˏIUoa .RéMذHlij03V\鍑Pd#l�&cB1'{+յs MAm4( WP7[HUԅ{FJSG-nnq*=L\M >ocT\ߛ4mL(M+&%\>v9w9wL`>|Xt:?8==s?�����������@D~SZ666… ߼zID~NjUQHB 8 LX|@r k6ؖ h8sZ[Ks*x 50B5)3F%q]Wђ9N\_Ϯ*L10zT(QSeS0A QWp~oߞg>a}|mB�����������4(K۝�kttlZ?5}UEBw{Ru&(yNExzyݩ�V4_+׈4W{uv .-hLcDe! Qe+R+HCv0yg#JTuS뫋:F/P؞xM6A|<d6Xz 9*a<'ff$69\5ESnnnV###K0`SEQµk>""Ӭ?�����������KTKKKo)K^( n>yEJ寷>Tx\s{ΜC.N8u)`ĄWzXER~�FcR%qRuE~8Sgl:h|Z0֐"6*@TK &5%cʫ^?n1CħF m,[a"*Pq)udltFvBSL2Ӵz\pCyRv_vIso?}܏l����������� p7ov:+f`fgg˲巉 ˏZr*MsznPEzpiH`3{B76!s s b10:Ip*ɳ!Q@j1g6^mǨL U_E'a kwCrvf8 d! *+ٰTQ`m96fnv:8~]v+++`jjj�����������P~Sݾ666… zuuuZD~Kd!kK Gz^Fq+Rx= 7됂76}t,D4,Bn/e!*ܡjUjs055M"OpoZ\*0_HzU%ofרjn*Q2n@U= ' kY\ 0N~Y{ӷoߞΝA�k}}\|y]D�����������x-,,|(t.`VǷ&9~J{H ż{O'!P^=C)evu?Cɘ ԳM6cqtɈMQ:K׼4 PF̺8=RY9eA'YP#ޡ ʡ3(ы&h*^9RjP{l�ƕR0\or56x޽{S?922R`-..NE ׮]L������������ϕW?]\ZZzKY 0HEQG.w#6�/3')pB(!lLĶH^~ )Ƒ8T7~SqGhS xz.l 4TчY:aјqP"ߟ�U4xd0~O"*a+RT̍v5zUVWU`0Ia gz8tYLM{l<]&l@lUqGlm�/կS$�0X~ԩ[vl�����������33cccN ,hyy"ID Hդ!4ϪO祶,Yz?6|6 e*Dk:.ېfVA*LLkӿ鶓Z=.bۊf ǰGM䌩gtEh19;uPGsԮ*!͢.9PRVZ/g'Mm*(b5|Q0wS@nv:or�#tvjjj�����������x&}IZk[[['"`?VWWEC,?x~~ɾ<HRA|HH9$nzi�\ 9nmF>^En؜J)cԣ' &h6! M)1fl#MXnv/oAT9+sl7ZF$g1N5Rd۷ƾܹs{X__?Yf�����������gNjnw-ktt񭭭g&޴'%}ٰHz>5Kt=?@zgߥC5fsHDg |y-iZ?Ua u*B,2jnBIzWx&fN *a"^SIşE >Ȃ*1`R 8 R0|t�hRnmm}{fggbddl8St(\vDk �����������xnť%RTtooo~uu}" �c_w5F$ln9ѭ'I\#NRH&ZZDLUx qMEϮj"\ӊ`%j\QIfn7'::.oXQۧl ’u:(QNx:RHU^%bOqJȬKg[*"*0BDyK ״okf\~ O:՝� �����������0؟t:_W`.򋖗!"]T +||2k)2YŽΌ~n~a7В3tIAKE/>{4GS%Mz"k ?/9<5 mXm�� �IDAT݀{�WNJJ 6Pc{ו>YU] 5RKaN {P1/{r/yup+++o/sA�G755sod�����������/iZ[[[ukkK ꌈ|>=NW?f,$ݶj CMETA4bkϳMsǵxYXd V߸&a B{_A<C&$_nF-1;n`Hm*1T/:$>_/2ާKt6HmWQ|Z}v,FW5XOϬ͌}˹sX7`O݅^H,?�����������jaaaEQn;5::ZZښ~I-$>6q<q|ee~q朦 ܰ^pd9y~PJ"lR#|6T81.ON7,H1iCcÖ�LvoSihe0kIM2NwRy5|-dI(uz+sDB:ac|Fʭwٟ)YF`.Ek׮\b�����������~]^###7\ RQdG׊#6�8b},W~@"7,M!W1TWs0S'ydc(6\S[ :RHYQT\ulЫtD8jP) }|2p PݣZ2qa]𙪵q5E^#+S?kW? p]I$4?F'Ńկ߿:77 _xԩ?������������&XYY= ,hii"eϜK="}VgE/6u"|E,>^ӎՔ7T n^3º:�I"Y#ez~%lpbƥ:ve4-x ^J7Å'CbT QHŧu3~vٚZVz}�' >VVV*"_>33s5ѣGnee}SSS;ϟ_Y~�����������O˗ZͿu%k||ꌈ|^/(#$ J6R¥6f~H|J礓\tS{J~g|4Q(%txy6JJsw9jeq"C*"J "q1a č5/vtH7l7c0V#\TN^F>oCU؆rRtlVMP# .s`?z!������������._Inw��Oɓ'ggglssb}'x\V@M�; )Hgx)^2ok1PQ-z1|\_/_jx|o|yU4GD/V 櫵 _He$Kd8)AN9T‡͌1̢JMpK&rA!ki~EXDգ&Æ58ާJ,H/,'<E_wP Ţ(>rڵ%�����������+sss|ddY`<~xauukE[�<-M/cy>Jy= 'Oӈ4:5]h$߽s?pcfyJ|:Se*8q\?cKE|QL!1SC*\m.>K@?F >^fj1!j{˟,15\K??*?Y݋ӃdcR*�߿:77 ,o9}twnnQ������������o9/xjkeYkyy"eËB 1aC %5w"^I<B;Nοz_= uG,1]!1P$!*(UyS >+o$^@ KRApSA fEDmtr]g/rÎ9+TH<tF=q.o9^tI=Y~|ǿ`O[Egff`=|Э/$�����������^2_6;;{gkkwvvF|`;wOt:K",?t, BG @m{myH)h#y`DB_CA,h/\B(Ey d}>!bWWτV= Zo _}ѫ5B"'-v~n*O9y KEڊ3?vTzA4",A `̅ `ݹsgdkk;Y~�����������[XXXEOl60X'O<t?ܼx޽E}_7cz>U^wfc2 1(/dC.<_B&RZMЍ+D%r]X0M+*K A"i)zԂHD'tC/71]4,&Ag$/*2 g7d+ug~|*rIqLg`}gggrvv###Ā[ZZ(׮]\b���������� 敹122rcii\`%>[nAy�0*8y!e8,2EE7H=6'`-|CB8,U9\iH[MtɚUDݠZS\:j]1{5LLm*zBjqC)[CJZ&&<Z5wсs MTz679 'yRQ<UH0{64$� Ѓ_O�S\~-Ob����������sog`CjZʲ|һE ^hp6;;:?U{y@E[N\,cEDԥbXnP$T3{C!-aN}BK)m%ދBtlqf,[!RsT<V.Gw{ `JX/݌(Y=MAodL.=4zfEKS Pjf6iR Lʫ 5i�oyҥK�0X>t+++,?�����������xN}읍3&5>>ܹsΊϳ' N ;u&]~C8C[8P�' oԽ4:kU$R$B&4SW� NMۛ0L{' tEq`E%[I&g7W˒_&1:C)P'SSD\ٹĒs<�y5ޯAX9<�u֥ .?fs/,,w�����������9qeaaE?i`<ypvvG777ݻX~`BNׁ |R{4ﲯd݊b)3X1$&"&xMP™<b݋\<R4*@K&^j8j.&QP _zu =N׻Q7;⟜!bCKX޽ \z`uZKX=x;GP-z�<3ٙ}H�4QŇ^^&�����������Qgʼn'/--}> VQǏϭ~U!_د[R!BKU<r/j&ѹ 1"2" 0/<.l�$YB0%6dj] _!T_Jf8RĕE!Y(wܫǠA aG-'51R1zC橶<KVVR%s|SN!=P!;SdM+1d iߤOkC01Bm zssss`@ʲ7n|ӧW/"X{�����������(&&&ﮬɓ'Tjnew-x65MRNe KU.6/%~)U &x^ LPC~~V~σ!>/:%nҩEHPD ɅQ9t$\hRqBҿ6DF$:6)<Wab�&4C-@LニW * y5wE_Uh%~jsLYZYYyfffn5`=|-// .)�����������~Knll| óg~c۝F  M $wZ FԆ5N$»Nޗ/N2)XQtjEIsr}6dXw^ݼWFBℳu"4TapY*(R\}LUHZ1_ކ**bknREqlu\Ò?H!7`B!^?pqSCTssQ}^ctH=&/aobXkkk.\?fsߚw�����������`\|Oߺukɓ.]m�VT"CBg$ `u E X9DMA]$1Fh>ZR{}Xk6`+(�JbCc8}z1Ub2{a 5FZoЁj[9jZM9,0f3@I'Uưg5MF=R%s-+vګkR~({TM-z'{`}-&ovi�ϴr{{vvv&/]'N8dZ^^/W^D�����������Oٹ8q`E!?[n} zUw j}j/1CVx &^4ԵBS{J,b[Jvd*L? (MIa}VÇ| z7٨S)*ݣ&QĆ+:{X TB*}ӠE m =J6$:ר2ߏWB_Ge O[nɓ'W>d`ʲ7n|ɓ'W/"X�����������:+.^mϟO<_Zղ,߱D <?zo !B[; HWn �9t.A\o I,@OCI5FmA7sd@cQl$EBn"%ZYLF�K $57 H':\D(BF0G!W1ow<N'C%zJ+z`DW5/X$[G}&R}оR}SO_-y̬k`=~-//މ?����������׃s\tݻwsgggEk||ٳghmGY~EPpIP.;M~߉ ~G xPكɮSéF)<g`m>kӌl~I5V>^nQC+ lB3W!rjq o0!aM$êM1P--aL O5kϊGctK*[< 骦Ɣ*RWBsg.={`mll|ȗ�����������3{í[XD`N>}033777vww^~#ϒۯN ]5οjGq6AI#p7LBQA%V\=w15t)eEgCtX"_Z3}z^<I*5JzW.H]jçRF:KɎ ׋?:S{RsyK$ۇچ`Bƹvmmm]vs"]"r�����������YYtEkhhά)g (ջG/)wN(1THCs )"NmZTTDR&!έxTJ\oTR@.77t?nQ蛌3_j7LG^|4l i&T&"B$R{=H y<-+}Y; %LDO</BD' �[[[vs9�Otĉ/_"r�����������kgΜY_^^mj5n/yee x1xI5d%M!br g_Vac")g`2U( ca0ތ)Y>DC4U(!tu \GOR} -/UW4)֩5ݪV0g&І_d0!TzM*Tjq$m0DnP Ѝ{q|G^MSl}%Y3�/۝NKo`=y-..͋/~{ӿ+����������׉'rfff< `MNN?yt:+"K,?b>uZ8fsz& TB?8z?zG5ųH/lj-U X=:~JNx0s̎逃.\CMЉO_W=~8" 06LzLi1OBG57c ,ܙ3gw~G���������� 7<y򁵵/b�vsǏ�jy-#B U˷&#|]Ǚ9CP Dd :㪀B=jfbI1iZVbp'Z\f!Ri &yK dĉvcxoCjoy.=KŢjTzfjv5JeQ>tӉ -^Z=,f*SYK1e'5]2_k¹?ں8=='O<`t:gO_vWE ����������Kglaa �644ܾ}Dd=�^\. ;Y6@jgyQp\lA {~|pIlamE!>+iE<ĀK?2I 0GPg:1|sC8OW Q6fZ)al"bX$S7b1{AW{!xM|at0PL0'}4} э8M۷Ǐsss?#o:q˗/k����������9sf}ii+yivxxxQD6Xw81%6~+ĥux)Wu#q~~ϻ zWQ0]iZVkjP'fTI * 㲹H,SvXߵYTL]g3AQNEŕ"B*ИQ+{gg8]ANmсB/�� �IDATx/>핕/޿}vvvɓ'nqqwmNMM}Q�����������pN8۷oa`.^{ԩtzmE/^lQ%'9`}lAѭ!5%PtIs«aK摘H #)™)R@x ޤ;U:oQN ڤ0$>A0ޗE Jmֵ$ƑgIK8 4RZ 4T%gC!]pPW.SKcgΜCy^__v]oe����������xa|'O۷oa[:}߼{G,?r:wyoFJb^fo(*"9D It! T ;U!\S8+Q=M-5ypcNR 2.^KEi<+ N X2qDThĬ*kV f8{cE-R$煱V]LL+J.CjsС};vu6N秴K?9933'O< � dYꚮgj$a, bd & xcl12a0@lP�6h*kZ*3ϋ̼;7[i:o{=wn/sl6gy^D)?��������������CS/_~{Z} ��j~xj{{D=�y?sD!{%` M2x~B5$8NHQBJJsI1BZI*B:L\% D`jPh"TH*]NT֑8{M]̱`)5;)*!~IK+a-JUN|oLؒWqR�x,n߾=7??R= x'^rʯ��������������799###;+++oh4<c6׬~Q/R7>ȟ6wRGmH + ӎW˞0&SY ?Y̸'Qө]pa:IadI7AlUD2<7+Eщ#)Bₔjb6(N]6zn _Ģ*meIdU3sHerN?u~#OAUJǕZI^.�-wu׮]K.I��������������/Ji8<<c�zح%y6y,!~g}zԱM:I+CTf(#}sIB( $qddtaJ*Z-щ+:%H;1eE%^$Qi?88>8Hz|Qڕ,5E;.@goxmhgRK)|&*Ej ⢠㽽SPa6<%_Syh\I7rJS��,cssW<Ӈ�p_+6��������������dz/_^}a{�z^~;wg�ܐy V ~CQQBNrYCbjJ#^B;AUl.@)+(!!&;)^8"z>:%9o4Ovo0) :E⦫$տd9nQ�пCI>ߑq4YRnDx;f'GOPZcBRqUJ7C�?yƍS޲vl}ii" ��������������x|۫{VVVRVoMZ?-�x4|!3x.Y ȓAbPT$R3b.OЊA[ IR# 85"LҸo[T<śc*"jFJR 2(2Aī|MwX Ƹ,YN^DqDRY:EEY;F3Y ɒSXc&-�W߾}{nnn̹s瞿rʯ��������������s&''FZi"G8!sGx_ĔKCpV%+IeFRt܁Lr/Q'd4Hҍ0}8Xs$RK9&( F%τcZQa*QxM|'E._a㌥bVlelJBy(K1J"qm2:eݥsBV(C&F<Hű).&6("3 JyN%��|>{ٕ{7ٙvg^twA��������������� ɛ_xxGzAV[R~�P8)?#ߑ9t*yaUL I $\>Fdd>IBK"(y&,eaĥĘ k]& :ΤHЛf囪hVDR4e\tC[TN7:l@B쥾8YԐaX3gd/R!V,҉1\� +O?}H�z~η}:��������������o<pe-gf{{;ws {B+LBH,KbE|2_V]VC*5^)Ŧx=OmvI8Rec*E## *) %&~uqֈ?yno 7Ʉn;)#fmKڨBY.S\ɓmDm6IIz hDBT .a$⼒mcjU<Ek#/3�pO7F'''t``~v�pX[[뿱y2��������������d^|WWW/SVRVoMl�e  H$Iz>h"e'V:qJo5jJ0LP$!$xQDbu1C'G>栉fmVyo$L+mDQBߑ6*HD *FK/q^Z}!%fTJI.ZfQH#RjajKi+F 9z.J"]ڋ}WS��><N3sss˃�>̹s瞿rʯ ��������������a?99CCC[+++h4 �sZ3D&{O)*!**DL%%.T<$b\r1\2P}Dŧz㑒cb JJM u3M!DFi"E|Iz1ë hāGQ:wi[CRRSBLt/LXsRK~^,I 1sVJC9+TJq_y|Pl/,YvUR`��> v>{ [ܵk>'911��������������_/u}TLLL? j+D佔�>\.d"AĐ𢝃$u8KzH> aZBI:QL*8)$9.nǒn&%kH)#,vQ^W\y)N#1U%mQC'['LDϤ(hx}SVԆ{B9UL*ZK^mF&]+O̧IukW[V)QqOu{cA�+�Tk}}}*@oy;;;277��������������Cµ\�exxlbbwvvFܹ �^ dzf^V˸{ %Xᢛ\_ Tʈib0DX|rτ>^Rh4ifetQB JҬQ8۱SY5_׷T .%iFRI$%GŗKSҌmLLME <ZI*.%h1YѤTV#WNZfqj=��r||߸qctbbG__ZZZg(?��������������@˗/vZ}Y�TU???GGG;;;DZ?�%+-=>!ČnA'›:´WFL9zSU,WaMl"^ -I : $ `T:2cAJP ΂#5z-%w^ͭqL^PmM2W҉HYЩ,AƈszA:$ $Z'qZMmzSRT PƐѓ"K[f:e,3�}tggko߾=3??;�eyyyܹs/..\���������������?55CCCC[+++h4%-/4jgM�/5tߠ %HL 1 'Z)Щ'}R2I)N9$JQG6 Da$,l+ARSi*)D0o)KYTXoojlDy%>WkNz;*n6<4EVڙ4^؈Ѥ䢴u| 嵄:mk)A uJVPk]�}`V}jx5 [իW?'ܛWm���������������_<11qckk�err'۵Z"^�I$AH)@wP\D霏:YEDT"u++9FJR q J&Rilȭ]_NSRuEFI)J+>4L1>`LT҉Z{"$Sc(rit$v9J 'IfpeYīq|!^u ]z✒_\J:UF&Õ�?k}}}qppEzˋ/XكI�������������1⹅3{�p I!BTꉨĒy|$ {mFTۈ:tzK\ 'Z)I+1$oJR0֥eBK3)y2Kir)Hq,v)I{t&ŋ/ ),b'I%_ŖUJF_T LQ,JVJ{Zܩѐ rjjV/}TԎJ1*l{|d'� NNNSt޲>|zz<̲�������������#Vw.�ܹs~~~mGGG$�#I!aDXCXI,rKYDbb/ٔhbP O!XSyU)\t#H>I<q]$Ǥ4_) )\x+œ+o"-Y|&I$[t!%b>ԄbZJG.jk#%urpt*EYL*ƥq~%cqusqFծ-yoRVt{ 1榝FRz�p9o߾=377;jS�p?yϝ;K��������������!h4~5�G>pvvlV{ܤ�K\! t%tg8BHKB.sh\#tOuXL C4t*IX;seP6be),)$VhJED !4O "!ƙb J0򘺽 kQ^t* &|RLM\LWe“hBMJ!] .w ,u�v>hvvv5-gggի~ҥ>���������������fdbbzO<VWW_)"�rH&U҈ rIC`avbJǍ߭!C(DTt"jZYɰK)L$BT)֗Fkm\Qi0QpIǼJ7qf)cJE#jZ '!3)g_BS)T*خ[G~rZ谉$,CDF';^ŝnmC)&+}H])n`] �r/.�7ξ7)?��������������<faaagvvv@2<<|6>>ۣw�^NE1vBJ 8ƩCg u"J#(!D'/zR?x. % {cEIP}":-Ip%P ֤t`V-G qw\֦V$syU⚩߸f~"ٝ$=+anp, *"iNQjj<#DI%WB-˵:G]ߖUJ^)6"���'''?7611Cg @oY__>==եV+)?��������������<_|wVWW0r9???oV�lZ *A$0D _t2H)/§,}KsAW :ki 0M%xؑROt?1ƥy5i$%b[Tş(04š!qvcfI)نyILRKLKUQGLk$eϝ e^a\Q.k\jQkͅgWg7GǾ>�tggNNNf~Z(�?_\\|\���������������?55#CCC+++ht{$�# 8;;{VQDnRk�xpHDCMtBI;-Y%$tċd]Q)bF2"u-!J !$HmH$O{1YJ}O\EmQŷ]]|(\qIF!:DRLJ鲠Ph.e}鱃'Si\;]z oƌHX\4U.8(YNK:tMXҊ�ݵOm4�Sz.]7==}"��������������l311yS�xp=Bx^mʔ0+"$ wҋG)t aERYkR^ҊO҃JwbKK0HlRJiιpҵNMK ULG3ZTLz$5^G>/uבVkD' rNȑ%yi$0\I%K: iMJFxvd%ŕRP|fwi%&|y�4޽888%޲_ϝ;ٔ��������������^F^P;99!6/Q~�xp)AԈ߽EBi!gB/d bKd`U# &Č`SIR|jvIbBYD A8ߵJt I,) Ɨ֢"JG޴5NH]IZHTuU҆IY1gT1JGI#VJ%7Y¶+ O݈$aRSP"NAḏҍIXzyE��|NNN߽;88xƖᳳ_^ZZj%�������������@|;VWW(<@o9wÉoc��0Aʛ,M#)x"<>T E#d"W' .ZZbAqxa<NI36%#d8SHbڅdi/VP1"`K%7 tjȲp'Y</J �� �IDAT]LF@q.:=E;9xIBJMYdJU Rjra%Cy>.+-R^T,Q&��<D|oUU~'1˗|qq"r�������������} mht� ~vvlV,٧�P kH&DH4/!&iu1q>;C{&[vbJ8ZOD .z~a")h(4v$䒌SX MH 1Dy먔 fJ^)Ne׻LvҝW;HHt)W1SQ}ń (ڲe-䙔"j 9W)-�fommkfgg+rzz*W^}åKOD��������������x)ͯ>>>K?wuuU"~�9(@̱3>Q m4 Wj)BAL(('!EuW i&xQҍQBpIQNS|l|Qq7bl.Konk;y85rp]ڄi%E狴z|7%EG%jB4^5>%(c)��'Y__f``C޲_ƙϡ��������������𚅅OQP222r:>>㧧LaD?ko�g~>?h]"H (E#KC շBAghͿqKB0O9HL(ԗBJ01%\Pތ-DF-yMLN1I2dμHBIe|W}vS3%(cJ-t:y|R☩Qyǵ>�!?{񉉉;88x_ZZZZWQ~��������������0r;VWW( @o9wÉo:[��+:TbSQCx.M !]D'VD)%az߫\I*Z�jaёs5 HIJ0q.6vY:5E:kqî$0d@*OzON +֠EƩ/]PlČHU*siyIن26t3ܗ�RNwvvdznn*-..]D��������������zz7]F9�,,,٫jg>ڑC,4f</egAhiC(Ii+&`C '.ͫu;s/ܛ6|҇@U)/+(Y gdoV*A|qV8 &%qBYbh ͋79Z?Bnv=FxOӆO9$Y*^*kݛؙf{")$X»STbkR��%{kkkh4^3;;Sz.];55"��������������@7l||?99vi�>kuuU"<GRIp$os>DR/;EncG:+DP.\&|H8Q& xo$w 0+ỴrKVR=V? rE7!:M%Ģ:aJS1I,*[@k-$EE|x<%۬\xZbI+ܪ+U:Jy7<&IP$��<"g}}/=`Sz~ukk��������������k׎~jwww�ӱ=^Ax?-u(8 T( t+fsEq)%x -!ūyC ((H/+RNY?9;0Wbk^EspQE W-\4ĵ_$X#|boRKQ7B5pj^Sbsk\DYeuچĜ0q��en߾{{{?888xf""��������������5/_~gZZmq/@9wÉׯH��,yyi H!e},+2Y%eZ%hWL$_+(\۠8q|J;d[aG'J.s*IL鬧`J w?)"-sh([H+nhéO`d)(._xy9 /.\NH]1 i/!{@iђ*MmxE+^ �xt8鹹߬V~BGD��������������333o\YYFCk�=faa}gggj#"�m|J( yN?8R&eJ( . )QQ=k95gRL1C$7!%J9Az=4fTj,1i-_- %9(tZ &)&NRRST yH�ӱyPrER) (ѕQ*ntMC|E2C8f.>̥z)e-tf鯔(�HF5`z\z/\;=="��������������< ͍7Tn299b__WWW)?�<^4ŅltBlR(#>'3.Flh$t9ӿNBbH񢥈]J?<23Lz2Q$$u%8oRC֙; NK=a>uJ;i*.0lM7%Z -dmZI*Ude$x8ݧNTHZ\P|it8+DSmHQ#rg ӖUd,5�xx+htt-nݪnnn~�������������x$yO^~}--###ߵ=^FG)EΤbt dl"]x )$ 0y,\J1~f!t0- }$&I+C +Y#Q3Nkl:cE'+I{iVs`'^-Imĉe $*x%%JL 77|!&/bđ,&c*Tj`>mXWF7@c:%P2s�pS6lll ݹs,--ȫ(?�������������#˗YTVͲ�ܹs~~~W'vww9��&$>(N)IF)~L)I#jb�9hITbAI$N{ p I'bKp ks $8).~.s^jJ)$8T|(hk'eTDD\%)QE +F;ަJS9+|zf2F.Vݙf8D%(br�Nj7fZ7E?�������������CI[WVV>l�=faa}gggj#"�k !>j%8uN(&$*UGJ1ZAI=_f.#O"&hC+Qqƅ`_P9):e f aXP E,uDr9U˲F.e,e{"2G:JKTiJC1H5NiQ.ƤШ>Гp#EҕRV��{>h<7;;ǽ�^իW?… SSS?("}l������������� bllƛONNl@oYV?suuYy�X9,x!ID%t"MťkJp*QB;Et b$#3')%7X*ADK7(.JI'cR_Zމ_8V1'u҇-ǎ%Qm|rbZH)IZp$Kq1^$tޝ5|Q#eΥtLYmK5l fuPzl:||?�<w}}O<�z̭[[[[_7==}pM�������������h^;??v֭p! \xtttomm5ߠ��o$=pޥT(Hr4DhJ( I"-1%0:D ?^WhY$y:#0\LH (6#I,))9/V)zuCQfEUHI`9A(T\3]*kBKv׈J )(^MRJ2)GYYD$k%{Ӎ<$ \>wgc}|F(!G7H9��`{)-w<K�������������(&\JOj,[[Ν;zpp0��Ռ3I1"AWF)BZJ#X-)%\PTJ  V}JgbU )y&4jStJ{8iL}H\;PNL0ZкeTU4Mx7wB|[JI^ɽG]NaE\[` fB}m$R50�1OVV,//S�������������e\v'4<kwvvZ&g��@,─RddZHi$:%J'D"]#:GGLR:|,oK!*Q%#y;% o\2e>bF3J !U c\W)iFI9W {LOc8K 0ocbJH%)D[C{KPiĕ 3ӗtz IWL"j.g�>7h4{7zޒT>ŋgff~HD(2�������������@oJzj髫ϊ �twQڐ/$$`%}|,D-sx%tD#P,YDs)]E12)%gko Lې 05> i@$<K!i]\J&XRJ5qFN,NV`xkĕ;+az޺Zjsus4ן}S�{>_0>>O�14==}088�������������'n~~~'vww)9@oxwnmm5S~�.LI}HP P"%p%WAa. HIe„ GIDR"K"ZmS L[xe36Aqn&n2 n 6"#E-[*vMߖVYcg aSkbg)$)X)r&#+g#WrhtL½n<=l!��7wݱ=44tzφ�p_<99<K������������� W\JǵZms]~;D⏩�A|ޥ񳳂Dt*3ׇy>M:U7%DbdWJ -A*1.r$aǷ>MZ }4uQJRbIXIa> 0~yNrJ3.;Og;Yx&mҦiO%t TsYdJGRzJJ()A A uɍ vJ6Xt~D- { ��"www۪*幾?[ZZ=y�������������$k׮}B�faagggjo[l��GHЂD(m(&SzVdТN !Dǯq\%ل  %/}g-i~M#9$!%.] W:lLK}&XH.([eIi &:%ܸ;SlLJ[K54c޵6RRK|ge$m(15ktv sV.4s"&~f3қ��7h4{RzޒT>ŋקXD������������� .|荍:99RF255u9Տ(?�JbIH!ɰ҉"&e.D@p0Ē4^]3Z1}xcEbV5ORI &#)%wu-cJ(tIPB4 /IyT:D|Q.a- V-i-t"bZCJKU%̬/&ڴ qaMbSb)]J3]͏�xxG>e-ͯ>"�������������un񽽽AJ[.^x:66[[[cߦ��! Md &BI>z䕐|'>bRKljN<IA |"}RSwZ񦘷I{͎"w%AƉI!Xn!IIG:,gQJ(P^\)*CFfL"RmSNI1D=J}=Ry$qrIci 5};-H:WQI-bD8wTu I*N%؍J)dD��szzcccc;44tJIz...ȳ�������������2yʕ߯T*\զ?XC�xoͽ`!"M � Ŕ}L( QH"m1>9d"mxYc*$8%x;,&9HmUjJxK> |*p&*!&Hh ? JOLr/m [IC'Rv>+9^svZ+tfܑXJ(L|UWRR>U-C[7��|ԯ_SsssZV\zu!"�������������p~ff'֯] f�~ӏZ[[{ܢ��/!5$5i;$0.i"곓"_rJ ),A i-A<_<A]sUAOI))ŌbJHJc1q-]WΆJ~ նED$&.YE>"tTL()$IlLZ@tD՟o`nem2"&촒X�oV)/gS_\& )|S��K͵n4ͽzޒT^ŝ#l�������������<\pͣ7666ǽ�fjjs -"/��(Ԏ:郷V.I$^ \\2F3Sf|= gJtJLTg'lXTGgCReDR?!1s3Vש:c= b'JԔT|o.6K'7Q3N:A$&Dcʩiުom>yϛ:dz4&Ĩ+|JXi'&ےJ]--��/mmO<ě&&&^�࠲5CCC_L������������1c7oݺAnr6�DIB']$a#SMbJLUq6"T5p,J&.ۯIB)&9$('C}kbkQBpHKԚ(ĵ]SD yaEFHQ#FPI(+t!\$O q�� �IDATI&dFSSDƤȨ&mפ_-ޣNiQ)FK<��p{[wvv&ǿghh蔒́&"Q~�������������xL|V*?jSl:@oow��$U$'<﯒(ڿ='C6QR\yӷrO8%|ΆM$ɜ"&WvITN])Dt (,X,% zUJ7 ҄f9RlItH*D,HC_뽤mTNt|n7i!$O&K17i}>M2-#lf;/նyxsw��~/�=ի}}}sii"2J������������̏|\# �faa=X[[|��z~+iCdA:(sL0q)5@ Ķ nM[ m;M36L$[K2v04>SCrUYP&Zi][I՛L|!a. +x/IV+WJj!-@.8{rJ:I.&w3.֑.j' GK6nWsM-TK0��2ps}}Gξ �-z]_?22333T�������������… jttWTX255u9)s4)?�@qߌ#} p*ŧQEЩ'PwP(# /QIE%)9F9ARN )ň c[/B׸p-$a(F1] mER.^Cƫm(m|;\>ONxwL27K&yFmW["Qu^+ 4��Wċl@o9<<lll|P~�������������xyƭ[~|ooo-/^;::lmm{�\t{ot gR*2!{>nFt\/BY_G4 Sa>:E'~UXWw$s=7Rie+$ZUlRMCD$XEF3Uz=h(&M+$Vt((9IEr!GljKDQ&(&ukK,dS,Tk'^gRj��vvvGGG{dd䔭�-'''?!"Q~�������������xȘrW*?jl@oo޿&[��y>%Dxiv^>x"5!$HEKI`-X(BN9C $?i%I3*EE\Ia'K]#}pQ<zBJ.1lJ%IhA%ą$Yv.i,q madl][N\3۩oS{ۇR$9%ʄA&5YGD\=GSQ�壾SǿWNϥw(������������333?100~ڵOh6y�,,,kkk/"�� * EA%|I!Q蒘K-AСFpO='#x1In r6.^:;D\WX_Mi-W.w`r#BIʵ2EHĘ5Ǎ7bEHHc$sg†"jGboO[%G1i;QL|PTztTMџc^$Ս�ϭ=;;~uY^^đN�������������xиp›GGGolll|۷l@o!"WZ?�<Xԓo| J薔K' Mq<nEYChtiIsR=GX =؏KkHjq_o6+-G4$OhC 1!% RAL{+M%$RK /zL$489+(-p@Hq>-'Q7g\��___uLLL�?R�������������3??y֭ )�ŋw~oߣ��&I{gfbdg4RϥbF8 $ ^;a ^=chGADon(C5zM15Dm"fZJE4S m=II%pMLQ}{bCbRzܭCIuδ?GLFɧOˇ/#RNS77OQ)M�� NOOeggg|ll_7�esss觗6D5�������������^&/_Jj�[sss?pp0~ƍ&[��;|zƾh?f E2I , D "ZX[\tc[h#ؙ`\>%g#i`ikԓVVq&T#kpI)B)a,7EDLS12B"RH"I*I(l!B"K} #RZ+I I*Zbb_9㍥cS`W��<ԯ_mǿ龾?]ZZzR�������������gff@meeM�5 >==}-6��!x%(#f8+:%E$ ( }9%Ah%(]x3Բc>UA\8d䲊.D)m>/8o(9ݎLhI*PLᔬd >OC = 5n2hTۮ qVLstIJfDuK&]ZԷ ] 2RJ;e#��x___zS�^$OٙyK�������������pxo߮Rh233'"WE*�xx3޾J DpLjryRSq&\>BJbBM3E$P >z4xu\$ı] *)DdD#Tӧ[8:JEǻԝHCE$6+.$ x_~*FGߤDN,lR"q =jǴmLbIk†ۮ$ӹ<$b -��ZپϚƛ'''������������Ko(.@oxݧ~[766&D�</)$=ߟ.t*(C2C}/`+|$"(*"/D>S؇J% dqS[q]g"pTZKRPОx0yHQi6GhKb!talc\feI#q` 762#+gL-8T2T2NqS27{lK7RH߀��pRmgggbttﲍ�e{{{觯\)"�������������2}ʕ?T*Tզ(&@oo7{��xh (!(BKL)|�3D@ X$Zl -i" Õ\N 4`Q~v: "=e-*ŋyDR3d>>iK*M1؍NpE(N -i8$ƨ 7Fo<ƅ s&'mQ[%^͵W wCX{kT.��<hrvvbsڵ?]ZZ�������������O Ԯ]q&,,,timm E ��xђ7RJ 䕘"/SKG{$xi_NgǑ5Kڛ k& -XGdv/Bf +u<'9YG揸L4+Q|P$jf{3RWl^vYI_IDEZGsE{ʮ>z9{u<K&r'C��d}}sz.?22533Ta �������������Cqůo߮~�3==}]D>iuu �xGD%~H,`- R oK)\:蔖ܼ}?I!rPҰe'/B$.>CHOfW3Oc$SĠȽJX\m\LoSN3Z{ %<x$6 &+PW=^f Ȝv)=.78U)_X Vc뵔��Ckkkq|| [+o2�������������c7~ݛ�ŋwzoܜwPh�G􇸦NpE&}(y̾W6oF!ũ&-drB(H`qMPi.|BJZSPvl J뻏B W1Xy1mĦox2K[qN*|bz"6S&*EmI*btτ N0F"I2J.i>wU$ѨXh5ymAecC:+$#)EhϮG=�Gz˦큣Z\\P~�������������(rT*VMQߜћ7o~O��`Č{>*"\It[RB4k7}nB>5YH)jE(AQBH]5x\ 嗄)S0"UDuӘE.SlIYtjA2Di13Eqı&P MqI\ѲYJIO)&RN,6)aJEQsn,U?-u�G޷Mξ1W^gyDd������������<k׮]& ,,,ti}}D ��x4:"[a)ARHJ9/I)&KE?od ۇGbF\"*#\'Qv0d\I.GM~1XF\ ۈǜNQAz#C>Ҟy/J3rICdpBUG\]U7GJ!bM}%X*YE–6]m[E$٤ D)l.E,%_%{��d}}Mzsssz./ mba �������������.]~"տ&"+�QIBbP?6* f4ԡ}�Rv*b,$ $JHRK8fXb($8 ¤Yh]Ω^X.n}ƒ/FT>]z4*VZ|)cHLHq*KlOn6ZBa,||l+uU$n3c��x\x~mm7`zqe}}MMM|9������������xعq� [|;O=?ؘwR~�卨]{%f!�#BJ8yJ8Ii+5b:I<Ǝtʑ(�W9a*(?v 璯`=U{\TauuK<!־I%Û qS>d8;1 " ^)*D4qdMGIR48ZhIQ.ߨq\+˸|$j:V>qkL)s3Kd�Gz~…6@o:xx"Z������������1}ʕ^T$ [?/ݼy_=e ��/4=gߝJX C|<o]|SL|(+X ;=?=�%Hr"r$,y"b;BI?I),b۸~GR$4+iA6&z&%F\*D§c>I֫UZW4}ۄJ7'g }|? F D}])1%on4p['(T�ǚ?u[psթ?yg@DƩ?������������CO ]v7x^RTdaa]K_$"Gl��IP=0/̎!A ~D!J >?~?OF7 %x%,( %=ɘi*$6L8Ŝ<é#SK z<%N41HKOvtĕ֩vJ1㊴kT\cIVJ?qMZ+uLOSK.�`M<\��qe}}Mz�uy>~hhhkvvj��������������ҥK_;::zcccNNN*l!@ol6_Dd�<ַ/we x ID)EOS҉ﶱ ,z^BRO -}!NB,9%Ĥ䔎c$Xt&HJ`qv!}ƫI9UEQ67.v&* L+bR)c1 !D-a)ĕf!^BN҇b3vc$uKX)'D ̮R7��-/=WV?srr@o9>>o.\ ������������[?wm-O>'|666&E䝔��b*JAG�QQESFr"C,2Kd-NDK2;t:IXGeqHHn3^CLt܍R5+ >':ģ؛Jb7R *!+DdNPD)9EK*Nb6Ob %4턕E"|1Ag]om=Z-]u^!q1S\PGaHW�BB�1NPIQI�㷱 ˥{}%Jݒ:bs9g?[KuiSML*&ۑj抚ӛEG22'U)��8::ׯOMNN'[�$7n8|"4������������xh|򇋢@ӹ2 3gΔsssٹS9���'p H &zxҤ87*B%!PCI6uEAY+yC!=nnnڂd|HWV=dhwC( ֢Fju1'.6Z6Y$+葄28=j%jUqV9tGwQVU Q1&'m4Fxt# ͨqY ��@E#=ܥpI0`}ًEQ|zLQ������������sssq٥k׮,+uAR,,,|[E9��� <#$8H2J:IcI I+ɱHjXc1/8c }vFȹCHfJ;%_LɪROY @JNQ"ILI I{R +*$/w !$I6OJxIS*}ғVSJ;j$$H2 :ۈ}ÙOuNoV��FvWVV|xxt�<8gysEDNSn������������ZYY;w,`(XZZzt(?��4?'}CV_  6?RT&'gOc> Pw.;( "}hA}i*.5ǩUg^$ZgTce0ILeUXo|B#Fy2shx,ݖJ1a$aSd0qx&:G&ނ(�� �IDAT]-\T J*`Fr%^존),fU367kS|um��b>'N|,o.ŋFFF������������ ]3`i#��GE +n$Cs^ e!6DcEtCOh' 5S"\j\VI}kA<E -h\ O5ZI}JpG >EYڒy-N/'AseIs1G?իﺍpe.H%($CʘIafJ1L8ξ.|��<GGG1599###w�7n8+O>uy"������������<p._(޷rr 3gΔsssٹ" ?�� %ɤh0 L|_R }t3qIpr)|4<C,tQ 2g9-&d#|H򌞒7Y3d^*G%mە!&9%ŋK&t#gb!qyT5CᛓB2d89KT"GHQF+hӇ\uLrcqR��3ώKsssɓ`<SO=~D������������^pƙ3g]IQ𑃃+++oX���FOAxbR<-h]Eo«s%l+R! )AĦ�2·$' 1=l0TJQpS13!eu‰F%ԒNb{NWˤ(WbE!Ɖ~ʑRxj6Tq9))ŌU)&ĺf��K×,3ϼܹs1,������������gwLLLl-//AAI썲,xii"ҡ��%^ >  ~.8�BZJ4J=1~(4o2H"8 yHn'XB !Aȃ0tuYw7/Rs]j}F %1= `k ^1OA-jrN$8Tʋl Hb6OG:C馩ޫsc.! L0q-tސ��S+N8.]ڢb�7\tiwdd)?������������o?`}ꌈ�KL4 nJ⌈R5܃<Q) ;e%}S@!RI`S[THL{ Af<V(:y(>=Sj}zD;<%Z0xbKIDL9ަd!&ۋ ڔʒ'1Zm[amsDd 5N4ޛƥ'L}qH\x��O߻~FFFRGr_|uy������������|Gxe,gΜ)ޱ=3\��>S>J.} T*Gtn'8.{w ,-�Ճ^k Fq__ H'?#ޯd}N~Py .1#?I1ΆoapbJRv[T U}rOB ]cHGD˱⊫mU@x₹Tu\YF*i9ۊ l9*E\"nT),Sc/7&.h���/MͽɓsڵEQ+W>$"?������������3g,]ve_q (daa#WVV*"wX���xpUHPGtRDThE0D #DdNe8`M=x,*ڟq:+A|IcnG G%L5H+q>Rɥx9HxDN1z*ͥ{LT0JHOTN{)QI.W1BWCCQH}yz=_?iZ��ψ|~~`tիWܹsV׺?h%�������������H}W`(򋗖^-"��/4}$`2y $$ɤTA.TDSJV9q-D)/}fMIpF`E3MԝTޫiVGgo m }>l..#kMJO* i)X"B:6j*nJWlzKfw>S gVܧ:/��O˟wĉ~Mj0Xn߾]t:}ҥo�������������;;;|kk0`ƾkuu�'!#I :v$kyp!%$y$c.\꒷PZ8݆n!$>Q5&Hl _arUS:TRLq?֫u^!2c59=(x{\U!7v%9sRo&mH,r=YDo#:Ewr!7_?ZRIɌZЌiۋsv��9::oܸqqrrGFFRor7DU������������CZ/_HQ[^^b� 3gΔsssoޞY��3Έ)ah_IN9 eLRSbm4k<_ $.djES/'WD߫RT%z^Fꡦ6=dbͳaVi-eq\ˆ>!ަ&HV.mE(`tN(hj#kU6n~*jxWR9*H,D>��I{{{Ssss<ydI˵kצ+W|HD.Q~������������x 8;??[gΜvڵW%U 0H\^YY��kG1%|7$^lO[kpB;7GrRС. *Hkq6Dᘄ{_q>}xZD'sG]Ж>rB:RM #0y{>'E< vD15 c's>2vOJ&Ʃ��coee-/8�0Xի_pٵ_�������������^W,2`Q---FD:��FCF|gՒ1'*C$%XDB',S;& %{_%T!MQ~b,Ơ5 $_5}mB5mŒhT\lP.Fd]NFgT6Q$&PdQV&Tx6dߝքxwT|DaLcBX�˟.]t%�,wq_ѿK�����������%nloo? `}%y?�sgQ2Yro&g8boK8uԽO]H" DA /VQ ).Es%OV#/JBEX<+t(C)+.^.j4H+NJВoULǗ-.ټ64 TcMS=t=':*}_ViHr��E{]~e-�ˍ7vwwnoȫ(?������������<´Gx 0XΜ9Sξ}{{{rggg)?��XPJ,. 1O§+ FRq H.:g{%g褑mޅItIcHG -F}6.;J}+J"|dtK@=$%,DG䲇YKqC.<L6QZTh$f1&OjHy|zqLvђJ*֔D]DgR؟toE��ASnmmܿ?}t � EQ+WXDf(?������������<B3g\[\\|,+gAR,,,|`auukD ���/:>=K= T_?((i*6% 3*tB rtDU@g(0uS+} MiJ> zRMlJ'4 =f(hD]XOiJ#"wc[Urg.<}$צ46aat?M 3ZQKUne+j ��<D쭬|{>k~~OXW^}ٳgWZot K�������������1LLLl-//Ab eY~kDd�@R0"qh01I+"']W!$hM"?|21$~}u@i[4<x ި4 gĖ$ɘV#tEѕNRMIOI&kVxr Kõ&D'i+4 !֦k ^6j]m$H���xyvyyixҥ`st:_{o������������;;;lkk0`GGGsuuuZDO�§$ $Q^TR-⃍DKd ~O?% AbŠRIP4DgM\MYHIt,L u.ᥗr';89*Ñ=Dp@F2iH JQ4acE\Z+-!D&M-B.DY<r{ZG솦��B&&&~`q/ ������������vѢ(޳|,gΜ)~c{{{rww(?��<Diĸ) "%|:2EC "^+ Ff-FhHꎀBڋώ{(xo6&5!*ͮQXDJ/T:&L2&J jSvbj@6z~g}, 7co[A'K%Z)��rkkݺu?}t� EQ|ʕ+,"3������������^gΜtYW�( i:88XXYYz��J=d5V$ zTA. )IeĔ8o#) PI(zD@sJ_ޝZaQ8ݎfZᬌNLo,fLJ)I 2V}Sct w/r§ Jz[+ m /&&uUeiVlz.zbcP& +4/��կwg 0Xsի:{Ja ������������`�p|||syy 0XfggeE_("+��zW5#'k%$sb׏UjI33NQ֨X7]% '_!nQ[4dRM%s5%W?ǣgt#3i]'*[#u?'"Q\W)Q] 6VGt*^2ֲICIڌxci|ܜ0=}_,S��� ]^^~ZDҥK7Y3rtŋF�����������򆹹[[[t{{{B ;uuuZDO�Q"8�^I.Jo$Ĵ=,$Jhhy$)e*^` cs" @P]DT(R^e5Rĕf.QBB ۊjI*&GB9+NWxXzJ&Ptue/5%:I C6ZL+$CU`4O6r6'g״m���z~,`ql"������������^@ZvEQ{eee ں{a��"NEgԐbdEH[qw^&iVqABIX+G#M[z_7BNCǴܣntcFam |\GE3GǼXvBHUd*3|%wE7Y8_fSK.Ĕ MџWڏqvL��[n]ӧO,`Y\\PŇ\Q������������=s̵ŧ˒$EQ‡۫_/"wX���xT?{_%>y+@Pa�HsWHjA'4i* q*$ #.wҐ(z|*oLc|5 $_0"lEUtP&TD{%EiJ?^IŖ4H)~ʘ6 xusv:6qz6VIEich���<쭮~ս{>j},ݿzΝ[iZFDΰ������������:88((`_/KKK_("+��u ԝ>&"}g)TX"xZ48 Z<1,j wsv$T_F 6$rN+ \уo?4 <Ԕvy=*'}TtutHfT]A)GI8eEK7\Q\K7ը2IŤ4I.7ce��Gg;+EK7X:rmtԭo������������)?=D�ĝ|�Ks 9,vΨH~X|K[2gJB`8o># j2:S$O#4\M7QqjlNW48")8[1)eԪ̗4h A䕩$דG*1 $zASFj+8iq׹=%؞n+ߥj梩<��OXQqzww_"������������h?)+++� > ny ��/%l6H=$d񐤏{hCM^q7:.>Wvý(NRJ7Q6C=Zq'k=Wc^$*jҵY$}hgt*I^*<g+[p4.Z҈oZaK(Jfuơ ��COnݺuavvO>]�eqqq(\r"2C�����������@DhZ,..~^YW�(7���^Ds#">Q�e@IHhN|^)oOnܳD" = }+IvH,ȒOW̩Sɸqi*2&$]2Q%F(ɥ'ئL:g&1;1 ĦDmܚ֤7A@1sJɅ��6ϭ~ս{jZcK/^sVZE,K������������XRLLL|f+�ennn,...ND(?��T )Q]ȟת3.@_°@z?1b$ Hz?8ɝ]2B�#>˾l㒔b4!M\t:D%ė ~cⓤCŃrnDu(+7喈*_^JN>HJ q 'zsUmeG*z//4~q]ӔTV@c(���/N"%rmt:553>>)?�����������cnlmm!`LLL9@�� �IDAT[YYR~��x*!(NKAqsx_ .q}-c*#^lKD\@}Cӗ"]1ńc9JH(8{.*=9.oh]ҩmILW R[I%r(TtSTJJ)T?F�Qn.n\p,lpTJhi+kHRml2,RfjV��קƾ?`8sv|!�����������xIӾ|ȻWVV&Yj2<<|4;;k[[[nE��),0"ϕ._dI( *":$8&$_'<d츚bd|.u.8s̹ˆO'$HUG#4"DF m䈚sVpv\-i#}J*e&x5 DqDC&̄MߵR%RghU5: ַ75.FS.��ǁrgg'oݺuavvO.Yu8Yz꩏uӣ)?�����������K'Zֿ;}3׮]<`E!vo~x'��<z">WGJMt)E <$B1y-n�tȇm檏JǴGV+סRJoz&/# *|{L^)b-L ɮ1y0zQrEqbbkL^UZY26gv)J$ԅGWP5d4I!q'V׼;IE`|W ��sowSVc=`)Ry?w\j]Dβ������������4nu:q޽,ssskeYfqqu"F�WZA%8RGW3^_ߣK64a ^Y^vZJQTQ -Nw'ܓzzm*atcXeQ5\z)>xXk<Fqmu&XBvbw"k ƴQ ǽ8<9-(&Vȉ=}l4nf��ǔNJ 6`}t:o�����������Hٍ= ;###ߺ2+"��eDɣ7MZJ) Jhʺhʮ)Z-AlG5cvzIT()%F) SJbI*>z :yF)7^]}i2. "˭ɪ\V#Dd_UvCQ$G># QymelLm~Z ;DgBL?QtգS ���Sqzggg6E )?�����������#An\D`uuu%,G3335K��J>ixNީ$grR||z96x%S8L4)F&e7zQ2GL&xξ$%T*2d7ծp\ѹ1NИ|hqWMmg&6J(E"1$?1^R5D2[)%} 3d 彝KS��ݩw>}|+0`&SO=n4�����������x(yjӧY\\|K0X־IDX��>^=e,$y(xR , /t(\l!}~GT<|siJRIy>t }yDtKI*"Jt'^c(a:VŮh:)"J*V۩0VJMV?c.^U|G +D/WT` +YzL "O%9&c4���[ݻTs?0�AQ<3?<<YXXx������������nu:ܻw`Y�jYYZZzQ~��:Ny?IWȂ'\`xĈ(_{l?_d!ϧ$!h6>J QII"G/TmDEk!Έ,j!.4h)>!eYl%ekȐLL,iVR>M2}{xy܎ī"d,^%^gBi kxԜܝ+Y:aE 2���N7ܨ[ZZE�����������^T8;;㻻Y 211q{ddשּׁ̉ȇ)?��xiG|'@ұWEPtrH&ⵊ<"NPˆW*A\ H.i΂7)+1#Nd6$fDět^{υ(x[jIMƨH^-dDW- Yȩ=g/R0]-H%jTq1 b6?6Y%n }<oG /�� 6366GGG`<3 ":�����������0Pl?X]]�exxhffW&��6CCTEx)"drS*"<,bT!d]g>|_q*DS Tǒw k߽R{BBϤWcAQΆ:G̱QsJ,go7J(#O:D禸cWƺJqORJ2JF'(b<$G8���Rݩw>}:TDQ{ꩧ>M������������V;CCCW_AKQ7K���D~HjATj*"h"ct,4Q`,D($XTbMIbDD*,&BD&Ze^(By<+ZӉ5֬dNLVtvMIf"F *IQJf&9 >=h"5RZ >���|*<{=j>j2� ,gN~������������/(1::zݻ�277Zk^/"k��/7҈OrF/Ci M1%%S1B|6J{R, FD-ԒOytՂz KP_OyɦWJK9E]Qwsl1D-dk0+BNW+.VQM9) Ex9t""󕤢L$#de ֔H&i'"L@ƜuA%GC��Sb{ `ſ999;>>ݔ�����������Ӕ`LLL~^-+++s"a��+!w/ñڡXRXajYQF&&TfPR{}E{Z cs{t$!Ը+ͩO'E݊Ri^;"E3HAyQXb fT7$^Zq:}s[(ơTlLqě$8js2;=xK|TmJp��?Z__}J 0X677OmootQ~�����������O'/_g"_)!`>&)?��gH [ w/u/!{Կ@Zt%0WI+q.*VXInSG\0SK)IP㊂VSz.I!(1DY8 K_G.I=Iv5>H:'J_P I*'3mkӪ֞W)>K_Q: BWVCJ ��ݩ Qi8^\n5�����������iZzڵB�KQUDX��ޣ7>CL#"6 EiVP Ёg{Ԙ. g!IۈTzx55t,S*%�RD"6Ж6(x{ W<dĬ@jIq󨓵d+MR}?IмJG>-qkԻE͇Q"K���P<5w}j}9ǿmHYrW w~[DR�����������F .NwJY^ZZz\���/ /hQѬ $!ȿox U)Τ[dio%D)&Koe<i>s AJ m4(gRa4^H'E-YV:G"#/)D'Re6 qkBinNRbIb䌒2\^>>lS;ʡ *fQjġ'˜%x+JdfI��t^:,nii+/\;11(?�����������@93337o޼Ӕ`LLLy��xaq4YJ-hJ"VUy\=#JGp$zhG1,ŕyHG%t t}%_*)ŗBZqF\ !|YtT@uQVIJh5bc8jjEIߑ4mg r:*݅)i*f 'fh&s M׆>��� ySirS[[[?%"�����������˗{b� Ù_ښ���)5/R(B阷0RUb<|4"R>Jι$kk*DO!TgtJN8m916C;}O=LRȃLiEcd*&8+>&/>-hm`UCV4{wbŐ<N&K[. TUJ/}I%ODg.J(j>^��AQۇ<`YZZ/=W\(?�����������<fZw ]v_aKQn߳?-"r���<8tvF P!QJq#bunF. MT2E|j;$G$%AhƂK$*]7:&IƠpD=lL6ǧ)$0Yס~wjuJM4Q+[®+\zt<[4;q!ūkUp:?91;NISUL1&[皍���๵{v�eYիW_1<<"rr����������K… ?tNw!377\ "ש?��p6(#>ǟJd:Ҙ+QRRFwByHԆLj'pX'BnTK½>%ė\^!)$y;?%>s8Y|̔ɕ(Ĉo4(K&^j*%ũ6]/kũMZB*Kfv7q9utTʲ/D?۝ y_ ,ѕG��� ,//{u*0XW^pawbb{�����������xi7o|ۭ[N�… xoZYYiG(?��ȅ ͧuJ<Z?)ī^';j9zJ"1zs V*f.>%tI{%T6\I|^36= $E8j~.ͷ(~BᘈƬc'z=Q}ҿߌ(HE EJ:ɭ̨0 D9&[$UmJR|R򨘞R#VbJjKPR���޻>3::cccwXrS[[[?n7E�����������^"\i{YT2<<|8337oޜ|~��8\ EJя7=/.?8{՗^RG L"߫�ؑc/}Y?N#e  B6tC LMja sFN,y$D82umQBKKR%ەg$<!ƧdJl0Y((ҨEzýtIJU6(ZtW-RhIq���cww\͡#J0XNJxSO=_EE����������edaa]CCC\\\`E! ߟ_[[9` ���^~\> YNS θ :D@'IJDh œ4Jhϴ&SWҨba\ѿ 4\0}-"o=vdʴ^>׺ VXޤ*$:N <5&$ICٹ u 㺺h$EoHʑIݤ͙t4H*_G}vjM��� ;_w'[s `e)<_^lۿ#"OP�����������xD(.\#ϟwj|,W/--ADS�� 3!JPگ7{8WmBHT%8-O,DT3BSx}N A ?GYY q#ѷHs[ W\FIRE-rɥꦨe0>|ַj#Ij]쮨qvfƠd=_m\>WߏKZq=q(mrJ]��Ny,`wo؞̟u������������2s_6==yui`\pO< "��p`RStZKA'�u`)TH=uARdN$!QVk HĔ}]C_J MK R I(!Ք3(DIřBBW)ja '}.ՓV$UI6L:7UJRTx1:VGxt"MX^H/rV*qv#���<}}}ftt; �ekk?S~�����������xȸn?8�exxpzz_ݼysu��3@\?=K]dY%<"$F p %4oW|.\lC76tf?N<L>i)Ʊ[ kQ$,Y‰PԻIG|D{(NQQ쎬JS1d 씦ZdOLFq:$+(ZO-y¸zN5j���?saff7X<V{\_EE����������Efdaa]N�( YXXx���!4x,etUtN2%^;$=SL}5%<U6E*"O>ђSLҁ7I:KKX\t;]ꠊ#EhO'4$ᤞ=bV|r"@qȗ.ECN\bbʚݪ|rŹbS+x[1Ƥ(y75lT���!ݽ{j>_�,Kz_^lۿ#"OP�����������0Ņ 6::h|,W/--QDSm��'5Cy?\ؿ3OW %A@#dTnD&1,vCGxd+nScN4L[>F U 31DL}cm?+e_tb:$x} z)*'BzS;<q#}S˩>\BJ&񻱛y' Ǩye W5vx���BV:kYc�[\\|w%�����������ɓ'͛7hww,=߰ "���Zj`}+1īWGT D�gΈmSݭ}9f&w]R"|OJRB1]B[ު%Q6�� �IDATq5&CVs)ũ`?<~V$NHJ0 )^d͌PW~Zʊ5F^N댙D,xS|k5j$TM:^aQbL^G%dϒgRs ���;_[[=wa�֩͟7P~�����������x@\i۟8<<Q 0Xisssu��գNK gߗ7\HZ+'PW>xĴgG&T)GբroaMR<pz/J!P> �JmyZ4h07,H+$Mmz{k|E,男һ_yM#|{\b:+.O%k��G[n 333644t 屢(}ʕ&"m�����������/ :u'_NQˉ'»g׿UD���)ˡBH}t�\ Qk ĤA-Fq.y݌`H[|S T$Џs⬸E|g5 )+AEh٦.爪ERSSd.{FFD%"EQ"91ާD͚C$S:һbR.w-6Sj#���#̝o{nju``e)W^ܡg;E �����������&ԏn,-- O:d~~stt7��xt1yX?-+q <@|&[x8+լIYdLhuC):o$gT>@5/jU䌇MIh7cS5e%:kE%JA6\vA%>I,dAE31>R5g$=$Ux*'0}"���+N狼Yc�ݻw'&&/\!]�����������Sɓ_>33񃻻(`zܹs{yyyAD>F��^"d�2 NWBFC||t_$94:)DBrGJ>Jp-|N*"%HCHJJWJAQK%8uNI#A63>ɨVmxh?I/MrJdX<|lc-j(YUJ1UJ/I:շCʼnP*$Zde-ԕZ28dX4Kc��Qkkkϟ۬$`:uoZ["�����������n?qxxFR�x>ō۷o��%Fe%wT\,Hq^B-D#<ܢ{xDeq~e_ѩ,fvZB pz$Ix).IE<QcMbU{E.ZpSMLC|ǦRNJFH]յш"Ko$-}f-TQ st@Oz'j@T''���˭[~~{{{jff׆XJtFx+W)?�����������dZ=u'_^; �'Nߟ]__{"r��(e2d ~}ޫg}M 1B=4"\GR*L+)9ũ>WNL Q(v\tRZLrRG]|5ng۷+/^{ի{LC'w?amFR9*.'S{sUo(åo>ja~R ~+lr#t[JViSj15r/NZ���7޽{=??~վ``e)W^ܡg;E ����������srjjGFF6:Wܿ�<PZKKK_*"T��ेbJ;bxDnM(!٤7'CL{QDсYm㕔S'_A2M@5:ZJQ$kRJ\U4UWF"z*p#x|bcIRqb Kw9mJs.~&$5>+Kt,JŒ;ğ4/6U2x^NP9!\IQY_���eeyy]eݻw'&&'''PF�����������x8u<==}sccN�ejjs}]iȟR~��.ScHz_Q>ɞw}+&&~FpZʢ2BK).&xnj/I/vGo߭Mb W/IߝRrJ qիzߏƑg*fxoR@j!ե~:&6ɇUGq~d"4E/$㑘.2򌘁x=%|o<o?���xչoͺ S?jE䍔����������'߿�ܹsӿ1qߤ���IB %g5 ԗ<C ,Z]pI%~E\56<TRTK-Fpi!$b@\|IL%] 6gFQq괒\|ЦP0kIB N~#rXLB4%x%INx/NSdL|~NGq6F#jԜHM��x_>b � Ns^Dʕ+6����������x2NYfr oߞ]__6���<$oh">sפֿtc @-mD_gU Uv_h)[/8$hy%I*յ1I%KpDre$P4?'HnepPKC=3[X/LTpa`$aеVJѲG�}j ۨsjE/&M浤<YtLT-��ǀ;ߴnZu�ի/z'?����������KSSShdddcii+߿P�@hZKGGGO/--}lPe��'`<oY|vιFU{Ӿ Im{_VK#K;ȒP(>KHRRI=h$M'(ǫ9[kqq."eiBN ӥ PIZֈi)! A4A�±`z/rUW$@9X6k)'fSy)ʾrB6>NMs=/hR X!*>H|��ǑNή�ݻwݵk4>>399?[����������#˩Sbfffscc;J .ٳgEO)?��ݍ (c/h!EIR#v JC1zRFZK( aaڰMHz׺zΎ .S3M]L' *)¦'(QEzP<%C# iO`<QK w&$ڶC{<ąR]t_Q&\I &N-ub||-,hy.dm��cWWWFFFu||6[�`looV-"o�����������n?y][[; sNOO͛7'ܹo(?��S(AqBDђGMQI1b$cdZK iܮa^e-tiS\ DГ,<LIF SF-e҆;.kX`MK/Mz?TI+N]iZO:7vNXu_DRJ9]VfĤy: ���>&�t\ y����������<.,,SN}bqqX.r j۷g׿]D���`d] |z% JB-E$c53# %)%\bŏJQ'q,J i-JH=B2Jvp&%$y1^ NBzC%Y^DL4iaiN'V{1֏umaKr9$`dP[ V~uΕғT`=~; ؛XdL%D/Ǎ]4��ǝejf0W^}˗/KDF?����������Cɋ/㑑/>O� kGGGOw:/ ���9=pZ2p6'T/M:,.j<z? !Ŵ_NBŠMFBOI'XG# Q~IC߃ =QGO|$?EP앐v*%k&s5]O&TbǐܔXb!0^D&%$3(55[*t9V�glJz ���4t{+�q]wڵ7oMMMt����������EoټqbE�ԟ;wo-//?)"J�� 'M(Q")C(I χP ݣ7H}m=$:COrW1AqF4v%]ڱVI>QSIv E"+X`3L|5sXvR1W&AFug"a\14q�U'/+@L-tz4A L:UE߯.kRŶ$`����|pmmme/{M�ɍZmk����������Es'ݻ,`9wؘ}oQ~���8J5hL79R]Z')d#PbG@ʔ╘R ܑS$.!DK Ό9{$~WVHJ]՜SNF)^J$bWI,88;|Yt1*r%I%ɘ0V?yΩv)Ʃ=O}_j{ wgF$͟?3y6E¦(/aX6K&,IBLIX Œ,I rXj ,1/H3=G#=II=}=ιw穟|>r=*=~"J܂tI⊮LZrU}}LjT:z!Mo"e7Dן1SQUL���ׯOOOpfG<E����������7/,, +++�ZF魭/"-����z=&hI%(!@7K 1YE'ܿXI8Aϯr1 #T4lRYC &n8ŹH" ^4NOۅt6$)z:"&T!"H k kCI)[bs,&KYLX96'DR]A%T"GFn(XEm1dCq6����7ܹsh4 g.]SN]xoY����������g|�z~n?l6@D?���|rKdDY!tCE'qZI$Z*\@G/Չ#aX#Pw |G* )&eEo" &{XN}svF\*4 %.إhQ'wT�d:M޽SULiK<rI++6+<I_c ĔXbEVo+eA���>%6Zk%/3W\yۅ MLLcd�����������044vvv֭[LNNڢ<O�� N"l*o⊕{7yVn$AD F[>$!Z$0eH<'8ĭXpui-F84Т7NUqn[kSXdJfi JULɥk{7RNUܫޫg֗)N PNE}I^¶kŧhH5e?C<Q)؈tBv$OHcIP8iIehI���O8{;.\pׯ\z"���������� Z֯omm`gFGGkO߹s痨?���|D΀z?<J<CU҈{<#Kgd[pB B4 X(|H|>]UlLS%q$\4 (&0XhÔ-I7q/ĻPE&,%"JjLE)&_ IE%Mm}$I0*r&NkB:d7=QE ho?3V9Zr���|ܺu]ׯ_~ӧ%@Y[[~鏉"����������0??VVV(@Vv~~}*"-����>]cN>J|Ps$0S1:B(%=n :^2q*ª^G I%D6Nɓc�c4rMy*M.ذNѵvsS)zI?2HTMV%bi & / 7D"Dc*I-&KlRW'xG @ѭ#+7fTC=0���ݭwܽ{w^2�̥K^}ԩK/^-᧹����������4Zퟝ={v{uu-GGGeO�d~~r~nuu"G��B\0 '#C9ܵ^"qmUHw$v�^)(a #&B؈:g]pG] /tzI0jMy$^`1x<x?, #:KqD+|6ґ8*]DJG{.=BJAώ$!+Cs䥨 HLl$ِ"V;Nj%˸*����> 6^o+kܻw\r/\pmjjIl����������@SN}zzw޺uk��(FFFnZT���>TDI(ݧ}%X'+p2%Ax?M1 ߜ3݇<ù! liL385\QL1:|%D'&:MMR4l'O6z)d-\ I Oe -_ڒkzI*6#DDx0w{b'aESNgxi*g'd! *=5���_666cccx…\~}`ggJ協����������څKխ-qVWN���/?6K�YN KV !&BJ-$i(HQIϗPdi-yI0JYP 0~|F(^q ldTpF!$|Jݦ҉YNJ%/$_(UZ e0qob4EZ^*yDH[6^CAҊnpT5JtIĖ&KS礣0/[����$'uc _v:?&"����������`.Ͽgpp%nRVmxH-���w)>(èvNG$EeF^Kc *%W܊QpNn02$)^mR;|ޭ(-9MNqҎL{,^ɎT  vk.E%¤ccȆTl8r C]I+nT;Fb{K`T'/^{(Q[/7ZZG4Nw6Uxťa���;޽[2@�K.ԩS.^["O���������'Zαշ @nk6U@G�� �IDATo=���.I6O- '( NcqΆzatJnqi(F$zA]'(FI!E%dF'Q0Fpt2$=רRaBHIH1{STa*A.qKOHho(vH0;ܹJ"�yqD';K'ZrQ<bD=Yq; 2XK"ɪjt#L PE7���@^[[{uM _ݻg\ϟ699Db ����������qԩSol6@jN>7VWWiES~���&jRD9' |@Pq)!^\8-9#A]вKxv ! D5c\c][ZFcGSSl>FTNTD?)kS%D ݟ.r]2D&>^'T*$kĄtLe-y[On%6F17A'xń$'EzI*]Ic$Do���Οnll̏ .ܦ�ƍ^ߨT*o����������{~ukkDq>s̙ݻw��o>L"^B7BzH,\ݻ:DPZgI33qCRI%n_#PSbJzm `VN"&66ХaDZmTB{q#K#Qұ067\"}pwG is$Jj%%(T\"%}���~DVc _:{>."OS~����������x j" _ժm4}η ���>A];GC   }[8(t׃Œji7 :Qn옓QNOI)QFQEK0_4&)ʄ)&DWj%l2SBc7)DrQV^DHQ{סzk(JgTRJI|!amZcf/6����^nooӝ;wFpgŋWDq����������(2P~llllgeeMvOVNѸnm6o=* ���4.\ȓO'\3S,n$yPaAmq߳dw̟Cs5M%֩$4D$I+>xHJ]LgǮG־"T!D{+>DhG_otnLSA6jGڹdN 8A`ICJIesjOUMuԘA ;,����f󬵯m �\rΟ?mjjꇲL����������SN}yVml@jN>fsID^���J NނR\ډJ(_#JYq׺dQ#vFt M1EZn:>)EhXDڀGܸF8b<*z HJ,0Yq7NWLxȄ*WEΆ-sk6iݨDfHH%6\O)MۙHNq*śK7LQ}HS���+ϟnll̏zj�/7nz~c``-����������bYXXXwޯlooQ�̙3GSSS~ݻB��%$s`ħCSH|Gޕ1#a" S]|ʅPT F āF"%H1RҡXœC8Q%JjtRQ,hyDœ->lR'ݸWpQI%xqxi.y]J%?a6_"N-Il|uҊZKvI\n"ͧ{cTb���C]vmrzz6v||Ӕ����������".,,,Z>�jjݾ}"¿��CR?´dNrGAM8Bq͟FI �*e ^DɽwM4vꐗ<?$7nKLD(ᤉvPtRL,ʋ1J2yz2~ҩD4NQ-J*V$6H lS_ox*4! %xM4X" iIԍ0IJ 2Nd@ϣ-ےXq>Nɾg ���pwkkܹsh4>hO.�}fyy]xwE<���������WZcccc;+++ojۅ �Fqn?l6PDSn���x ΁U)tR4$/cyGAX‰Qʂ 'iHJ$I8Bv ULH:][wNQ⇓NB-Bt܉(#Axōcl"Tm1QHf objI‡d~?tL΍[J &#^iLOt[D 3E$9oUꪌ&-Xm1o\+W����<4l7ϳ־nfffm/GGGʕ+_Wjojj}z&����������@Zv}{{;@yԩl6_-"/P~���xE -L$LBSM$$9q;,]F.8 &-Biq%r8R|DrNp:d|ɓc:Y{0I脔B 7t M*h؂e-x#:犗!yҊqgTbK]lJJ5Lol*H<u ׮7*A$'X}3:&7Ab 0nC]���Cϟnnn.~SO=v_|=zQ~����������_s�̙3GSSSw���(JX*�Z;YD'D#54gyqGFzFA 'x9H) HT aQ{-T˯ڢآS\\ KpTl P_W]t-h%gQ^N)} 8IC<}d9;sG O_T햰㺉-Ć'HOzut6TJi|\v���� ?ڵZSl@Y[[;>>ݥey���������`|aa󫫫 TUh4~۵]���)\�aܳ:$ѲJJ'ʦނİSLJx&ҌN02K!CH< A *JJP?/ܫsTc*Ƙ<-~x%a*U!&#>ȧ6u0DfKTPrkpXjd �J֥߳MM 8Qʧ~ u7J(_j����<2;wc #")7���������� j>66v-�}h\j6/���EFQx^) $0 Ѫ~޸&ql`ҶyȄu@d2t_/X(1B"FM V0 `(-7JzIEE"I10b!AqQr402mL4ȉ ,.QEO1~R$oKgzHA@]TAtvb}Ψҿe†vŢB����kkko~ _˗WjV4d ����������Saxxoj`o3ZSlZD^���X`%J<qFQsD|ʊJ Zߵ>9=MFLQq)*Fm0sXтP]8G(bIpa:0Rt2\cW=HnH p:SUDKMK/a ,6?\ \n<cĵ~8 KQ^NGZtPH-7CX,PS���1/9s~ꩧX/V{nnš���������'Wܹ(@9snoo߻w(?���<~1^($z#y F X_pm'9~RQ$In (FI&V[!m"!a N5t7^gDk hĨ2٨x9ں0*#ޜ^IrPq2Jvq!:AE%\9ωmݒV kPj*Ƨh%Ez7^6$ 5zm7���۷k׮j>fCVO?���������}_XXjՅ`pp6w߾}]"¿�� 'N°J)qI&9D( ])ŨP YB0Y\&Jf8Pç�_oh^(:EM(T"FJ8єv֥z΅.Jme$ذ@ƍUGh? hcG 8QBJ7E$'hǥ8D'MISRTz7vp���Mk{{[ܹ3[Z%�x@\tiqpp𣋋����������CZGGGVVVn?�(?::zlUDSm���x0+X00M蔉8BtZ H]<I'=](E"%ZMW8*"�WT1ZJ{侫I0KL(T %$(i%j*eF%IbxQuݫ~}qO (G"+NFicQ%Ws&1|IMzl|���Ljݵ7Ϟ[acё|[Ο?W~DD���������'1@j7O:eR���x&KHSEC^Hd, fEs'^p"ϽD/\PnS4- c] R^{"9pr2L"hŋ0j>w0t㮭*C(Du&h(c1K:QQ7^<I& ,nê\yETSZ\Zn8m2N;Il(67|7fו`[T����1~qttF7nTknn/����������O$_9<<3�ell599#5���3^PJ4}GPt|}VI:(L<Z !&N&F%W=Ø $8N-/dNW(V)?p"nmi-tӓVakuG{!hCY16+|\Kjz&T8^41*eŝsOÅqZQL~WܪdJ՚(edoDI''2@W)K���x8887{{{SSSzxx/g~sii銈���������</,,~Z[_ժm4?"¿��ANsdOT2AmB'g$rFN":`B.>źxJΌ;m'EytvQ<NJ[J/~NRSEkSFT8I Q2N:jdbԐ|\ߍ1a}ͬFcT=EwEX⧩oЂȢƭ`T ))`m->EŔ%����<vvv;wf˞兡X\\|����������%C?1::v]jh4.guj ���OZRL!OD9]HH 5%i$'w9PSL0>k3pLanF%XIXޱN=F_Pohê*Fu`GUGlQA<M$lBMұK0qPJsCa D馩$5lUMeu7JU7M���Dl6nZ-|Ο?733"2����������<|ԵwppZvԩS_l6_-"/P���xRF.1X %$ )skam9U2G$$JHSZ-ho= )2d%8tďi*gcj&^畍;{V]X^mu<k[NᾷDi%&q5Dg~Ji\Mr=TbJ~"i}zJ&D7-t'7 lѩ3>11���ćGFF[l<@qFuss;^z���������xyv~~~a+˙3g&''t{{{޽{F��&$%ċ _D6 R@R̰/DbX+LB:JUS"JNVIZUK6L|<;L95ղzD2Pֶ%z߽ d/vژ !1Rm##Ҳ"G^'EI)N1-t![O|U,Fm5h=I Kd7BWRLXI=?Vɉlni���xR9<<w{{{SSSrddiZM2z ���������x@Z<[_mx۷k%"l���@*HrI :#Ťǩ'V IfbbqƷa'1QE6NLZtqj$t ſ{D'dr͝ ?=7kc9FUĘ>Njc)%IGn8$,T}HWPI*&!X݋*XdMnIcOtϸ*\(!gUu$_iӅ%,:-����O:xx8W_V1y_,..WDS���������5::vQ�Ǐi6o��� §$XQ҄ "I(X =IL*| 556:w^݄RK!JIN: sHc=|B4R 7ѶTIxtA> '$QJ 8ýyʈLccEPrE0}jfֈ_܂p\F_Kg&PU,%RklS����vPjo:;{����������P1::5SSS6773ZSluuHQ���Q⇖Ogg$\\  SD cw[C ))λ.!r"Ƒ9LbJ}ZgEⱣ| JWщ(ij EtS(хUvwō8||d9$3"-k7?>V%KG(doWUct( QU%d% 5.U���׎:�<nܸQCCCo����������ϯ&''d{{{޽{F���0>Dn & 6N<Bc\Z?f6 BR)ŧxi㽅Tnj`\L-$apk鶪?v"!ZoE盧8iťt;)E[Huұ"ѧ)klֵ,eG<IńMQN q>,Qfrn7����/MLMMщ 1j~ciiiED^KTb�� �IDAT���������^&>PVluuu-�/h{zww?w-����xizjN6q|J8ACЉfh$H(Z(T�nnc&H1W'St&FtJHt)p$ǯQ2c`Zu5Ts% SvԜHN|H\$A5I&.H^ZVrs *As6#czJĖZQi).Y(~ Q0/=Ymw_|]aVe/U����^ηU<?44 ���������m~ *@3f"r���4F?m"J* 9J$IG$YX L3u~IIqh@⤕DLiw -Z^WQ5 1:*7†~^npI(PQ'&%Y8C P(NVQc)9F릉TuM#Y5bVěRRI*GW5.)8h)掷n.߀ژc7Qڳ;����(kkkon۟577L�KՒ˗/����������022򵓓׷>LMMkR���O -hzC()+6(t( 9dE)A"qƻ)YY= 'ht5( հP qscP:L['EĞE'tgT1T&1&^[M\ 6 '6I&qY K!E\ʰJVmDc RUIn<꿘 H~=dye\~D^ )���� ^__zddkoQArƍַQ���������<7??<<<&''D ���#F;^pmEb&Fb14㯋5KaH"'` /ߋ^$rDofQ 8Z쐤n%q*NeqUq&' )*&6$tJ"ı1:MORYbž:'X-'囟3n>.R 1F;/OQ⾺ȝUeźĖ8EH]V����Կ9|�ecccjҊ���������|ZL.,,|ZjRAh4~gjww{D-����T)30^)ƥ(IÉx?8l<$uB"$qIpSzS'*É6Jѩ&iH74$N0'|4ĉ)a`RP$NmhD?GKQRUr$N&VFǕ5?}7ҒfNLrؤL~,'H���O?8<<V! ,// }dqq"r���������|R 6?3f!���C#Hΐԣȟ7w\(e%/n*N@'+ܑ_ej|_>UCBZJbЕ=tY:LvS1*ڎ2lXp}|^'Q?B [Ds>F8Ta'X?($M9 CKWP*GL"'1> oN>||'V����>]n[�j˗pݙ���������}9sMNN^惃^jtuuQ���cHZVW (Yp\|Gn#)$�iHHRX O9:|btGH#ISde'i0s(3 㻬Bwc*JdX6%[D}ʇ†JpESڐTB!M۶DoĘHQa'ja.N q7[ґd/MxV�n`x%K|e3ʘ ,����_=11q[nU777mvvӧ���������|ۿ;Z��cccޞlZI���^>l*xx=iSAQwҴ'HGx!]D+yߦ}Y'FFKԁxav:av4RMc`lԭU}ZҺ'{bH[zaՖNH {QE_Vl|M$͘dxRdi*zN>I%-ܖv/mY%$)ڈ) +yY����Ν;w~ի?>22rDݻwRSD^K���������zL^xjVWW F;S+"l���M;qF` hqU-:>dB6BqvIpMhU{B,\I+*ٺ]BL.{Mk/īM.PQEvCo됽7*dwYaθttLv}';(yq:kǍL,I%+;^觷x< =.Ȉ粊;$JQdb%des-����/o;<<Ve)��Y^^ |dqq"rZ��������Ol^rvGF�_l~ܠ���� #K»ʹ{Β:Oɏ{.Mת~W?_\Xݯx7nks֯[W5?ښ|]q:H.D}&GP:b~T;)S=Fz*$ׅԓ"贖$tQh~TJ#p/o⅑hApiuf:F/@1& Bw 7>����쭭n?777Ly\| gϞݝq` ���������I̙3srr7VxR^n(?���@?Hw<LKd*: \_ZRWJDaNn:i6<8w9p ׾0OabH />Cb9"Q.`rJ,?)#QLN~KM7 *ը]XèK_5nlKLJK@Aɥ׫����o<Wߤ�֭[խoyN��������1۷~www/ccc=y||;���|(@mI8)CV+wB %JP/ 0yI̍,؏BA񚨷n Sv8j`s/ ,Sڹ&^r,Vt+KHqmě71`RV]6d HQMdQ'ؼJ/e&O$mҵcLrdETRj_&itJ����@sۛ# _677G޽KKKMy��������c‡696 F[SW^&���a2I{$ dםs%\:I<D&a֥c܇T8]pRKi"q?%tZt@\=pKt]QLI\mOL(Ĵ(+(KOIXZ})#qR 9+tTt#mlCT$& <J1&1DJ7I?ŘRzeRG����3zjrA\oKKK "(6���������< 풧�A2??6ͷ ���JN@'2~>=QA!Bʃ8lA(q+L| hB%yD_ewN2%~n4U&j5IvNQ8$D(T`##ĊX#ͨmHِғ`+b~Zdki&H9j]I"FL]⸛ȉ.& ����"쭭}a~nnnl@9>>J*wܹ?!����������x8{OLL\xa/ZŁv?F���^Ir9#/4ä&iPT?q&"A$VI/,.nn .S$M>N_I }B!ɉhY@%Q3.EMJHUq0e'*TѲʉZpR̢%SWPHw"4 -jFWL 0b3ul,ut����ל:u+o-�͛733ssdd+)?���������<"|VXu]zuM/cccޞ<>>~7���xH(@#ly\"*$9%~(?M0)x%']hO!44܌ +)RS$%)`K-[$bC~IJRPN̪k} O'ry#q-r,V&]Cgsk>r�NrJ7%n~/"D*%bt׹eT ����+ƽ{~yooo|jjFGG[@9<<KKKMy��������CJmaaCJk6sl@FvwwQ7-����xHHC6L~$6<ݑ L4P%>Ta&3c⹊b̴FFr1*DAJY$i^&iFD<ݩFTC-hL)R2`I‰욒. Us3j5&+)"Ƹo$gyI*APq鄘HI,)ŞnדTz/n�)����^iwvv`^^Z-#=�<@miiDdZ��������C陙Y_YYN>�G^l6&"7����UpsŔNo&zj!y&_|ډ."oRRO#IQtDlI�JQb U+V 0J%P֔FhD3LWN$H'~$($mK^D}*$pҨn:A1f8%$ ,V%y}?U���/l}/]IΝ;333/{Y��������� qٯULOO_V_M^���x; T"0C."OH)w%RO",ع862p }u&$m./t;}{WN3 H@4۶L%iD4&]kS:K+zj.fR"M%筨|]ݯ7Q*T)'*֛)ƨZx����x4xa}}5NI~@yfess*���������}ڭ[~nwwwsεv���p $ :,ù=@{�Q NCܿ NBިaűe"70<%OO!I5Mgʇx$񠁊;^EWE~'~G$/X%hZ/0)>v?sa%hLrSds#R՝E$+:yY<'j9����{;GGG[@9<<5y��������v?T*l6(6@Fo޼9E����<ZxiDW\w%tO? O (VH ,$>w'ԉ%BDJj(LPQҋRqFBh)DOʉ(%X[,H2e޵%Up3\J$7",/A]WRqI*~(1|2L:ƝO/2Jrh���x8΃zjZ`�x\|yn``?("���������^fNξkdddʕ+~3??kE����'D\pLtG$<@-OK+G؞ g\hDR\Ȉ)Jܧ<UA$äsqr צODI:.FE=iQei$:jG'dJ,v'ԖP&Il%f$5S 1(Ʀd^F&ԷR ����n?[?Ǝ㮤%"Cl���������|kpxxX�ezzzZ}g%���(R cޅ\jJd3<d+aH|ڇ\ &(HiX:]pA`'I ,:tD)\0X2T?;]_HۊN]{^v޵=Ώewij[tAPTL 'P'ĵHnT6+Me$t%*Udwduvق$gd㓜���g>}+&''M�}f-3337FGG��������g7�ܹsښh����2!6sĔQ\,⚨>t,»?~wH1q>Yɀy$#H\R$\Y8}EBV:>9%K !Lb#3(R1Jዣ%#w]WVI 'm8ICDZbHWRTRR"$M}{qTè~|Nq{ʀJI-J ,ޠJfq'9���ݻ;199FGG[*@>88k",��������OŋRIٜh�epp_yիW_���IKSB$$yU}m6/?D;^ĎaLzdlۖД9Y(Lфyu!Rqufr$ZQbJT=J!ȏmJw$$E'7 zO|SۣRD%.i%bbwMAw 䕎Yޱ\l1S����#www׃zjZgy�xp\|yn``ϗ>("���������NFFF֯\W;�7/fmm"r ����x<(l.pb),LDؑR=RK#=V&qR#IQ)? IڤJuγ"c3"Q"I yCIKc/.i*L")(K.)W~-mƶb UOE(E'Hb\\z2`���NJkkkom�X_?663;;"2���������ٳ0>>~mccLOO_7Ƽiuu3E���x(}JLR8{Pd:a0>'D$۔7$D&}ޗ2%u4\b;H/10im'[>,ܤS &Q t KEOwKQ#F^c7%ҒdIdTo[8dŘ%H&X};Il2{(@OH1yJR���'>chh'''o�e3337FFF��������<|vظuֻFb�sεǿkkkZl����8J.[I"ISVT)>YrMΔY/xD &\$1f(uȎU*N/: "xTbK.Zd^;{GG*iRJZe77AY7KyILP륜c$7caK_$xY���Ijďx9|xx",��������x-,,QRf98^�� �IDATN^7oN@H����<&HQw>K7d < Tu[x/|aY Bd>D:-jKF)>Z*&Wl6:G#7]dpkܙ3U+Ҳ;2a~a,Q}mxO$c}+[O"\{O& ����#W^zj?D3!���������=gggvxxx}ees:7/ZX[[{b����J/СWbE` 8Q&N<Y~KbnFDYm"$Ory6PK5(Ʀ./]8+/+=zrKx@LOR92FlH* Q1KDe$1PLbG' T[3����x%vzQ玍���������<~={666֝;wl1@fyg%���8[(H .5~'n-ݦ'N, (?"@ HvGn*Xe,XN%Jqůզ( F:EH*p#Q| ^i &@r)]_T)*-?|9HyO_OTL$*[2_Q%y"S����L>N:�~e}}8sR~��������dž5[n _Ν;Ik(?���HOݑK+. Y$rBKxQ艑|R柔ܒs]@.I=1IaQ`Ym)\'40LrN.~IJk E A$+hJ՚Gj GT ˜2NWI$Z<cxa&jnZ���ǽ{~}gggrrr򟎎�۷҆<G��������YfRqٜfP^͛7'~P$����dbGt)'=_oDH2%O$#m'~Ƥ\ ) P6`Q:Hi:,5E'7_T|2Jw#k9 fi%Տc1$c%SH^ J*%?WDeR-M~J0>1Z?TSec/����~o gD><300_>$"�������� 7WVV>Vkkk_."����'I�֧w8%SАg%D:DёݛDU(봄E`$OB6 $8ZJ)_ އr;qMVL=.R,Ȩ>+xR6B/ڲa,F4:<D%ĉ)AZIRV| c?ЕT|@hp< \%Q:Q )>ůBTըS4����IGb�㮤ccc;?Aol��������˹sibb߹sVkƘ7eL��� #h>S@ PSJ,a>?XX)pIzo!M >CQ{ ث-9(ş,-+Jp%Ⱦ/qԒҔ0%*v*0A-(aåhnJ%$bBhL UŸ:tilJ$ח'7tz *����IihhMMMW666Qn9s���������5͛7oիWrܹ{߷5i����(.%EI)IHq2-1/`s'R F<nhʼnr (| )*YӢ⿧B48s%2J %8bTGitY\Q7 R gQ77vJ\Lq7 5I)4_ۓohd䗨H����<Zٙᱱ֓^~=|_x⦈<���������\x*7i u޼ysroo{?���� kb�ګ$$MC)z$K1$䤾<zߋO9qiWm'+!?|܊+xq̑F0I RHG1&Dl|5NRk(%2S.8ǽ:6oOڑQ)1nqIArN. .EsER%����wznn7K~>sʕ遁$��������;ggg~xxyʕtr~3??|zڗ-6�����N楟EDKIO'BuJ)Rl}I.R !4Cwɔ.Lysp+NS9lmY>UTd!Ĥ$69$ E7KMqcetl7H'&ؐYXSzEod?-K����ǟh4>rB�x@7665773G��������<Ν槞z߼sNk"տ,")?����4GSX}Au(&8$/,Sl'\J$iPETDR7'/ (YPH!)B7*N6>9DKIw#ںΔHb};JQl>-RGJ$7 +!J+?ۆJ'OTIT"ĕvBQ6}X!-U]�����>A>l6zԋ W׿V8sQ~��������͛7ڵkÔ;wSO=@���EK#I8X" &E)#Eѡ1Dz~DȟwIeBR S>L,c J,¼RIl52*E +85e]܊ &IOp lo|y%j}휮r$aHUWTm5^MȑRUd(Du+-0]E4����j?kQ8=|_X\\(?��������ŋJkkk5 _:zo޼9yڵ[����� Qe!I?W&8ķ(JTl27K)#'DdҦ8d%RERpJA)+dI ұR_"NpJ 2IK!+'BьK=61J1QqȒdUwuu?uK5 BBg&;& +b01l10ad2 $C(꽾U^jVwy&yf}_/.սy3O</¯48^VANPצ[P@NMs5ҟ�KD_QLMPijv���>5ׯ_O|gffA�g/.]^9������333~˗_S7oE&7����# 'ؐorYnֺ.\CF/UV kH9T0l)ҍUG!5+@Z_+ R Iy7W o^7Q_n|/UM.q`Uݍ];mTVJ)2 U\T~T2)XJ>#@_tna;���< ;+++g9 ,..ԩS333������'oddo|ݝ;w  L,?���>3 /7p|W¶RR12 oR$4F/tJ-[l.!4a_:S-S[f.kZX^';th9S�Jx?ά)NxIyĒWj tLhTI޸&u\_5; V8f$i[,|L4fOM,���v9_q-۷o+++{rr^g�����;;;9ru̙[]]=/"��h?IH#l+MEM I~[^ U/2 W]~k_9樽l\sYV:U[Ih.VWHtX% kU(VtH Jj@IM |j@k:Vm*&ӨROL7׺D7S/Yŋq:1^hO��wxx^z~bbGy}V'~g""d�����/~( O<TǏ/gggƍ?&"%+��2k!uSk}foCޡ *OlFSM#wyI>S�aǪQc5Ev ͽ,Q%EuIlL>۞B&^?/Enr"N?S6lB'[h9oP -1L8'wN T*,n{ ĤظH'& ėi}���Ír֭ 333;88T�^8?88{}"r������=yd˯)K|pp\~���s./Nq~,D<b"D7*rs'i-9< .a?p󆢓"7v8HՂ,!0t$OذMVQgKcKq̇tL5/ݠ7 y*5 x^UJ?!չ;i���7~쟳@?SNr/������i422m_{Ν�诩"eKKK'"-���MyuycZHD]BfqĬ !cDe De BkIcEq1juԾpJѧ'gR#x;yHUŇI􋞖˷HVSH. ׄx9<^dPoEXU0n'�K'"N^ZzKw}}���Νd}vϟ?�����)sss;;;rcc73g쏍}#���/Kj*ܢgh47N#'v?2rDSJ!cDjcY\9::Om( vZ>BGJ/VKm+ ϏO,6?cUHCL$6䡑; ۲QwyKmxH#a7fm=񊪕ņa���vڅygYl^z͛۳>{ED^����� 6sE h?^̼ƍ[[[?."%����a_>G~7۽ zk4H:S>s4n7ƕP~i:ogNڪKjGTBSF\7+N8hSTr 9C{IX/R|v$D>( nlIIM{Qc בWfn؛Y=0a&8���޺u#>{E{}"�����o<yr˯.K觢(d~~ϭEDnq���_. DZ 5"|?{33M)z$45.@Iv.!p0$ZbV[_;i EYP$n {TLq\鴱K tU^UI xIA ^g7>|]lWpԺAMTsu.pM:wA$ ���G;+++o<<<?cGNZ_d-������ltt;&&&6WVVΝ;7eY~ҫD��12+dmPJJt$sDZFNRL F}KAtƠ9GRC"N?.4DŽODQ}gվc™JѡYceW;nJ &RjJ礢4Q$WSJ6?]qncHjHr۪kTM1ն-1NuTx{$���Kv… n߾]o:ӧO�����fffloo n _{ccchuun���//,S?foܫcF@FdYVZ!WQˎb%6HѺCװJn^0t7ZRц˶tP=>e<z-^4[HºEK )@5~Q!/ݐ@Rȗj|{C $I1|}̂TO̤NӹN@Oմ TtuZ}��G{ʕ+&&&~^z͛^W������x \xCEQwee<7 Ǐ333>ϫ���x4\ko>!VzvU {uD \\}.=^[Nm> dyX!%fW &EJxk6coծy?Ez98"T矎ѫOl+ŤSjysYx].J/1\մ"1r׆{TJ-l���<ʍy慙?b�} //#=D�����G8q˗_]Q2OEQG[YYy���ןgQQ-)%f!zE3#4#MCJ6f <>5Oi٩\ÞMs2W3٥̯S$�hЁ ^gP\U%tjcqq\[XUh'[Ojk*fcHk/xv^RDY(ƹ< t`qU[m���;+++o<<<|qSNZU9-������`tt;7;+�eY~ҫD��t.Qa!۬,> Űi-6>WdJ3C�M>Zv6ߴ~j, @^,.R̐Z�%7mYIX-צRT*DO-tQ %aRWssT}x}m!4Ա)̓0}(ʚUTʛ�S_Vj3���)v_~…Mn _o.7\pa�����%٫?_v��sz+>1qT0XLq.bDž2ƦHv7v)U(V'c;*~ѭC32.@ZO}Y`H }>x"MLGt#[|_Ν`XYbI<}>vY(DCµAJzdX &fZ\$rBF����{+WӧOsr͛7ŋWDY~������ŋ?\{9'N333o>mn���i|?<|ׅ֒߱zXfay sxVR;aX>[ hC>͍*N/:F8U.1ז7rݛPG K 44cj#,?v؉m(ƫL !7\%\6n7ZZ-+6rs�� �IDATg���x?ts333?~�}vEQɥK>("X������<D'ggg݉'._䏄~*B?wqeeE7����%R(DxHPoSB7L^~8oZRB1i~e~溲v00*P>(JW H ZRT8$*b..ku|<͑C?viQePC 8DS#IUAz x$W'Hݴ6I,{^���1sseeM/Sn_/,..~SV~q ������ }f[{{{ Ե,dii"��Z;TE1lyZշ F]4o:7ln7k,U1K lCcx&V$1#{rh'ޗEH$;L4z1QXyDtJ.K Adg$NJ#EIF=V-on*I *^>~t k���<F |7q@ݾ}X^^| �����u333W~jssѽ6)"f��x*!�HK(L$6Mj!yU1EnwXtB!6>FZ|"iJtGlB1lZqmo5^-mHC.;ᶚ eE]yޢb,0yŖ^ +|Gmis_.>Gᶦ^eO 2i{6OP���{ǫWӧOszzū",?������> s/^pQ]YY9uĉrffg;޷���'ҿ x 6_7s S$:W3 JS`Lb3`OM+qWzqXuEBaADAl|BJEmqiTo#fZ_~i!atZUA/]ܦfa.{Ф@V:[|G���*766~͛fff9884犢K.}PD.������$w'N|W% SQ2??ώ+++_-"���x5UB܇sA7#&pDE7վ^UtFv5؀HdAZ#l(E8ZlLetp(I5,T9, b.uqJ9a]Dսs X?euH9@!,[eo~8S]����乹×)Ηɓk ������h266]vo �xeKKKe���Oo'^_!t~qfW<1!iq>jT{B'Y@m._9i,y.0tOOfN gN,q0 [iբqu,uZ|XM &ip]٭uNǦy4 A<:0AձyOڮ=���Ovι… ׹@ݹsǵ;�����@yխ/7llllwttWWWDY���<y\sxBzHh1(7AoN% ҐUӔ"Yr"]ATRͿiRSF\xp*pacTkKt Vr׉/T?w?;'S祌]s"ji@UYǹEqz,emqɩNHV|w}e%{|qJ-6)|N*���{\r>}z{ իWvvv5�����6(޳ri_ N8Q̼mkkkb{{;e���<b)"J%ĆBZQjApK5޿3Ϻ92]#i$<@~\ %vB)q%W)*�ձy3qe Uƫ9Nh%$I*tK~>\HIϧڒm14ӹyeYeP/R�jl0+���7o<733Ǐ?�}jEK.L������Ouĉ˭VeTxoo[;����<R"5L~^důC&m @GeѥFj!q<#T%RI6Աz#-13Fo9W` ,ɣ&X(i1[0I!j>:ᥞ54J eM6ǬUE|6IkkZ,aTV*RJzV3W}���<nfgg??yot>n�����v ղ,xii"��ilcI𢿷_j޹|;b03lA9)HGR )-)Pk*s5Y+V)ӽWeާݞ"YÉ"ΩR"!!]!r6*MtuM\4LZE|~7e6|}빘řƖm;( V +՚d���B~spun7_wq_soe�����H/677KJ>DY���<Bxm+ΙfCzJ:a=|$S<M)PR NZdy -!mC'L!ݹm<Ig:…u-\RDe8|q A"'>jDqjmyQC+ pG_O lkkVݠJaZ{���?]r9sfիWvvv5�����0(nrK:qD9==e��tҁ #;t f2osB[ ^!T?g~TepLܡô4JwԒ GH~^ \\ BD< zT >M* 9qQřTkUpVNPkTQat%ꁘ6գ= )C}8̰U@ը ���)Rnnn7nǏ�Vu(^tODd�����x,=3;;['Nj^YQ+OEQ.Sb ���S75Tt� dEaCdcea)@TV ΨܲϜ>�#+.7b9KR>lO|1َο s EbGqMIjjE:7"5%jA4tB*wuPU{@Tm^ ddq1M[)]ӼCGTL8w]u����N7WWW|ppY�e?yov?n�����ccccv-{{{ +eY~kDd���^<,D7dpĄ ed_)&!*!LMq]-& A*E"$e;׶ Բ"v*aN;G'iP1U3Hvɼ AKN@jU k|Zb$0v=f vqRkyo A^t`7^Cs ���znRDڅ �u=�����|kkk[wNX~���ЈTl*ͨ}/_"}RPTM)þENLCIB3V><4^zIC&^*IB+lszamHk;4IS@!pY8nZئpUlJ̕z5<`:hb8s K,5<X0A= ���Rߕ+W.}ߙ3gxz/,,\/`�����)s +]+++N8QNOOmkkkbggX~���Ř0}7|y E<ZJ#;~~҄JB*Y^p& MIM(:cQ Ĩ|hJK| Ըl*P[o*a[D{A,5t~:AǴP:%.pz?vyn*nj']S@RX容(:ͫ) R;&NqH)q)uLSz ���Unmm؍7OOOU�Vu(^t#"2J�����'N\nZ[)OEQWWW)���� BiFĶyF ^~, f_ <a/|C)~Ԉ_C LLKJ (ĤMdx+$lPFu,F74 5A/8MR'^LBe@\7 4H@:\cZSp܂[UzcŰpLzjTOG\ +|! ؄v dn!q����usuu-577|aqqNZ;1 �����Wm,?_Wʲ׈ ���-c#(j%6JcG(!$A2 #OJ@{&SD 4BS.QmEz-t0%b/*EOұa%v9|luI710a9H-/x.;6y;?^*nN8GN?bB)>74j59���hD&''5�}[^^Ν;wcllYj�����xխbɁIy���z}Аr"1-#RC0`H(,+ #/G|C-HbaD5X\Zbn 9JQ }^UQpF#H~)&VIyp V$?Ī0G:�nHXv� ěj[ja*ɞv磮\{ZJ99=P���E9sfxЮ]v|kk������NJxK ׉'ʙښy���x`#R}@(jt/v'pfL�jSFE9t¶4ENs{uU X#昕x-k+VG^Ch&\ qċ>U<| UxX }8ogM*1H^V8|y!+ V=(+μ<ΣS=���*~ƍgq%jMEK.}DDX~�����♹[% SQdWVVNDp���HR#/d߭}?LLHL$a>v> X qTYP$>\˃!DSf.m5xUˏz@'E6Ɛs8yD{x� a/L'RmT zXJO#<Tj'־:TawR@ƫTAN] ?Ὑh!U؇ݩgDq ���tkuu-}EW:ujennm"r[������i)<88(XFeEV���. [@w*w+U`$󪆍,Β8Q<\1zu]c#Hj}µ"KHm/Ci ιBeT'U#J\lSh$\7@V鴪tC+^d^2P>o%@hn'cJ 9=Y^nϳPjtI-'J jIY'}x\J!����4_%"_699ynyyϝ;=66,?����� 333W777!;###߾:)"c��\|]tN:Cp6|Q@}-Y{YLj+ Ugn>E&%C`º <H1M/1(pGj6?C+!ɑT cӋ'$VO7RV!+נѝj ;Y,5_egպ{*q_msftKqe���G듣̙3{,)_׮];s E Y~�����ZxD]+++7<<|ozz7677<K ���<(0:|Fň&2jgM+fUѴcz Y2Aƞ51U+JXO8g\\)`[Ԏ%[CNqI .68sz<hyt$T -)ں^`Ee/} tbnvWUQLcTq5IjzФr>p. nev/bJ=���?qƍo?~xrj&xs=Qa�����2Ǐ?ei*B?u"r[����<H:tRMbWH߫OAyF.=O:ٔCSF74ޖ\{6~S9:L g~H<KYZ@%̬#o RA5 d!5ӟtlh; VX 794JE\/.dUūdQ߬YƥExydDO}=Td���3ukuu0 WYީS."'�����)W}<88(mvvv,.--uW���ä<$$}s':ǷmhE7ùLEvPۜ)0żHt/:5FS`Ǚq[^qjFjDL"NIZN5V\YSJH^x\\8!5B-^D9;F%XOhn)fQ:-*wOA5'(}sϷ���jk0_ovKKK_uܹ`����SKmmmq9s|���$ e 6{JhW 'p> .!8BHm0:NCХ(<UIHE*{lאH 4V=SPa 8u1^-\q:gׇFh %krqLۡ/ K_8vl,xMViNT�&<a*2պ4tT?UFc-���ay@]vo�����)"򇫫tMMM7n���Y,ЧM 19~އAz9.01ϝT8b]F_4]ه7sүI<zzBͩ Ƕ*PP/0~B.b14dŴirts8u J̨3^EeӶ{_5P ����x97==Ǐ7_KKKEQ̰����� ?~V n2_EQtaݝ[[[-����I&\z]Xѡ ش)T׉˾_dr _-΄=lۋǮ5\&TNzcI6/ЍAj<ծ]cMZ;҆T�� �IDATW|Lߍ!; j+k±*8bNIi"u+K\{lQsM.yũLDC~UeݰWBJvLm3j����^VWW๹;�CQ<7<<v9J����'D111}###o:88(@̬eV:Yc��r6T qԢ HC*GIᐬW&9,)0&i6pI^R2zx&S|,T41yU(KA=$]GoB@# !ݘz3ceF^R2ېzKhos ckcJ|$L8&{iaN@eӪR>>kB*/aM^����}Z^^~K@VU;�����/;;;ǹ@9s]YY���KV<y1L#fK$d&i =$^\yoQ-ə0#*lH{I>[o)IC{J) `L!4؀F9Ź3y 1t^1ӸkgIgQI"]D9wL %TnJwպ<V6o����/wMÑ]_677zaaaSD^����̳ *":kxxmnn߸q_���#R YxL |" %Ju|S%FBHEA|-s^xWm)DCͱ쫂,Dxu aO`tˋג8WPH$;iC5A,|ZX vd)q<6ˣzu&.}x9C�loniVznHE>4qx����snjjmCCC@Z({ҥΗ9fX~�����;=77;CCCV,έ~q ���^U吕U`d g2! v΄]$f6T}hM>Y46xQ%Fpݒ4L`GTf7at c>C:KS(C8DsӬE<}j1 *R6k-q*?Mm+5%i*z^b=4j:yMeP\7rR %����Dnu܇sځ>*R_1<<v9����GL111OFFF///i�jYiZ&5���x8&r&_mG~ 6-(YyqN&NY 5XFR$Oc9+I%m&eHE ct>?BY0F0Ai\=,a7,(UK|5^=1boPsk1�LgۀH7r;LI4���xt_+'vww]b����#NMM]o>}[WVV:b��GQYHh!Q)S&yb+K&a% ZMNYHćf}j޶E>e% y]3XlG]YHȖ ;p&"i%Wxjި }D+e):\M ZQxzB%<Z*x+鶥ShqvZfB\)LSJj���zwr8S ":�����Dx⟉Z[[&�5<<|ojjW777'n޼,?���(˿ןFN&$B#bqsN zlpt#+X|< DL!FL+dY$?띩>ƫ@^3gΑ͵ӜRx/R>\ЗR4ޮ[R9⺥W-*{ɛNGKM2:8#jK-S d74z.iME|Y ���靝sSSSojEK.̱�����ONͽshhh˟âUϿwwwwnmmDd[����<&BF|B&%}e2Y#aF "Sxtׂ)).Irj#]tDMևIp0q##syr \'݀7iZO7u-դa% hz d) È4~66XXlōmeqڵ c53&,6fC*jmvn����[kkkovnnC9-�,eqqíw37�����xHg77|�433Zk^/"k,6���hs1t)jPaƴm)CjP!E-*<51 fu.abçk_/sy5N}<ͻi5/ {!HmR)}u2ID/E;{_PsYv)?K5!0fkɖ̥ʟ@Pj0Sdžϼ48T!Cs ���8Z^^^~ AvwwқϞ=5>>X~����� 9ׯqۧO;+++3"!���xؿݡ==|> /wm&޿ @si(JCߊj/iyd6yWc$'kY!x8Ӕߴ.G=UQۜ"!Dd ԺBa^^msy J!HR4czNAjtCHE_n1v I7?@:|b.vJըbC1so���q3###522677r~~~SD^����г/^36b5<<|ojjW677'n޼oX~���gP{^5ZMG1%P":!;1#qWOԙTF{^o>J|Z$/nӔ!Ws~t*y:: T?zZMRmBL#6T0 U$ %2Ib棗v*"ގ1,ct)TkA@���x";;;?3155{VƊxϥKTDX~�����):=77Ρ˗/WQ2??ݹo=n���8s!BU60A,a':yMBRd8jqFQy9][LT01OB9E1<hEE8H_g/4RxAkSɧ.Gb6dN褓 8ݚMONB5.P;Lb*b�O\6ҹ5ڂ���xY[[{rP�,eqqíwI�����ٳ?t̙oo&ifff,,--uXl���Ij"IT!);Pe1ޏgA > [bk e*?ˆp pWtř*_Qxw;qM\j01,NGܧjFuN2яn*5vqY3K85ǬB'7RtC ǪpcuP'\>wcW����v57LNNs_uKKKo>{tr������9NMM]~޸qxm�헽e߲2#"b��'JB$ ֈF*A:xC$v{i#>CT#_u { yEH-<}6zK)sM,jF!,c֯n.x|-᫵OD}I%MzEW_tj_/|vv\GUإa,P#iE-4N/uZp.UwC;9!���d=677baaaCD^����ʥ?kkkc, _&''ysss/���HD1"L?o."nwDl d.%aR xXLSq$$d.qu )) SdR8 8$HH/B:!18s^,S �K6*TbC$SSYoq &ǥ%6:q-Ӝν]4���'loo͡{YZhQy̱�����<N[_1�( YXXx("{��� fK!b" 䁆j7_̏-DF-xN:žva!'v|[FSeU@4]-+Oh*!T}öN@ '4J_bKKآ;<$}iM8mJ#Vy(3pRkKgs6jτs9TMu7���<~ssspS<exx;" ����S8{9sW7�C3;;R[D + ���<=lB8'TBR"~3/e_M4D^T>yH 1K1LԧkV)3UZ<HNEī0GIe*%5 !:Ti$=T --!.<BJf.{X6m|x̚9 I:` OYk 74����x-///{un5_ji|||kbbٿ�����<Y|rrr?pƍ^o>}|���>P6=JlIJIʈn-%*|_e N漢LB>!TTśakWz*g<tH=)f GDg<]|HBɒT=|^+TH›N!Y:֠&k{^ŧFv TBCI^SuG] ܈v*[o����<u޷>522򝣣w@mnn y����Ÿ(é_ܜy毰���5J4-zmzAeVbdċI/z.Nd,ɲrZū#Fc,hHג<e:Iml٭e "VE' %DĘ֐,\R} tZT:?:-* ~^)C=a,unX އmU#\RtH;_TAjLɂ3jkB����O>;55CCCxjۣEQҥKEDX~�����{رcoZ WQ2??ٵo=n���/ZB}ߧFEFbf e)Ki:Әb3>`ijKѭ2a<~~5Te^z)¥֗8w&k):`KYB#,s݀@G\ !{A"j{j?0 ¶^L ;;^u񵦖I'[cUjI!W���ٝ_s~<$eY_n-,,<Z����)Ξ=###KKK_yݦob�xfffeYziiT|���f eAOWD8ҨC7b`JȨDL̇$X1%URD}3Ljdil-xVSd'tfz FM#R-Q"|̈0}BSQtH~zM/֢Oc&U\~ fo0W{]=����kZc=uVM[ߛ5����GOMMm^~vvvq:{gyVVV:f���#R54T4?B :a 'bj1,FjWe9ЊRVS(MDTmBiyyԡj{Ϛ^R9:yjkBTEbM:Ʃ"Ugjz9t)SSF[fT(E+:"}ũ`Jv*"m_H����}kkkgΜ;, _666~lvvvCD����Ⱥ6mkxxprr\~}֭[���h,l)Fh= '.zC:He<B8a<LaGЍOzbܑ1֩nj+!t_z 'xP&qDI1y #|֐~ըV.'h^py. >DU=bKbFow.T4s&SIl����ƍr{{ԯ cqjۣEQҥKUDX~�����#sssرZs[*B߳;wDd[����揿wu/Iܒ5{5vf,H dp^ȚFg:~ZI-јckz?+tm.I=Gm8)|!O9R0>酶! =J3~6v6p3B6g"Y6 '&dSEsBƮSYj����;kkk߸077>\x(ʲzaaa" + ����K8w?wޭ C5;;\嫖:WXm����GYI(E^J2l[}ytv"+)>wEE@n_ao~OobD*i2$L^ ܇j]q]QLK)C6kG}sS+d.0ޯa~a_}}MB0ẚP.tu59cB%װ����PEOMM>PVg~?�����}188ק6];;;Xu&&&n=3nE,?���$vꡡRD47S$64dlهNppΘب)~a6P_ YYi1+ R0*!ukNqr}uOd %`͆3TSkLTlSC@*dɎ;b?tGiB(!(c*}&AjXK;P����3g| <v7�����<tiaa/ϵ_u֯����>y:ġ3Jlmk glqbMGr".8L S\᪖MR.ͥ6Hmb>C)M~8oYKibyGc+TPAX95HML(U ` nf1)FKTJ'l׋NR v:R~Ԙ24Rj>iR)J'b)%|k>����nܸ [[[禦~mhhKHQt����ndnn;V,/_EQvwwg׿ ����|jBIWSS. g~] %%~�Jh Y%OxH /7e kR{fE9C`) 𤜅nIVFp}sxiN]Vq)֏pS[Wl&񷯿U/Lj,Z؎FzJS8 Xja&tJn4����Y[[9j )R?{hh腅w3,7�����sӧ-//ݻw/@.e/+?���OG|"Dm uv9%Zb"#Jb bBr})l�� �IDAT}Ր8voTS[MgaY ŧH sUce!ŧZI_'<X 8'UXqtDCh UnmF|Q:ZΫ[\{u),cG7PJChGʠwq m���OJ"릧WY<]zrN�����cǎ׮]7o�࡚uԩo"QV���g"\-TRR}bbmťY%/EWz Dl^mq|c"9קzj>]\b z .yPw'?*iR܍HcZ ĮnQQM&!|HYH:Gh>qU'OfZMD"M.z{}y|Ee����|>:s766vkss?/e����{X__aـ>ō۷o[���gnp:;d#e}ߧ�ίUjC4d}USQcm6 e@[jyH<{b[0B)NԤ%rٱN67\^3&]Q'!$6褌Q#:HAԑ^Jƛ֔nB8 ܶA<bDz|դ2ӵf#A����iy:799XGψ^t/Dd����H#رhZ/?j'�V_���g ${m[EBnM^QyMgzk-qMLc)0cRT-'>'d{e"BU$|URfk%]4Ub8glM68B!mOt#Io_]+m\ ;ɥ6ϷmÜ\i˹TjW����ԝoݝc\ӿx_>44ŋODa����ϝ;N>}mii+޽<lvvv޽{i����xVw!7dTHĒjCg1 ņ>Ҧ2!5jC7ʃ#۶#Sm.t;M: ;|үUʮ:MLh|G#&7nʁn*:UP *%KYH 85nrYyGٵڱgaރR~����X[^^b릧WYS˗rlllܹs?p`����'߱cǾbjjjڵk͛7qˁ:wܭSN}mݞٻ(9]Rw%Y8b򀍱͘[ CH \ @ \!0$bMc-Vڳ{oGut~jWuw}y=!���áWM)>xRa"FB 31؝GKUix%J˨Qc&XFgH31Y)Lэ'ΏkF)ꈗXe;JרVw]J wݤ_+ԵR?XiؖܗVΫmu>o۟丳m{O]Vا^mW3[Í[6JsT2xbC$ m*Ɵ}}����^dٳg… ,._{{{?PEe����OW,--}[[[>w{{{���aSOG/qn<1jn@UIM&V,q;G MEc%}f$F$^ע�STs7R<I))x ]']Vjt>\j"1b=-63n{cɂ;E{H<"*CvjnI'ư5%eTӊ^|.֯M79jBQkm[ķW7A>����n߾333?7<<d}og}c"r����</..VWW_Z߽{wn{{Hl���lxoFmgw%-qcvӝG,}^{=0^7)Н>m6^Y~~I"s 6c).RiY(n?U),t0Ą;JC!:6 >ypۖקTR( sIB,>lcU 3 T~NQt*&IM<����?moowjcc g/_SN]xoY����gϞ[[[{qA0jfڵ׋ ���\ᄨm[GVLږO:"4 Ey.^K|)>t3:F\Dx!a\/:gTXGԁ |W#D-*6SY4D ZTtK c&Dz iK(I&]I26NY5/ m3M8#tk v떵$7����b^sfgg7Xr߿o^%.\111}_����cohhKfgg~۷@MNNz$"f���Tt Y hu)q!lmih.p;7 *w(%bu\<.aJg"ӊ. �L9z!*,dP{jJESJFHBne1IĺJde-(ta"*dHsH] s=V?)D7SLVQ����/?Z .r%vj}|����{olmmB5::z233{{{���Q:|4tiK[iZ#f5K+0lB wI'?_twR.lM)EA&J'ܓ}-D* N!h6Yk*)ZHIcEI8*.JHגf{\qKТN{"i$wQh)WJ'����/ӧOp5v~g\b����KKK388՗sVvqqs&" .���GSQs{"!g uG~,Q *q vA#ZOtN k5Y%}%\^DE"_t]QMU+RiqL߻�-+/F^_4H\1E !adt%[T1EHFUQXsq���K7޻woqaaღW5�˗/ԩS/^N9����aSSS?tٽշ<ajkfkkk=���Lp% TB7EmLjT|ۆ*0qDStYlxtJvb*at ;;ҼC[RQ<э/O/ -'%PcjMMjJ&hK)dMfi?-Im-3'vw kF$;N,4XN! ܴUJ]H����Z__sֹ(@ݿ\z.\111}����chhKgffn~۷4@MLLz$"f���<zs& [sI#<_R(&6*;ό?%I"@ B+..0l_׈AL0~ec*.ga%:B1&5q]}v %.,,>zlآZ1Z-?TDm,~Wհ*vS6(ϡT9n7tzSƔ ����?ܬ={.\pk׾aaJ����xF4~}6::z233׮]?::?���GQļ#bQ{:wq#J!$ Yͩ#\}d?Z4)K#19;<L)V␈f[,|ULEEA$J? Pꔎ#ժY豢T &uL7+IZbfʸQXnT}.ݪR4Vp���pߟӧOpUZ__?j~\D.����w ~tuuu �WZZ}sy����Q:C PS0{ ]<tiEx*J9‹NA* U$)AQm*!+aU׫W$<=?RD/`b4Hta+U]F-VWHy}5K>t1uPƍC7zL}mHʪ,ef���ͽowIS�˗/ԩS/^No����][[{q �fz Dd���s7Q+␊t(e o6Pp\_paB8Ċ?@ 1GeZ 0#u4ȔG\RuMұyIRv|}% ZKgB$z;<)Tq":dѣI* m%-!5t硪lg.T_B'ާDIC0wFjGosTc5|nX"����Z__sֹn@ݿ\zϟ155 ����b:uԗɃa}}ݤa���& J-.8 d 1G%EVpa$R} ߉đV'i0ܓ<HIV–m%=$!V]p4[XbjK龶[Tl0bFwR(V5D`TLFNTŵ Ҥ-.0n $T/^\<Z_���677kccc… wV@ݼys`ww,,,<WT����^D\ZZ|wloo ̏���q'KARIܫ [WQ2~+VLEhUdk]i~b.Ve GJsFZg)fu=U L", Q]JvTbQ9 |tIOIr cM))MԱ64|:%T̀���cߟӧOp%Z__?j޻ y����|.,..kpp𣫫,$_jjloo=ip ����<\$!lБF$It#Gm0j4>YұŶy~톔xtD@#$zH2F^ZG=Gfv0ժ֐EhF *F<ń3"b5-2`*UZtB,0Kπukgs@[Lg=b}8NVw\7NJ[c㺱9VBŅXDzPwd ����7vvv޽{ 4J)OʳNŋ)"����O fz"r���8+kp!˶PTKJSāi^ D3&~EHI^%gQYIxC&(շݲJԼI{FEE}RlbBۉ$/U~&Qm$FC_u'ѸEE!q}$s\F|-.JYˋO ����Yk?{nnΥիo=v����ԩS_1==[xX&''z}}|���$0Id.pn)NN)BhIf".{*gY>$va6(m:gN_!UZ=\,Em7xK>k ..DYPecX.V^Ga\FLL7Ǹ)(<LX(ʵ<\7Eѽ>Rr7���O677օ pMy?ZXXYT����Jjiii3 a=ѽw2 ���ɒ4r}H]aL_}NYldd7~\RR ZRL{Ez*(mGs$e2΅HZCB,P`).;+=,!DRèV}\}v4 Dzndqf*+-nNtDž]ܾ>&`X����988>>j޳ y����ȅTՏ^bAVvqqgvvv&" .���'M)ғ?X&B$[H'amӷْ|pXJv&QAwXu,|eѱ\,@6-fIB†I21ڈe^kQ:KmmFLiM1* dBXu<|R46^$AXJvT|ΜVsw}����O{;;;|݅Zc lee_xwD,�xJ��cn`zzGvWWWl6�-..^i6Y[[BZ���xRŠn^̈́J9~7E3H!dCQ|7~zlS8#`s۹Iv:n܎O_ݾD$S;Z0d�712=hٕqK#E%\L  M/!aB|UJ|:<.iR{נ՝L+^7wT���'N^<kgήq:>>6W^}^c�@j��@_9==\c&&&nkkk"���/<_ ߹EIc?q%|J+> rBvtu dnf%93&d,JIZW*.q\+w Xiw!]n1Ī`F<R S<VccVxcõp64H`h\1U\ԅC*-) ?׭�����O?Zgy怫 s=W 7���UKKK+w1.5_'ovd���<-z*?~dh}X1:eB(>o{J4Կ2 B1.ڮ{nd֢gXEM(jtљc*Il;R*n10j>PgF[P!($wXc b6jѥ?nvʀU竂7);KnJ���<uƍ333?5<<|�ɻ?!"ϲ����DjK\Zժjwxx8n,����DL$-(FHEqQH"`‘(bL cب$h<EK.ҠK1ٞ,B˟Qa+XCPvX7&n:ׯD'rӱr*&u{f7$=O*e Q ,6ާ䆊3&z p .Rܘ/=���ǽo{BV裕g?~=����< xdV]i6_("Y\����O̼/|A][\~9$fiHxTIJѢL[D%фxl2FJ't�� �IDATbU@u\By٧p80:X&HzJ$q6ƿOCk=#!(⏤B.V1KSya[ccqsQʨl8#lGq)S���N^<kgήq�u||l^eק ����ᯜ\?o>}oe���i؆ D3݆0QC0HvmosEs1.˔: :4$cm3 | HR.$�VWcV}%1u;QkGqVu p$ECmBJ +.OhCËe:nNJR)*Tܢ/>����OFGGg9`Mz窻߻ps``-,?����<^xݻ3%̙3SSSzgg{ ����FTY$ k <{,RtXn8>*1qBEo5?F{mr>02!a6oK!^ ۔V\ D.Pp jQU "zL�KX6 Q &VJgzBd64G]g|u(7OtC+Uַ{MH` ����4:<<7nLNOO 7_c'''""`���4j%._jjw߹sgvww;E ����J9u)e :yCfc(EVaЉDI+J$}yadM*E L'xӛ)cz<HߪoNm&*$"*])t$&nMQU B0>R4-|1 UeĐQwU xߨ袄`N趘[P5;����Nvvvݻ 7V�}rippc.]zg���00==74Ͳ+�<DZr|u^\g��� V/+\Jճ=_6K>Ok9|D,am:I22.)+huZ`.-)!4AhW)=+Q*?_|HҔ"iKPFbȒ[z|$ %TRe7n?[[Lad1E:|_!ӹjv)B*V[ݟb-+@�����gg}}Ϛ_eU:>>6W\yOOOCP\����xi vvvvppπ>}鯬/����Л)(iȳu ĺCNmKJI@ $:^K@nE^Tݤ^m<VIGԘbJoZ<ɵdM&jbpBqKJ<yaŤc\ tㄶw!+|tB)iB*lĄt$OFǨ}XISQvM����bظx̙g9ȾPݼy= w6����ի޽{?a:s<s޽_e���ҰǃU{ppFz+m'NJi4y0%ZhiH{݌7at<wLk[qFC"i�Å:|jEHlE5* bmB- ]1HwI%QI/jE-,E7 jIoɴ5UܤcuJO ����PΝ;Ǎ7Ƨbxxt#�ƙF[>슈���j|iijkkkK,5_jjw߹sgzwwD ����/PI֣= !U$ "l|DϭuiɷpۅH>u\.)c<U96`kFJC*bjCǪ�1qXC-IADT|7KȈS!iqN6Z$oT\eMRwl@ѕ6"qU+D}_t-U_`7Q���� w-,,Y8._|ippc.]zg���E54==74M2gZr|u^����H9{*1=%iEmQ^?kOC7;UyIKcê?iD-*eA]8GJ8B7Lo J}TWA*5-:NI +[RTĝNX[JBSᕰ&H\H\|jm0&OK=]T9DlF����'co}}fWY9͕+Wt?;S�����CԭSNzr(����^~)^yPADy硛W㛲T(%m%) |a&,KҰDpFa_ԡ!%i b)j4L7>TT[FMNMD82(OD�FD O%*EZqI:.cvpLx K??Q&\}ҁ����iq||6 ͛7;;;=??����)y/a :sa���!YFA=^5[Y+ɱJ;<J_!QN"KcWUߖY>me c+*bŀb(һ6_\7F. ݀b$B$,"6t&,-jaLؾypIe֏iDȸ5*Ɇaezk\N ����I;<<?_>155' _gsyy���d|iijkkk,_jjw߹sgzooE����^<~,"RZqjb1q jg$R@J{\љ&yԄ 0l\џf*J>KݒwW\H9ET8!l.E-- 3? -$iWI# GwUAr99oń;dTIt! $5:F~p%S^����5vwwݻsZ}R444.]zg���̏nlO+�xjfzfg���>a<DNg]wEhVp4'z)6ҦtlѡO6E]nOa;4Θ|w^EExoݤq'B*锼}NTˊw5$ )IC_F<C76#k6I~0yE(Iyfߗm^�����^^f,1_FC\_W"2%����wgӷN:WEc?����</Iy3HL8=W>ӖZL|N+ <$$[J9XR4nh)7WbT:#r*~ɔThʗdRUcu@$$dOڨMqv FQH4C]#L\p%X>1f%ѫ7z&XcTL_k����< ظ4227o@ݼy���SՋGGG{i_ Μ9s<99C;;;5.�����<:dqn?1&/?/?f^q9EHR6v$4D~/ϐ|^% thl+YBKw-*!ᤌȀ5E4ta\[Kq E0ơGZ?|'>YZ81znKUGP0HI|&M6Q`ǭC����:::ׯ_c词3F7MFd���<eZ~xmmm࠭j{Ν齽.����Oء{O"n* >G+rR,ۤʂ,Qaު46c=\"am/z~n⡢{jHH#IBit~TiЮ"�t+ T\HR!$#2+1.)UW*SiKBM@nlRSI ����x(h~aa}j5;jeeeihh/]9j���x o6p-..~UzDd���F8oBySVC(&{?۵H#5yJ! ).B)&{d'%ͥݒb}dQ9 O7DWȨK.ۆr? !(qX8m G djt\kh cܭ 郞](Yߝqs c����<l{_l6_;??hȕ+Wx333?;O����4_355uckksgӷlmm"1����D )W;^H%k9#.&?p 5qm(# Cʶ8T#?}%|'J\Z!l6O^KUF|jkq!Q4Rv<qm-)Mķ`d;qsV˜(/4����KFFFv||6W诛7oVsnnfa���5{ Xcrrvvvo����Q]b %{$L<'ІQvI'*J8{)Jd(F[TXvϭݘ=o7IS\T$7QJn0&>$=EJw -ʓB"y HȾM.&P>cCTXąY*.R\tUQAbƇPw Ϩ$M*ɚШ-9����~SSS?:22r9h4~myyyUD^���xLM.--~Z"A[~`foo{DK�����/dGfk6yvwqEh\ pҍ(�jn&/ݾlbY\ DM,` <gFyF1s$,JÄJڐ`tT)%kNɣ1N2E TT+@~W5ۢ͡N1ԴD"QT&[x����K߫V= XYYYK.OD.����C333?>::f '_U׿HDY����xi\5o +&6z"Ȋ4|tJԖRYQ,k.:K| JtN/}T‡=$/*좂:ft\JQ|nDfAWiH%vt' uO+c ^Џ`Dj s�����x쭯a| WF!W\yfggh����U###_;99w gSSS7tmm"1���� i"~v}VJ7&Χl(-H3H@fUFµ)[?Ps}n6{,2pOEtSH~IT)}oTJ(R6f_7RWm+.aCuX*M !7c׸po667D㤧*k\ cИb|QqltLn-5����%ፍgGFFfbb诛7oVcnnɗ����1Y\\(诱ݝh4���'#ވEB0v+\QE6X:=P, 4~\z}bZJr19E:„W0b~plq5l|uIP|2F_mSzW ,bͬ s)N`F +h('y$$ۺuC}E_&ǬZ#UNXZdDn1U{J|М����ڵkSSSfdd hUy%���%6j._V �����Mi~"SʂVEa#iCIRfU* 1LRǷw&AM)n(mJc":().yJ4%6>xJއmʗ&FS7٭uV{qOWLjȁU5"9l&Lo Q7YRiI'"D#y -����hvaaj<4+++CCC~ҥV���@ &ſ8>>~e^kt���Nj-<~)'Fd0bʿ7$a˂4KgmYF0f!B:VNJ%|$iXTB3ר7'Է:C,Q%x+/DC)|BՌ 5OI/;UMZoTN����G/l6_bh4ʕ+?{EdK����a;sMNNomm}!lzz/][[k7~���G_3eߚbZQx\AtEz2:k3�b( 2 ?6 :o|̯A I3L2 ¢~Rnaur*U!$&._}?-2逌 cs18YFgv~ׅv765,glP&QlR)ZULg4U2����gzbb ۷oW677w���fqq~Ν7"566֘g;;;F7Y~����x|D ?Bwm!yEt+IR$YJnH$Tt@$jVё>a u;H eDXϸGP% nDۨ.^NwLzyl7mQ*F< T8mv7cZ+VY%����8{/_vmrrr###\<677Gݻ_"*���dŋVZ[[[`QZp ����@E-,!Q!<_p۩g{y2$<L.OwH~BIw;ɶ%)h Sc5t?Da耦b:hDC0, PsI^tLޢ5ǵX5A 37Q4J86koJN����h}»*leeea``ϖ/"X����ٟٺzf<Tq||zVj���㩈stLK}kD^ou=ϯ_3YCS q| iG)k|#):2 7d dpgjlF᥻Ot`tX$N?^)p"PI}ʨ.6>_2MW.||H'LI펺)n@ 2)\%SF"&o����<nlf~~~I;ygϞݛy p ����PgΜ&''5==[^)"g���Z; P<&RNB{.貎<V$ %,!pb}F"$1;TJ{CD}nː0ǰ*bPi7RsآC5īfj�� �IDAT]3I4$$ '޹ЉU .esBU5DžVl|cc:!F*!YLM?wQcG$5>`"-����qgj||W۷oW6;;{���<^[ܹ{{{mll111L6 ����O0Y +H G-,ooq4`0oFa70<>!Ya6ن8щN&bb;VpBsK7.bcS|Nو?He㰊!i65Q,kӍI4AH}dq۩X�K"ʟh*Ņ@_t*]]H?걖����ݻw'~ddd䘫 Ƚ{r]D^���HL.--}ZI^ϾP Z΃k׮v)*+����O|Rta#P>ROxgx%4GOdFԕ'y>QSmڐPApnqgP4bZY7YS T㪔x֍,>F+J~32+\ǡ۝oR}٘FCڰӪo sʘ0qp%M e-)zқ"����'Qcww.,,Z7�}000g ?���m6W^xQ-..+MV����Y@FV"IJQ>9=Gхm%|W|&dtE[xdqn`5tt@S/e|ŗJ'Ҳ2ݸ}MT̓_`&|t #jѩ5oS)A:d닐Zs T7\+����$fOpe:99iT>ܹs~TD���ٳ_?11MGGGUnvY~����x`GW?`Y%E_ˏW<oUL%0%1<Z-RbC"$;z77br HPgP[bQ7/m$!"R0.Rl2.~GWDE"h(n%UkbT;+ K5NOxWi[GɆMJ(>O?Wrc6mT)+]XLwؿxqa\����xũS$+$gnݪlnn[###���jok׮rف:w\crrwvv&ONN~���K"Ƅߍ RdMkYDzm||BkXDlw(ZPtP&> <]!*Ȏ(Y5t:ic((*[ DskgFĶ-!~V݃W:ħ$NI^m_EJ'R4ؤWĘ$jrE֝d.MDe.6 7kV (߭:Q33WܔZAU+`T����<߿&&''xttkkkk?]ti]D^���O饥V*^sZ흷nݚݝ����t'kmnbwV)kWxg6kSK:+2xVo2VrLh u6V0gr jt;K9<=b9VTd*}֔�IrV*-+V7R* b%ƨ` w�UwM K ָ61~&7Tjt#[8����doo]V#gW\8���<1NZ-,g~||z%"B0����<ek!́c.PX~^3DIgL~|Q;ѥ"%$'W_*F- ﻅ!a4UhD+v:1wnG3Bي50nD N!6T;qD1 F/ɸ?C?'wTʮq ox:����xZ]___s|' :99;w쏉�����x|}䍭}ttTR533_V߲n*���ɔ'$jD`K1ܶyÖ7f$R6H(0YA (z)WZ8XVO˟V 'y4]"g"EOU &JkViWP*QD`kI(aC05McJjњ5VrqQ)[����|tccOI6InݺU[###_���Ϫj?7ܹsu{{{l����HIS)wYQ C1ć5J(H+lO$NMtӋ) XJ'`z"ZX\_1R_ZCHy)VlK78J& 72jZQ3 5/.daQK?Je;?բeEZxK7FWСOֺPPF+$����Խ{~uooobrrGGG@mmmKE,?���țxT*?s\.mV[nM]~:O�����Pj}Q$H # !~H4sWk俻WrrV%f~>>&ПaX$ HΦ"*.c&>="'*c}ӈQu,S%7qq%قwٍЈ !NpŪ~mr٭!A@اscT>\8+&�����9Ù߭Vʕ+zҥ8���<rNիWJ@-..~zE&`����@WO{V4YZ7t[D 1˷1j8qaD%!BFۆ"q'ALc;DI7ظąSi #$iʛ<r=.UB!zzPtBDTQ'oUHZ?QycMUJ}.Kh t����)Ef &�Ryܿ!.���;{7NNNƣ*诙j,?����LDJaݤB(Y`%fO@G~; @y�%wsw(C/h[Qe%n/~tK~*آb֖erT1Wb@_.U)FElQ˩Y.<zLQ}SR 7`^~c [UZ~I'8*CZd7Z<Z\#=����H|t}}3brr賃j���x|VV۸}p:w\cbb'{X~����@o!+X7\gKOH|φ!cLMW"L P1UR 0C7E+ y5pB]8h+K(}fʐP^kU]06\pї?wl&ͥ]]p.1nڭ*( ėRWT\cR6tf)&%E%����Txmd�xҥK"jV���/ARz>Dz588h~֭[׮] �����oQ ZOߍJ B )VXv-̿ B8 Y8`%hBsJ'H?GKLAp"M)Q]1pFVDʉ1r,1!q7R2մ%INC"jqM,:YA\ĪʚPT@ĪL<OC*vUk_'ߊ{DgVԨ]UܝV�����@'{{{V߹�xȮ\2?00q���xhNիWJ@-..~_."�����&<{=ogu@ DZFZl}@U}, y( ZJ:(~ - PaqZQA_C>:I.z}#ZioVI顒K-UtBm|EEu',n5D/Zr]_jMMZUL01ɱ 3.SW" cפ&|ֹ9����O5W/,,|DVVV^766;77"2%����^<gϞpttTei7Ƽqmm3E2����TXKBGhpm%iI[S"% ,a{[n4#ń$Cڒ6 X.<$j@/rѸFtVF`BNÅ\q[T3tUǨ&:uu6RJth. Iѿ뛠y;RAxzlR,/a4 HIO%an'q�����|t}}3bjj9诃���}VVۼ}\~}ܹsޞ־����|:Oͫ0$-)~B(: 2wb} T;JI]Fjʣsp<@fX&>|݇ dtK7.8Zj \G[.͋Wpd=Nu[U*i- dDl& u40MGtLGd6D<(I\p&҄>-*F}M�cy^5dZe )����OKx6XM~ҥK"j���M/--aRz>544ZXXxǭ[&_����S`*йBS6\˜q%پz6ZLd"44@SZXLȋ3Y~#n#Q@7YNKVw<U2c]),~销c*J=B#\NY\鶮1HV&\P=+E#>&ĪN_J7vHeViYZYL<'<zlD�����^ '׮]Ù!Ϯ\2;00q���x^~vxxxcuu/ZQŏ6X__ �����|LGMg/H3 1]QN(pbB%mSg .te.GQ[!/NrYuHi\(oM'vĪIL!/N +Dm&.(R&Tdoq6zqĥ\'nz<usJ.R֢~ܸu*F-ߴ^C%u:Qo�����$g.,,|DVVV>wlllw~~ߵZ.���;{7wV �<T33371oX[[Lj����6&ªIKJ7|[FLHjo,)}X^!D]Z0*[V6I!9$%B=#DdV ^ibŶlIMĄHOt֖4T% X}>I[TwV]VbվF%|ZV5DapaX}NQoL~!'HY¢ױbbRTUm$ ����Ctԩ/zE࠲-7Ϝ9,?���}vVۺ}O]~}eܹs=i}����$bqIKĥi%!$q.BTl@:73~Pb}iFM DqtC3y%-2zVyĭD s-*Uk?2Hjh А'_Hz+lI74\N1~Ψ m+w$*#�iNuAۣō?ƄJ8&ID$+EƔ����<41::`s/,//okX~���<f/^JnZ ui�����/:_z7TۉFek}•^,$E,oE=$ERFwcĨI:?>{\Og#yhat5x yp+Si_=G BC*. Q4{?k 6h"=dO鴩s: nl҇N1[NMTQ΢n0pf4ŭo.Wd����;ÙVVVf$��鹹_z/Zŏ4�����&#q~b޸" Ȅ-Z=\pHK;cPBh*MY"j)G>uVan-cP\6)_fhCxJ.bmt3h 0G i$ #RcFc|+n=/6۟ snқŭshZi$C)!SgE�����/>99@C*;66=77SK���'ٹsybbbss޽[b533sCD^߈����_q4 ; YMED\ͳ6+,۳X8nl>oZ] FJ وNVaUaFd!_B^ä{`$Z늚RmS3"}x6ZX*1ưFI%G a8O.袨Ŏ>3U%jSQ)%XqOrū-&4s񹭤>����oKCCC_655Aess󛦧o9sX~���<>Vmݺu']6ܹsyn|?����Ј|WvZRL*I%꙰> 2Ua,\Cwy*aC`%f$]."jLiыQs?58܅o EBXH-kވFD~SSϢ )8':)Uz-c4&M*qjG_Y%Q(%˻f\h&IG0]cuOhd����~h4;9>>,:_;;;w/^װ���x^x+3\PZ u7~PDz<����cC]oy" [W@n]Cl4u"aۤm(jE *;(1|l-.*aX>SU&Z<dVװ$*n=H.omicou$B�fR)R) Ý!d B eKL`JB%$`6K:/UHjz{o]}]ok:ڏ& 4coTIp2&^T۶$轍I[Wr|xZ;W~T}' <r ����xOOOZ�ڵkt{E��Љw -]vu-~Ot:o\�����+)E!,& Le%lcՄb|لD &;pM$-)&WjBVkUIrn*>ӶXMtI5Ƥ1W%y#J;_ am4JE2nf1g΀aH5rC 䉗Q\DD~qrU]Ze5Wn6q)te����(^^^ k#)�� �IDAT5;;\իozի^6==3K���3gelllseevwwqрZ/^\\Dy����(7EnRiLVn6xƲm &)8 `]^͘yCDxٰJ-4ɖKBW7 }z&Nxʓ8qxO'iJ:[,'_gƆXFV y(ٷ0RGaviMLc 'F KM� +u *oRFzViJ�����xtg~7.@ _yի^u,?���aYC\(Μ9soll+++E俱����G 5(!YoX B?﶑$tT(&P1LTRjO]kU ]ALDZS\%e =1X}1F*]DB!q%\�`TM)p*9jMR=+iӘ&RNenmr_dhV'ӯtJӜ����xƍ7Ο={U v^xs=*"��2yWUNs `=33k;;;666~$gX����x,Uᾷ$ 8">aԗԿ,iE4 k^x_mJ]3Naz?p-*?P@ŵ_:4VM,4pQ�IWeBJ^_0MU[}N⑐.ᛨ9a71 I% -|8*D#o|[�����n^xaϞ^|"r��+/<ysڵ75DmnnZy�����Ei.6+^Ф"=mE?'6ziH <*0>Dg|GR6}JDPG~z5lAqt)]4"`mROLMgD8IGzI,ѱcįAښïht&:Nĕ6aħ~\Nv|?XIGOgB/a&an�����xm///Ϙc._rʕ7:ujmzz_v\.���ixx[6ݻԺ|t����(lȀQ.as^F[@$j8Xͳq%oq^iJ݆M $A DTɅU!kԂgʅimFGNp7ٕ'obO{8bһC㨅 "7AQwkY﷯8Ej]]�ŇxL3i*%\^�����x ||?~ ם;wmbbb��>ovvvm{{666XpΜ9soll+++EX~����„'G#\(HK8TKQ{l?^X7^5т:g$+.D YpF﹵Gse&jg)7tf&:u/55g(EJЋJ-I%jl)\uIϲf)"Ǻ_uHb|+IiW'4q)1ƗlTW7ogQۙ����x7ng}诵oW=uy ��`ŋﯪ.@ 3333#דK�����xH$AoV=럅H _D&qo^ q!&'Llr2şSu^6o<_h>#mYQl^8QهT'[.b cℑ1~ТO˭Z)I%l,ҝ~TTUԍޤINtQⰊ[[1&>~׼2׵8�����</xazz g?_t}"r��Կ>ykPQ跹]D^�����G}W%aUה4Gh"|gUET*q+vqtVkg'8!.yAK::}1~]\yOUDM4:>P],!Ӡ?98veEED*톉&󋡷Qx,/E+ěFMŪ.|f|۫Kp7eh?KծBӊiC>Ə^6;e�����3_~pp333@^SN\���1<<m+++_s݊Ekrr|����x\Y~xvD Yц+j#$ cݾ6/vU?tz[ #a\_HOh>whom nQ8gܹZsVõͿ1D#h\M%;˿vcr6߶8MH~pHha \JF2J&yzQm&jOQEI ����:Ϋs6@ݹst:xӧO��Oήmoo 译Y]] "����wq[(\az;*%Ҳ : bH{F}bv}/ c.!:.&zy邏a:65b!돩\Wkt{Gq%kKJSOͦq M6O 7LVᾘà>>UBkXVѽ*3w 6MTh&u l����Ippp߼y>@ݸq۷s=w]D^��/^`UUtf�zzz][[[g777T�����# }:yFhI;W|XYɅ:4 QnrIb h{gD\l):a.I^PcTMr Q$T"WTG;G^'FJ&]q']qM'FA +ӾB*ii@TslՍj@q]ۉۆ\| +r7n^����c`}}_| n``+>{WUK.ODx���_<qk^W 觪dnn#BD^�����Di C--\D\^!7^b1ֳO;RtULIF׬X 6Ӝۺ/-Sל8L{ &)MP<YpIqAn@Ś6nJLLtcD@g6y[#T3v7Ihȴ7EF����'|qi>dx7:ujeff0/���622_W=ԭpqq"�����</hjAY+_&j;q'u{&l} Ӷ蠇ݕ^j\IǏ]4F?n\V&cHqkdB#LzdaTfkoGC1.C#::>8y Y|dDKoysח [I9Vw*Pg9Igzê҆YW ����':Ϋ;%.\uΝ|wN>,?��SM׷ nFFFFGGJY~����,Z<̄C,Pzߪ't#Ky d]o` )a-#(fs QT' /&QQ K93DL߈ZQ|=MuRĵzLs:)(7D=NB,iDQ߶3!ۦ$4cW{D9QK4aeB �����OׯӧOuƍo{��x*L_xUUwyy<zzz][[[g777\=����&IDBBgCCHX0*C-ݹ6X+""IΡ;o(VJ\fW A[a$?JFp4ꢷ-d)r c苑JE a JSL@MK/&L5~%7>l7{R9pyō3pkasشrLWuWj^LQW{|y�����x=00C@=竪˗? "X��'ə_<qk^W 觪dnn#BD^�����M)b?ЄЍgJ .`$ i4a1Q=%:\">UMk ;Ybf6S7 D!ibQG!uqT![F7i|4Dm)j) N߷&$qL|\tqao*FTRInP @iB.c{�����O|q>xʕן:ujeffE���022cccN*.+_7׊����@#l$t ] A$j?9|EHڬU _:B.A+tgذ!m2!<#)s9}"MSnc s2M\?plI/=$$$.S,Jɔ1ْpMmlX.K!Ҷ+:b$P�߆T$iP(-La߼U薖yjT&1�����x ]t:>v؟p7�_wܩ:_pa��<433sckkoll>ldddoddWWW'DY����.4sؤGHB-D-Pys*;}n]vO(cUJVRַd&rD :6%+!o8 lЈITǨJXEM,y iI)qWטxN_9۴|U4EϬ}?nR)!Yr�����<<x\~>}_ׯ_?~퟽xu\��2}UUNsK׉'_:%�����<SQ Pq'<QtH0:`TF7FEhTYqAqEGB+J>p 0zFa_=u,1z'לr1+r̚äJ{HUVY+j;&Qu!˓-Q$)$LZ{cCόzO;밯jptKssPJ7r 4usp07蛯,����iT۷MOO{``9>v~ ?��#̿9qk^[ 觪dnnC{{{RD^�����PsHhO t4/[5*Z'%ۆ-l8+~&7lqLk(){(fCG3(o!R79tD5N"|L[ӏ 5BwO2VHU$'v0+sR|sqZ ,7Q|�����x^^^~Ӿ@ujrO:2;;?E���x~F{{{ɛu]Dd���� 0QC?oTA3I&H|$iGq](n[k0z$uP3(M!}mݶXsu:b+CP|Q0qQ{z>n_?& X! cOۇYtCIjkIML9>dŰܿ2B&6йI]0nh}5}$s ;�����ÕNƘ?{&�;wTKKK_wof�� o766}6227::VWW'DwY�����l!�bTJA,B.F5:B\[JB1>p[XiC)C&iF9Pۙдb8>rs,FFchD:ޯT.J<&k>Z>6ѫfcVv2& {y(clMc$GӇ]rrQ$nuOW1 ߆W* B*�����Z_nܸq~llN>}ȍnܸq|{{x \V��1{UUs\N8QOOOn8[:%�����?^/E0D|ZE=_z&9e& FsM-ݨm>&hiF}1{Ê K8t״u$y!d5\E4M0mϨc&Jh4tJ)903u $9UצbXmI"qss.i+Ji 7о*YMX6 6~b�����>zccn߾}nzz݃<ٵkUU/_\`��̿9qĵk׮OUU܇..//�����hi�ZQمڗsDE'3Sx_P\Ř8"y2iǪձY%K)!8ي4EC/$S =1qM'TrD_FsبRey4n N2G/ uM&ˑ]PN||LM7& <( �����p{yym>33M�<,݇!\'OBf��966t^<LSSS7׉ ����'ȁ?+ސD|Cx/~ 9oq;!P Q%=IT*}^Et.6sjDlO%Rτ帼+Q'lͭnH9u*lӮQҋ־gmrӴ]HQ9+O½ j&pBH�����|®t:6 .b{t:_{��xYyff? n72)"����Q r�)]lW( $-\֡)DFI/G1;!XqZ!oCI qJ1I*.Ɗ@J;Z4*1$x^'cԂu&'MD]I8݀JUf&KBmkUS7 "fR!|l>R �����|bƾX>nܸq|{{oY~��ONsĉ/onnommçX�����'ABz^NDQ1lT~m$ Xj ##*u~v$8%_>z`|Agt,G;H 6 -3Q4_iC=lNv!g ՁҗL̪hD_f>m*YEm$DU8VQYH\F7x)10#�����/ECo>7==k<<٪>pI��̯8qk?�TU}pooWu"������|Ggz*߄ ŌpHV@L'#Jb A0\`'jOć,nf(n]OI iW''dt`E{Q2Ib06OzF` 5!*G_$Inb[ؼGIvǦZThŘShN����ew{yy633QCW\ܓ'O.b���N{{{QxMMu�� �IDATMݨ  "K,1�����:<#j1p-=F=߆P|+<v`k?0mEe jq{>~hCo{gG~\(EPH2T"XNB(q(.b[A$5gk}tHO~]P(& N.\|)A{6јt0ɉ~dw �����=t^c/\pݻfiiϟ?=<<-,?��@ћgffoll�ݑrAD~����NFn% A }]ġ T҆-Uj#M7DK" }u+n>b(z|1gQ]L[JtHa\ۄSWB)H6z?/m2u].1-i˚?V}߲ %l.ny&ٚD^!Qb0�����<ƾ̙3{,+_7n8oY~��Cw:Y'NSSS9OX~�����^~: p0q0WDI+0-$8!OX(m/&ht닛GTV ) ۭQg?O<_&MCaŤ+z '[u2YHmXi)=+VF%o[%ydc}����ˬ;;;秦~mppfZXX8[U._"2�Գ333zĉk khSUU277>r�����xxJ"'@ЈG\ATaTHD_+=l%Awѭ0MTQFJtN:P8: غRGI6/e)l.F6*X6N<TS'\</rnnW9fmydAxLt zL�����!O( W+W|ɓ'gggs ��SN{{{诩u]Dd����_Jq,PjT ɀ4` $Q^AhK#/&I!w(uX1:LMGtTվX~K-E=mlncW}}ts7OHfҵZ ҨUGXn?}êma ,i4붩^iAIRCJV�����=t^#"_|…[6_w5KKK_u�'[olllq.6_߱2!"c����PJ-⟌*1a{H>D4 Fw*{\ bv_|a|< #~WH+6y+WbB' 4Otˆ?!{R9OBUC~KssHkeJ1Z&>O=YGmuc +iEuֶY3U\�����v 8s׍7ooonH,?��x,//sq:qD===����lсBl$}�7@H:q,m. Q(7l$,4"QAtG(3}!m)QMRZ}=ʇFTRac} f}8pv|jqM*n#.ˣ?6D⏥s[?:b1$ 9[1}K!7+UۮRQ'Jy�����}Ronnw ,<_ UU}I��<枝 ]觪dnn{{{s_-o�����0&Wj.=]o@ v:ɂ YDǴ"j=Qť#~f!S m>I'Y6wQǷ! f^mgmtWDM|Pf\H%& RM:5n0iǍJMT Fܸ-4A-r0bLcJ+M`v/aXX]Ro�����gWVVbfgg?}hʕ+9u��1S~z٢555u_\\|,�����r|F;BM`I^1FT:B-H$ؤi6$ ͈ I)TZeTB"&I2~Ӎv&N6 ;E D-)Gg\Ji^cw*b+=‰NDm$ahz[/`6uij?p;JJe+!T�����+׊MLLb�u;wngtt��1?y__YY�����tnS(Bq Iܽ V=EZ A,B+Qۼ6Q a}r`ķ$m,~^ Ҕ>Ci 'tI PmZR.eY &T\X%sXGKhx0;7KÍWԹL4MFkhЍ nf*"b����WoM~ϙ3g@ݼyspssc�#jŋ=\$N8QOMM?c����xt4Ko߳ӆ 낍ʨm}iB}Sh>1$OPQ*gʏ4r>O̪JV'qRqE\sDAnI)m\8jq}&#j+iO*KnMXO/$']t} C,/\h6qph<]>N$NrE c�����#ѝSSS<@-,,WU{/_L��zڵϮk�SUU2??\������AmxiWa#-Uӊ 6| d gj2I.ĩ>Ik?䃚DUS-.qU~qMhI UE\Ht?: Д}wagC*Ĥ!^ `QLkl0Y¶6!z.DϹc�����#ŕ߿4;;._݇=\SN-��WH566wFGGח~Ņ�kjjz]o\XX6,.�����<z<&>od5{?n=uhB)Oz>cPJcāUd W!j.!6iC1K_|mCB]WQP$ .V;oҍ>"0먡DiUTJ{X.!<b:䁚xjzV-`|aQkUX=R}{&�����<^+"_411qם;wW;wnkddY~��golnng{̙o[YY�����<`IiTO[g{,<bq97qCxH(ЁtI4gk{q4Yr'իķ$ G+`@ۧt̢#>NuA1rНtPڂb4Rtվ=9bhiq'^BN)^Fmc����GoM3gqy?%"�lŋ\YYcz055gwvv~����1N|ď$!Ҵv>b}JM^gAd4$u.~,D!b$dvL2OIG6N)_;$S{ 3 2R $d,z8]7d%&cbPI:Vz߾*J}#r?ZtYZ/]Z2ŭM~WX9:`֕c�����諷~lggԯ \3ƫK.}DDY~��2{vvv^vg@UU%sssݝ_YYZ%�����N8} }sdBҧ-+? :[(X gVkqnq }Otr5B()~IM‰дbm:IONC)&xʺuPyyncmLUߤVQmٌWF�����xqee+/~W]r9uܯI.��U3<<+诙߸mJ\f����x' 3HF.th#D�s91&6?Pٹ%Hi<L8' m%p:P5ttxTG-t$^yMAڦG0" WT;KOfV|JT1~Mp;J<4᷉^� .nнm�����; KKK/Ν;fqq/;wnkllo��֩?="566v̙3t&E,?�����7zI|Z\~t&{ϰ7Lx$B T $ßst 5IQ\F]jtEbOJiGMW6]Bu$3=N4BIqiW9#]pïĢ4X p;5 ckvI����'oN|.W诛7onlluy��^?\YYcрz099 gwvv~����[G۰E(ٳ./h<(5"*>cG|\$ t0JpcvUǬUmj=kvo߮4F& M%0P//PN5VW1>˂3$Qʴc@ �����xR[[[?}njjWk,_cUUҥKi��^]XXxuy�KUUdή~e����xAI[D@H2,dR4mLx4@b1znT{q-ږД!+(64FrG_0|Z&K72 .bBn-iKSDbZӵ<z1hqjI_nRkaJX )!fT㌵am$=8GY�����ŕ߿4;;!cLP�aZ^9CCCK""'Yh��Ъ1<<kzzz7.,,tWY~�����<'u@$a )$z5//KZ0$mBIŤA$,~v]QoҌIc[[R4!^hɿ`j|$m0ڬnp>*auH~ZhKB,mpX8 X~;5ȑ(dME-?3o­Y-�����@ KKK־urr]ǷGGG�֩?=/occcwϜ9S"~.������O&=7M%/d+ioe$ۛ֒JI3>.Qf/n^i#v;7/1h`ѿ[872}zԈb�FnFIZ_ D?JV7M,=wgduIqt)?o=�����ɑ?7��<u͕1.?_CCC޹1,?�����O^k*ސt$x>@bĉ @qmP﫹~e l2W[t#.p(Vn&0StGO8d[X$!S:t=b)Nt{jIxܬRA&+J>% 7G7ou৽Љf[^G�����Ī_>~.5_ UU݇SY~��xgggW^*ٕo=.�����O>oIB|"JOG,&DE)`&>:N~b4;75?='?o7WccY:d:[_OBiTsJF31ID'bLMX9Yk֦t2HQzq&JS˭X~O/q~u*alzxFԼK)�����xquuݻ1G꺖+Wzhhhinn]"r�S[KKKow^<D+u]aaa\Z����t,`U2Ƈ: 1|`Æ' )7̷s3n-34M';vq~f33 I*\h, fP6)%bJG_9}}qN1ܣsI8k[tT @ҰD>R`]x������k['&&@ŷo~'�LNNZ__A.+_cccwN>-ݦ�����<l6|?nx%$#}{@u?aN"u$?4ς0fىR`mNlMNoc{6u߯4Lx80c$ JM)>;uVSx rla|w kreT4kҴMůĭM �����r65227w�m}}877!"o��zŋ$"uuuuЃɟ}`����^ LLܗITA u 0B#:a|um.įI&q$VeDJ:x_a8#q|sB z8T" qe2i2Ɓ|?*|x7{.@+bs& T=7}iLa0�����)Qomms|\xGz˗@DfY~��ggg}+׮]L._UU{wwwgWWWQD����� BD?_@#r�F aY\@C^΅;L8H1\|mg6Sα=睄cz5?Wy$�y0%F ?cWpM6n4 k8̒gHTKnICiFzH�����Wݻwcz �A]rʕW -ͽKDN��<g~𭥥/wJ]oX\\|����� O櫿A~dk20fİ^M#Vl=Qt;y)O@W5�>C֤+ͱt,cUKR JP~E/_E0GX\n1E^jƨ}ӓM禚^@spVNo*.r �����oXcI5o?{b�xcxrr֭[~`{{{؝ӧOi �����&ш O[Ch(VfZC|kI1̀ڦHRI PSMR3buY( 5D&*H(\HHqERJOKQt<Rxm}$jh?Ы)&"O x;F2jź]Vd7N/e78�����@kkk922ru֭[lll܆�ŋZr9z099so�����4F*hR~"4a+6 c$l[S Y�b-�� �IDAT/n{=na6w<?_]zDɕ=K dszkD1RU,92mJnzvpbF!$y$ eMXqM0!&41Piz�����Uooo㭭SSSt, _UUΥKPDfY~��컏?~ڵkUUͽwwwwvuuDdK������zq)V5'xJ$JT(Dהbh#j.)p(4)Fmx] l_e$_L6n_U|C !lbσMH|XGEAxlrIB!mѭc:fz~:ITZxvXFl 6#y`m6�����@wWVV޽{|S�ի544077.9Z�UgϞ{gΜ/ր>^ &U�����sG/}+ iuE(pStEtK۶WCtÆflѡэ$D^tS,e ]0UoS:t|*zaKX׉:XBJSE qv L4 s1zqB(n/w.`!]0q �����KN ڷLLL ðk~}��1[n} ؝WU߼<-"d����KtN`H(i7Rz5G԰cKP1&:^)2-z,BI)e d?'Y\/>WgHH\xB/nY(=d〉-= ax!țPHן(PoԴbϥq㵏ShKZ����� ݵu֭g666~l~~~]D�<??wuuuekhhĿ~�����/Td ׎5,ڴ#(Z\\@͵8s)5EDkPj׽]6>ܿ::TAҀ~&ʛGJp&$}$ c`YdΥ932QL<4s2[ �����'i{{nmmǏ?`ZXXw.]"2�I;=77y晏-,,i诪d~~wvwwq �����'f&UQ||[ tD =^VсacH6=IvIU Dc|^ҀL6÷aZl[š Q!҅6 |I nj/D iUqKğ<!&iw1D'� a�����]YY{=7;;~c �ի5440??", �KV={Μ9skqq߿_}633\""Y����� ihý5JVjCAf&\#JƑ!,|bm3}Z%!R&[B%ԇ%<XͶUB& i-'RDrF~bI^Kh/\<NI46$c%^04 TK_dLIo^�����OoXc5 o?,��zsnxH>}:Ό|u�����/F J)Ð4�3`GiF%+Ȓ`VC;2)WM~5g)M(%̿ Q J!4iX$m i_Ӎ*":TM[WU})m<ٿ!e=|�����/M9sGFF@mll<333"�?>88kkk#٧�ɟ}ϱ�����e?_8~ i>*IJY�`bLȾ 1+:< @tȀ6,ˡε8<^0g-*gQ塇Bɒ>.]O2 eB${ԊԺ7=:nɫr Kid0tN~Vgo����� vvv~rkk/?~k W=/_Ce�sssgŸf9J~gwwwfuuEdK������^nM!4tPԎRPHia4ᇏI!|H:=B&}ŵ5z ۦZu wm7*V7(Oօ644!8+I$EZ:nJ'($icL$-0J~qlN �����ܻwo~vvGu]˕+W>khhha~~EY�Ν;C닋_v^ !unu�����<,# X} O�j{4<"IgLϟ; 8K6IZS:g}b=k9|Tn,\V%M[BG6%HGD^[)D'V9:ϺFu-I㋮D ong}������}Fk'''WYtvww6ǿ��<drrr͛߻ 诳gygqyy!�����<|ևJJ@b@x?6TH4R }Ch>:ⷳ6w4$>8~aӄR:&~d>om1�9%N"=ZA|xB-zHa;>8#QGKbU lZq;1^ۈ4<B/6 J~ܶ&�����թ3g|]V词gdvvvCD�`?s:[n?����[@4qTؤ@C}b%I",b֡xVl\a>ɇ&&6SBp"$n ۨ6Dv#YMMoŌ.F2[ܦݲ"D;/N-0:�����!ɭ<~该᪪s!",?� 2<;;<> WUU277ݙ*"{\�����J8IJ~ikI0yأx\ ɈHSr{3ݣ5Rs0*aCQy!z FیSWǬKj%,. I9D+q$ lҋ+[7IN e=s1�����?wWWW޽{󳳳3o꺖+W|ǟ<�cչs~̙37Mg333Ku]vqq"r�����8{P FHICi kU)9 ^^3/mxĴɐPas2  HDDi!qa\BMM,G\m2QċB9FU0+UX'O=}ǪoyDDIqI:[xQ M9lE)T 쎝v ������[k<99u=cccgϞ}G^.�q200%7oޝA._/>_tD#,?�����xeR�=GI%smXܲbj3 'Ϳ'6Md5&Q65(LyE%#!rM֏H22ċH0KԗiXtHqJX~ ՘6)QN"]=l1lRhUH& 畆_/����}SgΜ;\666un[X~�cOZ]]544t011/^|_`���� j�(TԤIz!ۧ6\bJK,.6QMJ `BmK a]yGfDv]Lh^ G3qTbe_D߻_rDx~?#:<Vj}w_r^d_o|鎭>|;^^w?P>chumn9YxwSxy6u�����+hgg677MNNshh该ý|y�gyO> WUU277ݩo9|\������Q D<P *F=fk1jL-xEE<|UG ,/` "ZJ/񟪀-$j=<`ė#i^iY͎O*M݄E|&YX}!ӱL3HO%?ln|QmaQtKf̃PF+KS�����#7̼4�ʕ+q-"ϲ�Gs~7 C433Tk*"7Yk�����I&Q <0߼[7_V`5$v&"DcDD49ɇ^%aP$WNlHCBw33& 4U% pFH >ɤ"p^8+"%a.&Y_r-\Z}§154zt'$t_4�����Gr|k훦VT@ݻw,,,|v".�3[7o|۷"�5>>S̉GX~�����"H{A~ yƏ<lp(`B^!#m.@[#Yɲ 5t$- 7;kgLZ܄y=L8nC3L\,R )u#i <R9+jKo"-t:PU҈H~ƭ*:&YҤQYnƪ <Tk[sj�����qӧO;\1677hvvvSD�Oqmmmkhh`bbܹY~�����ӹ4Cih">_&C.ٮ&&T`%d-z?T׮e�ϵ^ 0Qf"!$6ņG})`K*9܌D竷ᆴ\!Ľ"qCW Ud\ٻʶk#[RzKGj1墒IQ0cH9B2$& @pAf�y8J%P1tVnnI笩s^kk-]l}n?[::g^{_#5Sq\c3vw\lq&nIm1[m'ZUҹm�����<ݻ݉sxx5l^0ƘE�]\XX.//^pvssoc�����I|$|9{_*Sb<} Jtcޱ~O*<pR1`EK!FB!PbFldYJ ib '_?Ϛ\NQZO;E.BĦ M%&ldS)^xqIEXuL=䆐cXϘd\$sTZ$Aq �����<677h4~Z˟p�}vڵ=s̍+W1�x LLLשּׁ8GhZ7tvXm�����$ITLخ t~,m NrRS0iN9h#a&DBɄUG7{~dsay\-sN"ˆV¨HT?IlcrƅTJ$[uPHr:FBQ9bI/PD.,9E6ȸOBM*i������(fs诇ڛ7o~K^F�588;;;۽{YH&&&fi�����<d;J NJI'mu+HQ4GnRx_ҧ1cEIͥѐӐ,Ex贆l G֤Y  d%E N QڑqFɎYoMa1f='Pɤ8^IC)#U7u!3b������O1/t>݁on4Ƙ�!ظ5<<|2==Ν=�����tVIz(ؼK!0vDGB+ 8# 6f@,pUKX9S^x%=&%9  .[7y^YFg,ɦq2Nb=M3cʀ-F8t0&vr8)N[M&tFE_~d\fSWAgj����½{gww @51f�|..,,_ÂU{g777s%������OB#;lpy{  *@"Ǎ|,I.}?lUEXbhũ9uH"URziŒĉPڗE%ΨpKy&3)MbMH 9٢"?32IW—{[Ҳ<Mxi%N ku!�����D677ah6'�Եk>̙3׮\3Ƙ6�``rr?~geem Fj޸c�����NdU $2aDÊLJVB^pG^l<^DÊS^X@ cqUjԁS =/0̃#/m6|ui)C&S-V5 yuU[Ql4 c0H~z33n94Z86 $gie����� fsbfffK Ç͛7?ҥK/ �x }_޽g}=~Kfs>.������xڔ?LO3\&>u b Ѱb1] X5o3KB:"b3Fb3i'% t?ne<XBl*ё NܲbTBOҊ'R(mR3ōkfI'iCK.Q0Mಟ4#t�����onll̏K.2;p֭oI,?�<^ܤY ѓw޺u`����+PޫDqzXe b FRQ%.` I[ȬqdCr8]*V-lqUO,H|Ү~nMhRΚZMXMŊ0,bƊɋ.q:xe|-C&2ԅqŪ+):MF^d UsұN.\X'dLjSrME6������OgϞpZ]]<k?1K,?�<S.-.._å^nnn~1K������n. qa�IgD64` +u$;8zm#2Ӑ+z :(#\dQI ѤbcPŷ$cc1[aU*\6Dwz)NUI EFiPq}E7~QRlj>WI,%JTt ɧIFGX]& _�����)`ss?x`a~~׭g׮]{͙3g]rg1�to-//8EGhZ7 �� �IDATz����gCHlt /JN:6v6+>l|忆6q|XĈ$ -,A>b&b~տG!|s JjRQAp2T78i:)~vLS|Ņj0b\d>-zW6/}muJvv伝s^&Kn1xrtĪKQ:Z[Pޞq?3�����gꛝsbvvvKÇ͛7qҥ'''ßQSfhhLOOݻ7k|||ott/4EcX~�����lejU@~L|ϿU_}kWz¨Ԝ5aZÖ݉%ccgsոq^&Lň_~6NJMM<z_q;N.εC"ST %E$MzC5f'$ZKTE{OySǖt>bƉ}Ӗ{ 5/J٥"hi�����go7Ο?.]=�7ϿT>k& Y@LOO[.0�����M%%kM*7ӥYW}}JiNbCN /됭pN5->aPvN[g7kubD!LNʟ t@U)T— ,6__@V id¾'== #[<8\Giر�����wOOOٳgO@oۿ/~`yy*zƯOonn~1K������]s,A")Fd(Z\EDmA^#z$7GY hw|�mA3r ֦IJ,JH-Fq\ܺfЉlQ(01naM, bDHڮ;I1*Б[n_8 Ԙ%6~磛Q:Z:u�����xF=,C�k׮̙3׮\}�x2 LMM핕O;>>WO@lZol6b����gK22K` \D+ oqZJ&i O^1C6¥5~>꧶[`RD6/WЉZ--S'LJN\GEPwI/:M'EN .uEP ZWzW5p~ֲ������]ovU>|ho޼/899ϟ�3g|[[[_7%kbbbott/v����� B =K3y̰oEI%:R:Xp y~i^#T>d꜒B$APU2J6b0?CnBlx.bmҶt .6]<b7Kc)1eIqnuiO[DDzFQL6x\������@7cccҥKYܹ3/j�Xyⵇ&MW@LOOf�����R"|O!^h(i ٮR)K0 %-H&>Sӭ.q!#Vil:X>*߭zCd.D3G̟qhuIVf'k՝11u?JiJ(V<N]NHR\8Xcme@$\x&rb꺝3]cNyYjw9nֱnEu 7������cwww|jjߞ={kuu|~իW?lyWե_X^^ʥ�^Fӛs%������YE\A\i&0I@e%p"4#3F%!9’j~LkB+>!Bⱜȃ,IVXS]lo5U.@l-7NPFl%4#kbt%JJ,xqnz6 U5;=,FQ0 ������N`kk<x0h4kU>~gΜЕ+W~�5055mccc+++jJlZoh6bZ�����<:$;ʙ4_1:P) |jGZdi\"C%$xX}}N3t)Iz^PO6*OP^Xqs"r1e�U ^$yHŅ%N#&9-ldCZ/'bO><t����� l6?9񳳳S�Ç͛7v'&&qϦYq�xΜ99SSS[[[_7r5>>~oxx WWW1g�����>:2H'>!RTs*PjBQx&Z̥T%0J)= D0!9硛[/k-|V85צGQ~F"bH $!N,pȥ5%Ǒsq"ԢM &mxOOR93Nϧo^yfLWb%PV0K�����e_t7(ܹsg`ggߩjoexK w޺ukGX~�����n$*T#fI яؤR RlOoYQ! $4?!r2BɅgz>P"KZL!'Ӈ$Y q'ZRD!mN + ƪ*J<scV#3>$E3"g7XgRN vgyKm0rE6$g�����OOO kX~իW?lyWĥw////@u[[[_m9������|^%)EyV?_*PY% l gl5/+y_ɨs)S9h. wI^H+>wURvM$ X6QkEBn[U╈%2Uw*X'Jg"lr^z,듍+[S|3 &٘C@GJyr3�����G<<<o4~󃃃r/cγ�2055cccomZb pjaeeS1Yh�����?<s ~Ҕ"<ɷy;A?lN=OEnNBɅcpUciNѿ':¾YJ,Hv~ qb<5clMMJ:2Nl?:ݰHVA]pJ%&r:Q=n8qqlxV|ee{?-������l5Ot} Ky>c>fwrro�lxxsvfooo%k||ȟ_YYjy?�����Gec8B=O;"zdSŧ󻛴6M *a)ϭoA-⼝*!1"غ^CygY>$SӋv4 9=RkW=IȉpbM,0kbB{n.1*B&mr9<{+s1ԑ@S "������~{cccqtt{=诗^z w>뇇qkkk6=[n(K �����ʐm'!T!*DT1;ǕBn1\%3 !5`c xx$F\ Ȋ,xq]b"D1)qo3g]3'ƚ)|JmgMrδn#zmw9Fz߿et@x,^yukwCOVS'cc$42:kя/�����+b_|ʼn>aUZ]];99ūW^7<riqqzK, _z5_ߟ4u�����G" FK'b O0BUm)&,`cĊ`5q54A ȀN8ڹcEbͬ?V~zM{a9[#2/N&7Y`B~=Ss)'llɅ{.NLO.69d$J?j<Ҫ�����`kk{q gׯ__Е+W~sWcccomZ_xƍVfƘ۬5�����ZQB8D�؅M"�8bdKW( hkɲ!ZȒ�zdqKtYo B; ]cd]CC#Lqjؚa?=r6Ɲ:F~eH|劕߈%WX={<XG'B&N\QWM6T-2ʼn0Kl).������^i[fso[fu:>>7o||ܞ.cxx󧦦v�诩{gϞfy����� ^Ф6'U�ZOd&)XH;dħE$ ,DcO;:a@J3sh2\\v.䋁dҺ2!SN-$;da$J<rI9%bLD1m:O}#K7u>%bIoG#/iɢ$cIdUK 8������~gmmʹs{n륗^ooo;oc<#^pGƸ@;wxrr_mmm=�����C{ ezdW|$m~?ƒ#GmoHR�0Ir^N˹UƋo՛.f3*/+ޘ˹v\-syh&;K6QX|_\ ¤s*ͭԶW\t9|NicL~>rI Zsp�����G׋/8155=',6_c'''pƘX~�OˋR߿E^FKߟZc �����olxV^$Äꥼ׈bNH1, O;p[=FfJq<)9ڍl689-3]ͳ-cmoB'- 1e"dlۜ4L!,qڂ$}O};#iQ)#zKە%z[<ViإvFrkVL�����x=XkϮ_488_4\d<%clllsyy[Vo5kVfӍ1Yk�����~=iH$!0w }SzfكH6[:$T#S qgClrkW_+%!<ctF;,6l\g~ /6ĪI/)" @j趐Rs.1YS:3M"#Gg=3?M>bb5ӷ3������^][oqνinnnkqƧ]x?<%�ɗzoo=lrrٳg?l�����$.<M/$tG t DKتEd&lpN3>/&,Uո5Roy׾o2u 1Z#^\"T(FS qr�GEk\ȥǨ%äi_,ѝ#2b?&l-_ɛjPɃiE^|(mс<ڢo[d<RMn8[6�����@ڕѿs@ݹssss/ i 7t{{sONN~�����Q>{~Aаm$Y!Ήz :*va%CDwZ8w8N \8F'bFĖKI5)Nˊ�nJcL1DtG.& ũK9iL:7YLw2a|"oR#K<?<VrJJHAIn\ �����W{/OMMsxx�ڹ{c^`<./..J^" z/ݿj{{1w�����B sĈI/ " 8ɅHcFD C׈eKf-C'!@Io)|*&?^ҧ[q8wT4DV"?$Ru'2KciR&#nfirJY &_y6j�����hkk+gy ׵kז~ii1Y~�\^^V/|>k4ZcvY�����Nj n\ؤ$f .[?/zLQ#Um¶%(x-:!`Þx dk7g7"Sv ]RkJSէHIGy:r q&4%m#qp<T1C gCz&Nm�����Y]]}Kz2诣#sƍOxo5 p �FFF`rrͯ>{̙?l6_c������q:#"VD6N8"ۯMѷIBB*lqn׆ԅ]6d8 Iig =kӆr:<-a}5a^J-vIG7LR$F4Eb%/#bE#7'ϥƏۨ������gvett\|W ;wԷKx~aaaGq:wĿޞxO������/Yk%֊IXz_xX۸<! t!6ȅ p^EfJull*NRwԙX#/4絚1VTJM yxBRD.lݒbŲm"y#mHI{ ᓼu$H1or" Ddx we|l������<۷'''{xxڹ|՛ƘX~�}ryaaVVVXtk4딫q ������w1 >b?UhƼ*pq kb9:\&i""<mO4=)V 躏�.Oh*6K68_1jN[jƸvytFBVR�ê}deEy䊪c҄$P:'Vc'y������xmoolr\<_844KKK6\d<"C9::IV_x$ƵVfvc. �����p9Rgs)Is+6<sa,>oc@Fb!!Llxm ;U&S *#9YZ!*w5+'!Jovu`#5>.vԌgdt#qVKi')ѬF$ԾN7IZo������i6j877w ёq[/^x{ff_c�^)###_899W/@MMM=sg7c>�����<dKp~M/*`CP%IsI¢-.6$+ -E8u~v!bga}BJJP~Qk/]kkUs3M6ȘEi?9p2>ޤL&rz~3':ϪHl%ᗴ%5H������-˗/�� �IDATbuΝߝ{ihh3Y~�D_XXX>88s,&_Ν;֭>O,?�����*>=CXˇNzVU- .4Y_b 18C;k.qI mB)qs( Jt,rjBӜ7 ԝ3vuv0#֩Je8̲F@kS6H٤tY%sޥJ.z8?{Qk�����}wsaZ[[;wtt3W^4Qkz}+++ ,_hS;;;_o9������<Vy Iц"MԆe)`tyG-kt9RὤET%D7Lbs.Ywm֜k^E׍*iMJs0Ys~6R#J'YdvDuP}.9o݌/[Bƪu5<*LΆ�����h{{ojGCCCncE`hffߌn.//R*#5ͷcvYk�����AkoMnK% ^YH|pvONdBJ/Ǵ_" sy&ćI:8 f0X2"SiXȫYcc{JF_B*VU@EADMSItCU㥕;V%HriDmOe[Q' prtn}Vͪ������))Vsss7@7nŋ3%�ݍ'>344gWVV^0|�����xz42(Ջ}X 806M$3a_�{XC1$RN*ivK谊eSKx:US-\)&BEj:jWJm(b49Ih%m,;5Ib*<ls9?[1*$%Lj!b)7A�����}kkkK###@ݹs݇_Y~�7,,,,(??::�����B&_.BP9Ȃj[pŇ:dӒ40H)RQϪv4,\\!ѐ6sqI7|?4$-%Fl/r84OWmרA |fCHj[U[FEP�^\KO:2 $Mh\'^;������<~㓓922rEk}}}?]zuZxfM,..Z^n]x7Ɯp ������n,p$ WSDOw_@+S|/m9I^[" !5m@IC4ɻ<`OopUţ4\\\V l5*הI0YI)%uZUDTW)m,x.??^_T2및nUQќ�����;ꃃ_?x\~}ahh~sC=::IVW‡_l6ne�����v*7ؤh"<o~"b~g1!ﴣXTF&$ .NHC -lSLf}ӊٱdM(U%o)W\}U2bY*ә~NJWq5g a#sGqeГ-+2#[RlDeN,V`t�$d*?痡ܺ]+4ȵ9�����Vsss׹@7nŋ;333n�O811;CCCfeecY�����gGZr!>Tl>XdXć\tE tB)F=寞/E lb(J>~ q*PG)LZ[2~pɒ֬zd"((l@QӲa?S5nJ\U?~oǀcq]2x~\?SY78:]'QK+. +H]������Ly###_4>>~Kם;w_3;;{ٳO7,,,4(诱o?::,?�����,} g"F:}x]UMIciC.?N 2N\3)픖p96 *:?nM/Xuh'VK%3\PZL#"JP /g9%Xy9MxmeN/CF…{ MU5̴;+vz Sl�����u9�k}}}?yeckY~7z;+++\N]ɝo0Ɯp ������M)~[ lpZ> +>tlWJIPk[NR UE+ϳtFglg$q}X&=*AAVu"@>{<\FVgfe-@eȾw/M\p]T"_]gx6/_~Usqi(H68tQ�����;;3\#Ϯ_044{KKKjOw///j}ǯm6蔔������ϲ}D"N'qݜ0><Q #,*Q(տ"#iTacl A$(ymM2~/iJ85BtCLZR… iC8ZpA{sI{K—\/5j:|ܒ}$4XY=/)ܼ_Mײ �����,V sss׹:::27nxw3%�Ν_@MMM400NهX������) ,d'e(%GT}cm,u0jiyj꘢%u~IC/&&fS?-Rpp!)]VfzoeIfi+5MLT644"o& T<y�nk@XVܨ.kg�����Y燇p||.w_ݫonn~읳g~6<޸м3ekllhbb[&NNN~�����@C"|qZp ">Qaق")5dDĿ+=,tf@\6qҹa0/ֵ]'Җ]"(i7wV69vMK$!f:f,XdlN?-}w$ -2BvF/������ ȭ[&&&&cddk}}}?yզ1u,?ؘr{osYtF&wvvs%������iJi Ϥ4 atATzω Hz|bbK绬�QP?[)~j4p ?n)S tz1=ɰ̜H80^K~kqy`fupSZE+qX9mzST`#mP9y蹤]ܯtos}lvr\Y6P������@hggkf^:�~ի1\bWlܼyͭV_�}ǯm60a�����P"wɓiiSG=_8iP! 1K)'-JHVUG,IkTL b%שmjˁ|^:'(rK/K2dN :<ӠI:tlozԞf{_n]b7?O9[v������۫j077S�I'ϟߙNc�+ϹsƗYz^xk1b�����rl1Zqy Q$4Vtcu.Ǘ)&9V Ra)B-.F<SQ̑JKg8IIS!'QN]B'luiH*xm4<uWIS+KŅܧ{SC-N}y+\Rl������@^˗/-nw^}}}fff={ϱ#Fze;[[['''?�����#@E1(rJ-' PI:V/T.I gȠ!4Xj"(065r8Iߡ%>@,2`E9up*Uzp9`K/ u I_F^.Ud6)6L1xĪ4TiY3Rt .C@&mМ�����ݾ}{brrGFFY=666F<xW^mc^_l6X^]ٽ[nN�������9>b/X5\t13TB.i^)i =F:?#C "bϨX4q}~2JDC8#6ؐ%Yl- 'Ae`"_B#NI/~Uۉ:Xy>10=UDɹM&5Vm#C=݀*x"_K8$AR������moo݃_?]~}~``w^c%#ޑOhZ"賅;>>~mLc������=MJO{ y&Kq>y$M*Ci.FZT?3^N4G!FqF +Iӌ1k:јm>ݻjNS +ԋe0EXA82Oz9|0z;-\r ';*odM7!-e;[>������#w{uu[>̺urr | n~1fK�|Ο?_zppPg zi``+++F������Q r{*tV{""PJUxŪ 69fSQ`'t*C#RIH5K*<),O FlhN.2׸I $DAdž9(fԈ%-).PI~nz|Q6kmҽeKz\9������?p̙ϛoݻ;22y?{cXwܺuke… Gdkkk],?������^1"046dgwS>OϓK)1}?q d$C6{-2IGW@<~LNkjuq)&kC8MQ("b"nJtGS/kMC1y*Glm4Xk}t FU_\^l%�����WÇ|ggg|bbFGGX`666F~liii:8jlΝGcpp5{?씁������x|?d GԿjn ZqI38^b<zyv/bMZ=!6W|͇/ΐI 9(.9Iދk}&f><Dy-)ԝ _5gԂD._|pn.mu#yQL ߕy<סSu@d'ML4j0^-������9w�<b7nܘݥc.@pvffߎ-//B{/44и�����W^Խs:14䉇O;fIWtK^<!z_L  ǫ!zY9`?>gkf|z<Ihx643N}́nHu:zWvpN_U=%^I%]q%.U\^ Gɘ^"4-3Χ}-V]IoM4������#t{uuVsssf:99T|…홙2 p ,766AzN5������R)O4dI|ꄂsi 59jPݧ{ :2D" zyn1Ik?tՇhGaVmCVʼnԂ lEuYckEN5VmC*֖&!$oIB._^KKD^yąxst>Ʒ)YeP-J%O-Fz=h}3K~�����Gkkk/={s'&&۱>{nmcc+gff|gЛp�u…˗/VY~������<J200x+ h2I�2P dhdcpSBDž0Yqi:!X6NtH<Z:+vEtHl|!1:&/_6U:a^JvZᯣK>GN1 ʥTr\x.$Mj,GC%i% 6ǭVz������Ń~bggg|bb_@mllҪ1,?SW\Z[fs k4?}۷o_������i!e T�FܿT-̏y(& P9Ws2],3|:"-B8:ɷI|8EL7ӓJC^PӪRB+{^cp~6%iӒq\Ml9M Ô~Ԧ3?<B~G }sXSX-+n ������oNvvvwu 7n c.x 7ov~[XX f14�����oڊ|ޯ)vX6'.!Q!F&82ⶽ3rJ Q.ֆI89&Jdш XJ3U.>8X;&_luv]ڡE$$[@{AvXS-zuKoޘm3&~1m.z_C9s۩g*6Ø,0R|y%������_vWWWnyOsrr … FGG߹5xҝ?={_p1+++f�����ꐥ!"w: Q z9+:?dB_bUEk/0a5j,L2 @?K^ >'w!O'BX;نvj6԰%-F4Ö́Cv\WUZV&dUiRFGQ[Mz#J 7In:=G. 1VŁZXyN ������x}`uuc>gbbU賻w666rffxh߻wvvv�}v…ooZS������#a$TќB6 y p*EaT3V$ bN!eӄQ p.wX91fq8Kz:q B2G%dΪ .M@Dq^ha.Iùd*ݩ!1ܜN47_<\P'R3]𧻓VQ ,_se�������vvvǿuttkcccǖV;F,? SW\Z[fs ࠛwߺu뛌1m.������^mTZSBEHBتF貌Ap"C෷ ŧ|I#b0#lFH:EiC Ɖ9ȠثpԜ(N/l"~ [PXc C5$ܡ!˹w !o#J'=4!TD�� �IDAT۹*]u�������Nnݺg7nܘݥc.x7ov~[XX e������DCg$>ӟ3D2EdLɈ_HZD\8ĸFl-ё I=E"b﯐/&Ąăla{pa=T թtDհ6X'5>"F䐼V})B?q W1I{ZԜF`Jz(.~2n7PlPQhcV1"bղ������շZI' .l|1fK/A+++g�����q8dHzS .F8n \9a'M)16bԻqi}C62�1EăXmy?јf0jkFm\'gB$ #N&{tG.e +z䂈UaF]PoM\h]ssl� PUI�������x|`uucϜ9Y/qi{nmcc+gff|ˏ{#\.\ptow �����U|V_G>tU mx. 5XlpH,ޒэ8C|fDF,pI^$ y3&;]9]>k͈U'#bR*;d\D&>Q]:J"rMqą!N6XIEW8=Zh[U{᜿ AʫonN5=������x=|𧷷'ǿutt,--c^U0_ko5.�_CCC{۷�����0Q.'߲.@.MO Q.Q;V+[T8 )>!"*hԙZ5Vӊ<\n^8%S8q),.Iԅ };ͫntĨ'rQ"\spL I1FT(*Q7{öŕz5F6k`my�����ɭ[~z~~x(7n WsG?n?@-,,5c������%8 ǩҌg#z? kŃy 6CIVBDSDDpo3Ug9Xu,q3 G)ũ4S'*^8阺yp^ !6Y#ͥ&6.e wkō˅{=Tֆ�MB֦Xֲ�����g|N@ׯylll{vvtB}.Yd_~Y~������<)l>Z>H}m~;ZIn'K6L \mYǒ�HR RjLsuZ'Q*Պ?$Y<BFLup VȊ٩ ik>mYaB#ll]u~rY+nBG? )IˌqTM)t+?XE1������<>Μ9Y/q̝۫/d Fq޽u0 ׅ ^|777's�����I!. tA~ɼ@bFd�LPK CwS!6+3jM sFddFOwXOB!h\4Vz B' 0~鍐6Sn&t3F I77DՆb+j�[k^W������'Çz{{{bbb⟏q̀ᥥucY~\rjl6YH?u݉۷occ ������X:SP4ӡnhũĀڥ9_( %curLI"{ z@l: Ri }k9݇ds>W7_UQS!$2#< vȑؒRZhyqeD6NNGLfsr]|'M 29 $�T/)$R~j������x鹹aJnܸ1300?^^ce?8<<ܼylptt1������I'T "F5<B uYaCpE+(y_d) "N4Oe?Kg+' sى^TLQ+M6!}Ꮷ ?\Vl).-?҂[Z.وE%q=;. &u\qAcnlº} ĸ%~?iVȵ������kkkqrrqsssurrb_汱wv"~.^΅ l|||w}}_fS�ƘNΐ5�����Ӣ%@"X0UY(Q0Bؐ + En]t&Ǖ/&$+t&VpcujV:!3DUXκťVr>ta\rIS:xbQdR:YlA ~JR뚅stJ6E$1&"j}�������O?;99诽"h46޽=n?(]ps=777'1a�����4ɟa /llVGH>DIB醋=h~4 6đe &9}/ TYJ>X6/X5n1Պ-iG'S5qΉzqL .n*.H<-1!"9F X#&<\x+.sM2|qӵNo$[]p������x*˗ell숫 ---c^3sʕV{ٜfAjݻ?{wcwv|/ .GK %ya8M$EA@0vlױ#ǭpӴcMv㺱5`E(, l'HaX>3$3w~\.w%9ׂ;w;sؽ}nxڵJ) ����� [J:!Q(QhKH%c%հHM!E預N$KB 9Ȕ9fեdft<m<?^ G&Syc&%3L4M0bwImԥjm)Pj&~}.4@zSTv!i0iB4~bJz\aߥ|m'3������;zO曗ӧ&}_^8}˟N)]dO|`+_GcxVWWnll|"t������U[:LCΜDʫ;(Bebs}aPW(CJr\8%`" >C~#uנ< ,ѐeMFԆ(|$6V^$2l}:=aC"ps3i8IW@N[d66-A ������x]S?Qaҗ;? ϟ v;wF'}?GmqqjJ;٣ �������' Nh*M%6b+ɥ#"ɜ;޾kA4e 5ih#wsK #uFcse95v&elr3YtN%I菦uJ?c=<)ho@ƔЅRLYƅk&.۟2(Ǯ]ÃT!Ky5F˹ddA������8I?v̙˻<yz7G~aas==lS;7nk׮͜�߻pOnmm]N)�������'IMh)P}To)ԔjsUu ; =EK:G]t,5M2؟%s�4ZQv wQ;_g1W69r^IN\)?%!.KsF9uSc{Z~㧆q4S'OΝqwch+3o_?�I ɹcDwS%������ kvҥK?̭[~_J)}TY?hWNf�ڙ3g˿qƍ]������N-- e$GCƑd֑zi'牖1?>Csɤ`pR_5AǗx@Irb@kikI6PK[e!MEeOF̦4h25 ]Y+jQ{}8t"R.IH='~~vq"u^bC6=09m]OrR-O AC7jI! �����7|KKK2җp}?ϮOhtvii?l|+_x|'RJ7y�������8lh E=_sMޠvLN{pԷmEm4{c0vg5J(/ֶ 9倇_mN m CEb%stA; [SBs@3FnB .CK=Zv_KM"4I>i������0q}ssO~?eOG(xKlkG677Ν;ujqqjJ;DJ<(������Hb;lHWcnXh Sj!|Քp9hjUNRA )G}!Gƴp|@t5q4-r@CkiD)q갩>"J@j$s -]o'a?FMT0Lm95> q0TQI\D������lllӧO+/_eOGloooȝ?Olmm]N)O�������076w G)_kx?u矃)K5$/Z-eɇl\R{ؠH.Ȱפp;2q͞hr{5iEIM;H y;ɜ'iB&&`rj<'%Rn_m]lLʔەDs@%c>D=s7GJ:dczY(�������kvŋ?s;��+gΜ///ƍ7.LJ������Jh„8rB\$jp$7̰$v^%X@Gr�;pY;0q~W|&#|$#ڜqv^Hf( R4aMvvВIRhZD#&8EE]wypגabbs^*fZØO,������xëW[n]YZZOK��}{/oll|"t'������x%bN\G(pԦM(Cc1\%H}n4I}Yv:u&hS@]<gSN#ܿw^Q$镒ƑX)A(S/3L44,&y5S h!5M L 5.h~l[K{IQͰ0�������t]Ӈ_Oz'���H)}ڟH)†������P-|-"11Qw__2m݄?Vɹx;H2y;uIaר:8|Ŏ-k8ݹvߒ/JH2'Ӫi0N6,:SZMj6Oa?եAwV c3CCH}L9>iTHyG������?}/^c��0;;{wnn'~M������,K>!>s$ܵ%)Gi..c䌅 6i EL,Ds 8D`R1>D5 ˚I9\@#2FjN730*lFOɁ~6$M0ϡ{zɢ2rr?a6 ask[So1mqPel:kԌ������|ׯ\x<sz���|Μ93^ZZK?Rp������x(:R HSaC!m|4رHϩK(r61 09tS )܃lѰ8DO_ ְ&P9|$LiM1'61ݤZCb*f| u]⥥DjvT^M5(a-75 S]iS?DTTFǥ)4�������oիW[,--ӧO��b4/])[,������4 tW!) ˡpw}1tIG?[a5a.p5Nr{a;Mz褙Fs %WCH}63ܹ$C#WL$6yĦPdxpBƏMŎm='f-D݇OLNeQzs6=K_;|P������s}ssO~?a��WcqqxmkkkJ)f������o!Tr J�2^i Am!)Y(@$ÎIr>cXS]LJ`lA\߇T8MEPm 2bXQ-% * ꐔjcn2kCJޔcC%MSiU-[O_>&Ed[Qs5A �������olllSNKW\�cvvu%i6������x7kGG"%\# ' ^3BPÆB|<\6@Jr},pK!js8=eRws7,uj,CoQ3<Ґ).B 9dbO-"RPԟ26%>,%ob%@ l>5c3@Mc䶘^+[=2�������ܿzW_xvܹ{!��x3gΌ~}ooR?t�������A]H ؼADޯ9d %vqPrbSJs!_hU[\=m s|E>Lgu)Qi/M"MicDE m>)qyl[2j7(Y6Ը@5adf������ի͛7,--ӧO%S��FŃ777+t������=1 (ߤW]BR""!YX m&.8b魿/i%Σֶ! E>Ssq_4sʼxCk](_Lb&9.a?r:(}\pWaM @J/zTlx%GnzvR{SU !~mŅ~�������뛛떗 ��G^߶+l ������^|g6 $@G q|h#ElWM"1[LfT&ӔkPHdz1tb.%3= JGbS~&a4jSMBuOK%fmbK 1\Kp%4@i:Qo?mK">!ϭ1.ә ������0h&�� �IDATnll|éS˗/_e�8fggҧ�������mQ 5e#!b&S:#I ЇF/�5ŬюC0>AB&R9u5$S$vr7Wwv14~둦=%ܪTpi[@lRX\#=J FBemYmZ)㗏kGeLؤ1ƪS o������.k]x_>w=�ٳ㥥_ۻRJc=������3ߓm BLPDbC$fDYlJKlۈ/0)3q6~G5 6<cYžDCMP$u~A A^f<T)CIΒNr#un_0N ϴ|wM4Ԕ}j2������^_zܼyťsi �Sj4/ܽ{ߝRų������{jɄ!J|^sHB\РPHnW7U10C"el/KڛNIVI1aM<֌cBHAAb2(F"I5p ;5;J֥m0JOB0ĖF8n[wa*9ڮ^[⏉t������3_l:��O>RZ������NN d.241cmŶ0;6~>[pql5iO46@S0c؛&ANVj^L H=V.V]m$f}ޣnr'6_č'&pZc*nӒb݃z:k������~ÍoWy��<fgg)8�����C mL^qJr+ds~>Qt8L<>WCI>Gker\s8d是&sȿGc>y'&c7_e U {]׍j#TbȄ!r-W S„.4doJ D†:7Z5S!~-.5P/:4>V3Gib������IU^{ sa��d9{xii.A������~4Jfļ-$. k5'p<F 3n 5ZhnXKQd"q-޻>,kIn@l? k_u<3A!b+', ![G[Ql$||bKJ9%&އˆuA 4K�������k׮7o|qii7Μ9×Z�x̍Fw~pssSJxf������LyL@J `8~441}"Æ<b }rzbNaTc&RsOT^Ku.%ҋ%9 ҨiIa#%Ʉ5lK[}'bV ԟ5cK6ᶷZ1c$T\J}J6 [n(MEk_^""ᥘ晷MTRKy�������O7777?qppu˿ϓ��񴸸x<ڇSJ<&������[<r÷V$]+50/Cv"5&A m$;Ќzڨ!^lcKN͠vsԏ>b#u/jF~sE6<a_!nl c5dx`!)BJ@%u\Oi).u~$l?\n2iM�������XÍo?yʕ7x$��<ggggx,������%El0bE[UB!7-%I!"eDJƔ�?ФvNyEpm)m8Gˮ FbNIx\s𓲓5+PJZz}7eWylE؇"ٜ'Nfd!Gõq4?!5rS�������ǃW_}ʅ ~͛7��={v|_s);<������e8OS@KR'?:EKC#9{}EΩwsv,D(i vvbmNBrJT}&ZF|q(7]uv~5[RNr=;KY3>rJ#NmLhPQ 6E������<׮]7o|qii7Μ93q�hFw~pss{�������OۜLöw@}?:G [mNݷUgO%ITiK}Yo?aꝟgb…AL,1y"9&��Ie3&2 hتsm_&|R3@6$FNџ,q3i'sKO~������xB.//. �kkkkI)������] Jhd$=4h<dսFv!-9 7MA;Q;Z~YAە$"RŘ@J*TJ)pM%zI;`bLI(E\$1L4ia$V禖CHeǮ|\] ƔZ'������("ʕ+o��xw;[[[WRJa{�����'@nI0B52kV4fx· vl?TxW>JB>9;?x+ռxT0)Dpn&eu l0/Wu(":~RƘ6$7/T)˽�������x"W�={v;������xiM%MI4i71ULDL(CCÈ&^.<F؞ 5WǐLmVk-a[hu-+f^&10o�6ho`)#ڼ0) &$Db#q7;,&HR/~.2d)X~v|0s GWuTaӄU£,jyo,�������OO߸qo9sf̃�Fiuuw]������xm4ܓZt3e69'(ڜky6(S&%t!n#M{dνD2{8JYd8P FjkoD ["%߳$>B!nbRw&7$׼bC"k{{74А2<՜.-.9cC8bP%Lk�������Ĺ]^^]��gqqxkkkI)mm������JX$B IdF#p휰Q#ȝMxG+JClIZ|b]cNޑv.P{p~SʛCKqEk%[5 (13̻ {϶L,RJƏ`0ƶtZD{sh5J2{#7ؐU&2������'ޗ7661W\y �@ /[[[)vO������yے_�JZRlkM%Іsr!v9_K#aN&#wz0% i<JF0lw#OkO bImPDNn,V6!/uxo^/ueJɁܼ0 =in4ңdQ�������x櫯zenn'ϟ?g �ٳgKKK{ww:������<](b~/Jz%}JDc&)U V~?7\Cl,R1d5_j򣜧jC*2 =EkSKrsG;] Y J`p\!aO6RJ;6P??Y[| $V#&d{}켤m|q3qZ?q9y�������ݟq_?s̘g �8FQz饗~ݻߗRÇ������xHVDy/d ľ=u4w昸(Lonf9mh Ti)vM]~HIZhɇ<h#ӜbA7i qC0I?"l N^Ts+~iAR72w};w1Tγz[�������<nnmm}׮|G �8i_+|4�������xz7w%3 c�;Ա5qhsPb[21(rul{hqa]EmbΑ&-!/Zltm:ɓAAʐ>PuV*%Fj;KmX0vm0~=������J)}<r�nnnn^SJ������O?<T IhdEW# W 2T.ts"!a 9bלzjCRk@Z)\nIwn\ 61$fЇqsP\eMnU s:rO -.6Hb>6eRhFI>hbsBf ������T8]1�isݽx ������ڢ~W^L("MoB) "Sna45|Q+?}Hr߻Cr6Vl6$`Ǫ*uo\P-+mf$̠!#ᔤI7!0A-d^JpL8Z7#ZrET;>F| Kߛqu7˛\qD# $$2Yg|Ĵ` ������k37nܸgΜQ��<FQZ]]wnmm}_J������8Y|yn&=h"j~B}>ļPJ%4C"1;N@K tYLI h+7h8n8\\ܸ=HDF6vVaBIݐ< m$ ЪbѰPf'#!?A%Ec3Eڼ0 2,-7yo~x/�������'̭:88xyee<|�jqqx6y������4|SD,דsDqjĮ/\1sǩ;Vio;}^cs8)9[q%>4*)AVD qv[i#xҚLj3$!5@b*ejz:I'DbH"RWL*妘ʊI,~r<Ja^ �������8^Y__PJ;_?�xr\plkkk>9������pI޾wK^``+ P;66ub.NAqu~{_lңÓz]wGiN! %aʘ0v!9b[a[WRlM%wxu8!Sd4ZV~=P az^m;3/W)F5 y%������oGϟˆ��W333~ڵknܸ)������8ڰ@=*W%>af1,! nT1)|g=T\LL9ԀM]m!ȖFڎh5 p&2eauRJL)a)-*)M9k<QQӘRƊ])Z�������Ӎ7n\Z\\3gΌ �#6￴);<�������Ө T ߾w߸1- \VaH6-{ȅ&8S3iLj&Ą[TL`Ed8q\dk:)Ǧz(gأt\61AJ^ĴEN0ŶJ=U*\)bİFܪS 7GA9ބfr':6 H=$<R �������[[[[}ppDdڿ[�X^^[[[hJi]������)bw "60 Lk?i)Qh(RN{ t LXI HO@i]h/#tALgIs5j+EL(ƆPJlk&{"MȦ>io[U79N%4 #t �������{e}}ê M= �ȅ ?G766RJc������<HBCwbjiFH%'QRgI b!No]Ԥ\ÆFsmeH(�iIa[EJ_l(F.?%%{,f&}ËDq{q!:S-gQc2�������>0;;_x}6 �^׮]tƍc������nQIgDVĐFr8m'Ŷ Fs|\pE5AEB닖=7{B-nOKc?R@ BiX٠m $mjɡ{5&{^ '6D,sp44) (Q>V>UѴu������@xoo]~_;s̸=�h4J/olooJ[ ������a٠4V߲wPL褆* }h'QPLbÊ]cӘ2Fj&m|wjY̺]49#{MԄ8\J%*!;<0ɭ$yLvQm\.0z] qk5<"'B%@O\Iإ~F4|Xڎ޶a �������xnmmm}+++__g�N,--m㏽+ߔRf������|[9P)F-4nm`BҼ24H�NV ccUpلf\|kq8Ewj ֖L8RZ50A[cTl{K{q<M̡! X<HwNX|Ej�������x^Y__~k�ps}rsss196������;o׆1$|/hǭ{>鷝*ktjK-$Իg3o{N)ǃ2ŝ)q&3&{W ٱPrSo)U6&R'. r/#u>.hb[I',Z+ iǵs֐ei|ily>>#v^�������ޡOooo//>�xX333ڵkn޼l������F濺C G6Rq*&K{An;1k i&=$o/D a)H~c3vߎI<NJb6ԜB96$Ar0--+ɄVJdާ45d7G<i5Ŕ9O~i)5 -cWiS?y\ JS'�������_u~g~�F饗^H)ݝr*�������<4fDMzthBǙ/.x{^C/b\kZԝkc1]6k3#Ӻj&1Ftl[=4Uom#>jmʰ#fEU4V ¶\!b?p&.{ϲ1%iզpi6SVm�������E޽{_y_B�xW)4�� �IDAT^yRJ������w[?PT@WH,q԰EǶ�4 ׆Ј6ws::F[LbDZQɌ')]C^^M#@bǴ-#qa=sC0FJ$7HW }XCEmb%xl iNpV˰|S������wGT_eS�.\}ܹOnnn.>7������Rx`D^97XRGiKjCtk3K|?FXjFXYf'Ԭfnν A;?}V.};f{;{ĥI=y?x^HjS_ㇲsS]g9f-ӲIަp�������}zgggqvvU_>F233svvomoohJ.������{E丁 C@Lhc8rDfvc [&Lߧ994iNlFzϢFGF吚ELn"$MJœ<B#ۘ&U/!߷xe{{}rq?R^=ps4*q$1kӔf;˔\m[ �������3㽽/.,,3<o��($������c [ 1uj^K&oG;i;V|cI\C~&3MJɃܿڜ_1 :3v;V S̿+LR 9(cC0AnM&cw7-ďSbh6ԮM˃s?ᖱ6+������Эw,//^DW�ZZZY[[6������P!3&]6NFIلoB~<ܰ>@Ͽ5նD|~vl.#Gsez_<ǚۜbw$@ 6d)+R[D'`=mGd =14&y~b'a{eJ~e1B)6؇ZM& s&1�������GT[ws�xz\ps~dsss)y-������ECІնT1C4wSGgR5;?F\\b_y2aNZ5~^ HQkZx+~ļER sJhFi kgݺJL>'ƑIڪOMH �������<"Yz;l:�<fff/,,k.޼yo(������rLC?)Mߥ?DJ`<=q4ת7_#u>y sIa<M1! ㍇?4oǗ, k;_잎?$Y`2ѰU$$E`2ۈ255 b|xEq66fr} ;vW ٫)M,I|PKR~KG�������Wׯ{{{g�'h4Jhi{{RJwy|�������?{mA\KIm0ZDxD 6NWc9Hb"jg˿au%e,fl}p(%U$O7BL(6.0Ac) 4a1d+az][{ǐ=\({fL'jq|-�������lmm}{fees"�<斖־%* ������-G=|\Ķ!Q"Xt >a㟯IRXڿ3RKܺdRkons1>)1bZB:!<RZI]͚M#m*ifdt '!<LK괻 c_O\kMyRxh!F.)lo+D������T[wx �p777RJ_������x5Lw!Ya|ŶH)0].b#25f%u|~_K#I*+H Ă&IQhZ@lƴst [mhI.SZRRh#I~N%Bq `N/LghM�������, ?>;;{�￙ӵk.替#������M'oQDz! -lģS)0#C^'^c�Z 7UMh91EErDqmIꮹA]mw)1GG)ɤ=ļpHa`hg':󷡒I~NyƘr̯ Os۷4�������c}oo¯<3y^�FK/?Rc�������I;J Upm@Q~w J<3|Ge 4o{ox=4Hyv13eĝ_Gw iaھ wl]&ս537-).xPHi|vAŒ%J`\Kvi&"aO"�M������'Ýw׬|ND�,//o+ߚRz}������8'J(EjO.ňm!vdiKX-`*>4R25$֣UCj^Wfcnja,Rqm# CHhT;9LfІm!7_]g7ȡpCk9_%4b$|rI9ԙآ�������cSoYXXA{ҥKϝ;C)/�������Q*7w{ms> {Rm%f&\=e!%b& &gj\ЉB?wĬͯIi 5eFL$9'TeWlEu1jMf~95bE}z)R}-N5sbWb3K^hFlq�������۳wxt�9\XX7x͛7������]%>5[߯1Rq ~]~M=.YMPEjď>&:ԅv|5ff6P߱ 5e!O05!%\o5j7rSHM䰇e +CJڀ I'bM0$4Mɡ7M.y#5MO<O욏Zo�������sƍ~oo¯<3y�΍F8t������qYoɽ86q$BTnF6Ƣ\ Z_RhfupND@65pMzTJLB`^@%x,&dRCӉ;ZSAvfSB G91bQh4%NMf}�������丳{iees"�YZZ^[[֔ҫ8�������kҴF\_Ri! u5S|0ƾ;\l׈G_|ӊxH]GA,D'Aa#ڜrpȭ#6km ]WWiT)cƕm)f&0)~ھ4%>lRÎ&N?.-%YP�������xbmLUeaaa�oҥK{\I)}-������𤫡 ȦO6k~;֑̂gYM=4#�I +4;[DN#Sư6XM<ƥIӠb#yϵ-͘m"i0-iT!; m, Vo5;:n�������'gϟ?cwx�К9o[n�������xBIrH)d$<l +RE,ڠI[+i񎱃s"קf;xT!{^t G4S{pEӘH`C†XbB.,f<XIœt ]}@~obP};�������xܸqS{{{~gϳFQZ]];;;?R˶�������x԰Gm _o">a{Rl7Jh?m m4M 1,CKn*iiSazuMYu6f4Q3$*GC0$)&!&l v5h'iq`3a5陇<w*Xl������֝wK+++(kyyy}<hmmSJI�������rߞė^#qTȒ7scԱs0K3̽=Yhc;폩1)'MJ^Lt}!aЈ v< P(%w!K0%1rx>XkzAH81#M(6.dX�������鶹ͪ- <k�'ŋo=s߿R"������PwmPBB_I_ A ߵ ia:UMM3Ja>ݠmGÌ_4ͶK@w?dGF)ɤ=llnG ViE1%n a>qjvcch55! t/%k}3sOg�������Onoo/?n<fffիnݺ<l�������' Rm'JLBJtHK)Ψ\sjL<Dg N+w2 +mj@L6A K=>?k_|Bԫ&)~ p ҙ=nC  !w] ~t1m$^/y_>[KQc������Sƍ}qaafff<MFQZ]];;;L)������jPPpDsm9$7}AdޓIOlc rN׈'>Rǎu_ĄD4RQ5h!uBU9ŧ|\G6w(M(#C!MhDlHFln )u&7/!̒SL�I#L/kik������￴Y[b�x,//}{Ju������*E|?gdcԸF>c96Q",_ԄRy/,#|ߚE&ag$ ${Q~Ju09'$ژё9,_R~hQlGe=O, 7cI rx"q:k)YZX뵤 ck8R�������N͍oVoZXX#�It[>XM)}������प #Cd,0\]#H*gM')DKԒe& am/5 "f)Gb&c$ܮN[^W:4i[FTkPDzIlbBbwjo2ZiNDzɩx0m0"~�������Dsm>�333?w o[<4�������'i]qWAaHF֖T&m=G %b'y$.sQ;+iC.y\7j鈹JKXu$Fazff&b"&0aU?L赚$hIG3a>vɇF44�L'k~qL#;ot}UqFSgʡ9�������7o}ԩS;;;?R:A������@ 9b'$lBJG\iqߨyfQ}+%zM(5P5ǒ&LZK L *:K_4a [oBCI 4UBkݯ<Zc!uE:%'6T٦VL[`ǬpKS������� ++++޿L)S�������� ?X$^aEx?D ltÆgԝ!\ #ɣ`NrE6gn̆g&s=}THhGEnHqM)暲`9 k32='E4ϵ|AouHxvcQI<g:G4�������R^__xJ /޺}'��������25$gl^:Ebw.6cLK.I縼u\MvDll\Kx /hx֮(2RKBč!ņ3-{ؾYRǴZnvr(4=ֹZTb3Lo2Rj|R�������=^>w'nw{fffp~~g_ o&�������A:U)|'?5a :NΠA wph5@coXqL֪C T3o[[y;V%QӎRBvM+&31 @$p ׸۴@I|%wxLAcuΡ"?Pj^a��������͛?{q~~Ϯx/:uJWWWsqgg/p�������x80)?i 6X =yb+ytz ^Ry'GR? HjV(mȆ]Qw|<ѡ%3b#'nbh5 W;<ql I !=W7 P?MHE۰Oo6ps<?wh�������xXwwvvψHWaeee߸)K�������x8ڄJ�Dy P4׷=+^|d8lAiDiI �f3Ji8N_Jh4HM"jx%HZM(-B%nC]08[I̒ iZ\_k5?nTDrz�������x?]\\`�.]>c}}ﱩ�������8 kIw =?s;|XLJpBE7\ _G(hC;: /bvuԄ0B+E j0FƅKbH2ld'2:ʽl)iq!k,i \›j(NȮMd:�������6|~kkksss8�ij>{8??7x;w6�������)(M%m$qUH~|>l 2 &X I9.؆uY!s4vkjF%cߏ=?Ր'4ۡٵpMҢW?ȰUg $=퇵V”4 {a/+v<J �������x|qww/={0N:yŝK)q������� $@&4$s4 dۆT~TtQzi?:uFm{x4=|^X>&ZfHB[Jqk5lL\hnwi_(a:Wv��������僚;;;?tO2T+++kƵL)><�������;c6ʿ1Yu8@4X;|H=!LJ_dQ7y Ezۀjk)h�� �IDATKOmpm6ԑbRH6$Q26xחvs<7FGaƯs>{_8aMf6#<2xGcf.eͳ4nu�������loll|~tqqq`]tg}____){l�������4հDM&5Da0$�[R[ORpE؈[W^ Կfڙ;; H83CӨ^mn=l#*bLj7%$Őߟ@$ (�Y&sAb ֫k[A }�������>rܹ'۳>{8??7x۷ד�������^Aɟ@bJklI~f+D::s'-;#&QHr`;SI$2ʡ A^I^ڠ V^RH&Lsuk+Jv&?؈ux6hYJFB%|(5oͶņd<1?;?0�������w͛7aww/={NSN{K)�������pH/% E|[vC5V$/]:1Ucu'm7~ڮ~h/qm,7MFiȨ/)&k1e97S#khK03nS 0/휇Ա4,Ɍ> 6Rrq3>�������vwgg޽ii=W߿ |J*O�������^m0|HlPŖgb mD5^?CBXIT۶c vwWUk~O]Ǭ*JM/~EYM@4M& YE ^;%H]VJq0dL^#m1RCynv��������ƷG7u/933mll|MJ������97Ѕj G{fRQ#$?Ҕokhki!?{wז}#>yP( F0 DSU*U(R 2 4mD<ҦMKA QRըj`xa:Fg__^5[Zk_kq)Sgr<n-܂R#A`Q%n!_W1eN4ԡ}h PԜ:{WT 覒х&lFLHR߄ vÿH0!ߎ}KcM|QL*>F�nNqRR`C0�������X:}'gffbŁɓ'ׯ_y�������lH_06}N[HJI+ܡKtp=M-RDʵHqJ|(Ƣ'%4RyJ/ّG2`FS1?(%y1q6qߏigz q'~1<oIl ><+xt\xg<~|�������g7/,,|vss_O˷]{<D�������xoߪ/`9|3ETBtycSKTm(1q] =o=utBG\[+`נ|.LH"'k?\JH }3T̃?EkRbl,Wts }EJJ=ivO9�������+O3333kSܵkΟ<y|<������B ǟ%oKnCtc_�Q~Ob-RD~<~^~lGVO{-K:'sōT0J50 %Zײr# Dп\ Fbjô#!4/^ϏRQ-,>ҭ,^bo;������ʛoO޽{S׮]K.ݘx�������lm(́b C9х tᄸ7v0�*P2|vg<5'wWQ!f4֥ 1[suf 6Q74rsUH4v [\%H~gWc_&u_=J!TًgvX�������gb/ׯBy�������B*0XKXw/B$j @;f{?U1Nko9c;s9,.=]#M& D?|N{C'5XfQ\XFH=NnBѷxv6ն}5_7v1v�������>."Ϳ"�rY[[{ߑ#G~gii韇.x������.~t9h5P~Z'\\{ '[w{% 324^+k|lH=^gHRXCdtZ(D0t QߜҬz ]Dw^>׉*[>1׋0K1(&EPcG z��������ӧOٙ7>y)8\=zWWWɓ'fgg^(��������<1#Gѣl |@cm[I㷾U+=ݞhDiͿY Re͵M7n-#z81Aq:jFsrsCh=$(_txEL�%{nQXe%F0ɍ-ck[9Sf\4 �������oooob޽{S[[[ҥK7N<�������HP@Poj%ꀊvL#`K5FK+{кo{BpKA\q8=vt&/FL oT)$ j)lR5 ,kЊzLqޞ0w_Tn?ƽFuA�������s1~vccc]~{/������wS u]+H.D O|0I#F'C-~ס9!uQH̥~M|]/^1!<L`42!v%14&!M'LCWJ4CFGOrd_-SǵPhK�������x~+kkkI!#G?!\:�������qPE+#i`Fu)9!Go$~uaiM}. Z]5cR@+ba4HuUBʘH8i% `1MPŵ4?CU'լoXQsK�������<3g|rff捭O޿E=ɓ?B8������>njQiC E$HbrF*Ze,Z--4?n{9[:;P?b>SF.⏭i m ݼ }y?IcQԋZ=-wQ.ݤ197U�������ׇW޽S'q޽{Wn8q?`������$~BHEkh|?c`_e95<[u<DC3>F[A_b D2%qtĜ5~un $jALhs *y]m"ip-0%&ƿdETc Ʊx1�������A-..~&ٍEV78/gE������whN, * 1~#Uf8dcc!~`:%Jl7{j;̻kI1RKqPRp$(D5DeO7>"&ѶnheM#/E�T�������O?~|emm"/�.9r䷗1p������.*$Q8qǔ߫6 VZm+NsD{4!ٌ STPdha|KT5r]؉1Ū4i[t%HcD-1aډEdND\�������ؗӧO[[[})V ѣ'OܘQ�������&Ǝb:8 V E<;:6nh4TۣU5r/VC1=Md$\܃MS-,t/9<n:Qᖑjyu|~UZھ&1mi.1&k^Ҹ;Ŵ,k(y1R1ճ}��������|xnn\�Oͽ{ݻ.]{ �������mFP0p`=E:\Ѥ"j3U?=фs[ۇ_:?':3XHuBO-!E+U-v8iL2 [H̒_'u9:ۣ <0/E#TP,uOC~b Tj:[[�������[ZZg �x]~Խ{~ziijx �������P1v> `Dsp%Dok[@Oگ v.h_=oqxO(uND5:'g="pE>3ߗ\(zޟ[ }9R4y_w4KTcN DrJDOm�������8==1?xn.9r䷗1p'�������T":L V:Ѣs >/6!>+PHuN"y>樎Qsmt~HT#% ѶF>&m#cb[X jtHɍKD_M2yB)13&<!&4hrKy$o�������3g|̍?sWѣGqee7fggA( �������Ta_l�$GT_1mel< 而==~, Ә2{>t9a<T0D%H9jc\r%i>RP!P_[ov_^" hyM+dRbQ*{Z-������C#w퓇}1�vvvҥK7O<<6�������|HW�Ims0f<Jz{2  d`i͵nknȣ)u2$GLэ(!Rҷ^ih %O*IZ%4bvbim1) Ӥ5p-&i-[boS%6so�������8l~5<}�/ׯw?^\\\ !|������లhcK9~X<+z\O;_E_w [k|CK#0p~ѥ3˲HJ*GNv G DӆOTXFڶ0CmKǒROO5IsݼſQR?}9������eubvv'~LD�^,kkkKG9p�������-Cߢ^OE>>~8H2<\ fHaPM)颥E-jAXIJ(I#9nLb #y•y4n vQN0kiY̘1ae~kUIF�������3g[[[ߵsgeѣG7fgg4p ������[<jpM-a*2|ٻ}d[ۇ uXZCTI_7aKGLJJ.fVHĶ]ֈ9,#O$%R&t]qۂG39s&jͫ O?gLj�������ϯ߽{GOvvvŋ7O<<l�������Af-�F>DciyZ ͫohuFg-L:~.?o/CvoH +CұQ֐<C@k))xY%}&܋Q5fjsC[75 7ҤU9^E[ �������\=<[�ɍ7Nݻw/..>������pxoL>4u1*y=ֶ2fhr qaoO DG /KJn6QWUcIc^Ș\PBܘ09Qw梗6R+�Iļ/V|k ƈH<ߨ,%NȨz�������r8177SǎQ�[[[[ ˿B������2 HH  }8O7~?}7?{@[X*xM+>,lްN̟ T}9rCgS?ҿP)L9OnK7u#�yL#cczRxp9'9pD_K'5&ڵwe�������^`ٳgoffwGx�h4 +++tzzzmvvBY�������/Ę\i : bZqr1b6L2y<۟<:~ $u}[Qu:24TBC&"w 174B=11&RT rXiCI):չ'E<˸ ;�������x}tnnnΝ;?} �?w7N:�������!uīoSщ= kܤ&ke#:V;}rc1 \W/>.̉J ~~17^ۤ!%5ضI C0D]W̘ؔ)O\G".bB5e*G �������/_1�vƍSo?Z\\\ !|%������7۹÷8I~FfCڽ2@=O;IT NRHa:Ɂ-8q>bfҏcEO70H4#$WLmirKLZר\&PZc. �������S'~رcWWWW?*"gO�8뾰+!ˬ������KxXUnՔYDuN=cԢ́?6j )֔(t4<I :J/lCrp$FLQjQKHޛ7Zdk)t)j=č?;������ٳgη~ �h4 +++_?==6;;c!,'������M d.8mGя0j 朡k";QT\<nDofз*)!X6V#7ܨ?M0>tD\t`&&\Ho;S$o äFhAJ&VD#;Iܼbkw.�������sssw{n:w֟{Wn:uXZ�������/[CJ;G=YD_h%?k M.Csau~TfVg7-P,1Q?8e_~EPKWP|O󨐌1+j"6bE5TI'F4� �� �IDAT������xq,,--f677xn�'z뭟\XXX !|������b@P :bC*8'Ԑa0q[Zۇ4Ğ:t<HnDs|i1Az4 =ܨP9}XnSEҟڢZ\xѵTamALUd<j=OrAuS ToAʲkHV9������O;vGDdX�e]}ʕ+B������xZF4}>9CdXu$IYZZON81!ʮ.Їk;zKIU9Hy2bSKQg*%]N"z~RB+i~I(M)b"~bWiB;U.EԺ�������oΝϿmo�<{(\z맧>B8c�������<{~Gݦv_TDrHnC Wk88NպU-#slw^SJfRӇ8H A\?N,R>랜XB9,&]T݉{(obP|9r+Ј~SHy89SkG}hJ~w�������Sݼ}ݺu �{;;;Sp3g|7������Fēq,݆R~CǙe6cpj ,P`sZIr{G?BRHL!~_ g .nqAӄR>6~%,b_TKy% ĔsR׋uE3%P~bY_d+[SDetx8"$j-������ཱི1_ښ9�͛'޽ !�������Xy=Y%D+Rurt1rZ+TҞCM7L:Um#lxB?G9 `숺I =|p+P\H !yQgI̼Th&8SANaܤu`E7Dsx|�������?}ر/~DD(burʯ.�������$շ+Tbqi_tI{{,{5;!b#Z"EfMӉZ Huyrxc9F{?.z.>p=I!t-F�J5P+c#Q�������SΝϟ?ƷGx�Fի_?==>;;!<>�������VF64ƏW]Ezn8n T_^&_9JJKgQrHn*1! 7g!}Q؆ HpFT2$1zix{H_35kv)R/EFoY7qkϩe�������gcooݺu5Α?{…O$������{7yñh6Zl>ow@ѹz|8u1^$q!9qۇJϳjV*~6v?F57;B-BzFRK!S]_/ O.[I).:S=i)f�������i[Z\\\WfYm�xyܼyo‡y�������+r/7vohI&7uلv^ On7ϕrDim4粡+Cv@XRJH4.Jǚ/y.ED̺؀jS<Tϓ&KT*y`Iꪃ�������8577cǎ}qmm"� c}}}-//Za'������gRH}'ujRPJ`k?y=?'e!|a~1 FJBIsf>}՜!}#<U%/M,D̄Ŝo$1-&&B5*Т\!)�:Q.c>[bP.������Ο?Νo�^~(|O������<]%!CT Of 9R }Ĩ>0x3td(E]˶sccz^R{T٩ZM4HƁ# *b~*? ".C'z>(|s{I,R#I^C=Nu{ F&CԢF>z˜,=%T=q�������x|lvvښeMp9.\w~W������ѕ %%WHT4)GSX-BWMHu٩sU^+eLi{Wm%?R^C3IHXFWPtXKkѯSNIHT/:C1Jۋ5SUt a٫N6;F T #|L` Dd$9vt$1Ŷ Lԫ]]�������wbB0�͛7O޽{CfQ�������̻U(b48M\ PJ|ntk"fbvqDHĜHkrn®A%c5=LT'fRG\r("vaSPõ<^K#1"KnM/` ø0jE _duҋRIQ.&R6UN .�������ܧ;H?�>k!9�������H!԰a Q%:̢<\D>fC103~M*4~6q1hηc'z ! l0^}L uXM\Dh94CB K^R^D\|DlI57 $eJ)X;}DmgkƒzުŶrI�������ѝ?Ν;w}ss[~#�`h4 +++_7==:77!������FC}e4xЍ!D7HlO.̨kҧ3tI1^\sLXgZ)x(z%/)w&uBrp� v,+ fH,t FwOf1O>TZOʽ}*!j=$))&I~b7������}|vvv֭[,�`vvvlnn~ׅ n9s{X8�������D}QIdRD5ϟnR(ylZ$i7/\DJxFTOg=TGVrKsmZ5q]LmqC@(e>-"UE?hHы)*". b#LI SV'Jb9Ժ6{EŮF-@)"Eܪ"Қ7�������<+KKK1e�n޼yݻ?B0 ������IF#4Z@R PJR+Hk 4E_{}A_ ^cPwVSjC^ZE5 5gUTF=?;QaVKzZ) '5lEMGI�LPG5v׉ܲ,%%=T-zAtC?1&`bAv}$p}a]DB5-1Av6;Q�������95??G}muuC"2�Os]}ʕ+Bc�������X!\!u`"pQvlQ*Aun|SDR*1h+FHquX^WzMg`β.䤋e:O)\# H{p՞b*"qEr^FsIt ɬy`Aľ`U&7yJi1sr㋨$M:U5lF�������&Ο?;w'<x  �Fի_;==:??S!,%������ "T ETj|ӪІ?^;rC;ZD:b}o5ӴŬE&!9ݺGڱ׷!wS�Y"6nc߄%Tti5M*EyRR"EE̵ͦ3[^4):9>w\I[~`.0v6=G������~||nnn֭[۷Y1�Ӷsdcc;/\pٳ˂������؋nI60ᵎAC%B6b B35TG+ Gpi TQZhJ}_4V#&O-7 '}%6kD :[M-.oWv3:xBc D5ǨWBP$)c9Eˠ-E&q$Vs ������� /onn:t��O͛7Oܹs,,,l>B������""DAX(tpTBlÄ8&y\SskD:,9z=X4z,߂&c|\{.2ҥ+H~�P| Ԑ 2FRsH롛2H}|RI-IB8Qkߴ˸%4h%er`L�������vj~~g=D�xOu]W\O������c<z-c,Ψ,oSm"U#хW HJN}NѤ5n>RdaRE\!7r]BzbDIsb(}B֕ IwB*\Qa!y/H 2r_~n2-1j͇؟c-UDJCKޫ^fUt@%;O�������Ο?WΝ;w}cc<X�b4W~? !�������|cHD@ e 8CM1� I =vtyV#/EGTvsM?V(qj04J$V5)џۥ@FP{GC-*%Uئji:\Ε;:𒮙_ꌔ?,m[G=H=n Iu< �������@ [n;oߞfY��ϫ#… o={xP�������l J:XRCPL#*HatNh:6'_ъ}y:7W뼄[a}U&-\~|w] Li$)~}$TG6<٠!uD)H E-eh\5{\#/dj.8ܲ& ԡ_((�������8,--}>K[[[b��^7o<qΝ^\\ !|G������n!4^hB5~|(m!;j8I=+!7 &bs&b`ꀎ3~mKұn>~ ah^,)Aɦ-WR~$5ؖZBkǠ%"vZ&S^0 ~ļio߾"%TR[#*2kcj}I������8Noﮮ �/ٮ~sqqs+++*������Pm+ BPu3IOJ8c1F$1ty"FIQ?ob9F] g%la˹]֔X\!YDxMN_[pkݏ]v]YZbYܮb4_8őt6ԛ䇗1#c>DE\Hվ Is-I~!$_$k"4PPBt/q#aL\mh1)|]euՐ܎�������xuϟOΞ='<x@0�Faeek *������pD mF1fOTNbLԚRr/E' J KPq2A﫾QHyȒrd#4ݚTTX]++j_Yץ39ҥdE=�_ןSE F*ٓr&MHlJ Z̜*/bgI^}Pޥ*dނ0ޒ9U������x}֭[;wI�^6;;;G666… o;w/�����G7@DC)1, K)r GJC'|$1"&#lCp 6:xRW=Y܈&GJ]*P#jn)k׹oWD%ZJ"HGB Q7f7wdO>F'zMTSK%Tn6fiԬH6Z:1vvNzv^1UcG?"������Õ/~ikk�y۷oGy������!"}8ܡg+tqQ;~R 7J$%ϐ\Bs.6xZGfA]S5waVj%e#B=|J`#ĜhQTCU ~˛ yZԥ\~(iN䀉zĢ^)+zn>t6)Ņu)_R������Jѣ~W��plll\ׯ\/������� (җg~~uHIP部s|iA2C!PAWaUCiAQKBeDrQƓ.$DIY+*ēqsJ?.nK`)\)dFoJ;I*7)*%?Lb~$U5JhkMj{JN10:&1%,ݯ'9뗴 ������xt333ٳolll|˃hQ�Z(\zk?OB'x������OJIA#|Hf/؎xIGꦓWQԹt= p&}X4J\#:b.%F)+)̭,)tHY&9 91/n&Ʌ&c,NSĦB Tk*v~i F5$=RTcJ0;������٭}Ν<W��߿߭̍s}?������F%B*6>/MI(ҩ^1ɩM#RO?d<2LHQK D|4ufLӊniۂ M3#O% ~P:m$iҡCF&ҍ&Q@RIԥ/:Xcn<ˢVg"m5!%@Ik41T������޿/mmm])�ж=} !|y������R˿?qX %_ВB&] 3LIi )cF\!Qla &b~Vٌ1# NT 6Sfͥss2t۱R,nQ7")آK G,!z=haZT#In:ՒR+1?eB yvR:PP 89)ek�������Ewf~~=i�?υX6������V$gbUDRcG%f*#9\&BAb\@io :xs&Q*k?$e!.>VGǼF%M2t]N62~Ii&8tHԭrb=V]ES.T\rHJqԋs2:D+.kh_V PMX�������^h={oyh��8hVVV>|񕅅ON������K9}>E�$K6Rx覕XAt %O*KEٶͩ~$Tp\5D%R#4!ֹ 9]OM/*`I̫LU2>Ӎ3TG>NRj#RINFT,*ݓg|N ƔEQ-ѭ-AAMڤzn#�]�� �IDATs/,IJGK򚛖XarH%pdT�������^xkΝ;yb��3׿uffƹs羟������^<x~ $%Sƍ}P%U]%'&B(ė\4Q<be~\ES9Ƒ7BtG]e$5X=~ < Եt']KuUE;t F(!pFu)Jj6IrJ@L,E9O 9RB4iFB<pHc*XbR������^,_\\/^v��۷oGY^������ő*(9\"ϣ=~tY4xDc*eHWj(9Q @lN!b4H03:O7Ҥkq]mt1y4G3!ln_iE)09)!}uQ׵?,639𢮝qd(T[TlXd|} 6)������=z־g�ӵju ������(lFn@y58ʖ?ꘘs'!䰇nK)׏Z"zi5<@ D=sߢr&.0$jDUbR7ئl7Jk |GљdQ\Uވv-R&%^R„>˜N0 ( '&7Z|)M(,n`EBn(Ɂh1\/jP17V6[fL ������Xw…ٳoll|hC�FaeeǏ§C'X{������y&%3#{8U`r -d"E//GD';r%UQE;nj#3p#UNڔhQ?((~SiG]3q=1UJIDa=\145M KŎz&W4B/z!ӵJDTbH/GYQrF}npGVWԶ/�����TxWڵk��xܿ[__֙?%"?x֭q�������ϣҌ]:BJ߱We+CE. I.g'cxJC}ÈzR~ŽݵQMpcA%m}<Ga $7bn%ɕ35Լ<a`Jo2HH4|L>3> "QP$|"ιjl݅K|$L^W{_9ȣfgGmr'5Q�������/..S��x~looOߺuB������xHAue8@t0& mt \Ac|\qu&_phc躼'_PDJͨ`Dh]5`Gj17I㈘~xΒjlbtɞzzvU$[NtnUQҁzf(%B Lw ������{=z־g��iccծ~uyy!%������ߕ.WBU:&A8&OJ?8CC)*u11e]4{ٕE J4EYrSj$Iwg)ܡ:Zyf}9BUyR+=H(a_<&9dޓ]j^gDwtk ������Iw…̙3׿f��FaeeCǏ§C'x:������{+S\B?_Ƕ@B# 9}o&-{bi]HBH )i>}C=YQg�GLTQ =˴=MԬU)z3t�D{1/ij!}ͰI ct[z1Q?hj M�������˗/_yqc<��/w:33s?������{/ag@q^4j~j=hj׼ml1֡U[?ܜ%vlSHo\37D侗ʘW'1:H3.ҩ)+b֘| E/n �ʄ1\)l߇G�����W,.._׮]{g��m{{{֭[w~~~31'������QR>k�iD*&pcӀҢ)R:wh]v?זww*}RHn::twpGL?HwPh7&*#y@ɍ'zKiP >0[M{/M,rcS}dV.E(C������,YXXSSSGXq��^.v]˟!,x�����g'QoOBs߈KTZ !-s'Z\ZZ'[2{\@]DOK,aHQ!i9!ekjZQ'JVq&A~JzA?tmuouU%/^r<hKvD߯fPAt~LA������.^Μ9s}}}O>|Vc��^R(|_ZXX)5������, A:!}ġ=4C#O0AZ]JIIM/>x"٣?'RL1SC]dGN7zk$(7L'Ftȣo]I 2-%.їVc~cxIcԼREDF������SuȑW_}ƍݻXm��w8333߭�����)}o~328P�FW0I&{k.=qhb WhvW i8T"Sr[G#фMRHZT!:V(i 2nTo pY)At_.PLg]ԘQͳ~`e)ŏ՚ѣ������iy_d�8nݺu|{{ !|�������xb#PȄ = 8 ֽNϤkc"&0@u*C4TW9:1>U1]1S<EmNňAg0n>Ɠpt%6B)zI4fowV0������w??Z�677/u]χX������-68~88IZ6vTǪcLeNQgPr{IWRDA][BjVQgPG`c51hTѫ{?>!%&ZT@ɇXۦ$a-;0΄w������u/^gΜ'>|s��`FǏiaagCX!������2Nt'şC!woƖ4Vc}si6iYL<.G +]ζD!G)(!-Ra[,ᒾ٤yjG) -En1:"#ť:s+J_ S9\%J 85_ߟW�������3G/_~ƍ~c,'��'Ο?wp8������}o EB S  xD&H絋/5'9u^7n7I7WZ:rh}Օ"+5{Hj(5Pu,^hBy:8nH)vXцB\41;7cdh\5 6"iY\ V�������<X\\=g׮]�u[nk!x������;8@;+A Mњ_]g5|PI^Aym| `8)5E~J}цabs)fqBCS9@G EEsw[Yr4)^O?{b&v`~�������/LMMf��;JuY^^B ������<<:I>&Ј xIzvPL)Nʟ9?yܓҘ﬑>|C ܖQIMiti5I3MLh%09 Sb39thG&Ԛ>aZI.*dNҵc.1ݒnX)D�������x8s̵oza�wh4 +++<zk ?B8������*Bh*&5 :Ƿc1b&5N%c1m6S7o|wѭ(!@T3HnO.K}q$9ag&"u$XFռc@G7g|xFDQLDAAzMx:RַMԡ31������Ԏ9/_|ƍݻǪ���<׿od������dRi}]:џ9> *~{fL6 O]GFB[IUHj& 0`aj՟|~Q!ADt'MRKTO^-i>=S)Am%*Hi=H_]Zsz�������rqq_>z]v¤��-n:_ !|������&KGHed)۞uеZAXMZRg0vv%ڡ#@B$H9U%OL5('dt8&K N͛[}JL{IybܞTs_|?c6N2Qu0������/LMMfU��{accgBC�������&}I)RWH#R (p^cMڧ;8&I!ֵ9hHk^w[!U-:&(Q_(/j^PA5Sx# K(% k ,2Tm'nqSdhSHjE V#J|L2H8������Px<uԵoz! ��VVV>x~.p'������r@BǻFFH Zm&Yч^st-xGb]/1G8(ү}9`"%(As%*cY%HI(auѤzC%\u�$-ߺC"% RjO1(6=v컉������tĥKݸq㯽[x��yn}}[Ξ={cff毆������=m5$H鳈X{_ Lj/ߖ!LrC9{21w՘{Hwfr"bF:t"&(14ܦC+nII&Q1AT vSŏK}>"FO7f?t~zgpᙐ7������!Ç/"�ɓ'Yٳg�ܝ;wmook!o �������h#}?e<A+!#^֑ӄTD;Jg65IcAXqxw2p'aT$,Q6t| _3[VԹ !D_;_?7tnn:bٴ{`%ME[St0E?д?1RTK빵t������8-,,ﮭ!^ٚ ~d_\NO8qbtx677_ !!\������Y# ֑B~Es3[[l #IL~ *0t/ iPR'^NI{sԉ؈asje-%?5)sp%y4bIM/uDϵux$RqZ{rt}==Z٭P ������pHL]x<uԵozaǃ}[>^{ݻDڷ}_^|[]I:zk?83������a?s(D /e\H坰BVVh=db;LR enqzEBQT***H'菍:8m'*NͧJB C>"e~8qyT ������6SSS7z/�l]|yԩS/}i.;,Ke_׌F]\\|/=x[[[g޸pڿ������^~:jR5'!6C !d,b򈱄?_ ՘:UOG9a?hQ+/3&VP }:IR+e PRn?#.7`nmOq>xV15aO�������W.--ﯿ xN>=Եkν[?>vܹsŋb�ڝ;wݼyo?}�������J.(_a ՙ':#�23פc#oWsn[oе1L< 9�Q%bDJJ&U$�KiLIafo)5<% "Jw,>Dr%:} Rsq]�GHtBqtozZ*������K655 <[SSS曯nlly۷ƍĉþq1K"~�������^vow}̡n %L ߏT|qDo]ٗ4„!&O7Ĵŏ5oLd&g$Rb(EUKRJ*ȡJRsɦ8H4 ,) &NJO ~V ~1mjB:c3260�����lW^N>Î <[6>|կC7XCڷ_^|[])ٻ(ɲUKUuuUkIHB، !6 0 sX�c``00a`X`cY p8:i 32#.UunUyDĻ/ZvuDx{-Um˯PV ������UH D߷wZWӊ"ЎIv@- eQYZv}Qt윮=%=&7Dls'/e!ĔDlk31n`IS/,k%!V|(CCl6Q1!0yCIԎbš]~~ɝ3*Aj2?C6ވO������H쑑흝]k||hpp.,,LY~'}BVbA:>>/tO>ş������(} "|_ޗbP!*P+_gFmv}֯毊okoow?}8qӱ[Zbms>/H<{Hr|YE>瘮WrY% n8.NT0 7ªt sHTt(}En axhZR3ԡ0`UJa~SOt#:6~ 5&������<j^555;544t699ˏ룗.]k׮n߾}gccc"),6������5SOLDBpqCwyOYć]" "\f #F(<cTw2h]]Wka:,-5aiF8Ft#dZT%ؐ(>Q[ (SE*xP";'"4xbyF9G)k1T�E5S/QF`۵Ϩ߮Zgc )������xd\?_YYy5讞㽽կn%۷lggL 貍'E=CDX������< [8�bB@EB{摒*&�� �IDATu|pqŕusuӋiDFT!”ÇlJn3!C,!R|=a�q3= gXZ0!TUTDUZTHGiHR{*$M' X) dC&paFM^ܽEMti?a������v=W^9==/dlnnn>YDvYwVWWamvvO+'}V\������aguhDU>j#th 'b<H :{i+IQ KY5Flt!a Y𙞺畖p� 󨸑\PDՅ#Yn1q 5_�w0z& Q$D $Aޔ&n~iDϣ_˶gl ,kQɞֽOy������{q'?;"ˏ_=;;MJ^K.m_z�����R*1;$cg[7DlB7n:ƋqQ ʢ甞SB+:pMi{f״1ō[1EQWnxb>%եfA7ĉrLYQ +IP1ɃOcm*CˈQ$T$ NΝJ'LY6>������Ulmm=khhlbb/'/.//]|]vus566mT������#ѡ ) !%t!i/IU{q 'q:΄lSᎰ-�¥'Q�$yF$C4?ˤTPcS\;uA_mc|X%6Q SJ a-@kSUH#<H1z(S *}~Q| 痆OWhd98������299===*]===2??G{{{#kkk_nݺ;;;~,貍'7==?Dd�����"*Hø-B#*B(YY PFr!ix#n%~iХ:2FUa"C]\<$pN>UӌyV;ʷA ]è"\"%M"GW)cqR-U8Ưׄt$i 5H䢃*c$=r*������a3<<uzzZ577zzzq o]]pguuKkZ?@-//CZE"7�������4\+Im6N`Dm(j<ctY*Ґ8C$~, DUڊ"*)NӤumuvayVݨR±uAES %>-!h6Z4ֈnn)QT|P7:@ogvP{QsI$) $<geM,QYstu*������pܹloooAw 񣁁/^\\S,?^KKK7@wW]tiիB������N8{!f2GIDs9DIJx)i*Isei ǔϥ[O XآauU41$DI&ʾEGmf/g^l,d:\06z$iԁ4u:Q(rߘ9I+������ϫj{nmm=khhlbbG/<ˏ{.^U׮];�u6Ƽ�����(|wuo<�{51_I;KHB !a`I64 % kBv/B2:#iIaP-q&-)T*~Al Y!8õb'g51UJ:sHcC/T2M*eT.keQcF׬*.̨cu3������JVjt^讞Kx<s?sebbgϸ9@wmll<i?,?������D&xd- &@<B #>aq&J"&9XUr 6 dvQkč.>gXqא[|HR^˰Esn p'~E;IVQZE5I'J]lt! D 7(M1CYh':o6;������esڵبh4+VOOO?vqq "vgmm'fggRmyy5}}}Q~UD.r������p9�cۧ�_6'1⎸$CܱiCgU &OAtJ܌LԾi&\[htI+3 6y# Ѓ TtCۇRTÇ8oI&ͱHlhRQ C- 0e^7w5(6a%\y D xnP+9ΔڒM ������>oxxxggg[!@wbMDf\ZZij<==R~ҥW~4bC������egL#.aⰄr$C .s?7"f31';Laދs#ys-L;CMtG5nU Jhd) |X4PuGpύQ,$ l_kqPIޖ������L^S/st_:<<|ˏ؟-//_x+]vč}966cy�����U%,#Dt< $Pan9ل$VQ0?mRZV\~" m ERDŽusKNHY\VQ1kEzMEzH*mڟWZ)wJ1V8W[TZiVTM+ՊJjmk~m.ٴ<ލKsc0~|\e5>z_?^6]ͭs4^Եس������ߕZjzJ讞۷or (x~jggopSظb?,?������^FVݐbBCTYD҈鰇D6zA E/RĥQ{J^I/CTxSUH$ Dᓤ\C?mqA8Ls*jms0Z4ʤQ79NĄfU&׸0WzD%KIMts[0k<&kRU7Ds,!TU? Q#KRUڵ<]*ϭ6I|!IZa_1�����@7 zF#?�-,,ADvYp<~T떗__������tK+#aș- AWcT" Cy"(PtHY% q$!%1]@$\@GDuK&lT�%mTX=IpIqk@GLB"*["& bLC-RdMs[+&vRRBu6:|Gڛm������}r9<<@w |bMDb\ZZij<55 ĬҥK;׮]������t+p!: !L">l.ʈ$i$˺A-&6�HHz.H3 5af qxŭgВc+ř=FC>Cń qWgԎxZť>!ԢC*Vd W"Mи]p' ZhM*JkJ������kj_ܹs/@w MLL僃g/9�};;;166SV?�����}fl3~B$.8&.$Vt  f5r.a}" X5D (żߺ$N? -+:+|@PE"B>9f,$,P՘KI'+Q$$*lsЛ Tun{iҀJ|CĒ4!f:̣5 G������xi\jYVdM鑹?Y[["r-loonmm]]WoOOO?-"Y~������t+(T̙+Ո #k, y4g<+*B*Lʂ&:XX2 F퟽u.u!`UҜ;;&w2(ԣId+NjtHqijbv=YqH&!, oPL:H6%y|$oHHD$1u������xI F^k}577zzzo]V}T*VW~pjjWEV=������UI XEʊ4|"KeD5fs2.D|"D1�~Ms)+("]\hƷ$7΄SkϢw.[\jNqAŇ0m)%9ٍG?qsPS6vmEښO4xRmMO0&9a6~>+������sܹ/>/Z\\,?'N;?NNN/]u&"$������j2CPiJ:&>iW|4D7U]Qd 2%q'HgXe4Re?f>5xVBPL`n{6f[ʙē"HIr((@ZEⷃ&Fƒ<Y8qtX&=M8f,XǐXLz|)k`c?������޽{.t_:<<|`qŋlxxe}NZt������-y#…CT ;?I .vB: D7H^F|B\$W蠊s͍ruHE 8k1P e'<*"5v�DyèĩnKI7*"% stJ߈k'xU2*HR~ !XiݰJ IeikJIl.Q������Z]jW@wܾ}{d}}뚿-�^{gKtƕF[֯W������H=~ Eث0kI(C)B퓴]i zpL>߅a|Z^݄+)0}dlm;K|Gτ, ?ș!+yCm\ۉ&&Z,K}<$趖}>s]\@wmULԪbׯlgdts ������<zFFF~p```^h;M@OOO?vaaSDd>jw־prvvW*VW~`jj"B������>jIE-|*kIi88a@@?/(k/(Dh #Fg/FF6tI_tFe3 >at! ՘,SiWXb KRNLr~!ɪOv!Bʛ|³1FrG}ȅPT},tB*\粤M2_ $�����… _xݭo<88c?…)y^rKKKtvvfffY^NNNg m f([������*?TF*޽/#T|9!|QaڰEpG|6>Ąu aՙ V‍*pH(6*NJ^<.'͕LLrr՞bupV0ŅLIH@ <nt OBJ⛑X*qMqn3uP]\_������yޱ{ҥKgf}}/}7nL ~! t^n����� @6"nt-B*.aC\q(G:+|ąH@oY1|^"GԲD)!.C0QХ<cT&D\U&Z9�H!adM< e )sVI!:�nzTS)IdN*S\xN%;_",Y,Uz{������PjwUG־^DN@?`|7mad�����tu#>E }iU*",.ppmT iT$mq� ö"�4QӊHh/>yiH7FǤst,>xc]$nb#ɂWL3}1IH O"XmV/7X a<C e\8}.uIDN:谊i(�JS 5q ������zFo&]6??_?==؅O?9^[[㳳ZvcM�{{{?055N:�����Ti$ }$DQiT(x4茂o q I'Z|DtI'vQw]>ַu+L 8%LI杩Fm'XP,Lq_;T$IR"|& (߈ɴiI(R&gJ&'7B(s������ q…/z7f;�ϟ? S"4 <0>h|:讓CCC[׮]f�������Q6?`! bLQ3 H+RYEٴ~pKk1Fs_-ӝÍ4&߮Wܺ^7GJGܜ㞵zVQֶ榷;iM$#ibiF1e5&$I#JIc,DǴS,G#iIܒbJ%>6������:y3GGGݽa�ŋccc?~Ν;:-//O ~! 讽2::,?������^$"(p7%/CGD1"-(b1 |dS2+ܐ%כ|\˙c2YӀJa$ƹ*(8B!:ajar)Jpn)O6fBEf|߸ܣڦd4,~y: �����cjV{wZ}<�]===277{nxccD[�<vkkopˀ|7? "d�����%ߓ7I]t~Z(Q:n8֪28# ddOdlDd<~UcL9_Dl5si63q!" a pF;B%?>iÔp]ň(n,ިΦ uJ\7>0:RN}ɚZt:IB0( D?"������<^h[F@OOO_F:<<oj5\�� �IDAT�~`jj7D2 �����r_QF=ā$KK0ƓA ;lS"އtrh=7h0&C̿}؇=\o* $e ?7YsJn B:x\Q,Fdq94W|8_s|Rp+&rGs)k_\*�����qp…/v7rӁ88/,,LX~ࡷgffV@wf1������Ij$h!!}$"VB&$R"ζ|^4,-4ҠC6H#]?IW6K+g9Ř$aӒPnH!*!E'ov#qElszU:ܢ#aݼ9OD̦]>F;_`orZ}SݢN)Es+T%1#������<^;99\u]sί#7nܨ o###^mtttsX~�����NjI}>'t;HyKiB2i$d~QE [\<}V63u eםιeMߛx7b2g:DnS<J_ܰpLrj_k4)nT%̛]|֓UgԖ ?KxJT:-�����1sVZuuutW__ͽ^__ﷶw'mzzN*�����J) +qcVlKs"1$mfeh$y%9}IgH<G5OSZri.ىK~Ns. 0]6=]aҬOh`C5j PG+3Hx s -%)F↔4Lb?t%׭*mu9%7C=M/IGl6%i������x􍌌zFo ]6??|||7Mxl}VY^^ާ~CD.������JɳC-'Sz\|LTL}f>:6L̄sHDBt9YbJYP+e%5oQiǪP4q KE#5IB(jx c՜܌AI/<_PLbbK+њI+\xȏ[.�����GKz՝txxkbb⠯sfD,?^ZZF333<@w^������<oga >7pQP$lK}+s&ЇGY$n~dNمSDYEe*$5$ SdC#g emvEem-bbmq*yN\$59QآO(Wƒa;RU% ������{ t˗cccrmmaƍ>`Q֑������#-q!I0Ԗ}&vοQ"5{aUj<Zd@M [:s1uP1EL} B"V֔{[jYIq"xh1X$ c*d7'n]q0.dg騈1i-8t�����4\]V߷:=Os֭ፍoSnmoo_Fjkk�����xĸ0Mo.q[E>,#.3} /-(i䅔R^<g[d5;&_MN*͟*NO\qꐇk סTlq!<DQCL !O?>at%MIsJ;B`Qa=FkLO= �����N77p?/zqq"r<766f|vv*ht+z{{M�����<"t�" PqߔM[W$ $Q){9lOs(zt*IfTO6UE!býiT3w@:QF-'k=kMi+W?E#=_`LR!Nu(m1z[֖ .y�����;W^^#]}}}o[XX�^h4^?33Sg:991+++o>������<΍8aUHE6Bâ{6$w>MR%:S!TR-<J?gIZ]{{J]7zXI<` VJ8O0|>FlŜճVǗLYItbB�`}�>W~qkk5Dea������<t^799xxxvww/r|rc||.Qz7dttkooo{{[FGGwϝ;,?�����)3wŊ [GY,qT6!-p,D(:l\1ӹt[Y@]LU?w $p\vxy=;TB%mF ip% Zt`| I,Q#175>.+|nk^ -$zi HtX)_$Me?Ww)������Zj}@dnnwnݺ5"r-�R988W&&& t楻wEU,?�����fl" ~Nw}:x!PkBB�+$ty"(_$NټՀd|q:.KT*FL%Jp(ilC_F9`qL]|cJ%!^31\& Ӥ% --zltQt1)n�����Hȿ_ol4%)~q||1&"7Yl�aZt.[^^~EooSSS)"WX�����E[BD:6-qhKg|P^,Qv4XS6Fxl]ˊ>-d!?HIQ "񵅙9 d3,zt.Ɲa³2>R~'ul>F'ni7YEJ+%cIV������xիWw𰗛t~oo,,,4ۊ>ݥh4^733Sgс:991+++o~������<-5TL{* q?Mw-*ygGTLj*i{nS)| K2욞7u:,;ekeۊLPq}uF<EI:ݪVhF?nOcJea߄S@q&onSUARO=Zl������x^�u>qrr,?S7nܘn]<::{ܹg�����|:*hTL%}tcIf ʥ~߄[uX$J@e'JEH{V-3ٛ(WI:V@ǞU1+i )Qucq4ſxZGHYK4fzeE*>KTp%̖@ko) FaII������܆~Z,w设>[n]]__f9�x敱lpCܼt_�����xߙIZ!نI>mh87B:&Y}:n/Q9(7{y }Y%ǺP"vK{*EYZn.q16 s<n(䢂-aAu-*:mnIKoQKGUYpD7?MQl+cl{ŸiۊZ+������<PFFF~… k+++ol4e7?fqqDsu_V}�jw�����^~(0>[r akT$!#P~iDhԱ5$_ņ`J?34(J$9=GtB-QM#j kYY&#xIsJ8 Xuq% j%\oSQ 45lA BDJI뛅ul�����n``]zugkkkz#@wMNN~B,?ҧ6,sjWVV288922"�����6j_q_C>Qd"gāҐH$lp<S$ LX=xΝ6c*Xx:lU.& `fݦⶻkFC-$a!oB7i#Atf\NGRT:0%7e)x"-Ūϣ=�����@׼~rrr^dف|rcttWWW899uC7n7ޭo=w������//cze \J+_`¿qm*Q$l~_UWE( }j;Iǔ$0"!ٶ]%+&Ɂ7tڧYE6e5L 7ɯB):@bU"W$+f i8Ol\(ŝ@Hj)K$.!]$%k������fVZ tWoo[n]9�xXcsslp#ںt_�����xy8PO|3$eᑊXC$%Ї/Puj@}7*`TI&{d/S~mݣ l5VBF5JlqSoHQ4Q!:_<q㕶Jh+uB'HF,3Jɚx֘h<{3:&4; �����ottG/\V?h4@]~}U."X�jkeezZ}jjj]"r�����>" q1%Z_?++6 U 5*taZ-+V# b{|2n$ʪ I,CF(%,FTCK=$-qWHҶQ-$:bB%A $|i/qItEgL@e <֒Vhi$/k P"`:������p '|rwsskzXf&''>g�QKKKh4^733M>_YYy~�����.RI!>,/`vc6b}Ѧ1֕NTfᖰ,HY%An*wJ5ɹc*E-pHѠRTܴofp}#:aB&Rtfcn k1~[zZNh]|ALCZ_vUAOaTE �����ɥgbz'߷e<&q̅ >7ޭo}�����NvJ ٷE@դRHKkq2q+!Y/RVrIpd'%s)L揤DVus(+h^XkD?$\jP7/^\Jqy#0z IFNװu2i#Ki;jYOƊ?$nt/aHϡu�����4ZcV^;77nnn"r-�9::O;t;wԂ�����نv@=H\aPC37VvJBTLE$W^s>#eL5�ūxyŘkѡOC<~nTJ-ZYT nQmw't11Y(~u1=m'z <4*X3>������x .X[ ྚ_<99y⧋-VctssfggZD@Uէ-"WY�����iWr4tR|E?)1:S`%:\D0'~výӆ䍺Lkfh62_ %*`dC8er)P7Qj $ -(*Џpu櫹}2wQ,n@O &ǕOkI[XtNMM<������Q'|r{ss?::aEj{===0/"ϰ�]ZZzSx2KtW0+++o\"�����%et7 pLD_ŏ2;\q5m*W9/cۥ>q~v c~>hqqU%#ZY?_ҚOk\bgײmgExmSM{QJܜwҸjW�wTIlNZA<`]t KzΩI$ ԔӨύ:lh1*t]P? Vd6+ijI������/qpp3>K tO<z~X~�oܸ1s…566{ϟ[,1�����KW|)h3}\P5C,;j;suHE+=) 6vS $p ke5uGq}aϳ==7d;aat|" 7C-e^1j'w!FI&.#=_Y3dAans1y$T8}MZRzuJov1y7$ssi?y������/c޻>kgggխo+(� pttOS ͋w "Z�����ࣧ !: эQA*q+y6§!lr%TTPDw�#!S~akCE(uORe+|6#KxF90!]o(pyvAal3Ew8uct#y>]tܜ61|4I>J,bU4"Q9hn1IC*-f4p2]$ޝ;M.餕dk�����pB}ee Z&999yg-�>"xooodvv*t\Z}ԻE*�����MB:7 tG$:p^ !~vn.Gzh*iIc+p1i#nZ:OȄ#+V-t9bnCыΑ̶YܰWF=qSAi *⟶lª�14&V?"5du9q#Kxo}m5%������ }ٓO>UGGG=]Zm^!"ϰ�𒸹F,)]Fìy```cttD[������oEh(a$(9ο x_C\È2O|T$TcՌB KY@ƪ;)kk)+potFX5(8Q 5 ;1v(RAq%&} Nĕ.{XBۨSq{+6\Ga7-ET�d>>ZQ)6�u~ LT�����'&&~gb|˧}`ttt%uU�� �IDATgss]Y~�����B_Ƿ$|g_|Mt8$] ,x0:"|7J`bC5B&p/H-EzxJSpQ Rc"4.PsnN!ߺjt7צg VGFMVЪ- s顨?ӱ-9ghe.!R:}�����btjj1][[bŀu֭']Dθ�pݹs6774NYnvvv. "Z�����0>$'\µ~{Eۉ [;?b,\lkB%cDߌZ`$3n^%%MDsJ D\k(Q HXS7Wjoli",n6buz^>d1.(RUwt눻B'Mn~2;@Jq)![ܤ*o"kIIB8ٚf[������8?::\pk-eϜrii3D9�tssFfggZK@-//UOOO[D������.ѢjEDۗ}uZ@QeDYU.jEs4%oۆ%m 6v]H%mKUZD!<+Ƙ:TTNcM[GDmXT{J'%KBIr[^t<uHЄI(Y0E? YN҄nO͚]������W\regsstQ*ʧ-,,BDaeusiiMF㵳7@w5 恁>n�����@HC.|f !g~0 ru 9}GWLBQa$BB&(A>k3b f% cs3Q&YMn>8iS-jX<Ha|F#ɂDNp **G*QLIFDw)=9|P99ᛲ' 艋ߛd[֪=v������(|O޼ysE˧]/�fϟ?{z677~xxx… _�����_| )FIT _Ǐ*.<TIцVeE}H8 y wR*p"!AbH\F7$ uL uSW<+3DIvlI/^+əfMu78d,Ꮁ]E}D W!8R+KIUkJ%26������jdyt׹soܺu*"g�x0ݹsWׯ) j"Z�����%ߒ_oVB8ᾚA#T M+nSt FZT\x>̨ܸz|L(pb}<"QYJ#cL O"J$Oۤi$5IGM/Ey`J\db~~.3t?m)n=L|yNtIƔl�����x'__w^_ZZly7̼?|^VOMM\e�����tWE!9hU׻2r Qc zq S(-o 7w9 #>mQ LH)ΙEi. ?֟Dss!=?IJOU$>u5E/_T<3Gړ;iSH2PIKۋkKPO\y ,b@Kn ?痲�����x+Wlll|;wz@wj*ʛyW"�7nxkfggrYYYyؿ>�����x\Y[̯K)QxM0v/[6gEIҾh d!*`eg Nݔ"E`ET0UPRQ)JfZ֞ ?tau5QՄCi#kQY'{ b>BӺFEQBKJ1Z:/Y{n�����x y 7+W|W^X~�x$|`iiiccc`]vppгuû_����ǑiVi .y[xb|J3aֿ?FT>•}$J-2~M#|G<D1j)!w -);Ҡo>2C&9sqjg*&N ?rTG? 9(t>ޗΘcuB?|lqOϹ.Э~>ŚuX &kD�����10^ޱIkkk~r9;>>__�:>>'GGGݾ}v:D?j+"g����߯J-nIh<*>7 qJ;F#U i=lI4 0~qcdn+&g.ZDc)LH߰qx$<zk~DpýER7%!& kR:F !$&qPѭ%N&]FZΉ.+4)VBkF{4������<Ώ'[kp_]~Cw޽S�wͷoywoo/,tY^V]f����LZiE W I�';/VEZM+.nZTTCtD܀QVlsQ L4:K'ܹu㋟_"c" ^?~!/:T$M&E$77vAh6Q#A dO0%/Hfv=ymP<? ?km+������x\x+\woV5(3ϼRDY�xܼq[NNN^3;;�tY0+++oX�����GY(p/gpwVJ'iJ,VPń^Ąpת-9֪?A% +q.LzIRX%awn}AIHM2mPWx,LJZXy蹔7=w 0ٲZޘbg3?N,[q-1b�����G_Xy~͛X\rzڵO�X|__hgcck]%?�����xdYZߣo5HњBCY&M].PY�¾*nTQm+Ƙ(RBDdٍķN|lhgIscMIPס[Y:d+e4v.ItJ#>YDd6\W< sOM*:sE_<:?O"JA$�����Hcc̟ո@w;wξ͛O3��_xrdd/]tc�tMMMױ�����c$/oP*Tn q_w�QX]ƒ4wbw.q.h40mEtÄ0n+qm*DtۉPrDžƕ"2~mUJlQM2"I@Xe!IC[D^tŨKq Ȕ2ܢ5D$R) ss)Vh=)Y˒sdl<}" ����Gp_濑ྺ~޽{}iim"ߌ�(s-o߾633~YYYV~ �����Q7߯w-#5B~) zphP-*"RQ M%:$e]G" 6z1\J4g0EXdžH[]l]B% (iCIvI,>,koE*?c8e)JQ!|x]J$_5������<dʕ+_~ttT555u[D3<JYd�/7n5sss ,]F,//؏H������< O9⦑gVC (G0>+Vt1; .aU3jP ,:x$B!]{c}u>"q . z16=,x@Iϡu-+iˋ$!pX_Cz^2PYF n/R]ϑi?������e||7oNuʕXYY""�>X\\ Z.;88g.�����f.<[" Yv,/ЇuKϟ3:qQC q�ct%Ӹ8GsޕbS=$-1&d8įcc4qP%YpCG]:hY7>) iI#%o\ΛZVl~\’[W*?x2thnu_zpu)h1=B������񩩩?6$wsw޼y*~�;֞.]:e%<88SSS7Du,?�����xe%%3ED_Wq͇jUqB Qm(.x*6kҼB-)E _a\tOX5HņFap6 1a*:FDV:CJMI5SOLn9KHGʛb79 & S:c\z=:bә�����<Ώ VVVVZ}s{>+ �x nmm}۷̼?leeeZozz="2����Ϳׯ)D@[ZP]z%.z{h?lqyBrf"@8*b vXEjŇ;;?UwKԛ[\C C CQ\b !a2%aB\PP012Hۛ$$Z{sMrR~租'z4&! aTv&oVqM.GjzT"Y댾n)P&v)I` ahN&Y<?vږ"TQB̓U!dLzb)ݻZ(|TbR �����ipɯGxhp"Y.]z,�hee<x𚥥,40\/Y]]ϟ7"rG������61'%Ѷ+i@ŸP!HnAsoII.נu!fp:#Єb{ZU\(r>b$rh%nd~Ee:DM,4*|Y7$Sj)RH,q.ʝD[ҹsyX tKApNIh'mJ)Q{�����x*|[~rww8 333tDY~�^xupp05gΜ9~����lU_2!q-0~/H E|n!mjQY1Pp4o |n Ds5{ 4*$RT$ M"싉)>_NcjD5|C-oZh=tKQTOZJ}z{%vZϵsCX<񐔒O4BeP����� 3n󾍍90\… H#��<x766Ϟ=/N:� Oܹs[֪�����O<oǠLki6a!bkSg)B&a 4y%m5qйi%i'qlK~HhdM?#IC(i­oa1F4lo^o PK7p\Q7.FC'a{z|NrlhSOV TK}"}uS),Q  QZL�����OcϟN rŏ.]r,4� ڵk͛7O/.. / Zȑ#\XXa����J]j�iJ'�6 kⲉPC$Y 90|BA`&l'*߷zO�64L<lfUJ#yP$ znn*s1& RgաmJNL*tJJ<W {>S&v�����xr<yNMM]򃃃#<`MK.FDVX~�hees<x𚥥?K/շo?'E(������<1LoAĿ?C h\Wd!M5gۺ XmnR:/{޵~f_4X~7޵ޗU/υ~Tb{cǻUnXל̨ iJ80RX}M:Dr1:=$nJ j)[t݉uLjl=A�����Iin<`>}[;Δ6�x _xϙ`dkkgffvN8,?�����x!PD%wT <bv'�# 섨A slzX+ư\Kא ǚfE(M^7\!4$ZP<\RW$}-=",+o}JWؤ$KqݪЕ>&1i4������V{Ƙmnn3uƍ]J��<=<xgϞO:G ۷o\Zײ�����dmS" GtFH1|^ ȠI0$lqYI*w Al()idNH1e&|]!]Bf#5ߪf~8Z$6 eD_i/D)0>$۞,p1kJQc,4bE@:7Z6%�����xѕXkUU%/^m�{xڵ~Ӌ /c֮C s6�����xetM|%b4هlF;I9(W `B$4=L\\ 9 QL3i=ydVgFJAyB[oa+\RLlsrz Z1jmQKE>LZ?}i�GJdsVr,eT JtA������ өS/;<<<n~K>IDVX~�3dees<x .9euukϟ"rG������t(iQ7`Y'!SyK/`b&!3*U .ML椰4vi.!kyTc{وT$MjmJ)Wl)|"I8DW|-MA:͛B$` ܥpQ@~mL܌RL-dLJST*!y�����<>oݸyg᚞~pot:"� +WzddɃ`dkkN>{ĉ/g����D]$i u$u_BˀBxqnϵhbG7B�(y PfK IHmh�� �IDATis(LJV;+qp e<0LA$n- W46\5O24b>$.t������|=c{777gYh`FGGLݸq5��<xؘ:sMLL<uƍo�����C.C"!oCEQ^وaEg bY6Rj6q UqF8Df KR<n3sD%%G[VRϪ[).cDH] n Vz�5J޶6HVuXqǚBq^NJy\�&&(j)վ������lJyw"ŋ9<<\ZYY|x񄫯_g /Px�VUUXXXc����Iى{$*㠻(J۳.bU _H )iHb|!+HAP:O7u ᛰNiz E$!B3DWUz@($Q;)y'JgjtnC-q HB 0j>QVWFJhzmhܶ,�����9u?eGXZ`Z^]ot' q2x쯮~^}…|ZVWW6>>6;;S"2#������hdYPtNʤ$tJ� HvTM:_6r2Q4ɵt;LFXYԾ":X?|>yd|1Bm@XiZt3 bZV_> - !HQ�IB%%cE/ng]_i?S�����ٍ7o1333߲6#"a�\rkFFF~cupp0O>qė�����qh^_wCQǺwο .kB>qύ#.K̳(~i"A4to˫1t";)(yDS0q8x*^PPR`lraLq:XfU xn<"M#_[߀jHI\GߟS7{.|POd"�����vƘnnnβp_ٙ_N#��`3g|ăx,nܸq?3??׳�����B*VJD_oٿ:±Q;N%sC/4Irv@c y"_[O/$y [=tnx~VYRKpz8|)=�1 %>*ng)iH_?[6Ǎ$�NbmJRv������ ѕNio� MUUrvppD6�ǭ~,,,^x| z,..v[α����� TAl!bL|n8DDE 8|bD84y!^kF lT9H?P56=NRۇS@)4Q+>t@Z m&M[ $J2Ypyi) Z:X:Rc|{X"J0�����񛘘_|xxxjuK.u��Z]]… eZVVV6>>6;;S"2#������÷ }wM#& dy/ߛ7yDFip4A5=/k љXd@ ̈́dn\3L\lm)>(}Xbw7+6۟3JA{% ^(,O "HnBOm/ˎ.i ������ۧ?~s_c᚞~033kkk3"^�ͥ+Wplnn~ɓ'�����Y}M%]Մn-KEL /l!ppƳ{G5aBF9 I2Voˎo@Xe #b w:S$D~ *e.Y8X[<5W d B2|DQ ҇J�����c޳u5k||...ti��/?k9}xõs֭[?jD,?�����նEl8KHyk8g$1LQA(`bUY %H,.kJ.e#pLDّT3#рb^S-X$ JHo")7牻|~{σ!a<`|X%lTQ<5�����x˝Nlg04UUɋ/WVVf�x7n|¯y�>m <B����|yB:QsQ% c$9+:>) #9> dqifL1+ic@CˣGE(.t軄Bz@)MT Z$-گ0=PBwR)F4S������durrɎ�X-..u˗/u�� ݭ;<<| >U׵u|||NDx�����Q+u+4~XjG}!GWE%Y'}?Eq]QG`O,‘&suq$i5#IJ aidIC-Q{ZRD[Vҟu )I򢮕5T!:i΍̒NRJ 0������}dooX�ӧLOOy/+ �+ҕ+W^c<`lmmWU_����~Jm*Dzt$))(|@N[ȃ!kSlF!f5UT)"6(Bx&fMri I> $`}R/=NMT)5㢚[[ҢdM=Et'jh+!%0ծX;�����nZ7Ƽgkk<  ]XXx7&vvv~;��ZӧOΉ<`vvv_OϯY~�����y HTwunP *U&yW q|E{]!aEakfH1<#jLPcH#N7@0H4!?n8'I ǥz<(F{zN:u4cCˤoUocA|B.n a�����;1;;kkko_�CSU\xOWWW!"wY}��X7kfaaGGG_<sUUaa28"�����ǽ^@].М\jTI#L< }RIc}ESn|E3N/tdfgLPÖB+<ݏU(0V79FMeP(OO"8/ :>p~Ӱo^Fآ&sHb(pӜ�����jrr&&&onn~ݺvҥO�S^pGxlpu-o�����Jb;u0&R써BlmbQg?4ri[I<c*"U`#w)(5d!i"}ϭp#iJ) jU) K;n\}QI^ ]W>4tM>lDTM_LP����ͧ?~}oo_:}oZ]]��<\IƘ=77cWLOOo<yX~�����Aňj5n)T`$akVB d:l?idA?88hQ^J lOϏAҶ^l84lR ,BFI1YCLUR:\bՇ%0xT2ws}ؒ98:ԭɮ�����v~c{ā q��<1s|ckgg[����d-&U~ZTBG=!q6JpP@㫱TIk4Lvdx[<Qa*^h $C7ur &nu7&,dd{)T+ kб.Uc萌W]\*)4Ǥ)&g=!3�����ɉ_]t:o0�^vUUŋ࠽*�̩oܸ{{{3 >::7X�\UU_XXβ�����<_ R#(v6,^OD\J[qG8]FǨP}>4~T X~TCq e*R.ԨY$zR6I'ŋd1RJ^1ٍ')_?,PQiPq5M:&$cuMHD!7'X������y?Gxp-..uK.}J}9�gޭ;<<x…ZVWW:>>ޙ�����𜱮qTBL]*bqmP0@ڠ7ΆlBr1~I^ ǹ3V#״ҿJ}&OhRX$m(wD^4u%;oxf$񃫘L2\)4세t/iɅQU||�����ϟq50\333qeeeZD�Yr'ߚupppdss˧wN<,?�����Ͼn(#"UNEܮ tuQgucph$|+iWn-&YCr۰jMT&7.RZYӉ xDpBc㰊 3&/5 ZQ!ZWJM`Kk0 jO�����x-c~{kkq?�666fN>�mggح[~r~~~CD�����Ko~$2.n~?l <1`Y}! qxC\'" iˀ$dLUᏱ! .G2s֙&d>t!ZؤCmyJ߸0&X_?( RBqF5mX(-R͠u;z�����3ܻ=zaJ^|?:88hSD��Q߸qf~mtt4�٪޿m5e����x) J^yhd m'pdqbj9ICErMA$ޗ]33$& 5LQhZ#tPEA&PɈV^0JxGzmpsۻ?w}YI08j{ۍQoߧ#KdJ=IrvGg �����^?W<K`v~˗_}��Z]]ËKKKZ>R׵y||377"2b���� i_ӔX0MR귱ԦUu-uh0V%+l_ʅ16s<ռaU&6 .u~L\wfIEpn5vݿfx;֭Ft/uZI2DQâĉ 刄 <iD&<0 TY)S5iz'MJm2d!Y#=B26ְpUFMsg �����B1;;C<@`fffLOOꌈ��OϚcр:888e;N����g&xޱqpź8z/9Oe?!*Eԩ}Dӿf'fql~f185lu[j7输"[K|GsE:1*tbI0yFTcJ)!ч&^ D0Y_3s1Y}Ptx u6������x,c~{ss,Oq;;;?�^__9}MLLg9v3??!"����lp9n}-r6Kڰaﳡ^@UAգ_J\a\ GzZwntV2&b?j.bMqco 7P [^EBۉ ?4tB+!E/ԱDQU<yh#n c IL.M砯-n,K.=Ha>& I3,~nZ�����4:177G^t:Ǧ*y࠽Nj�OP}ƍߟ^XX/=𘭯VU6y����3qVOX@I<`oP_ ۭUa=|ե|Q&!/=w%1[|riAOC *,]ADiB)DQTM* nS}5yH˪QҼ6L1H-%"q~_dO04�����&''ibb;߿_< N]o|kﯱ��ev{uukYYYyω1�����O!ى+0Ƶ(!*:C!b޿nJCܢ;2.ⶩESB %-Х"9%T1u:,`Џk}1/|("Ht.,E`!(II|H`IRA1p +u\ DJJ]7-1H~\~9����g?~kooyvp9sׯΈ��1[Y^^d]#_:==}ԩS����6ww>{Pߍۮ 2TJ1ll/F},gW|tD*l>oמ6$4 8ǑܿjhlnT 袒|]MO03U0PJGzq$!&i"ɛL$ 5;iJxAF}K[JaAJO6�����<D䷶:~m~ޏ��`~{cc̷NLLg9voZ"i,?�����O>�iӇ9J^4"l+ǟ\lQM3kUTURlU7W&lCԝlI2M$S|źMJĩRT&SB@Fu0ND a?fun1I.<6 D 6"p1 J4B}$Aɂ0x/=&u6�����xR{ѣG/w:T᪪J^|?sN|��WH}v?C%fmm|UUmQg����xrV5#u5HRx!g#.H *vӴ|ZeLQ7TјM4Q?iM}&4.1>8@5FUZֆ>b% �� �IDATD7A4gd>4"%r;fⰋ?<zRKdsH>pJ4v|I%`Kږ` jyDJ%�����ISMNNSNx-..nu˗/wa?��xBt:_pxx'0-ZVWW466:77 "r���� ޝw:@k ud (i%$SS8;\9G\ڿ4[bka|ϱ4BU12C6Q(#OvX7sq)ar'XL4`-xƇ*tcr?)K�Gi$=W7qA,|? !t^c�����Xyq10\gΜ?55u+++EX~��ZY^^jvxHpݻw_����qKP&J|ۈjGQ�I2nCHqNgڑ^DՐQk)!2.aTeQIi0&ٸ CTJ!gĆNqJtn|ۋZ*R" QLs*"*2(XR a9 HaI凉lRRIcKki`?+zkm������^ vC"[[[[gxp?~ܶ_~f�S=kkkgfffejj> cznnnKD����$q[ռaCaTp$ `Kں\l7Й†�Q!Q%nۨkWy3 QD4<1.ҟCw"H<y(.hU$ۧIā$m =+yȠ0I6 xmDCbҟs~\?ϥ0LE7�����sssr˝N< `/~Ν;ND.���<eݝnqttD<6窪n<+ ����+,z\)&>/*!)?*\ EH]+~ف~<j(Ub0D M'MoQQܔ 1p꺾&|=MPhL8(]|Hh9IBj{8\zĿ ӎ[NtI`=\ݖdViN����QMMM}Snlll-..nuK.ND6Y��tpiiiO!\�S׵illlu~~D����+ĊجC4> )[m($jD$OB-.W" 0 :(輀_)wr.[Vz\PHIED1h@GcTź%4FD&䐎V2 D $4衃%uCJc33 Pɯ>Um.M�����^ yyO�3gܟڕ",?��xƬ,//J]ooZ;<\`ݻWױ�����2|Iݦ}!;>T.4|@"7Hxw?S L1:aBG!r:d"q%M]s( 8DtC݆Qٓ43.)&4+c*<j5M1vۻx<5F^+uwwez_gՕϳҗ56;%c?_ew_n_�d1V]9�����,ommma:~mۿtS?�g{tWsss["����ᩚC<I!k$w?I3t'|Rx1zu80wkm<$8i oi{4}klUr6a 4ap1F8\Ykk}xpS8:mdQH~ʙM QLIΑ$VZu>YؤJGJ#�G'l�����<v'~ѣt^rUU\xwܙt:_ˌy��9Qt~X̓kcc\UU~g����k:|ank1P!]9dX[Ht٧O&=i $(醣LHm<T7 .4/\^:43 VUe$uR7v2:Y()W}5DUd$'*(iD'6>NRv]�����jjj[N:umcc߯Xj`ouK.ND6Y~��tq޽ KKK euucccsss("X~�����$^QXD[pZ@N5n&g xIZQvYkc @lz8oqS!=vMp% *|Z%,Z,A& m&UT*q:čQ )j[tIfҦC5=mϵz5kjE)nW )}h[tg�����<ܹsWwww͛c,00\gϞ=ڕ3",?��@OgyyS~{aIw^SSSۓ_����n6 #νx0+ĈEIOd IPŸ|ɅR Js!#."bte& <L!{cZK)~͒@I4<JC,0b;J$EFQҡcc}q%JQ+L]�K�����j>,"yӬ&0\ǎv]6,?��@{LOOө�<>{{{?:77wUDR���� "2ͻY@tdnSq M n(1- TRŦ֍-TdLFy^vY~%ls1Ӵв._V [E҅(H)%I:R__$n=(ͻDU$U6z&9}HmqJ2淛E!�����/sss>z蟯}* WUUr޽{w|q/%���<RCvccc8[U-,,_D,1�����/AV&tCT?�KH_wm)qAh]IGG9tC$|!�:o`Xߔ F܀w=&".K5Ѹ 4Vn4 *U?R t!!ExKڐ<$cm4nئXaQ'!?{/ mTcaBJ~'Z3�����~ԩk_pkqqF]otDd��Ktq޽ .\nu-o2??BH����On98@^O*7 8zߥ:Dsl/\1ɜtfmr2X,; ǨT$MB_Ņp ( cE*zTCoInd!84b궔b"? d *ŀK<7 &~D51ַTI> ?@il����1o;w޼yseٳpee匈!�� \rS~[f)w^SSSۓ_���� {_O#ͻ>ElRl;1w6:,Mx&2_ ZEIx& gm/:UIȨX}]Z;9mR"/? ݠ2HVo bJ> 渴Sښ%p|Nnhg�����ZjZW^== �DZcl׮]I��e޵SSS433sõ;sssWEY~�����>ꛠީcn@S&&6۷S,S&BLo1ah Պ'FM{tsɼзa%Ί:\I?GҟGe)THm 1l&9GVL!,bT'$ǧal(_!T;Ԏ ?�z~*Z_?]�����sr~~G󵵵Oè᪪J.^wv:/<��Ǣvcccwmllw> "m����:`%U?bw}AB#dmⶇ1a{&=LCɊ+T%J54׶6d<ܘ.O0FԘuU 0PDb -FgE+9% |aݜR`J@?n`I dBL~擴ب}%965(!E&ޞ>$�SjdI ?:|Cs �����jzzN<y}}} ߿_� ⍺pҥ7U��`(v:w޻w҇aa�S׵~llE,?�����_!q޿&~PGTjėF$'ZI0!Ypls<r8?vfm2iK ,DNԎtPyZ?wvrً5@FTo7 &yJiTւRɍg$oBͅZ| ׄݹq-_a ܞ6Ǥ -i`% 7�����<1;wwߺukt�gNLL| ��,//뷵Zm0\ݫ999399 2�����@K;#ėn4.P 4 ֿ_f]@?8j)K)T?^5(:\$|bBj{ Y|\w9݃1D-+j|OxJ7h]ߎ~Ш9Ūn'I& fTh[WB$1mՏWh^ N=� *ԱAN-^ʡu����\lZl^zx ?^Z_v��<޻vzjjgffy$p˹Mt����P!wӼzo} 1eoz+Q(ĵ$&:4 Itvn>)ݥ 渨EqF!ZD{P"!Q_}J %&Z!YWt4`n-I(H|6R)\l% k_/p1&>FoA4V ׯҀc����|tmmS�UU\xܹ3ݿ$G���dVccc5UUD����F\auv9:d!L0MUBEbFt0{B:ա~ a_Qhac2IϱMFTƤ-3ls͐> PD4m%�kHZm>V^0qcqFݯ}yo?G|0wS2w7ֈgz_Y ����@_533'O>X`.\p7\tM"r��x][[{{.,--}20<u]ƮϿKDN�����Ҏ8a|EHK" MJ:W~Ȣ PP^|c՜H\K:vo<s #u:Gϳiu0/ӄr\}ጟS٤UDn+Q1N[N\¸$Qd}zHTոˤ?Q:4ƍ>qq@KQCڦi Ƕ�����x9r?{u;wpbbrY ���Y^^~]]om7xtpݻwZ__䍩o����J3!K Q 2߷fzǿ'u3�X뾇mn.!I&BmD (QFIC=]&9&9q1ZX[W"5TjB[jpN6~aҵ),hF<~O, X !fS%<!<.GbPcYT'P3 �����ϡV_zzڵ>�p?~n?Չb��jt:g&''affG ng����~^AEH&+p3BڟMiH,W |!P[DF`ok0^ӟ5ؕdaH K&ٕjn).HB!J7&i C/@{q|CC?M"ͱG6m7(?<*\F}L22�����?'uddkkk*x޹sg|Y/���<~t{{{n-3UU‡D����7 wCfف~A\tJQA5LRޡ4. ?m-"q`ŪpKb'ˀ1I;J&,hUu8eߧuԾ^(%i& [DLւӡ+R>6 O͇ H!�#CI�uhP(%01J!i>&K6�����χjff;O<y}}}>|X܁pµpҥ7U��t|ѽ{> 'euucccW%"'X~����s% IIYS!~NQ%y/S +s~>wZ ct'Hi<B%6ߋ&%'Ն12bL)]TO<I *<4䜴A}H3 +Aa4WOaX>~f`tzLT�����<9wϝ;w}{{;nݺ5Sܹs'O+W���υuv}G ׽{wNNNޘAw�����L7P{T(SY.Ёy0U d<u#F& 㮥Pd<Yt!ne2&"&a2kJqa]uI&F pId?IǴt [֒.[EWYڒQ!8Mn!6(iu s !�����q[֟Kի<l`?^Zzĭ[~��x.霙C>p\3X~����3A 5HAl] &0X! ?|9H焱MSsѹx|b::!4tW߇' ;`l PB)n.$/!m#XF)E5j&%ԉ8KkPi@'|KԼ% cVx,?:n}`�����ϐ_'`᪪J^|߿sڗw^��mooǶ/z�öqYXX,������Ϥ&!ICn,YY &<-+&V6%&V8.LC<2$נ!{1aE-.I"/>ҏ!5q^aw~K&BFtZ>V&b@}ޒZ7ݸz| _N94 $v_¹o+=E�����x&U333uɫCb`Ȗu˗/ED���Pv:/w… >XUO6`꺖=z �����4WBGUK|]|%$4Q8XhQi h" zJ!$%Ō :b4!unFp^(EնFRj"JV⮡q R#�� �IDAT &Ja̮ !hyXmׁ45ɹYߙ8M����dddϜ9s}{{oݺ5ٳN<D,?���aʕ+oV�<߯199ycjjv`����N"t Go&&<<PRVᒸPnI[]tYH8]GDe z>ZU$-Z`MS dK1C+N-^4~W0pf)&I6xSZlM$�-?%����< ^jÇqi(0\Ǐ[\vԭ[~��_NNN~=^~����xV .İ6nCq-*{ݬN>XuUFZ_SUcceQ"m'%V8z Zq 1a>nf5$mͥS^R;D!K6R/zظDOʨtq3YDB$='\jm>vxi]O)5?T;iȪs@kf)�����xLG>G WUU/;wί}E/���booǶ[/;v`"; E����,϶C & F8DY"B�iNBGC![2>pGO9~C6 'Or*c?nSʈ $3![f\Q+6jD-bVCF1M<GQGvG{t=(M_ ����T'N\]__V<6`u˗/ED���x][[w.\pUmuuG<??+"r�����x{]:A2Їr$-" RqQ"-$ >[DݥX!ߡC)mqhJ{IK7Bc[*kQQ'uQB:XRhil<z?6F5ƕ0f8!$�&%ªB@%jO)UiʭD)ÿ����<UFFF>̙3Wۣ<=`Ξ={ɓyy|��c~ʕ7uvMW8u77y)�����Or.ZS"E$H3膔hB_'$cmeIAyԱn_#udf5B&TݸJNoFʘ"f]kOkC)TaBquաaX?$-l ~.Ë_u����SխVO>|ׯ_uz~~vک[n,��!Nsvbbcy^d����Oq�$܀GgU"zǿz0f[H36DHK0'ك7cf=PIn%-1yxԕU/r%ZH!ՆF!TP1V\;"":? M% }$y)} U0z>!b`?AE&oz���� 71??###Y[[k<,`FFFŋsKty���ޞnZxرkss"����x:T#a eŘ,5 ɚXyX*[b1DtaGr44QjN`H! cqEZQ*v{"*\!Xs ~1TrpG1T&W NޗޠkYz)RU8USkS^]CIUMi�����x|ω'ÇcZZZz.]Vj��twmm޽ZZZê"ö7=zj[DN������O2 (i0DH"-(`bՉKBFآsZ*(b.gJB&g$ٟF/9lEX]ʑf93]W:Mq ! cSM'ERhGɚZ.SRq"4I(W#aߋK,/H'<0wnŸ�����$###skzQ0\ϟW˖gE,?��� oͭVWkkk_pԩoiZ�����XqWE@<@q»:Z8Aű6D撼D#-ײY \ W0*!>tFqي%\OQWaJ/1& XFHD2鍛$ܑ7}m&1\D47Ql"b sSF&>{zMt;Jz=sƒ*?HI����$yuӇk׮Md:~x=??ﶶN_ϳ���xڹǃ͛;;;777 }&����x8/0w]uq#QDCK\JXIy谌9 =SPcPU=a83q&i#2bɎqOR3`M70G40^p+7qMNz YxDU5=1| hf�����,>22Nx6pȋ/;w____#���`''[8v10d3"[ $"K?����I# (}oTGh( +fH!^5N<e`>@$A\ntlÍ/ѽ6s ``OXgq"8}U}#񡓨#|M'iM~@YĵM$QX[_;|!"CJiR?& dm, ݴbP ����x%>}{_W][__܇S!pÇ?o?���B־ݻ .aU?-a[]]GVn9�����B#&l| 6]]AH" Wh>(&If$I; hl-/F݋ lXaAbXP߬i5HR/-^$dbUDꤩRp%HbC$)R2ȭU4y)$R����?{&vw~]-/j%V`!ac% $ $!BH xLI ! s <<<~x8cMGHkk]>ڵk]珣S^�Ƒ흝5::zeƘ���x/..~lrC:::*VVVppppҥK8����m^QH#P!4bEZn$y~&'ȼ,pɘX=9Y>b#63:xbA yNy1 +7H''mPʘ&W9_G( 誚tʾv[8HZ^/9>=����N{frrO޶u:k``tbb⭛~��KKKc_{ʕCn0Yw9F;kX~����K͖mpB)>�J+Rd #U>9sJ0pLz4"C71<"fD$tcJ,ps 1ԐMRd"lB4EH9 ٸbTpiB& ٔ lL4mVȰ7)vdJo5/К����x MNNrWWן> :ڛ-����O;wNEcoo/ia1Ƙk?����ͫPA _Ei $C%@KaK?GIئ5K.Z0!6qV~k\tǩLhOVH[昆9Ň+d"iFЭD<~eqIr$UH7A<m cVk ŷȼEIXѺR4�����/˗/眜0Y''''cY~���<E?* 败W|pjj1����-Y|cA$}|B7geDІl@I)WE#9n=W-=O!/qy} ކ0Jyt-jN)ŇIM( qE3>-VY;tI,dtd+K+"|yt3JX#$6ik7E/n9_x2l"?g~Ç}dȧ# ����xhzzz422}oa=;Ƙ���x/..ӏ�tQyۗ/_'4�����xx*$?~sTfF$ dE?9c嵥K:^:8M*1PcE(%6! \ݬClK(V/C>TbDBTH$ëIeL/Y_(y†9͚e)�UV979n jF|����< LMMں 500p:11 {{{���w/--]pk\rȲ�uΝ37omk����3{.q"7`+`M" TD*x wc!1&N"|\X֤%^ae`E[ZX/]`hoX\mI$4d?x U.O$A0}uwNobIY֕FEײQնr<svu0�����|&''OVVVa2sss;_N-����ro~NaCoo/as533?1X����&6m47 U"C 2ɀD`9ME>A݇L�J,a9k.3-C*⢓`K3#jANQ+%V֊� .!+cPIֻSuwB %Yt�%/R ?>L2NTbe)e|cjΘ¹vcZޗgg~|s4>4n`H�����u O__g@ͭ|'cn���touufgg(WYӖ^_0Ɯ�����^,)TJoe *\6n6n<:l|1*{a HlF&:K̎ʒ *69-.V3sy/^Tȶ0:L7#o&$}";!,`d+I:KVɛVҐ D{IX]ekiiiK`�����>2gΜܑoa9? c̳,?���WOOO?~fff:XYY˗/G���� !  %i >-%r\r"NQ*6r?0!4*g~1'NKUZ" }iR{N3l\ %Xk<DFvűMv!𑵢5s!8c[JXR|M0:xJnKayCbDPsA}70[ �����^gu5:k``trr-~���>b^ZZ;\rruΝ7o~ضX~����EB|!m8I3Z&aTOT^U]9״!%W6L*/]ɒ @PuԆkR_4VN:!da b5Ȁh[-i͎Kja 0]#PHU#J֬b~I'c<׵=zm����fhjjWjVVVà2sss;5d[����x޽֝/:lccs7gffs����|8`I"6^/ CڪR#$3z2@"'Ndsڪb*U79$9g筐JQ4*Bly81 jdEmb9??#dL 9y4.T40&<gz!$\"ZPb誝lCK.����rm|v^#�ӵkONN>v~~17Yl���ࡹXgUӖ^_2Ɯ�����^O݈˂(Zy{ ;8oyeI^vgD&Cs i*<TUIqZc9m1"LNFHB$ƇJe!E+B+J֚"^'c0~͉fZ!B(*MTE3 i#F/!4k </X�����BOO |~Oi||K&1ϲ���@l...~_`ف:>>+++;88sʕ,JU����� ,h< YBl1w&ٞ�\?ن<!a4 Cg\Ř&d6uI|NBKQk Qi(*#$2m+2aC;uU(#^Ig( V6t!ntN⺲To3qr 9 T;㑍0yKUh�����SSSvtt O<T?~Ym���%KKKϟ+WrκsNwjױ����%:FXglEjASL\Տk64n>ԡ U&y~T#\EEY%M0$?VvcQ9Ź|nP S$.ԦECĕ/O#xf'Ld3Z [ugi'ݮ01?/aƕ6����hchjjjڳ+++/e~owwwdmmk1G,6���һ{:謍z333b����4WfHZ6JƐN &-)sy8o.ǯss6yV\tJU \E7kiTkThԧ:JAtۇK/e;J_ /�JqҘF98gY}:R@ZKtƇcɾ:dʀPk����׷zQڵk''';??Ƙ,7���ȹXw谥Wtww`zz1Y����@6olsH`cNMbM iD7ǶEUIUn%:sr9O!hxI[=i-`g.dKQΙ¨+?Z!bI0S[qEAƐXߚxI 6*쑅nTC)cU a/o 8IhbQ7�����Ξ=;~ta__/,,Lce��G'unYvyysw\򝍿[�����05eP@>@a}}٤G0hg@2a9QIhz|j<לee@::5JIܩDȖA\ˬL2Q'J7>c)1]6DBwJO62j!Tik'����P^155g ٧�Ӊ^__?36���剁9uΝ۩jcga�� �IDAT���f)1Ŋ7H)]r u-"" Y�ts D>dD]d/%ql[Q%}躹Ňp l)[#/O eOhqe(%F(Vq1UBR!E?d9ϊQ9+Q*{!-O*a|^/>x����ԯjgWVV^:\vܹ3cN���kwwǷ&&&~έ:kccc^1Y~����xykK4N[~F"[V@) }blm3%<}n樃/\9&x1 + _̬(*[J>Iۈ:dؿ4ZRb3 su1>">8c|s:iRqr||����NXYYyC^ �ӵkVONN>faaᓍ17Yl���qommLAQYÖ>o3 ����Oo+~,oNU6:1ExmR qsSyHϓك$ qbCHޫ9qy<Toן?ņ~l_L8^Bl9ZH|(ŪNWaf[J bN|}ShSFfa)i;Ia]Ļjd[����8sloo~/ZXX2Ƽ���Xxzz^m:.//qpppn����<w*ao~_>7Jj[qciUkmΆg[6ϛۊ:gM?o>5s)sL $$W߈ fc52C6<zo\Ln<e7&vʜ,bMQw7ظ L TIFY@<Nq}aQvШbi!�����OWLNN~u{{1Z__<88Y���xjƍϟn;Ywy566S>���'s70#DB A,h.*V M,ͼCC-(?wN'\N|ʦ'j> !q̤Aƈ`gw]hH)dHBT`iMp֛xF0w#0WJeCX] mɵH>sy;KU%kNc����kڳ/^e~Ν;W׿s-����>w?[+�tP^FY~����x JSȝ&V)PSC/Fpm3>P9KN6Y!!qIA!"OIrb[mB.ps.Y\0& s"Ł L,`fyAU!sz< ekS՚&9Vrd���� 322}}}k+++xVNNN>f~~5Ƙ[6���;Z[[ꃃ?( AӖ>o3. ����O kmս-F,tddxC|6BVƤ%}c8~\ky: }ayYGx:d!Ŕ)Y$ j)EpI 7څAڑM'>0.Q5n1t LXu<dJ&IA/����x;wo]|y{kk{@gicX~����'S�]^^~?kD���' IF4xHbTeCTD3i\M*bJƤ?PcXv$ bMZU[4>7eJQVD6+'|q Db'k(q}pV>. 2!Sռ|nl𯭼mNTˊ ט_Sq˦M҉v&qZڵ�����޼ys tĿ]__<88,?���=KKK_><<|]vww{vWWX`����xˀ*Wgv$XB<!{!>dæ!F>L~ɾt,HPVNH8yn`4*8y]%iM O@DP|CY 5\"#a芰#i_6"=F(6=wƖ_N2Qg7cf����SSSoj]]]}w謮.377;wܹ Ƙn���joo?loo_: tœ_y1,?����<ެ-"!bِzҊТ%!T51F97"$5_[Q1 %d@J~k&?kh11L|>mRBC:֯yQRъ\)% TN,= qu%Ln՗̖_,52"SA!"גnhSd;����=?ۻz^o�1 ���t㳳P>Ab[ZZOOOs���Ǔ>xy gg1>/ 9P|p#BsX1f<^ih![j_LFf'm4ϕ|h@i<܈&"F6g"-#C2%$i)}nDbMY]|c;)����:w]|y{{{@g={ 种1c���H?^: t]^^~֕+Wy0[�����gNӆCA )E#VBf? PKdV!)E! )L?F*&ad늍sM((Ċ1|IJ|! m+B!ZFlII)m LN/\^ᓰغDM|Bs4#U*dm&0i1Ћ<s*/IsL�����WNNN>wxx37oVu޻wY~����{&lddE:kwwgggnwuu}����U&!I$ zUa-Av+D[ q8F:se5ҢWᨠNԨMھR0#F˦]DeHfp%N0m $ԳhD$�R~IpG6A_[h9)ǒةjaa!y|����G婩wjq2׮]{ݻw766s-����Yp677/1/g���1;gfk dn P!? Mymi 'V&=* 2ЍMUՠblM uq"hl91E&xtRx9>R4/dT+$4Oԕ o ĉ*m/=E6P _[0~5jkokѭ23gi>����GIȿ]_YYz4�tG/,,s���aGo>88Z꿂x>ӿjZ���+f2b Յ(Э":3 r_bM)FH0~U�EhtC^sJklkEPFT^ -rEESYjظǶjoxy(B6$cl0q&:?e s$ IH�0LUxDCgϫ<rnůЭ(zZ}.v����<Ν;EW\+@gMLL={c���xm/..zWr3:>>˟5005<<ݍUn����<z_;0i8"<}eP$]"eL0q:<21aÜ% T\oux&Wtl~;j01:P!q乜3<uXmpr>A$=%B$ ԶK*UWϯGUyL6P����ᕓ `mm½{~���y7lxxxtnn|����+ITXM,/ bmEC`?Pll -$F6蠋Q�|hFl@KbSnL1>ay 7Y!}Ĝ,5Ň SҡІ3. }ex?ҐJڶM8iqY#><Gc�JUmYH5v.����婩wjq1׮]{ݻw׿s-����׹Q@gmnn^<::噙F3,?����<dDkyk�EaKZb|eNG?sY#ZQDU!hAv1m%7irU9?+Zh\>(}IJ8BG|p# &B٘r?B*69tt}d2t!*"fLc!0m5c[5jlkƳxn׿o~.nn�����%322򃽽+++^aP-}k1Xm����Z-kii飺7==Ƙ!����$ Hhq"PBNQ* Fqr~&C8+3 'k6",`lҨU^<r1W&UBEXܨj@I^|{4)LM)V|qjjm)r 蠌_+f97\zrIZ����:|7t@gMLLƘ����Sۋ^իDg l O����K) %"$a cP ']$gUPF gD3Gdxe-%:HSʐHIP#dIv_cgW፤ťAB8lGayc]/@\͒cm6wݲR^m(FRdP}-#WYtE~����:U ?},>Y.\ GGG���x7>7ݞoy����/JIroC G&wglȴ JDvh+sYAS0V_X@<=(4&(#'dL@I: U NNĩ:6``K8QsTrHQŪOM)"ۥ!2$id'oW9d�����6<55ZY謞sڵ߼}7cN����4?=466#un0Y[[[Ϳ cffƘgX~����PafD+ P>\~M_~[J+B ėf�ߤCtØ,MSfd.BAh\Q]@/eyy|E`/c: ika X|0 |d7BTCs.UPtHVLҔ4du<|SE�����O^࡚[:::腅cn����pG_7>;;Z< t˺7==kƘ!����:SiަhmA4LAKQ?/}"1q_qLؐs+_0!I%;?G.*! #/>'"2Y+?r1Qvj,UdJr 7ѥ'*Ds @Γ^#eh(=.9gr]kLǨ3����%/_n謉7_5Ƽ���^\\zWp:>>o^cL�����:V3hdxEem~wcϓv>Ჱf r4&x~<l\Wk^r=m@lmE~lcsIIX"!DJаqr1Nľ: "ϓrl`fWAZЭ+apmqƓtDU~N�����/WMNN.7ogUκpB}||.���{7tttti_ utt3g7�����kIBY .UAv<F@vy!ڜ?짖#oh,gڤ"ƶv萉?aJA6I}D2HȂIIXVD0ŇRѳ cٲ'kisrͭBV}.ǰ����|Y޳:jc]o߾-Ƙn����͡_gY/| ����/.'KB MhD6 QEYH"s59a`<Fo"2|".$#C6YS<xz|0h5(iDPٲĦ7_3lXI߶c)% u1ZE^RŇUdď-C)mq�N<|fӥ׫=Kϧנ М����/sܹ_r<Tsss7>jaauƘ۬6����T:Z[[߭j/?x,--}ӿfbe���aMCeYD0"wM"!% fhE$ |F֛WdTRdE7 $q6!9 _b?ƅZrB d7@>!揼dKnbccqIB2r~<v ;HT_WsHohdj9=hÐfs 5w4����K/_])Y{ݟ3??h+�����/O믺z Kt]^^~CcsE����9dPCl 1N/_6-k6VkW#3IUsъr ˦fJz]>ϣad" mظV5~۔1*JL *(RM+y/ u7ϚJ= 8O]NT}LvobF t\&~4����GՓ ?u,&Y.\~_a���7{{{xttt%:koo{{{[FFFn9sY~����֐};#} uȱ}ƠDprN�B\%^PdTp#>/lPvEm$F(tȤ"<"Tsձu$[N%}=<oy jIUZ@I&^KC6U [V-,���� OOOV,tVOOvo޾}cN����988͡ﯳ@gmmm ޿秧?hy����[o4;T7h2DvC6<۪�LЇ 0?of69*�[R5H{y;n؂hUi~SM!8a`qYh%m/ĕu7zLy ũB&hRTj~>|Rx;>0Ud5H%Gn/)����322CΝ[[^^~m^MC577w^gj���hccFgggV?�P-//_jNOO3j��� VB*ᏪpIPKĮQ�� �IDAT l'ѭ+UfUJUEӭ,qͣ*0V 5*>"2EU{|4xm$i*iݘFZ5 I%Uaڬj ײA"'%&ռɅcm%j\4���� w/]tskkX8&''zzz>{~~V����Z_u%_͑ �����^ k9TCDSTdܧl$"66^8oH٦계-qITe<طhUU,2|DSY%n0YxE_J 皏0OW.xUKU$S6IE^:u4NgB ����{|X6.\PՋGGG����7~>Kt^7<{����`6&낋 i`sDM-S@Ucm"ؑ46݄.ِtMbA?_~j{q5#8dnM$IV1b|}lU;nsVFR3(dۋHLUEhs+Vfkcz;uݱ5ϋ����eի]v7n߾}yss[1',2����4~vsssh||׹ @gmmm ޻w禧?hy����m8wj%ƘӼ=$)$#l` +/RcT7tD:.9סʛKLyix'Fŵk5&_7)c! d1}Ӈ^ $ ɱ&$TSKoiK9f(Z1E *i$iWɚb\d7H`dkWWPm/5Yvg ����0=?|ܹ8'î_p||gcn����H8Z__߮jU)C|V=;==vck ����hp(5ũeP$R \܅:%' E:dKKU@*Rv='k+(z݌ 7V;`CH#l!Q,%I0KPbTߐem/FztÆGz}qdM+qu8}[l6FRJZgd���� {.]] Y{]]]sc>���#W]zu[tV^˯Wp ����BYv:|EU@C) M$x$Ũc=*ϩR|9KMy. d &y+/bEϣ"">z]t6 EV> pgM*aZB4*AF JxBTOX!lwFq#FB/U+k>R����@{dx.^X_g���7;woqˀϟ={ X~����0n$ feui#I <|Q[Q!:iCF 㒀U?fe&Ulr\GTYdFFvd@Gd*dȣg D/AߒRKK^?VT$kހ P)Ή{kc]FMm?R~C?ٔ����3:55.k^]~yss4Ɯr ����rxx_666. yc+X~����0MD6l3b9m~ 9}eKCL# 豒U5i@%dqΘ,t˪}0^E$5Vѭ3e( V"!$iQd76|$ 2bx82PXHϩ LjxdFَ8:<#ߋ+*X_����<ΎȹsVVVV^\՟8�x_Ƙ,6����<N677qwwwlvvjW"ajڳ0\f���<lld0lRi?mVI,. ]$ᓪvjx@A7dž`Ip! (< $b\=9V:yuDWt6 +#2!J|6'4B)L$WdPéT\֕$bq*"-6_B1 Y74ǣ;���S/]�555sƘX~����x\\\zZ]^^0����2d!V)Fe}+bD@Ö)C� $ Q!'VW~\<n\Q.?*יU_d9;3i$!s:"#bQ!d^>D!&$.z/>OLʧF3T/ c 9"@KWZׯ76b oNJ U.d>4kb`����O?�謋/GFFgeeɯ����D{s謽Fѕ+W?{d���<5; q^hZTg |C5$瑁6 <ևQƨ Tͭ~ŸIDEkB8!T'RZcd"@2KTt偐FIMƣJBCLb[H(-:6U!D^|}O&ѭ(& yVucJ{���ktzzw^__>fggχQ-����mll\'vvvv߻wc^���x٢h<7Cu}-Ex_4CpJ3⊰1ZpyhV=D$pl*ioPH~um>wH8,B�E1撇3\BDS#8"&'YS+ilooB$ \Tց&|MhI+FiBF^UIЊpkȮ?V_w����uvll-Ν[Y^^d�477?s���?Z:liiZV{;1Y����O2O '2ܑ.4?wSÛK`1(|.!&&eT׊pI=Y.OsTTn:1"hK6 Y#w,(&"Eؼ$ 8IhFqeMeXEIw-Y[mTՊL:-bgd����K.moll{ tnWWgϿ����0Z\\z,Yz.--}z__cz����XY"4J4[(ȁ2Ҍ46f`K#| ş* .!3 !QчZ¹0^lP *H2b{R_丼E6ȆQÉ o0b H\xdfpqZYq֔Td%k:_(݀"+mZד}ls+Tq/ ,_����&&&vwwu…^YYprr,?����gϞ=�orNoof���<Y,Im1i9L5b�Ƽ% I=yaU&!u,(b8/hXlhr:$IJd&'Ǩ0K2.jN%2\"2<CFGHbx%x|E{s_JaI„ d-.6g\mUߣx<ljhqɶɧ����k֦@guww_}l9�����޽{?9hp8y�Ԃ1敬1���'EC~S/Md)GH8l4s~fDhnT$+�ٸ3$\d+n&'Brê)2Wy$CB1EE.k5 '4lE7dFOqy~?yEiH4X _HQ5Ƙ.k>5kMʹе|Uސ>5ղ;����ٳgW?9]) a{勋i˂����N677iwwwdvvjZ�lV{;1Ym����7,P5B I  Y$^ըx5;lW S7>#ؿ<@6owGc,6Ԕ[p?O[Pq&5ehŊ}I'?oC;}H[Dd$mIɛP"G7s'jc<#`L954b8tb`&ee@ąO^<LJB& _~?$����?44^555u(Ͽ����Z\\z,$Yz.//octt1=����%N2h+I|3 !4"+jDr hhhUT!l\ }IȽ6&,e]L9EG"d-hv*x)Ҩi+/>(&y2!v*!"2$iE7A|:"z̼%LtJy|#n&a]ķ$/r +M-j���c&&&www֭[2.\p2<<WVV.&����xqqqٳ?>>ߵ 7ϝ;E,?���ǒ Exe$i?J Pe(_@X.*\A#RyV"XP"!/8hA/m'1c|EƄÆ1]X43F̫Yp1b df˜}iXņFzEXWvp͍m(B%>᷻lֆ`ZKvm,jQjSO1əmbt덍-c+qnUW����񩩩߳־{mmm[t֙3g޾}?i����w/~ K tLMM-c^���xl4=B8]B*IpC yPPa9 ],r11K* eJh2Va<Fy}:\T~f!Ɖ�K^Ĝr*CҺVhh(+h׮?d#6<\bT�$o3gÍ tEAZb DoC06[^97(#MVHE&DkJKaxF6y���c[Ϟ=Iι? �]~߿Fc]����'߲;rwtww[YYj~12���#$>~x/MB0D/tID / O("P#*rYJ3&Q}-I#%i4R(Z겒?fF'@1Ƥ CHzU.iD,ErޤEĦnfic'F'7-]rDƏgCՎow*j_jJy ����5ϟw^7謩EQ|s=rc����x ܺq돏_1;;˿Vk61{����2\bc&@Bݿ q\awwBF# O*>?Ro+/ C(232m,!_ S&aҎPې%#ΜfY  rPD Yߢ[J+1|+*9lDi'01FG#R6fl`Ia[n:%Y9EI'u /j���W&&&޽[ns:����_\\]nY]_?<<|Y~����&"1U# 2eCG((31""$:_bR.fq8Bֵ\ڪ$آCFBM.\耎ŘnaTLBV"S4FU5LvXl~{>tPa?a:o "70[C% T* ����^jSSSg)YgΜqz֭K[[[a9�����%GGG>4::'TU,?���G !EyeLRG Y$CdDNd甡,%R/P|t̃+Eyl 2:HdXD}\(Ds+v!Kʰh+bFk`qbu%pdL( aJԬmQb|ȆEKDVguB_҆q|&Fo ����4Ύg.|s<=aׯ_/..s����<N677Ν;#W^}Gww7谕ZwcY����NC7v$ "iYJ+"86 '6,@+$cT8}ө<#gkʰJxU+\I&WzӸ"BD?i/͓\i!7HO\bI&4 Qɟ<bLvABh9e͏ yK0&l_*ugR%KaM���(xW޻wtT#=ˍ1 ,?����1rƍ?>>~,N tX^˯[!cL����K p&IYYaC&wIcIQb$GQIkI :<D#(eeJ!;;ìIrN|nGw!ri6Τ2 óU_bK o{L zv5(e31~|-{kT`EAt.aȽc$ܵH<ylyi ����xݷܺutɕ+Wsee1Y~����cs===o r/e���t&2BI}M$Kl86f d_E1`ġgT}#T `JB%f l2O#r!"B62s7[1VS.9sZPL�LG<P>|P%^\l)1a19}0)F( *2@B5i(| Չ.'VĵMB(~]J #O!t����:j|zz6u7;;[n]ƘSn����IpttK###788xM:kggg০oc^���xIȲX.BIBOXcPQTd(i0ʼnsTņ-EHHdq Y hEbFXV4XkDχ'-֯UQ֎Q%PdӉ AD8#V&LfM@vcE֦V9IEO19_l6|MI0.|:cS%˘tǴ����:؏;wnyyy9Hv?7cd����OosΕW0tLV{̻1ì?���q4!$C">h!~J/T%e1>o!?Ρm$)dЍ/PQ4\B:ɢlU }$M $X^+y-d'"0*Ōst!R -(�JWY+#F%qQ3L6iNkeՎ Wo[qi$\jAYq�� �IDATzbxn/48i8&FBP'\Kϗ(���m``CCC77660�<\w1s=cY`����O7nx3׮]Uk~-����𰅴B>qFg |v Y~҈"/ED"(!8bc̓&&N>Clp* q&ى9T!¦Ks.8#s%>h|~ƹD1ӚXa-:Kj%U>W6EQYS8ki{壱QlQޘ ڏYsϊ&}Zwlϊvqn,+Z9|ʥksj|]~^r ihކ6_���@+ouV tw,//c~����<>pMߵ���*(u2P,CQfl(?ϜL"IfB4 QܑMd;Jx-[B(01td0ݸaʲuպѼF'rfqɾ֙9w*Y|s&ٖ]XĢ1x[QZ(|ؼ# #f ;I3JZ#-`hju8- 7wи<2kn<֊/_y~'K%|Ĝd;OőBNr���k|zz>u7;;[n]y-�����<͎޶vidd_ e�:k{{'oc^���x1;*dtgQc }Jp2"(BO0F(saPKD1^@VbCC-Dd=xYm;6\#b <X-!^ 4/&ƌπ@Jh? W8qs]x_Q#N%XdCDd*BYot}='@tP\1]����|z~ܹs͵ �t?7cX{�����osΕWhtLV{̻1ì?���,1 GH YILZ802V4Xv%"Zd>#UAقamrGV95dK2߿<֦j~} gܩ'hmV֬4P(XeH@ȩM#ᜢ&S"I $!`-%~XIB$6 $k$-[^BEG/HMN$^>5����#t044XOc>{s����7nx3׮]o^ۥל;wnmllczXj��� ]YSWJA )mcŒm t^nX^I41!!Nhf4EbifvX&t1fq<`#(UTݽg}{~~Og_{g>ZK;,|p+Z]s]p}z&%pfFh&1$ ARIB|t p>s̼@>Y]`^eʃP$9iҙGVd"}1 JirI >j?ƻF6!V¸�V@1NOѹ=^wQi? \V ݟaR׿:fBLg}+ �����i333k7n{(-N:S"[������EK.?rWMOOߠl�ess&''=z)?�����|ڄ Q*zv#{tp]WjY>%D#2q�)D\aOi=BOY''!&QH͕ %ı|E9]u]'hK)aeNpNs2ҖFRLUBoBZ]Zi61cvFĸt}fOE{4Tƴҵ35f$ɦԛk�����1h4~9j[{{;;;?9/�������r޽_;}?9�ekk۷h4E)?�����Tr?BJ7U\z(cIbL$ICdjڹ"1aEYފ!>݃ZI(մjF^$U(8Ul'l)D'gI-2FM^p؅P %TQ6ѹ;V6#9Kd e\ ke 7HY3ko:oęJ\P'jQJ������/ᩩw -wE?w9VE������>m\N,,,ȑ#gu:GtI�����/g'RW]Qť�:}вHdsTSfҫ8#AzH] ߨ7>ڹ|r&$3=C^57j\rKf(W#ߒ*&I툂3יX,Y. 1F]fc:BL:<N\RyS I%a=vzcs mTט%ޡin>} �����9qķ:ujkss(@o?w…W2������xٹ{ٳJyz]������^,^BD|n>Uħ7K~E~Oy%:YFAXҊK\;S?eEaB,ip*8# (!?#Qy b&Dq޷RԍQ*7|oK)>S@"*FԭL-,kđʆ_x<NbT>R#/�����@/^qO=sG+g266vobb{WVVNoQm������'/]#G4==}rͿ>>>~رc����!I $%z0{%MFETb~G$P$5I!$rns)&<uF<.R?;>;}L \!ƉPREp]yzU_|Z$/nnD'm+$EFzZI%zT^ś\h %:Wf������3;77;ιnllLWCepp/,,իTDZT������wܻw}cOFGGQz޲s֭[shgS~�����xg]S@gRT�,]%$~0΃b%'L}r©9$\YuLN[qO\פ%zzm =J/ꫫCI<DX Uǔ"wjntϬ#]a[`T\Sweb!G +uJe�����znpppyee{CΝ;g*"?������++W ;rHeuuu(???N>C����W>_tS8:LB)c}j&1:D_T}ߧjQ*YJ ,1YCdHp8HJZPHt L0,4vc] U{ J^4T)"*dl%z!GqLؕ]ՅX\.ԥMw>/<ENof����igdd:yܹ]oZ_r…׈2�������p}yyM{vqqOjl~?g�����w%p2:KG#H,"ɁAR(%(SbIP(CD%R}髚Q9& o6\TbQBYHlK'vE;%I6w$ieڒ&w80.UD </ݏ|.Nqx-*r.z;+0Wvj>�����<ż~zzz}ww']6̍�[ʘ������<\XZZz?e�z~LLL;v(?�����Ԣ0e(D'tW$~"Nql]̅RUt3} %Թ.C<KA_d\nڨ+U'ϢU( TԥH%ZYIE H.M(;%z$W}&]%H6NQŧ{*3z=vf(P�����3;77;ιlllLs#�AW1 �������*~jrrGGGGQ�e{{[5;;""K����@Fȃ\X'9RSZDQJ,}m_ŵn/z/e_^[5APׇkjs>]}Sk{YRݱ- q-W"פPN83JjE젬\ #qvG ;Q}iaĦycԻ+%ڛ"č Uټs37ksF/}Du₺{y,;}zS+#����\^YYy�EQ?~Νo[������ౣׯ_#G=H��FQ8??N#>C����^!I#*5smnku!x|ߩuH \)rNE0*DA3)i#8 NE)IF9*#BG\Wd1:F}0j:&u)i$D/R䏚h&UplDa tsq2DceJ#8e>wL Xp3>7]�����t322'Ox;wz�Fqj}Ʌ ^#"l�������cf{= Z-i6oZ~<�����<T?-P%jQ"SC#t}?A dH5D%—A#阶 bWXRJXWO}'1]=8|E&?(Z2UV\  & 8d#cJ8 KI_,Juz (¬?7n[6�����4rڵa�266vo||WWWE������ҫbzz: [766ybbbĉ�����O!,~dqP쾢R >z�&ݤ հ*D'J%o %5qieRU:ki&v5+͢m^5Z:V&QLCI&^Ilhi-4'w (H1}i%yJCڄ1R#qsu����S:>1Ͷ!W^=c?�������{3@o>zƍ]ϥ�����OQ'PbD&tw"{v_yN]m m'y.{(D(B uG>՚rĪ)EbZbHZ+A'35a%Q({ R(XTJJ󘘢#d%F$$cA&io^L6~H2I$HQ�%OLԉ$iYVɏkߵo�����Oӿ088{"�CtayyE������xjhmmm}ȑ#I()g?����+@e7ݩWS@+;@x}WmyocI'i JHC<UVE5GNj(l^@ĖҏH}[!'kk+[ZʳJ$s6K޷BQZ1Ο Q-*EE(dŗACBhQ.}$FTJB|#be֎T}02J>x>�����FGGɓ'766Ν;}l)@oYXXjx…׊ ������xjl6|޽g?m�[Z,//qhhhujjgD�����+L}J(EH} Zc!2"BE0f;$?\ubAtj0WrI&8$Tx3_q'BP_Lqf|,؄bRAiړL166&(Cm'+%+e<$EXJ$&;+y*kĊ RBԌ78rf lc7Zu}u:W�����ESSSׯ_׮]fczؽZ^^P~�������(*_NQ�z~78q����%b~$zb%x#@ O@Iyy*J6(ZZI&DQ$ZL\WRFBX:4Q(RMNQ\ꨓeM2:Z8IIE@{}*x9ꤐ XZbSN0v<ͥN$\\&өy �����<sSl%@o |S;;;?l�������xߍWi��Wq6U\ ����QlDBr E;U!H]>J+Rȇl;NieG\Ԥ\c0Ysc%'JRZURߩʚQy+E^PLkQiݑbAmMXa;!'E(QP$yjJ@WV~Q4J|1欏8@"IZFI$�����/ ^ZYYB=!EQȹs>"r������ ׯϿwppt�<TVWWgv ����G*>CUMY;%d@)*}9 ^Bh[t>I'N࣯}9N!)!o`#㨑ʹ+F" RJǠxYKc#NHIӬO )(B"_.H(&iĦHUSsľ؍Щ(:ؤ~ b50D<=aR=jEK�����=w<yr{}}ܹǖkV/^|P~�������l6rΝg?A�zKՒfg����' [d!?{_*p\bMj&8mע1[r*^KGpbJ^E H})ڸ˘D葨BwSbѥqR>֫켯xLDXC0a!|k7/U4<$J�U1|s%ёuVt1sj9컮O����Lj/Z~O\vm-|������ɅW9u [666166so�����?Dx I _{qD# :_u )b_EHOq#t<%:g IH%x}< ]RU$tT:SnRu?)ޥ˥,Fv8LB()$d}$j$RM)%z$ODѱ7.Kf״"j_�����<5wνsss--CCC~~~ۣW^?\-������� oMLLɓ'QXrգ7o|욈|>����xL6> Rq~N*Ԥdg%: m9 �((C%9{^+a꼫4bPG(2#Meq:;O\)TY]^l_S]?D}S,'ߜS]H^ԑY'bHu![\ةUL}M)����/^Z]]|=!EQ?l6&"{�������v{kz�LQ0<A�� �IDAT???NM�����>>'@XaO"ku*J.Ug"m$g$nJ9g" DOFyϺkS| tLC]S\ܒ\ʾcN\ˉ+/, ')"ttIm<ħꤓנ-'"y؈jdNЩ (ܬ[W]9I1̡����Gɓ޹s-ϵZ7^p3Ed������@l6rΝ󋋋�jI|ϊ3l����O|{n9#^xE$ 55i)^*sU] yCJi;(&SNDW:aLN>&ڂ8)E-V:sXU ESzy.Ĵ,-h$?d&8̎5q}e1usù9 �����_455~ڵC @o76641�������WKKKK/&�w8q[(?����Mk[&!#H!!2a%P"ЋdjQNTRGiD!lmb$shxY+Mڢ?8Sh޷ԏc>0*k 6p2ENZ b&$!YIvj騜t0r.K]JQM%un�����0777ιonnaW�zАիW������G>>11'OǦ�Wq?]ϧ�����(ޗN9e>+gw%: <sW{#Pߗı޷gWb$h?$rp}H]qԒSjCK lAd:ĎD%T≉45Ki3nbDCy!D8O)nbVU_BMuv�����^1MOOॕI@(BΟ?f6٣�������׮] ǬE i����BzHvNM;7S;HP#w+\0J祐sq]KJ*uD 8؁kq} 覯QQ'ţ<#&/EWj["eŋI/R:äRɅݜjd4I;�����(P<ynmll|;w޲\zÅ >ߗ)?�������<h6osŏY�j놆V%"ϰ�����)8D=sA>w_OP"d ~JK.dd;tBDJq\8#jPh$Cbӗ:+I'9%(3Ю %RcFRG_3d,5 ZH0q5ҊޘxmMKμg^/u $�����^!xjjjڵkCl@owԩ<&"�������qiii5"峳<޲߷ cccWO8)?����+KR/)-�L(U$QI*]q6$YRJrW@j/>VFԹn"-.Cv= +m$)yLP:%lMLƌM-1r@o?AH.p訝-J%׉n~Q@ֈ&umnxwUenrKu�����S9[g(=@o s=�������se3zիWoܸӳ"����B#R}^<] pQ F5BFEؐ$G'0n@jԘi\iC.bJJ)$E:z.w'UF^ބ+q\WqEH)Ʌ'$O9L� r& 'X'fhJ$^G,D1z$5< &*ᄵuOUxz .Uq&҅}tQdmi�����<|+++O�=( 9w-//U٣�������ׯOϿgppY c֦vJ4����-Q_"J(-RpL8DU,48vtWaSrD+i,ՏO4Z%9KU1 0fSMj[ְp" TZM RI5yIHkUǛeULOV V7qRҩ-qQU#2G\գU4�����xX?tĉz݂Jg^iZsnwb�������O(7[ܹ3G�jVgggC(?����@o0rC܀8R]Q6CuF3.~O^*chA2nAR;K\ˣet8THvMdrǛ)FJm2E씈mt*KLQTZG : r38Ѣ$s;t:i.kkLb%ԉ*VdkIJm����[;;;ƍA [N>'qҥ3"!�������O kKKKjh4t!Ukkko;ySnX�����?᳇31I)+ ~%XJbI6Tg<0cfhRPo'CPq(=}F#;t̤ԔrMkѫ*1$R~N !ZĨM<>;<XtjIN<%S"*nyd7N|\>k\BMW/�����gG߿[[[c=zh4uʕ7n������SWWWO<yo?M�[]s=333E)?����FәR 7T$$.F!$'H&ëh"eKZv }jV&LVDѮNt3$u\wztGJGaMSPrEU3Qalܺ}3 g7]%k3&xwސ5k�����|uu3(+@o)BΝ;oߞZ]]}G�������sڵ3h4^^>!"=??Ed �����xBʑ<2E RMI{2*r Q$/.D$o}5&8%("ͻ/J\'IrQ 1Mũ 8#wᔡ[G#DTԞD&ydY8gҭZau{+UYp @ζI3S6,L�����^^رcrpp@Z!@9{V9/^|lQ��������7G�l~_c����eQI3==3ݐ7t瓌STLPJ6SV "O)jCsQ If*$G(y3:D#*:/#e,$:EzDFKKV)` }2\|:F4 hbT\>3i<r$=HM3o9296ެ?7*s3mNL7^ b&�����^:_999yyggoݺ5H)zӧ?q7^t錈|�������<kZ|�wkkko9uwI �����|g棼ނѕTWK k{qYTU&|ô#&XLI@Hr%?ܣhQtSxb:֥rV*"s)(qx_-+sIm\&omB/2"&aTP׮S>0Y%k 9#Tj ejڗ�����>mm4;88x-Gm+Wܸq(?�������ﭬ)@o|~lzz|)����OG@* ma~X|nt_Ah%ŵ1|7DBKXǶ+6_x\_\c[i-Yqޥܘ9gN1Q;< q4dzY*)ZqR+V4F ʼ0$Z֐LBQBHJǬ邨y#vN9;k|*u֓'Rf�����xqξ㫫f�_Ο?۷oO}S ��������/ׯXe-"," ����j.SVoQ bC'##ʀ˫1;0K!F(#H\hD r!sIbIZJF)喘3! %;lAH!'>}8|tKSTnG^&YH,K<1\#hyE_@" !l5$;,:Tz3fJe~zPZIzCXԄ̹L����Rcǎ]^[[{A}!�<4Ξ=ypp9.\xlQi�������կk={5f \l4cl�����F AI):!B" 7P^{�mL)hotōnJ?]$.wsbtfHDA*G&3qB/L-<9?P^@QWxmեtrT͠R{_91ﴅD),q#(ITɖlRQT,M{nf\'1kj[秝�����| Wvvv֭[LMM=_tiZD>D������� .]VFqw_322366 7�����x0>&3$fFʳy&Ԓ IbHJ: I HG2RI r1D@$wSdBJ g$!aũP|.tVyG]?$&Js BZUJN/>3eFR7B$Ԉ*ڸ57EX6z\kSY[MBKeiMkP&6G[Z����~ʕ+@o9zhkvvg677Gn޼�������'ѿ1>><%-W^љ$����az"%* �SHQ})8I&A ҆#I$1#[,Q( s^ /)A%;8*Y%|I+iiD1eTFt _K܇19%zM8$VP_#hꄓ*VN(ɓQ\:ECᰄJ5mtP};}3Z]:Q=o6�����DFggg񕕕WS/ϟ۷־C�������r9h4-","g)?���� -x#|vWE?/J\0A)G?u(5(uGkǕA$i5R1s̥,l%>rקP\¨ME$<1$ED0FH71(>mdrFXJRT%!.z(HU(OntJx>:G#����z'&&~W|pp@ @9{g]p "E�������^Q_]]/P)@i6v``OƻE�����PE@gIQBKKᏗ;-LW8R`/RPΐ< kuIqe9At"bJi$R$j8_t^V)kvtV]BGE(7 , K(i#yu҆7\lbIגGTDפģUͣ*yKy ͢7Z����100UO7oT�C̙3ǎK.Mȇ6�������#Z/�w_3225660�����ta,]J+RfDYG%J,ǯ)wm$H ̼7=N%Pռu"zΕdwaka_Gd)DZH΍^ZL!)t$I zP(I{.T?W4.,knyO%!FQYr\a]KRtRR|oD*|�����ëfgg?~_rIJ[?ޚy˗Goݺ �������ȷOLLU�ewwwի?<55N2����%::D=7MO51!%stl'EGn@G(SP\Y( x{cEy'Z>qqSZSK%IX):4F{jE2mytŔϑ6*(*5>(-"r(Y̢e-kl-PEnqUY'~Bo*Em_6:R7[I9D����x 95;;�˹s>xͩom?��������`ww 6޲9&"1??D,���D~NhDNbb?E g8u1t/`UrLF x]CaOT-�OJd Ƥ$di?C҉=bJ y(%"LH)%M/tƊrGHUh7S1]*G_4ٽ }JYW7Ij����xǏo{yppY/^|lQ�������ǒ^cqqj5fh4~YDN����4M*^I( gv=|I-+ d)#EbJX !& EQ.1zEc8劄uZ['ĕ)*spJISz%!iӉʓC})ǢQT%6b:&%)K.Zx7XbbK{tRj'{m#W����t100>}zkggo޼93g;v떖EÔ�������`ciiuV /�ݻ[GFFǿ#����R\J9xLQ$w@`t]tRORJ/yҊ0(´fA{Wsr b{RYԺܻ#>*) ҋB6bx<k8NRInHDN\ aBZ-*.&dvQ90abK?gV$C/q,eEzS0ݖ<եscFR^rbD:†m$�����<]jvvw\r-Ǐo̼ˣnE�������Dfsjtt&&&b޲;s_N���i{`:T'ksmMt/T[-dDGRzHַq3\%eŕ^n~]r3lՔHRNБدrv-\WRE #wljh&龜�S^* PaޔZ8Ir-Z\ct#r&)(5 bq|:txe����XNjG^6~9wܿyom?��������t{{o??<<bz"r���Sr"8GbIp<hh/@DçCȼ<]%w; (bQP)/ib>:qzDPW&&@C91tD|{9+bORJRJ)o%mPPSHnľԦ"M'N|mٛCK%I(q>js/:-e�� �IDAT,}Ɔd)a$. Qy=����O:?v͵|pp@=@9wg]xEd�������<U<D kkh`����IiBJëuvԗ cQl"I$cmp09bʋvN􅋡i YTϼ"ѫE畊]s,| B "CHRI)JD'IU8W_j]BǻND_]|^X8 ׵pI+:{_sxI|䑎w>>ݏ+:I%cmowmYVX鹕N B{I_IDY.eW����xb|ӧ4@o?v]xqFD>L�������j6^j`~~^ ^sbuu###?P>k����e$-sQk*!ٓ]Wf4YFW8qv郤קDT@J"1UƕJWT)ŵC9\TfQ~Wvχ뺟绚L7^#&umҀ':&,2µ;B1G)c38"I"H͔z)Ƨ 0Ɗ 8e<,bn$6.S-a����dF;wʕ+'Sr?u/R~��������PAٜ:qķNLLS޲;SSS[ι@���%j޺w⬰l2Ic)IN+9$)$*%.KuC:ʈ҃nGY))'5T$. <*}E%uC'+۾"e-%.YQࡄ LbfĈI#9=|퍔ďT5yidb]RLb6<Z,4IS5z����Tվ-rܹwkkka|l��������qƍwnooVM�xlnnyGE<���'o;!JӮJf1׫$odBvޛ4qY[>+'kHymєG>Aje}\ 1a.zLU|Ѓw84�MvG}J &&&uҪK^TvqjS J0Bt*KL9J-Q 2wLv><����$?11=߿_�<TΞ=qpp/^b١��������"x~}}f?X51f5h4����wVJbHJK"4g2$ >I!<L(w ypbDL RH7MEkQ"/I}0J͈B޿s1GRV{$V)CbrJ/5zTL]vBJ!ɻpyIEf(D<Z ?)͏x#鍯p.,%.z-@U7K17\%%i'r̢|�����':99n߾=᯽tҌ|�������KZoR@rbuu-###? "b����bw)#>v J|rSRD ȩ=+&~TA!aNAdu_:Po<-J\^5vKBxhIy ߹y0X4TpHѲFD$D&FGt |ÙNwlK..BԹv,F \$����<h|ݻ5.Ǐfff~zccctoo_P~��������xf9}ĉoا�ewww`ggs���cI=6΢hr"@Ģe  cI[bOQ#ѕ(At LF7NI9XDi%q#Pڨ]GDh^OR+lTvFF)E�FBq@QEIQ31ETH4T^]#lH 1RIXQ%L8�����<j4 @os͛7O{��������rrƍ>5;;lnny����<9'? 5T -xԢ#xQbJ1{qaa29|U+$ nYIP0^wXf$ .Qd)8R&)|>S6D7TGrk^abQm?qIh 1B)i%$$DE>n*71����c@=ztsuu+߿ϟhzٳg>ŋ_*";��������"ϯcooovqqEQPkl6_sȑOͽGDNP����x,6"~6EYCbto_*1Y DKPR;vR W mI$ZgF0 It\j֤dBF5fNu>(x/}m!%dVSd/Al"Nab^TͥF*r:J+#JoTT,2"Tgg]|JEK([\ssHV쎞cLvqf~����<<3_=99wo߾=NG.]jG(?��������KKKohZ777Az˽{[FFF'&&~y�����,֋{W/)9ծ=":DYAǴX"*E~ttH1znq1<MBJNHXQp B-teԷW1ƛPMR4 bu<(8s\LM!!$Y)|0Q:x&ŮCi31$Gٌ9#J$Vdtڍ`^7]%+S����5F?5^Omll޾}_R~��������xǏl@o���J!(upqH H'I%> .䍨䐐hNb硥RB,ҜsI,.&T8?b>kZtpLL98#ne"LLNqqp}Gl)lZd)&EyCIu$Q$%~hOEblNy)h )|/SYDT$LmlI%0:>31G 2FqJ7XRR"Svi|)<b0����rh#Rz/gϞCD��������(pw]r?Ϧ�S����Y>k{ $N (A)F&b3:EԱ$!JPO![bBs(STRJJX^_sjbH)CC!F},jzCc/缊)͙rc'RK!>dP$7ɩ$ vS}|8g#j  D%%Zg1m]����h?99=�=ٳkqҥ/�������� ϯ`�zL|#G>977!����9\L ( T*b_y<#$<яqkuI(.$B%äi8uv.aLNJ#I*$R7b&D<<$}E%D1$ ^a.Şj(Ay^5Y"񰊡*q}1G%LվI_h����`ppk&''۷2==7<<W.]Q~��������x V9 l@ow[YYyȕ ?����I|,Ed?umIT)% T9K_/B>{=I*CJ,i(AqU%s]I%Qptۦ Bf29ԘVQv鸔(KV_H|͋WcfST|LrO UeBuc6}xyF%˖0+Eⴴ eW�����rfvvwy?Y njrcccdoo?��������<|hyyyĉ899݁ ����(^ZދI5gU$:N/D|7o$+ZˆI+{4:bKh'}VHI}2w%qR"bw_;>vҹVw})D&`VB5mrK81dkdI z02J]uZ�)�k &m=T>sIQ+A* R`:15quC'FK+ 7Jy /y�����F_}dmmϰ �_Ν;!"l��������<ܸq綶N}6lnnϷӹ����Is\JqՇ+Y&#*ٱ\qMirg=ied󨛿ZH)qMa܎Dt}p6Q x-}/)RS$쏮T%zhЄe'ɃL\G(Q}gJL1%ř1RQTJNܸ1FRBIE1+p̣`\YKu[ 2Mب} ����O>=߿_W�x;wn3.^e"�������'߲7([l6_}ȑ?!5����z#j :Q%3s?-� K.xh@&u$>^C؁qX]*nKBZT7aԘL]=EωBIF"2'dž:gU(ә:*%v$„D!+)).əuhJ $h1N;4OK3O(@r�����\ro߾}{]xqND>F������� [,,,l�޽{nee嫎?~err?-����^+DZ^|�$IhK}EoQK((&tD]Bye?D\82-'rMw0֒To<`(sbz3Q,WE b2H%ZĤw~�Q m&Oc({I^rNv;}^UyMU<s . ����xvvv3BzHkff{7�������-//;v퓓{l<@oy9sf+)?����<toME0ރu% %C]I%dLx%`T쏊|,Mk +>eFl.*x*ClFLb::nJU|b*Q$HfܼJ1IUINLXT%z>-6D ;< d"{uLa4n11:�vOct�����F_}xmmP`/Ν݉)"l��������<ܺu緶N}nroz?K���'6I$?<ˣ">IЮ I팍iJPJEe^5̍WgؒQt$Bކ"J7,uyX rY*D'T(VŧQevK2DEY Q҉7kK-M  5a*,S+׮ck���� LNN_~_�arܹՃϸx◉s��������@x4W9rO~EDF?����6pbČACJ[~q2X#d"JOJ'Xe1޻ԗIp)E}euIr-?bWV0B/fRJ)+&z83 :]% ica Z^`LdmuXI*:G510JP 7q~~b3!)aE P ukIXߵZ�����| m|||kkk;PK2==3|ŋDc��������߿�Pw[YYǏ_v8��� _X}PUQI9>Ww>NyGJN)C0r$}&h \Im T}.y:E2!?g۔󗖋CptI"N=IQJ>U+" ފޛ|R0/^!$Ωy'|OEY6z][& GT'b*ıLJq����^J [N8qjjoll<'��������xA>l6g;ӧOQ.ŕ9sV(?����Y,r %~ԓhtn4VI!&l#iQa1%W b ^|В󔗔NNQ)DZZ EeV0S| 5Lqĕ+FĒmS+dE*uOIX=[e #jPxΩI+)PS#-����TᵵsTٳgƍ)"l��������֭[?ʕO�z˗Oȳ����>] xr3; )!JF1ZWnE'DM8s/׋#qN2<9In^K8s~/%-)WurePSĈ7UOI#, VkN FDJ 1(t'qD( x;JjwBo@=@OL؆*%hal����8}8<<߿1z̹stҟ?��������KƷM/..àlGG_Q ����/W=+1V$:tbOATt9~`1bօZ$#k!'\Oa<+=ĶV;MN#y'%KQ^(v)Tu."j>0\J06UeWQӜuzK<Zk*tD[6u�����x1 +W# ~g/.ȟP~��������/g/,,QVr=Ǐ_v8[����� ͈Ͽs5I./pNos!:#d%l+qY{Ϋė8S-S-YoH~i'm':%H/y:\JT UuU b!o ׸$h? 0KltGJpQSkTz}M,UXôTG����kggg/[N8qzz'G��������<4>8vן>}z27olmm}3gL���\;|j1*We:rO_} :Q (]։5A>k/J\/j&>gcy'Nޝ@ٵsUU*UI*UI5IuJb`L$tfZ4i !@ n C'!I1&c 1ؖTjPTT{{>W~OR;>TQ:'*n MDbCBX.U$$[t¢G!*}]e<aD%F]]cSřLx-UeA7wR2b?|���٭}�� �IDAT@333oo4~k�S\xw_[[fyȂ������mnn9O@omllyfgg-/���xYtp# R ;6hY~L&caNqD<M"E%!YHDTI#dkoTF!C�ʆB*! I.bkX*0/L@qQWH7tkyt& F !Waq+)%IIZN YU+PS wQ���Z?8qg7H.]?vڵ-������swwwz~~ݍFQ�}l���x$O %:}⾏wcKoT7a<ϫۘ(#p5!5??&j�a6Z|Mq]-7teL]qEDO^q![ n) \b2>,Dsj w8eg6|L ND#bR:/]<FF]��� 8q_<{r>WΉ������nkaaS077wY^^'On��� c%<*uuz�71u,ѬL!1YDluaծkJOS,i5d FoYqM&Q$"7HTtNN5CŌ |V0qC DZ\T%ZP_)E-BT Y[B[ JA!F [^­Ct���:^…k7n8Œ�522r455C#<X~������ř<>>z޽{[[[>11V���cP|~]4bҊmӰE>~ ѿP$ XXq%&0?6wt㰏 WJOZutЦܺH~ܰ4}+IIˉ"ꠎj% %Dlu DI.*Zߨ>u2*_clhH $Z���4>33Fׯϳ&@oŋsggg|}}[D!�������xrO qGfgg?$"/���(*~hTTJײPj/KXbmPIS`&V\LOڈ ѡQlr+ 8<0hLߐ56Y6q%J]ċ-.bH87jE|JkbnpŌ h@J\c|I8 IEmqhu5ډvKJMjJWT`���xOLLȉ'舊=.]?vڵ[?������xj4q,--}\__毊( ��\$$!1$/t7ϳjFU6ϩZK2H.aLz~q. 1I L.&_L')%gm1&JEښ@AE\I<,$ 86F}ܶFpƄЍj"q+(% w_ק1 bm'hSۈ?1xn.4���ĉ_zo~s @?~W^?b�����§annnY^^c\��甕V% MǦH&Qs&=uM.tPEtN#.$h4`!{O *-%mat]f3l2.z*b՜yQ.wwv\(BF]ͺ1Tu-.(F&kS+TlJѥ..p|/fS���Opµ7Nq�522r4==#<%������xfoqq944e{\Vvwwmrrf��OƕMt^*?<Ly%G"!HMXeȎe(ǏM[Xj^M)U!vq"fD]H j8&QjemhjqgkYm}; ڪ5%[N6!NXœ($P@y}kk #I֐��;{_>z_.^;;;g־UDr ������g?=?>q~HD^`��#,EwaQ}PGw> }J mX|ȢYt/эH\[JA2aԥX܇+ሏ]谉!|(÷@ qt*jnW)9Ǭ 1&L/_#-a /6|nm,~.q?袗]@%М��蟘ՕĿ�x]tiڵ������x=X]]w5q �}l���WP>v!-T$"uz&cՍw5.U>3!p.keeg7 F܌CT9H 6>F U7& uM2_מbt|NquY|mrL'(S?nJt sY:)}nE_?G���<[N8egϞc\^.\W^m}������;7>sss+\~o��<TBx 럫nik2 MY]K Qcj".ɠsu1ƕs<l9q.)gXOԨ.? S:kL<m[>Ą&>Fᙺ<1$4̈́EkvX)cmRFJ f:h ^[+; ���opµ7NqU9ׯ9<<e������xqqyĉ499/k}[[[:99yc``����0PU#F,Dy}kĶ₎DtغuEgʬ@1>$?T*nc7i># `LyڹVaĨ$M"MC6' S^ նH e]fu 7kTIq2TB&`HZc$i\q/wrD(]6i2U)���x7w4?~<~xo][[Vy%�������ܿ_nllNMM 郃_l6ײ���+sz߅P|,|0!b$KvoTG$J(xB%z\hLNU|I¼\Y0++3 EF&4*83264ɸ(IúB-LjRTv{o2Nl@1r27j]<ls\.%U5IcL��gHď .//_K<&.]Z|_vDdu������ŃݝFQfyyrxue�� ?/a>Jln* Er!Be$lS3Xi5Xk|Hѹ ݣT~YXN_2tH&NyՌn<1*Vtxy'`bI5 'lk+n\I+ogz}2J-F ɧQUS0ICKэLs ��3ahh/c\U.\^n+������eGGG[bрjޖ?{xxxcbb;��JKguXEtÊ><_aNݦRDwkUl8{)?vBpۤv{tt.Zd5M[Ve% gZ:$ jԀ>\Tfb -'&Ɵ@8)D$ 6YX$FqHAy�LH`upZcjgU]w;ct,_3.)���O7\paaooyI%[###G?p3<,?������N8&''XDvww677ebb���O7[I2+t=oԗU *H .tB*ЈCE(J%]ǖ0n{7N`K7jƳqn_enPy LhEB;>M?:hZUS MRnq "J„UJHĵ1!,QT' 6Jot/LDXu>qsJk1ym-oBS���V3334縊@oً/ƷC.������8<<|ĂyE,?��˦0`$.pdBWd `C#j:._/qILwuI�Lx xu6Q\e6\HETzztkIZ 3,IQb-[PDɦ%N+.IOշ aD'nTM֜fL>w!l>,S6Nk:ITju;J J(Eg)*���<'''|pppueeZV˗pڵ?������W؃oݝF2JZ^^h4l6]DFY\��µ k~?ZWDKFbdyQw0c]AEiwkQk M>uy]w$yxFpaTj J޸dn %",-~G7ڭ̪Nh+Ƀ*D []^fu]?Fhi?*6^HzBKu[��_Ǹj@o]paO]r咈|������XXX-@oޘ!��xXiZO\I H@,Q|<1K9aWõ0Khgq!X1.,l w^t٧ct';ds__eQtI*!5a,m7'.Vh. /\IQ;IJhNQ U T!S\SI8V36ԄllmD> 6U+zu���<p…v͓\%Μ9s499ׯ_?������/.. ]ݾoy/a��p}#uI [TBFU+UÆGtYDžU#TaEcKyJ+]#o1ȍs}RCI8F}:r"j7U(ť|[Y]_&EŢ:@_xM'+6{ֽٕt ݒbD/XMՎ$tZRʆJXş鲱đ(69kYI9���xbM̼ׯ_2g/^o>DI�������~frrGN<+Ʃ_|6ͫ"Z��dmٳ*2!<R=_nZ®!_`u.:OSX^RnSeUJU%]% ~9{xPB4 <ǐ")4Ii")Q NƮ.S ܥ1R%<⻰IhC1xyfY8ޭNB1AnqW\:_t�ůu5prHi\l���<1ONNʛm_.]t5׮]a������<!nll|{h<RqZ^^h4l6."gYl��'7L&&ܪgCQXDDm#'|ob,!Q5T6K,AA'WIhly#3Ѧ5HRXb]ėoI}^;׬n+*ZONl}񳦒jWZVm6ꘅVucj4bg&תTAUC݅Y@Jl��'Wmmll|1.[333;yW^$"WX~�������O qtt%.[GGGfyy3&&&~HD���(!a ytU&.^-7"*Q$<:bjQYIhVZD珊X(q6$^]kS)lXpQ!0FK"%2$.=wFtBJ$ qhh}|P"IO\ Ooh't� [5H~:��'~͛',@o<������)Ź?;55Ezkwwoss&''o?~ϲ���>cL?(oU*'La+A TG `JI } IZU|EQ6lj~]T[UK:P\II+һum] I V,l Xġka=J�ĝ0. [I6˂75|+J[\SOQm3/OΟq? !w*eՍ[Mĺߦ>���f1}mmmz.N������鲿oLMM'O>q_׳WEu,?��F Y~G@Hx?TA>>%auD$߹@(p$ˈpA7nu8,$Ҳ&Ob 7[Y0H<S[3 C"XEņ _;O]QME/LtR*mqo谦-%\MH���׎OMMfsx]tk>OD�������r׿޽{h4꟔,--]l4}e��^mV=i@ a K|0>$:+(jpq-yõ$e$UF ~)[Dk[Mz`}Һ_멊NfR@Fz%,~F"q'z8 6J|dHLuVL"U{ 'FkC1T5赨kZ)ԏq7>Ϩ&~Z70���zɓ_9667@o;v\zD ������skaa3^7??z,--}H?���\ mD%k]DiTy(P*6Q]$9 +VlMVXA6 CfM%m+q3DKx.oQ]Z:̎dzMV5iz( q}2V7H.NJ4I6Pe;Zn"Q cw uـ"a..1&r_���<vo<ҽ{~͛'YnFFFNLL|Ç������{\lmll|sO8Y~��H5tgI* U0!}`}|=B5y~[;&6SB ;?ov1EwQ[Q)l+U>*5uLpU_$2&NQ +.x&et#cq!w,@r!lDUHHJg~Qb(nU%c?{oPJÅTӣ%x6>Fvhe���6l61濯6Y]mnn~GYN �������χ_|766F 'O|ezk{{5y�� %$ `I~PA )&k)�� �IDATܿCڻzM7I21.aW3T 7`#ZBA2MU 2s"EQN=9+pd;NVtrwlq}”<k|=K9yH5{7XGI_QSD:K!c3" )xL|U! \V;Uh��;>99Wu3.]rxx<������Íowo5 ࣴ2h47;;v9:��<&-J2&Ck㲍t!UJamHDYݬ8XVRݺRe kkIOن[opx-(/{KGmWD+7.߼j:;vZE0FomX*7? m~9҅C!qjJ5,X݈鼖򵻁26$Ab9E-aL���<'Ok} ݢ(>ի'"WX~�������踵GGG_dI:::2KKK944>99#"%���x[$P4!YAgd זq2PK SnWPQz Xl#(;5:Yf[Q'3d"&~Μĸq>~֔?U ׅX]Y0FĿ|f[tP _B!rpG< 4BGM).bTOic骴oB)\tWB'Q!0V|gjs@qpE!]^��/ݻwܺukzkdd]YY9j~������ZXXX?~OOO߫�㳷wlcco ��:J:[AGZUC(qXڡÑkH|(=LIUDsdjT%V7t0z˴<'ݜb}#4P@T; qGhܚM$"Ea̽P$ͣ/ 7n|wc& *Mf^i%���x%Mgcﭮ6YYmmmvI+��������_kkk?|ɇ+nkk&"c��>vyz]hqnA K?ۻ(џz|X$m0>ː6eqmth+ 0 hF5i i5 ݺ$yNHrÅW$UC0: ׮Љ47 c[;kUEWDeI4 dkd9K7̨(R]���Q:>55SǏ_YYYkm!�xl._Ⴣ _ "wYi�������<{MͽJ[YYo4k6?��+ d2::;9LMycefyP$ .mqI]x|;cT%oXߢpJ</~\2o .V Z2<T,6_0NNp|{2߅QLCÈ iM>7kf[S|&I6IPJ0S&VX6솬Zl#U���xyN:գ_/cـޚ[g\r5"r������ɭ><<|<7Wǎ[֧~TD���Ry�?ӟDQMFѿCI'I%/pIT8 scd[M9 tlDZ6%P &Y UpEMC > vLHU8_ZBIvN!c\ t T]l oP'Zj:q*(Mf{���lo:ݻw֭[,['&&geeL-�������^Qpﱴ@o[__CCC�� ~MS8a BHJ0>͎<?˟BB4,I\.FZ w^ܪzxzxIfNJ'CBu9v6ha.M/j.ҁ }@PDn%~[U7Suڠ J#@J_4d"ɍͭjO1iMPnW0~ S���>Z333{3"[v~~Wnݺ5R��������޶6:99O~uroo̴^��Ly#]O?n[H+Cy(k&]Fd*PBC\DO\C0qJ[ڤub\DzBdkM:`\!c *hLL:!U'LBiQ [&lVDj릔'ndIQ(d61jZV4Wv QGH��e;>55Ǐ_ZYYk-z>88"r������xwܙ{{___R�Ffg��^u$3LI&wW%+/}~FPd�C2Jfwi: k]Hwp>`JV4cBl|&,j}(Q]*!a(NTtc1$ࣚh>Y5ЈU֜k4 V6Y(E_uuB���xSN}W1WL;W\y\c������Uqkqq_;??豣#թ~��@U?s ؈T Yɳ M2.࢛W_ۮGGX'3L[XpK6]7||ukq&G jn.|$Zt�!bԏWRQ6F_~iEiOX; &OԄ>|sIuLm.ݖyG7{ĉs. D% O4.[km+[\���w[n "@o><wwf������G hjjkݹsn8qX��GW�3*`ˆ$QWQ> <C/./0X<BH#B Y$kƔ8|sQ%H">߬&IkptpE@J8njG)$ KO|Ih7 0iB~u o?z4DeBS|!6QZ86:$���f_1:ò�500`֭[c-"������ MLLӧr}>yo6"z��@q]:eTlԠ,wIJI贩F -a0"DOc醓0IVҐJ .yƦkaYkl$%\T$Y4I=^PR5T'0플/^Ze7QAE&oj4&\=dru;( SeЋ)��Oǧ~fpppyyy58]|*"�������pssܹsnnn}<˳F㽳qV�� /PQ+, ^pKgդ˃)/ld@cU@%%nCkP.$\ȢHncV<Go+ *e!l3RkZ߹m5¸L qM(B!䶉V{}$ H6>bwYx%M9p^эamB*EJ)\uF���"'O7׿r�l6ȧ]r������Segqqs_xU.[GGGfiiCCCSSS?."\��<�(Y Ke>/.ӦuOZ>j*~t W8V' V8>7&rJ|]>V9@F|( %DQs6ڡōiL!wY6*ҙQ7k-QA"[:hbko} *LiIPjOQv;XĊگZ]�� +[n q}8>>ˣ".�������jv?vl͡/g�謆 ak$@dTg 1# Dج)L]Z7\f"-[]L@Erܰ֊:v3ɑcQɇ ˁ˓ rdN$ Dc:F)P&u\B)ma.hwL"nf -2Y~N5 2~9G��xL7bݵ \|/ݺuH;�������x&<xVWW&&&ӧrUf("g�'nDM(i"OԶFVs+ Tԃ1EElrt}>JUtA$Y`Jv?]9[Z/>fhH-ENB'z;w@2lIa܈L@ HS&(>Eu-*ӧ$kJ[݋ Da1ej(pb Mv5���m'~fpppyyyt<V/_充. �������Ϥ~Νssss'�lx;Edu��;0)Q[H=!'"nq!Mh?ߒ,P>~#F<\!d*JDbgi$BXog lpɃ.Ʒ5d9 |q 38WgJ)m RjS)ܵv!U6g9CrQE'\mMuB:&[M^k&LF;%t��3ԩS_3:: 6[f|ڕ+W^k,?�������<v?/^uttd<44:55c"%���Ϻ4PBJ|۹FyM}~ZD%& �@Լux!3C!RFzբi%Gg!ⱍX %EgGn[RyYQO&TIS-^< eSX� 7N`q@KhS)M+wAk;F!wާ:XiDC�� ϟ~ݟuчgϞ;ˣ".�������Kv徾/8]nݹsn8qX~��, 1Ј%VH,>͠bPKPz_hl}3&>K\1w!|K~<,|<;0z5CQF|ƍk;e@.a Gn*,rIw#(]D@D$% T*E)|+IP{}a��paffw1zk[nqߕ�������:<<ձ?}CnO޿梈��**15tNThEUtDҌCpc" A(UP&.l<BQҭ)ƸfX8B]'#lc}%/[ LamF-\ô(6&'cm¹EwcF"o]ZbT_s̩(2Vekp7MI;( u6���ϤSSStpppqeemc�=t\\XXx��������ߺsι_ c<h4;;;Ng�3UB*a_$QwF8Vz9X_BNS&o @l]E7f$W<HU%xy(D|LFXLG($D?BЌ?)t݉ЧBr%WXJ/jB1Mux<?ϴ٥f<��ةSvtttk}}7@o5;"iW\yADY~�������#,..~ /^p�<GGGfiiCCCSSS?.",4��x&$ȇUuCto?IC(n45]J'RS@j,`|Gc(cUJ9:~*Ҁ=X:{!mzb: g}(ÅA2=_ɂ, X1FG̚OOʚkאҹ m(jU45 jk.jDq)5*ʶ��x|ݻw֭[C\?ϝ;ˣ".�������еk^wY8͡/g�SϘ(LOgBCo߅{8$y(,퀊  &!LC,qF]vԄ lrƓ`["sjMR_7*}#*a0׹sAn݌MHZlk>1*Y]mj HxbiZՐ~zo4IB)Y%IyukGItk]pK\���6fff~kkk\=yw�������GW&&&ӧO?dfn=��Z.su -#6y$䡇8آu%6ٮ.3IŸ}lڶaHw+j&èfS:~: /n" k&i.#YZ2ѲəB4\ۉ>zN kIŨF.ǩi` E԰ILס v-ko5-'!rtY{��rbzzgWVV>Z[X�EQr?<88gDd�������nnnw9777}}}<lx;Ed��O#% % (7BJ<VڶoqلQ+Q"$WL5jɃ46CGf<X4xߴ&sB,ƘhEl QMWϸJŅI&sqwićGj(QEU�RQ,`c@JaBCJ|s[Iɇ|[ / ׵Jdq51��x>}FGG־zlZOrkEd�������<;xxY`қWs ��"JظT_jE2lx}h qmM+D]J޶pO 'tnX$A.ۅsן*si;}H|R:PHmp=B8:G&bX M'HG!g5lMФ%n7/[5LtZ)\9o@M(l9QP% (q?+z��xB};w~֭[C\$ϝ;c"n�������ZXXxͱc>wXpCCC3��$/\o8%JTDU4C3I谉*<,BH,z/[ XϸN!C'ao 2jmIX+ƕM& *p|f?8>bjS9T06Yİޝm\;JÄ-_ $1%n?Լ]GT@%](ZW-.��Bc{֦6@o عp�������=_[]]ޑCV譭ώsfffID�''$E]9]#nWa5LUJlFэ&Tt%=yk4':/50qn-ۢHiji $IBĝTv�� �IDATp57nI ?cB*)-Qcd7n4-ES>X}>7ky ��<NLOO'Zkxl˗/?#"6�������U_8X4ξKDYm��${, VBKWtqԇatH '_\#*(?FҠRS5,CF5 PN4U b^q<^a\lRI7yԝ b$>=G\]얉/O(dI5ڿyPL׈"1uQ:ѭ4.4ȭQudH6 UB[��x>}Ϝ9 [333[֧^r"������� ;KKK_xxxra:::2KKK:88:55"%���Oc֨؄*.>T!yB)xuEǶy7XSI$!Y:JY m/FRB1I`LY+ɺ@KձծHcC/_;]7&F9ԅǷ.TZL7gP#zx-lMDX?:9--I>mpBI&B.~!n#��W'NOO޹sGo߾}ٳgYy7�������x]YXXxرc3==Åzkל={_a�hG}F6:q,eԦQ8y[@w9JP9HTܘֺ% ǥ#Y"4Ty,&IB+m791j M*~&T夡NꔣE4MgCTL{F$LtG#n_"qNJ+qU菔;[K��� .4jy4�A;77n޼9zƍο�������{o###\2nܸ1fffD ,?��xrwb VM+H >h"0$%~&(z}pՠb}Dsmq&$&P@'$'30~S\,߅ﭚD-Na)D*,b;xV2&ajELr%iƁF']Xupb8\O~Z9ԶS>ѶV:j7���NLOO'Xk CEQ˗◈.�������x �J(wvv]"2:�W qV!4g RuС_Ll~џ:W3u8XK'+ [X?7{]>4调Q{ :R.DMƵ`6GԼvFnT( WJ&IR;ݔ7H[Tq]SJ|S:ml��葑o8sڗ4XwnZOrDd�������<.--}k?zjҧLMMc9%���=CQGF`%[*"*<bS~KgITI[U$yB0Rp\C P?zTC"$ M0QǬ]#(|]R)S|H]S#h.l$eP",N8 cNn=MxKQ K%A4qw_<`$Yk}y$Z|ɯJQI(VLr ��G>ijjjmggGn߾}Ezkllٳ߾xVD�������AW^0|cܹs7*��z$?v>#T7I4P Fp-(1k0kGQC1o*w&N%߶jB&64(Qۦa23"eE|OݰVZ^4d‡ɸPo+-(zw.ƈ[XS bU8Z^2<&o,GLT%׍(IE%ºR %pk)��i6jy ࠝw7oqs �������Zs}!z…vY~��K6yD$\HŸ 6jO] >)V`?PQㅶ $j5鲝jd"\cơ(]d xuCRqakX?>0ڐ'i}J/jAx.yvn6\Fpm"%;9(aM.bOT*p񋘜KnUhKC7n[Z$=Op"��+n``'Xk+CEQȥK◈.�������xkgg-3EQEd��*n# 4RW] ":y$tFuGuE\FAOt& rC!W:nޙ<b$όD߫s]UsqRbh}+It.aMҐJhW-,iKBX&J|�%ig)iT{@H8B-*wQoi~=ԐAQM/)%?r #��1*FFF̙3۫_~pp`Aޚj>իe�������E 7[VK>ypppezzD8���<.i=F/jq'ﭩ n0qc&HlᄄuVcE| &jWv5Dy94`!) *ţ868.b}tIzm2!ҞL'gLV-} I.uL`HhLNφV\\Ȗ?!W5FjCk$���^455u}ggo߾}zܹsccc߶xVD�������]YXXx .,@o[[[s8uW��fgUt6LTxG+N< =qq-*В |F6&Yuυftobih" lGPsM!RLW„r7[S;V^MF܆aT.+o\ pB tBUHF˛NT?ٝO|ӊx2aO# _qs+_Ofu r)9i��Tsffc޽>588hggg͛7d��������־cΝl�ݻw… 7��#iWc}@Fe׷СP!3 xoHal\(!|relj1?A%oII3:.>\ZXtĪh+T1l͏dcrWFVmItT ^;XL-7h)UڰMvG%LM|Kx ؤA%mgK3㈩ 4rn7q$>V~X}a ��k+++oѱ]�(ߟ[ZZs"r%�������%{ggk<&ׯ_)-"3��XuJ0`QI~ |DŽz.9\BI0 xq$)Ib)+>"cLrq%NZt"g3E/W"]Zb[T!T'.T˨sͨ~Տ_\wp+AݔB,*$|XF^ _t;K,n q x7@Ѫ ƘЂb%qD��>zř3gidddkmmK%[Z'_r友2�������G\CV%<88255OD8���|\񃍢_v*@r:`㆕eBUq[m 9|KʢW\%[/0*IBϾ\s=C#m2TfB St͔[ɸ׭o4Ipmj?~wuEа1qH$]hz�wu8' 䏐c{߾-rbR# =gw~&NdUCM6UGM8[��'MMM]} p@o;wpll[D=,?��������k O?mcmllƩS��PF󡎴{?p :q~"IC@D> ٛd8cNz=,;:ac:?.dlY?og3e#-#BZx$ a $U/wV!*at{!Q2W~_{ݞ_wCp1n%qT)Ltf���^foƘwOl@o =rd�������xs}3gY^n޼9tݟY7��#aճSUI2PQ<[6s@m0|M: Q�>1FUL<iCºZYMf8k2a}N)UMńcEp [0*uL},ҭ%~-$#l'~N1`% wo 8d֖mX'mI���H OOO7Ykӿ-x˗/D> �������c۷o}�O�=r(ߟ}L��0& M3D& d{um(:;Nt&|.DL/sN;;\ҰNXQcB Iv1jx̸[jt^&5 0JF; &BCl^q+nm60BUǍۛ0gtC6ifST ��(Μ9-###[kkk_zpp78jZʕ+\D��������ݥ/:88<??,;[VK\��{fުX$m!u *QgE% xįu1 DT1p7Ѝ,Sv%U{O\ŪLC+%1iJF[k)DS נbTCnQiU54D0$ ZXՐR>>RӘ"&MmKVœbGM/u+WעRͥ-)a"a_[LXd#^~]WR5X ��)SSSo;;; [gϞ=1]�������W͵׊ȧ_p6W8yW��+kuDС+'ZGEIɲ�UIHsmD|\Ј+] aq\s(:~Qb0a>ĄUsu*"IhGn_-?!`b nN4C|# Y$ՕI:( O蠋[];tM4!QHe'\<߃:TB#.c$쩛\ )Fԝ\ ���Tc޵N=2cvnn_ݸqc֭[?�������ׯ=ww9s͛7ݻS.\."ob�@&ɛR!J}7n1(-TBDf&$|T9 טRT:^pMkfҵ3cYknL]sMHicC8~:PW#n3 u+zpۄ.ȑV:2R}DVb;FsvڲFϻ:Nvji#}M1zjQ��>Fkk{�<&EQȥK_5���� peY߹-Y+uj[ґZqlc@RLa2+.8<B&"<f� &@p9< SdR c1Α[R[Wj>kꜳZ߷Vb>_[x����xhomm[nMϿĉ׀�jf;)7���XHF"\)g 'ݧݕ"kb]5sK^&5Eh!$;i]yLyJCtnTkRbʀ+JCvXqD'J 04)Ĥ8#"rGf) odE=FJYqQ9IqNT(룞f��g̙36>>Z�7[Sj����������Ǟ;oŏq\�nշ>skӿ���i6k$ŔQ~>e:ZUՋ*gBϧ}L=(?K<b'HJ.D|e|J;UaQA̫ݖ?H(]E I4PSL$;fCZr*$$h$'^A ur^{&Ĵ]T, &Kjq5ӜJWhQ5OJ}ɂjj���_0==q֭}s?@:<{?\]]t}����������<q,///9gggoq|�޽{_sӧO-��x ^1NAJS)*BJ]W]>|xu뛇pZD5SHMm8R/_Yo>[HQMبYӻbd-{2lN!J6$}8ުCF~ђ-Qz(^9N zRbKl'%}q:&菡j<���pinnDw666s�󿱹y͛?A����������x~jM;w{9Nr;w-R~��g^~O6?ŗ᫇1 |Bǭ*_M=<E܍z񭘣N#I=K!ڊqJzL & (ZT H\qI̐(e䚏1 䡦pA(h14՟|S,Gkq .I.k Eg_>i>EVU���Y̯ -}_�QQ|ܻwonuu]ι} ����������۷o'xAϴZ(ҥKpMS��g^W'Q(D)"Q#I'1B_WԽ t櫉9I+*N%HZHn+Hn/!eDZ5^t͋d_%t̉vZ*2# e!1ĻJ:J4ffWQ_\ Oh)EA5G:))NwRO'%xgJL K6KyBiMBZO;Se���Y8s̷ov7t����������շ߿qqqc3@iիoy֦97���<;Qs- |UL$U\6gUQYxIʿy?zIHSc8YPJGTf3QurLэPa')BWDR!ҥ,u%ϒČdӤ!U*J~sfkzEKUmO$E8+{Gx"垢SJ&(d),m'<Ճ��]xڭ[~q�ejj̙3߲: ����������xfZ_˽{666ٳgo>}����>Kyw>Mo]1LRJﳔ (*= &5hŤ;wchF C|M3:`c^A)HBxkrKܢNR L�SčL4ɫT*+%j钥ۢđ<D(J8i.Ŏ_(Rb%uy"ڳR1%Ż$> (@vr x=fL ���<\c]6AQ?77뛛gnݺ(?����������3אָCr͑;wss)?��G\QIhAKQTIJNr[a!)Dj&#dh$&,d�� �IDATy`I/lv)*a=YGDk$]%)e)iiq^" 'Y\v7U^KZqHl41ii'?$qxa?}4rE,Q|_ ĕRA��i̻)(˗dooonmmKs����������3O{{{vvv'N7�ejME.]sn��<$6rͫrL$ߵ(iˠHDRvI?k%5cNFL̺Hc!߻VڽI-EV(9Z¸5a_QN*ƲF2z<aE'dNJS=)^=A|pb۫L""1!{qgŰƅtɳ ]YŹN ���Oř3g; N\tineii#(?�����������dY[[{?W�?z[{_r S~��R,R'p!m~0R/FzH<$Y{ZSI#uY+!ڶWT6ZcGAgP%ia q5o[jƬ=aJ)y)D -f$+1+#̣$iTr^:1ET$#.c,ixS5V2SߕRLL���<EŋnݺOwwwÉoz9?�����������| .//nFqM޽{_uٛccc_O��,:5-xuU]\M_bKBM\|Fe`#*�ôj=xeZWZƌꪫ6S5hQD;A|~|KoKҍ k/\L2%:vO* iŗs&)',e[%6߫JضEh1"���;wڵ)_<�����������f9599ܼysdwwh4ιB��pj^JF>SWč\ywꄖMP V>T$j> 5#XA׮nG1jU3hC1ME oSO-|.r$ *ٽ\q5הR bRKy8]JuQB j^tB)̘x@fb,8cJ݃���O'gff=44􉵵7px�ʕf־9�����������I{{{wvv'Nr@i6K.}97K��PjMJNp,⍘q3HT`EOTO?E]G%<y>Z|:%D-1G WaҨEnĐtz2!FL+xчJ<Q4񙌣~Nt;JъooNTtS-{$=93���x)&&&clllk}}_.]n /9A����������eŵwܿqqq_�nW瞻:==ϝs#��—W-">&>H)MS (ܕ(T\1IkPK :P7:J͛]խ؀ݳ?9 \I1'9ml7xK1(ZbUbs,>I20eZI|x|H# &:n&$DIIJT>|"ƦZ:,qnK���<1ŋvvv~xwwwc/SSSxsιR~�����������xD\]^^~]kF&E/ʳgnϔ��ɡ. 檖H$J%KWE|3`a'գ.ŗ*IѦ万Ә j/R9jSA>EK\TɫELSIJQbh|2IW"*#kB8MBFұD&KCq+@LQeJS] >uUG_*q%~4N��ǎFs}׮]x�訟ͱ۷o4����������>wLLLRtr͑ݟj4ιB���2!b�HOM/5oL� ,"9#AAI,ZGE)̸LӧPjX )U(j_#6ڐ(#جk#'1%^e#fB3*C;)BI'x=.s#1 aQ%ݤBljKo?A ���x9=33O4sV�ʕf־9w�����������@iٹ 9�l6/EtR~��ǟjnGc>rJ|.nZ0$$+#*ռ"=QŐ&2,D\P= u?ē"b`DTfQ(WԜNGQa(&?eSWrgGq\HJ":P]l/k}^佄{B*cXe ���<966vc}}'_.]n /9A����������ŵw,,..~K�mՙ_q΍P~��/KZ RFU| %(nISK$]aRUL>IW+ J0O>WJ :.[4IF ee+uQ-urJMJ)A |!YSGϔJLQIbRK#x%"LM[$K/ #%dOuCelQMȧ��� _x…;;;?;A�WN9>D����������1cmyyvM_q٭o���7] U @z_2U_W}$_y=bD (դ_ 0%O 7 *O9(B@d씺>H;OjC7I⬙}7PHGFa"l:$etZJHCU N�֞JtQ3ݤQ)S\vt���Jh4wׯ4�Ȉ7n߾}g(?�����������<漿lN={'&&9,r͑۷o5Q~�� Q$ ~ЍJW?UG^[!#sWs!%O$n y^$U2{R rSM}])hA  |#d05 jj:E )!YDē&"2BIZYL&DԒ|1s=Fë=;QĝX9%㩨H���Jpzff=CCCh6�K'ʕ+ߟ][[/;����������� }9;776_/E.]sn��t7bEyOy$E QCJ1u钯^竊$6ؽ,#e 6gﰪ+u+IB m,\:GXٙ)I="%ݗzG,PǸǓvS8UTD=)!^E%Re/KRQ$=aSc*);mFlbRLlz��Wٳ566vc}}g_.]n /9A���������� ŵw,,,,|˹�mw7sn��rdT(Eޗ_VQEhTjNE1"}X䘝ՌJB S(UD6z\SUEM0Qk9?.${8s_/ۤd _&$q#gͧKiy%/Z> WRhJ5EEtQ`eJ {3?N~V.=y&���"7.\p͛?;)�WN9>D����������)ameev6 _VL��^ö*)Z(I>*޶4ZOqF.gK4*j+%mu䝎NN)3UyDT#HNDN1a#s _~9%:!D%nNTH85nފI)c{B;^$'&$)E\ 0g6]+&AUZNDӻ���F?^~E/###~nn_ܸqc?C����������)fķMNNsogff9>��Daw浂gԗuJ)NzxfkzoVwo(]C܎=֪"T3P&"xi8 :>PjYħ{5Jl Ąɣl7"iR'q uB{x}Py}*bSZlnbN]~}JzV馯Ԝ���<RNξghhft\鵵"������������r;;;?=177m_(97K��@'9EyI $-) :`ù:뢛Rxn+o!I&L]KJ6ޙջZ-^@ZuŪL)TZz %' }8]o[_Ve$*$>a :BKK$—RJ78dE%$o\ՕsT-ݗIW\ji%=;1��ٳsVÂv^xMι�����������1upp|z@hnuusWgff~97B��!" pP…8E(#ד⴨C:IeЇD D"A|%śR"J-Hqb+&foVsv,ZH2I$1ED`J\`*iV̪$g%nXx\aAH'f T,> &ꘕbwS <Ο{[hQ'Mj-.{$=l8��BD ߼y߹s/ϟ?>>+++s�����������vFcY/@988(׿tbbb̙3���<"oWg_6t"z^!EiiYJI%۩M'F HRIǫ^z틚oR6qpRR{ԡ_tE#$8wq]R&f!D|^a-nLLJR:tѫ%Q2 )>Ę!���τ+F#psTƯܸqc?K����������� o6&&&urr>/;;;ݺu'fff;>��Ts@|)(]ҫV0ʆO*[BR:dZG ArjNX F|L>NU+W$|ԧH % `$Pb-dfN({֕{|KbLi#1]%Du eћWKn˫KN=k,^ĩZBjKlo8 rQR}���3o~lrN+W>7l6ˇ8�����������zvvvFF�X__?_snJ��Lt^@2(l@au:bU  U*╉ٯsP|˽JI5)=qDwE]4Htb%T0W2GH7WwAnq@ⴌ!Ii"4x7DJUHHm;b Iæqb]ڳsn@\7)E'TK_3ļD[*$&:f1 :R#���&>}zj訠�eaaan^xs:�����������xI7w,,..>e`�?[]]_u΍P~��-�xT!HM;Ri#}TT?L;SZu5餺L˓Mr!F'͡Stmf=C¢X}CLjxlRݺHb:joʠďѸdJx!ڂQsFA�RISJW)'c *%Ę($*J:V#])GI.5T���a``o?ܹsE/.\?>>u+++s������������koloۢ�hZ_:11}̙H��>WJЯS@lRۺ5&{"Um+xI'Ie6A0uc&YD(ZuKu\\btq'btS)%ZZ(i™]BI۳65m*R>,f^t3k%"BT҉N1OsB>-I(* RTd���x\i4yq$e/_~۷�����������,|`mmmr}J _vvvu:33s9W)?��K]&~> %oSW$}u{E"!ë19LJl T1]%ݤZjeRJ](#i5+Vs…d, ?ӢDL>Ӕ S Kͺ}JL>đčLjb"f-e5bJHvQV_bڋK׺Ǘ$ugp)ER���1Ǜ�%ʕͬ}UQl�����������[nܯ )/@Y__?_sn��EߏWGA%k0䖚%M | EDq{J;ͩSEudrm/jf:SNBko+V +tRrl@SBZGQ5tTAb JTT\.W'!*NB*OFSH*h G'<z>0.(ǘ2^x]r)SSB2Kx-��)&''[ۏ J_n7 ov]������������/;88_\\|K�m9+;I��^1C'b$|ԽK_@lJ(exc֑7H*rGJPrIƟ\4S|δM}H=B؇7*,E^R鞤x%(#&sT/"yk MJ q])p6E%5I),::t%kRRTr蚄=ŚiAG}9yS���^"… wΝ \pӧ܇)?�����������@_i-//nunnnj̙3[ߪ8���TD7RjO mԯnQ=uH}>^aKQQ>8%'XR+1;}%wZ"V09r|hCJAfIʞHVIaKd }.དྷfTNqy|J .Ĺ OjeĩD9.M'd|mB-9|<R#���*\i4}~]�x?~;w~j�����������|`mmm̙3299y�/n񙙙 _���xfX_ %Od^UHý‰|| x^ץP|^* 1NqۈDHA(QXJ43r5pόV|ȿ)nPt23L̈́>RJ\9_LJ>Q (uV,ᇰ=i��c}ǛŮx�� �IDATkk�N$˗`oool/������������ngsss6<<X�(~o~~ss�� CyfQ+zr D )W.!INVۗA>J*D94;3G;#g=}tWJ I'IԺNFOHD1,z3^7nJ/ *iΓؑ6:p뵄=Hh)+Jqj g'ũ=9%DGPIZJ,hә7DxQ��H?pVKI>xnqiisש?�����������cڗ/,,|�m9+;I��z4AM,Ķ5U񥪅Q#u"jڇsm:V)2:7Z6y%r%**1ҙ'"E6b<Bl DɤL1PvGH 󋙮YM7-'y#TF`RM9 )hQ]Ӻ;R%+$)�� ~޹s/ϟ?8},//_p=O�����������Z+++ojoi4@988(ZֻΜ9511��}T()"1VH.W2R3׭B\.HmL.K%]R(L/EIIuU$Y^4!ƎSTz'v!Q Q!HH$A6$ IP(b^z?DŽ mDDRJ0R|7W#3GbD2$Y?i^{.YL^ohM��xyuoonn}֋oFGGۍFoܸ1vΝ_�������������H>l6ϏG_nݺ5לs_@�YYT~߬.rI$]gyJgaAȭ >JGR.hiDx+#i, IV:t'%Vd5ӡ*N+m-٦J)I*] 5Wz‽!9$āUZLH[QS|(`T`QL^OL[븇v]Ô�gY|-O@D_|.6ͯqr������������O6oFFFF�}fccc(ߝc%��$޵�ŎQs޵J%sYA%TSLC &%x!z%j!ǰ 1vK:zݮ$=hīat"* Gi$--ď tcmM P}I))5OHiICHL9.MFWP4y%ޤ;Os"ZH ѫvՃ��x&''OjQ,..ho\ZZ<������������Of>e�?[]]}컝s')?��<kt!$k05TJ~?gV䆤φJ(;M<I1HhfcWGL{{S;\.]/* :)Fp/)4ʯ҆tJC䐎R]G%e҈~rMkv>r?|z^9%L<zsMgǮ݇TQ2Jѽ wU��`ppooo/x3/ϟ?8}W///_p=O�����������jZ+++ojoâj̙3[gΜ��<D@J#Vƅy_I^ KæEIbص&[q+.WM(>J.ƌuiw\t1$P: 5x2DO.55}@!}7%SBtĎ*jɤ%X7Wchiנ֫Qbc% t$,&mV8I9%��W7YNggg7nݹs(?�����������3ΏG_nݺ5|֭��O?ڡNJ")Fk qF|= A$W@Tll<V.$=FWBgM!'o'j)*MX|%(]B8%NBz-=E|w]q#\56L=¼b[W|RHbQ&_GX^BR)%<Q06FV:@a��ib|vv YlN +W|`oob;#������������x6}Omoom4:221�/犢?v]��""ZZ$Ĕ-}C*R7sp #@|".5i78f[?AI:Q4{BQjR[ c׈ڐ)H=H.yDI)~=/Ģ~v^I!I %% RJX QRMJ'x^ h&;`6PzUђhJcR=,J=.���OΝ'O^oZhZ>x/[sĴ�����������@fS.@?inuu CCCKvΝ���ûMzyZKBx_ȶ͉I(;Ѳ$}A$xg};O铧TWv(JIk+ϳWR~C@I-D}nJ= !sW}ԐfQe[&'̄UٮAOSlJ*Jk *&1F-7R)ʴ(%7ϖ)YU��xoΟ?ckk^|0@xSjyyy9<�����������6nh4nTohZ<sķp��'鼖$.zrDC$?ty�1YIHߍeدP2J%E:eխw852FyIuG:=%>Rqbr@W8ђIy ޹%Z۰vn }]:g>؜ndFD[D_χj(J@‰{RxLY��^=77ƍ)@mk޽˔������������^l6ǿqrr[n u(?��<-'z@pB~-8_s?rBĔ<̕*ڌPd+P;I*f䢉=h3I4)6&hg`k^,G6}%D`@$Z ѩ'j-m4_XZH8)7Za<AV]%tUR`#s#cЪh*mkIQ*;��x7ٜ%@t/_V_������������_۷oF/FFFx lllsνo~~s?��<xALFU N\‚(~ IDŽ}Mic^6]A.t$Z&&u٪L#?IJ3CNHaf $v,1!"ULQM/%x*d!6uewJ):ʈR>=N}˒mK%dD1E҅8>��xR<w:uF;GGGg@YXXvtt:6?������������|4ͯo,,,|(fgg;��H0"A轷Bb!Dn)/.d�#'$[WU J( d5I5F_%ӘtV&xվ8s7KOV^ErRLI|G.R&e$Q9VדEH)yDS)į{sG&ĮYtBNLdkd`t/h>��044ߞ?~skk޽;Ĺ .;y2�����������77_�hZ۞ʋ���Ow}t~mRm k;_t K wUqW3Yܒܗpꮝ*Ϻ}WPY2a]vVr|K $aXhďJ&Ib$k"[~W&Q!ApQAgM ڢ- Ҋ*ZV*~t:I)MLǸsF NW2f sn^��fgg޸q _N:՞ׯ7�����������GȇVWW/}ùsQh{bgg燧;(?��<YbG IT=ڿ#BH7}RHC_WRr~.]T_-6Sh9¤TZ*M(qo‹ &J'\HLI)\?u!%N[Px]XmѦACJI%I$t@I2LR%m;倳)Z 2LOq*D2(IBNKnD\鹒8Խ֮��11;;[j>/{�������������lmmu7_]'>q9?q]��#!Gǀ ,H~R|+<2!ch٢+hP]ST_SD2A8nܴ}5 rE'O*Ĥ$kSڌdK }t#ktJMJ-9>dmb|xzy="I*4dIfdSh֍q<x1ESK%S#x~V^O `tu��<V NNNЩSZ/>::"*,,,\;::z[s������������^ZW7>XO�fuu/ -58Nr���8#DELpe(d+t;bX:Bxy?TzV*|XQn*Գ. Ud^Um%nTӉ0zHU§0da˯f ! sS4Lacma$fi{_H"KJC)ذ~kTtR{4Y65fT!`��< wϟλwqN�… N<+++ιP~������������x XYYyK~ufcccgϞ|��<xRAJRȕSQ*+6 ^5QbV~ȲGsrl0`]& H% % x-dJ1ZZ }4RʉG 'I/ϩ~#၊"Wi#5pƍY$ T/dN��7>hsƍ3@9uT{vvg_>/*�����������ǐ^s�7o (?��<h 4p Q>L<$H|u‰?}-ܓNUV(Jl-Y]QT}_]}ވDeTY>"i,FԴiC>+{SE竛ٔ9䝳 /42|<Ri%%;/fK L!M���588f8288._{w=jKo8������������x}nmmu_isX�e}}}9?q-R~��x޵{G#FJ@rd^&=I%tY:J7)$49p/{ڻ7{%۶zzQvJVJpP"8^J*I7D'{ NtqtH)Ŭ?YK5ajV#Ir I+*%<z]1Ƈ >H^���~xttZ⣣`�xD\|yuKKK_ۦ������������qjjr7yhhF=ι���+k P× }0PJ^PHko y#6B$%<$xs. &Z>9NXk)$9K_1,EU٬08U.QSRI n:J&ɔ )"*%<4TXWi]rIث[4W7y;: |6H��sĉ/9w Qr2==}oddKfs������������v$@9<<,;6Ϟ=��?u"R$"&Rz rJ"g8_t% .{ZwWݣwY<D߯zAT%|(bjjғU 'q\$ыd*JLQq'S޿b=GEtˇagEؘDoVV0Z|ޒR)t[ʣ2O��?h4>~޸q /NjS~������������xӧOݹsq�eww͛7ŋ7s_H�x!D&X` #q وS@쑖&>u)(110lRbKE\s ČUG>Iɨ>1CqE:$xĥt(zd糂Y#FtI\n#ldz/H":%6i%z-Rs$LY>RD&7jĘxv&&���D5WSw288._{w=jk8������������xsmmmMHk׮u[��/D߯1/7P< #A`^ަdQZ�)zAYKF^K"k# a%YhYC^"k d&SV5R-RbI.:"FI"ZѲTEDF2nBJVRo|eZP{KE|/)Cuz#Fa$y��ϝ;OGGG5/~Aj �ō---}snZ�����������3W,,,|(xU ߬O4tΝ���QLҾsGxoֲY$.M+-:ĻNp#@8E/M(1:;#DUUM` k3I$g[C{Ġ `! TBxKa%O&*2Q(˺C'}Q kVbGr_l$7ʢYNYwN&8F/EZ=Ih.i5W��Gۧu/FGGs������������Ani~~�@9<<,6'''G ��r#QJ Q&%Rؔ!sDtʰ!x/bƔd)KcD /H1UGQPyܫI\z ubJuo$[$%dD"OBJa6LӾsƴ/-a/MYHmÔjPRչSH Icbt j,JIc��5F㇇9N]˩S333?1/)?������������ӧsQ{b{{_xqSD�GB7B)@": &QD'!,p8_1dG5$RT|֣ʺu�Nt>NJI;J}K;hX1M('EW9ET;BQJ~?QÅ2Y$&(K6N,HQ+g1DSp/5O+( ý̬T4|[.^R:WR8)6mkLOiW��όFG�� �IDATm6�epp]|w޽{~}}:#�������������Hܹs&fggqdd/׮];9H�WĉHHP!>)( ԏ2I%Xmzr1)bߢΩvE7CԸE8y]q/U)$5qj]۽0 >JL(ɯB'bv6ۤs[@z8z %o\X))A4(I131$xSWt~SL@((Ij~z楔a>\\l%_P��2855#ך=x.>:::zۜs������������XZ.,,|(x ߬O4tΝ���P/w=*@6`EU5.rM|N!^%xD{:$\)/ѩJ)gi0i cj8]!qϝDAHh 5+E ӕQzf _N%Q>Q[ I4I$;5!ژ5W0:ҍ/ BM۟3&*4vBr �� ݩo�ezz[^^n8>J������������^2WVVn477A�al6>66599}k���6VW萋\SjE|;݂0r<X)dz*d/=Q%KJ)'%q彟[g3F1w`Jbm}R)Y160]!×)!6$@AnqA]-d.à(H~KRv1D&]8zڇ~xcGQ VR+SUjBr ��|Fh|_mnnSJ266֞鍍{{{������������||xmmmԩS_s{mooŋ7EoR~��DG%8# PIW @%u%oHC97H2l)^lB%O4"&[";JHSNaRg' Tt.9YꦍU`- X'&_13z C[qHE|6G|wQ:{nO KCDRńɂyӵb#O��S3h4~{``f =ι#�������������3ݻxƍy@I˵kz:P~��xو&E5MŤdrH7ߝOLO+gȮP!Iaf RID\UI+IfI}+E޶jC:(>IP97*RELP 8_JJ!C& RLrBJIb7!EI&1*|fQ+f>O{kK)1G0%øb|%���fE<Ok�xt,..^66������������x9X__م1|�yի^FιT��BԽ(_IvЩ%Φf:|F`zc^'5ڹ3ᣚ3 E5{ |Qһf|t.az1$LO_Wށv[1:p# /)%&+ SOlT)qc;5)$^JB RK)eIyդXAP��sĉwLMMmmnn/{{{C�1==?22///7s�������������+++nxҥ _>OJs}&��S+_/o!9ljJJ/z<iE'e'˹!lwTII&CT=Rt;]Wچap+}e&MIЗS4 J ^AT Q$KNk' yM#>ux&$|ɑ PxP ".=&gϵ(s ��߳9^ �Omllᅴb������������^:s鯞ڧ�ewwwhkk.^500(?��<CE?DEzZD */9‡vܒ'bh9 3:եNa Uw#$$7)L (&e.Dʒ +f6i§DXW$}e%'$ q3wy[1Qnfw2Yz )*$N_ k)RLLvS2>.P RN0b$-dH��"Fh( @t/_~orq�������������w3333??22�/׮]xS��C_胨"ٛr!%vCn <Y#{݂R7fU%dd6GPtJ6An CE O֢д9 §T-k$#>l$kBRy]%bhĴ˓pV^̀<Z/#e *_cs<jxRƧ`�3ԏ70�x\|yttڥ/tPc������������džߟ]XXxQ#�<VWW_W;M�X{Pr?կTzմ퍠9yJ6j%Bl=>>{2#h(^ )$WIjS_YRV9I .HG]tT`Hڥc.P$\W);I vꡓ#m!kL#HTM:H-)GY:jhى%)TD/M��D Q2==?22Υ9(?������������coo�'?IY[[P|�3 &B 5#Ǔď#pɓC!HL2)�4OP^�N|S1I*$;H,QXΤbEgOpQ܈4~|2nԑ <gO&~Po#.P);Mtd#,&'ڄ-< .䤔C# S3HJ*k \х��p5Fjsssz�Onllᅦ������������<1<:sɯ�^xqk``oS~��7x&Ce:J B)WKbbK>T.>NTrN,N w,$2/bLR+R*vG:$0zpEM/c@R'H0V{I}/͝)z$melYR] SA9J(%T^e2LP))$K�gFm6�/=ι#�������������_3?722#/׮]xs �x񮛜P^*R3OJHi'F%5y,C9uI4s,MѓTjh{#J,QnZ,&EE}2KBZFS0Ƃ)F$D`%Hv`YLpUx-8Q'6$%C'5FDK#J[ <q(趽+`2V'n#؈)#;��;SSS?6::l6'@|rKKK_ۡ�������������O<_?~u0@Y]]WU>77os�DJ Qw-S}�^W.AJ C, d3q2}qGںGT $*"麤k^)Ez'EϬɦ+ԏ<"!դFl}T%y\5z/'2ҋ1sz (}1$ǡXk/i;) eYy}YKUeeeV/3JMP(AƲ@3ۃb0,2x -4 ,6Pr#UU|YgUגKUew&޻}ެVK]k:󽻜;ZMp~48?Yho#Y_aH��x8qNLLlomm}��<yk^Z7|������������<ul---}A5f3glNLL�O۴+␿GV^k!:d&3Hא΁?HBK9*+ 8N1!8x8DHF^JŠI%#wEۙ 5,"#!ȔX0>r2bC:Nl7a #; (D`#,I3N(j(m&qPdLd8_W6,C��<mvvv[[[!�zӧ[\[[;s޽_�������������O=Y^^022&''Ynr큭ޮjo��uCPGVIP"nBD$[PAzg6[ qxH_RJ7$ft~\anq>C:*6WRIjU$d"%F%:ͣ"FwTe lj\NRyBJ4CrlFㄵtj|h?R/KaW }DFDPm.9Mo0��3>77Zׯ-}}}ŋswcX������������g_<;33CCC-Z�xvM56(=g\"ti#/ٓ8&mUy &:ewRRվ Crn#H*^KHWgY㟴&sεYQT֊ QRGbb q#\O ⻵N@r븊rSL^ oC c!-B$I7{RrTSƎN��xZ-Dsҥ壣Ͼvڛ17?������������3˃oߟY\\pV+gPm��O)Ndm4bmȲ7߅AѶL"/%"%Y71;+=lcEIfd$҃kcs9"-ŏȪb4)C2b3 6Ko/7a}j5m)f;FL1cX@c`#&NXH6A**V.Z~bapSK|4JIkfcc>6+ ��xw�… {'OW.c^�������������PVfSNmNLL1%��x 0jq.r/']6&w6OQ#H[-4₤PJHFyL۪dK_mwR)Q5QȱeFūJQ63v*b1kBBɺRLPkQ%̣B RJщ%r̡ič<nlQLa]u+<F΄r��^7;;su-On{~������������1|h ^#�{MMMm}�xFIBxE~\%@8s_}:K*\ [~P ߋN *RP[dHbIiϣN>LKLLXi+^n1YZa<ϰOq V5;7g:,23NIy A8pakhkdbeL|hQ, 0|̎ZmmyZNkeOD)YSj�'񹹹j^~5'@o0/^;w&־s�������������K+[[[c.\K<�0g;??19 �tG<er;PuTF1LOSORl<R~7 J6%IhGŻqjYB:V坋t.a&Qq2z.p"$=lґRj6,Ahq"Aĉ{ETJIrXm5:tD:zb="jxV_.erϧXѿk!%R^t��x"顡Z�#ҥK<k׮sj������������ݝY\\pVT@Y^^1� TOEpH43TFx/U8bȅߵ ueŕJ@ҫ ^X7Dzi? Vl "0D䔢Q1#0N ķS6ZD"TTDCғTڊ J|VD~>.o`*RY2+B HF 6r<J% #߿z֊6ݬ]٦m��dppǷkU-.\W^]0Ƽ@������������3dkii鍭V )&@o9<<fN<cX�'%$Ġ5bvJKe>m x?AW(/R៵߿Mgb}ۊG!TB0Ga P/i ͅdt^#Vm0^UZXl$(Gs=+j["keCGVmdHNN8e8Qi3LaC�ǝ^9883@omMOO�������������0m4s411GqzݻwV__(?�H/1RH 0BV w`vdPFHf΂md.ΪTt:li ;U-! /9O1DWƭ,hᄐt&`uBKR\ĎQiEJqb1J |3R("&%-('%"WW4DMJ)5��?sssj~% /έ[&׿s�������������booWƦ~ddEz٣Ͽ`y�<9$NRO\T JI |K^-r`NBxH*N}v(G!#LII )&ҤaD" (| bTSsyjHf&M0g'=Wb\abRq]XЅpa2^cR:)0V\+-�Zf8|vSOݪ`bz ��< LNN/iZ\ti}ڵ/5ܤ�������������#jUbY/cF?�cCl*8W4QXI#ӷ cw"2Rh6eK!T !CK VӖP-֫;"9%]+Tᢀ$ [#ӕ}UBHQE+đ0EwzA qr( Hw~EI}ʊ|DŽTkFSwD7q\2%H6ra EMs]K��044Ο??2�… {_yc �������������^%vjް"�Cl6vԩ͉5��'=CB1ADډ8*SêR/He+J 8%%J"|3UBJjޤ}i $o~3JE'<=W^<T C,vLIjC*k@]bujyƪiUHsgX8ٌȡ"%LsL;��7OϰV�ett533S<x7������������DŽ67NMM(�ݻ[[[?899=00�i]!*IB88/)q}ZjCmȹt뢏}b g/Y�� �IDAT;Qr Dr >Cl˖qN3ڇYgY&`l$:FT=2t2|ڤO<R`nįQQҏKʪ %1A.N;8>A'rxqEi-OZ*��x@V/2�e``\xwnݺ5Ƙ#��������������7~uccc… ?722b�zf?vo_0<O�':S?3*p%T4H$!Rz%.y7`=)NF'yl(adKIYI>G:ml"e ̒Σ8R$M1Fwb: D/!Do )Ȩ\y֑B:܄ݤ1 HӃkaHj\_bD-''A3옅�Ww |I*/.�<R.]xg]vK16�������������<<X]]ݩj5x^1f� 0(A$UIY@D$EV#Ed8`l~2RlwI*ީlZz_]D#WDHOIe+:I(*e)CEgBSB~B"Xo|B3!8'pAٿMZIde*K*"o2s��CCCa|||{ss;Y2;;W^]4|������������қZVX<rxxhN:>11cƘ>��ùXM[Xp?%2%R$$.nQ /%펤bT"RHc*ߏ}RNVxl Ju8='‰K&VPTTIRUO.qj "ɎY_ #t d8qjV%'Βχ!Tt}i)B)~C鎔b٢��OwvvN�ett555ׯ_?{xx[�������������p>h4CCC055bwlmm}WR~�W`D'qCRЈT\|gZQwZ+)^jvEz"|Rbw&goὅ$:&E ׬z> XoxoT9A=)(6XE1|P*yd.&b;rTA( F K0Nl #!$Oy9ScNc ��߭j~"-ŋs֭񍍍3�������������𴰿kci�esssf~~Ƙ)?�@ED<8oͤq~*I 39B}T0ڎ+DʌlMxFi!6B8J<Igaկ|εc J>X?1 5+RʻJŚ*D)f%%DkDx;~HLS1A wMb}MDbS<IK" ��^%&''fhhʛ[P1.]j<x೮]Ƙ[�������������RcwwwjqqCZ?_ �^3F�zG#ŧqp~'yat!X Z kwC!%q b.A0ad.D/&H*<L<IHrbHƆ0ruB�$Z Nl,s&릑HHfne J7L $ ωaH 'w.\ !&I:MFR��=ahh|~?U-իW;iE�������������Vfe###?nc ��=NRC@ynxD濕wwx_4y%'\y;qegrxP%Bp~r.y(i̊L=7B k~K-̱6 ~.$˗DCD!q61b!q2JJIRH8Q:I)0=��yggg4-~�������������Q>h4855&�-[[[755sĉ?K�1Z\=ʊ MUHkC.4uN?ZB%R0Ƅ|RXs(JI!TE)9E<\a҂W;"}9W1߬t]IL*iN֛K2R$ذ*eη.>ZXZڕJ,LIܸ^qq &RNkuDb%lI*�WzZ#ׯ__�]xoݺ5Ƙ#��������������u~uccc… ?722zk666ܿ7?ay��xgEfP(B.穈 'pDRKJM' *4<CS 7%IE,VU%BD[-9@(A.EH(qA Tm629ذ2^fZՆdjR$8eHC!bJ]&LJ3Ij1^�όɟ\m6onZ�<._|k׮s*�������������(~j�zkj{1c�#x"$5C'gmt#Կ5墊Py&~ Kxq_iWsb+ZRI%X+U:d1iFByNFVEq-Cltu萒QT\*~)"$RJRRh=TN({L<%uuTY'7 v>haXO'4c��^6CCC8>>>*[}+W.c>A�������������қZV �tfFFF6&&&~y#�W䀼-{=B) &~!2( Z ʁvi" Eᴂ܊ʆsT&Fs;k ǙYU\ޑYBK*L/ )̊,RTNK0(E8WH):2J&| +?N%PR)0bʔPdfKLI(I>N6s|>f ��iks2g϶~|eee}�������������eFQ=J[vwwwrrrĉ_M�>sp< ZWǍ<o}WDJAV!!<b@q)ÊIZKwyHwJVYsҨmΒ-Y^B+# W^$gSus<TxYnY9lQ394F)Kģbkl14|^Yc $V��`bnnZ폯_H�zKxo?Pc��������������Tw(@o<s_4Ƽ�|T !8coYD*)6핎ߋ̿s6OV]% D$ZqBPzBZLm<P~S),T_cikD4 YVB~RtM wyRJRԊTTJ;6YiR-qQsr 'HK^v``qb£ɟ'kJ��^\]YYN&-.]vxxܵkjE�������������^cwwwjqqk�zLټ\>Vo��/ a'!5;8e&$<$wE B. 1*UFgıYL䗮\RV"b89gY^E!dIkNXy#IL2&.4vRdMV&jI-VjH&N@N|B+L+(zn0He1RMe cÖw+��$tܹ888b�ennn__ߗ_z1 �������������x$,--}Qz2%-Xn|n� CDa!?ԝ4Т=g3?7T-' ̸OFR˰OՀ ;ժC}?:+/[1ߪD D*~2IYqBJ"-Mlj #l℁:Y8zމXqv; 0YgJJ+q! 趸~Î.g�K٥ƍ^Y�x9{lkrrVVVFG}�������������zOMMQr޲ۿ=;'O�) +LTj2Ctt!$I""*R(R&OMULvR3^ PpfұϜ*)ʼnpXZAarίV(nJJ "SJB6-SI+G"ܥ!)(gLP@S%ϗr)&Xa$U$�� &>hׯ/P8/mnn1��������������1633(?@o<s޽U?iy-�x8y:I~d;#2 %ӜϩR/lP+ПKTL4(JH D3 Z#m2qKRulE|2M~!H)r5#ICW#͓1)E&|K̒dbuqq(ҏ"S"xM+`C"gGPdΕw@m�)0055+++_蜫3�<J.]t𹥥/7ܡ��������������*־swwwjqqk�zLټ\>Vo��8iiX`"dL!,HQx8KT))-$T4(ju)+jjِK<㥔8WeܘdFfɈd!Pd%$](dPD⽬愈lCV[B6q^)rTkT"-:$5;_XL��0fdd/;wngcc( @o֫Ws�������������<V,--}Qz2K[Zm6o٘{7�|=|JI1VꥒP\)?εHqB HwA\ c!+Tw#lɨ86DCUT xFet3s雬#d$٥02;B*IM[|:dk0d8IYpc"%rh6IVID^$X)( HW��8o]'7n8׌MNNo���������������5o4 _7==RͿ955uɓ�t[Ӷƴz; ţ+ڻlF?Sq+t'^C蒋*Y7Q%aiE\( N' gj #FXcЕTKLS!S RMb\da%yz%,ZprU93;"LGm†ŵr9a#CN1bhרٸJ76gO(`h+J:V'SmC��<[L}Zׯ__`zK[\\|߭[mnn1��������������<SSS<u[666N߻w_ƘR~�"$#aخa];iUe /eR8u]0GB='6dFD;^OPG6ݡj9 imD|/ 8Y0T̗cp>%)VBLJI֎ ~F}XzF%. bXOURНdIx{Ҹ" �3ɩ\YYYBT1.]rxxҗcP�������������'{jIG@ټX>V?`�L#$ [XdE">c{7@ElpTRJUKl<Rs\sU WC<Yz!w! [6Brܢ#q8WLE+U! X&r՚h}QRm.ω2'857W o@#vbX> 3*7%BIu#)z(I()▤.�go>wƷ�ennNe_zcP~�������������/nZ[\\l�jf%###kSSS?m\�<{wfߘ�HQŴ6.*^)>!HùrCe""J�L]OUC*T"[J)Ŋmm@(I9~>!)tT[0B*`7b1}!AR&# JGLKԟn%K9Ɋ+$K"`&�x/ݸq[FGG&&&~deel�������������T񥥥?755u%-4:�Vyp,,\ *^z?8 6ۯ:Lċ¹6DEJ"BR%戮ARGe[ e`*E>ZE%sL)DѰ�AJX<AŨա7߃wܜ؛П\]WN٪]hVҚdAdqʺ]!m�� 絵y8q-..֭[綶vWw��������������xZ988WcԩSG,4@o>c^GY bQ28r9o9o.dwˢ$C. ouQluEIΜ +5YFC||<$g-<fƸvFS<0R%Uȋ2 G(*$=)E݅ ͸X$Ąlh˩DUtJ6nEhJDOEbJgJD1h*!f2�tsrzzWqY\|߿vc�������������Lq7޽;{ZtL�-kG?`�Th"?cpŠQܶU\<QR <e)X z|$4t2$NTS2i=XݣU'CrJK'H$.1 #bĢwl" $!Y&)wRH)5WSJX~~ҿL u2R5>dmXm>�S̩S�ennNe_|ʕ1(?�������������3ͥ/nZ[\\l<�5V.//;1,�<tERQ$’p}WZ)+θ{VT[e%bCPrKHY!uE^c,*c_rE%*I3R(|]kQJfk瞈=&` (D䔊0y߽i$:%'E^BQ-gŤ3o9Wd#*HVݒ\'}bQA"Dj�>… wG7oa]z]YY9n�������������KKK'Oکmll|緇H<oQAPqBax?qA/ 0-GR;mb14tD+srVl쩤$mI,UZwڦYo e8rV߻RM+.j慑\:׬qYGWF|vyшJ$yC")ޱ�� �IDAT|Vė/{En,1㬷XN]cE,19@Ntbb{V'o+��<=Lgϫu8q-..͛677��������������">u-ۧ5c(?�<-tBBxF=`~SM=/XSWX៳Y/MuII A!M%B/HØᯩlM?Ɲ3iG1s$yGA[N'cInZ8N)dYDŽ6cZ t?dH-DٹMROrjU2\q/Y:ZOK&߉gЖcJ\2qF~[K>'7_1L5��O 'ɓ'WqΥ�˗/nC�������������Shcc޽;Zv);�xD,j5ƌSg�x5gsG#*wxV&^v i%A%n*u+\~|jh_܏|%Qͬȋq"#.ExHS1)W©W\:Rd\k# 2fcCqc\L|8DRFH-_" Ejd]YxQS.֢25R�8N:?moll{�enn#|ѕ+W3\��������������iphjvqqAzKղfSSS4 �G#$PؾN_x1ED ƷMRexy?kEFoQ|pyS4"W3F;%bHFH} BeXK$IYVɜsmc}(a  ߢ,ɢw\qlšR߷UryJJQEم9IņŌ{QSj? mCXJ-6BhKG�<| w?o޼9/+++g1O�������������œ'O~] [666sbbbgpp)?�<G]HD켓b]T ;g3-HPuO)'NX 1luѲ^Ik<v&g$Zs|jEI;~OOoT"_)YUyJ '=1ΰQ@RƆƆUOQ!0V6bē?&c⼌ �0377ﭵ:Dz�'Nw߼y3��������������+ǽ{~cmmmljjN:uDiz֩_fy' zbNwQ^V0 e8I8:$2+ی"Y<SJD8_L tcŕ~c01@D Mf}«p]A%+D E4e,VH^QVr+%/1y%0V\tZbutDN\ $r9%}9V8asIk-&:ऎ0HN'ӿx啕?휫_[�x\|O߿yii+1w(6��������������<B666ݻ @YYYYjk�D|jQp>uoD]v % ,}!6: m'U|9"+a"5%xF_W%Jd/뙄QϤq^pV*,HVHI#T .6Fӄ(v]49dH(lctRQ┸^:2IcU5I%!]f8O4bMH<1A)QܴE)/�ǘӧOܻw-z1MW\ys�������������@h4rxxE�=jf1 � GALl +;ߥ>9W[d&0bG#*|�!"Џ5[s&dX5T5}vCHBG, .nLH�qc%֑((q#ıHTZ[? 9G!kM;QdRL|D6VLх"8QaX%rMbT�<| wś7oH�ellhbb41ċ(?��������������ti``࿟B�w?~gxx(?�<0-Xiwd$ķX VuQN+jᬱ.@!=xyA$83p*ŷut]]KDJG' ׎are'>#SBHBl0x{VGa3/{dGbmO!DyF =\[CTVUC,G9oMmkqxQ��3sssZGs,�@o9q[\\|͛7nmm]cL%��������������ǁs?y̙#looz0Ƽ-dqߨAI>E!|))WJ V�y΁ /2Rw ,pOmCv6D؅J[C"J+Ajq@׳$dʼnrza% ,kmˆ^"I!> ZiɅoLbKEu$mEiG9BS\O3qѮsUvW7\h^Gqtc5jR=�8przz<yryeeO;0�z˗K�������������1hssn߾=~Nf9_>R3Aq'Ȕ|?}EW4b|rHqN?8!/DyE&p*A  aȾ ЃxbQNJJ9%VA\/S\wF)-Ǥ" GѪYhEsfM7M9u"JNXVTģQ1wˆ~Br!G9&tdУb3Ɇ̿éSulll{}}ݻw-z1MW\yӠ��������������ph𵋋X0jl|1,�tgy8P #Fk$p"D") Q&<ETPD -9!T \V{$$>|BB#> jk]A&6ˌQsI!("({XEL"v`:9Ӹ`"L 5ftT] A<M) Mݓ Yd>1)>��{…ݻw͛#,�@o;fs!��������������O /,--];, @o[__ }#W#tؿ8{Q&EJb12T"ƅ3YGB1*"Tca _RLWClcE@PHcw^)l]IeK Rq$΅*Vn g0FDJy!W+;BdscLE #Ǜ*^hK"^I|-)r]DdOI/K��=b^kQtr 7o<#~��������������<<x&''̙3G,%@o>+zay=WD(ND_ Hb <oL!?([H! $؊1Z'#v-cRDhV7U.4$T; ^+$\&Ɋ %L82WƷ[e"KqHH.>\%l�߽ ։eKQo+T�!&zQW)t2Ubd:'nbن=f/��<BNNOOfS9Ic._'߿h4K�������������)hsso߾}~aaMn�x4Zc&(6�+B..ᜐFLHR )=I"|JKɓEr \ b'qxÕTL2>[XNIAɺ?bco71N"_ށO.ϙxI1fl1(%/VV$h: &Z.W? &%)"6Nܧ$>CZH9 &.Za)IS)e%۳zȲ?+bE�;N>mccc;FzK^myӕ+W74(?��������������<j4_vxxŋ�j/^Yc�K��=y|`u`E~5sG<l Ĕe#Y8}o\qt9?NB!ⰿV_`}BzH*2&2.0JӎonbA/X)Md mPGŐ-e5 &FCZ! )"albK!DцU,*œEMd,RD&\$Ȩ!1<Rl'j+%p�733rΝy0E-Ν;<51ċ(?��������������<C|ڵk~…;,<@o[__Ƌ!^He]ahRg33I(yAq?Zh%"%X$>APډ!YdF>0 *䢊R9b2$rHC|'\U!2-B)(BJ)i$IQi)C) A`.7DꉜsZpq.8#Fl&5%TѢ"KdDOkQ/�ȘZkkk8q-,,7ƶ3��������������3{VWWMNNę3g�ekkkdooz� B! 5y)i"[FQNJ?2!tލ)"-\[@d3`eDNBNEnglz\i*Az? ѵbM8%gڙ8$/""M.JHPCnc{q< =]i8]P1&$TY8–*f}oyp"V'fܤƖGLG?l6?;y�ʓe|FUƘ] ��������������`677):l6k3A d/uD_ )`t⊳7kYt Ef!M?C+dZN!D%4>" >%q/!8}3ea#^\wd&cˆ+ [$R#w90b6.&$.υ)'"D^:!E!>vL=I.ц.IsQ,IRhbqɊ�|>}ƶAz~nʕ+54(?��������������@[Fx]�xZ-?g�HG%o~g+dԗ*݌cER@쳣~$!H_*EAe?_TEx% # :bp=!+N~| ezRECf _츂:ZU<[>bcI1VF*r/2J $R[擌YPftBNuS+UDD\lGYPu�x .\s߼yss`<g0�����'E������k׮][čDA6 *WaR g|ڊ'RV%L<o %HQ&{ ©pQbbIL͊8!$7d+B5@bT$P^ґdiꈯskqcB\Mn�%6]8񌉩*qK%/ yFDXYTi򨔔:v;"al'eJ:8cJi�Oٹh 8q-,,7vvv~td������'oZ�������xU8<<|ڹ?s�[Fec(?�|Fi$2nBZԽ<⏔.B 'B: 1D'4; Fǡ,'H@$q"!ď9N*5.!%~ '>\Ƒ‹^i(ϩ[h0"&X[ OGJLv8!XH,r;o,ZbvҨe ʶfŃ!jG :razNL1SXIaM.ONIX�x `cee]'2 �zFeWcv>��������������ܾ}{9\cVVVZ?d�4o�8$D@1z T2b12+{"/߭qR]sp⳯fNU�cC &t2VT>ַKg|RJ0{cY-1}KJUPj,_ˆ+"T>!j'J#*jG vdqDL0LO}>ba"SkDr�|:>}ƶ־Fz܋vW\y1A��������������^1n5>ORVjW3�ņE$xǡ5gP,?HqEsNT#,񹼝'X$(A"UER-Hb،OĥcZrQRK5Aƻ&0H*Ɣe# )hQ) }8QPY똊5b~%xgl",VI1'edhx(<#7obQPDC�)y333wٛ7oS0rܹ_YY7|��������������<2>qڵ633s2o122)?�by0@<©;QĐ?\"6$)*UҊI.f M:+ ;R6#AqE"EcXՎrKHG*>1&wsLMd~δ 9zIEƪ0R$ԗDXxVX|"-qdU [X7NAmc!L\1-z2O[ �|��^z?ZkpmmmAoܸ1Ƙ6K���������������9<<|ڹmtt277lyO W�QK)eyn$JnJ#eFǚ16 2|Hp \|`-8Ua:!B@v?dkNߙk[䓈L7|+I/N6"(D xéw`o4ME=J )?2))іN# UJzn ЏdA)s�_:qDl~sf�Ȳ\|,41Rk��������������snݺ5~Nze1S�ßA7ԡߥ <$m)).�Lts2%4kK1YϊH:acFDY/$YU݄-9~#\HfL7!08sH[alb0! EHGNƄY2&Vǩj1R#(I+i8FM4^bq#q-g3g|ٳg־g�faavW\y1���������������j4o;<<|nqq,@oifyy+s%�W88ϋdx>2B\%I(Amp! *}% 8�� �IDAT+..(X!HOJI>O(Rhp5% 3cN!REmYZ$دsZYXrbKN@VmRZrߝ7oB|Z|9$T)خ)kfb;(EG/gF 7LޱHym29ZbN4o��c>fffz@o9w7qcP~��������������ǎ+KKK} n<�o}}?~gddP~�ضmwHS^:}*k->ijqJY~ĕTn)Flnڈ *' ) v |8 (UqocD_.0Z'EŚZw.Eaċq3$u?wi!eH/Rz5JbɜXߎ,E94Nj$^@)6r$!FStzxWh��f e-naa_߸qclgg'L7���������������W޷:611񣣣,@odzMcP~�0!l*BH .߆tx; 1\%"GLN v" Ǫi#p/HHAp 5/\;(dF%ܷʣ(D|O\wߐ6 !C"A),o{R\-+՗13@❕2RHJAN '6h$f̈cI>"iW\GX\bf6R* �9fff~ĉfyι�"2sҥzpph4K��������������[[[?t֭X@~\ee~~Ƙ)l3m>D&8x^g{t0H!e/\dbZNmRt :_HF{ mPW2#{<(%6xK,VN>Mo $Q.RRqeI gELV&QWAb.N*i#yidC2ǏZ)cc-]\dR0s+m)�x8s;Ξ=߯�eaavW^}1I��������������Xn-//s2vm`pppeff1'YgwI*Q{SLSF ,t +Z8W>#(H%w l I2[H&A&bK:T 0dU}޻!#EEw"; &NBPL\i�VA~'HACJ"r,JDȊ$4'6Ő &J%duLU~<JLqJ/2;�gffVo߾3/ [Ο?xܹk4cƘ?���������������O W{-}wN>(?38&ՀιL OC W3ڌttJ=]92v IU{aEG 8s7 ID>W0T/D&=1|#H)Dž>D W,ˆܗ ҇ƄpHRF ^H`BĂx uc{2 ]ͩ(H)F%Ef*5DTx&N t CH;UX?6+X.`�< dV =zƍ���������������O'GGGvnbbGGGYf޲=|Ν877bS8H̘>GsdRJRdZG|}F?%x${?SXwBrCP7l. B*9d+P$H",6^z.Y]"O!p8UDIGGNLLJ nbŻYb^"qEROL &+T4R,LnE20`P⋔fD: 0YNh_Z*z_>qDl~s?�=$2s,,//yc>��������������xiommϷn~ǒ,‡1SZE@~Y\R b1L(1R'X "))eB/>$t"@D; w I-3? p"<|HpH\莸4h8!g+@XݢréECL2&6ҹ")T(5~m]k\_m S/%5nB]B`}6`�igtt;Ϟ=߿_{ [[M%]G?Nm1IMPre�!a!"rB50c\<$Sʄ`rXRZt%9{}k1:WV>g?[KP~�eaaa,7\r"J��������������9|g?/_\\40Xʲׯ'RDFX/e\rTL@QzI*E~"A&-7-ēt?(^\BdN$5IHhPA .C2Ӑ>[ s@bO )Q I-ɟ(DkcXN#wDG@bizt7XR3m!bs|Kb: ~-5%^I2挸 2><�7NOOݓ,`9{g'''peeeRD���������������<W_/gffb�  mllɭӧO �₉#d 8o*J'I8|!,Q:q "W2}?.ܢD*&9Ii5I'4YtjSs*TRKx>E2^Dm;'Z~VJANJO_98&gԭNq &QEaROKq#њjJEQ:`$-5YbS*wS �<9,'`9q_XXx[ƶ��������������{O={>Kq�wᄏjE)?SFHN*B 9ĸ}- bUBGE$&(O"窱h!ED׵T~"#5"z)|ä8R i,ߠ-9j$$bK 덴bvyKNHd$(^ɊԜ,$$#y&"z!RRITnѷwR0̳FvqrLsiqOզD+:-�qrvv_?~xEGFQrO>x`~ee"rj��������������n>~8�Lݞ+@D.Pc@T%%H?b9_} *Hmji$IvOtg�ҟG+r7B:inH�#FmW_,8D9RTF -_b\sF8 ݞ^X"/h&HxM!"^sUSө}V(Hg 2LoXQ$~N搎ɷgo�A166?Z[[ևc]ŋwʲ|Õ+W^."���������������F|Ç//..~ ,eee 'N�O66 _|u_\Ӂz/:đgx.?a~W "6ĩ.}20KTZF\5/dkLq*ѲN.<-Bd"ĠgpZއW"gm9 KōjiNeg3֊A覤Mk $YtH^Odv~fLŪ%o/ivs}ȫMTSA4 eO]�xrytgoogwwwO�ejj"<��������������?'ז9_QDc999u�Oʏh�3p6?YwZD0$İ\o(aoC$FdњcR6t*SIAI!!:%iI6aA*WbJnŸzKto>}0Ռ D" q# (&d;FQujR5Q^MTW)=He1-LnK|s766Y9r Y���������������/t:gϞRT}ݻk(?sЃ Ri&3..g~p.hB&޼Yԕ!D$HU)GC\ 1с:$j'*T߮HL_>%H*F@I3UGM*EdSR1榒6z?QU2K/\2mnՖJIsJ-,"JQmtvLmbJiXcxn�{yǯx 0@K._6O��������������Eu֏N-,,Lә-#  "3 Cf;Ɏ=p޹ZtI%ZI$̫׆]?.t?!p$6&$iu'ֆp6R. *CSKTRDL1iQ$-n5>0`lJ% QkdJesK %/a?Ti*fiU-)CJ7nXU�P>|x, eYի���������������1wVVVÇ?EKY'N̼GDFX'�/e>|x^.svPbJR {9ﯥ-oJ,~Ji+!CJR i+;(O#8Xy>{ϋoLIY.d`2WQ̀ibNL-B_Y:aGc/հ!akˆ[8urcʹbj#I#> H�#8==N0�ܹs?2%"S~���������������0זBDqvvv [__ɭѿI�1D\$-@B `7.̪Hu:zJOq>I"i,ȓX Ljq?BP?$-d.N\J*QeI+{u"!ץ6CB]p&JFߕASRBDu BT j7"nDO 9yu(/ݭ- &U^N~2>�1???oll\`y�ˉ'olnnooo��������������wmmmٳ?:>>Y`loos677P~)!bp~n3!,G&vuCZT (q%4\7ơDx'~@H<x-' "ǮRbuo\*8;l 2"$EAxQܰi*l0BQ1z;#\ө)xyMEX1N$$K1QbYHͫZ͖q�1㹙?~kQ EQȥK+++o���������������[n?^? �N3[G.^Pm /e:/7H%>i~GZ[x#YO )̥TMXF.\=C e8U)T"!C%hg8daqp*\T E +ZH z/Dڏ*@iV1k;-xJO' 5 &[#h'-4O$xtXMJi�KI1>>?mÇX rŭ,_wWvH���������������)wVVVˋb�KYrם8qbuff="2�<Fd!dDHDIq| 倘R<MYǧ N:*>\u D]')4'?/+4"fӸ" I#$O=B&RR} - i ՈW-VWqU]L:Q2OehK U U.#JM CQ`�/5o^G{{{'X rܹ~Y0��������������'k_!"_?77ˢ [__<'75 h ԡ~d%z=48l.= p^yʆyJP V&yA Fp*\j `_9ab~>)\ὑ8Y%N¥N|Tz׫kM"rIjo$eG,B̚)%[ ԧ 3'6gbL5=DRz4J* c?t`:uϿosss|wwR~���������������xBN3u;`;wܚ| x:Oŗa-#;P΀2R "܋<ŌI`Ѧ)""  I/.J0KBkN{q莄bFTKyv&_eZ<L6~JOHQ :AD'X)_=;*q N$jo$&A(995B1 5w}?#>A~UH�xE!/_{WWW."8���������������<ᔷnɽɅ?~�E/>/"3%Rb("Ѩ.VgU@u[Lb # G!H"^{# vT3Oh7.a܄Lu ?狘L c]rBtH P12P2&bFNd;g)-SuB .2{tҕTUL'Y7Z NtIIh?tNYiK$bj7!&OU �b||6vppPPorŭ,_wʕWuA���������������O/Ç,eY_wĉ_,Yb!D7 YڔWH(WC:}IT=6ݷJ+zZ6tF P*Ht!LzkrB-\\ߠvuz=q#Z,d݉yO'({}_w6Eũ>$&uD<¸ᅱTC/"|qAp ̓Yr+)yم</�xtifff}wwNPgrܹu"a���������������O9׮]"sss,6`you̙�)g:eނ %d):BDLLl"Wa1Ur “&.;BtLDK/ 5 VI-ָHUDևKlR4K] Wȩ\nLdIvNJp=jԢJN) rn]f2s*X=xZ. GQc (�T`:u晝F��������������:�e{{۷׹5E$?(!Eؔ%q<"4A>t؆iFPqEte%$ÎA=z?|+eqBʊ  s xW#TSkAPƞT"[R)ީJ*Y8&dLe]e�9ATK'JS&8E\ N]ԒOޚNpT"L+ڵa5/_ <}c�<es�� �IDAT}կ'`E!/_{VWWED?���������������<[[[?7Ǐ7�(t:3EQ|ŋϋxTxv?;&c5k@!*D+=AuUm_AqI$99TP]+x'daZBKJvIK:OS>`WY'nu daZ.6}'~$C)KQ nș<D kѵ#aSX(HO:UF!y%HJu]mLS\xTrO=�^ elllsmmmU,/^*uW\yS~���������������/ÇKKKKJI�KYrם8q/I�Fp^NS3`UJc3A3@X'Q%RN$% 'xIEJIAzڱf0WݥwЃVE*!e (OĔ$ &SՔ8+x5FW-V )0NN*S~lz>Ef tt5/{{{'('`9w]~|���������������4rڵk_)"_?;;��<:<xpl}}&''o9s� }6םQY~JDnԄB=(^72'x/ӢI%tf&<+zީytZĄ2=\C_s>{9XGML.d ]K׵Yլ|(j?\"ދE}a~4M9]*4ە#~~W}.q]}720c�^.90XN:߻yfoo_P~���������������?vvjj&&&(`>y>;;!"_C^ H)G$d4):DS$&dYRI2X!gVQI)ԸPjه1h'"&hEaǣ$T==rkG) uDmdQsO; jNtj EUTw6p^I1K;Q/ +O)UsmmHwEf/{M?6�|!᫫LQr߻wonuu[Ed���������������|Q[[[ٙǏ`!Y[[PŇ>,"sKwW$ NWqk&DXGhP ,q$SPUIlLuQw Y> *7$G-4,TT;vJ#nL:~QFQTԠb>+ë|eJ ~rWtNnT7dNNdTQHy �bbbgΜփ< �/*W\ySc���������������/VWWåOvP�eYkGFFVfggUDNR~?Ι9_H*A<ZXJEp~/`\@Q)-媉)F&ԊfMBGfҳZ*@%ǞKTFJDDR[dx*Шm3S85hUnC2lzSqw9 Y#uդ'56gPk[S5Q%H)N?[͢NjrOz�릧7vvvuj0XΟ?pll{_~ND>J���������������^T_veYVMi~[cccGH/o8_v }=DH4ַ́,~Cd6RMPX_rL؇v'j3M|0(T *QPqN?>UF%Y1]/DD\b#nBZ cLtu\ ȑ<EDžHHJI3DW|e訍P=WOSXXچOnL^R\rZMXLbNX#ݍsG<�'O_ySg���������������GsSSS?411q@ɽ6;;!"�vpUF钏!ʤpVNuDplgHL횰̩M@RD!$ 4BCb~'K8 *znGCgQk"uA{x+[FByTu b~{eo{EtOc %QɤݽK$$TkT%X8=RNcgL q晾Ēe\ӟ<�Ϭv�)݈˗/s�T���������������` [[[ٙǏ?t+�<*.E.^a�_� ә&rT'4 >sOD!AB.:0*/SJt]J0!%jBB J$"FTK'$SDLIeGQYRs+[MYUFSN:d8>3~$Pq8Jz'l/Mv�T5a,<5]H1113g\[[{AAi�ŋoe+WZD)?���������������K oy'(� ,YU9IRsNI!LHs+ùLSSD'hB}s+;8qZux ƣZh+_=3e# ǩǝTz׺KKTI֎ J E]$iu,ZTN,%]>9W^4Q G&J,._ klWoaby`Tj=Ҹ\o $J�鍝wݾ}{v�)ϟ866=ׯ_?'"����������������ׯ],RfI�~t111566(?@ThIb{r_ɗ.%SFԃQhE;.+%bĤ 5-D/FI8+( '!QED4/Q%z]AW.F^,FZVщƐV4 &iR|LT)BJI7\y_! %GZh2 &UleχB[]oBoz 3Rƹg�ɓ~~~n޼9 ,����������������cs8`�Ή2;;!"�9>s ]I; # *\ TbIW̓*E5BBM%7RJH;FF'Μkݔʐ{ N)19ɨHI*<NL16I.X1k;C=ZXC{.]˓C2G6uzhҟwڸ}oo3ǩl}ԆY(0ף#2:;;ϴW �K7;?K����������������XSÝ,`Y[[PZXXQ~ޱB;&KX¹p9BO^T6F|ukL\/? Bǝ=q*!%7RRT4Ĕ8.5v]FEIz+wxg ې6| җT k -ltj%&I-8p-\-dkj.X@*Ja~Y~֋lW~�M:s͵|)�xY\\,W\yܠ����������������O/uqiiݿ�GY򚑑IܐnQi b#~QL TZ7 Tl}މ 0gMD&)U}Մ%(&]$$ĔuxԤ4x#XSt<L1GH &APIGɆqMDSp$o�RC[:r\S2ɥBo|d:i~^Xv37\pOݾ}{E,ϟ866Ec���������������fڵk(k[6K 0XOLLl?g8Rs,z(q>3]%)4R u/d† cGI-:ʵsHQMǒ<bIq0W}IԒ*&i{_ d%ū: ?R]̩͑ MK&zqxoF8նN1Z+z&H4}]Cb=m3R΍7β�ԩSe՛7o���������������<UA>799w&&&XZsbwwfggo)?<sx)3uG†T$#<'. LUSUQ;.AI))ř]MТ1dD W2%2EtIeBK2‡Oa!#XE]CgQ+))k #OI%;'_,⇋Α0]ol<td]h6x.JUϤ.[q|Z9.� L~0X/_{fue}����������������੤G;;;)Yfv(.,,|DD)?<k$_a#5yÆ8PN7'B>@'$:X}v_'xkUq>6>0r+ZdL0d*J spFIRJT7 Gk(R�Ԇu?Mp.A0)4yS]T3#H0X?_&=e E|)jکHcb'A ɿ;::e,eYʕ+���������������շ/...~(RVVV^322<77^9IGbh %=cВx4UG1CK < 5I3?gҳ:4C\aDӉ)wd"n(;Qnjz(KF+GT!b'Mԥ:FK5.}O4vZZmTuGD <!a%]vشZ\'7^pO޹s8 0X.\pll컗ϋ(?���������������3+ʲV�,Ey�O%!4(9Y}TI* ٰ* 04rXUr"KT>/Q>1RBh5)&G"yL'{i(bǹtჲ2 dLQf\adKV2reD{N5b^$Jj"Brjnf\LwgP(T)˭Vpƍ*`9uT9??+7n{7����������������v}~bbRsbwwή)?<xi:"dJ hȻpb{u%2u (P2DCb[Ahn-}E'a\w䓦`|)9W"0[UYhW(TICTJJ0{/x1Nal7P87NZqjᝋ*Q c/*)%m._zkRRñ LRx{YLҍ^|Gݻ7]%�����������������E3[[[122RRv(.,,S~xpZiGGA %iIũ{MI %J駩HGfp.1/>zcQ0/%wyI%Έ( TG%hx3TI. $GqL\OpaA%ŴDDLLQDڈVzKa*Ytu]W9'E7ն7WQ:vިL.S*MG:z]4t:o988 r`,..,W\yܠ����������������yťwRT�eYW,ͽODT\] Kw :H#'tUΆ:ܯӔ׍E{Vi*L&yYI6p5GB-| KŒ<t({_._)S'_Ŷ4ĹT/9-KTZP ѿ'QD*]<mD>W"e 'mTԘBRJ+cŘ;$J]N2)259ϟ?s{{'ܹse,.\x8::]Dc����������������V],jmQ8_t:ߚۢu<x_N@)KT:T}8ɞI}&!TG{q#hbL`,QqR  �ݗ(;m(B݊2RŬDɣz #VLo͘}I"SZ9̦{lS"OtKpFh"dq8}tcp"bc\S�O['͛S,`9uTj~ƍcwE����������������_nvOMM=�ewwwdgggfggE䍔t9H)yI~E/M%'Iņq8o3p*j ^sƑok352+ɣ$8ϦQ=)&._ \T֋QM)zBy#LXJ1ԖSS}s8=[0% 1D'+$54zQmp 5 l.'ѹt~90X.]н{fwty�����������������^ vvv~vkkkjHIQ(>"2OՎHM|v,JDHZq+IEb $3{)#pm[Ha A(UtIKN1%ExD!] 4E y!Yibu_/?5nŤDv4uIBaQF-�Ot:o><<lfGͲ,_u׋ ����������������vm KKKe�08ʲY{<GIѧa+3C3JQ#i&Zae*ݤz&$5!MH%ETNCCވ]t>`Jۈ5w9aݒSxo*E,bKq֔(BH>zoN?yYCKB. -N_#+xT2sY:Oey]-r'Ƅq$&Cq1DWJbiܵ'CZc[N�<;v:ͭsqV `?~tt;]vAD>N���������������`�t],0?? m||�-&vÉ в>/< P툒MTW(M~X?z{Wg3D͋ARE0}$4ӟT>y%S)A�b\'uTI_05Iĥ41`2EGx"X% m]#VU^Lǯ덅7_Lͩ,�6G-KLqiHȉK>wǓ˭V7oNF�ԩSez͛7ܹs=����������������^_]]=7>>SSSY�;333"&5o@sAtJNӹLtL}gROI*RP ضSKҀRґOi$*ADU4iΩP.SHS.+]5Q#{ yA:WLCnH\ѱ0&Zb]SQ]J7 LS$OKt(=m�� �IDATwaU*G#zBf�1csss544vr `tP/]{M�����������������^Jvwwnkkkb~~GFFJ`+?.,,\X0\Pј*%^1a(wUڛ=7;dlh!7P|>(6$#k /F2ѹ^Rq\]6)ލ8\J/ ŭ^0$CaEZ j hT~Zp.W4fQS_򈟰R_Nm¼=gZL }Y4��^jt|xxXc�śeYիM ����������������WWWeaqqcE3ARrxxos,�<^$BrBLQKHMIM8s?*N/IŻemR`B D%(A$tS0P=4rTˮ�}w) JMؤrdS%QV$DcxhQūoԢhQMGW4yKZ}T1קi4;v쿾p֏޹s8�0X.\ptt/(?����������������<t_]Z+988(:[o`c�KO"<s^9u6%}]⑤oO1ɃpYHQ|h] F")$Y,zjJi(Z4bGU?E0^M-H Iq厄6҂ف4-l8=Wo0*U+" hMXl܎a^0nD(QTmݞn�V}s׍7&)?`9uTj~ƍcwE����������������OϷ?55,#?=;;{CDDᥦ4PI=ɤ)$hTؒK&;p1U%Os}}`˾Ď*t#8%<4%ǸkJ)JPJ&4qV<r ݏ8>%z)^|MȬaޭfDR\VpMU/g28J r%m&gP4}`hhv+Yҍ4t҇ݻ7nCDY����������������x[[[VGFFJ`-?.,,\R;+_z{fޤ�dʑzֺ":E,ޞv75.p|! fP>i,f^[8MSܘ|bit3"t ֒$, )0v.FӞLU[6 M^m #|t&fS}^>ZNp<؜ i TM=f>lcfkx`0 MMMN͇D eYի����������������o_X\\X/oQrxxosM<oĒ: (I�I҉A ˆUČřwnZD^QR^GUܨQnCHf9b$*E8#rڋ 1&5 (KYJc15NR.JѪNhFQ8PzA{-WeXC!F66fN96]k%;[�exEßG_9w܍wΝ`?~tt;]vAD>N���������������),_j6Y`rppPt:ߚ;m= ?_DO@~$VBxESBI>{:Im@̛F݈yċs'%6$7r\l;^Ra(V0]B\Ob# -X=&-iA)T{?̒!-ŧe/x{{\fF:Sg/rD RO}y?<eV9I˩SV7os{(?����������������<|nYp;gffnQ~ Ipl}v!|sZRRr¤(g!|wci ν3sI)Q}MzD1V\ ŋʄ ')E_LCgD4 (S>)gsT66IX*ҥ;cUZJSNh0Cl2kZ`Ib6UE13)]TeS닫`Lq5� }n%,CCCrҥݻwongWJg ����������������YbooommMZ<ydY݅?-. >HЌ*zƁ+8۳ۉqӠsY9)#h5tj(9, R7cII$ؒ~/C2e!D5KN1f?tē^I&u1u1%(zJM*pP֛.dTGo BNl< ESZJDde8X�nt:o><<$ `,--<<<|իW_/"ē���������������v_X\\XQp `Ь|չX�x3ݳ 0g{CaD\ab-ҙ~-$E_K}+oB q9-豹8TjHeT*.?Y}=(nj�"Nҧ> 刲MRc\4NDH:fF5ySd["B$n]@ &JPQk$U]Fv2lI"3.Q sܹ[[[? /�ezzztt_v킈|����������������D:˯.u�t:o=s;Ytxƾip& B'8W~⓮陦A<8J82Ê)ʛiza0BKuPKaD0~Re靾 RiTfUK*@6f-~$ɣ+m#g$Xb,UTnr#x^-:Gٴm_%(+H6do> Ep]_TJ}�_ _jܜ�ԩSqΝ;D����������������ëƾojjj�p;;;!"_G"wZdP2FWguQKlrAMmpȿW7n^k}/Hr�biH *1%^3|*,)UJ|^F -Zբ7֕H'hRm|]. ߝu 'd�2677CCCj !|ݛt:+�����������������_5j~ɓ%%,gEwXD.R~R!ç_:evFQ|z"w&SE=($d59gC;'~CjJ/ckdT%YI|n}ҟ@YԣNlЇe "kBHd_/t;)J)1bI.v˜ o4J'f'I ɌIT1Q5^<I c+K�b:{O>s7:7*�x,--mʕ+obF����������������xwܿѢ(YYY᫭V" �^\PעlJV!}!9�%(sd T솳IMB=aw5{DRV]riC!ٰUXHU\_ d- v':Hm(a%(}!%$8|J qyLmMUGl;-S4 {MOqv,}ShJ+S^o޺u )$`?}_vmFD>A����������������d֯]ڲ,_jnRNrppP9sfkrr#�_<&B~gG|*"I>'QRm7D"#H0طjC;51^m5<$aоBnL۱FUuv唔Ex@O(%|%lt;DZtWUI.fTYT37Aj36a<:`1%W(0R%+zUD<OE?y,O.ƙw ����������������xpݾp̙ڧ�Ƿjvv+}/ !%$dN4JBp} ݎ݊ d+:IYcN#D[J>qJY0A3s5lIRW8G_LJē89^(3:"d*Hz:3"I'ba W~ɣmҍ|aSIlqQ/*MU݄6H%\gVRR1J{S�_|А\twNw:ٕ)3����������������?5j~ɓ%,kkkS" ,"K,('xND gSE8oŎ;1‡>`'HR4D4lsUL|I9$e; bJβ녙JQ^zc_*>j3x|FHI/ V}זQLB-TY\LW9tTgRo'*A;kb qNӧOt:txxHDY\\8<<|իW "����������������``wܿѢYYYϴZ( �EĐ6RDp:럞LAIeP)*.s+K -t^�*!U%fIJn�$ *]YdG('kt I0+Y!\m1^GB|atRAQ ď\dW^jh3J6l2 )k)qp"N kϟwS7r…=<#"�����������������/˯- 7XrppP9sfsrrEg �(b!Y!IŦLJFښ.: [F!H$Qsj]$~E\oc;(xTCQx l)>{F$%IpIMIᳯ$!^XTSmm`<؜~j'|'"UC!6W2< tTYMmX^677s]�x>}}7^xE����������������>2}̙={`ܾ}ߟoEUT"@-lB ]"HXELjI:D\`I*F@!<AJ._C''¤r"̽Z߾zpJMۈ.B}"xXxRT‡$l28TLz66 &R(wO1bGCe X#$gK#q£!%45y$sssvhhO:�ehhH.]wN}wWf �����������������?n߾nꞹՓ'O,`ؘYXX"D!tG¿LJu/hAEݬeuFq .b-$;T5HM~Fj'I,5j&u"*Aر&'~JAKYsU6B&DǤEnJ0- 7W}#d|9D;O'jX56F)|j6L~SjrDS۪AQΝ;ӧOot:zxxX G˥K_q7&����������������xt:v⇋w�fee/j�Őpߧ3N9 > Rz#Iq)D[1#8ZwD ZBZrѲH~/f Q8A1Ύ۱BC0*Zs F*U.Dq5L D_3S/dETbuJ\4^KG )IޮĢT,]t!}EZņ|ŻeTŐ&ο Yonnnݻ233֫WΊ'(?����������������ʲ| `vgΜٜuUtr>AmU*g%1E$Iu&Od_KK Eݥpq;@p-&on܏pJHW_]%+9vE~!vӵnҷTUX$;j c<%SSbTM0R߾6oTMdOJ1 5ӦL(H.p˧ "jDa93Z֧7o�/ �����������������O<]YYg>`9۷omms)J5b{}ed0:cJLH5I鶤JUiڳS V7 +ޘ 1(Έ}&Lba2R'Bv2ZUBIS7*(gL$_MB3ȱ2.&b%䃸l\be`Q+0tXtJL*gӵd^g60jП헱�ehhH.]wt:ӕY����������������_uܯ<ydiƤ?,,,gY)E 3]Z>yI6qs]ƭsi$>$\OXqTg<Exw&^ M>^Ӗhe{4n(J"D>6&G|jcMXG褶8r:MF FR6|~*I*~0u j cOJqJJw`1.Zer<.< ;w]Nh2~xxWID?����������������S~...~(80hVVVgZo( QY\ʓYhJDT.~:n EBJ_VqU H7{Q  NZh6B|ݎY#N1+xMY$-F\<zRD!%I<tb8#cJlܪjs2B,&ațڊY5`5/x 9~7?~sssf̃'Oڵk"I����������������pcyyueYzaa0Xv3gܚ*�bN8|H> )'Iq_ȝP&I%9{SGN)饍T*VtZK@L[Us04OkHo,=sa.6^Խ :5FL/J)\V,ɢg".$[x@b6r2enWXDΈ/eonyLO\.ZO?|7ogӧٟ___(?����������������3VVVGGGٳ�[[[?6==˔)'49hL>2)ӿZ\:ɯ}!%p Q.3I0)a#I JY )Gw.h$GT4}ݾ#qPj-r?i&'Cz )>|5pSo(5䑸QK2i ]T oZ [kqo-UDuHZe\YҘuNJ 1Z&Zֿ;v؟/gА\tw=]%���������� �� �IDAT�������;w֭[t=0'"r?} gDRKBE8c͡~nP6K8 =#BbKvDޟwQ+סדxIbML鶂}MPSg }9]qС Z{posUB*`^[zqr;ʘFC|\zִ.̣՘t͊Ԓ`Bo 6ESٳgS6_>* ×_zM"E���������������� cmm߿nqq(j�eee+˾kZQ4OH�.7TMP4vYRJSԂAR\Dp."UGQi?0H6Nvh9X[cދ%5ujzBHw1uNxQal]n@{lG, yDQ\va2eIMmkI#;U3c\/XJË1`@ PJfA)J^RB!BIHچ. qm5eXki^5ﺲь^f]s̵sh͝9g}>l``FFFwwwwzkbbɓ'~~~~RD>������������$6\tijw+++_y̙ .m Ǔk ܃_.l}U bR".~^s 6P -T3^I0M-?[Slf,=EC)y۲ezͮB54r,!cCGR;%fL4x񺇅g_tb-Eu|sr^Qm_QnF'ꊪkFfC_Xt)\|8}?_ m~>޼VI\jsę^T5;UűX5;%{ԟ<|_omm}赡ɟ^[[;n6�������������KKKO{,[oV,;'Nxė_R}ww='De^ Oո*PxV٧RϹ4N:/~91R]Ӆ_0qL޳ z}^]EGHẝCPEFl#oBYEu{d}U}RcSLKh9BM*WU6Ƨ!;[S^Th~䛴&M ijǦtDUͤ R_>4lP0]j<!j><V___l������������Oם;wŋ`zk}}}nҥK\aLis |3!2ꇟb(64pMA!&`3f�mxICL[9 -vaٱEKpLGu6[[TTU0!/b6u0 DP ,t z4e5\`BB$3V~s :t3?WcM:N뉄ZM�'llSÓ$lݼEodd<yr}eevc/_~pp\v D������������Urߴwqvv.uzlii /LOOf<> 8›wsU Fcc_H\{^s#&mIFǽ6@JVH6*K.uNUsӜ#^țmf#kmǍbesw@1aR9$ƶ)b-+v!m2G3'q47_Sĉ$:Vs(4XCTihAy"%{9~ovww�zmbbOG��������������Ÿ><<5}gΜ>ߩ: D$Jgm$qe!"dLE#6L8BR%vě-G1u$6Ց^^ d<8^?qe h>!9!ǐlbQHZ 8dDg4љmԁ\C8IP7:I")cCvmډ&.&B&ݷ8k+v2,EApٌʻV^/yhNybajjO߿[[[g�z̙3?vzoo��������������=˓CCC4::zEz7noǷ[Y_b4/%S7IL#ISKV<c$ >%bn LsG~<Ē`|z!ۤmМCن# aZRꥫB"&8g+I9:i{Q}�B"mKqEifgvǙPH. y橍$ *ٽ!{Ľ!cv=df{ozJZ</k}}}r߿}_6������������@ɟl@o߸tGE <0^8#fg+6}6ؘkn_Qf hPiItb?bKHf *4bOO,_z_E@ɅE׊.Yв<H6&R%\i79Z1SnY 3Vp^V4ĄՙsRU:NH0w=o?MIj,5cc;L{z'On#w5??"r%������������W.@---}f ӿ."gـQs8),!Pt>6vЎMi^y] $nAF{+6b 3QqPC.%%ytl 74a2/inZb&T )vdj1ikHHm%60 `*T[Z>OY$m*UBJRBV Ƭ}ll|]2d 3?XW8 e'<;5###[[[߽;�511788S"Q������������cfcaa56}gΜBgc %3v�m*^B R؀y�'I ds ssR tU CIB@V Lm1n2$\# 罹|u"I*iN0T G7GC%1P̢Ilxۈ/,μ^ע^& M 8W5�RIOv|zI$Q:@//Rb(ySzŋ_x/mmmz̙3?vfooX�������������-..N>}GFF,n߾=ccc7?BCΨEiH E(5ձ^ ގµ!% t*e٠G qL[ ?=9IH\ir}|F{T`. dG $i$lfZ.o7cu7&dn"O:3z&|\v#msz*< z/MiZIUU 'KXuCYKQ/q~jj}Vׯ_{�V__۷/}�������������w[[[MNN6stGEyV/q֓!M+ˤ^bȤ6KkNb!TU>ZalpCi .d8'H|gm WLV 7{.HW@J:fZ))굸981?UP#n6z2RէGtFb5{8jXظp&T= iˌZP]zN! 20::ッk+++okd[988k׮EDn�������������PWWW+<YZZMOOe_u$OrYIhQ~/�MK V[BNbyI/>iz!?\?-\+E<Kݶ@L. 4aFtb MCGB5Kl:\H&^&ibE?$J)W_6 i!RB%}u@ü6db[qɦ3xX U!ox 8qkϟ?]{{{�vڴ|�������������ZXX3ҥKkl*[nyyˇ6/\"vB$=bZcD%m#Laͩ>Ɣl[d-ul h}EgCVjs<l9G"hC}ힼB‘tt2ta>A/څC)mxE&KR=,Y6$.Z'RIR$f0IQXx='u!R,45y4O6db ox 7naŁ:}t{rr%������������SCKKKN###{l2[;;;?066(6Db6m$qT {Œg瑿nDz*:0[-8,\~4̢P:b?}Ґq09[b6IZWH5P+cr%$n2nn!|d{ɉ4a]hZ#1 c6lHp ,b\ZHbJ)&M"k9͒&kaagK7?i}7OMMj}ć듹߽sw[�������������iwykk빉l@omll<wppK.}LDg=ӐIb@PL! 0LݶXX6r6a`jY 7 h@C*M48 yhh\qUJekWN8u$}c$I.xG MHF 5$ޜj 7> ,S=j Ƕ*p5* tU8! ;*;"4022k+++ok�xV>ڵko6������������gõoۛVf�glzz="r~b^C֔�Բ!—sZvQiQ-՟zm*C/Źøأ-NbpF+,ĖbTf\֮bK8%sBaCHyի $@H LpN:LчK6 愔N2Xy̓Q}0EM)3*C5$ �Nz03 ڈyjw_Жb8q]pakkk;YU&&&?5׮]�������������q[ n?{ff@w m^pEMx4B(.lI3EڜⲀ3<j.9%وs!M@J%FZĆ]lJ'=B91 KTd V~/֍ i̥>W̗qU Ղ1bf1C).IGy8i-yh<THmY8 -)R'ݩՙ1b4ӽyS^}ox{{{{vs\[[;s_a������������� ũSN{, [;;;?066N圄He17fJ=cCc}BOwmp&b}E_S0K, (aήIGH/eE; 1kYsw_e>9! [yJ 4đ싏 궣t*bL`%6q!mA5d!)6, 4T v2̡�\hJIJFa)690<(qhNy@瞖r޹sgd}};E������������fwMNN` �stDyVa.Ӓ ӒR+sBcK{yONt(ja0\fAy!RfɱG\`EvYė M fKZMT)*ҊIP)b9J!} ofBQЍ7놡ZU*{&bxɂ)b*Yc ^888%v,�~[E&+ �������������Z->Z glzz="ref,`F!6 bC# 3!$Ph6$%ͮ] lB~.~f ewIU6fE3iv<|ݓ]ɡp 6~Ϛh\3YV܈U:qmCXb{)a plÄ́x6x=>)l)eCˏ`KZ@URG6Oz…zooUzkrrr_}ڵ�������������oo944922.c ^9o y$ 5dA찁z30iB. N$3=6G{9{-" )nH.ҵp!,SeF֎z"Dzz(ŶT'%E3^^)^ͭ%tb%ThIx�l]qAq^!a: i6H40bdħXˣH>1ܼ\O͛.^xuoo>ÚuO�������������ɓ'.K n Y{g!IY(E6䑍c*t㈠'^dc'sc=ٱ̵aB\vO ]W$%$Ɩg$%%e`9) Cu !Ѕx) kz`~~�q-]ɥ݆WD4b/! &eě={o.!1L-qiVWsKʚ�5^ɮe@X:sw[�������������\5<>>3Nj@omnn}Όt "zI?*΄6|9JDւbŒ _ o&r=bhɏKg'q& "v( |/l%whڣbnXF)4hQЈT-џP]o,}>T.Uwﯺ0i:M9K&Ʃ%iER\5џ%vi<BsssK>M������x|88������<}ݻw'fggjzliiu~ \pIH輨kÛk 'UÆ.lfBC\:FPrD$ɯ<wM!;V<߷95ӢѮO[(p!G!|E,q$h8E;'T-.i#1N$ǤŤ!'6=7LțSC&<I.&0j#m~6BGlC='d2ؖ̂Onpp?;wd@oMNN k׮͈X~�������������詭oo944>22#"oYIq|By%d-'M$I(VbGFĎgR:6ރkx\XfgAdajZQL9ap*zC\gIܨr&֎8JHV�HG.o?5N&aL{s"+~q"֝>\fFI2a/>=G LdLQtƍ8#r?X]]T3�zi�� �IDAT������������>8uoe+_7"&Qk1NbY)aM|16`݃3ᒦLbLm$ͬ'IU pb;^k 11a9E+UIZ4,\ |DRTC#IZr#.] SbcCcƫ.!BbKJw> }v#qA] hNxsM3\kZq^IjdjjZև_>˪�500 /_[n___n9` �������������񰻻/ԩSmҥK/Y;24d +gHY,a \x!v<Tbkk{4'a3^S d)ܿmV"p-sòbD6h`G(EPF^AvaƝв>:TI 03͖_)|uHl4 (DC#1b/1hHDjd9!GWVVnY>|_*"X�������������x,=\__ֻw^ժW�x^0,haA|C~?]3 y7d!ʛRi1II9I̹IDG9kjjaP:RĈmq́CVz(\Aė \}՚Ɣrf01!v-CĦjt</^Ep,L܇E71IC$2dԷ`mT~bJH%Y688 ϟg}=^xNܵk:mEc�������������pcaa fffV2;N:122"CJcM$k(㓰K; tRI`=?kDo{0m*x|O? k6rEVleyL먮w(xgT6 aZR<VD0ZLW$)FI%̷,I!i̋ 4QBJ=V %~Z]Lukw`}zƽŋ{{{pƍb�vď_~:��������������O,..N~.[ݻwwllƱc_T_@HIx�ĐJ1j׳Iż#t}K8"8PؒJũ'lMnV¼^ΙբiI>G4LæB)D%:b)iTIR0I:UaKIL JH1i`6x3pO )&1!T\ظZ22==[VCׯ_}vxm ˗֭[־GD �������������x{cccxrr8uTzkcc̃~ҥK/w!35P~pES.l3㘱F:W i86`4a6v>Μ>ɶ7cSi9bfd2NaY[I:8FɋxI,9qlKpd%kL&\�RB%,d}̲FSX Pn^-G,'N.//nÇ?c~~KE�������������OvݱkZG}#V.| XhS\QU=T ȏj 8ĆBj&![yȣ4�& cke{PK}z[^3$7wTc"P%.IB&ge+`"iQq0E%-ox$R5T-%e4H40n1p.յ%9 #SCfoKtLƏJc!pow^߳ukŋwk:mE/%�������������TvM333+l5[;N:122c"L|~Z'ŐFX)VpmCySH^FY$ T@dm@6Ma/1Q ؆ q:O#kdAQw]MUэ`Izp 2ա(~8s7!g!RCkkBC ʆPj阡$&^._&s'a9ˮy Box/ܸqqٳ~s������������gG~lllzݻ[[[3::zرc_/6xpU�y $ nGS a<FbАJ>V$@ +5 i:/\ ĸHzޑg VahNq$ [bRLGj|!%VTk rm4Kc\. (L%TϘuquu;o4tKU_&Q�SOZ?~}g``@._[n^9`�������������ٴ:uT�3<鏋אJH?9#yJd$6Hb[NPm'$lh34dcf-!ܒNb0)06k-'bB>6HTFK:I]eES0.F͸zô#% *v#1>=ޗyx:"6W>Dv^cUoO=(IDͯ{l8i9晪E_i|ccc?}ĉՕt*Wsss>-6 ������������� "׿ݻcj+V#n[ܽꡌ IcJ<8 ,oK򲋼my-)y&L"3;^q ɘ 0ܓkuA(ˆIĶx-Vwĺ١1E *aVxz5v7MpXp AgKC0G+lP%u‰Ɨ2`l JP՚=@O'Os{=u7<.^xw``?vڬ~�������������XXXv�yymN"|R8[Pb(؎_/nDv<4fg-y |8OB46SkAY4K4dZ&_,cR {d iGٶ#B-> &DGP) {gJ\g՟ .B!ʮsr)fW&RVHDMsZcS1Wo0燊+k/.//P]�ٳgccc?z>|�������������OGgnlllzݻ=::ziX2bFmh.x"";Uw!V$ f$,'YhELņb!�e&IiL3mgk/J_rXtV֙dD^ Eq>Wj! _mѷL4襓f$ɯqDLi˖왈ZGO/zގd's|'n'L|oݺu~ccD=�������������{{{qvbb 94677ܿ?."ox_$1?JlHN J痟/C*w+yn%yȏ9yņb04Ԕ @eKw0;Rm ]d5-a]}S.>0-T&م KC+yÄO9B^ *fmUCڃg\),,}@ %0I1066'NXYYYyt$+W~~~"r�������������kkk߱3>;;;VOxDZLOOODu%i" mh$o%i8|!X\pUXE�KS˄KZ[bQ$liY]ې$lfZK6ʯ{Xh B iF=7c]0 F1 %Iדdg y/Y&>=6yTħZ�U,G$2)&"T&^SN/ϝ;wccc[ݻdWΉ l'�������������UtcaagffXX[^^~۩S6FGG<q>}@I[CD"- _%B4,R.$ ĶzX[ދEM$!\bB6yI(,0O0ɚQS|Hkldz'PYQ0٤(̊ڥa=& $/܂ІbOB�Ì5ͱy37!GCHXk}l' t~o|D-.,dh 2ai)+wjk/=a|ŅwO/Г7}sϵGGGdeeo�������������G裋3'NwYh޽ۿ7^<~_x?EA2!P¶l*|aZXbO6�60Kh1+yؤZbXAXNҔ3p"%ihy9ŎX~bG9U=3#f+9Tylm ɲ!e[JvN &jK!!�ӤsT%s%3^B/&3.OC<oLbJx/F "/.5a^?cӿׯ<*'>q~ssEI�������������)p޽O @omll&"ox7HҳK"DE#{Ma-$-%VB*<A4Քb3yJm]Kmi"-HR 6`dJLLMU;cWGf4i7>lJmQԣ8ih)6V3:yc\5dL[db3W>rq@6&"+&UJ!:n񱱱9qxu�o[5�������������5p;;;j> QZ^^j>2==9.F߅@a6aPlKaVZ$T$ÑNL5{MpK~ija +B_yBꤓZIs$vKS[J=jӬJ7C6@J$ޙk!vhgצI^K4CdbA^Lc>/`zɓ's666ڽ{j�xv~ڵ9j�������������7nqvvv zn/9uOc.A#i:/(Á$\çf .O^!tbJkݯ27R$ a,cz\bl|]{K+aY9Ea'q-5 |rHneP3 ) |:^!,^CD#iX1&&eЋR{Ӽ55s 0$\0&wBK`yŶ<F>{bbbqwwC쀧s=}ك�������������GfO8v ޽i3p_|ܖE4Б!`0LB! i&U=?{H(ҋ4(߯UmAp_y~5l#ӎsEX NY3JhJ(oCI.YLX%:Q$M$ d~֦J&S.Hl4 R5h0fϼa sp/ᓜ^566==ι?Z[[Mx'>1"rȦ�������������g卍844tf}zoot5y1;g68R(lEV$HF-ATY2g�f*Ą8j #U#1wӨ"6_zbd)½.k-)yP'd'LsJ'Zg58hl5 8IB&[7ɮQZ!b6޼⪆ZU-KkwTZckz͘TW/q.?{ĉ/޿31sssW_XX2������������� cgggtvv[c_pvKKK[և/]9ޮy%Yx^X:7Oƴ''10HD *]" sjf򲋣/QdY &XMVq{.ЄQX, ,L(%o@V%RFZ}=&O$=^4f;Md18śE4cTx>CkFϝ*T̔_+CCC8<<-{f<v~ڵ׉U�������������7.@om%'O\IxRVR"eXEBу#YWB;- hVԓ�iW:^s+%Cp׵x{IڀXl %Xm"1C, 9Ŧwg1(Q5T|�$%yFmcƑa a2qc#Mm:q$!^#vTHR%'`JR1׮RT. Vbz'''vvv~͛^�ϰgkeey��������������O.,,?~kvXvww666… 'N^__ "2iS}r]&L ^@ޔRkdip!c(f9.V]S`uL6UN3oqz^üT,IGlHmesi (>< C8ąJ 7A=ƆXLZSՈRh7M&|>ZBOIjy̹^ׄl�r΅iymjSƦ9Gӵw<Rǎ󳳳q֭s?("8�������������it_6{ԼWY.H1ƼA 9PB#]-ʌ@(s.1.i|-q<EskKޠbbfĆ^%]QtjGK܅JIpU%H^um#q\5*j]@ˏ㺰Q%E<Ԕ[h14 7fl 8sN6Ue[S$9*lË~f{x/>]} _&"wXp�������������3`ccvvvFgff>jz_vu+++Vӿ%"{|>Ï!WAlU1ED\^I&K`FPL@brk'. ZC3(1SNņ\A$D0O\8M^fkv=Q.|tnM 1YÉn.9_uL%ٛ%Yx}*nhB \lRU�5Ь".yؓ0eQ{¢<愡2<<W߿W;�#555u(/vD* �������������x\\\|[~<�[v-//ɓHDz11~Pq!b 7ཏCHٌ"!EycJr- yHxdF!WҦ؈b aLǏ*E+m7hjK qDWʟPw M!@a~6%'T$&HI6 i&{M< #&sM-etʁ"1vC Hu(MvoD\<.eb+٢WNNN.7ozD�pgs�� �IDAT|��������������ϔ-,,?~'&&vzvww׿}ddƉ'Q\\&D;.L$2eyF' lt:P6H6dpy92{6j.�6!dLkIv\}-bQjA}ݰ1ykLy~QzI(%IpT%>ٗ-nE4o!|c՝Ih4d)~,@75_p5$k yP]~ZO;puuuUK:v옟}ϭ[mmm-yH��������������<i߿kkkccc?>44t5t޽wOMMuj^<PB,QN%b^ µbX%ttBpxϓжĀyۓMD!k迈-,B!3gɏ+,ݼ~(x vk\u^6!&FjkXU5xۚj\^J}v?v}Xc~ |=BېP-LW>|K+++@\r<"r�������������H߳3:33OxVVVf[ևKDο}>^3߽~sNbJCIDZfy̅)EײɄ3aHC#rܻO[_ẵ!{_f3Ҷ9E, q`.YnkH~=DrؚIU* /Lga  ?H:2+(G2ߡojScߜHw ١oy/ӧyxxx{}}߿LMM)⋯^̳z��������������|n...m |v햗zW2Z'FُZ3 B8L4 Z-)6a%/-pN4&P??m#lB(ɚlĖqpIv?|lemI0x2QB2HbB粰DpNE2c $9'ə2�9&8 r 7j}1E$y)W.X;({>\^lcK>εy;w͛7O�ls �������������iWa[__ .8y ;ѯNB^UMCc[<B c0NC'dÄD5 1 )FX葍S]˼KFL8dU'6`6Z%;G9$Zf,B'dFhhĎc=M֢RԤ ε2C-ER e uBJșsM8gXܰ7k.DC$L ZB I:gbjjs:i�v1?;;7o!-��������������Ç;s ^7gYo??XXiA WLJ uC0# x3PY`CNY+Jl3S3!*ac{Kþ%Cml4`X=^BsJS˾7g~1&ilaH% NC_M5hS(]ds!B%ҩH\LeN!ՏYN~@/?=~n ^r<xpeaaEd6��������������}_n"˗Zև.]AT [\a?{o*b#?b`%%*`"a`_߭g$_ k*IVa<LFl-ÚPM\/ 5REC[xm+]6"%0 &.'J>vU_=H-M) uIJ^wiHI½M0y0S0Z>_%Et$ t�Lз oj�x:A/z"2j�������������\\\|fggcv---ɓ?%"l|%(i6t[%{ !<q!ﴨ>VvBg GB&gyδ!CYLl@pK $LD ת2Ih%OLEI X}-$}ab~5n~"km4:R9PSXK8مT3$&^ґk3L%ɶNNN.͛7O5�>p^YYyND~�������������>0700wX~vww׿… 7SxliH2 I:~C.8eUI!E4tf9zSCIzq6?PǤgB)b 48_}I^9j%X/F9 C^ |lȥZLmiѶݎ~3-*4q҅!0SH6,R|l`dLR2><͉mZZz|^Gs:U{#u1?;;7o<w ��������������6>|FGGޙ3g~azzzQDtmDܾ3^j!$#<L혈N?LLqBg{m%"Ķ<KSbˋ=N h)bK@/:|/ UZ([4zZzֹE7,a QSG#q,]^鋵{l|͔Y]G(=%ׇ?q!�=tʕ?y��������������<>677۷/̼OxT/Z]t"2\F "Iy_ƒ4$b1W`.݌m7#>FX:NZ# *](C#1+&Ʉ;u_ xp6x-If|&B!tg(WB0БI$M8QuMі,\X0<e7 :V+R1hĪO|}CبӧOx޽VmP�m«W^DYm��������������[߱˗/_cjnii-'NXiNgM qpi( !dw5}mR fx1< !4V4ҽ%g>) Љ]PR1,n8_ixėm)IsI5䡩mO6SNE[\TiB[[7 &dx1쒾VO4U $˒,b811rΝyIS###?<,"�������������xa~~JONNaۀ޺w^xG T "&|i.H?쯡8FҦѽ1j9_bIF! >b~ DlFuq~ZQO=h#Ė$d=d\WopE$j;W麗1Y.a񾖶 N(<&cZ=E7%2I%h܋2 IHRݒ&l>>9\ɾ5P6h~߾ |smkkk }7�cǎ"r�������������ɴs}>蝭S"/yC\'z!%v1am ن$T`[&QAH(q,#k71g ={`i )Ġ'ކl|xI*!?'%6Y/i0E+':wRL6v%zmDIZЄUL!SH.Ŏ�{/f}osY^T"ϝv=Ǯ\'<S��������������x*lnn~۷/̼S�;/ e=F?֟7TGLAIC E3j2 _̜8Tc -I5$\VKĴoHS̸D= pC:4z +i5M~` ,p܃|BJ L,>WlrЄe:Vu.lJ^ ]Ԃ'nIJr6R{ WH1k�2==}[DիE�������������έw^z6'!PbByIN_S >dA.4h(#F|r 1ޅ,6CqE(Q 1yH{p3M0q6 W y,m^P;#I2Isq+7i �_Nv|XH@ʍxxEwbY0%n�2zӵ+i;fa=V������������� W911qzȔF$s1b?㯱?o?o?sI#+| 9<X'0SixEC3!#%M&q96RO!*S<m.YOu^QUoЈapUI;x'FhmB 8ڃkMTűjIsʼn.6`a<]UoLI73/*qNdו-�x;v͛7qwֱ��������������<;߻vnttGϜ9s|l~rb&|R}ߋ$%g`K= h:WC/д8fQKd3<̒n\dh$ccĆO[ssI%kۦbC,EhgV/| KB:H h$tR1(^\=.r<){4xw_)EkQL(H$-@ٔ\<xpyqqD.K �������������3`ssn߾}aff|x|, >YT G$j>$hy"T|s\/񔴁%B" /&/[IF64N8, G5Hv~Ca!` E8I&=%z�I0W-0> ylŇd}̏>UFUDℜOC5\Sa֣0i>ǥ-y`tQ�^["W^},��������������rkqq|Y" L8ihdvl(‹>l#hHRa.jDMf"6Ģ v,D(k… =vhCbJ`)cm{ӌs3 *I%8ٽ<1DІ^?d&UvЅI ipڔƐE9�MP7$7GSRf% ׳v8,my+2y@ Ŀܹs.\s",*��������������8 sbbN!�^.xX -Hb.=&"ivBT͍W?'es|55%4KHRꁕB dm%.eIMD%FhxU%KdXĐI ̓՟ж-l LcUm y"4ﻰ)1 \11]k'j*5)\@J(M8i8 8} s;vڋ/8.9d �������������'޵FGGg|*)MLDs6gEݬKry,CC#"kh m=I9}(ҀIlfxEY8Ӛb/IX&h _UwꏯB"yK]_P< d$'j)q\ÆM(q:ۣIgOa .8sLGt΄OL ,q|V( rʿů,!��������������x777֭[#333>0]h鸰]zAh%G="!` hͨ\bPĄKLl+qLW]֐7_Mbsc$ShK HFԍZtm5{q5%h,Rks,z#U ]+vjHB-n}C#iYqY~̫ $ͽ !bC<%vC.�lӷ?իoEV��������������B߹YLsE~}6$o(PqM; 1BSN$VIVH L'rR#I|5\b$,D^LICƎB3M}l(4_ɚSa=*htbd "B4aarj-K6dZZ\m2 䛎Wf#U1Jc\g‡)|;jC Ν;_^^>'"p��������������� }m?6>vthAd%&f[⋴%%^B0E(.EJOU=iE+> ѴM4w4H^?_܆F] >o z8׉|RUآUs d_ֶ&m> 3Ga9pmĥ)x GC9'@L$i#A�8q_|qƍ?U��������������;88ᑑw={v%>9WhmF 4BEHN FlJcN;f8@vb J9 {EH&p!{IC49P/+q!%a3&hlpP6[UG59"&/t-3 t6ܖPMl)F!A^}9/ 3fzCsH (XIZhKLkH#TJ9R2e8[C)RrIHU*H(d,Y*WMwO ``!Y�~'}]ι�,<h.w96\e:<:НE.7fm^+B'h{tt�?t'OD<�������������������09}߽pczh0�4 Rs1fi!APA-IUDi PC>Ɗp}2,,x5!mIv)UWafΤSĎxbT*VDBXoNs?Z7[V+Zd.KSʺhi.V[BK_zG~R̥iPF\k�ǎ;?Lw#��������������������lll|?ƥGƱɤ[(2͉gcE(j2HŇ*xYLخj#8w"yj6y$Zy٠rIL1I\Z,Y&; E1:us8f-NT) dibVSPޢQ3-aξ9]x[5^j#^) cut4! m4 : ΡC'OΉgnz����������f6F���������w{0@KIR;@݃h#}E}7sFX&*L a$ҏ>@DsIJB);wL@ ;ɇH"< 5l�$~X/j`ܨƅ 1܂MJRV#K(,.)ӑ2XaKuuό>prm<wg|q����������GU���������xEx'|Б#G?O2NbpwJ!�� �IDAT z{% 1Y=mY(Uq(oP^KJNR[)`NRPܽӧdŲa.9e$ÜPU3&]JD26gyh;f_A2NXj .e| 22 $|k/:z- 5bx,,q^rtt]'+++ҥK'N>y]��������������������8ӧO.\[XXx[od03(RM\[. N2]4y P]U<,�׀YmXU'|FI1G,6Eނ40GӗĔjeǺDc~~) *#8e­<f,jDhwU?h7JJlӄ] D&5:NjRqi3aR$1jJ66�,..L&9~"IY�������������������:㙍~߸X<^CH2ɒITBI#;mI|W!u^&17`'}yk: J?VY0'A&4lcIt|/hj7,iҙ3bX^nɃuW`L/BNu~Pص@Ӆ+ow6=6-*NYrKM,͚ &:t8qĜ|������������������oV<znZmъ"kR]39HBッwj]*𓜨R=S)]#bB‰xwFT%$^H9V#;;ԥy1v&}JH$l`,Lw}HV$J䄐ZcFwyGtpN&hjR[`4սVPGYMNn=�78v-..3g?w? �������������������_N:t῿YTȩjZB$DZ͠JXmpFB2˘'?;r?'xH Q&Loޒ=|/D5r:U4SJd6nZUn8 3%Ie"D*%*~r5O݋$n37šԋ%MdO5.T_x4W#zEelܸt]'t'ODYn�������������������A9s]panaaw=< pһZ'6ѡ@~JF h"Uɉ&w(!M�. &Ɍ1aP>;QBzItejd|RCaIrɢsBN>+)9#&9mC:hc/&Z,b,5iڕuZB݅x+T6r5}$tiԪFgaaak2guud������������������&ᙍrҟp3གྷ2@&�%E0H|6FZ$D%IZaF];:ULSOԌT(9%%'dCRři6mmc&Ƹd$'# *āD]j+B][rsϩezL+Wc(99wҘTfl&ovi: X8|ٍC"Y�������������������nRߪѣG/ fm$-i%.4?2 sZw2*ky3mHA2s:=(9P,dSWHb!3{fU�LmȦ)I "!2F|6;4||F5e4>^мֹ4]TVbz'19hf*8�HvmgΜܹ_`q�������������������fSN:|;pnD|bHq 9 #9TlR/XRJg?v9EP"1$ Ĝo`e| #Ik.\Y`$۶a9%;( ƏNbK6v/6) !mpR!;ݸ40.̕YMm7w[oq,a_P2A[?tGDd�������������������LΜ9ϟ??w@1`xϘ;T?MRD JQ ZD6ZW` HITUjɒSQǢVoiM<IRꑓVu,4/:5z䄌b%p/9ޥnlD!^?2F *ΔҔYL¼ieZj?1q<ú\,,,lM&w?~m"R�������������������(lll|+WVA=/%rOhx &}pw?l]f KH*Y*񲉗e1P]w53R{.8.MDXS:<`s(.I223gJ6}SL hZ,Եڍkً酔8Gc޾�Zv{-Mp=377C~vcc㐈|�������������������X[__wyJ7QS)T!=5f@AF(.d bF}^&-|hl&RU42MoB*J?Nuu'h@(wIQ(J5<jHV5tZ_ b~@2"i8/ji6O~IԲ@RБ_L,4s?n,t`'(ܺlaawϞ=ܹs�������������������|C?O<Ç<O)z% Z`!$S]a%Jsdߋ'EPiELde 4J8Ԁ:^M6%u\QQ54!!^*k'3Ie:\Mږ!96yThjXINaI]ӄ䇲B1Ofu;YJ$~7_lGNjT*4u wG6oܳPqTi;(Mu.]ld��������������������/ 3gϟ[XXWw1\wx?oQOj¤ E\FopF$a}Z$|41M?wꛌ~ENO uxJ*Z&,IPNCNri, $<Զ$ħQ"&qHfcc4j\ŘQvWH:ErJh)9E\HKMs)RNHM)2f$?s9fidiw\,..nM&w?~m"r�������������������xExfcc/^reeyy(1\O䤎 't ?FtєҹDpsDͨ(NFSGfm;aNNp2rKv)H;45u^CMEBTmP>+JIc Y *]WTQ%5gK m&tb")-Ơ1gktx-ijiZLqsDX0tJ?-P[7so[_;v{ĉDs, �������������������7ȣG=Oj8EN種C( !1�#{v&thRlX@cx1aLD.8<.5l#63<-_֥DKX@ Q5m%hL )>dAbIenDTG$W:"+1=>wη6aC 2ceBg*RD`i\SGZSn>{r�������������������&S>_߿*K�4ZN\R-}NkD@1Mљц[K(X�E)A{yDkSޑ(#1tZ`ꜢLMLdS:\_/Ԫk )MRˤūePbybmQ}!ŭ#;IwrZI9joJ!_LХK)9E&xV-4TCŠ;2D�\[t]'t'>*",�������������������k̙3 -,,ݻwt5?._4$t'!gw׫2>,C10HBIh|6{�c)֌ RbL<>uƒK!2InrL`VКҦZXlE:`KX-vcU{)tB5]%'Q\$N=VHO~sRQ^,G∼ȳZ h{� &ɻWWWYDN<��������������������mll+W,///K"50"K)=K(s҄6N^&yCl(:YҊ eZ02BRc qoK[aR0UHJIEK5EU;28ЧěD֘Y<\?73g! <5kcm8`,JZٺ*V*.)v{>v]i5ȑ#W:3s"9��������������������7ȣwK )5?j_YJiYsP-,>F}V`uHH)OJޔFvIjWArߑ] '6) $agUL#FKZ)O#)-CDhE< R\Ly䊚4ݍh>XS8iNUwI(N5~J#ȋ-CWcħk˾}laaO>}ܹsd9��������������������+'8<77wך u,DvSϤ8'I~BNцm4~0t#(]r V8(Y$u!ŪQ\F*X^H5ۚtFAm%O 3.I*%\ѮD-N7Dh<,4.y1fŪ5s(2M~1>eAG~3YC_<juŋm �������������������p]29{p…C{�>)%'T/QR7`hR{~I"d DOІx"?b`L_ʹ.>)x?@4I-ۋc>5Jͦ*}ZGDmS&=2P ?MJq6ws*MD Pu=SWKp|fsBJ~.z:t+ UMsAgӴ.E+dm,"(7������������������� sʕ?cI5atEk ;EA8Q| mϜFt|2HQz/M^jB2jnKV|W/Ѥ�0~UJ;.ǎNEKYtZW@Ö0$Z6Ć̚2>f]jLF9yj9I%lPtl|9r~ĉEq �������������������pCrbmmDo%W))3pr?otsp.?K5"!%IV0k Pk$qBvgs(&$hd䓁?r Hbb`< *FGχմru;$рR5E/iYx -MZRR+8 !<jb#c4% Ⱦ}l~~N>}�������������������O<qxnn<xU^ Y|@NCq4I$ꔄ4$y|E|'t,L4IO|( |*U^Ѧ1/Ej+'#ʸюGCEڸMua !'E(Bľ.8aviHT7UImV!E0/6EݳCŧDb`HVi\Fi]+5�t]'+++rţ?("�������������������brqkk޽{x$ EERӊ+ApʃY (䑜>b%UO.97^ P8Oc`89$x%]<bQ6ߵ+Eɩ,)V32IV22ɕ &c/"}*QPWa#8MB7/6Anޘ|R^4E9g:Is1q i@ �,..L&vwȓ�������������������rN#�lZ.,* k$h|/Sy`${hM|'~x/S)fV)`lmOy!EJzXꚸY4MLU\zIm`嫦xFj) PVs ĭ|Yj -kþ|x0`o#G\=xvĉ"8��������������������ljM&;vWKPiMN(ϹCJ> V\<lXV*|FLd?LR1GA(+ʈO)]q8hRMg22ɮkH}JzUm$ QuZPH^`u*ŷ( PۮZ,hx$ebdi-lۦ\L3!-DZ|۷wnmmO��������������������^Ϝ<yWw~ &Y| _>4oHH}ݝw}j5<et>�ELkT:0w:&xû6z %EKUB:*%eFڌ=d9Ž5H˸0RtfI'fu/SU\4.9TBzYMIQJ~]f2-|ק ortFRV�j+++rţ?$")$��������������������|L~~kk޽ e 9d%bQ;,*YhE,A2�RHˠ3'"4c5i2 4s~h@r%%Ds *%1fX 6]}{RR3,vTl9qґgj},߮%0.IO wR]R_G6Ou4鸳TU�vN&?Ny�������������������sʕ?^1}�]=~48%!QD*i7zI%mSP%5x.Gv4&h,8Tsl&]x0G4ЅZPsgN/H&ițON2VSrE4y%o~Y*a*5Ff˦TѪ$H&;m&Q5Ҧ M##G\ݿO8qⰈ|�������������������M&;vVL26a9BcPu0 sVHLVjۚJZ>L3EK}H?XeϷh/vd2K&D[,ԑ Ę~$cЇVxI],䑉E%iݜ0CVQH%AHs/Ͻ-e3e%ػww^p៼���������������������_9y䑃RBڰt^ rwSQCkʈ]R5̧xaWMKv:a SX4"If�� �IDATnBX1vZ 7N1D9E#>ڧ̊cN;:7Ka ~YZJRB124U#xs:J~wD]M+�Ch+++_>"ry��������������������dkk緶={&ZE,W' ß%XN`Ako & .N^h;FRP1~KRB'EV*HmA9tañ-y#(^QW H[&JenJrKJB1k䒴39Ej{")JY B`ǻ˞pXǟ<�^3Ǐ?("O$��������������������s|uBs#$IKy 6ԉ;[ 7k{Q7叠i8 !czLIw%!uUV"K+ԌM2ђc%P oNK. ZAa5uaasg- kbʩJ|FjF8/k]IoKakC�wuוĉ'o��������������������k;&{;vܙ,FTAc҈X}#KE$ps *ޠ͛5 ׮/!G@}ِ"ODR}EME1ҙIck@1% UQor C=R<WAI]3]*IJ~Q00h]Z}?S&̵RXj#i&n{Vhw^ߞ~.\��������������������!>{ɻ:<x* X:3RI0PIfucMtOd`!F(csrLjBWH)*#9,ORiٳqo/-0 tUVi]@#,DsI!Amuk &?xh 7CzZ!sE #3)%B؏;\2M?+.C(K.73ӈ/noŏ��������������������kɹs>uh~~w3a [hw&=$b$|_3}Yԣmѥyԥ|~c>Lb;^=(RI3~sℕ(r:m 4.IG?2c)Ør͚ ᪠V%=T=#Xٌr6LqQYʄ6{/`:)FvHZs?kYX\\<3L:~"$[���������������������˗4Xcm@J慕zfhXq_kɡ xFiBևI;+qϗ@1 h?MjRwܳEli.K1KRh٩$K}*ZQS}BϘ ,|HJ/I*OX}IJXST3j6HN)&1/MM|DV k1K�7 wuו'Yy��������������������\__d2yϱcβ77}F=?*ZOR^R;j6{ UPL\iM&BL{ ϖI$ .^' *$Fn`^HU5dDh XSER"uЌΥx 6Ah5 ;b~ATԪ#+ ):QBm!ک/b}Mg޽vرx_pYo��������������������ɓ':x]aAoRr> ESjIɒ4;;t?v~Y^ . >䟨w 15(!$$(mOx-%%p͠&Z=,v:<*t4)"Eؚ.ļ-T7b՗-ciKK}8>l,$?e^k-k攅}fU{O<"r%�������������������/={oٳg\ -‡`Eب䑩22fjԎ^ʭ'xcݜ2>h_5L%$b4%^>1m&ܚ%t"SyP6'hxdXZK<*XB)qW_mt1j5Q#jJ8i)zW'2HIlM 7KKK'ɃǏPDb�������������������f{ss/_^Z^^nT,FDuÙ~R-4L?u*(џŒ8ow5Y'9p:-]钌Qj4g'.S# W**;9c;qf5IkԔ|\ QȯCC}܌ĨkX¦`H_ݩ $m>R_AamYmI,y5tn5Z+pCr]w]ٿ\__KD*�������������������M;'{;vPGI)߫葅bc+Ɔ8ǁ4%M J3&aLуc2NR#)u%ġ!P(2h»%xB۳ڇG=r0#0j+ 6 OrK!N"6[lZ/r2L|0ae̜,Ka 3V7.O?… R�������������������MgO<ygnn ƥ!9!ŒR +'%ZOpBRܽk5 $Ռ~8Z7 ﳔP=* ;IxT jCL|1BG/tL~$!eТ 7jƌ",ёMSpW\Im}oYxK_Sbz=*m L#VVV>677LD.���������������������"[[[ٳ;{P,XB$+?h%Eܳ6 H1q߫gꤶ|nj VWcI)wIwhưI[4Ü8dNע3׏If;[mG[D엲U@1 e$5i6cMpOvģIM!K8]`5jlvR`n}|jpGuӓǏ?$"O���������������������O<˗//,//?7ALŞ6BK<ԟK\!wC%!f ȈPJ<G+J>SDgjNbH9$i4OQ)Յv:?H.4c_FRAb T ZSJª4,,&G&!D^vQfNY~wjRJl:xH,iw};㯯-"_d��������������������^SkkkL&?Cn|DN,̰g#`E"t)I=*Y"(*%XMj) T|#mK+1+mw' >jUpb5>E} U̝hb\43E' _i#\t3VjF焍5ӛF&SM0γn:?:M}dhJi}:@yH߱)rsr6pd߾}_ꩧ?3U��������������������wSCt! NP/3-K"nf"1FY;]nD M̹5#%E$E#Q &?ղ}t-֝3[uNpS5f\̋?I$n` [u 48srz)=X庶Osm\?LVVV>677LD.|���������������������_?ϟٳg={&zF#⤕,$lR&ĥHBb`S9ebRxGa$Xj6k2h1]Š[q&)03qkl0xƙ2[R w+2Hhl&f4Ւ,R0KaiEڰ8.㲜@t,X\QiKt`dav?)fMՏOE[zod#{DžӓǏ?$"O\���������������������/ۛ?t入/Np=2 cY{'|X<_B)k\4A%;05IbW"lh&EAhWcHBZJ~=C<j[]6MN떈 i͙u)CEƉyiYG ҦH1q*еm?m \ƈVJO&Ȝnù}QƕO"IJ54~M9xi+wq_[[[[Dj��������������������bZ__p2رc)JN#"C)!u:9Lb,u$cN`YBJmT16^!f9q&߲#4ҍT׷$Qe #1t$;!AXQw_ܽ3IOڇt(L{K,]JQQ1Az)oԞ]"90kgEң%'rj;<t?ܔ 40܈b'Q%l2nMLq ;vמz<̯4���������������������;y]˔Z*GR( h%J]FW>Dyɝ'I$]4!/Z]b^Xqv3}INLjzOb >t.څ>S(L?ΉږI܍NEZa{סK4Y qԋ$yZR2fQŘ8κ`.Fm`ͽ�jk`\` VvlPвvy^76L#?x}'OOE ��������������������5ٳ;{왰&~]b $% !!c6RH+VR%2Ex"޵hG IJiFk`Npf1;Z5dx'VxRjM;aF9OPRrg>Œq+iNh$Z`sChJg1146Lk韘I0A͚ēC5^iy*>Ӛ> oyo;ix Y^^~z2suu/S��������������������kɓ' KKK_`<GCNHbU(!K0ĽŖҾD*h&VdE 3Kd_=~ZɥV cPbI|(ee.pcLYELK?Awp=БX2,⊺lŘ nJR%rłJ5tq3 V7:C{&',)r1(6٤,xc֌.`ݳFu{do_y񿐍ᮻ|ҥ %��������������������&9|lnna^+oyyO~CB/d J).\G%mg!h  ѐ)pCERf3i0OuϗgS[y:rH27N&t)=% {MVluU4]$aBAj!Δi?p/mi$Er&F"\IC` -P]{lSRbLC>/to:sݽURKy4{D=ru+?/-o  <xN<"r2��������������������\<yr׮]ٳ{XW]vɛx̽^|9FpgUGFRgT,d|LJaI:1/^HqUH~=! hDܐԶھJ5&xIfY\~zZ漫ϐJh11NԜTVMbߨPn@Ŷۢjhl$P)/0A1 (d|;NrMõbyOKnPny/|1zWb/Ņ?^]]/1g ��������������������pr…YD~رc|ܹݱܯ K 7wG{Yd2BLjO4wX.!;#D۾5QZ9I]N/IjԵ#D~!$Bͽ[U7ۚCB�ibJet1X;fsKWM4gŔ.LK=f-~RvnRj (Έ)6�R(H#*YɖiqISشmCe=d,]\j@ܾ}> yq~޹D1��������������������eɓ?Oy;<'QYz[5 #8�MHKAgB p"ި)*P?}w4) )QWI':@8%(MU)(&-̀)p2;?{v._ Z>\H)Y0PV ;r2ziS4PکKנ/zj6SI(20%fu>kS,\tK=+KG~9dc}udtp=\xO*��������������������8|lnnay1+oyyA>#J'V|_ T=ϔgq))>TkDav_݊x$"H-MTl2r &դ2ޜȒ=ԓD,p -"1Eiۼ 72%.#/:#KHA EQ/YhV`5sMCQO׬$ F}6a.3ȶ1/XSɭR6fYZ`2XzXT׭>+_[ٷozԩ/0���������������������\<y?k׮O={vk.y*p| t2_r>w‰T!U1$>RVLQ]HTBaYdeZLy4O9B$#f!cЦzY%y!>E& 02:AH1'V"5Dܐ))'~8uy] 7H+/deXV 6I+xir5)"jiP͡hb24\ě&f#·{1gWq,^?wxx���������������������n.\OD;v=wnoowKx]hlEҞD%_@K8!l+}"3. ES[\Br)9WfLWS\JQLĥYXRVE7Zf ">xŹ!VLqV# $H<ħ&jĠOLTF)11..3$;BJtn6ETeMeIg"_,_ͼe#OyDn;d#> y *^x-")���������������������7O<#ǖ?u);1wxN𛫘"$R< k‡{ƴn>|jg9}ߏ9"A<Dy)鯙@:.7&wq/dWšjIcչ QOס_O" +I>Gˇ&Xc+RSDc!qJ~r^:ԵZO-PcTTmnxvᇫŷ旡S7i5�� �IDATY3$;NK?Þɥ[ȣoxxS:=s[kkk~���������������������f<|c~ɓwQ{[|@^?P>]+5K&UBbJX"OĦDHHQw$9B܆>TAMiIq#Ў I&ᄔ,ӄhVZ}Ҩy\/q҈~asd_zNvF1\.ZHjUop c3vÜ77GjL@hq/N ū5M & $z/_ 6vXzXT׭>+_[,~;:u'EM[���������������������؉O<ywz?<{ٵkoCo[>S?0Փ.$FKL.KΘ+^"SV#"I%$@(w\,H3t0bL_릏tilN>4}z%T/eyIcͰ LQLPMnIکfN #IZF;||ZI4tRS q;$3H9KBP/ Hvm{ǷOuVa(="o!xL՛͘KqaasϞ<����������������������OEW=K[[[?LYXZwAQ\GCw/I+{yO}MJ'/<Ҋ$Q (HJ+hc>"^wݰB;D+J*mćS;.I(E *fl;lng!ţاZ1)Y 'dY<iS3]kJm7>N7- 1%Ǟ1_X#F]41|5$Ebأ!Iyß7"KKK^xE1���������������������Z.:uG---}~H?,嘔AH'%|!=\(ep ךbh?v�u(3eY"3 3cj "xP41+e k[|G+>ַ3 zv1%<(Kq'yC$ մ7V6Ĕev"W mǓDMI&EզCIqFŽbv:a?Y\8 5:2Xnʇ-G7_N<)X_TzsqM���������������������^M\__HDeaa666Ѫw^y˃?p@d©zjRp G~F5fdY.񤞙1Qy JH&)RSZ\ G߹TV,*T ,Ȕ9 .hCL|sBU wddWdWRzc\IMD#ILE\D-H%Gԅc4^N3KI^ 2"2$y(zfΞ\_b60&b~mME,MS+ʗ>;r֠o}rw'xo~B���������������������p{nx̙ۮٵkoCoG>?RSA7Ik0Z1D3AbJrjrFnbi#!WRT|ȅ5#"_kq 8Sk?dC]EJExpcF-OmsoW02KnWLLiW"Ԇ]d:zXcEv-ɦK:oy"eCR6[Wj]YG^&-Xa^Z/(0m -5@an#I)x޿>QyD޸!N=&_crtLGg==x����������������������e… ("v_zҢ,kE`rI>"Y+ehp^�F>|G%V$ZEdDz1Q"Ѥq/)׺t?hyZUi5K2ʤoH(U1/ )n PݤDEYQ[|b/I$qsynI7_L/Oı SAGJ,"~ R^1}!ex;]<xM) _3K#K!{Iyßᶱk^x���������������������x|ԩ>x]?~9y{2Sy%#A #R[EX *R%d 0YpD9_ q^C%-Jj?/.MEܙ~m D~M_1[S~~*{XRoQ݆ XYx|"w3Nxh易k+#f/l12bJI-OVs[Q}>ePѐ,ҩF(s3s}Bxk+- :1Ս$Hl?H8kBsƚ0hM3TD|H.wsox?)X_qp^zgꧮA��������������������̓&"߲w_sݻwHH;r' "%#&Ĕ |=cKZ)靈Is ^Z}Q i"mΩ**~.uum4Y8'#J#3AERFτ+ͧմFQ _ڕ#dh#)IÜn5Q:9EѴrD+ex"1FC?KbJ@PMC խscbs 3ֳh\3S64ru+ʗ>;r`~;SN\f����������p bf9����������^n>qw7v3gvTx׮],soW>S?PR,r2?N_D gU?mUhȢq(I#qϐ%'JJp#y̾K4⋕PRwOP(VR|Gme0O豘;gJr_pl#hQ(#mjqeE)v,%#WbgⷶP*vTܯD\͘&.6Ӌ%'vIL)RM7X/ۄ*XusI,-CO#b>yJ俖/|1zsAR\XX=g������������UE����������xExg~YD~ѣ#kYdWhJg˹K+S; OvosSߵ6\Y}YF{yȇ|To" (HqjG3GRFM+I2{YhR(|8I^tW+IŔZaY_}}L$%-In!}ӳ 0Th pO1iV1Q ˅1nXim,?*Z~V;+_xq:.aUL)õ*4[\~ʛfqCoi hifw_^Oʷ~w=<ͫ/VWW.)���������������������prԩS?}])s<*Y赞 U,UHRJ6ŗ&,𮕓R^.H+�dA"b5ٕ0+gبcI4G˼\9Ӡ*,'"T~0]u+gYjIeI)-CdbbW} 5jq-%-]>#9Ļw1#Ŵ꒚$D&Wu% 4q}bJH'uW'hJtQNOqJڊvsAW]V4V>$nGWCN%{w.\~ ���������������������ow-,,<q+]۽{[|@^?P>3Up(E"ɞ|\@%b$šFԤ{ .^~)[QS]gWaO*%R,//ڔ9/dG"(BV7*P֬H5M əZ٥9Ekq~2{?,QhA Ņ_Sl,㮢E]v!]P٦*Y~B:B h%"- v5oa\ni$䱧F.MK+wQYҧGΟ,7>;~'iw����������������������ō{㎿{O9s涗]vɛxz==?Q4p^@a|Ze$$#RI h܄VV&QR ڋ7y<<.=3q+m h7|Y<Fjӆf6skWYHS-O�MjK. 7䔒!VTR؎ )&7픐24mzB$eya hyǜk6N$9Qa{) L43vj/�kAz[d.c`k=>"oA<&W~_ ^]]K>����������������������!</ow}[^Y,,-7/?Xu&2_\4ص.AS'Mb:|jOCi3R](D:՟5As3jTq#"6+[D`,/$do^jҍZJ{?/>#o ӏ]h`(8QZw,^@`i~2MmQ7yl!F%%X`ʉ)N 6u4S7oWZ YiAYv3 UHBYq|?!oÃO o[]]}DDS���������������������FO<W.--}v:wǏ<SoKa>Sx*इ6 $k)%C51.X Shsg˫6<_>8c0V~ᅜ*XI*U !KK %i],R\J"uƷK ICckD%wk7FH(Z6nY g:JAJԕ m" o8s1b{%EFΛ}7ԱuN؉pp3&"(V_CLʒ=65ky\VQYlwsoNY7ec}uN{w/յ}G����������������������n$Z__kaaᱍ{ڹݻW#.!R༾Zԧs켺s;Tz^=oo,Ҥ>&8 \{@GB??=?qo P6aPhU&*_IjuS\ڄ{u'f'dd#}MvY>gm-;9W) ;A,,A5$";b1RQ1tq@!6&N\C4qx;``TB֔hJRN VR{q^sm*Q#Ck͗g>sU_V=U4 '4 ;P*B /9 B譹Xg]MAo[a(R!NNR%тqڬ$BX}}!"R+Z*krZ"σTϤ8:='nN57OC=|;m����������������������Gv|9蠃~+_AS]ZZJ}q!="oz1_!E¶w KL]+;S,znPft2)9ڷBLO:h[ >E޾p(JMnām\b]?U41KhKIK)Hv(8TC*q0eBȑZhmd3#Dtz(XژҺ][|]9ӘS/뾢UnQɗ˦D9])Oyw;ӷݵ'+/M6[o7wy?q���������������������G|x77yWqgٳg\Q6=W]+ok³47mw"D"Y)E6AMb sGVs&“- IR[S/Fz^tp1‘f:!. ۉ4"Bit]{-T&8Q;D,{Bj|ð**w-qLsKG‰TPFiZՎ%ݾ]mar)JF]NZuxE~+Z\"<ØF M`29d^*E>r*dVm#)qiXxvWUTWUq:C>9m|獵?xG}[oĔ���������������������9/|s͛o!=䰇sb|±”V{=}M�iPK›WF+pYWE'+-B6b"T^TLBsM~~*RqcJkn1YJ[PR纇<r(]TǑ㶸Mڲ(%wE1RfKC"׉TTFnx$IJ'w>Y]V\YՓtYmQm{&CHUUHW&#XlUMrV1E7ƥFN;&K'&KrMܩvY]c91&􄇜Ogr���������������������`w}7?jϓtHfט\JmlMĢk e::*<s*Q,U 3kV^c0uAO)GPo7䜒/^_0HlMEcǘ9Ðꐢ\Z~̓84½%"6sڗҷ'V.6)qo)VN-H;Ov*rC)P~kIzăb%&�vsVQ,^JPE<bemm$R8%'KG̃>1O|ѷ- ����������������������|6)B` Q%A4Ri]&qF~xeaU l0*Z/+g+nu&_1w͂s3Rc7݁4)|Õ6OgsQk+DY8z7MёxEF93,TfxC:=5~M!Q"~""[PMi#ќa[6Ҳ.1i'Ŕ&mu8ݥE[  8M)&41Ebm<RzJ֥#'~_}n����������������������C.xG~TJi[1UU` WlxJ]~qEiDGhGR'~e R k5}8r|0-Q{>چ٥ {J$L?! 8?uL,8]"yV(oTQL4G7 \ 5k)!~kQ-@Ii2g.6CD(ag$R73wO?Nl=,mc[tՓx,50,ȧ#}\Sgbb]QLIlVBӖ<ei!'_t/_ү~={\X.�� �IDAT2����������������������G=Ӽ Se⯓YT!ja^}j~+>Q.֔~p_+bQ7b^?1,:$%>r-o5N#wI;DhUؔ6~0Qz\$",P=m?\"VFʰT.UD!;ݪCHj."g*W27 FZPg^$]#ʫ|82Rij#>cZ[.BbQxH,,XWJ힖|;vxGK����������������������?qѯS0n)Q³h'vCg>1گX4g>j(D;6WkK}%Iyf 1Fo#HT+J #w+ZpDX]@6(YC6@s]]P,wV`#sɕ\̖9P٤MccŶ)}0XvGժ)j- gȢէTY;J)!P=Qk4.0Z4 xZYyXyݑ1RE;3:EWZ~槧g_/}} ���������������������#3zgiRjyVu^tS5_.~FyFDZoU ?FEk +(rp02"&A0trGΊx$R. NbXJMFz}3֪ 9]6QAyX- %!\H2VU˴WzpN M)E ҿ"|4?&KuO}sfi'~\b$R`;r9u[2Yk=<|Krۊ+Q<KG,={ߕqN���������������������` .Ї~T)e[je#=9"YGbE.5)%;S m -z-}I�MW`D#^`2ˢy#j0fÊvc !PIM2 !]3e D8*{ZkrT-ShFhc~È E 4K} /Likɒ%fb2[~&`2^*>U⋾],H0y:st~LJ䣎j;)9YFF:Gƈ{U]VY~CcN#|֮Oڗ~S���������������������XCWo;zY*0r Q1c2ԽeeyHC: ksRR_?kd蹚H_ :Y[Iޏ]:w_16 .f".dL6X"-Emdqh$qomk$YgN"DR`9PD%"Wmxտ)R]Ҧ[nU9EyȽ;0 ,,hJvmsH|Tld/6JY>Уݱ{ǻ>'g^Z����������������������9³Ozi8su%mZ\l)j}Ŏe(rZ#_E cqp$IҜ@IIN^ː]uo>fz(Fbţa^ӬW;c-T0XHc*iyiUFPHYuA{bǯ"P\L9rW@ciWq:Y(e9l`^!cuA)γ'U͎rKIY7gH;σ&Z<Kr:hg7d"!^u)r1,s>KHTx%%p9M])|.mΏcm_>t)>KO·����������������������cS7ڸ┢ FUX`kzn!4)780E=#BPR-7˒&n!w6sZR68FQ\HJ7pFؽ84I/Mvd1=obXwP&IXQ-V)m"/ )LщV.&#| I +5qRzKsKib8SD%G*~] Rsg`5TϊUdyBܥBb"֠"]q1b",m]R䜪Č.=/:'~?xND����������������������zGUQJ~mS(.`^]QEI-"#ZS:ڱV.ľn>ekمj@lmL|K񉩷\O{0URlc=\iJE0R#igì-QCٓ$:-%;SEiHf2务<?!)E+Rf*B2f E" LCG CMJ-tRr*aƆWt<ۋK YW.zٟwbƜBqg"JiǞ |֮O[/ʮwZ���������������������xUl;fkIσbt)::"]/x34 R" I^G&dQ.6v|v0v^B`ز_Š*JdpoI}j1?%ٽ'#y`ұ‰ _yK= 7*nI[hX)15N1"%" "1Y]*^@!2!r=c;^.*)*(W'GU ZgA<7_^#ǚRE=j[;vxׇt%As���������������������g\䧞!K)mM %IR)idSG-뮋l/ZY,dm n@Ž7HH݈hDRQ{\+0[. Y Ĉmz^zIa19es!|:$�RbsbiZiX׹bQfK:n:㚢7+r/BP VJ%?L8-)&_L5ѧz"\]`-)-<͉dz<BT<ȇ=9^P31$1A4n2iGS}y2B9Գz򡛟w^s'-.���������������������{gyOzpІ9Uk0'(>Ҝ3j}TqKd0"ES/.-#Bd*ri M0n b’>W^Eiם�Y]B0[~ U@T$CAHi5)𣚃9^PMECե9d1ěUw \( 1"kX꽬NWH?.=PwRug}Io<O)WJ"O䱝yZGDpbm)uFW:#E\46^QX^y>bE<U;]@����������������������G.~o_zR:geY3jblA([]7X ]41K47G9O-r+loF ;d;? DXgB2j|"-ĺ(%M}lM4*H%5QJ[jh0xxd&Qw~7m!!O]wfĂn>*NY>dy'"!E\BG\ABS*V N #]GQ,%YH6< l)!RioU=gR$[R[4]1j;꺗pؓaY>}o+}���������������������{༫.v;~v3)aE0"Ta{Q<P?%%Zi-Z|3/[)/(|"Mԣ[HWuRL a9 ԗxUl>D_/7=2Т<oR]o$"Lȥ܇&55c3SbՅub.,]RwHDSzK2E(`h[5 IX" 9'G}Łr -@? E} {lA?94Cl2@(SrR/1Q+"NߋvvLȃS5g~aCZ~?<;7yI6���������������������wIO=/a(Bev*iN&M`(j= ^+.qNiq([ a]KONR f*jEvE.nzbjjSn+FeT9VӃ-*11HD$BNgoJ8䱝)뙳4/=vG+V 2F[TvF">KuOi +T&iè0&ǹ@%{BǽPd$7K#PlÜ"{tm1d|(Z>ts.}>zU·L.���������������������`gͧl=НRpD2)fU$ swۨٴnɘuZ޾Ԟ(V`E(يBlݾdE ^;lEt.M4΀+2.Za(ځ,]7j1 TveYJgSZr9'ZI~ vCzr,+d}(6~oVq TeU2__ڥdzM`ZY+sVu[.ԶWb{l]I%E e'E;ejdnUeIs<.a]:/:O8z[���������������������@oK=#S$aPig !'WhKuVi<#U6&~D)z qd5e{"* 9..?=~/RQ51ugQ?z}}ilf”~k!J*f�ǫ\R+rrgT sJZ*zZCT%ڻ4Xߑ+o  +(Qă!҄ r]r"b֯o>,NPQϞS~R?'JriU\*LC6|%L}>3qr�Y#}8V.?`!1'o#_үz74���������������������@JW^k1$sJQmDmax]!zttς_}.!6bqY(dcRP8uA0&M y}%yYbq#uIB8BYPU4#JP rtQ5myhK2F&cM3!V.s aQ? -\XxO`IwRV.颎~8AOtRE+99nn ՍQ%')@ژ”!.yD)ZIs8D)u'>QWj#k-?tÇxv���������������������rƅvN=0 %sld-+%F""*E(]kŵ韦/JRK?ֵ=b]ٯ+UռgWuyaO)ib"֠Wyb^p"*88HL1Y_FZLEͼ}6ز(#F(0g*GV>/g-SE"Z!in#:hJJXa<jڨ:WTN>X1Tk㎽Fleă7$OC(X Li0mNc{Z^H.8tOeR=X~b>kw$;b<#ˇn>!=Ǯo-AS���������������������68WQ6LnRcy//ɺSJ�٫ īQ"t L&e}1HvR덊a~& ~e hd&1z IOP43< 'X+˜?ug+QϺZT .j"h=TF\0=s{d. ~fID$iX}[S)B 9Pq5aOktrFYCuϐ%{ê8S♒L_<B"`,`<,uґ/:ࡏmWw`���������������������GnJ%C73P )֕f9*RDʎҬ [X0B_]]VܫE_fJcEQpK&ՌCmռڷi5c.&]1CLf&)Ĩ94hlg淛]HcHZdqGj$ '!RiǿKD,&F JTĸBX]TD*Gf51HI}+=TX>"K2Q$*),+.GNrd'Wu;35W׶a1'oÑgz} ���������������������~xŕm;zǚs\q~:աbnfG D5ک]oswh$RŶqV}-tÀ,D<I8sɣH(P!i0*D}zjBZWPWN Ʊ=+@ELRFRD8!L.F$ޙ8$'s8<#9RU/GH;kVQ<]U-~mMtҳ*l+ynS=fj!ک.>5.1ѡn.3*Fy%lz;٨ roW|qڡJ_RYk20(ruq(^Вwq.7zqy���������������������<g\ etK旬 C{XQl*H^;wQ_ܘ-Lne%ȯk"oR|+Aֆk0^܏*µE-B]cJ}#TRcl'ڮծb/Zk -+g65VdTrtQ kF8ELMVoE-לH -j(!7:ɈGz+\Gk1PE9H?qg~`[ۈ~VBv:ۜۗ\$� Њ.5QR=J<F3EX;,}ۻT0sRY>OOϽ֓ku-���������������������<ͧl=ڐR:'yk8wAPB"?c=,e6rVA&⺯/(Bdi|!2Vl^. " حVU6 ܊bg]/ͪ!qImieuRb"_FI}(n]֨#)Ǚ* z 9_R"a#E>]8s]JzèDh,dICa]ѝ? k 4M~p3(M"c8� Dg:4YȍH R;wr>^+<kUB`<))adߞ*Li=b7B2$9hz>Kтrґ˿a?[~.(���������������������X\|oЇiEbu5Ba`? Kq؃(A%zR[k&}n9ĵ*pD5ȕ8iۅYy�� �IDATF7g9VW&x'qE[h/wW|wU#aX![דf򙻱({Eϛ)s{)XY9s9C%TH?c*=U:QHVG TjuE,YPVx+V4QJ j2VC3 !h"<=\=j2Z1kV"C!hqQX,Gjb(1j$>9l#Fy{7|֮[n|Ko=n���������������������p伫.'{|c#Ce9Z'#J2K;t<+2xKIA~XFi duurmx̒+[ofȭ#F_ceE3) bZyv]Oˊ7׻P(7M^w1 ZBص3̿aX'ߥRswr<+Ɛ*f(P wbPHIXǍ\S�v<C>bB+ڃr;gŚժE;aXϾ Egڇ-C5&" lʣ"NLiQh?XANDo_gyáG-?i돻cw}Mg^&�������������������� /%'=ԟ}0n)ؾSD*̺tNV*{9LK_z(Ģmߢ6ע%@B۾:FTb CCٰQ}VXƊIuW_l+jA)i( TE5&JRHF0 Qjܵ^.*&u66k&kXZ1é `J!&Nbٜ9/xw릚ZxOA!Kw6LPLw]ء=d90%lʭ0c>1%8E!oW|nKQr;ymhM} OOp?k ���������������������?4NziOz7R:Z KMx ro?w$ɮ+hYD/.V]m EC2作|v񜄤jyig*IՇή>7D/cMӐn 75X^sLGԜI1AyWإEAlYxPOC�4ѐ$1+gsG^g J\6I 5TZBJR'nTe}E:ȋR^ m{J^HTMqf8%PJҎ̮w|y>Vct>qybS HtF=,,SE'r,-W+&B?䞡g9Ҧ'g]q;p����������������������?P.~\zR9'WOLTR|sG #pcfMBt}rpQ~8جsZ5)(afw}> Axc+VKFVzQK"v%=nQ$ J|>_?DġOء1rF,- TʆEr(bLJPVS{\u 5=wM'fmvbXujvP"j'SG T|V o.ϨlY]Uu`&ZH;?恶#TV f Uc}/_wg ����������������������U^qEێ^>n_baHWg8o#]ˤWQ|bmYI@TpD:bhSջR\lw-+h vϋE6K2b ?<EY hBdy5Xo667-+�r}R0Wmc05M^vFh8H?r!Q.`CEN_>HF4w[Sp0^=EnvX}KlRv5PJZ !Əue�c]it h)URK/)}%xŒ[>(;W/?t>(DsWq EOSL O}-s>f=jyy>wtÇt%.���������������������sƅNzک'p斢=7ְġcϭy Olu<iSƖ+*TwP"栢W]GuZ=0 ^JEh5^ؾBTja%~X`/47zU<e=vV든VWC=2W̄K;h.sHsfRq.cVQLrf&&\y~:8RaJה$ab*h&T* }{FIU4z) $XTeBI&!ʈӣ߾zFׯ_s =^e03^Ga\m0!0B_?֩{IS~[O7���������������������=sҋO|ʯ7D)vLA1S\j沢$Ɠ%(e^>5FDGwwRh}mE w6UFzk꫘&2iD PD.V9|4B+J2R G0e@Q@LqC )Nzv^\6{kՒf<_nc8DbQ&z9�V"cnew_Jт !А 8vgDbH f][Xsg)G$vLb~{3`8bPRTUYRڴ<_ux݇.���������������������p?M%<V/8GG'# fj@J^YE^kȋplZ2/@6^a'/f ZV5F�Kh}2`_gC_p$”90Fc LZ;P21Z-ʇYn u>K!xo|!l\3k,rPIn LJME j۵_C|Ԣ6Gmx ^)~9geǮ'Uz''nisZZ-U AN!s?d}fVrcec01\%c$:Z7E:Yѷ͊dEĒ[&ql'zFչwOWt]>��������������������~+?m)c!!՟ UD]HusŎ%-Ȧ{hAD#z<!iVVGz^"#`G/>~QqC/v D-{E˾Sb"E2?jy' Ī@XV)cmR%!"gC&Ѵ XuJ vr롏?G|EQR* :\DE)U|ywJ-1KuDJ!&Pm%K 3\ ˩ Iwrsd('} Uߍ*وii"!!`8EΤE4%{ zӖ+���������`f{٫Gqŗ{���������M\z Ν/"D=pe8WIRRb%Q;dUۧɂjYM[ڒ]kJaCPPv+5UO ºq0͌ۿbH5,,<ZQ@d.}^N ÏQF]e[_^3'ELN;-jp*%]/w?q{[#NxOn| Hb.FŹ<qxuhzA\}e<eFsxEOJÿ${uF0!oFv:fkhƕ& #WA!HW=у$י? ^,Yw.//{ەev𱷾o{��������� NY N��������Ig[ m(-&tt YϺ|NTq>US+}l/R1jW*hP^#EEt1hغ~⾸5]Q;(\ڬbA} 05ɀY$*U/{ib#c>pm"%A2yK\>}\oq?}#hyh:W? "w g%H^@5s()⃦`g'TNjuM2&PU5N V'Ę|wq_M2K'9\#GqJ( gΞH8dUdYDV0L+Mwwun}ߕ~a���������>┵ ���������Xk\|!覔9# ^lHIymqQ߅ /'5LcZv=n1=üpyj54F߯ 1KTe]')41:xI_Œ)uږsU3'`IHXKJ^ML5Rbc+JQ|忟Ow͵_ϻ<L~ο?_ONe#*C .@>J_.)M+JU$ܿ{\QCڽdӯFI6Wq$>:-m~}0}*CULg}Y5-v[vڗ޾wN ���������p�qq ���������λrctY\x^`)N):ϭg-RN%P5~-Jm?Om,R՚OczDxr{KHLe&|Q}|ȋ$SCG)5wY VҹzR{Z{RuI2u^^ۦW?߿On%S+wszOg]tA?v)ɈlJZA6+@ HŔ(ËMу%&~)%(oY !MlԴO~nSsǤ΢A~m|S/ɱ>I1ÿE:+5z1&WK;an~ӖAs���������S6S���������Ι䤧ús󖱆WOѤ:EݫCja?~1ž$Oݲ:tq+Yܾ HJ9jmoD,>/rMvK3H%)mce{FW86")=(P^^/w}uo񥻿s˔ u{'6+[:`% /\ad-D)MoTZ|ϭFF(֚uHϐԋ-X_ 2<iE1qZk6 \4*Sm_p"!w:/\;g{>v>~ov���������AA���������U6+x mRDo+Ͼ4t.lik6S /|1_fD T4:n(|8!Iߖ.׷`DZ`_  t jd/P>j,j!~ѠB:z'."+?^w~;]n rxzԳ^}~~)a9m NJj"@-$$cnn׈ ~b)i0Hv5E >b!$&0B)?}p2Eenn< n%41 *S O>]^m:RcNb]_ ����������~H NY N��������"_^#TJ9ׄ:9"8$g.`,ESQ8qkYU۹lV0SQSaqVĨjv)Nll4F nFgRf]\jg*7G-u~5OqsM:Q"Pp\B"qʵ~~q't?K_cG=))J33y?)u'Zf'߉WDrt%"bD)J!6 %h=Q/+&aPCx쥍oJUv2usͳ_L`Cb7]7z%h����������2S6S���������yWl?^Jյ:}*┺Dq"}-�;ڵ$jcrX<%Ibdkev')Rb?Qdf:n2Ճ5禣k#}# SDE:I?\I% xt-}~۟_>d19wcuE>GTʠI!G�!#T][)sDъB |a|K2pZDT-pm+)3!R|NaGK /=GJXӲ꫅.s4ŸΝ{ 7if����������?m���������}3/xI?g`ݺuK)stHQmj^T;D!ar4X\E*DJ?_âe!4_W6<Y8L3U1Z_|%uq"H0q*N8h _k#ΐ@@1%u=#:ҝpDR$c.]{|;_wO~2,O6?㕿 Į$ɜ4Ѳ]l Qj%cCҔ"HۗsK+b}@tԸ&_+wuM̛z~gg쭯u~����������┵ ���������a_y7a.J,M6CJrUڿts4a^PDqtRe@hcb,\Y84eLzYx-/~Evmafd_K/ru Z۟+縞}_͕3{9JJڨ()p _|w7v]wE\5Xt^u~0<ڿjPr*/:ArK쇯2 b%qAFD3 \u/r?#'N"Rl6cz5V_:rL' ]VZ:F/<Jg?);חd_KxZη߽_u���������܋ NY N��������__?Ȕҹ]DR)UqU;Kq !ֲOz!˼N:v^EAgaaas6)kZR&qX)b 򳨛f3f$<d{Vߓlęe+8B G$6xs΂nxK]!4*岕|k[膻'LvOOyx#ZJekDIꋬ"E[EN6D%QEW" w s,< 5{e>wKq3{QA9@E8ndbJ:XS q3O^S??rLIfT&sݲ׾]ޤk���������� ┵ ���������Asޕo;I?VО>-Jo @bBպZȒԘ)iBUH5G[#kGCo瓫ho;)09K$ݰ#?} $%aʤc_Ecq;@cuW( 1̤a|W^]k9eEئM%]T"8I9(|W/�=8J�� �IDATD#^m074w'ڪ-COʿ*G#G҄ɢg;aO;S<Fצ)ኂwkg!vDGR ov7-'C���������>8em8���������~PyaVJϝOO C4rv_%qt93#3xQ7%4-Pn*h*<waˊùH=B0E \"#6Q_]6o7jlt'6sך G観(zǻa5o7{o{^79i/y=u7n9o-E-ZF'$!P)j 1֊Mp2_&I!ԅfaJhD)zL)ı3h'˝rKY$r0͹pR�J}'% 5-`Ǡs-LIG+:SzEkRYfwu}o ���������'S6S���������Y/:m)[XR:Ռ醙W2SF]Obwy62嚢RƂh)>SU"VU!znn諸ǪWuvmjIDأsYrXQqV̨_I8fpFȤde4^f{n~|_;>w_ܫKG?7O|/aRJy.谖7^7S G<.Hh P"p21Ud(5*[a?O,8ZtoF \`=6n m(GY A4KqkOÔe%.owu>+/n����������)k)���������pok~59#WRFjuov6Q|m:x. PRP,&ŵ/R.;)>ŜUw9]N 訦j >Z7> fU3F! >^tB}C5o"~hwycsNH9m5$I)틯\V%Xށ]$!_;E=V6T"ц9)qWxZkF zJp_{Z/ZKor#R;4chn`Gb<fwwv˧n|Kw%���������Cm���������yWl?'wXzn.(l+r]jkUok(ؾwjWaJ3wh.1*ޤ\[Xb)p.ݓ^#ze~s>)ޮ4(("*?-תٝ>u|b\cc邔6ۧ_b|^۾|۟_qջv|~o^G|E?M3,~5N 4BBSTx!OM^qۼ`WvRy1F/Rc & SCMarMN6Y#EBS*9I d{_)J&8Zܽoڲ��������� NY N��������'g)eRR۠.) 0CM染Iv lTRm&)oBԠk9jLqqIU({ky|)Xs&UK'ɾ"YFꮣ̦lfbE4;ѽQխBI7t_{`{/6=m۱XZƒH64C;5ps8ɊUc&HZ+#=LׅwJIF1xXK0nqKrR='?\TUȹ.`0.;S#T #Mϛb}cQ;l+ ����������| NY N��������:ͧ[᠍+!pKɁDfVvۻzs=F]\-mxw4J#8i$ϋ fjk^qls I͊L|QqR7.ahfv.f9Fp2!Q« -(eo oȞtOzS/8cXnH%myRcB2qe[)nhXA4f,HJ6u +ѶOaQ߶&zmK8xIw9kX$'̽h -x^x?\kmRދyw~[w~3|>���������S6S���������{?7U*7xe~P*D;-4ͫzuY<m+}sa(HT7ŋQ(Ri,9>$Kv\בhe^ڨ'ڵn*sZK0 D'1vuf<j O6 ۑۉk?G>鲕|ꦿW^{WvѵA((<qϹez 'Ex!HM|Dm#8;]ҏb5a]I:ѡs!YĄ#[ ^ZJ͋<@<ng2ojKƴHnGqT훛�d:gV0Sza)ъ=wvxɗ?=)���������m���������=+.>OzsF9Wce!<I}Jc˄HEH'zo,yD5}V_Pf2tHTb<?xC."<5vF;K"vLYJVrcH瓩҂^?.8<sM@JZ\.mv\wwL ?.:У6TN=5bKR) MǤXzázʉW!Ԏ) C <~ËË= ˮv?^!"riE)q[z%,{wpӛlww����������&@A���������-[^}= ðR|n/-vG֓h(2QuZm)b&6):+gUbѵS?Zoԫ3JI|*/IE e}Tv r$ר- jwN:܆*v/q*'qpM]3՗0mPQosK (Bd3uWl7yo7q޻?,FC j逴iێ}3^KXTYuR7D'#%)M0nbv~u.l A"zjLC{b_lʹ~Iw9I4RtmzNߕ /og q*cݰG򯯿P���������p�qq ���������/:6qU2fmEAUP ks#o?-Nkv]!u=twP/c5eJ`3C4mG\X]"}1vUGk]ݵc*;~y™%:aZڧAe{g7}o oȞ={l<,|O|/aiiE"v4ъ%~Vl{/~ O}^דeMl9ɵ̿K rJ: #<n eԫ"ݝ_ է4'I<a[c FZ4qߺkg>xNw���������`qq ���������IRԡNT֎nB.M.a5JRwbڣZg+]pQWD=qV?G"FPR_o(H|}@+ղX)󠳶ݪ:n^jZ2f#JdP.[i>q;溯|KE,iqJ吇=.=AGpŠ@EQ>Y1R78UM1,;6Re&Jq>^Ի>=mE<p%l[<M_Av.,D"H@%)+7n.J0H6;ym/={\C���������߃8em8���������qޕv{jח6aӮ Gr70ԺٝHe7ں.Nyc"D*պ 9jrs(2:8K;"K!.cDŽcDkB&K gfzVD 37ϛק ^f!Ri.m_W\swkL>=ǜ=jEq5M-äF6aO ڵg^ILE⒜`Pz|e2|x7V1PEv2lzA}qys�r>ѽiGvޱ{ |Ӗ���������ܯAA���������[^?Sn˺aJJVG-%JvD(m߭P9zڰַ9,j_3_*`]\ۤbվ וT(Hm},bg=+Pٌ$%]$OH:oǮ^hr_o|;x޽{_dMSV֧G<׎= s[!MVt n杖Yd5Dm#ILŒuNPC?Vq~āf{6q`zylBȦ4Q!6E•)la Ϧp ;'r]{Ǯ{]W���������_8em8���������$:ͧ[᠍smބܣ9DN2541L$ܨernszUO$lAÎR1oaE!t^'rV"^d\}waLAz1m*LJ.k.TWQ{lwϷGȞb/y-p1'3úH(2d-ҡĜ{ąG$ýǤSK<C #b{uh>o),4L T+d#(Wr<dn&+ډIq}VO LJr*~91Tvvxg>xN ���������W NY N��������%kraG]1MT|o#K0(ENje/KQ+v&N*ƕ <])F҄XI YztFВh"Qˎg[s? 2С%G;G (.,X岒g7C⚷߾n̵TycsNX#KOJup" NtK ͪUUdTZۢD#Up.{qN%EiW5ySW)GH<LվMQV;q-?˻޳ ��������� m���������+ji˫0e A$FRQe}&uIy ]%Eut(~=rPI Pu/m]Ys*-u�yBhb9Q9li6*n3Q{+`qcH͑2Zx֚69kW9v3ّ5粯ۮOMw%\*}MJJ[> I-!Ofˉ_[엦f+/I&B@we"jÄ8"ZU$D_Z֖BrdfQ]/qzB{?nL���������qq ��������3_}=y'nat\UwNU/5GIOV gѦ]g)Zi}`gD&3s +苞ɍTǸ/Fskz_' I2sM/qC8ŎsE;)De\uo~uw15ǰt@zS_KXTopV R;+z.@Q-0bZڋءښhRƠz%1IWwS,ƑGqH,/h^̢_ ]{u?=fj.A=sZK sdg{G򯯿ͮ!���������Ȃ8em8��������dz:}_pUQJ ]W$E$JT Gةg}fO|`6Xu*GCssuu&^;9ZD"}}r;gnm<S~KD;[JSS~\ee޻oz_{~{is13úA9:=r$i-QjX)i/!㜃 ͮ#^$շR:#zWkc zL3u_ {%V5}7-I`dV4!ji= S/Goiλί+^^sC��������5 ┵ ��������i.JiNkGq2|+(){2)B25f T Sx{b*Em"3|1ߴ8[w pG.)l13N@zyIT.]7M_yu_Sn;HS*<qϹez 'QR_SBuM<DjOJ3/&ϦBbb'(nW \rl|YI/ƘYhb{hwΕ@^:D%v(􏓤5RTr}J"s txHr5B9ǀУ(xV8&8؊ύBdy~5<;/'~y֚k=k?~F]W߉JiC*ŞR9֟y<y{ߒTJ:ٳs~/'r.U�����������p�9e����������،ΘwHњň61p4[$*Պǵs ie5/g186-`bJrG,¶&SOKc+&<9!k;vlJo<ƶdE0bYqRvlW]e^JkxX3Οsj+Cu*| uE$gL^3۳O:R2<іB|P9l%^0E_2'/ZGZu3O=%G|4+Wּ6.cYTY]=n,k&.l]d7ݺ`�����������pX�9e����������͂|YтI;AdQlv "u @<>ױvD"O%\>qIT?@p.#0w"8)5QtYu!v,`Tr%L13^W}:v?fÚw}{1u|;u%3OSx&&: Wɮ/ -OP&87bv71wF3+ LKc$fGhKKs&ťoWnz-t,DMUoRM٪osnccY{>j/�����������`2@N����������yi-˦lx'['dލ +�'B%bthS(PYdX"�g<^QjH]seKA/:Z[?6RV)O9)XbC[ᥣZ+"%øuoyzjpZÚs3ιrIg~胾49w<coYi@+�� �IDATW> *v /r<m~xz;gUL9\xdWYs#/2Leyq\znyK<RܱǾ+\)iG`s#{fcZ?79(�����������@Nl �����������pq7,?5H)VЫo8ϝ)^ĎTi>g J1M==*4Ʃ('I(It|1ب\:Q)J?jKɖ㎃X@i%ĞbT3n,~%uE 9%-Ȗ[O\d bp?CoOm{Rs8cO+O3g<J3dz5ڗhZnD.K*#PI#GA5qn\M_+zEΝXl9Dzm*ۑ 3.Dayi{ᢙ[F@͍zdoGe%r�����������`2@N����������aɍWlY3g7R:7;sQĊ9eYtJSY4ZF 7<F6q%UPuϒSJcc~.x2^$ QpߞML(|b%<h5Rq1~kkO_c߽[6DH@G>o8Ss Z$ [Z k϶Ҵ#$meRqH%TRi{VV 8y,L)zܤsƾ^^o'+WB"'FsdK;oKNN[\ܸa7O`[/W{������������r �����������χ?Ϟ5UUUIJ)Z<8K)q%gM/fбΈS5۳$b?]_w6Z<*)+!6.8vC>-l/R")5[x׭c=̞[~c#<bNu.|ҔM/b'HE!{tN~zɅKb^~P.?OL0 mǫVm _#۰~1o+I[Y2-+ECziΚ(KfnWO*]zm#kWe"�����������C) �����������w\s?%^6myXU=&ҏ AV*)O!pP^ͥ,8N#Rr7~ٽxX\ȰB >ﱳx +I>Gh{v= 6dlފ vcMt:&VٯUFp.x]wƯ# fG2GftIgͿW&gRJ/b'L'2h?,s0Ow.! kr( ȋݟn ,iݴT7̟+ytO)^LDQU籵N 3:ej:F>kc߿q\=������������@Nl �����������0|~_uq)SJ#{PLņc\//>7蜊c͚krqT k"HŠm.[sXBFbsObv[Pux-+ -Nls[{nclXvSORHrO^59s\ *֏˱X43 1v9NˢqQeʵQxڙ"TbY )Xm^/Rx+ 4T)P>5,kKKh̒_э^Q������������S)����������� Knc3<?nhWL'T&JUF6,5f M%>yd8\դVZ/k'T,pHWY/wbs(ph6/$(߶+REd&?-yr6׬<9~H#׀fFV]eU#/8^]z1) S\+碾*kwl!rN@4ˈ#`H:<ۗE{+g7M|m84|7u6(8c[ۚy&@ j"أMmO2)AFoDt1_~q7.�����������r`9����������`g>~y*[J!QI�O~򪝤zZᲝҪiSk}x]F\t)N<0gZ iݵ$ݮ+H^%uIK AYF#Hף-e+USSlһ/m:=kk_w{kU]ϧGSf]2-)/EpaR{B7;ZΉ|w7/,r1H.ޚݽ KZ Dʺz DZ7/yo>Wn 7Zk,mTqmX7JEե6s[Lm4c/l{xoXvj �����������pH�9e����������;>S^6m(I)1R]^/S$=(zE&ODnJI<J1f6*{6C٧bTDL@>oS`Q,hSk& Ɍ[P)zMh\9C΢$$\񖤔^eJ[ŒBVc{뿻~=OVv~8z87+t ]5iwnaE+Çc63Վ&fH- ZuwrGj_l>şte֠~iƕFG(T}RenmJ4f%2qM1OkiqT>kq7Q�����������^R 6S�����������8t7,?O-cx<! �9nv.J |;[2P!Mbۭlk+%brӍo":;ˊҜ+;3dhj B2F` dԲ#i["s<~#5wGp)A& Sf -dF\ʼnd 6mRJԗ!$Ʌ*] <.lo DEeʣ}[ƢՇS7!9ѺȊw VAb7JF_7+Lu.Xbnk/Ֆ{������������/ S)�����������z\q8ٮMcqbƍ`v;uXz|bEf!t3i#$brzF(ȗN,YeņFiMA#)\ǘ'̄@‹G�"r^d/ j=7=gkپrǶ'oڛl*ʔ~'qןrx80&:xJ+JS9u-Oͬo 5ò /ZγLV=!teWE6jH/a!aM AEF_ ?S=EݲmU 7VˮOrCF<miL5o|σ_�����������@Nl �����������ppO.8C&Mxfln`ΘIR*˅_r<>T&WJ;I;2c3bN͘@֋zSH^A"8LC\[fP>\*+ޝ*%)y_E*VAI|nמ]Mw}{1hG{ٗ<m5uh9zR$X۫oFa[db| )ιT^3hiە1/Ks-rmҊ>ݽILiQmYyyMXe䱴u$ߐ4Yb1v6F\Ƕ?vݦ������������xр2@N����������܋;|GŴӧ;")^]jC!"S^'AAK_Hoΐ %4ӥ'I,q a*yy +5V؛ժ iũUx*و 8ǫC"aL*uӴ=rQJ1#}\aI4ْM4Viae7=O?ʃg$0Gfy9s/}d!D t$:ӅnÐ_yrB"̘,}DĔDGV/(`ɅXr/.Vvv7KkL7;e8Ҟ̴bD$G_x}?p*�����������8@Nl �����������;nX~I'ةcXRP@⚉'Z,≎Iq'MK.F;9]*J.ZO^/2w߬%iꣻA *?,a9atRcC]H8RLEhSO@ġ.ϼℙ _sN3'8A^ Ifb)8zIWWL\G#?EluG3+#喜ĺ5s۳۝XwYT209B<k($ k,m2 at[j=+�����������Ar`9����������+nzgΜ.ޛT9Yw}!t_/1"ZY;<)6<KB2t>Ǻz0j,I(TNkMb[bx]o2<cP!eNvt,(|Ruܷשӑp<qnD<OW-ʂ}Cu]=w]#8WB0fR2Y + ,.]̹6M7^Cbv7'ك\,5S*k[TW81HJtRb,Qq*ߤamϪ=�����������r �����������/.-ٳ睽j<r#ϩ'CENBX %I&>L^!o)[)*UrΞ?Tp m̕^*l:+*@E=R%cx\AMX^6#kB'㣭'C8R[M?+%4W>]}cMw}{ޱ Gi?>K.<ehȹ  +l AHEJ^4Ŕ mκ|- %F̗z;$XR+G. -ą~;.>@g̘bn`:y><S[Lr<a͙IE+9ic/<1vnS�����������P 6S�����������xqxE>o:mq){G4B?U �AdOiDĉ9e&Ptح7-Id:!:"ɉY۽Mf"73E(O r E"oŠnϳ:JCtTzj@x=\Ǎʮ뾻nu#{~V O(:xg|jdB%p ʒH* "RSŷA#_Jc--8PHw RY6Xz1Rz0NϩQc`ۉpZd^3;{থ?ߴzD����������� 6S�����������8\Ǟx΍gJq*R2 !IA:"\b0c`cLuV9KHF zIt0 (Rj0걶,ߑB:eia,||\3+ i#U 4?"Ȁ4w*lf38L??IJ S΢~VoУm Om{.i8~{\S-rI[]0 *]4T?vbeoyɋ]6AF bEn[5=3g buAEPI[ e<͍ϑ7NRZYH5bݽsG_mw*�����������/ 6S�����������8x\qՋN?sl׍bJG; I@$'4qIwz&GXt$1FGX\kmXVqll$z˺9`ʗRbBtٗ+H^)d%.>u7!I|J}c.l);jY{?6˃}F g?}-?,I?zq H^Kb 猺`]Kstož(Տ/SE&B ڑbfh9k4՗YiDto\gͱ :<o]\�����������3S)�����������x.ZgMb-(Kς((MI<KES!eޠFGS4xc՜w0)NJq%e!  ImDĹs2L'VX[cWu=Yg,h:@>&,()X9̶dbݒɹ/vuߚk;cPCK 78h>hwݹK.?jАsYRqG+ZyzE)Itgj=#{RvKy&hKmJb7!yy#HQrDێf _3C7&ncV+jrmǿѺ{aU#w/M������������L) �����������{O>o_1mԡL)\|bbݖ[*b)QX$ MAN eiVmIl<il-Œ(y,-}!Ns 3S*m6]`8$_4xd[ T, )&ˆc-L+A/^CSEJ$il} kiZY՛ݿ5F<*.OXL:8yz_UE:EAzU&jW<ed]}fb K%[\r7ϖPїD,b)uT9MnW:f0`kc#-_nw ڴL*w#"�����������o 6S�����������80\ǞxR"c7 �y{- iF >(k q%qW\SoǞśDC% Ou*"zqF$oX_-P,r+Xc&'E<G\i11NI&q& =2"os[9gC<7<IU8 SϢR:(23kJ)+!3!.d$Kj!$K2.K,ú!wbE̺[J9[Uc7.EY D^ֹSRJ2)m`>om}d㵗<eU�����������) �����������+nϜ9۟8Dv*eHa1#`�]ץz"'<<>mI6 RLiy,(<D@;J*>BGDZ/F6^+fזMx�x2v8FT(qcB$ LM촴bH0be[qܤO]cۓ??GȨx8O}>wc%e2hk΋T,$ G eM(C5[K`E.h;k(So,d><yNt~<%N"Am泼WY%kC-Heبyb=߿e�� �IDAT�����������S)�����������/ٳ杳H)%9ΒGW,V*'KNa*;Bz1fֱd )t42X:< R %Z.b U< Go-*NJÒJTi$K<֚ 2!Hl1E:<"VeqH:u°t_-Ƭvuߚl;;^Sܩ/s/)/Ÿ~X 9IC-H Euw"!đwۨceFg )X։K)b;ҌblN-SAh[/vih,پ6n^H[ǩˍz]5am�����������r`9����������΋7|ޢ?biӝsidc 'D!(QƩ39:6XAM]Ob?SÓh@V)l�%݈3RPQ}AmMfrqD qt2^z<dqcO A._B ZZiF{ե┌!L_M뾳nu#{~ցCoL:xy'5AyjCA(PKm(#E .֥ZcZ_[^,BmYn1~usMÐWS{iE+Z|܏_ Q,8yWW6gvnMKij������������2@N����������Y{cO|!* xr̳{Y=UexFP$ R8bQ%~\c7х J\EŕR,ɂ/Y0c ߈m`a) AY'cDTIkOH?2/L؏цn毟eyKF$xy org\pͥ<e*l%�z"L)yѕ jT2-QE;P5]e1*]_ZZ0k0 C69՗*CjZ#7'ǣW|ɭJ�����������S)�����������>hYo-gW d[ܓ9V2mN-&/h)"'$ wQ큍4bA<ֲN.IW!͊uN/InK%QE(jceً='.DMǾ\f12xHED62XYOdy@ q|Ono :mpHrO}yz1ι\XdM}hS1/2YRv XYdb]* IVf:>>gNfntš|{Gb 3KJTj{vncnϣyb=߿e>�����������) �����������\矘;;g~UU $[ ΜB8[#p<${M{r(zYx`͓jNIx' l5I4aȰ-$؇QꪸZd61:/SW1-{ɻ-2Nި[%ekg,v9 +ڳ_֬[uQS3SzGf]2w߶SKfpy($6"!1Hi$^H*5҈EHϮ\ϰ? "8ޒ%[2}ҍai;1cd|i}ה ǥm?cNL^TIE]"\ϢR{_?TY�����������` 6S�����������м d괩C)2y#, B3DtFV-u8'}4 xYIŠ *@S'5-NB}yaG絷w,N{ibl)qLK, Jˊ1\bD"sዑ5HJ)%QEqB8J<Yn7~}ȞgU&֙q ^N>k*fRa-㢝ضԐ$I۪إؓƅ)fa u]ߜGڦ o] Wt~, H~;vl{|(!֚ x֔~d2OT)wkt}s/<-߿i\=:����������r`9�����������5߸?9);HV!ki$nռ4Bc+B9e@efdb̈A8%"x!pM!WK<D]Q/9DhL7cU|!TtǪEd2n؋(ٜ7D!/fOR<0B #>SFx.ε,Rlί<7< o0̞ MT>C*Ui (h!\"[ [`aֻOF˾j|dD֚йZWHL:z%eEJf~02<;J Ӷswn-����������) �����������\q5f5svuqڑ>c( 2]gۉ!l_.M*"uK2 VIx[i2W3QG3L*Da1І"E6OĐUֲG?-bSȠE!C&C#+:%!`i;|DGU25=J'+œۿtgo6g8ӏ.I* =SZJ]F_d;ܴSRݑmeQE t?&[qpg#6-74QC\AL7l]'}CqX7>fqsyg7Ol �����������8B2@N����������G:_ɹ3IRJ5u BvT^9Y*G8}:f4҈6"ՖBgK\&^He|>3f2S˺$҉%{Z!zlpS.P%8ZlҾfw:n>#K+k8XXeGږ\Z .EY]wݷfݚy5 0PXgP^3_/|PoIŸ.ܑIe$_$KI./j*_=TP\΅YRJI'É=iRua֌':T[&lnwc/<1vnS����������8́2@N����������G*-iӧu20ɤ{4-sDD̤=/Ux(%$Lu,p1)Q>IF1Vt&A^CJ0oC'4Jw:4Ke!^_:s1TPH`MG~֯XOm7 D22m=F|<LEfHqA4c*ae=V_݈:`` iʛy *WU2 QR()*<v)K*[,I֨m7J *܌5~n;R>h *jU>GnX3k%S0MetP>?1|ƥ?{p5n����������r`9����������\sMˎ=S".MT, bF'/XYO<hnZep.TD"ʆ¤$sp!XJqs* lqKeb{*bJ q v_ALW̐jOi>2>C8NgjʅQvg׾;:+<? 90И8<UΙ YT(@/U>m=$d%EƧRfogf'+wl^Xs4iw5Rֶ6zOVZ2X⸵TG87)[*'mq-wn}+.{����������p9e����������$>u5N?M;Saq182ł6H0ӶD'c ɶRKq[,Kk{CLjjbZUƟc0IR]ەbKV,C~XJ<W={u8TܫxA}$^ bu~bV9G֜F'hSK?nV�=V0|箞vSJ_5W'*vIS(tRK,t 3ͪ"G-Ǽ[2*cָJsdۚ ox(dF{u/iAU*QϨWM&%!Qx{42̔>[]4�l7o[,W����������0r`9���������� \|'Κw&0-ʼn Y(3t7EY7B2[ KǮ|B3YxS!2fv2?[,PK&r""K2XԡͧS\bt =<H: Df,0-ki<X+H28䴆Uifj=1^ܮݻ]sךoZpS{♯{哧 eI/ZrQ`db`]t_jEYH P&11@ĭ%Aż*U&pa_v~n\rTh UxO[/n*5!Ѻh^xbdݦ*����������p�9e����������g|G?pŴӇw;SUoAFƢv+=hP`rLDuNؔi`mJ"*|L&69@䝸nFm YlxDbc B1#{Ĥc';#N7<:NZ2\Une׷�;8y{<5g_P *J4LDPb_]W6Hak^A?#Feͧ U;M0L-!$7g\⃖VXڌ=kOqcV ����������+ 6S����������5wZ~ >ySd*,ǗcˊI*8&=v.\Śe+Q՛x{&$IEds $; m+e`ZhNO24D2sqPaT%4]e=,㆙bZmAiafDoMfӰr>ٗ7థ1>ٳ,+b?&轂tRyQ ܖt_\E kPj3>x%'赠m/6o<qWP)9iy$Sf5~[2ȵҊe1Ѝc*Ujp>sw%OnٸGU����������`�2@N����������E9svSzY-I"c?m3Bێo@7)d(Ќ(2"s*bePIO %c~B$8>_fpdU r;H>Be *5;|}iqTQ1e,km7 #NJsh7[$UY_Sf_<//^vGV\58B8 qUWM;fxrnaadiNH,i/K.B@j'/^yu2;V<J-g*qLKJXRR>-7MGƮc%V%E=߭v1o{.X�����������0`@Nl ����������ÅYΙ_U$$g*},H00)%8%X8Q.:#S~✈QYRT/�6H<=%x3IOIe:9 h] 1~Ed}5θ'L 2^n:[K!煗-YxxLpXOo;7P>S޺xs\6y_[M 'ʔR+.8u}V}Q3o ݧ%Q8u& 9 Sal[}@ZM)w +Ej Xs:v! |#-9LQWomz&����������� S)����������`yE>oL{ٴ!t)tͦB<# kۓX!Nh(cpH I-tckV.eP!" ͟:7$t[b g@I!fJKjw. kH+ Ҏzk?NWs3}f.T*xָlΖg[3NJQ.u]כg]w#j,Go~ϗ/ICJ*"/(lO4Y@Q`zOBnfj] Nj ftѵٗZ$))D>:U=ZDG&QyT61,r޺<Pѽn\ئո1���������r`9���������� 2ܾjٱ'p a1Kt5pRXС!mo3M+MD h[@FA231{`B(=eP^c%HwBjD2i-ePE:a"ΑJxUXmX^~~YȺ'Uwfr>ٗ7uG$O ?^Sgq-T&Ŋ_,`"'Xpv6/D()mט .yqݛgCCI(B~V,*J-u?=|$M{el@>xGݹm7^{ɓ[7����������842@N����������ȧn¢2svdK1 ∊s$yѶI*O2P!>A d؞H* oVm); CqM9E|grK΋8J908so{&W,1( (%sJYPBd{[r>[.tV'Ki+>f08g�ιg^0sj1΅*F!uB3A/ڕs,(um޷dvGD +{s+q-؃%ht*E))[;ޚSxr̵B+3M|ˋ%�����������82@N����������W.;kͯj Rdl^b!߉Xaty;l|+Ąid<Wre,80`.R16:n0']@תVmdf3g1l7kz 53C+T*g04v|)S:|nמ]Y;70;G4޺xs\6y_1I%^*KR3͎ʥ'SH7W-%P Aj2f`m[sZϒ'<H6 }1eXuoıs?cӥ$x{4c/<Uam�����������S)����������`xLJw>xӆ:R|]a*@ЈarL7r,;sgiou+KJt$7c";ef&!$Ί$iQugE&aj.d̔";Ԃ ]?N)d$$3^mm6ݻiw׷K�;GhҼOR q0_]jm C~V7 #Z:`65 #[Un͝RsV/֡ԸCZцf[>>2=YJVB~8ѣnZئո���������C) ����������ps{8给RReFbSD@b3jݞ"!6R8R-dWqNd;!)t |R;^~%xw9"0!I.Cm%,U2+C-TRHktx#NV5)קn�� �IDATY ,~o*]ΞظunW6�s;ٳEgI+*.dnwJ]7fq*Æ![Xuk޴Ҩio`˵rA{J#Dh25QyZV$; o(X^:hyAՃ atoo}x㵗<=.�����������/!S)����������PŢ|&bu)8)R2%@Qq!.ђ鄍/C*!Ws )jo%,L1ciyZE!f3TEpmrGTb^잊<&2YwDQ/}'Ksޔd|b/~/.Z � X?O�Z9qg{UӏT{9,DoRY6dcsWyMfp͂,1rm\͋ƃ3W:"Y[۸-#}DJ o1XZԗi45AEqF{ur]����������) ����������pqξUUMr/1DէxFifDXg_ 6ݮb P D҄́mWBv%%I&9%-KYVIE [C' Rqb3ÙC"XmTSDz򗫇>ASz^ٟ,Gxn]~[s'�-~b�^{{e|ȹ2JRk7A*v1[@OQMjKf.> zNo!F=g7lQKrOgy#J(j{0^$h9%F뱽/<UzTe�����������^d 6S����������¹~Z+M6[E3Kt}[8pb &$ъS]{y.uW^PBK,咼 V"NrNHH%ezәS>Y?N7̼ߚTqG3cPEV�m,ru/BRm9WB~L9jEwoiwuߍ� @_yg]x/ IU̗ I.ݾeƌ4<!4d |X䑉oRv=ݺMm=&"Ez1zt.a,&F[^Zd!n\x�����������/S)����������P/n_O85R $0 {\`P4ؖ2G),% HF2u :)Jy߸<ۉ#B Qxt.۴Y7F.g lzYRtHH9)YôNd].lsȪ|rq =maݲҁũ1BZ1}yo\��m? �&|%ǜ:{x,q@œBG h]c>9488W yZl)-YP0dmI* s곐FI)>;3x xejatm[G[_ng:�����������) ����������Rbz&,#p1Y)4j?:}bFADTiYLۃ6+ 'Tr1KH): fbeBXx6"4JaBK 4})+I Ny5}.BcTO bJ쨱i/R,iZFb!oқ� � g̛>󼫮z1YTJћnɉz *DȲv8K4R^txO Ul,vt(<Zʰ`+<}V||{u)�����������r`9����������\tΝ3&))%Ggفػ@DE' % .57s*ݍv, 1*)㆙=5UVfJZkқL?̀b2wͫs-b 5I>"d"!S=NDpZcUpT|}miFř!x=]<p�|p~K.<eh+b(Ez_TY[˴|??iȔ6Uܖl.R6^#YZoٯNg"1v[^*'%֨tx*[h9r z�����������8@Nl ����������.zyӧ0.)\/tJ,Y V|_ .y!kHd2fB!lte=6~im52~Z/~S4J6pbV66 q9 "Q]+rSCozXRN oOo!yh?z5{kabz󚭨7o?_jr 8}מ TL*ewol߭Ml)]3)7QW֓}K:՝7#)+\ĸQZ^tsoTSEMαX+ ϲf G_x[wҭW����������T 6S����������57ˎ;Sx!S/pq,#E_Mn+撗s*fR5}{B3ȨÜ-MT3)hew[M|BAPBHμ"^(bo|d�o0hBdň -q\D" yUǐ #ַY&Ð\Pbxs+|Ghi�䟖Y[dX,&,9/t$L#5QEވ& 9MF8Vo +iڗQ~!^۬hbsrX"Uu>s߷ܻG �����������r ����������8|/,q֛fn|b溑ߓ: Il$0eGPP-()a0ҫ̤ߨ!FfZXbd$s_:w颌)c}QRx&ODZ}q05YF|Z1h%v45YoAf)^xt"q^uYȕ7]�p@^4N8c7몫saNuapjپvOni,aT]WTcN'n[¾ Xg-CS[Qu.3ed M|AIq2"4f6f;zZ2˸7[/Wc����������`?2@N����������ӹ/xy9/ O/mvovl+�;7.ZXeKH,-3x ROM0aŅnhK.RbIY񇦁n@fVA\>I*Vpwze 5<@+UWVWB$K 6]&%[цE9Ա{ٽ[;7( Ja[/K.?jˇʙT*qf:7@έo-_>mú"ٹ_DӾoRaOa'T l}wb$F\?ƶ̈́1NRX4ז]:9*DPՏ?| ?ڰ6`�����������#S)����������@swy^!dJ/eI Ws>8G!ˆ d$ϋ),i0-P$JecvY01%.ţLrF IK!(DFRBLߥcMmAlgB^Q8>V(F6?|XN|UVzooi �)%-w /s M9!/.ݛU[R$VZ?JemFLQmcٗ1ȹv% u?/eut_z3HIJ/Q<,Jz_c>zܸtGFw�����������L) ����������p _]vǟ[ixrJXQM o5}\8g1Ii5+gƳYQT;Vh:OXDΈ/;aeIi?SdqRgI蔋Lf.d/XjB#\f"zxx{^GtQ~Us?yh_q(8W�^DOiɫN5E%M!^K+qwk'5_gA_9 �)&^R$xoh<c񐥬 X`=Bz5A V:I~�T@uQZNP+ϲdٝ۶>K~=j/�����������}9e����������f9sv@hgj6t ; $t(NJ!9@ePF oōI O#Ӎ>1œR�``ݼ.ق.Z,#VѻeCC$>w?,)l 3 >6\$~|le$/Vv`l 9-޻O[7�x)�8s]unTtSҢxu]`[~UEmUO<c1S|쾏k:z='?uyP{4&e1v{Xg] QrҥC~f*;ؼ[/����������@@Nl ����������+ϝs9&UGuB$P:: U:Y* *J4>OH+i'DҔ/Vy�Pmmm+PP 0qޤt\R+"KYEܢ[lɨⳜIXѨ4M1ԨyEծ~yI |6i|ps>`3έ]r-߻j�!�t<mK.?jˇҍMHaCQ>X`BA %~J)KJ1ot,YdW͸b,X#8HEfCgkrXy~j} kN 1)̢Usk8;nnS����������) ����������/|,J):^M홉)nJ%"dః=-%Rl {to[::)0 J,%ak@;,"1�QD႑̸ i*Ω~ӶJTr,8юh/uI#=$d1E%q,VSiE=6VoZt-#m�^"S+~Y/s ksC[s`lgE@)f46nj6Je&XC/}P)Bfĕ4#+7|A3闤n%Sk=M~#9/EwK%sz^n{?zg[7 ���������� ) ����������0Qfq'p nq){ ϊ Nd 5 X˛YW t(Z3{ #bi96{#pT %%C ]s9z,c ,}%sҠT `iD`kZZlbq^OJלa@SDfIS^1^q+-(�/-C?ZSfYTI^]M*ϵ}'%D*\K$M&|IE>tl$c2QqxRz3g5yxnd%~H(A۬ctߝm[G[r.U������������r ����������OE3!1^u\?yQpRXxXDy3xo|<D;-7O!H=֯(#KY {+B$̅㚅*'|ad<<40) drG;t [)E-cjɆ ,]Ι}}q:TH`Sܾ۟rү�! !Ig̛~yW]c}#h‹ƳDa,&6X2.om+"xRbG;!Y68"HHqGRguG ۍ5,ʣ DI"ǏPzϙT:cJl+JL +"!%)<gފSo;_����������r`9����������+/;s>4iRuT'[J'VNl<fǸ-%uqq*y 7Nx241.MuƔV1"_S!iSHyaTXCA<0-<H[{<Vln杄&NeQS3]8Yȱ"\I$-kGn&2A\{c \ kV<k{nwCWG�fߛ1weGM JB{-7ʀ{~6E?ӖBoeL,f,T>?%[^/JIEm QGNag럿5,X 3Dai =E ;Yz\޽(���������� r ����������(qEbCι*~2tÑތoo^BLP1D*H'SgJ`J$D"JbF\,#I2OP.h9)ĵvdsKt (%hL{:di$BA�ɱmêc!3Py^1TY뿳oQu�8No�i|W=| *BkT`g'!pȓN`,р -[QzMN}K>\IXI>i:VM_K-T꡵aڋ2j^Jc\OX(Xtf8}gvnٴ:���������� 9e����������,/_]zI' ;xOغ__KqQS$ݖ %u"Vg0VVňʦDQiGPY^fD"F ̍Ᲊ&e輹p3p )l)DB}$3I̞ʷښ'bMX1B"UeQMb떇~+-�0>vcO3g<[#z͖$ \))va>6FBbg䋔&-jIeCP4[2'X2Xsk`\~ N + 4RԼ mȳ;mڏ{v���������r ����������|/,zÙ7;7Drw:)<ŋ1h^ݴbYZgYYLҾH:jh *c}:]Y:>2MSH3tդ LE%nsc'ۢYRFiDJ.yMk"dN9N SK}oZ/!_n~O+.Z�i~�4s~ FRqh&{!}OWPxa&k mb SBLWֽTۥ8\c>ҙNZɲҮ6L='R�ye=2e`#e4POȯ[2����������82@N����������|sgM%1QzG,?B:Uf?hܩF{["!dZ"cxYT[zRp"ϑunxiNr5-&!StkC.-WLkT=ʼn3_MAT Fy@DZC3ݳ[y�pX0/9mW|)CC1J)޾R kl-:RnfB1\NUCJD"c<{>+ztVy˸I}Pi0k<sb䉘P4]!VV F 480Jv=x_z���������}�� �IDAT�8쁜2@N���������89wO`:mB] 4}\a͐;rgZzic&< RΥ.WSչ1V [@'3ҊeaF$2~vIβB*Ul4V[ ^& lgIs&VzmѦ}zۼ;Q�`9_ykZUB ߒ8CaR;DHE`Ze_3GaX]9 ~ {$Ҝu[ݘ^0&m<{B۪|meWJF{;%XϵSeJnxl#%����������p89e���������pեǝt0RdRgXF ^7Md =&hV?b+I~oS6Qmt$gIVcpF Vv$njea᱂c~*,/.Ԫ :=<t>?{mWU9ɸmQP`BĮ*I2e18 1ʁ0rx mХma|l5#)Q(4={959ᙝ|?ך9s ~3SJV,P%??I!4~^w7m0tx�07M,m}EAL`uL>SY㬌2|5`]?6+1"Tʱ7YArF^l@KAfn\Dݏ2޾8 AUx>Rx{1ᩧ-wN.0����������{$SF)����������{+|?b D6ć O1<&Kf[ٕD ['r $s2$z[cؾX'E2kGgR)]Kx(^Nw#-1s M.țR5n`R^H*S^ t#xW} f�q_3�|u>4ѻtW&3PtY-!ߝ`. 0'8 R&P%@mIGrY?3| o='0`׼@qۮ㳝f75{ n˻}~LGڴk_l*����������=) ���������Vpiqf4 54a=X\JTqL\e d!E!}XMXDTXe#Fxw:ȯ)\(c`qKJ )ZRJ!Q M"xd;~/'f ő(ez:sF\{3_X7(`Λ /os=I;#'+ +9/(a' q9D"yymm[eye-o /Fqyr'aUl^M['"aWkI))k,{%^~n h*���������=) ���������=>s‱9!D`ؠcYʬbu?"J& D6.EJ)_Wa Kcdr*p/g1RRSViҌ3|K�"L&{IHT꒐M4h' ĢS?kIM@Wަ/~֯S=�=q.^B$I%L᥂? R4o)%p.Hm-+#u)up l"k#[#Rی?}%WPzlӘv{}zm>Rgg?o^j5 ���������rh9���������`f.|7NDf!v?z'"-%>?s|+G>cE=�_OU{:[C'*Ũ%[h>Yr`A?Pgc|a#<[\Z^_G +fy�ShI1=T R/_ 8AF"{[ �@:t�97M ,* W0t&ϐ=9w̴\FMH %hCvFgbk6vv< Pmӽ'ot\21\FJ3M3xYٜA)fk ?Lmg[_޶4�����������F) ���������=<c>!b!jXPL\wXhПLxz9֮Ƚ ($ "-@s,BV-q{D cU si- ]S'3vy9+x/Oq+Z2B&5NYUix|yWu'M�?6�|c?K8>#- 78o"yHi[ Lud0c3I"#axcrJ [HXK׆ܤo{ǘ1RGZ{wv%O9hW- >O^As����������$SF)����������{g 3CMa acQx"W!c&n[mY^]^^ޕyJC*+J^lЛe"ICiWRHr7I= me] =%%Ry~(DdOaeOI(ŴggIdL~+9Ehuuju3oQs �'7._s%qE2)EܯHـ-[RJ:.7~=R҆苉yByS蘣, va9zk!&yRq"jMm<v:yuαJ60nڧ17 /Lvc6\t9 ����������F ) ���������=]v{&ӗRd)\v4C0ZE<aDу|E-_OL[qtj!e,n{gځ%}~KyiedjL?E:[(g!X9Qή%x$kxǥ,Vso:6z+zӽZ[ c3=nɒK*o{]D,LvM~݌j]O2gCSrqt`Z֍1 tPlJ^o517}vR3-VB|J�x0=~6Um*6X4OL}Uu<���������� 6S����������FnąyA1A ztH},/N /D/R :Dh"5<iC^<W8@J,q$=LNfnim&3 XDMқL}LXx]$Oi[J5A::׽c9Ex7_7Ia؋97M h)cכ=[M q")+Y. % !^S*Jט!~X$@t]߸yݽ9{P]=挸*ҊS8U}(gvŦ!s?1޾����������5SF)����������ʏ^~Ǽ/;F!_dRXuPWq-XT%)2D' 9\d1mLEzN[+s t38Ѧ:>R~E*@OmCe2V#Q Mއ&SL%=g3w{Jimo n �@�0>ןrɥsK*oH<0IVecSpiD}SBmm3AyJo=XƠ1uM{e<yWЩe 6!8;{=Louuσfh2sԃgkyߖcS<iW.����������v[ 6S����������FV{₷eI4 -HJ�95K1U�X,pF ĝ\hqw#%%QKf@;'2K%0k3B'w_{K.:6dNџy8/ w;X%ө^tuŎ~ko{L �uWsR^33hC쩿&[ ts9//%4NݦS9oc֘a H7!|8usr?5\ Ae5:O:|.7d$)/4g*ߩrF245pэf~����������`rh9���������`t8y;93'ϔgd6gr0KEP�<U3b)D9VHX{5/Ă"K%_Ks;Q{ƎlhXs ;^aR&=!G Be9)Es\YbRyKۛ7 Y~%>_ћ~wO|z � X�3=v^@K"-7QNE>s<$’RF'>R_6g^I Tm1VgUmBiӓLj&Mş g}CS8D-q1׀ԚEKeݳ۟7]Mk:����������� SF)����������e7~yx?S .&dclTY]F3pPʈ!04z!zBH'A9#Nx5řL( $E\cFv`vfX< i-zF&<?וK&DEgFnV`Tޑ&).jb� X&^}؂hS{)- * OI#ѩ}a3jGT2 eyc6YN1wA͙g@ c?W;r5ś6߼ͮܐI1+vlqqH[Sm5~)T"qk3?zm[on����������8SF)����������7+?:y}B;ȉد_2ܢ3J,{JhDНl#óJ( Šđ�C9FٲYu4R)<!d+M,X.r%xl3T$I<BZLUL0eO\^-D-(5I_FuhU%fTe ZM_^y֪OE��?� u/t΁}xo9 �#:KJQs i Jv @/۬M[9cחZW2-j1jGaSsZ8gr[o.?kz䡻nE4���������W) ���������ݓW̦ia]YȞ@U*W&lu-:l/P&$0aeDF'q9d 0�ъLbdZ;m;o2B GMN) XGYғK~.(+EFlN3Ofmy7�f1 �8i}3/a+?tN0p7[7 BZ^vܵAEGe_2`gu<,q=>3PDZ=Wڛ5QK15$xRx97g@ASΌE J ? *7ܚ~M?����������rh9���������`%<䴳M066g(!#Y4q+yx &x1mIXI G/ȑdƠ&fܩw3 d=D5'HƋoNBLM՘AgjYFt^ nwsMc2J^ 5ԽNN4l\F.F#y)C7mk>\ �@'o1�, i(Rgi]T5n۔ 8^.j'IW֠69j>|}g=6[6'kM!88}2T_ʢ z35-%>|kͪn^����������xY2@N���������} _}JăR. JLЈLHI=q1gr=Pʌ%W(VK%01Q)>e!f_2->tn<2 j2z>R+ק#y|*JM*C{&x6zr]Dmw=S\ q�?�]foxa ,*"O'OڐXPl]FWPca`ʀto2\KcH#6kL_fq643QuSr{PrO 5ܙрu{7=mݣǩOl\w8#����������/SF)����������<StM|?&]~BˆcG /6x^*DWG@:n獐KOϏ6.Q溩iUAjy#% 6fXc'=[ 廧V%F]u�v )�H|cO9$&37|`6rc8*<D79jƥ֨;ۓǃ9BFpgNI%GZC#".Z_vmΓL܂kZ#AU{cԞW#u.`e����������%rh9���������Us≧eQ>Rt}]<Ǽs.LP饌9n+Ũ1qD5iτ$&w3Ǿ䫵c|E *SwVbB^-3Y%`h|v`2^6Zt*C/mOrl"*{É3Q>c|fo߾u_GM�]�I?˗3g,p *g:QL:cdj3"5Ew^c&3flm桖&`nb74T`^ [#qiٱm!T+2ƺDj)M|vn͸����������Kr ���������ϩCN[z%|�!MHK+6+b)e *9gwxf,-uđjY\h۠Km.⭿Pp<7b Q%ڵ U)lz^&Mkcl%Rޏ\xe=S-=ٛůncb �x~}��^ qqϾL*GۏvàbRU8,'mzCEX5lYx`s֢Y_7k?`)eLWhθLŢ1sq&% a-i٤oJKyZn#K{NCO4g?1kWpy����������) ���������]z?N! G#?J2UYr|23mtZTCѴs@1&(%wLA`LO}_Zܞ:& s&eD)Y~*YLZqQ *zbc췹uO\pFs]��/W/�� �IDAT�Enx'}K#IAW<5/!FB2/۸it%6giDwnB 3<.E4\St'S}\ukY1C5JXO )٧ rl+^VR?yٲm[oa��������� ) ���������U\q?^9 @Q)vcXH<:#`r|A%7<'znO: %p2FbY`LLt˼͋y&{3/D3#/$ڸ<5D6PMqH1z|J%V"''}N*eR*%c"Lԛ|dۯ]q�/o�k<}l\:~=8{a*_ˤ-]؅IQTsLV{b 8M.P˔Rvwp\l&Jkb2˰/ěΎnOŜ5S~MvŦ����������xQ2@N���������xi9gy O8/4Ml)9 ra]!+dgHS�YP$X4N\UsœszH1eCS@y v˗Yˌ \h/k=CO\(KzvsJٙ_Ǵ"e".pul;oOfYo}R�"S �x9b#._s%rRԱ"n/P!Nߐyl0ǣ轲wu ɰ,\n&g>o,|/[HN)'GJ& z:@N\nyH`Qg^7%]뵬=?/5GH;4؛{>;,����������xA@Nm ����������4]v֙06gn“OLUg{AF RFh 0tf^1.%r '͠agxd6H6l01nB弾S{,WZ@}x Kt-&i5('ГSy0Ҋ#/V[]T# !76.m;{6|e?(�%�d G%r< L@3Q*R vS똷Qd\0B*b LLђLT׆+ܝ v;dQXQ"bRrv؅NEE:ًTv筯V{婝}ꉩoYûכ:����������u 6S����������^|._wy8QXaXT5 Ihh?mc\bl]:U㪫|fYZB3Do"0pHV88%BBWST\Q@zY\2v*+P,ԾۛG'2h?'ATʵZdm4�xIf�e7M,HYT8ҎdKP<_cbS"JvUn^vN iZ9b"2Y'spf>{"Q1-uך[V3N22feױaniѵiCuUX?yٲm[a����������v ) ���������U\q?51 ILTX/3&є!!J(ͲxmcBPa[<L%|`H6LyY7+fT!PHɤ~ɒ(BmbiѬoYx-м M>۝M$i'Nx8S7ONJ'BaQ,)7G=튳?p�xYp�/'uO9{YT'Ԥs<RZ(G 27W^QR -6.ayh̞J=A]2" ΋6m5yXftbij*Opx_=iW.����������rh9���������sꉅ Nw7o (^s%þB+Q${A'{SmX–m%c1?Hǽ9am:tHr11xܨlBjE&Gv?>.HaYPFseXkN\W ~6I%Rʘ_8-Ur Ē# EF0㩧߾ ~ӗ5c�lT~s��^nX81˗hip?z3BrcAV g<F\pX1XI 3}^GkVĴ՞+՘ otA|6k7lŊ覈ޔH'M4Wrm}wy̑S7~nw6\t ����������frh9���������sʒwֳ{\"RP%=R6@8RBK[6 ML(,`ebybofΟt>deLКW"^s-8@3@Xlm6welm<MĹYIF}+#?@;q @d%v|e*CJ^b3u9)dozzzӆniͧ�S �xEw~C]$ 6(l} Bc875 Y#|4|xĔ<O";m떬z o\p<ateB^Q[ZAOnX Rv9wkԨ>36<g?q7]Mk*���������*SF)����������Ϗ]zk:"M dD dx)oqܞc l* ͏||$eR_LP#x-̵; E=hj|:ǝK\bךY-_G3y3t(A6ևot+ԗGg@љQu&ѭ h �x~��v޼즉`-rF_R&0R~y�(5{yO`xVALFՂ9UƔ<)vt]? JzCh< ɽm.hmLq{A϶}e˶mc���������� 6S����������vU\yǼ6hE6j(0ؐ1وRon{ R*p$D;r(PLĘ$0aVKq_1^x *l=CKneumY`Qjt:*ϼT7&X(ɹpFa>ۘ?G~+ �:�p%9p|<Ƹs UbN7Č!ʫkd+-GPMM֔,tgL1i*IƢ>Q?fX; 2[iٸ{u+BEW/i XШk7l)4%,v53z'C6޹vf�����������rh9���������`vO<-i(9K{oL2VR {.bXU.qlR?3xҀɮe/E/. LP<)n#4aTljl8$fj3l H/_� S!|֥+ei|ovӗ5�T~��v'8Hw~#چ}c} X&2<39<:7OOL'I*D+טЃւp q#:mAJ6z.dk:sV9.{뾏4{~nwnM'����������`�r ���������@7,y!o=kѹcV8<}#@Ҟr0tDVx^v\q^yfdU rjXPs% uʕ8daC/`f38h m\[{!wi_-8@Rlխ<Qa~O%%nچ\߶~�o�ʟ3=fѢg_IC댘nN맶٫(n9⮈jC7$vRV}&o/y"+&ToarQo7*g{^Uuo}y%2ף=x Frܒ~T"֘ew<\w]9 ���������9e���������Puuo)eP"-XƔXTDq%2Bb=Dd$"Plqd9#ިccux xkeyz,S 4ؼxŝK@*f-w9e-YZ3m18m{/m0?IcfE__qL.Z;.Jb"L>x?qU �0@N`nw؂) 01_5Qq:d-OL!mi;#=1o G>o1 _ƥV7JQ{vbm?CYL!5<avg{ùww?˶=x����������{)SF)����������U\y?=1S19(W~֓RlG-АeSƓQ:[WRRZfQY0BTӰ)]R>&G^T1l*CRIj;grKt 1.'JugowJTT~"҈*\^/U| ѷGo%P$ޭ#L>򋇷]qΪ�0Rxa�G>v\:q"Z7n`_F.q"=KUgo խb^:#x\Co�\'B+8.$YڍԅJ1<Z9i-:d|hWmk}Ь/���������^r ���������@ 3/+gKHE7ʼ!l ,Js}f zJIBxdu5\RVm~#c(,RP1Rqff451H�zٴ΢K, 9x5IFy$ݫ(-z/R!Ւ'ݧLEQNO=u_X8�`�%X81._srI%y<R+,Z)7H y<,y*6o^ g%x#4Z5;]Ŧ05Tmg︾>ܘΒRyRlg&LBT7ZWs>/ ���������9e���������@t_Ӗyccs# #Q6.6VB-b] ⯄ ÿ *6Qj8U@Mb;"ٛW L+}¤"tMeY W%$LY<l_ vbbj)\D/ۍ鋽zP%T/^ع&L S[̅� S�Cw^}a.^BaaJFR:'1a=9B0і eTmmgxm޿I8z̴6|r6UkDJ(l2>TzKkIuxm˶\/*󣑉fnȃ᭣Jnquf���������^�r ���������v._~8BdpZ O`˜`}aB\iR{l'N Kzf8y68o26 _ !QCݔ :T11$ #5$7gRW<!ˤbq4<sIȘk2~R�y6JYX۩x:F$~1Lu}?qU:�FW%�`e7w odQ ]kk㍷j7ٜ&QiseT=\M%Q#fBTC9Ykl)bڨ}II"(DK/Mr$z|ՒUL4n>s(u~One۶ޱ ���������`rh9���������{+Ï9v+YK(5)_"%eRaAX1d%$DIJ<vaOm|~s4"c0\m|#x3U&oU0EvX&ސL^Lckb>yLɻJyJ>"}OɰNgJ:QH_>_n@�=}�k:}S.t΁$lNqu6cmѮ1t!*}+X\p i8K$Y_[K O_t̳u"Fe6iyS[~X ۱_gOnBz$_GaVRyoms����������P 6S���������q&N<,jl)@9[neT$_`XH/9jAP$ic)(gОi#ezWSbXr{ 6H6<ZlMתD郫D<ϋmL >OɴmPI^~/.QT(T |oMku�4ޯg�‘ 'Bb~l~MK zl7-1 %ڍy?gWNԤg>Ѡ6x:gU1oݹS=Ag୏3ƙ"Jk(ng=#TJ)j bS{?-8Ô����������F) ���������-]~֒^5667Ha?ٛK|/گuلgs"m0 X2o&7`ZaK>e,iQu@؜j:gUčeًAcq˘ia4Ť˳MNLҐYWޟzd} F,n] Å|HJ/x'{M-_}y��{m�ſ5o?ŋBh#Twp@\ %:,.U}d{чގCm�DLkeց# ZYX.$qǓ|Aҿ;`wXk|kqH'8tZ}J^<Ϣgzb[k.6���������� 6S���������7pg>z?NDL)9d)PETRE@%j <xK#RPIXLO2H$)el\ȱ}Ydj1X,#xuu;:miyVH2&R?djx>KcaDhb83Y0ˊLu�!E.(?˟!!'n+7�Q8�{*lļ,HKƋKZ҃-.%/pSDbLm$bm-4L04f}SI oRߦ>78Fu׵\vvTޘ3cedKpdnKr5iߊJ*sO~˖mz>���������9e��������=W_#=6giCyӢ74)86ʈ!*-/^ >wtٷ5L-/gu>M1bzYD1wRF2X7TB+Phk[g|(NJHp-$sG.<k["z,J_,\(1TSk#ހi_mrrqX5ȶM�=Z.�`G>v̩^:E%o> $F.4DlCi2lc28SRp}*CԤ "x:VڛGgZ7}ֱuu :x]LQ7wS^B//]|���������9e��������vf�� �IDAT=sVMxoY4MBfK  .+G[m3Ū,'$JV0 js "!Prg!p98&5AHQP:#oJdG%:,4׎\3%HA4H&\ 3͑l\))4zmXZYHϷgO*V&w<y13�K�`ON:oo>}3f$H;r(c>Nm`,-'@Sekl_dͭ1%ԲDepԽ~5bu >[eQ̯7l> g-C|URJQ5&ug??oF/���������9e��������=Sӗ.>UccsPJM*-~OlHehCG0MtEv-+7,,̈́~TPƑ[dP*10R*zRF^S'K'd(Q{Px2璁ˬeP d'"^{Q1rۨs%F0J*cs;Ս_s�=�wqxI4IEV`29%!IA˄֕'>=88+HIWN -S7fPVŠ)ޜffg>OtTELgTbmw9}LM{л~DM$r"cJY1ݳo\l���������0B@Nm ���������`Oኵu _KVZ(~_`AD^ 6'CL s("J.",!甃z<ldv!E1*be:Iaax㒗*6CեfľDŽ$IG"g-":<.`ibTLn˓w,(g'BFIӛu}˅Wn./�`3�gO;lEQB[ٱƌ"LJ_jhGflcG~y1n"6+Xf~ٔqڨM^ǽaJIe<tbŖ2ܗz8MU: X&3y=#g6Rsq9S۟qٲ_<x3����������rh9���������\Ï=4 D8Q Bǒy J2-g:1q6XD~{.RX\PqzH…b.1E%iL8l*\r!Wtxڵ =ϕ1'V6)\*!<eڶ5DiНXd3+)eu‰wkD `/WJN>m笼��rK>4i6$Tb'IjؑM'%\xFKdepl< z9Nw}Ԝ3Lj)N0`)<Ilka$!}^+YSTv|שP2Y 58ʽeS[XzU���������vw 6S���������0jo:/Gb-ex ޔ"eTɂE(RPϺ#7:9YNG6I,9mmȴ\E/HA.CęI g^o#CNP20 :,\Ⅴ91rrX}%EQF&AٜAEϧܧ9.Z,֭b=U=L-8<yۺ}m#�^+��\81ȅ˗ܹJ*yc"WZ`JD{g#82DED'w/~ݦí~ț@!ڗuK9`ĢT^<ou9]&葉u75gQgU衲ȵy�:5Ѩ!cz~۷\t3���������n r ���������FSӗ.>9csci%Ge'IB9Eq7BG[db^dGl\OtFV1,yd {9HȎ³0;"+.J4: L+X{I|Q.NX�cFEBIZnJKW։g.)}9SY F?Υ *:F)1!D+QCMOOo+>m1�~e��;>,iBDfEl\LgU^V> 1Bء3FLGi`.' ?1ꍬ.SNmLT[v8]fzF8W+QR GgeF<#oνwqw<Ėol���������9e��������Q|r'J)II\HBJ(#l0 <dxnO)$$QS7&x{%ɆOI3^('EdIq|Zn!'KgMI]0_zDN= a2Wǯص볬=~;4&xbsE$%<&ʀa h�1>�ϗxa g5 OUM'x ݂2l_6ACc=ə~{>83#ׯqwրwc5İu/ܱkNkg-, ^Y|H'F<OBjk ?n-Ńw0e���������v 6S���������0 \pU=OhE'ႅD#|vAƣEmēSK&7>&[?EZ7db^*Ki׸M/C t"E[$ [2^6q:Cꥱ|jM"Fx6~+dI%>x~O>Oo<����r{ʥ?8$ZYmS9ezכ˨v7Y|ehG3on<ؼll#R+&93<FyC==-A_Pj^Y?fN|ލ'Uց=xL=oms���������v 6S���������;sNx[OY4M� AE3-$ !ČB3ل!ܔUlR5J<K黕O(Lgv,t}!gz',]tŜyN sSر^)Qx꧱8vU~A7# p/aNte͟D<ckoZo}̌��o:��s-D+00[<_PyPS%\dqsЙ7ʣEPeIL?HB۵V<¸rÍ=dX4m [uuf7Z!bγĝvV@wTMQozGǾµf����������^A 6S���������;rrjll.Q\Qv)#Xr=" XW-R!% >RH N"Ȥ$9NZ#eel<3 R JR֍\q\$Q+BL\1*Pd2)8t8VV)m~Urcv檾1 /[;S.q52wr;_s��Tp~+�k~豋5i"RFH(wUFot29/Jg>]qGhqD݆|Ey.8ckLmu]r#A:km2nRy5!2-vgC.Ԅ`x~׮����������9e��������ݍ+?:jhe)X4}\(SU.*R߶5S` HdPTAoaO"I"dⰢ?`TAVɒb2vyޔRz,bJP^\H.MBepċ1ߕ$㻢KE"͠k 1$.W\&KŘ.%˓no/b#�.�e'`qAEeE)Vis|DL` #?T 2eL*t-(y|?3q̑&[c*"hH7OH`&R:\3ž#ֶH(nۑ}rv2c?z'|;���������e�rh9��������� Gi2giW\BD,6)#R4RlQ#bCo8A]\BC# \o-9B(͜g1}I"/lq0RI'^|X b$$ULVxͱ,͋ZԜybQoG=mo0�YR��^ǜ|ɇDKH zCy@A,JkTjї-HoR}QHPtGj6wFHqH׿X#g$=ͷOsω7,2l<by:2CxN���������^& 6S���������J,?SO~wh>h#8d&RTdeBTS0)AYSHX0REdD^n$f.v<8דbT.,L[*\iɰ:d)txWHi[ #!PI$x2x'x/xӠT޹xI0e^"㍝3۟~Ϭ_Y��:�p‰G.\q~<F՚ڦj^4gbCI]s?\4FM2!aH,-uYBafIm$C]孱wS6sCHޮYwӎ~^ 0�YmCӚT\L|fMs;t|n4g���������^b 6S���������Jq|%0667gJɔ|0$2I$X!B"ۊ|$ӣOs\t[QZ Q5+iP2Di͂#![2<lPb-#d,Qc:Nou7KwT ^4㓵F3vKXdkE"O,ȘMo+>-ޜ�`W%�Î[ MSTp6v2x\ײI l'Bj?Cz.EϹ*C*}Gvc:.4Zxk-dK%ΩcD4L23fͽԟ7]l���������D@Nm ���������\iUbpDNc3Dpy$#<J /HՕ1gY$Q{%GђH,ATaBu2D+* .eٍQ%^~btqFneК^P(_ҚAy"-Vҗl+wDe$':1gxui_ ب��/{��^,|+zCdxɌ'ކ+m/6zr/UhE< g/=;֟jSE,aMEœ%' ĥB:r./9<Uh'q8y^;Vo}e(@zxyoB<XO=Oޝ˶g+���������9e��������qǷa/+u]I<PR4D,+؝Xk #0C6kT` n3I0:I)߅ȢT;63Z$͈uN mc+ó|]םGv>ڵ/r,KP21 @ai=#4f;:U/qi "d/"��x !��^}ɗ|hοoZI#&z>5F<M_iO2t=( [xwk82צWïT'4hǚbL0c6MY=ycSa:L7u"JAbmӍF! NC,}kmk}t ���������"9e9蠃~{:���������?O=ݡi!&$!0 Eg8%oF2P"l# csdYXȄ6Q?(*,3tb޾j¼W,}.dQ"浥{V2vpń@ COd,f6[ ##.~,/cz!m֟'yLZ]^{Ah"nBb%!Ty3Mx7OzM뾾K�% ��/2G-I˗sL*̺-6bMn5Vvl"?'OMK MdIgy@?VFfM|t`dP:g+rL;vt+i)Er-×xʈܯ4R'@M|-S���������E�rh)���������x)9m{~%jllPJjp18ΛE.~.;(cdRF#$9c 8)% )D/!1.G T #dֽ,R5|IM >XT8Ueޟ^Rk;4b=c61_Y:<M%fC&{MtW6|?p1��@N�;y[(PI%1KqDj<0^ԝw" T2IĈjrCk2B:{yv:h["r<{llоA7&s pd9L߰lD6q%Y:oZ!Wy>Ėt}/����������r ���������^*zA3$pr.Xa8L(pL(94ۨR>* *% Yp,\u[[ cڢZ ļ6Dˤj�[.X$xsIΈ% ZLi9RDeڠ6)p&ᖩ`e˃ |Fb12ΜϢ-}[�%u ��/9oYvy~TXs fs(7[FLDMQӅ g/γxG9 <$kC蚈W<)gzv v j҉~U裭u~\|He$Ÿ́f"=?-;5���������x@Nm ���������«fÄ($UJH(YQjY%t NPD'&`,28*VRk7 }-F.σSTeinuhT"hT?vz2CbS aOm'I*fr Ɖ'Km*VLYnx}Vk_<ɿ>S!��xU��/-Ǟ|ɇ1ƥ"iI[>YTÔЛj/"Ru_m.kO 3(+}bH-Ӌzc+Li{LL%#Z𺞜"s֊E_�Wv 3ܐtw#I1[ϧ7Q ɘy9>˟|sk_���������% 6S���������b,?M廛f}R ayP7K#mVhx$pbrKjSgH5dxXQj#@$E nl0cSFqH=KGelY�I c,)NeOWAxXI N[jyo�o,4^! >KΟK*ήOw>_Z~o|��x�eȓΛԛ?32̓$~=4܎idLʆVͽ=�_%#gxbڂڦ6„i;2na.g6Z{I]{cSޱL�� �IDAT;xR( +k݇笒Ź8keR`D3Jv~o?����������rh9���������/.>߻W;RҋZXJ_|R)?Px?Rf Xr9!RԊݥv:WCd␁p9&X�@(1hr%7:=S,9ꔅ%صTNgOIMͣ.-FFJĉA}F(K,\K/QL>J-5HݫmM͸��e�Wq_wEݗT+38H9$(7m~cIL!ev-8"Me%m-SrpZ`0JdsM0_6.h]ZIŶK,bO],NBv/N^'zz䯙Q<qfј2~쓏mkWk����������r ���������^Wa弃:t 䘟0j 㟂n4EV`ڬH.RRSX26%S~yp}/JoP).UH(SL6Y&xx\t}!DюޒFٺ?ϠNJ/&')n7. ;cяtʼ[ID1_t��xJ�W,ŠW7`T8`]$I|(l FV?Դ'ʾ|X!I5eKXnYwF-X*Kv.'5^Oozje,АLh"ƧYJ(u4z j@ApT[O*~}2;&?x���������@) ���������<.ȇ{> MYcRDQN:J9qK)-)ռ�/)E$s&L. IL^GHMpR yn$eTx!-k" m!K_aTU(I^ۍ*&Yxi!tꆒA% սcL [S||W|ʌ��^AHW��x9䨷=K>4vx )h&,l6ivfIb >bXk P ~06+֭3=!AmY{z!眹 0j,:Zc $B/?Y>ajy'UBvӑJ:MCXn.I[ꁇ ]|m���������9e��������]}+Wpҩ'BӏcYmaLK5VG9/rEQcweVQ)<{J߉"C ɟLRe2D PcYPTt<~)*b+=HçŒ<ij6E{JT"QTR:,eL~d[,`qhIRʎ~ׯ�+ �n͑'77~1.%@B�?ϏenLu%-~bn̓m\ Ŏ_FrmuuVkߓY*BI>c#P=:!TN5Ϫbv { ����������rh9���������Eg|{?hRpBে9kx^)A%\**s\hctK@JHIxYQ>Zn {K8"{" <TĤ& ,xJE0)ǃzQq4kȊ)S\iM9hX.NO6m-��)O��Ώu.Z! 3/5'g(Gjc962{Fcق*}Œ{0*,W:㇑3E&]_6\=y1pq[W>i;_-F:匁}> zYSlZ`1|2ٹƓQTЄRU.\O>׮{���������� <S���������0Wa弃:/YnhYr#Gg艕^:$EgDyrKPıU,㢎 AjR0-zDY֌a QD5( jX )RBɤ$_˳ #kޛe9,*k9/!vg?~巚�n�Hn^17(,%)gtwbB6u &0[FTDž,w*綁F(5 \03Ӵ\.]`Tb.#5mM!2+pd6`q ԃd]ݾ Zav xL}˖Gw>k��������^ r ���������j\~x}Bݕm4/x-^L 26% %# {h+:!B'`=0@[`%Oǃ%8ݠ"H,x[-&?HB,hT8cwW+AKT0 ɚϳ| IZ 3WkM2qL0ml& ]J5&AJJE"6\I݈ORb3W\BIKVӐ'ԳF&c0 okZ9; 3))J[h `d1eE\zMU<"&6Φ[?'Va�C/��;3ν9ΛGϢRŤ%N}#Y �8뫖x_E�D�1ﴤ fjc!e~F,'s &S0x1`s#E2MS4C=JGcxfü3zceeS5-Z3Y���������2���������/_ϻi)xȃtCkz 5JML9iEfP-4I[$3Df<IHz"}>kE_xEBKccש}FDϞfg&umJ˦3:%>g5fwk^#25Ҭ>wepE!40VùJtiN'^'r=��8q�0px)X~ԫFF78_~I~/p&G"G1KQMfCq,ٴRT-!$>73_*̗u3/mdp 2 *~S4zy<$7iS9ρ|F&ϩK=S>hsd'~c?���������q2��������K.{;Ǯ:z1#x@Q8-Y)'+uעtDV. rf]ғRf D\BSt8xiLn.W* 34Rzւ-=6;47Ȭ)1YFD�c)oONDaP Mn,ч ꥱL&ASe9):uur=_Ӽ2d{%~Eg&s6�� ��  -_%iIUYLh{/ԗhͲaEC (&HM%}sIeu6Bg-<t%|\{mh'fݫ4^ڒ3LQٱ yCSK,L٧yM���������8b9e9���������S|`_Nʔ7&œ^KR-EEg{Wܳ/$2AO1u( 8̖0fHɪ򮰈4NP |܄Hn8H2QdQa$B] Ử w3t֤~1o^cmnZSR16Mkm?F:s{d��C���]=ylP1f "h=:)|T !$lL[1LwoglG0Q3>;8N͆_,f1nGY]Ԛ_4ʼnM s36{Lؓ{<M7ɟtw]Gg��������SS��������#kn<Pߘ1γahKΎuQl_c/KqY3xliT 38!9q k>ՉⳉV@.7*ZUAg5iB6y5GW)`t]grbQEgpbR/Z]C Ys&Zkvي;��pm�aeީq9v޼Iʗ.%DNsn|94F�ܶ6QS8f8>k_zӂ8%3 9A?xߺDqӐ381ZVq v^ܱd E~՘'w-=z6���������2��������+W,<.mB3X%d@Lt_WHSJ:РKnX"lK˔t{Kb#3xRkTљGE&9{-"eЇnEgaႢ`%iP=P+Hqʠ ^?07 ʈ3DNP& +6J 2Ѐ_`ӿػ?ܼǴ ��C ��,N]r+^5g6)Jcu ϖRN2掋fL!^jg: &g\CcH|Dns,BW_.ˠiAd^24jљW5^Nq7Ax;0-f<2SȮ C7IF`3羷mÇO����������������%ν蝗]u#xs.q3j&=|M bi9D7bDhZ(2LfDazd(㐆سpˆ><cS}IBNʭ–S+xSsa6Sri܈b2rRYQ6vsL9D&KGSGAěִ_?}_<l���C)�Úů?sYi";CB؈ihR [2S> wSn1V=A?s@K٘B֌)0U0 $ٽ6㋿GcBi!7i&)uc׌kS杌]B~4_|vSOlW}? ���������0 70���������GXW=ᄓ(RI#( ϜBٌ)FgUuKZvS9b0P&1!+%+c,k?^2\BixH?:HDpɴdJxP,>5əO_$a&J2j罌 4kC-r��p�Ì]ǝp *&fWľ*16KѢ ;:ߔ9_>}y!v)atlu}7ǐ!v|S}=2RqkX|s|7 a1D RRҜǚ 4#czglxWAG?]{w?w����������������皛n/9ō) OS)T.f(&#"bP?qot/~l*lb(ig]JiDKRdNX6k,"+ʷ SӃM .?<] ."+sI5Ũ~eV:n.>jK�<c߷l��0o>��;3vįyhL|Իױ2wvcLa^|e-/dИfaTc0-Wvi55,>!T̄E=18Srf'iIO0oh˦6PsG*k8}kM%��������� =0 70���������/VXGӄ&FZe]# %ʊ"$.4Nph2aoI:pr;Z*E Ǡ"āFѷa!))fxm`ш,cFŎT \̕ޒE|܍U贸I5b^?'3h[T?XDRҳmM*Q_ wn3ń��Cj2W��8l9m,Z3BT̷OO!2˶L ڤ5KZ A <rϜ.g7 QEI%t,"et\3neb9a;N`9fc ,F|.:+iCrˢB9r?6n ~���������C ) )��������K̽xl]9fQX%$"A@J>; #p 24٫a6=ض,ݑF3<""$9I+ƢCuF):3ITEcP1+3bmiLQfQQ|Xue(NL_\gM jH!"tv<Y =ж_|O �� �Úܲ }WLڸ_'?@ȋ;<cPm.\eUH|6,ߧ y rF2muj24|̔Hvtu˜<mp ÊMygP<e+=+]oO=_Y;n7��������`9e9��������8 ǟHDa@RbPJEg2V &6Ic<XMeg!5rE:[ *%+J2pSI ; W͉E3"bGiv ޾9B]ѧj R,I RF%eQpI$;<ILkQ"D14E@) 38ƕ5SOwzxGV"��p$�#]ǝ-i5.Q~U3hs5S/9q#9e0c 099Y;8yAD@^115D3Kzu=o'31`9ҟ}X*m *){vM>{���������`h9e9��������8<Os7ULd=Z +BԵDžE 0̿5Qy`8[DASL˃gôX ~Π"2u8SYUdZFFYwGkב1 b6´KC`B5)AM1k+Y'*189<c?zי���#y^<ryOf< 4wEMrCݕC!A!vOa|S.}uHYg|)z{5tyۛx8Esy*iC5Lgŭ=pG8ʂh#11G| ʳ5|l֍w[z/���������SS��������f³;Mh azHJЙRx袘%Z YRR#t2OФ}3i.VX! Exn6"N,^6rHG5nbNJ&2p\! 38b˙^!Fkq3g" ܤbRQ'N{°/5O?̆?i)���G0���EWv9+V"KރTvk9C r_R3v6b,)*:΀Jc`M9L*<ft28~qGe:'|SP-e2g,!pm_4jJmGɵ_s���������2�������� ',Y2u9stx4H}H_;SJ (qCEOR1)0o1c[)1g)�� �IDATy֏> Q> SJ*I% Pꇍ/(XZg!]KG\B`#K)<*1Fi*zV$OgLQقִn{���'���k_?ch:Mh| .N kJa?? 6Q8R{0L&1x_^Ѩn{m-ߚO(C='00ӄiJg#ۯy2D]MT;9f`Cj$^<S /&T6<j ̔4L>|'?��������! ) )��������q 'HD<89DfVBDfn|F-DrhʣѱA3Rq #T28lVɺ}#5GYCb<:s4dF* ?iZcd"EFdP Ҳ-g-3zٌ*$M%< l̩V:5SwnVo ��p��˹W~nq'-|K4MA}镆n~a0A>de1x=]T5L./ܘy{b;|}YvѳΞ$)sӽi1hQͤ{u ؑ:{v}y}2���������)`NnN8ᄏ'?Yq��������郣1;A*7-9,)clEDg aB)m8!aNK}t&l6lr3cPI-ˑb1akEP:1 Rm\F4-Z>ܦ#Rʫ<J:f WGiaY1P2(J2kCnCgDb̜~{E<~˗#���.���:)#ΛGw/FuwY@&c1(Í_H"xцǬD70k|d9kmc' \^Mo?bPڰxʻ3RyR{b<sbSM>7[z���������`Nn9��������8Yr³?M3Rz0tS=J_2uir˱Tl(E hC`wxF+qgFK4$IYZqr0sFy13xtz7#P|?tcdT\J 3X_/K'f҂V1gSV52/nLѦmdZO}iÝs9������s?ˏ:zd$F'Ə|72ݙ 3Ux́!*3K=ܛC Z͌c`mrnۓ9MQbwfMxFm7 'nPq˿r#sp.?k:UZL?sۆ_۴z.���������^n`Nn`N��������].\dEcc:f9L)Z"Qh?"NI?)f^:,b66/GUc41٨ L(B0HFj)(uIZ(E�B-/0/WJ`ŤsvFFUR8"$pQEŖ ij²~kJn+R-67t9ִ_[a@��0T$���j,ſ~h4M$_d*߹;tQQ ;f`4|sSS{ 3,|8TAhrqa$b:?e>Q7:wJ i ND>XH_\[ve jt!L>'޾ %���������^`Nn`N��������MnמR!TDQK?#dRJC:0Pmv^2BlZ-F} 4tZ jhC'gd ʴtrC1ђ2dQdMB;ٌ#g<%&l\q 6o_d T1݇am߿,>��*���r[q B1/ko3P\a f?Y Tw7Cg0y;^Qvmu Y#_0Ww?v&ZLkj^VX_fzf/er K?=)HfȉMH$5ɟ5w3o���������2��������Z\sM1D�QX%=ZE|6%nNQmD NmH}q#͘ JדƔT'03|Lvt59wM1zi"Z%뉰\Xo-?=sJ8W$3FZ`؈DXѬwĢeOSg^B5n!f6%Z#kZnĥ|}Ϳ<k ���ϛAZ���0ԋG<̛ �T|n0F 嚏:#9Θa{;;5Hvjg{jD{4=NaLl3g=9}=A⦋Tap6́ix.){b}N֍-L���������/)0 70���������rEu8XԬx"h;JPYM8IyMPbX(^[Q7SLjΡvT#xI 70*S,<HtXђ>vJzKk;Z&/XQxJE-NyĚQ (/L5d& gTx)_ާ޽3΍{"��T��|g/_~##i,}.$3Ivc9GP\~z{ 6_b\i_c8j)B/[C9{p_P+㵣o9c/l&2hsx3yFmNS3 v·6ڦM���������xI9e9��������xy%s/w3gΫoJ1F .D-Vc|a ؜e% Hish_<SIPB)uIGLeu%>c6eڐ:hieS(DġĵM:dN IO ,jx=)##{v*rltd\ +Ƭ0IQHމKVxQIDkڶm͟/6 ��ys ��,ſ~h4M2XJg2i\@^W F#]n:<E2豙M+7p3`|& )NY714#.LbKx"e@/<ctM;fTi13ό2ȰY/w߃D9g=2۷���������sps ��������q_{'RUZ#`prl9" }�9FMIWRLD"4R -1GSE7=zI4vECNɠ>x cJ̇$ ||-m EL%N2l+3P@TL5S?oo=7l1��xAT<��xǏ;y"3Y3Q92B2Heck-R_g*6vN&-XPiH<[4|gS }4K& !oڅ95 fnYCcg-G-MpkΚbΓOl ~Ƚ ���������pP9e9��������xyo쿼ME! Dt$(VS01ZJގbH]KG$}ttEd:` jTG,Rb38DUEf{kbM-Ecm3Gbɶ"@{F+חOVkbᥛߚk���~%��+pҩyO;o^4E6sԗuvKDP3~?}G &LL0^A?XZc{*,9kZİQ${Osi!6՞Z|Eqv,λhir7[z���������SS��������e+V.<4MC-EkC8Gt,D ;kYk)JɚA"IƌyPg[v(7n'Y ?V;*󈇾|IIEgHfIe"S.y#ɟDLS)Yw$ZDJbN!fra՜ӕEBɘRd5bS[6|f}wnc��W=��-9+sFBzɥ^GϞ?ҦN{g 'pd#H!NNs< OgOi73_{<yqRPNf+~T㱃e9X̍flG85 0T.秞QOT~4+{>V'���������4`Nn`N��������>^dEcٳPU4<Y3B *G`L hB\b R~bi2O]'cc!uD OGG'r,uƉl\MPZqs*WE'/%kO//,31.MPQi z'*EO-OO1ʸҚ/oԭ?L������^Tr-ph͔BT<C; NoCgFo{ ZxݦiCņ 9Vz^c?=@[+>oG1/͖1q˧68Y38sn*R%2Ƭ(yI+4gz?4۷���������^t`Nn`N��������.7ޱnN8)RWbOWEOh㝤Jʤ:FVyy挠2}%L-sH.9e "(L˪9%<.<NgX2& i2hE@bVX *$9) M=_ִY&0S^3o}{ۭa>��$��W~~,1w_gH߷] I;kR:ZvSXhGwnԠ}uo65cI~JlGYWUD"'LPG-w5wnӨ s:ϯ~sQ xn^z` L>o/ݰ;g�������� ��������p͍7o!̊DE EBZf!!6HP%2IArB6ȇRZn2r(t2lYnVM!5 b&vϢb}#48ZFlTZ7~sl֢8AgF?jNN)g&P9 ;7Ǯwx ��1 ��I^4MLyh,J3C)SG}g短\!crHe4 c<aA$8DM||4hN?cJnω#gJ!?` o\y#5<IzPzZ Fp)3g:02vmݸqkm��������B9e9��������xqYrE]pi_(O&PEɞ:Hh)9R]ΞZ-NFk8rG~L,Ag*%q$ϰ:!k\aEj+/Ӛѭ!ۢ =?#V . 9E=).N<wos���*0��i笘˗u2fcnyTjB'gB<sc}; De^[xDvo^3 lL{jN=}0v$1`DaKu1m?3OoMHgNfPfc}ȇgblІ_۴z &���������0 70���������/.Y:ѱw͞31h(`#XFΨ"1.IgKNIŜ:4 hZf 򞘵',cOwܩohjR"!1:ÈXףHv& (rL@Ye*aEgZl<% 5-ɨ2U<Vzl>$c+2[Z(TM?p}/omp��K�)��pK>|\dC1OPcy8}#k NOu]ϛ1wN$Vbyi>,NL<CM2eiY6MSϾcm۳4p ^<ȉmoAJ|'C;}���������3��������WwN8Hq[s +eB94 #3s+)3 D&XͽkK'b6uQ42iڏxEdOqv s ө0?Yl,m1kPaF4VeFHvoק&:B`L>]k9^Qc,@B_u۝[W߰,)��+��N^"2-4f4�gc埘ql` qjF(}FбkFwx;S֮5L'ўw_�UWcd2>? d(SvSn|A2Kc(ɟ5tò>r>$��������� ��������s͍7r ;xO%`fP%JW'V-RNjeYR<A8 S<8arQt  "U<92^FdGuLiD1Qv%}z91M&➌$5do9sXOPh^l-fD@5{$��o$��N}<~͛GDc0x;Ow-ulWxDCH)VsQ 0RꠀͨNL׌ 3I j\MexUYSY�StoH=1EfrQ&dS1HyqcߛܽkM^k&��������*0 70���������ϟWY;!Y}SJ$viPIxIfR*XGUN 5f JlplY')JN|HDDX,wEC H<gix\fIB˯LLAdzDT L]F8t(l!YܦLfRIEb橞Q&=3ݹq X��� ��i?휕+_9{&_r?HlsqcB'cT|I_ + ) 1Xr<n `�ێ{#ypyT!mT</x 7z:r 'Dy4qSe[Cm1Ǐdn knZ����������������`\xҹoW3{C^;b(ٰA<s! 9B93Q"5fA2$3Dв+&y5R{2m֨nKXr\,d"Q' ?OQ&~T[vV^v/̘bvm2ٙ]gPad$1YU׆yLD͉w߻SݾÔ��S���PK.~ÙB?JWsӱ4UƄTV+<Eڏ4Œmuh2sp&y $?3NjcLecaV;=zxYj4AAd'^{"bMKjbQc$G*Q*€ܷzq֪6gz?4on�������� sps ��������03>Ə;)1�� �IDAT/ƔDEOѦxbk03Emt}q[TxzOA@yܬkY5hQH̔*bѬI`%)_*t D--1Qi_*xIf)eY'k_ȢLM"6`4ij m,S>6FR is6&ַߺz3}��� 5i'��C q'/\@1  <Ӻ2UT{_eS 7BL D>Ԡ2?]?ol ݁vuCnGdTf1E5,e9 o,*81$7*<^ iXS_9N_z?|}0���������`Nr`N��������?i􍧟H&ϐڙšZa()r|Qf$:wUqGxšh .SӐ=46f^具(12T59dL[Ǚe|.FLJK%.,'#G][=J- q%[Fr񶌒v%ȅيMwd˯Z78���`N�!S.'&F7z#vh1NKau?72̔Od^G4[t1%gKqbۉF Tk)̕ j^_c6܁]3!Mch�%[}g~&Z;ol|'ݵuuK5��������#SS���������WYg{;f͚5k*[J*T 9gS)~y*SbЧvS=%8~Qdx(!?e0'Vʨc'Fg½/,*\$$zb)<Auʪk-6u"oQɞ^:<PN xZcT =m_-&Wq0lwUB1}xf{^ }vJ���$?���4-Z>MV,?葑IQU ̆�6C}^>^ 6 // G6yN!$^L| dgACt<t 85!vNDgھd2{J6xם͠BdCnݴz ��������2��������H.tccfPɤ]bGS)4uC6 ua0-FN \:N[էSXy]eClaA(sWD$DwyvO첅~<PDKR"k{FG̸vYϠ() F>׹冉4Qbc7#b8k߿\���4"��K.~Ù!4Mߤ"7�J;q&Fo RyXlfj?xx9]sƔ:u2eX}{?B)\gx` 1xROɋg-/U*=/]]{ΦYc: q~NTo?xv��������p`Nn`N�������� 7_zǟH!?8L/ ,$'ldD3#zcJsI-uX$*P3n(qN`fԕkƞBo #b8ԹExئ6a0,kT_dqfV4f)PsU%Jަ^Sv~a ����0t_wh|쎪� U{bdd: 9FTlȭ_z^ylc9?bg�1<?AtL4d Q̉$c,i E֊gLb4 3'cV!.Ø̼5.晚ǍSgɟ|K7,{q��������G0 70���������D8ߡyc<1ރ ƎdJ�dՐP.T \!.aD:N6[QDgGNFf\O5=*tIwu-/JΈsv'*IMg\[9'70]^dlAB 7\u��`m ��0qҩoowu#Λˢ¾z?ZL ڃd 3Nx8fL)q޷ CT Juvi7 $Ge(H-M<&ӍKtbj2zcw킞G^ֆ^l< >训7[zi ��������89e9�������+Eif̖RUl(IO% 3dE\RgܬD<J1k0D4Z$$es$-t][AH1Dg˳1} OH7O"gM1.v8XR5# Q%‘&~ 0PuGN1}znc��`9��3N[|sV|ū&Fp +l^BbC6r==YEr2|3ք^[7fǀ:樂obu֒dle*ff׍1g3MZRŤ^('mXufn��������a ) )��������D.\2zGy1=BRx7S>Օ"e(ZK^=_dLIFQ# ̸UF4*sB>fpT0'fssry}D9f.LC&J3r n3]bW�B1<q3̜"cw}l=t Fî{O8ж߸͟&P���A�� 1g]v 4=Jf~':#gښxfݦͬa7;^w7v:@oܶ*両9Htbr'8c`/*NaZS]QGQkd2 Z.z4D#yH=C_e޾��������8 9e9�������rqshE_ gDueJv.@&)h,,qyJ )nsk{*$rCg^qMh:+>8VVJk`)diZjr4P1xHSxvEWu<Son{ _2��z���\pǏ;yiLx6 -'e[o&tQF^|lynu w@ FkP|CLY~ͤuB0kH/w' "b^=ObL<$׊tS!ZiOOn$ xy+>]~e?x}A��������0��������G Cq cm貥eh L%ߔ017lbJ[SGi�4XGECB㈋xZb 2zo$7ORR̴y$hʔUBZ< Im!Eh\\x&GvS#6R)P$.&hYڱuI�>i^x|c\u8��ÆW$���'W_7ry,*e�ݧ^S3R8?9|#yo6XӺIEUeA:RmhcHz|,S FCYG` 5[uO/ d6DŊTuSnM/OaPs|_|׺%5��������SS��������,[>/mH+a5D%%2S0Q]@]mvQCI&O�YWB2 }p)J"o*˼w.J?CJEIN{Dd( O<ΰͰRƬPEGLYب_hcc D-B(kO?ylw1A���pXs ��A?g7b+3;E#/f:J2d$#1g<g6q*@qJ^? B+ޘ $@&>j,aT&U7yb'7~4!P^92Y3瘢fȠKd?7І[7^o�������� 90 70��������8\po_Ϋ3{R%xECLd'IF'b׬pc.=ՓD-!r9,"'ӁW"YOCht2־o#ԪGP%[ WOsq@dx$$FXl[<I- ~+uyDžF [/#:qS} ��a��89뒵 b1?8ˆBv/<Pr3 `CA ]9�x>{io'O*swQP >ip2(]n'wj$tV.ZZ]ƙz=5`věQ34*v<U38F\a1رL>'}}$��������02�������pnS,pئL'$աd)l3P)D3kPa"u�Qh9ep;Z#G_eVnר&~Ùg/ C&zNEgh-PsW7jrgMY ޶ݺ��8���1\pƏ?yH4v,AgMɝٗGwMeQVM"386r 3^<4M%M}t+Bid2v!Tl9DL)66*>)@8!9c-Fxd&uϮtò<r>$��������`Ȁ9e9>dő��������͗r _a3tB{W YoDPb"Ȅ!ڤ"~(<Il )r`>uE$ $aiߺN (<4uHU4521_fr"󉸏[N- ?="ehbqG"sHu] uњ߽Ο��S��S.'&F7bߤR*>/[gv0~2!OIvmY3Yu;qI*PN^bz6t%myDlry\c1uAuO�w^ml)ƘbPiqBgR͢œX|D<~&6gc5训7[z ��������0D2 s �������ÁesM4L;27Qr}k4Q\ *N s;z(8ed񃑵xƔ{s-izmΈa"# $T2sPbYbh*51K:%E~/,V;%AJk+2K/w>޵L��C��#7-Z>9+W92f{?hfИvcnyj)jEYKg|Ƞ7fc +^x{k@7Pe=ҸHavrP@w67P@x5VPq+lDNbŦ?. S?n[Mכ��������C�) )��������sH cq05 �EgazJ ('tu~xۭHqdEO 0YAGѝLͣeVd`!+p�j+Sєa2[iRuX3gaAj>etZ}x* Jm6P|O8p|t;��#o��#^Kp%MhcQ ~Qʞ30u)'kJTsL3(7^<)L *QEаq#y!loL-.Y뚌d;A=Sw߈cǧ&ݎ[T6;ɟ>t-G�������CSS�������� +7'VwyDbʈE2TOI t/�f~r9p K=M҉ \ 7,-uҴ"Mwvzj?y~$J&2OP!S7^hM0~">XL]{JUyWuDYυ%eeCL1*9 " [ I]01{Ō��g���\.ǟpA47:gNIY#z[9Q\0̴6h3K1Ȥe/k(Q"0L~aM(zulTTa12oI>3b?:*iKVPԳ1(AmIR'M4 5\˯˃];r?xg��������CSS�������� ?peoW7;ӚN 8B<eI9\c8qNlݵLmu+ *L$Rl m)UjɱT86 nj1t(Z< :t͆l0 BJ!))[K^TXΤ#aZWd$޳14QɲR3H޽x:S ��O ���@'Wy_kΛ7eRa7Mʃ4 s6P);tiA@Lhc$F3w X]oL'w̫MZ9"k_ ! LFj{1>>fQs-siOqLCz,y^:hsVGK;Q��������/+0 70��������X?: 4l)& t!<ӉBP1tB& cĐ@_1qJ>"%8sIu(*"[*A"T\PK2PKP}I%n96D{aG?X5u-,9|i'kؓ]3f)M<w޻7|z×?{מ4��ᘿC���M?}ъG=2BDc0D3 򔫑|S JmWO/keb]L;:$R pXLƔB"b}G{RPYE^5xϘ}Ļ5*~bNr]JrM>aM��������psps �������C.;Kyѳg@+C>uG.$ פP'2s�kk@gɇvdp눡9Kfc cBKth:e1g0}F#n$ZG "3NWC> )mXX"$ {Xj64/!"i<ڞ|6Y]m'h?-w���� S���̘^v:st;}b,c# !5DA6[MPA]fmpj{H֞6>3:|Bng 6;AOS hC!2./@ APyE!gm2�d '9/4)?N];Gۈ��������//0 70��������8cXsH+6Y!?ah[i & Zu*9:܄њbA+LwrhJLP 1:cBVF-ԛW d'y,)?6QESRIgi(+aL0!+FQM1HZ))eN`4gb~zb#���`����p_? ( *:ӦkCFe3*8u|zzcӦwL Mk`)'bƘM1H�� �IDAT6vFs=NcvPI ` qHc$Jܤ~Y\<G [Ú$}679/o<^�82ͺN2c?ksl׎x?y3f��������) )��������EVN9̅? #Bq՘Įbj!mVbd?|1RMҰ%Fl@9;JDk1ki'/soE,֯f>S&n^q-W1 k~k"d^בJJ؈kǻ'L����_#���`|#o>bb5E1y3$x{]uFrqڬXv+dBx.*myqƊ> bg]{ Q\/b"sFs'yQ/V5tvnL=Æ3h3IctwӮw%L��������xI9e9�������+Yvi\QڴO$D ɠgAلE$5Zr1w!%v ' bf[NiҮI$&Z`N8.J!pA(,HG-E6y\RL'Ajē8j3񖹛l(}&?]O��ipv���3M?+_9TX6{p>;ejW!4hm2OJ(MkQ&* gp)l<AP qJhIWsxyfφT;8ZD_ Xk1GOA,v7NE1ho�������SS�������� x>f9D/%eOWaՕSYIAt紣,k`,ɔ"L9<ד6O3?AVEY̤&0U.),nWCc2ψUd %:ƿbC+2U&;EsbrϖO;���)���^ξdxhS+z&BUfܨޘ!2S028,HM奈mӦ aLIrm& K}"{PEotk@NŌAbMċ([ѐL7/;}%8%7,4;O[~���������SS��������|cyܹ~%Ƀ1eG@$! %_:f%aOzf"dr<ȢR2|T*JߠBD^.0q Ns'+?Gh!{T4 fPѶdJmd5gdj l.LٌLhkk?[= ���x��E+0,!T0? ;}(%ԩjRD"=cP ǀNB1jKlm̘L2[̧3ΘDqRkbTsN˛cvу䮝{<vc q0c^ 63nz,w|Ϯ_߲fw��������D`Nn`N�������rOooo| {:| gKY%An 8L`J*Y|:b z1Oeeܲ,0\ۻ:ZYE/lƜᝂSd8SJ *:HSnZŚs3GSbɫ|ugnчɒ[ö$8eKݻwW3M���/S���ůs9?#f_C aNi8ǀ)o5E0aemPFgPƕA=02{*v`v~\ϩ9[uےB(|#;{ϢcK&o& \z>&��������A��������/5W,_hѹ\:k֬&RA~h&|je*QDi7n6Y1 B�՗om0~3BjI'R9SKՄj "(g{nSQ9CWl?}JI S:5l)p.KVyZÉg~wf×?{ ���+�s ��sV?}ъGrl"{JC>6Aq/}c)x=5DuXCiVeѧy6&u=$)-%jtcPLXi!xHTPAxq*c ;gH=SAH/P.uوeκD ;۸iz>��������E��������/{'.={]M狁:dpɟ�+]!X@1ߘ8* N7SJR09Q7[8y:-j) ^�-^陋m"fH9y{~ݺV1[<IocHҭw|h-wj��� ���x9_\$T|ESc~ ^*<_j»lxvVIH흽%N1B0{bF ]&hx8&x%tmݕ>|\|̩/1LߘFf�*'ؐ5peNs&SQ<s k;ɟ~[Ʒ?f`��������) )��������^ nk;aH߻tA']f &"PRgLS76E;u]GOHdZ) ]eYETDq RdKH_;5Gu%x1e: 糒0ɈHsLu)e9F?E;Ql4Aբ<Ҋ0w?[=���^D$��� qѕ_I  *%);Hc*q:x/XvTR9aL P �AYDE,.WSUBj u h5~z<D<20ӈJ:Ζq(3 gkװ^P1w2ߵcno>t|?vgv|k`��������x9e9�������d>t)yVoWLR{a*L* R{ Un DbcSR)_E)˜MLR56;N2@4Q6%e TfM#ݦIg)T$E.Q%TxKK˞oZ':ҧ2si=S׮{|c'v���?���wν̛GATc {5v*ʦuP}S"E"DeQIefP4ԏCd!B3~`/g.]*̱v_U>84%SP"D&?Ţ1)Ê1x!W=?ֻ>%5��������) )��������W,_hѹ\4ԹW&w?V(ss"&N.FCh#ZdHqd3 ͿN.|I8>ӘvZ&id)nq>Vmbb3 Ğ҆'PB g娤Ʉ+G)z43ecFq}ݾݴsw=a ��� ���x 8}r+^5g6Τbvzlg6v+NFԎ ϨՋ cY@2zM1%nn3zȾم͟oD{01p&#&Njk_*z %;1Mr}ӥyw"bgi1J7<fPRruf&5wo<@MSm?~s_ٴz ���������`Nn`N�������brѥc'^=gΫګĿs Hx:|A DQc\IFHyr)X 3hK)uGQ.1jZ4dj! %d`f P.BaFmeTE?!U#{}&JPUJKQTI1 #Vcx+-i";Xk_rϖgi���8���^v>st4Tqjԟ+o:^Jy(3M)jG7dHmHHP& iL ,!ШxW'8q RVb]wnYCN%Njc.b~>b ?QOu体1>Nĭ<hAezh?]O�~V3_7Ix[mbZ6"VY@K#QnEEr[ExBmO%U  D&ys>[{~3zy}ב{;������3�������� >MqP)e@=FO38`o,yp)4$E"yI+,k+$ rNi =&g2t:HDff[>TIHN2FzvI\BILl["wͫx8Sc޵&ljwP���E`_H���\y=0":G rP#kk! QxbY 狝}m0Y(}.zTO e3EPv;Qg 'pGٛH92s6P|_d_LOO}:U4l=vbݵ?5L��������` @2@�������r_|ֹMwyZ8+8SzҨ)=G7asK: 2z$�JݗIt啡6dD&Bp’D-ɜU1CѼ*-bZ}(7I VČjfMB(ӿmsZ7^U%gt ��;���uo9~w||WΞMN>LkzPlX~-ʎ"HAz-xŔrF G '#D?@TU>웱_{w�#gI8vgm# ]CypbOg$}+^1yWzF5u_V��������T8e8�������.ؼy{c2JpX0qNxV\( e2 A#LK&[p6Gx~J'Jqd5mW=גRx;Y^&XV8ER+e#9,VIGeM|Ӫňd"yƷnyrז}i7n~K������;;9G]t{MAo}.8ނ%$qWE t>$CpN 1Ub=gWl*Hؑ"B}ipS)sT -ELnwF as8~s Ɋ:ڮHȎ⎧ҫza��������� Nm N�������L9C:n>}fqa@T2$&"--7y:!5(QWJH J*=qJ^m-~U"j>3N֨<U936| dJBK!6C[ )"&w,0m8[f':$mW~owhU3�����0OƷBDci>V_H_w;]Z8B{y0w*"{xf.iaR_3H]0&p;Xa ?ŠsH]OH 1D#”Tij wDw*倕#bTvګ/c�������� SFS��������<²g* 9�JX@Y=p*xqjhEJK$0) G>ϔ$^bmKX-Kh!TAԒ1tE/*y$Zȓ=kN[g?^ɤd**6QQfbSaY,sH+~u^d���0���;ǞՋ$1T{eaEjnQ]\ԑ>i$*,cGu|BMhغ_w|Y I"[G8y: |{Zm-U P~jɐNb,҈(5TǕBĢRH#Z}傟}��������8e8�������TX~7Ů#koxHR!EV1*>Ѵ%Q= _SkѤ<3yWDJ1QV 1Bn|^ko9"D-yh3k7(^ 댧ZMvttJu *L&$BJAd $,fK/vE1覇7]~K���`' ���xc,hlF-"S2V.yn.*;qИqkT7+c/ojΧD>#-Z{pr⸑s)'W?Xm֪_L~#TJՉTǃ߼_f��������@2@�������`gyG>BK8Ou" Қx8xA} L7AvTȄ՝ߝ7C`B\,}6V$r|<_ L'TQED[xʞr  q)ubV;S,,%x D)v,ڥw_3R=i|'|mV|+_l���;C���v>zԅs̻| 4&&T+ҨY'AvL(1O, i]L t_"(VfENEN/l"ݫ=\1%HyWl0(CJaKJuS]}H oPGﭻm?}=KZ{7:�������n ) )��������<Sgp=m’0n*,)P(+}؜㎹`1Yl=U41QTbbU2%T"r`|{ ^YƴX¬.*l2ظ|7lvb3ǞMAm$[|%DI=w|ǎ?Zjus���bY���Fy'7u4MO֤0ү1NBI)ۡ�Ix'&KH t;W=E0MH581G#NP^s^ŗ iOy.54(+ 9GH̼L<CCqhHaq,FѤA&yAcc_{Ew_?a�������-8e8�������/,t#gtQń*]"]̠\baFI 5vU3qr$t/_kenPk#P _2B,TP -;yC%Y1!xWvwGs/&=WDa2ї U}%g(7nĵ-Y=���;���g|~=찐/"?(QPirj1US" 3 SHy 'Kt%4oF dgorS;$b> =q<<2p6+ql')T|RA6SwӼ<fzc?u_<u?5`��������v+ Nm N�������X.C**&T."gś�� �IDAT N_(W{:S& gp9[!53~j`MQxb)_" DfZ'<&js-YUVGJ.tyY���0"����F|wwɒ=Tr0c2?\lb&V(S !LIqu|wi|28g?Ci[&Lak dDڎe<'>1\a7=Y}|,Z\n1*Ni=])YpT8o||qefs��������v Nm N�������py;kB0{gw^U /Nkx\2፺?W<! �PNE1wD+R TuUUQ(sEWQIaU>(UPaw *䁋uHP:$_QTk<'ԤWdZ܅U1<+}㦯>N���c:���Fy!s]x^>}F4&4@WU 2 lkO(I*Nn5W$g M2^;?0jnD<{Lz^3穅$4Q+^yMYCyF <{y> KXZME=MSoOҫ1��������@2@�������/ੳN 6mZHD&*<^~)DX|cޡ6!E[>%^ UVlUVݩќY O".UfDNګ *Z.ZxD)<X"(6H$JާH-*Z"/%MJ9)7rIm(=29<wlի]���q ��]y']{rJT))$%NT܃!dH# SJbvZX;"є8v<+Xg.d_-.RN*|MEUe#j:w1qyaHJB`mij~~L۞zZ{Ew_?a�������qhq �������\嗾j_ӫj>xq Tw/E(jRb-i$A[ xPs}Z<t;FRi&N@JB_IKP K$0 _>kG_k1NIVH]`rZ3"K4%^M{y`bĵ._m���FS���|̯^gN:3?u+'Pq*01%h ޿Փ(}zțr|TblBZt?x^IDJ, ߃8_G;u(FG$|1Br79廊DkqXh/{GwroJ��������vy Nm N������݋Eq8d]pxa|G'(*z7LBI XIRWŠLn(b"~8!x ]d0I䱜:yŏb_UUi7E&F'=ćZOLH_n^xBtsPjc *J(N,n̐?M;���.���؅x[^d}gϦ@c}1,;MwdMc9$wXN pDh|w7QԾ{1oϞ}fC A9Cx�!*,h?ha;—c%ߎžy-=ܣ<<r 6~02H��������6�������]2X=jF 'YJ"mI1(A"҇*8*zB35E&,$$%"J66ī@*ɠTUOtQ#R+,J4I<Y'Ô9I$7NbhY^yAuWvtr~jD[<k+bWnl������]9G^pȜ#/e{MD*T *z'uxss~ԵI*wpTE5 f@x" 1TSAvp"uή ǹClVsdӠK ;yN_WIKHNQ t)^/[Y@bRO$;kTk1n{^uǭh�������`��������ص9>?<? a!gI""y<)b(dVqscD?7u c] J*_#u=ZQ%-4ȃ0Bg?L@xbG,ܗ}.-\Hb^bUYbda)!OT|&$8'jj{xk$QZ1J{v߱cme}���.���yҵ'q)^ާ[euө Ny{vHߘ'(CV$³gzh cFǾјYsF vkl8x"L0kfWy? �������Hqhq �������\wAʼuaa3rP R`雫,r˻rBWycțh 'G$.+ql0P.QԜYU`\R  >L&8 ==~m3A\ =% k?X7qW ���x9���.g}^saDT8H(Oz}XH"6�MX|6 ] A滷](ы٫#UU<OE2| =Y yn.NOL2%1j{R@n(8UUиv:tjUV'~֮x6D��������# ) )�������ϯ]9ۅ `}/P%Ox%6X:N| Jy1b]BF "+xtJIBX:cX S=WQkbr#TMyG؄?iiMWf7{u#|D.||fP*SMu [O?is �������3{%ճc1O ᝾~rIiտVDݵdߙwrSڊ5鲠ae}d9X3'9qıwXC(eZQLes[1<s5 aAj{IpZ ?/ڙɵlj+/\ׇw4^׮��������������u8K5M؃"-L`'/rq"z VsP"?EylT:Ėɏ{zwŴDj=:i'ЕR*ш~Pj!  +#N\o[bItP$L$ 5ay-"/CN2!Jp[Ͼ0e|'|meknZ��� 8��nϜ.3wD4)#ShBW0ֆ2S!J�)n" "D,bqCmm79t`gRSŔTɺ1Ji[=s�{oM,u)z<be q)[ /5v=kg}n{^uǭh������� Nm N������6S\{O#RTcجjJ'x9+RB9=U`59jyV,&^yHr2Ky '.!5?ER|?\X.xe B0Cd\c8~7{Wr!NKMSZJ|b6߱}o}>s���1<B���`㨓=MsO9%PD12ߑ_7:t]EWYB k{׼9 /G}^gLRܓ•suj>Vj5oF+F~\k1Rc:Sh~ &-G-/}Z0q ?v̿k.O��������������m—jfE)/ARy9 ̫j-E4ӚTN[ ;TKk+J�ȡk ;JYNl6u9t4CvnI9_J0g`V*pgr4 l&ԢOZH "Nnec{&'f]2LYIz"bQ{z���'���9^k'u?/T|$ԯQb!_wv9Lhw1a$Rd[ѷA}ĹL$' a.P ڮ5AB2|Xa[w]o5:ưt_ݵ?~6�������N ) )�������0,k!s/>0E*&r:_W t*xPD+d!GHA)׻vFGLD6r)0J%|M2 y7g[^T+:KNhP+L�j 8rĘEzm(-u쮱D'H%yDu><1x*<H2PdDÛ6]~9K���3����^g%Kyg8* +ߚJ ]W>GqB=3~J tP}8I55J+d_oq{4eFчvhqI> ckUݯLdRvˊL$[4Tjbݰydal3 ��������������-<c}MGT9  )^=ݏBH&VM:嗖/?#+|s-x4&*Xvx)OI2ݢ{?xgWrEx%-KĊ] E߳Qx!>FJh Ε(M]#oݲe˭W,M+m���]�����y!s=_>cFb SC?xCR׬PBdsqf#c3Ol"]LjMr|HaJBQd2;G]tHJHbW\ fvR&14k/1yxz)m~,7nMC��������;6�������h6?<og/ng;oO"?Fp6B:E&Tӑ<AeUN‡=h fc[6%pwL•XC)ɗ:M}ϥ)E^<XZUs€:MT҆>q3t)'nasD"D%!Rt` v;\zղ|fH�������0No{)M4 _gCK 8j8/aPN1'LH'G`~ƻ;xN| Aصd7%L[ckMA#q1FT;<ysa w ݇S$"U֮!gݾv^4 =﮽| 3 �������SFS�������`ϯtzMOy%@N~K`A cQe@ ]چ_ɤ_a$L;!M.4 !s~d:ۙCD:Rפ~bj &ve.^ \�~ڟ*<ݫ'"'xo.u{͢ūS�������:ǟ}Ò@@N˹A~ߧ}VΟ (`ț ^7;IeGs"{FR +z4-> #1%Ҩ9yUG{wskvHb#Wc㼇6'L˨Ab\1%v3چ_lx7oroj�������qhq �������,k ,$$*pr' )nک|BbR"*zt9WI�D$D~>ڠ8<f2ϼyi$&BL/LbrL@tQCRcD,r7E#15:iX<4}f�:OP("aAˌFb^G~x,3���K~����-<+g1- }6vTu(Bvv'!T`-1=:Hq!&dp^Iݕ_jm9?^ef|Zd2<<{#(CyN t<J'[{J5Bps߸+lkW7̿�������qhq �������|G.>]|f=�raz�VI /gAT`hgĔSp|#;TdN">Ǐ2$蚵1 E!,\ ⮍F͕OńC?G#JVP1UGt%Q yϢ[rV|yWVn���Fb����Lܣ.3 3fјvDrTO Hl,Q"bR CN!>I0JT?Bp&X_X”yϔCaq`jwKMhmL!ک_$[^m[S|߆},7nč��������X@2@�������;ǞtO M>#0zAd*AbQA%h1|B] AY"BHǕdYU.kO*AĜdUQ(_;lk|PD c{ETv!bw>7r8YÚwoU,V0޵|رի}?4S���`R��� 8OBӄ@cTe|!'AyHpkk-IM3ߏ"W<w{>xBTssgZ:tD 5ZK9\]5EWs/RmCN+jՂjZUhhN/E^؛p^+)|bm ۞~'$��������^4 Nm N������?85D0G4]5#_ϟX;E2�9OW`�DL<>i^'3vˏ$!<lO Bfr$"L rN8$bNv`S%PHhOHs~uFEYjtH6S+U (PBѢ޳M|j||Y*����>����9ǝuR-P ]|Ux>%uGt>. *B]݄8}cT`႐R 3mnKEa(O9se2{9~޾d*]gؼ-<k ꢾƅS|+Zأ'^^[in?dznZ/6o+Nl3�������@2@�������/-o> Eŋ^;RD0QɐSj$LdUWU i7AJK`oXi ۶=3si>a"{F [ U!@}Pӛ:LdZBI =;xRTd ~(C"=�� �IDAT[){TH ܲ>[Ï<���c����7cr+_='R^b1 ʉ\@1GstC{%g>Έ2*B-~ NOk Dn9ɣd98rV| ~_([6zs0pJ(Csߟ[{߬Ъ/Γ wk{kS,-eXm 6<+/s;�������x8e8�������^#c? M) )Vl&h$E'<̪:g n[,Δ4zצsҹ0AQ,۾_ERǩjbO,p–Fdc#@`#E*m'_;m% Pyʺ *Y CѢ'E h-[nYboq="����i����<wy!s½^>cF4!9pB;mJ8bЫւ<C;,_+N#US/aB=1OHdP" >;¶cM(~w<qrE4v>{TNz2qcpMeJp}ymߩЍm}xočS �������qhq �������{ҩN8!йɻzVEcРnueUV�Y?v#1J)F*][mB1DR е"p>kvEhѿްy⥒QHoRHIKQ{%/xOS۽:|<QkӊCkj|)桔Ehշ^vg3]���p2 ���|7:6"|f߭q>)/ƷL4dD*%M0Q h]_r([C?F.iK'D33 vͣmְQ1K+cuU{~ ҺC٤]0v~헛sU']��������+6�������5[q~z]$:׆y,9 lB#C4ʊ,pm92H! sT"!$tU;nOPr&xqyf,HJ2$(2''j-^je'%9nӞc6~Pi+kIqWl~`bbŋ����^<>����<ߜpDckN̫KR(Z-tDuR]xB됱QVXi<ϵ@$LVe1 [8Ȫx]5LW1E]=*栓}DGt_N8kjCv}P&gn*:{c0nc+Nl3 �������</@2@�������/<mGāb!0t|%scPVN `�NEB4D�-9.XE,Qy N?2{j0 QJY#HQ'Nạ+@II{ BȍZ.?c-\?hnEBy7ʙE>gL ���_x�����f}W^+_=L?y߱c_Pho?qC޶eQD߳Z:cL_ 2w__.68 ,qHgl_Aó.an=!Sd|_}P&-(66z&Q5:{z6^_g5݆~v?|qeސ��������6������� }c}quZ`@JD)&=hSC6"!XIākK@6UIUL&YSu4N F D\ƓyeM-J3'T@2Y@WVP6ֳ Y ^D'J)oHyu@'#T]:hNP]ԓOnye_���cR���� #/8dQ^g"�bcD}7 :Mpx41bNFcz~";JsM6&92D=_;A^;^A=6fSgJgH~C\ж۟-�������8e8�������=Y'6mZPNd8 QlsЯuB@&�DQ$-/],dLؚ;ILzYCiC r*(6*w R8I5}G`=ǔwl7>}Tվw>)ҏ-N@ctX1K,ڱc{{W/����x���O˓8w&E*g߫Dдmy%Ҝux�կ0' uB 1FOllO(4/:h̒ljxb@Kk̫$*W& QD`n Mp7%j<~W_{���������6�������՟[q~^)E&I%wUS$)~68(3g�B$'@v/"fo?I-Nub$8Qm.wf)*Y#؊-4 /Dگr$CZJ" DTMlB~W b_zy`bbŋטM��������/&'}z~;)&2*c =FRET~7qL" ~r|J=93D|PE@'O`vxmD,lTߡa 1T{kI>+OL4ц_lxۮ8}5ۦ8��������SFS�������aџ]͇zx7œ*x*D\rd#A >E4M3L�1ۆZCP'2Z.p%9K>ݏ6l\̐82mb(#7;&ysA`){^"J&:Pb$LaUL}3U{/ԑ~_[Ï<N2����x!8��� x<}r}gJ"S*|fNі9(L^IR)IK Rt04:-vp17S6QNF֮̄!{~o*93҉YY`:X(;)qXyb> ͕Ç.3�������6�������s̏|l޻9&4MxnP ^dX! pcM(�SA</JhJsjA]>XǠH !CBV ˍʮCM$6 1);cRpGQ{ʫ4YFZfVCqMâ[luŊknqh����E����%w]4gk3(J*Qxvkxms؃7|*4A:Ҙ~@?;UC`$!&j-!kN8}5'o' :.=z'x=} n!׌xg2<j; m5QP +6v޳_7��������qhq �������<;ҩNEӧϘ=7 HD̶T>@KT!:bTf?UWgT>[+ ܁X )2e6iM?>%TyX y;|Z;U.)C)bIp.l.n䢗ۄ)o۶mV-@����xI���K{No:S59G^e7ܑS� 2cI RHMxbJ`}qȘ|qc:Ĕ5x IM'5*'mYY8I SsGju[rF6h6Ava都Qs {QSOlΫ绯0�������@2@�������Ϝk8h6ۆ$&iBTRmR?K�+XIRJ Skkn/XY`"w"Nh=T`G`c-i.%fgT?)RF>DlN5M׶R1^ŝغ2zBpANItce#N;"=WQE[w56����%����; '}Ș\=?NJ<џÅx`ƴǛ= =~M(DډevNQ{i0ķBPm=n`mny,Zu$�)0T>g#u y!lG ~zT_߾ �������@�qhq �������Lr^,M&._Pc 7[21g$ \/1kFg,Ts!MV3 CN,(�Sr`pgNdb"!)-2 oaM VJ(EcӕUMn|ZÏ<3i����SP�����; ?GO畳fQ17y_sa%@I8cQ'�'i0:OMY0̸̉#(zlmT0zh]IkT!kM}L%3JW ؁S_L=d+iY,Uh3vOƵ+ ��������d Nm N������9#{ǝ^8Ww`Hgx|=WY]#,&EXc,�() !#:6m. ض’F''fqPEfVMsXT Y?6d>'Fau5\Y<RD)5{MK/֥^_\ԓOneekn���� ����v=9s^>c@)�U4Qqx! $%P^TR`{}UAڣ_ۼ2GS&ĝa-L8b[9g(΂H?,;SCyv6چ6n/očf�������� Nq N������:Ǟ|/`ڴ3"ѹFo_a!ўHB`Y,Y0;�PM\uUPAUO�Y@9yD?n++ts6sb#go 혮G7fz$(ŒĘ| >&۶;^6iC`x@/WPQryjn-}rtu&'A-"VՆ޼lE;b~kժU>����vzL&����vnsҧO|ܱSBأT0GG݉DN{3ϣIDҡ&|BS";riYQE'SIHtJׄl@@3I87X0ъoJM? 6iƳCekʹƝB$D5⽝mSOlΝWw_?a�������16�������5i~4[VJ楫%Ɲm:~ׁM,�ǯK,9[5t.$,)s5.  8m'(eB>1>Fc1Oc2G"J>1ӛ/}BDCdNb㋂HN9 c: qKMBDb/j|jD����ؿ���0xUT"';b}V8N�EH9C8'\0LV3'} G \6Hi`]  9@|PŹml$Z=pC8#pa q̺:+{g*}Ǽf NгmmWk%������n) )������� Y^p!o;+B쇾e|'PUKrSAPxN"[[O�<<Z9\ EI0eos/c!S J?mbVF+bӐNd/21bZZ̑{*=g9$OE TD&yU)XEFnчtg.5����S����>n+w֬h,9p^*sE U)D_wxGus@R'̐ѷ8 (Z֤҆u9RNG;^ bL;jUl4re{Rҷdž6~s��������qhq ������� 8#{ǝ4M/<x4t{A;J'Z AB"+[{HְR L]>S"}0FS= &TFX%l-!t঍,F?QWeEϐ.q3l6Y]71l}>0HQ +:^Ɖ$s(jQY%UPqJx&*c>b .J-,_7=n����`$���У.3 k3Ƽ9&;1Rũ& Y LW.La@8o(aAJN:UXd*EI>waN48zNcSeab!RR)@h*6z{vmt�gg0wWUyڐ}77=K?y-,�������v Nm N������Sg4ዦM1(2Q fApSܔ赬I M fTs,*BikQWJA6 /h/o}#©y^;P/#=\<F(1!{}{ {6'y2(X",)UT&LTMХ&`DPnD4ݱ[VY$����F ����F'CأWRQci#$a=: !$ATqO%J JԘZ| $GJJr?"qZ1 Kž]AJ͎ʄBK8i>LwBzIJަ*z={~Y �������@2@������؝/-f*8'aAk@V~~'[u t )R")xڴD ,7jB�(D "@,Ԩs#Q7Oq�#C)*_{ �"T2z�HC\TTM [=TDQ#P5z`bbE���HI���Q|f=JڊvLzjߔ9%? VxkETweJI*bZt"N@ xId?J]ܗy>jX"5^v޳<KMX&H[&LNn5Dl1Gc>;|,ac_{?5�������qhq ������`wd#2 ]T2ׅAiVu+QxE(H Ƿu: "A7޸Uq$Prd,\h)Af~HQrԹi,7Jkr*{h ؄8up RRþ/߿=iӢ\Z������`卿y<fɒ5T9(JҾv(>c`ORY_̡*M{h&ЧD2U:-̣쫧U:{\ RgفWoSǗ{vb{՟M&sCne�������@2@������؝8#?]GwZ4p9*Pjgdp[7,2�� �IDAT6�></G"9at#hOW TU }s6tq\#QwQƄSd qH$ lTPKNv&$Ҕ2k<U=V:%PpJkO[髄$M2e a ҄SOnr+n_fm����y|:����B .|ٞӧE*uĔFkgO@1&㰊lj08?$NQBSpv=-5VV/v 3f%H=[<d'um۟^\s'n|�������;-6�������v>piO8L6cf8QDZ!-b#%>Qy"y>k1T@2  > # RG1 HlD6:u,򋖢<?JHa6UfHhH6NJl!5JX</V8kD~~o7i}own[^w���� ����쒼:̟BQIE;AHPQAT ή]E|D!?uq7`Su8ׇCTFVUhK0btފpщ1EgaԻҔ*%(<l5q ~;lΰvݰ'6ΫON������� �qhq ������`WSwwA)D)r]UFId`8pI(X[q/J+D>oߩv=E\Bh۵I<`dn39O"J4!Ҁ6>4I+"ϢJ֩c!qS0S9T @*UPG_cc~>nݽW-tU}����U8���8[/oTr|%:8źzb Xw3H;!"Zr)G10q#pf0y \vТ\!*1Kc Vc_o^G\ӏЫ ]6mWl3w������`8e8������2o>d4F¸:b,}YQmێT#{\1 xLVE%’YTXK@0nnubرg͸AmFMZ5E65&#_*XT*!<8f?/�5HPϯ0N{uPJ0)"-$ʊzJO!mM9k ���] ���]7+g߃TQ$̨/'>E�$ ER!j9FF=PsWS\d2BH鄑2E &1'8BVti> �Gcp=t2ua%.m50{s(W* 76+lxhڕ_ae�������(6�������v5Zuq5M #bz EOhB*؉r+(cft~ͳ%e~/yI &֨,YEX#ZF') N?O9 wLTi9CF@C [JA6,nvwNS E5 e':qP~/ؽK6[ܲWܾ+M#����ؿ&����w_|衿я3zTJ¯&*K߹"UPm5:{?eGRm˔D+;Ę$7|ZI㛭aޛPJ)&e*ZX"DJPŪ'&K_ y-$䡵S!ٯQL s*80noKqmhOg'+K������������±'63xڴ[sr0@g (ۨ*& )Z!-1ȠnryDghWP6Ѩ#;.w-"񊝊M<V+8Py T1 "~}9#zX<NYD�ӱ# ZiAMϠbm~s[ug����>?/����0mGsi(ИROʈO4h.3\EC8nTΡ!U3V{#R~QhF$8brDZ w8Hhk!|Q"f=7!1@ETV?XD'V3[,AU_Prv.R{la۶_nW׉vӶ��������6�������F6.fGg5AHE ['џX;D ̩&Jhx DP8Ԅ$yZK:K 45c:Ee�0G-lp,Qn+&Nd%V_/Z3$F"L}ʉׇU53SNYB(a,ԓ`ݺ{W>D����}2���nȫz+{_췿#P3 spCh$9_B&v|RwU1zȟ;aͱk! /39tumgZZVc7Vn$̟֡k]xV[.="BLD÷8T׼q Ն?]qO~f �������;96�������Fٯ}-83|ێ)B禭,.+㴬D'0:r8%A7XD09'%XVN鷧N%oҿkOCj.KA pszW6FD9k(J")=Ƙ߅\QBdrkMcZzjNQfZڎ BF&v>_z(?Ûot?}<:����~8j���`%z[N.Y2cYh̫"=g"NP !rƍ堐 ǜ$rY Ŕq�u ytviqK5Ğ-`abvgU)vc+U-66_syd9vu4VgYQ;7mO֮ƪ%mM[�������Y8e8������0j|Asq5M 3`P#[' Km@qx"oU"Eb#I1U b �LEHڇ rC ?LZ` kxŕȖ76ƞvUdO5kkJ.AJs}6A&| o ʼnGrr,yq|[ܲb;nyMs����8E����`we{Ms~{o;s4 4E#*GBwJZ1Pb l1J;5>L*pDDTJkLvžԺa`~K skmE4cNqIUV(z]})mikжOj=7^w|ƭO܌�������;6�������FlO:g<v=mt{#L9cQFJGM/$uDoto\HEՓrWҘZ+p< |]mx sښϼ|> sqIc!QLAeqqO&[) ZA%h/8$ȪgɊwEӒwV\_����́8����UܟO~Ӝ{Hc36B>\&<IPNɷH:H%7ZK0^0*N|\ 9y|ܑnh_N#ֵ)6"} %qOh_j{M")5Wjv톈tgIf }vUy$!0xpö;>6������y8e8������0 yg|tD,֮ctEJ5N04=FW`MU+ ZCd1J"I1N3$D(Q,n!XkmnǪUs$rى'Vj~jaaۮznN;} :r/iz Ŷ?Bbu~H3/NL| [_2;���� W5����U͡yKw@cC z]X^.E!E~G>ҎP3'1ӵ& j*NMrgR+DCz I,�ŻM֎ ƪ+ѶznL?;W_qO֯f������N�) )������W x!o?ם#e#фDĮmEb5}ȏ Fuۗnv�3YT(--;\['{+ �]|Ň 9DٗaR dx.A^bZJ0bb5ș%b1Zwͽ .Ngo/w�����%�����-'\qWt D*ٙJG'Nq$�…CeX_[͗DjAVM!Q'ԞXlψM _Vmr.I6vP#F4|lW99#ݽ}x~k[]7{2W=e ?ݸvGŴ������SFS�������;#4g?-4M/yi 蝈5tv|A^IEcAR|=Ӥ5RD**`B+"ܧlWW@O*)GbɞEc!* hq :cExe<و]TmǤQY8qܶ=?/O|ݴ&bTOza *rJ%[nrˊe۷o'����p����Ǟ:w>ѽ^>cFa,RPW O&I D2Lpp\W*9zϭa܁J4ZaPcc}v< Z8CJTI[{W)Eu 3',q nß\㼎ж۟^Ƨ>>)�������x@2@������ؙxc>0IcgiӧJ)$2Bzy@&z(.ZP@%vՔ-;MQVtbA;A JtU$xc+Q@<L_$S⩑c*-^@XQkLTEd8V&kk Ƴ*GjB~/lSV%Zcǎw^j_����P7����ܟy~mM41҇<[͂u(CTT l;F Y$7ذRbWS%MI̗F$2, n5/A_mi\_oQ'Z\!]S '.3'g~?{_'⎧h�������8e8������ߚGpy(X96ND L"q=6Tt"^pݚ !J! y+D,٣E+QVF EaR[< 5$~EVDn?-fc% {zz׈OL| [4����� '����3U͡#K[@ OY5cc8ec*;ε4nM�!׫h2רE|oZ"8؝}n&Nm>i^U*Z;es%7,>'z0eLgG bi7oW.[Mw�������x8e8������R׾q#stvf ^dHYb^#T: ƪ ,CfWQ%X+䘸eX\;k۰)JdMT*'Pq**&)HB?ۦ~EՔ@IlB ^_ٞF+>!X:?DgX&/fY蒟=i翸{5f�����*,8����gE-b}_=b'R!ߧg[^Cӎ=I<ʑ88Ӛu G]Vkؓݘ[vzc D )f#!GwMLN~Mpc1wSOCk Q dove= �������^X Nm N������T|+iig?i^(.O.V]) q[>S68% CġmYjE⺺ZJitk\u; /L"nKXOcـz 6β'+!&4V{@IؕTPSE‹"!c݂`ČFj c %!@϶ H@[{ -/RdAwV5sv?k5d늁%$6vlrQl;:)%'Tu9 &U}̜b!e:�9-^+n'''' �����s ����^2f>Ⓡr>kTT]2JGL +{v<YX'IJaJft,L@zsd&c'GϹ{mkD';ws4#KƘZHRTlR`.[Mpm'{ iEOl72�������,2������xMI+s؃*5FdZGiv2Zq!P[ok.p&[\ >U]Rrr JY)&1JpIh*ಟ/7$:2܃Cx"6T"UMYKϊ2xTKd9d-7yqĐɠR.jc~뮽~f �����/ ����by z'2@ŤM)*QD ⱺȒXf^g0FiaUasq°ӇJjR T7Lyܳ6i˘89ztAST2Cq z.ݣIgj6= ;/nj������SFS�������$.9N[ Y?Q<tȄ2$γH"KY�ȋ<ٝW}oo %ZtW3cGyXʘ!Ūw^_& 9^[TO\D3]FC26: 3]Pj$kܐ7V庄9l/~S)Eo擛7eF?&6hWM絛G~s ����EQ& ����ӑ_7btN?5\z_G㺾el~_MR _w? ֹVKfASfLu.l,YtB%5uQӔ1;Gk}>/t{ך^ce{(Y<S->_-7^7N �������%������+~oz3sVCtvf'L]$vץ1_%f u3w8)Jäs zset H"&e߁0ywޝR/UWX駜g# ?J{M{B$+J`n0)Kfz1gD`a lN&-Eڔ*֔s`A% 2#OVG;�����^(;����KJ?jռ=/WQhDDqBE ?U ˰3Ogjlla{sj jJ[.n/ c?r vO:ǺQ sʦ ݮޫb63xSK2ki6ۮex~s�������^ `Nm`N������̛Uj�� �IDAT/=|Z44]٤QtL(My?lb\3#j *e`hR *"ʫfaP{֊#R+Q+4igoVQ)cmZzjȈEeN"[S+L+?I$>QB7Wר|dc:zA1UM<W~[IsT�����/f�����/%cw8wO&Tȍ ~ ++L"ȶrH&j1( " l,Ҥញ605pS"L8'3& + WꘁrXG ^׾4{#5-ܸg|O Ѧܺޱ'ڴ������) )������h~'̙;oX)E0O v>Uu'BiL&۵ŘVkGD!)Zr+D6P1Ĵ+俭#-k * I7F&zI rqy2D-b1v2ϕ45'5{6TOlCpÏkHqӯ%Ъm;n\˿~o6o6����|����xcz{C{I'5ͬ1,ts562S$S)R,ff-ULpB^D^c\Q+Nݺw9c9KWOI"1^s*a8~-ٕD9`^V6s }םl۶9�������shs ������K}ް̒WʸG/z kcE1Zp(EOSuQYpLg:PV+7\x ȓ4U~ + [O2Aghs^I<΋NWDm %13c>/Hj?k 6nk_]/~n ����r|]����x}[rР"2(39E}tq-%bBc7|X'0Uzƹ&Q=A )ei*kg@֬RΠJ= 4"Y?[R3j/W;Os=wt{pD#z~U)iX> G-7~q4a������� ) )������f:}9+xǡGvՙ!W WFgNZC~ښ( },EmcL2NMUN|KYWƖbk4ZaFH5f.nQ$]'ǹѵDrΓIOLh^1D} JN>?yCdZ?;˳#8G7/K<�����^njߞ����^o"~Z5oQeQ5W& ã:44%-Mo�fbmfdkRmF i:q33F,8=sJgk?bЙH>ٜ3 ۵ʯxM?knayO<vY�������SFS�������/?GMhf@g!ju@W9jڙj>ô6Av*nw(r:HUTҽAe<l+ ,=7,DJЄ2NGvsW#܀b ̠R:{w5mI1<ndgDbl_�$'&~2zmg^Y5e˳߽+n]w퓓f*����WS����36{w:yOz=f GXz*puF3de-n^]&@Ҵa*BM-@uljVrʥIv~Ys6Sݣ4S/Asvrƻ^xdž.k�������SFS�������/t:s̙;oR UΤvBəY?c&FMU XŬF%jNH֣ɝ+2R?%M<J5<0*&_+J2(zniR-w�sdm<ȲQ(1VM!~??_$ΓG1f^ׇc\cloqk}ll��������01o/{A'B L*č ֈ1/3<B7^8m bn oBFXx0.EVwzN49y>bWz^7Y|mR}\5b {:ژF֧B&2DnSᢳҍm�������@ SFS�������/CE=S+_ϾAhEJSG)Б|=1ESL.Vq ,a`1jiQU 8�3lCNyNkQaET,&lfQgi.!ٹ^::-F2,%3|94>[` L{g( )E]5un͋_��������UDKÈ),J1]8 bUNБiC^^gr(Ѭ"ks5w'ËoToYA_Dgfᦘu3vY˸*蘶=]3˸ړtɛ~Cr _\遛&̀��������shs ������`{oћi{.>+Wq氻5xD(~C*QGUuMWKb)aT_O'rar-̍ARZq=I#S7g@}ɒгAf8HJѲ68NY8Ws'JC)WD.VĪT^MehXj;GUݥ3����I0����-%[=/7Iy4Pn 7*"lFTR" ooJYld}9~H?~6" Us8T^{檪Bc?V*<N\2x!ng횛oXyo��������������L?/:_z{>pZ4hZJZhdn)N^gzcުu57oh#^{Яd+cE " о K1EV#WQ v2y\b\eB(MR"ac~2=3R^ &kǣ(Q>.c̪-Wr5ONNu����Կ�����~-r'9O}z̝K8*BӞʘ<Q2x׿ %>tSD/A6F&l[{TǺ1}A.#S;o}f޹6&̿Xcv1TwژBgTH٤AC7{\{]tĖ_��������2������cll6?3gٞY?^q\Q1{➣ay1m,Uf`kjHDJ;,4 *QPd>)m+!~´>$+ A3Fv> π�6笓OZ;7Oe;*CZPձmo~5W|g6o6�����M����`aOiTR$E0Ihz&L,9x*TWMQD\37af9Rk?l#fL2Yq*sV߷<Eȃxg֟nRm|HOݱᢳҍm�������vm`Nm`N������x#i|q>)NKf_e q$69?RH=-$iVUWÙYgɞT&A1 dJ^Dg&oO+]T髸Ġ22#8# IOcduZwȿ &{t&ݒETvZ=umx_]f�����h8b����v\^`ZzܚaIJ%c -j QňBl{5q%h*k #"Gg1e0s/2P\6T R]_K~k^nUqg7\-L+Lw'/Uߦ_?п|㪏>x;�������(060�������4.z3ct_'ܔI$nh!08\:6f)j^"=IuG ٵժ%C]Ժef] $ !ªa&2DU Ek?yтUjyx�=7%4B(BD &!sF4YG{23J [Տ_>͋{9��������`'xÏy{5?M%A$!r܆,¨B%ڬ@S .)GK-G f@{niekpRCq8}kĦM<ӯ,tCiC]Vc5������v=`Nm`N������$ߋNǗ.C#+dB ZƢOQ׳TZ9:neRjP$H&+zWfתtP[:}O%dt´rd" yLTRjr'9O S0vBQT禓jT:k4{9og~bĖ<{핗_vk4;����ؑ}S����5{w:Os>={=Re9I:EPci&#xp)EL-yPJ-*3 57`d6'۳ `צ Z^kZQG!^1Xss~vccߜk Lu�"3xx�i[zϝk/ ]>������]SFS�������ccǟ '}3s1wR*M8IA q`;I-JSU4nN&'NsYt+o3FU<OիT@v�DD¹$\;NLEȬLV|y!1Z$ ELuy-pR>nEӉ](hum{ׯ͛q�����0����`c:=r)S?Tdʼn-Ʊ*?d: _v2/na'`V{߈E^wޙ׌ɠ3ii/+PsAU:/T^7-7{F+rC];>pw=������;+060������ks蒣g}wHq/+b *AyJŐ9{VuUr5=VH<]._mk](ϔ(J03I3#H2d-N9#WJ27DB}z-zPRt&2̈́RP ZBJϼVCz޷qUe#Y*����(Q ����0b oXdqAKBHYũAʈ} @)N/j`c(w€NN^�*6LdޒQJp ,ZGPsnʼ]P{'MW~n~ ������ة9e9�����]8ޱNtZQ(G<tD3SXm6Xs_9Ëo, Cqa)KU-Wb~&qXU+1oHOQ؝Fez&AX;>ET?Xg$[mE]L-*g*0QZ|aEk�K I}>jgVEzi~_>r%ww����`����.!=Wk߅+UTHSDĕrfҎgOTɌ\<Njڨek8|A_R1<he+#M jÐg(zg6Ō2y"ǜB*xJGb/efg]<OmEXQSe}S66>t_|7������vN`Nm`N�����`b>͚51(,13dcL1"?>ifm/Jҝ*M*|d1++zH2pJ3tBWR3+%M;8Uuk}ltRkUڨ>e2[[}W]qI����`Tq����>cw?%K9wlsBe<Nը"zrpGѶi57e~=_t1}m(WﯴAd` dI 3<3w< !#Ί"ߑw<nGfEy6S=^HB"+e]nVsWNn۩**;~ ^>f\������) )������ͦ'̙3wEZ18~r"T-#N4@I%aR)sC`IÊ#U4->vm(Xi-#)ZŴOGT"a:;]_hˍ1S '꫌>Q58GWnfT �EtIó*1^2wD۶mu߹ffW����Q*����3wz{_փN>)f* Qmq+qd :'ӅueiixIV<h%7رBLdal$DGkn4&[SjsNNr/T[r$ɴOD6H1qǟnwl~xvV;8������`�������v~]|$}sݟVk!.R1C[ZJ,$ٯ3}ߛZlQfi̜"7Vf3D}}yjPQ[ nGUMr2<^$d]\TQ6e"NW`񪤤R o'P>ZWE3^=b6:Ow+ߋ1,20aom_ܜ����΂m����` ]7waS/&ц7h@-)W%hy, fHl2|?/*GF.'2(C(g0+dF$^olo Rhro�V|-br,f{(3[kei_?OnZӄi������y`Nm`N�����`MBعgxGvmWBBHhtn72azͯ,Kz Vj(a)(Aa9EeVȶC )NfYFK2I:FcvUWvmCR"S-eFMw1}R5i.qJ|mc>UfI�����;�����;7@{ {~UwIjt>!#O4U><G f>N?^nj`m"mFc<7oTpGGg<L>]Vy5pGv GWV3Ra|ۮi������������v>ߛN>O>?>m֬YSV*&)6=p"IH)x\je+`IOB3t bDqiM.iZɜ^Eo9Z6j v䩕VH Nun'64`l*&-Pj$S`s)r( ojؔ?Çm,]֊iw鏺`y&'}^u[w㓓f�����;#j-�� �IDATWd����Yww~!Ks=$ 1DsRq cO%Sl) 3No͚+^>ߜ–ixA2q76y![9?Wp߯ւ5U!VPuticJ*n+t2.UQݵ˷7OL<e������FSFS������yM?O\vg̙37WJA$LA? 9}mZhHoP)Kt/j&FObݙZ0EٖߏjeD=nAPF*~xD"Ӿ3 n!eV!YmEbZBLh&WFȚTA!)ʒ榑V'iːm۶tg6?m ����3}s����%;o/O>ig4S&=f2Fn^][(;r>W>43tSGLVwIB͡BD}߹ϑ7JW)3Ou`gL-ڔMoѰJIi BsblCb<u /ٸmV������0:2�����%GG[FH2(C[J&+XDS~+ +yD3,m8etDRkXD|䈃}+gfEuJzPы˳XX_FeZ`e4#g~]DjQMA\zo.Wd73 ESۏ7nuv������[8����.x-=Ͻaa *,&R<+J#i9nԏs<LLh ?JQ*|ݟK<3|ߟC3EYoxcj5z!][.A팹=M+]jCo^7~Kejc6LLV<̐'x'7߰#y39������`$9e9�����fѢ+=o_4؆V!hŭT3)F~E CUca }S]UբX|Wkac!˚#v{VOѻ+QqV)/H"EN<XcE^UQ}eHTb DM뜉2N9dbF;Wcѿ[أ|Kz}wY7����D߷_����]]jޞ. DD1 jK  @?yM-ׂ~/bzQPqCOm^ԏ7O0V,,#~u{f"\"/I ++3bOou7������;6060������0̟|}1YM#?jR2I!?:S쒭ɪ)/1nX0m`g4"gň&֨d18e'SIjwaeTEvR<̢g oUe1JсUfjN(TFJd?Ӛ_KZ,o'Zf,YHy>,9~δ->ݫ.{}rrrl����`W0����]ٯw~֡wmܩJ*<S"jS3 +5yod ~yLtWߧ2<so MwV9)*ΤPxO {4^oZ?KN(SD,k "*`1@JDWkU#vrZo'&2������;&060������0Zͦ'.g̙4ÊȪ @I DmfINWR<O3nt-ҭT)_T}.~hrVV+6Z3A|OZ5CC%9:f` ԑ%ƄF jbZ>)^1kJ9\!xϥ"23 m;n~W|}36����8_ ����y ]]mtR -c}D|5šmDpdT֘J_vvB|vGgm 9e&Q31.;g qݯxy޼uG rsS_3gO3eO> !8#P*l;ro~9w⻷mj������v,`Nm`N�����`tXd)}t9`BL)DJ*uJ=i@TVI}*ObFTDqnIX"4KnR'yVK̡t`(HIJ0L5 6Jq6DTQ *JMP=qDyS~zƍW_ܬ ����`W����^ Z >EK# RKaHU)p%BH& 욎~#O4\<.(gQfne:or ߓ7,Gxg,T߉ߚϤ)yjULޝ6!?!l1M~r7߰# ������x%9e9�����7-z }tŹgK/W �\}Jd$ɴE'VdfaPfW ֎颲z. lg}Cދ M˖o hN#Y${z60ZkҖV~]+M$VyJQRS8\cgq4ʗs3˰W]Ջ�����@}�����B={V͛B"Z Bg#oP̴QëbP jM N9L0Ļ;H'{,i_ܘiKٝ%ZSH/#4OZӝ}lh|ۮ?�������/060������2^t8|i$Ӆ;C~)"aD5 %ډ袄;KUM\;Kԕ*3\iye`Udk&kzڲ(hqcʠ" )@ $Q ,A<R3豌%WOIx(Z{o@LSVoWr5ONNu�����������̈ٻ;?%G}[*. 5A{\=/^3rW>1Hs5^s-SDzu .Yf)ӨN?ܼ|fos0ADR qtD+)v0 oɭ?koo.x4������z2�����lzⲏ}vΜK"8VΔ*LmK=HL'!yE_2oj^a`>0T5 I(^AfF[Dxy*l?Q)kCtMT_t_y:VFފQ,LPgߔeZ-d棋Ҭ28oMnvWO��������dtıN~;q36E8(noSC(#[6n~%X+hRViۧGspar9Bv1cy4lot IryCnBɄ|_60Lшޢ=5!e==wl~xm������xŁ9e9�����Kg ,|SqyUI6o"DZTEI�d_n/H)̄2vT\a p*-^7Y WfmP4I_૩i`ZFwDPq7gHUMd6Wω'g$*Jr$n673 h ms->u5aԘ?+����:}l����@ Lp_g%hYjT 'NȍxWigB,L$bq(Ѩ,I9U|.- nڄWD_eeSzb|{6$E_8?\$>/ʬ.͌#fMeh:O>֯Ȧn~������xE9e9�����EL̙di,/ 0'񚨈H\ ܜ“EH&C&jx8P}]l&x⑕6*drS fƌ>#uXMlTAE&&FAhl22(S oefwiҠI1vc>|{g3�����+�����)!|ߪUw!uUTjA/Sa0,K]t%l+XA6D;ptn�wfœ}e@LdXA- vytgὮIa*#R#b}}Ě1܏L?*ҟMRlJ=x57??v4������SFS������xu?o:?=pzf@ݪMTW`F^2tU.1OKkNΠ՜NɺWVV:QMRCKl.hu=__ =Nl&šw/C0 q<REax^w3OhYL(3Cҟ0擋|bl00#Lly7~n'''mg�����0#*_%����0k:dQk^3wI%wwC~928err~$crV7R%4 ѕAjaZhu&9¯63iOC=7u>"2]9gՈ~6Sӻ%L%,hC6_cx| iQ3$oɭ?ko__>lb�������/SFS������xuM?-;s̝74РCȮVEBaT|*Lj\ ~VfLB0~2 %<[[DJ36S3rB+d~nby w! Z#Vz2l&X&0Hhۃ{m FFfP) uu>+^y5̠2|mmtqg6?m�����ۇ5�����0x}䷽cى!4SaաI @\H^ ̈́@6/ѤQKӆH^ׇeq qI.I6,S\bR#mSP!L,+f4F$.FnMR妃>/I?$=;6\x]?dm[2�������/060������ʳxRZ~g`h`J̸`*PЌ )4~dC*.Pf܍UPZ xlN>U#o}X#dP!)vr$LZ%񢫗;Î:+ެ¶Sω8äњ?(E&٧ZC3IJ>AS<Y7j f5XX35Oo\ug ����� V �����^$ L>/aђSUTr88ݳl=˜*5z(Yblq`iKR{h#TcJkre'qQmnL2]`a.+Ԉ, ߤBA{si7Qo>bdgƟx⡟ܸ~G6=pc�������2�����+ǢEo3>g?GtrQ&l~u?Ϧ`7Ϧ,q{0hˆu$MM%‘4.w+ªHMɁNJTEjIJ_(F1U%w]b(B!ZOt=Ģijk5gTW>U�����8oq�����%!OcW sP_ȴ%3ޝq+L- ]m.}\R#T¥^_Z>3t~op]Mwӯވ *eXkiOm-ndsj Ozp÷o\ ������x9e9�����SNGg͚j)�ʆ"$SJ*w=.vpQW(+\s)?ZXQI1"uEe5/GԺ|~=?!}p͈`beJn2g+͕K8ZDDsicG%BNݚG<nGQ~ ('cso}ﺫ4s����)�����/3cwC?Cٯm\nR xu|QݟbJL#) *7>YSޓ;H";}qGfә+!?x*7DUUo~R2F͔B}9gb{o`YVMzxNn_햿|b)\������������^>fqǟN<{1wQX QяzJ|hWL&lLAl7pkF"2ņTo[hs2|/kmxd79UChETCXZC cYm:նquӾ3HE4[D~ie[Fj؝\kڶvMׯ_0s�����+�����x9;oy쪓e'L~ϧ39G_"͔:$+L,u%g̡PbvEl.35LDF ,+PgLQUcRW^';id\.ӗU HLmfq<vRtx's.{۶fO������) )������<,^N_~_7QB08'C2W$WGѕPTN+RIQf_ԚdY!6fze-aAx"TW4cP%JL%H=ЊdG4[ۇ: TF =w6W=uiTUcoʟaiBS Yr5|sŖ5Sۏ_c�����/==Z����x}_}-Y-:XE~W\q$&մܘ2ԳzNZ9lȴ}<dXo0eF}zPDdMZ!o,sC,&غdxg'V}t7?o������xA2�����K˛N_qo?pNX5ZϰoS?Qd͕1%SKhaZ,VP hÌ(̼)rJ_si)ls^c0=F`^eEkZM&C<*8O@4BsTòy<AS47U) J d'PM.Ҋ˘N:^**,*Ϛ_ᇯon����)�����!<a#]jޞ.$(11 2=g0W&랱ۏVAj nJt(09YεGҐ¤ |ܢ"yAgfLU_T^arr-Gvt:zp÷oX[������`;9e9�����SNGgjS-HP%1>I +@jN(i;̠"dE É:&fIY~ E5mZ>W #ieNIQZ֚kxoAUb<qYx?w"Q0ԇ> V5,q]2v}@T/W *bpfb˳.I&�����b����WٯC!e玽f"ZD>@t_d<[#se:@^زf<[>[c}e:o3[76 ym=7D]n[sӥЛWvB*.,sb+GGvrw[򉉧̙������f) )������8fͦ>ď}fs|@t[AEVOIm+L,ҎS!QV;lp&='i~fnְ�� �IDAT׊5h֚d*֠ժԢЎ_9^9nUv`EkǢ}:bҷv_س-{W VI=AҐ">zJy{QL{7.ͮ����+C[(�����x;oޕO:)fHd~mΤ1$_:K9́Ĝ&B|!L& Bobi:(<tj&DǍ1|k*}ct{ՋbNU#υ7ud1!{&m~ s/{۶f������~`Nm`N�����s҂ '(3Bń DDxxEy1# k[j]UIΆU\2:VOZKb"fAӑ}`gdU4j<&p/j!,i侴QEVgsx-*;|bxKk&)Y՚¡4t\3Oo\|�����+K8�����xXƃ_7.:A1DʱY P:̑U`c9(F2b6f ok8 )}2}p \ƕ( *F%t#ucJm^s ^=~fr y~\lc^3'|'7?#<pf������*060������,Zf:c,><YNWיy1$DX̜2}wʜB<!~Ѳ{I擡^ZEFG(6'pFf6!cmFњ8.;m1D1S C\6ԂW) PRtSՀR;f*K+UYg_aͯ#|m7'�����^j\���� -[~Goժy.L&ō &\Xpe0qrϐlHT]WɢiWZd2HS;nm /]1TT*)l5)hi晚r_UR~-n$6f\K(=Fa[=%������shs ������3gS?ciM4r])%7DŔ )2HEXē*RmemI(Jljn(L'1OΫh#Lև^<ŭ"q N~@g:>)<7T]ZR[Y҄Z>4n{k3o  3x׆EaHVkزo^vI������z����2k9sm9s&˚#CG?|Ú0%P^/Y `kO$(ΓgF{pYO^=NșGRr ͟5(KkWN*bL)A2 _I)'}>yIh|۶[.ֿ^e)s������060������0=ccOe̙;N㝄E AVȩP8%h5*v"*$D?U9%l^eϕt[LFKRf )ƪlcv&WųjWJs>Gb#]k=##dJ/V+zXʾkZX}a6xf\D5۶mvM}K7>iZ�����s ����y cW{xb\I%6j*ܘ`3x_uv m> L`ӻfqeHjFKdRom޼bQU3KZaLyϘ}e*gz9h><Zk{S$\%*ܷ2h|b'npwym۶������`Nu`N�����K3>wHdZބуL܊+&`Ae.*PƕDl4rM.UIM5ShpOT? O&ҍW~Cם="yܓ֙*zc;ĸ{9!O?gjGI4UIg`t ,1|&^$V}\(sJ9Y3_|=W\#3E�����PV �����v4Yx0q_EKTW9ϰ"LRBAcgcyYkFo` ÈhzlpmN!Oc`6sC{ƣ&DxP22JڷzP%ˆbO<֟yP������vq`Nm`N�����gѢ7<`¬\-Gh?S tJ+Uy%ƪ4LJ&v]G(6IOBg7J*||\z׸GRdܜ*+PV[}Ӿ.kuu⮴M p92VZƅ'K(樬A7Z#^[V2qύk{o�����0_u����L?}q.qXE-!bRqb2JxA R_ϔbp"ѵ(4ˠdb2J"֫"΄[5N,XU^-@QƛX2 ;CFUzgع1:;m @ר(vIZf{M~{ +{x������2�����dS?ciM3kv tgHPtE[ N&TC'R̨*'C%U4)AVI62t[F({֐^sӆ1d&im*JƎRň@\Z@NiIch)YݞU@r& -F}G3cr#xy?G,͆0r5դ"-o]v]Y�����1A����Yw%GuaG{̙R)@b6P%%Dc樌EcHEGɅTXg >#I숺*#H7ΖN5t#iˇb<2O(fem'} oNL<e�����shs ������Cfqǟe=n^}fM% ̄dtBG̕5d5kHl( BHdF44j(,#} mjA_<JbiXھM"$➧1ЩU<ksh^Пk>rAXN$Ϝu״mKtws>�����#S �����Fۇ<vɿw4J`v 3X(ѱ5e vE^ sO7TƋK4N[/R^jxX!Xږ;gz2~)86Dn ҦZ"1np3H_nQ2qOL<Ć }םlܶm�����) )������-^rqƟ}iiX)%>'IDg t'fHW'rTH#Kqe:I&f^QW 1BB*ۧe'82ƈ1גԒH?tOiBiY"q|@%NH\Y(LeV1UJZfg쩚}HyŘ])?{o}fF���������� xG7x1QX#ҫ@ @)HB,0Z”Q_숶G Ceҁ^x٨{ 2@ *' 1=+<cJv OV_Cv'r2@JďZskMTIjNI}*?C?Y<ϛ������9e9�����ʼi[茏}p^0QsfB!eFV ̒5U%˩+Lrj)r ) dESWWMe#w%=)bM ? c끕$huL>F)HT=$x8jO֞U8Nj=S,,bJc]أ<|ե_=wO+�����0ZxT����('[j #2c1f %˕#TgIgbLs޴ۉ;39B[8}T5yv3W4R,{& rQ-7C [03_8S'$D96䳉1EJWc������2�����vEߋN=忾pYfO:acLj%2!\Ԣ5#7 tt댩0nљ(^E+ UɄYӿ{AabgY&OlM9GհKZVw~ߣT<ٿ!"jS&p׸yFMdQOهOz<7e˵n^w&'����Qf �����Fٻ#:uιwcNlX0W<F(B %{m6Ɨי1KcB6L,I<LNgSg\$TB)%3P{} |޹;<)CCLѝ %]S~Sz:=k)xNn뮵z_xʬ�����SFS�����l:S{ىs̝GNcs<{[3x-twĽ <D$ۊj ?Q du2Q-ɴE*}AT<l183ȾX{w cB \ƕX˞/ 1yLHjGg"pmoZwݷG�����]`N����Iyݼ}cW{tR?Dw.< Q~/gjĽZꔒTavk+ :'A;bqڬ=w n<ZYCwst&3^y=ga.y(s6?aÅg޶ ٞ����� ) )�����`Wa?3 ۟(VJD )8N\ˊ&ڨXָ|ҽέ"P_.kv \"EOR!rE*c}l2?':[&>W^QK4"\H>w+' J?5_1$tQq#y.Kb>?x2G4g,vxځ8|k_|=W\>?3;�����OWZ�����0: EKKlXn4aʾϾj4aoc3 x8}{k9 _+%y= c~fMz9߻4ڤj/8c ?Y(/62X8c5?C?Y~G �����SFS�����΢Eog'%GSRr %"d)'#NhaB̤b\Tƫ'L۴v-;UJlVbHJIM#Ӽ:Ωh[<]VBR}0pmhgؼV#;zKMa0A#l TK!b^$rzBr8驖[ևl!\G~~k9�����P�����vo}~u.UTBFϧȹO_r{f[J#om^(/`|XRS 3c$iR ؖ0A$Ԕ`坜E4LF(ɕQ*]:MڛwwʾB߄r&f]쵪3iӭ^~y?vY������) )�����`geS?cM !5VYMr5JŠG<gD)"%t% )+riLbTﳡ t=~ENmZfl(֕>q}}|=NIxJLV%#w,>OKzua$8q-ڼ.o.uV �����\Ծ9����ٻ#:~fv@a'dA]м&+cqU{/׏7SjN9w|H| ktnYV/ /pcdeli"B>w?dWW# T\\: y`kP&og~6g )ރd Pvm۶n.{_^;1i������shs �����Mwo/;O|Μ#ӤσW(E"jLoIf4F\$cdYc hӶS kDn?(*BRIeC70~6N?GVbiYh> %LhJ1fDSv9=jzZke )CKP/1C.nkoyu߾=i �����Ծ5����ۇ:vɿwвBh~Zf  I%9CdNE Ut){il,iA)u �^aS5mFp)wn=t ' zOY9ɐ:7RgǷX5~ðOܶ³K6nۆ,Q�����`9e9�����L,^|i}1VİaMhx Y$:URUdw1_'W_3yHr4+ǰV9FH>a#Q%* JW EnaF=ft;[ic)k r)vQT<M[BgTyYMyu|sIj~DYpLLoKGgf�����`����� ::-^>$*HY  :E׆|6I[hT =ӝ-c¶ZoHijc)yU@Y:fY=O!<ESB,U"?C??7?,����������3h[h<.FB)i`% SL"JbFO2p 7PcM)lOTJU<T(ԸJVNx U[H-]]IMbU+fUD{jx}#L*dWQ *z%(YBHgG~_Y����� �����v1v~V…ԙT ^vR9E/F/r�L+%M)^A^ⷍS$` :jf>Æin5*}{}4>G핛jZMKD_OHPY ena[~3�����`9e9�����2EY} ˛iB&a:!f<`JVR9U.BA)_dʽ.$VC!%pqsU^[|-aY^Pؙ: z^ ~/77Z)* zihe,Nj ZbZt1Ux9ݳ6 ٱ_YyjLLlrͷ֮yw~59�����v����]YwÎ8?sgHCǠܰ?ȯa*B0d+n&y~mChK ;k"0ݯK>޹li@3a3(q듄>FkAo&7#[ fBX\z^[dm'} /s������2�����=Z= c@Ht0T!j � 7V7jlT(8j=5PA$Du+pU<@Yd}<|W"i}|s2﻾ 244>vꙇΙe tV1Z E2JeŚRScj 3J'!H"oST,e�� �IDAT3j]tɿWdIO:3KȒ3y b2nY,ܵ" .},Lpk50}3x~Z>z >f'ގGi4tvd +D񪺎=+,y7[^2����Gۯ�����`e:vsT"( w,Aն_@L.RAaә~RFf e(Az6?3"S 11q%ȋ;d,Ƌ747qt)̯¿[mF_>y$}8cBIf{pZbCWm۶U5KGv)�����02�����3>J_J*UOVE+RStBքXYiQaB Y2pč"*)7\m2gQUBjbI d&J^֌FUY]gN%snQu~c1HM'_ f } .-ҜcP>hUv˘bGf|??~{WoeN�����J�����{<S~E 6czAPRӪϡS}GSR[3762LZ:l3>i#sb c&yCopS޿5혃=P?Z *-K7Ȧ!P# o㝁:>ɬ^ ~|^nf������f2�����EzGhg8}2j'm X)q*SA;"cw10J26ܐ鼅pK1GL0|RS8ݗRXZ+Ɣdh$8Jld茚 V1&I-_͂qh21+&2dS)<> xeHuުgi}c}? ����� �����@!#?ξrN D^b)NxƊN$W1㫨o yΫ�WgaUS9>yח-@ܣt>qLi1 v:7!YđS^A:>gnTIs鞨C_}_y:�����SS�����t֙9F/piÉ|Qx%֯&,tD'QZ()b"Z+fsXNzfl)=t d^eX[&JWz5A9E R!.yb.޶-k>E'$i"NyY5\Vx֭߿yҕo{nT�����>0����� }G}/p PtłǴ!N4Jf 9>m#  z~v_ATfi_1xDf1w τ4A¥LxL:yzp#W߫?k[LBJ^ce:*g;{z~W56q_zw/Z:6 �����7SS�����$ةgz}ts '١3Cc#)^+J]HgR̈́M+pɃNt-l1 [R M%<Cq%*d 7h ?٠ =>RŅ=(g|B>1 i<;xNȮ֬;:B pǯWpU]\,y7[^2�����п�����SLBwwΜNwT}w(*S llA^6E槊(KsH:wMu M7bOF ^gw-{x:o3<c7xm.SK7T/0e -?-k-{hrmV^,yh|Y�����) )�����`w/x!1ō'b(}I[NR Aj!RN +Z0/H<H"0WbChaeA35,DKi$ɕR9H}oc|βl%vJy.|HSw(]/Bi%*)u]k#^չ{p|������+/������2ti_Zp3 ͳ0M/<MmJ%(cFty27cDqޙ shݷNHKZ۲:IqNJe>*VL\LaՋ +pcV������u�����;1}aty\U8VX7J^10dR#e>bos*DfH\ 353V~Ic%MWP g2I\;Ĭ=ٖ<E!YJ0+ds1(K1!|ؔL<SYXzhF*y5}zO?_�����o������LDG~mf_pdS1Wۮ'zq^ʡ c;A }MtL<1Z/ ,e_h$z5:mӟ1cQNڦ/7Ci5Pk =Iw|._~цuWߺ|l޼����������;02r�}ųO<UUYuNFU@:qkn^j1 "]2؀B4F�T##XzRT)j4̪+szF vI2P0 jSS}QxόebQG6 st ٧gJ 3q9~{)g hll|u+܎�����vS�����+bh>4󘋏б_>iar*hi0焖w Ѝچ  ;!niiYw>^[Opiý奤R yQ^%e/Eˑf*0!&iT%,,6`zR^7}I<\-HeP;5V.Z:E ������^`Nl`N�����o$CCS:ty~#S ]&AN~eu6l+DkT*Q,<Wvé1t5=6ڌQ_¤B*;K`XJ4(^3Dn1܎We1Ơb֜Gy&|J#:=+pǭ惿������;K˯������M>>z9sBf&/ؚBژB -sLB*^RڂkP`K6pg!7@n1y`Dmi6DI!S4& 'TyԢi^!x˪=0m V/5KG6+�����s`s �����x9tާKSή)c@HT_wT3&mL!G jԘ$H,a#:kL#9AaD.:م"y?O1% <܀Q/9YeD`&i,xlOQVXID® YzF9ZcpVls!VGo2E}\rlC=OZa2h lDgB[%g_j�����5`N�����*>:L6cF**)Ho- xMqg/hL$ ^WC3cKֿ+&]>^T[GPЊ| o}A&-3=FQXx2.B} 1x/<dL߼s[eg������&2�����^oO]xޟG<gL1&(^^ "bM f'I-r;R"u+"36׶oYKx{-<)XlΥtCN�kIa;QEWH1F&3W(+8^[f‹xMq^&EL<8OSg"WQ>lR14I-뀑=˧ҿ~l������w�����WF…#O1x6cs8&c4؈lTI(E}Zڀ5+x{ik'$o|,>اkRz NFIXf,H.X~x1#pat~KPsq#vQdÆ73{�����������z12r�5>PUY #;C+b ~"+ʆR>S{R8/l#2m9ٰJT#Ym xM^!m'!i('r÷rq1GDӵ}C2ܝf Z71M`L&3D=z?c4C~^46K\~s;v?�����xu9�����f Mz <c/|ügL4Y,Ꮟ 9m6(kHPDCjΖJ+[mY%x]sF]y="i,zmKIu7tcO鋹\Z{ALn/Fy7&<eHbܱ}K`����������Z344N;C8;<y[)ŋ+b2�tC 6^L'!'LIcJP'UI SQuHH]ͥ3N$aֈR>#qkN<ّB6H=<]LLOpދ(=83&�R$sH:f&%qY{HVTg~꺮te̶߽͖�����x59�����LBǝ􅹇o UUlj:״e_h�FA,fWF�H&2gim{wV *9Ok.+(0N}Ƥt5/AD2+;A$SD79xa۶_k.^fCȂ�����^}`Nl`N�����%GϘU]pޟՁ;)Eu NETxҰUT `Q}n.%c* QbH]sڄ"Os6ףXVUPc V$*)Q7ZvLIѩ0M)Z9Oi+3D=jol)-ߴ)o1,\=|`�����u�����׆)SO'}쪿:}L^Eţ% ,V)EU`TqË {F$YR(fxc>_%/w}~|JJ*cc|?T~>Ƣ+̜…"`9hy <s Zu1uvVLĦVٸy󺇖yy=vX�����2�����^ O]tg?s3#)�q\$ #JկY%^U%Xx[+ -u2ES*徳)ކO"*Ɨb^i1P17ȚwX0fњF`I ʖy6_vf+F}rv3xQmS%<QO+Dq'TS^喋~g醯~}}?6�����Z �����kGG~m'^pSfΚLx<o " @!NkogD 8j߯Xp ھ'ggmg}?,)VM(og]F g*љΜUoޅm˖73������s`s �����x59:'?zA-OAw>֤+ SRjX=dPcJ'ikVA"MI˔Os!j,Pag!Q>""H-# 3J:*QuRU"?v'QqS Nݺ:IZ*xD<<Q=NKsFBn^\[46un~]+n�����^?~�����5eh[h1G^~T8UμZ&tlJjPKbq^>'%|]gma٨휡IWyAPWeC1==`nq^tۿM(S6Wq]<>pA8/ ,L Hzꕫ^:69*������vSS�����$)g:wΟ~#ITKw䙨L14C5QjGORʊ)\3:q+hI,9…'0F;[z J{i,aF %|bVkb:j^DQD%DcDn\1WELA}R'(p뺾e˾{?߼g������+J �����)4ksT& xׇ>˜<6QO +g<cn kVӐ54hŊL]ZʮqBvؔBۮicn/x*g׺ *BOH=<Xo^tk.^fCȞ�����~7`Nl`N�����3fU#41%k^Y},Gu5j*PYط)ZZdPw 8DëY 2Չ%ĭr1#H6pfBD~8Ŕ¥t6hG<Q+;z1ؾR ]טk>dEpГȾeQ~~kWԓ�����7 _C������t褏_`3htg&ȮJ'".#>`L'y=TNENpYl1a |ˢNuhtsУ':SSR�Z`3&ϗ$6 >zx[?c_-.~;&sMm,+UyN{$| akam|~Wy幏>/c�����.s`s �����]>0}#fG晸G}tޥ\A٩*^$)dL+zNO5OzCe"Jf*>o)j/ҐTa,aav51b::fb(6˟!*0s #Vn612)3ĺU_'+m&k:!wewJv_>oc����������ᑟ|.ԎI6e0x|"MPMHˍ-UAjۖX} 'zw~OX+}^7f!kf lt>i\5`CI%n9�ė泒^T9G1ż,-{;)mZ1΍֯m+o޴L�����@0 60�����]ed�:̋gxUUu"tlMQϣ {MAE ʇa' %ip[ȩaǒsݾ5uC<(%/Su\ȵ(<yhU7Myg}ͽ<PT!V)RBSra՜J5 *4Qc1Ayf";-tWW?|,!MEcc[~޵_؁�����`������14iy%G}.Áhԋ?و8CeIDiy Hjx>cx'BיLiLӦnF Dƨ"3: _2 %R"tR1L^U]̲ɪ $ 18llVEsJ5Vh~lwl_{ұm/�����@s`s �����Y&O=3FÓVK(IP1rʕM bNRWOItQOU9Dh<%%t.rrwXbMVf?6?�sthbM#Do0ϟ>M;3Pw~TEdg8dq-$vUw +~լ�� �IDATLu}?Xݛ%36������o$j������v&LY83gPu p fnD[tM/_)}kw~z\9FE'7yWQI|Y;c'**)V2Ġ3"ҒZCT񉟏c`ejW9Sbtg7W{,yh|Y�����@;0 60����� :i@;TA Ž9^B+9 S\gz $U~ʌ%0KQEwyv<38"nڻ<;'Ę(p#i)1J)\IRJ +;;j,b;fJK^ukx6c'B%$Ω/\\򽧟`�����+4������M}?ؗ<D4V_VIxRc_"k|M1%D‚sf|“}'w!e[\5:&*7=}6_y]SmL#f_9F!w;ȳI͜0$ ?ϖy幏>/c������9e9�����c#?8Jn %+%%Qҕ0J -dBS#hq *𮫴u.īscl<9=s%J> 6ڌ&BǯXs3JHtEIKE$ѲgdGAoJ$ F"i99ŭWV_o3O|}}?�����/������v3}'v)9 =JV!SIը߁ϩrJTv 6B{8YŅ cyaLB &OQ乑KpmG%5=C93lnYW'1ŧ&^FWR{X6Db ۋ6qy&Ԟ_6_63�����{60 60������>/S{^GRHwV=%*DTƜxwMe4O42q7W>4FMD!"dL)̺3tBJ BUaw&eC r}qx}_\戹N%>gߌd@xlp,;P�����8r�����24i1G^~Áh4?Wg/^\><vG38yZLv&#/[}=Bi3KHKuel560J&H Zm埏~z&q̚ZR˧'_S'y*oMYFx%mq|]wʻ؋������2�����8CCS>lo$Ӳt©J~-K:j?!vKpIe>")QYҚ:Mj2L;3b3OVdB΋܎-kAUZt"j,H«d;2h/y);S*բh8⺮{V-[vM7[�����w_������vk&Ly߼yW}b4 @=@1`x3/ :6t* jR6 ݛ[hԷm&{sTj漝EA,yv1,lAs#|1E_3Y6eu'hDWmيH?G *ꈥ:ϳq۶7Z}Y8u����2�����GϘU]p/rwѼt=o1*$7~eL+:YE©6G2_6QTXI0 xŰ )߫G,!Obp>hI,{Ŝ HdUOCFGIK0I2f@ la2)g ^+1n:Go-[KrO< �����L˟�����044E N1F[ei%jɸh[aj|npԽ)E$y8K(U9o36T-}3)sޒ U8eqn93N%'%Lp6b)'Աg"jAD7_V͛?+}3�����{ 0 60�����wL]}#f1i]V'1d}݌X& ,hb|-xB"s'rL*0cL`!i,`*97tEI+8[L9¤!DJZkvdO~Q 뿤:'Uߒs3O熿kՌ�����������FG|mǟuS)d0N<y/(fe^)257rZ?CՋHom$׹K<߃׫4ٞCPZW]&Ϯlj5#*&Z90/{So +%˔ê`(BKbτqw moo[63g�����2����22�:KN=OBr%cpA^bbF<ij b€b) .I*~wxz1tTsg[/DgnS 3)dfUXsBJJzPY"TM;kE6'#6 J'4o|7x[پ����`s �����xӰפ}C\r{C)hpL yD$GShN.孡Q\LZ Y&h3xㄪ^b SWFiPb7G/!˧q+LI]v g 2R{'1wxR1P4NɅrC2b뮺koO �����9e9����`chhvهN>b<*?1sF+Yp"ߝh YEj̢)]"JL:E]w+4j]1 OnZZk'y5{ܦ~U "iML+b)Jerʧnj'\ ){٠bޡǴsXNF*s"/u]߳jٲ[n5b`������ 0�����7'HŹ}߼yMz&6p=mLu. q~GrqbYG*& ReÓg60T)&J}=I«EzLd(ћ'yVJPlw8TLF!-59XVhM%mcm:UTm{qU\|%#�����) )�����{GϘU]xgx! yŇ1X;aĪdC0^Rl~&n߈ZyN'nI0Oܕi1H޳CQ}]cW]KJ4+v0s oI&2ҳ/{R"($%4<9ln!s%͟S)?7.O=f������ 2We������,thW-:!4ﵾԡDhA)l ) ]ZI\qh&VĽE<'۟bnFRd?3,G3QoL.ޖ73Ct6X D麹纓)Hp~h^_<3�����o*`Nl`N����3>]tѧ_#>x\xyGdKӂ|nj^LhPS'$r+ib$jZ'"WX.bj'|̑rnF+4BKopڤEyP϶tR%<liD&^EoH~Tga bTqENbLB7=^կ=�����@˿(������xG|mǟpOک}FaCcL,'gT 2mq~d~^t>]szL`ij-Ҵ@LncʴbK"K10CbʹnE!k|JBCa1Ц=VyQdl33ҕTX1!֔qo+oڴL�����2����fd�:g%xWUAP@*6AEm^$G^aFnf>n I/JpO֤񓊕qe*b1Ȍ+uD^+cnʏ3i"g>f*d~|1QA) (S֦ZҒԊl~RK$ *}y{mFi/Ľcۿ{Íw-Qq�����yiW������o*}K^:ipWI-YW N{gaWi5Y=&D0D厴a֑T"+3i:T-W&ݯfŘaG nDﰊyCD<|hI0+UZէgc]ꮻkl������ 0 60�����947z;W~#1RU3kS~>5a:p7B#zKJ1r¬b"]-"S1_0jugA6[ۀ=?e]=%K1c' iOJOG%=DtsbsoM4"Bh#ɝv.pٲo5E%������o*_�����x2yd : syR"mxBW)D' 3}_5HT<+Cpǧɶ-{IAY(c A)CM (!&0%) C=>rNrdvnڗh$bg) 5y3gᝫIF}M+W]sO~�����,2����cQ )SکC1Wwչ FfB<TX4F /;d0 [h#E`q|5Y#-!]Z)g%e03D+?`E"yEVqۮkc*+yWCLa|_Oy]y5zsO?ڵ7^>������oV������tSZ0u3h4C2 (Sd.'鉰osnr'w +aAVC VUݖ0{v4"c:j%JmMI jݕL#O~/-b03yI^܂l/YwOWު`?l~tʗ�����`9e9����iΛɑ<rFV!B{Cԟ rH+1Y@T<$8^‹ɳ~T=U 9{Ƅ}LlCzYһV*fL_fĞFd]F [W<3QdbTc<aG&*>̣Ll͛L1I,j\ea%:az{vӯ~kyB�����������Atou_ScTQUhEUE01јwlSh*z’WZ`X=+,V<N,X2-Pk/|\]5rה̷&hV&zuRWJ3r;mVqAkw!{|m?XqM3}������s`s ����32r�=ٳsQ^?Q@$!PТ' gSKm<^M +tU[Y ۝XIW2k6IJ(I{A$ClZ)n>hniZ)+,bw0vz"eJ|ieJkFҊ0<4'M2jϢZg񶱭[޹goGx�����gk�����=Ios{٥~ox8WR 8SeZZtjUZ zU%jMXgj2iC5iܝ5]Z?`UJҜ*s8Z3~FxRIȊ˩ۯ+hHp"h,|gKPUOCi9|l,8^oz媫n{�����2����0 MN9簹`#bS-EZN &H+pjفT2׋^@TZ2i4#+j)z䴉[Ƀݓ1UUyʃ5E6*~Tx%UQgňȞڿه00X+3hUԒ*xN}oشKTyd?9VE]\u}enlbK������ `N�����a 'q7Q~6ZG 8RH _EOie"S}>$\YOuxY3WXYC+o<`,Ժ٧^&Mgm&D=)Oҕsbku8Κ:'ѽq۶~r5d?>0>b�����) )�����̣fUEMya1N$gj$lgQ_(]f澖,t8n==d`QVlc24e›I$Uc6NY $⚧*|eB3Ed3'-]_>n[lNB~N.Фgi2ص(ػ)LccsSyX9*wj]{u_'7 �����5�����=�>K 6cF4_>;l�9eg1 ܿO6F+B弒2RFDYd[-LdRIkӼq#'b ̫;3,oH[P;f l\rQ*WWʳ,ơb|v7?ُ[yh�����`����.<sG(GDJ3Du " -лK1ee6b^acɩK6 a. C1#arWI) mv&y|ݞpfGhR]V+{gٸm * oINѕzk2QP(N'^Gh`T*>4%?(c|.Vozgok_͏!�����K�����=G|m'pSKxy/f?ѵżi% 9<6 |zr-it!6b!DQ#0 OJo Haʹ<t1MbyęiM?r[S ALh }s+ %1km|շݱ6?f���� SS�����蜹zj@tpk.b6t#ڡR $ʸ|)=DǂECf&P~d*@T$wưTlVIyaEҽؖ36ޤ={WH7vTZIKdٲ_'dJ,2%1)m&0c,~y֭K\q3۷<������/*������@fh[K}ITXCcH"'2P gss-!"u_^,_C'5iQV1$/N@byơQrs-J>oԶgbZZޅY="~wl뮾kK`-�����=9e9����`fhho)g6wOexjL) Y�� �IDAT!%24oPkn<Ta]\QVL>\x~"+;aAkUPz$EKvO~qwg+k^Ytы5Y=e\&t3֥iVTAUSrԽ@| %Ybٱ%fTM\\Ǻ+nn9z������@������0'H'r#;w^P9usD»\҆!ʼnbl)u<gakũ.e!9KEcSqhc?ni31#Jm}]*C9[r>uylR t23w%:QIfd{sv9qcTq^^~w⟬i������X`Nl`N����}9)ScJm:TJVG$z+nи&l`s+lNeIp{="ΌKmiꟴ:*}3As >r`΂+BM{IߜBZbf!n4hFONw(J?L')C[sHEWN)OBTZrNv }'x�������q������|fS͘FK7!Z( ZLz .H#P:KoR,|5 Gדuml+P/(@)C b1$Ȋ) )ֳؗ `yFDcJȣnjWI+Jqc~tʗi����) )�����ty/9DžRkS 5Fᵲ20Jn6Q7%sJPT:�7=th|w�/]YyF }Sz7S5%iQUE)0j,:@.[JPSUMх9gjc6Q`~E=,P6**^wX /&k7=߾k_{`Ϳ������`p������Kto?+ַ<50~jD[1RŔV+0HRfZaEajuXy=s=Eȃ؞RbVsT:+Ј9ӌyUME Q3Ih{6>XqM3����SS�����vFFs^zO??T^=cJ0"1>eӇ26F`ȟ9Ai]YqEC"V^)R4𽙱rk6^уٸ"*5N\cb컋r~/}Q14#=DenX"NjGS)j6&ohnۺ^ݝ+n~f������yZU������&CK>K/{'xw A72o7+mc, ! Md"LLe$o;4]53N1Pڞʀ&Π3)I9>;H$)ѡ3JcE6ir/G 7wZ$ +~v-7:~뮾kբ[^Խ����) )�����o<CC'}ؼ?`xxDq(^QKS ?쏲_eҏfvZ,,ll"p |M4M;8ɔKaD{k/<]HgJH6È&so1A 2A<^+v_[33xoMyNʏ0Dj3ʻ3x(Wgi:=-oܻe 4������~ ������vɓOYx;'@T4JSUici#W.S %Kef1+ /b_$GRzKZ{Z3^XKTo*s _L;_umYz|VFdE3^y%ggX9$ϟyļcw}orƱm/\|O8����2����2 )N;BuB{ ,*0ldmHɃ`3^.Ȫ'xş=#1J"X5Le?o*ȶ&$#'  ?c ܊7&T(7僉|0Jej#Ό1S^[.cm*1k翁k;?CkoonyM������k ������;pӾ`3AE{ <#y J+0L(G]<E%9W)$Ģ$u+Wm*2(ȳo}LAɄ<9L" ׌zbTh"3 )Dg: q ?\7Ȝm\YE<rϯ?u+_&�����s`s ����;]EJ)<H+3l 90l {&.*%- 5&:G2$Fy *:o¢ %- wO$}2=J7X!Xy'k0=3gjX M噘#w?XUNAEkztM=M7~+#m������ ������vÏ8'p[?xjǤA4AT!"sW7]!"/U'j$ Jf.vklCMlf+kb%sB׍5kQ^+@^sy9{6,nڬBLόȾZcF@ڟgJGzyW(CgH[W\1Ӧ�����>2����22r�3fUUuBy"˕'(<BNK*ƟŦOƗl2] wccƺ}KLY>3>u>wU佅xt"{w>^JRZ eF,&)/HnVr.s(Ob19ޘ䚊l !!7SJ,P屭[wݹgoGEv������^-^������^)Cң9'=<1_y QC,o2G$W]cLl><qqżH5v#JvQ !DeRn2 ?4*iQ>#Ev Y3r/˚^=kGL74ʥo *sq/]?T{'X;]}תn{�����2����044>~هookJu &PUX_ n)ʨl8LxWSQS9n &6\HT&ګ8ngVMzYEW 5UGJiA\ &l5Xα )UJb=fmx/?#al!vfʌR}*8Ҋpx._vw{lyѼ������W'F������W#SW͝CcMTRkHIɱ_G@iFH VJGpB@Ī0FL"HǘFF _}`ҰR)Yn sz{& շXzj[Vau`0S?4V,B~EP Gζ"Toe5{7 ��������מG_]xOiRQX <Nn:Iq($!+K4M *\W TlI`.{M$BHsA$j' ocHI;je@gX{=V0kYF?D]jtW۪q<RUEeJoX +TKX/Z󖧞w6�������������USN҂CϜ1{*Kg<iT-&aJi:R˱dʵ޺DoڨI ޿]ﱆv_W(c=S+epDEf?#|5#^=6__41rwc?|ϟȺ/1����+����׎wL{]=pEN"h \f;*+o1( +ܤ 1I"=j4^ۘz"t/WZR"3Rl&,]QڊH#GY>ă\D Rmk^ŕl4a"3{YF +I攒IsN۹vs>������^[ܿ������tGyO8y·V"06@XYՔ܍FtR2?gt.7c6X-/P(oS'A[wm&NVᢎbqKΩ6şɞ'̉l%"1E뱞,kcWv+oX����.s`3eʔWlO?����W蜹6{TUI3*m٠1$N^w^Up)r،&/Om H?=V٤ ۣ2胉U6FWOh&ʂko#A'5}/qs],7Yim`T-jL[%AOt +1*$<nzuwQY�����_������גI䒣g{=<lL*AI\6:}ݿ瓩 *G MBhkjfw'aI$4_� <kobRcRV/8a=<+@S_O<Р'AV~ɣe mZuߎ` �����vSTN����x47vهħw)Jc'+RcuED&NNbi16ְ1KWN1:t,NŬK̻7Xl 26 4@.N.@\6b:^WtL-|1W1Ϩp<)_5Sɤ$Ӳ_m_J)܌u{Vq?}n������������xB'gBM*"!QysO3B kx-J?O^`9V><J&Ppΰc`k<FQ-a'Ο\k{"VdiY1cRU.Vծv۷\1oֱ}k.O8����`Nl`N����xuyՅ|nZL)Qm3 +-L&^SE( <v_ؿ1cŌ2 *im YOfhR(1:wDN̐2^U8ٷ</ZϦ:VPf's͘]ʻٻHZ-$BL^UM6P>pusSO<N������Ox�������#:cW-8d̙ɠ"~Qgfc ׸Rˏ'RI\rpw4kLcww(1Ts7I/S~D:<!΁J8+q( xE rdi\g4Sjyfm׍[e7o^+>#Vl�����v SS�����^tѧ_?4bm}42xFʱ`bUUli(Җdp`EX~19AĹhhzG1ʶLgdP%zk弇yѺm͖D+-'br/]16k7?_ݸ_~%������wA������חN�#N\pNJ?Z LJ瘐f@J ],\jD.dkT aj(!10֢*lOiX^䣯y"9kѷQDee,w괱f4f*䱹Е 9x2˾f Sm$I1"$Azzd[o_>ic-+������m2����12r�;NuUBz^ ;JIGdi>),)j<3c1dPV= FMh׶O@O5rc+.ɦX52B1j'D:> J39{j1F M(.sǰyeZ |>UI&nPoHg̪y'#][o\q3۷B:������o4ο:�������o{|K} DF (U<xB0nDt YE_ ՆH%q."UWPtaц eb_x1gz*ūVo)īݨe_9>@|,^]1<;6򢐗uqUKhRpkIQpށw7sSuc-λ^u�����s`s ����144>~ʹۼO~/'I8% <8/ȚD`XL"+: 6檗G(QPm̠}B$um1O0Uah> l:]v,)jx1kn<)mbHşN/Jsq"Mru~j 8bDac6-s qT^{9yc:=p?}nقX>������ ο�������o4##SWy{ !tKMNxmWGmDV :j*72*Ya+ ̤S XCj>P=FG*ƞFlD֔<εn?a܌g<,y=58sFHm/lk5o>0^#����D2����Յ̿3M/lN`":D�6{6tBTbMAy +9rb"bG1k5 T,{MĿ[-9hϚ=S4$2XyGIk+K#KZEӛObg. ]$e #*qS _;j)-tm#Xvs˓O<n������ �������4/Z0m3#1 kSI\(D%6d8mFLN'gc2S#۵ �RG Z;bb0?{l8g"i^ e"-~ɵP62r6´(ݱZضVY5E7;UyCn?|+=ʗ�����@ 攁����y!콇h5:nU,4L^F ͦ^f1lfHN`ch~`i^IrJ5[vM)zazK_'"V~FQY\<fӗhf]}=UcWOƐHuL 1iJϞp̋k!^!EV RCܯcvg֍_h'������x0������^tGyO<ʅo@ aÔgk*#&Me)ƆO M0HЛT.b7ZM&5ImEŜȈC4"*,?휱5]3& FSi\ҼY'|J̿5 M{|-/_mzt����i2����tN= &Jʊ;$j@:W3!Vail#)L*Mbc#fXluڂ¯;2654WODviw3dTX߫P_ڴOT)%ϞfvbBɟ=р=}�Xi5b*'29F6u[|3۷9������3l������ݓIңe{3�� �IDATL*DFE&Ț[r7%pTb9&ǴJKM7Bi2z[7pG&癹~^}6qUD$cڐZSA޺\>ې[ɇ*,mLƖFnubV<u\T%S?^䪻V-^۱g����Y2����`D}ag~3W 7BFI?:qXy}^ QA7*6H*ٶV`'QTOсb(*|Lad-لQ%AE%%mB[=(Q$H?LX'ہ,FW?77y~cIO+ҙ�+vCoCz^0A;u]wK�����08J�������μud 03|9{Pu SE(^4h*@1]OeeYWz!͆L{'6,BJddbl6 ?iYZH"voA1#Jə5.sM#r 8- ܢn*REl R7ZS4>5Mw^|O~Ǒ ����`Nx`N����Յ̿ߟN"r0y dL0SJҚSL[MJ8QH^C,?E=sB6\-6GJeB܄M 3cMkfRX3( 'Gl s,j4l5Ob6Giӝ?~VQUN5_w>p/ ������08�����2)}iCID+.?g5!LxD[iN }!] ^54&Y=aPƊ@l}BY&'E؁FDdhUD.U5mF!Gorh%Z]'>j<i)(s.ڐ6td?=RV>SIeo]e_����= SS�����zcڻ]p{N]Q=4T9ʝ?wowf.r+qZY"[- ʵUOG<ђq8^ TQP7AϢu9gFqڔ[XdׂjŞ >fSj[LwTAcDo,YBܳx~dV ������iW������`~8t ߺԩcRq$&)Ãk;X@ MKE8Sk{00rI7]?8:K3OV[n&Lix8 y稞I3] ?SG< *ƚҎOd期zdݪ[n_~6?f�����s`s ����tFFs\vɳ\zR4@ *f�袂w9!_Ŀ%FâI0RM(eHzrAǎU<&P R/=GSel{jR()dbuK%w\Cq=(#\"5  b[EJPnJXӼ6FBh UPP r>*3ߚ^sq[Kvou̕ac#,dJ-^Q5`C{@VRiuG5'I5—Ϯfu]_޸�����T4������`7n>CfyOD*b. \~« <;V",d 9₄^B܊1-1>!^(޺C[{JUITt53ռ,TL&HSĒDرOr*߰{Fc#\xr6v%v@cY/cܴ[tg]g����q`q ����UƎG:5'?<%B'xO]ëRg#h΀c:3ʞӝ_;c#4|a=??jfiFOS2Lx|UL*fUEƺ4O>OhZ؋^:)U;lc:6ٺ_3Ҿ=a0pߣyMº-߼_xu������7 ������ 2h='ؕKKYס&<pbX�BNLt`CO_bGcsq; *~&PI%ܰ) 4Ӂ-m{S"ݥ ٙT־<C j#�_{m73Id4ukq}wAv7����l;@2@���mzkSλ|ϗ/OD'dATP؈z6#<a#}TabD5<Z{jJԙy$LʏMR2!3wg\7}{C'l2[RȈW@TYQ$P_YrZ*Wi xb,UdԿ*{Yv?}?[������0h7R������3yhO?eCHoMA4 Me _|b~/ʱrN(6xq:FҽVDO %8SOȴcfU'y-@'9屻b }?U(GW N^g ,^ \�ğ`ںY)K` 9j0O.Çn`&���� 8e8����SN?=}Î"y$s;֭urhTFV$jyϝ7[֩rJb\JHcVXεhsn/ՆO:lln ߐVyO~e4IKT#Nt)NP<e$D2$Jokp/{꫗,X%������`i}7������ @O;a/dǝ&Od~(gW(0j!N&]8y`֕qHjSymʦ۪P./!n۪lݫHΨɠhPl'Ŗ8WPP('tň=2^%gK'q Ps*3z4߼W_x/ȴ����ؚ8e8����CC;ө'=g[qz5fLETKcF@zlO{ЕBԯ0*OI0%I#ksfI#ʑU KXJ+J"bL!&O}QGAl8EebU٤L+ bc6:n -rxXxYf$U_>7 >ˮaݸ�����q^�������[MgA3<o?)J*ta~%u)AV" xؽBMLQ" "a j-StB2dL[xSWIL|ҫ\c֣s/wlU J<GC:W}MPi ]۳şSDWтȪ2EMoc'ne< ����5�q`q ����fƎG:5';ら0IDMn|RgCWObFd@T=*4Z6 GW:}"Fx.R(7]Q*5QU0"߻!~j6>\8g~uK.솯~m@&BJbp/8,qʢs!0n؅#1ַ|k|n{������̻������`dhhz̏<'B<JHI�Z'& w;WڰBcNzKVxkQB<+l vJ;VPYr9GpaLVT)it(<,>ӽ3~A}FPѴ%L*FyX{.AZׯ[ߺݱޑd���) )����Z9젣ǽs/}ޗQ e^" T`ySn _<uERAHyw厞Ǝ 0;T_>UGthM䉍[l"ҖlK@rrՈ6v rj"T2փ4d=gX.o4:ssxGrܳ,������[U������u31~:N0gjh?B_#X[7Ϯ5$^R4C1pd c)s)!dRQQNEnRf7c W#aÉ,̄)ǎZ!H|Ȏ6-•J˒WFSUoϟsͨbk}<t�����`@8e8����[S{ao1ꌨ$/tOW9ÓT QV3UYT;]=3s.Pl[ANlh,NOl|b:Kh}A\5I("-iE}arc۬#ٿׂbm%mOȪ,\C"ђ^RW&V#aTS}_y쪫,ȃ������l՘w0������O'0m ͜}%;8yrqRJn,n~&Qڸ6X(AŅPH\Nw\q⡫qhыȰͦ7f %(ekιqxE KMf}CSD|<G/Tl_*έi3Çyu.<Y3����q`q ����vڙN=9:)7V% ޅW=P[?q޶9T}*Ŷ]HڋpJm$ȿeй(D^RX dj}R̎?.m{2 ;F2Vɦ�WB1xgM^Fl3 j>|Ϯ_rҥ7^>q̹������nZ^������MgAG1~ĉ@]ڶHZ LQ,ޓ*8AQ$.:Rƕe80۷ZT[5 %-"A6!JQb_E#3\AF[v=4ȿ=aQ6'3Q.Ljy۔hGOfqO6\כ6vOeϬM.�����| Nl N���3nx:n׼\0q⤡N.n ,""~B''-Q .ȔԦPl9];SSGq-R Χ2B(!*ĄfmFzJע+zI\0 ,mEl\"b%UQI{h+a (bD/cIAPz޹(Ī,y` I 曯+?'_g ������6K)������6{f}M?ĪҟT"UNňAC]턵 *!>q[hJ:tG%jkYdƉ&*GXi'0 3,n,x%^yQ׌/cb*hX*Ω32ymQL2[G ^^|yf<mG$^~eKh����ҁ8e8����az)]K7AuBda$AIx jd3bS$& f8]AٔTFzJEU QJG?gM3*Am9ŹnXETbZM|4OҢSg_MB}9u'՛f,"g  D~T_uU-4+�������l[طq������6ocSzh UBG T\-1.#i)UZ�% jD A|&j \"'s) Lҽ^5@l|DSIJ1P lN:׋)[T<y%ekQTh~Zuq ���� ) )����D*SNQ~lKnFz})P1Yx_~] TLrd y94_R<:"ӧf#"Uᰳe.S-uV$.bq ^P%W9mrv QKLNpV['B7(,y87 LeoX?UW/Y;o:������`}������l/ !޾dǝ&O1k,*\8Q*D2eh\g"j%XSgFMib'^7 j^5Wn;gq m'ڶŭ<xm9Q)Rs;/ WK(oD>L8Çyu.<Y����) )����$vڙN{sfu՘SJ)JdBt& q1= )*R^R~NwϡK-zd2}ks #^"e7겭p#U iFlq׶hyĽ><Jk9CRτub..)~{'!'NƵ?݊aRӨ\lSg7_raWݸw.������m ������3n:bYy?nD J*ZEt.ry6k5"\6W)KL%2K"|'0B^w=X٠g^{o<.q[-”6*7 f0QIaHpO"?cf{\[ُSE%Moc'Vxg]g����%q`q ����cY>pĉ(ƹ&.Q'Z;!BDqH"*ffܺ+ -D νFL )) qz'!SuDEP{<cV{$ &z鈄VGoDXMp M:q=.5i:/$[h[T#nkWY������,+�������dY>z릟4$6_D͵,N"уQJsD@jl i.J$.ID\jd2/^ ] ũVa!3ݨ+D/ƾ |8ICL_s: 0 r vA9o$|ŚI2JRo]vwXz���`����lv.}{+JizY@’px5uP>~ד PV I\xY'2daJquGuO Uxbce 1 *,ssOkZ[_H\إY?[rJDS(W!L'NU[cTQ/[H Z}U>G2V������K�������6ɯ8=kC%UQqKPsD*2ܷ6# >#o&ɗ=?Z7*/Z䢌$O3tZH^^W;bb/F)<3.:'yf{9H.HSP 9-rwZ Ǎ#;;tHcUl@E{%F~^[ v����SS����2uʫ 8ZCt*4%NUNE,}–, l1JAz1 S9Ņ8=jJt6qӒLPRKp*Ya|R5'D5j;ne0Jo1{sSf%=R4n#U0r":~x+J e29W\/]K-E!�������-a������� l0m%] N<Bp<&=]#Tn3Ϟ;~jbIΜ.QT2nl np9C&ΧǛ[[a y<  E:-�� �IDATzk'6׹�)@%E5Ço}����X@2@���-wؙN;9o{ˉ3f\Wb&7yB"*&!�Ÿ<u7 J~URd$%>1YV:ZLZ*̌t G3\*>Q%hZ,1 7 icߣ N! a +R~*Ds%N@,s7(V\+ت,$$QlWߩ~OKoX|xFT������l!�������gܸtuȑo>'NHL{p.c`#W"FLI4q<&8OHdt/rH!E',ǫsv)U:z1.t|suAgrEas/l<a! т.yH4,0)ێ%Mos'VtgX ��������l);:53.;SyR$8P+ռZ %_jDN_.N BѴ^2N ك/#'qTFy83˘=!D-)\Tr#b)kx :;Z~Idg ɮe11b;QZO}]Ӳ"ZTb;~^\�c//kTIH梑M7|˿=:3��������������FghhO5'WU71't 9T6*8Īˀ 9@CXTXrԬcYBD0B5W]*IB\[XΜi.ʊ(VD"EYEb·$*. Y?Q3i@Yv.;w]##MO���� SS����%p؁2Sλ|N;0~zH'Z)�_a$LA8`0J(R5ԮK-g”6vwjF h<zJK{sB b JHih/E8_i)ѿI%%i[T^A%ym ILb&o\/vIv.گK>G,�������l7/�������{2Ҝ9^8e'JE\Eĺ#=ӷK%%hCE@zN,Njt:@͢WJaζ@:*ms1s 6]6Afam\*#,bּet3cjj9v`өW߷r ���� �) )����x1:u(8ό2=9C`+tipܿP7 +iL!2UBOa$U9Ev"Rי@EUj l=B"eظ֭'H2UZع1CgG^6:~Un9#WCX둉RH=R+n02 T.JϖrϮǿ_;oL�������};������?Npcڴv5o/yɓ)<!͏BFE f1#5H+%&3'TRQHEt* [KN\ҔEV-E+**ڎFuT̈,LA٭`: 5ع{[Xen0[5~Vmxk[}yXi����|q`q ����^ va:Ŀ3-'y27yB\ϜY4 'n-LH/Y)9$ ,CY! zů˝F-+фh{p+Z<"p]0!M5sܹn8(-سA@\Q+9MJW֯sc^g^yҥ7^>q̶�������yc������?q^B3fuȑG}q'Ѽ`^pPŰD/"E;u(xtD}ۄ,,<tU;O}�+daQ-!TMB21?B2wr+)=z B@7DuLm@ uiwX߼t3c�����<@2@���cܙθ`C;ŹIO*i/a2b"^GKq98% N_'t/2PCR$+jjl8ZO xhŊX|x>bp:mҞhU#gqxb\gֶ'Nb1D$> ߯}eٮ6/FX⢺o_Y~mO<2������yc������?Y/9yNY+lh(DpEe',*P ̨!mh֍{RMD,/g &JSgQKFtA?%qmamEB~ QH_UImQ6rBq9s&<mF^%C4'*a+^~U߼[\z�������Pǝ~ʇ.{#`$wVv=(o^cV!("~&2;&E`Vc%,1ubXJvdw&zh_')nGϯI J~B,KVl׻G⍟AsdTH^O碪pJyfG_>R:x{\ˏ>�������y������?ɯ8sS|pWb"PVx#(qboYњ<EUEJlz|/xeEOT\1 3T[+f\U/B;@~ܑۚMCy]5M#Muy#3z Tutm)_]}q����9����<Lj|p~(̥$b>_/[l)zTYisr[JpEK8n|ک(gXDv]Li[|E|2KȻ3qB{r]}gZ].T=MQ^ i ;bgȤ.(gɎz !5֮}챫̢;Y*�������<WyK������Ndڴ6{%KU#U�' "~S)q;F\\VMBSq#6MO.C$w'E yh. "ѵ% -PLXY3\oE&gl ev%;�#�m,hM֎Äh w<6'g����<@2@���vqYo91cƌD]aJG܏IVHh8r5D�s%2s[,B滭<"hlm0'lNUYmCdL+HX^Xa.&َi}*y)L;1ځO6gǵ~sQml"md9%:с׿nxSFg~zuK^|xFT������<W�������|0nKhƌ9ȳ?nN%SQCBxˆȃOZh!+"ja)li<#IYTlUڲyk* \.*P E_o_3`T%yNePF*8Kcjb%x;߫<Ѫ4 ߽c'sN����� 6����f4w֩9e.ICD)̱]bYP"8#~H0J ]$ԬW#TEi30} !(N&wv;3ꄀE9R%))e-*5J[Yu…+庱B;ZLᡒ D-b^% ˕*'7e ݢ7˿zm?<�������<xo�������24k%'O~&8ӭR9A`%J$H?9z-|ED(cuy&JO)ʀ_ڂpi/9JSb 'P@=Ts;uSv 36i>saˮXE.s }Re֮egrw�����`s━����<v{ʇ/e{XFׯVjuecԢPU.c~ZRJ!*?Oc2YڦvZڐ RLL;27I4v㩌f=6:1qEPb, [kպTE|mMLD'c}4$:1& FY �dzgsϕ}Gj�������<?y������W@:v'/k!wDQ,LŤ 7E!>@O*T>z%IavB") )_ RT@-A2b c&7 q_TzE!N~e]gi߶8#-f+NQ[ӁN%){jIVn{c^_yߵ.C7n0����@2@���炽rc+xa)-ـbIO'(d=Q@+"R r\>kurr|juirA"#,Q”)mke͑ p0&6–rWywȌa}LDX"r -4saǹ/f+ʒƟޒ)~sBX_ %wyKm�������/�-oF�������@L{ng_rN;N$xPB \k iшN.' IB^5{q؈$Go 9\'6F;UgLQ_<a0;3U.V,BplyLUDjyD>|5Kxyf��������14+Λw1hnw8'*I;ε9*jr+m-53Ź\$b`zRUFb(E/٫m48zM%3ߵ٫O2ŌkZy9[[R6$vr+om[S,-kTԻMD�&6j?ʕt _ytߙ%������� EY�������x7%4cYȳnĉ1 h8UDg`\CE$\@ÏNb> oTqCF&\1{#!4@x*.ZƫT#:B)lLmr/`g*Kݪ/J=_<c"S^R&UQ;L}?ÑDñ޴w~_/������q`q ����ƎG}矞qĉC;Q97R"xBG~:~c/ �&e+/0#X^CY J/='VC83nWg &iG.X>SzDB|J΋ѐZΫ@2IJ-yg PVmaO;}p0:|{(}iW?{㏯#�������xq������chhO='OIC/k<#LaA@6C:INE!G@`!5UX9JJEc3j`hSDT@W \``B&q  8aGcr Ģ75( ~a^J ZtP{"ĎDxi--={i _6o7ukW3o�����Z8e8����/'N.~%Q9fi$ܡ#_"t())EM:MbDsxڑJ(O䍚UqNE$btCr~kb FI--+ttY~ID-K9.*{,*/{l!;}\/?CfK�������bq ������`d+s.pʔ@DG^@%ԓU6k{ +|>\被g踧ȶf:VLX)[+ qH(j<+}I\[*; 1H3'uq~R(ūGؼSt.*&{V3ŧ L߷b ��������l.Sbn7E#JIh_]$Xsh(nJ s**paIZC-kt"tQfu+N%ˋwTu_WحTEe.D)Klv3UVlqNϓ[VM)("!~փ q/&Jm[+eQiD_odyXLuW嶋֮}챫Zl�������^lZ߿�������Ea 8fKvid"o&m(A-F z*,T\T-RqQO"輥yc̀yWcu/EOT/IafV1E \gԱT:5bkZ|{U0QMST>Ϯ"M2~497]'G�����}8e8����.tǼYoyj8 0Ÿ󬖎FSZ VE,ēx.D%�^%OBL0mȑ 00ĶmQ 2PP NDu;K,$c |[Y/+,kp8`E5&%H#2ECb:BTӝ+D?+Wэg������-�������,ƍ{ 8C<)yI|x`/ j/\<T&7X r2&,H|F-0fň>hfʻ/$Rlb# >#>iӇT}^`mG?if[q{hbH4\כ6~Xs�����@2@���6ƎGs_{ʼ\;yYPT!lGD^F6…ňN FHO:=*K7\'sq3[0'Ɔ .I;PlF +|Vc'odlv-s,IVmC;*L+0)DI"+BŸ u/_j�������`K¾C������Ў{Ҭ9 ? _*(a'V!JUOB j MR4Ŧoy4B,z?B…%mj�5-1;΢"\egn)UQ𹚨mඏ.6d)k+H<TUQJ;m%{Nw}_쯥381Uǚ7+3׭]ueg+2 ����6 ) )����8 G{)/|ڗD>qB3N@4-lasVKObү+Eh ?s4G!\)mܥTZkFL"&}u>Dz=nDsZ8%2Quz@ss[.GA9Gmah|ֶx~x]_rfH�������q'�������[2'? L9 k*^BbRG*L xG.=qR`Ukj'v" : [mI|T/ڴvP ѯKΛc3eyZv0Qk4 j܋%hsUGPgJ~J^q1Qn;_=|ߵ7\0?q3����M Nl N����gWbELG98<f!;3~n6&T1LiV>VСNlUH#:OﱒBg1_ߡ-KәO oZV<E'Ҕ[B�� �IDAT~:?wƅORgۣc}8#Rk4S _"EkcW]xw޼ �������rhy;������-;nұ|Խ)мO,�ʏI26lO8 D,p3'㗩ob C<<# X5O $l3\PΛ-TWDi T}gB31 $aKKuЯٚ,⮡|~ǷZc4 ���6) )����/w7z!TWӜ"(& fũWK> ٧WĦ 9e,EQk+q_kEEVXQiU\9lqFUIe-]'rXJ8]7^W"heB2 OUdѷTQImgerb1 6^ӏ?y͊/|7&wf�������ؒi{������`tΘ~Q3~&e h#xdU7xLbQ*y⯢o05KlUZ_$2J' \e|U]G[#Y"4B xrV\3iOP0q_ &u&MT HMShS;'Q3:~fX w_g},����  6����6ǿN8=?q_~x„'D);-En/cJvIOY,>FlN8xV^Eb*HQ(0 (">K%c4&Kcl_b*L=6|rx5Ox%YKќ'26KkOH_MFoܴbŊ㩧0������`^U������`4iw5<p1՘N>yE|Q!JI/Lp5OMUraGPoUb JV#Dm@Yppeys:GJUȤL$JL`:!LpUMe- ɬt^ElyiRJ:F-?Ҋ}BWǬ6<Ī/?,2����q`q ���myC>CS(̆XB/8LtKCVB/"xuO͗ |LUXaR3^O/㒸 zJ0Յ&V5E mB&s imrA322Ir{;kƯ8 O7Zis@$Zܹ|}>s5?6������AyK������e=97;cF4k-eLIx2JSz*>5xJ'V͍寽p �fl@ŀ2a &H\Kws.^U(y}4Hٷ⼂y.=՝ѹs[uւ#1׆G\yGNY*����Z Nl N���=^4S.piO1BГc|LF-Ae@Iؤ<Ld*"^u9M:5>,Nas2p[jӾm9L(8{g+2UK4 Koo;AU]k1^ev[Act͚19[cA{eW}zɽ?������A�������;nұ??wmޑh^LEEP$ӱ_Zb|?ousn3i ˸Yؔ!^Mv`l drA[tf;-3sTeؐǴ#aty>GENdʘ:"�G>b~|E_8L ����l@2@���l;K]'3t6pzĘuOt۔qJEwFGI,XTQ � '-Vx1TE8фr<Ə)tLfqJt18UIW[G.!^FG+Jddi!m>aT 8>uO,N#G_O>|>o&�������S�������[-cǎt:0 EB"h*_%))q?m 8f)E"PƂ,&3uEL05r:xF 굓b&6#c3,mqSTN1mG;\"JZ"L: EZXOu=򽻯^xʳ>k����`���`g gǜ&LDľz{d/\2ԐK$CX7)EA;2CZUb~͈ d)|ټvh&bzs6~&Cgnóa,23Z/[BvdU+tYEY\ϧ|7χ:yOCX<i׮X~x͐�������5�������[ o4kEzéUUU}%S R#*cM4E$ lSbg-K0ɽ"1hKP ɸp3US3N%hh Q)F<r(IiV氱TRg1oKr/Bnd 'V|l����[ 6����[/֌C ]]Yh eU+!H%/b1DJ"9tExn6 }bJTKK~C]~a#Lqؽ^$Ɉ>njHPR(LW)J$[~[I2dbpl|߁:{ ۯҢk׬i�������[~�������[{1szD4OxBj<taEE-Lfb&uɷ.:h&bVMiY%H5Ы<j(\bD1u+9zUl\ 1$Mm V؉ ir64Vw.;=DK^ˡ$WL4i7ypꏜz������`L-׾#^; >і4=HWPIoT]b4JTR)WX|jbf"Hf(b, Q(ǯ2b~mg.DipRO;K4U.1gd*m%/RGGC61ݶ?O/ۜ������(y�������sԽ;"8DTL^S|>^07&31=vWy+1K2Ѻ&K y X+ߋ `v(vd(l_ԄI FTD9Kb\,V"9m, 7Eܶ"/:Ch+ ?[W-gI���0@2@���l]K]'3Ow:l0f D4~3(7YL*tTYxLEEn*(?-_gx1Fo, (پ6-nDS\#iggR7YaSvGGw!u\j%tξESiO?_]?gP�������غ8������M2vx:?OzyM* ŠZT[7@k3u|s"j9_T}xxdنI-}yʼ*Z(V@ Vr@|UhH2Uu-i ~{zx~@3ׂΉ}Ow,N@w?,7m\tʳ>kl������`` gǜ M>v4Z%iC)N2-ЂM'iJxՓpJJ!(1}$OMهAVɠT]$/ࢺJdT}Ej䚺yk<-뤱ISZۅs\=Yb)}Gu-Vi?bY_ϴ8#7]b5WSO�������c�������&N3v xꂪ3'lM"�V($[*l,*l07H HES`it3ƨƉR"]6UD;r"eCޖ8|zpxB*W.B+^B Xs9j'gf-N=ZbykoW|,�����) )���`8ءO1'6IWb 24Sxa_52jF946P"_XBl\$g-^D)|TLIL?\ٙ|lI|Ț)qJPndۘ$y-^H{RBAQ+*E'Oa{nkco͟{ϒΕ_E׬Yc������m �������=^tܜO>GUTD mu0|?]΅Fr>؋ ӆE6Coꇲ6l2^kk~JǍ"'TAhbfj3"p-ƩƘYW/Pi-,[Z.6mL/yQȕk)x݌?>u?r=__f����8e8���\^4z߂.|:!#_ps=|s%b*KR,�)XVbu.;Ad*$!KU+), vNZFSO9#i?H牍?2C9Ǚl#i׶+J-ijOlc=Ȳ.L[�������ְo������� 3m㇎9cmשtHAE-NA*7`V< Vs<3AeU%O@/e^='Lt")EœX2;ʏ'=D#-2wȩwM=%G.ήYpH#qw9f,#>f*3fk~[W} ǜa6���-SS���cwwt;>OTUUShUMAd-()mD(Ktc.D5{D<wH1cYeR:>Z8_VWTш:$H5NB{7j]'!2Lb}rNH ET1-R)*sZwB6yOp3駟|^q׿##6#�������l@�������cooΙPta2FӮ 6vjb=6r1�x rq+>8LR,2 6kξX=Y3 W잰ND&qs[Ҙ3fJAYe tÖ`XMz+,ZS#oW<.����H Nl N���' {;„w8I]xIHx xGT\AM2hZ(\s PJWP-"a[ y^]9dɢ2g ڈE‡N97l岷O9-!%@.޽(V{D>Y%wQܱ}jWp)~wa%###n˯⎧z �������2ޛ'��������"a4mpA.3fN%Eb\7K0xC?gQ,T}] Xς*mRpXBNS6b bZȑX3.AeM5- ZD̷_T�j.ͼ?psf,.Б6Ԛ&rwfÆ'{- } ����[ 6����[>֑z_^>5z(d<eWhD"r ~!*j~'bnD?]X!lC ig]jH"0 WGLW^a~(kK$҉Et!D,Rn!E 'kd$7Є4F2_˫Ń 'VqJ:c~NY cIJ(^(T?oKf͚9�������߇��������P4:Kw#f$F U`t{"f)↼| 5420qbDj/q A<;[,8щxiT1[u+d~FcMhZ۩S}R!LuIݶwuGD"Sdy<o~ȃ+V_|ʽm����[ 6����[6:޷_:RR [cUŏ\v}i }~Qh"bqy +bȼ4!JB,q*D!5bz҆Lϒ1<4yqn13s^:{_3Q= wpܛ7ؙ5?u>3)0W}lm1~u{eWz=���������������ܡ9~c2uHEYqA �, |F HI:SЧ1icn$@DQ8Vp"3J j뤂!@KP*kJ!2&F5Q `V % n8?z$"J Ou:=桟ܺS? U����@2@���l{G[niG!U<q xSRr*u[TT=qD"i\PS1[5іXߒHPtí]st?U^3Y7jj9˲YUBGdNb7;)oJ$v-;O)%+eTOIb[ib$rqO?W⊯cGF6&���������������ftgL?sϙ0a{"^)Kpѩ go#t͟u4 /7.DՔ>"8,ר}.mx̰"ײ^+VTXWBJUbm j2ҼyCJQo=D=/-Wm%}3Xu]ʕxhqUtw]S#oW<.����^4 Nl N���,Ə@6<OnI(>w Du$\LV*zϫK/h+Za>6"OΣD LO)B~eB#p[^][e8M@E8٤G, Q0t Qi?c%S)8\onLjE@BٳRVD6j1KF6l+_{O=�������6 �������`&Mڝf>!BOU4�gVP‹HD'L;GܒeqGBCcmyvMՔ?_3\bC\TmF<D?t+xt$]q٫6^eB+ت2JJTS)+Gey)?wrQ"[>u׿����x8e8���2C<t?|9#J+@Pm"QESQ2ulWQ5+Lҏ9RP4压j\(%* WUOѕ/3ϓ)QL b=sՆjlgWQM,t8-܅ بK:El͏��������`ߜ�������l6/�;3:1gשMd+M9ԎgQ\r|6cDy^Ҽ|]<+2) �1"9LbuaD?L$úJ|TN1G-\27 (Rߣ}(mBM eRt5OXS~0Q�� �IDAT3����q`q ���/|^u"1:AKJ/ 9=_Q3j3 ̱yzVʱ~N5Axr _sAJYr[qEWNc“|/F|k_ SdV?yBޕ(Z>dZ<sv>1<#\yw ������� ��������7whαnN'F:>#tKb#GÒ6qƣC pEx, W=;jqOZI_+[TNapi"K[v{V|?z}Zi^r-`}*̣^!~vN|5?~3����x8e8���xeһ7v Q5f\q&%Xv''pTQT$nv[C$4m*6T(nD1U$<M?_-7Q(V&Hl-VRtZH<׼0sPr]IwC9O.Չ5Q]%s.viq #=]7^Mf,��������)�������1vx:MgL?3qC:Ȕ')b&؞'Jcip0d&YEA =L:`If |$P^DC*Eܕ 6y~<KP_-J6tpbboTGQ rڄ->]s5@e;T5u=񶻯Zxʳ>k��� ) )��� />ǽ "3e&= q0Ύ$UR7I�Ӗ8,T(ī\s@1;MF`RK?-ITN⬅ϗW}֗œt}R44 z.BUiE8#?0HV..@\ixSbqOe2G򋪪?޳湱ս%HVX~gSOv��������~q�������� &7:fGN8 B5fl=Jdʍ u{A bmx>Je2r/.kI q[@{AvgNt4cP#U\2+]M3*SE. 2b,oT&tLV-KtmiA"Q3 [o/���SS���Oc!w/n&QJAJΡVf]!=q~>;]I!Q iʂj%9r-,aN5 #XaIWO!#&Yz:sRH< E9qŹZ9*kJ’$jswOXmӘFuAtZ߿oW~SO~Q��������U�������<sČ@t| RSW$Eh[Д<N_Y!x܂ %L%5J(SʎP ilL$>je^1Kr%\4 #li]MMjl%vE*PHk|IqNevB9n[o[-Ji!p <pͪNY���s) )��� ëN{3(RAxeA"R (_#R`.Z'$ Y1KL>0TA+P)6H+n͚ b:o7 x5B髓[ $YlAL׎{@IIN(3G('*qJCłz,!C|ͨ |^Gū.��������q�������<LoМc?vO$:>M e ,*iYԒ)*) B†a)L,4/V$R|;^, Jrԧe -ܨz8IV(I?-M2JIc=kdT7"[ݯ}=�����7 6����/;ی˜1D4;a#DihKC~${$V#~ݟf1*/Pi1dh\|Ze=ejSzk".jGE#”DU~X¢0F\kѬ3(m]Xj꠰k䷨vΆWTZj1 @ŧhV#RY3O<k>wo##L{�������� q��������;ƎO3:a(: PrŇB_ꫤIԢ%�gS&0_SiK<"%Ƞ,\gJ$J_앟Ck3J}ZH1hlvWB ɣ'dbmX8F2!v#>׌#o_ZygM����@2@���<??>? 'L8)RH+6%CxO^WD$DnQ$ʾdz{-RRZ%" Od#䄔_LEѮnbD*b^6l٣l*~D8$y?WN~HBtŃ=QR(֤Jђ\b~逸0�������⽍�������x4iw:f'|ЂU5f,σ״JE0EgA,'ХI:?%x DAbVRȉ˅p5"l( ]ng2B j%z96ax!P\Z؝'5k.8HQ-(ss?"]{f͆ Ov͟:_����8e8���xn,f:g'}6yjH? XGd?g7Yǻ&K0\´txv#,^ns<Eن]NS􆉢aҙ TR6]tb"哬Ф/06dm$ zx nlV'%UkԒ&oV,F"f$.P ~K:p/ %�������燾��������s>y3:LbfsBx; l`%e ]bty|ZWZ"_tea7|H#;Ej^UA<)mO %QD II <KsGȖֿfo~/>9���ئ8e8���xxixW4#<2=pCϩ2q2S.* fMY�T2FUUws!$' U86` C%m!D(BR_qh˃Th !b+KZ;Jp8~72S#$A ^g\׵Zm] (+>{͇=)TtzJnHKc|U!ۿFYmWNT׊m={W]UT11Rlg61[A%σqԣ;-6Ga)xɐT$ZaUoiI#*)Cn\Qb/_~�������2������� ͑G,~I^z#- C =tfG(s>"~ w^0'0mTYw6 'u|~eGMγVP;9ڸ2 ?spޙJ9vXگ-HQt%k?~TUbTH笽Ӫkt0j4Ytؿo}㧮[t���s���gs^xyB3!()B2Ouf@k2VHrv/R-Kp*aI-hEnf)MZQZTc&I$!] )fņ(*]gg6Qc,PbdϐXeh)*Bd׋Aw)#c(aKATV֮m>nEcS}{wU�������x_��������^T&ND=rO>_IMj$ ~&H˅{̲ I䀥kFE.+ lxR"db|:ه~M'.]%/^<2n [b?Ss)i2ֶy W6m����[@2@���<&MB7NrTqaB3zk+ ;\dtb>4'0e_\—=/MlZRʶdXK9x& ``%8B]T*mĵ`W+t⋖U潸έB\fE-hax/ w KEOUXWeIfeA;w?ڻoҬ��������������0m,:+Ne˚0ab_b$2ˬ- gLЙ!+~B!=W0R6* ~AKrMv|,ԧ΂MӡQ`'o/R&#<qJr!z|֑\D.AWJ$^i_Hwh~_}G>ۮd���`(6����ϝ]b3W:C)@ ZTBHAA rI X گ[j,1Ze NZa Ht~Qͤ2_Jr,i*d5*'1 J*FkݿSiHY #`(QÁ%"6F;:ս_õ��������EdW2�������_u픿59n^_}ʿs5(4$N<</8>Om|IܠEofAۆkk6sT+ v:ݽ;_ jf\-wGFRNѨX"lc[-u:tb����d Nm N���s=>t֊?Gԫ2Zfl &Nl-5PXȾm0WjbTڏXL^7%3e^18Z( q*:ʀɅ*MB>%mgSSNGJEJ*ia+! 4D/`f6c33&UwqǷ<r W~7�������x 1�������� z/Μya}  & aW4|Tx{=JJOL-VT\_Ļg֬J LM40uMk뭕sE{XbvڋvbSUkwnJ<>; ~/Co\E����0@2@���/,`ijza ::ƣ>hӀ߶>t}'eUU>XwaʳG'}+ QՋ{ܗ"k<;Wh;O͈D&z\wQ|J}冴Tɦ�XEOY&:^BZ9sM-ozk1Wit>r|IwO?些|]?64�������R�������0q$wyGo)SOTH16; BB0 ZL_,Y !Y*p,hH`WZtjVHi*YD2߸NsϡN:=au]x~LEvvz,:lvj>LjS<5wcM)BubT6goWӆ6����@���`8&MOz8式NT aMQl 'HI͒Hb>QH֛pO4גݍRyEzG6p yZH1_+{J:J'lZQUX UFmIŗP\XՋucleH5g đp1x~ׯ۰۟2�������)�������0L;tI;m-k„hIx FXa=ՏHknjR$ :3IItvM3 ;O ACve &E(qK+7.!T 0.NSY˳ɿ(GOm᪏|gUB�����qʈq ���ӳ%x;bլ"ZQQ?p/d(%ZnaR8LAMY[ :([)溵Ƣ*'Q׵!GIF("Ly]cOҙbS)vQŦVH#[OC$G()n)<Wa}kQ?oX-f��������{Nh�������=WHz+.~azUTkxr$ 0ʃ760Gr#BJETɢ!~V8E;{/Vy5U:#ϙ-P8~oF;OVx<Y6QOq#x?;_ny\r}~c ���@2@���Xz}hي=||4fl0mIylyL(.+$ s1Jx*iMt14~ΎH%a6|H%G6VM)re<&=Nٮb#ljѵm {f)UNk?;*ٔz^k?{l������� �������`Oמ:}ҙ3=z"yǢխ N0{PƁ\#e)lSZ:7&oq΍; e^sE Uc9IG:^}%uu;t ٞ|\'J9ʊv?W9w=%{[tQ晰aD\~W}~r���`���0eѹK/:s8'fQX 4Չ'64HLVrbƒ%sʠS$Q3 WT{ށ'_0[c"M:AI,<1/J19*YAS D'!J-ՎU) ,"tKQFmX uV@_6]9ŊW@޾'|W>>Ӝ�������= �������`$8q{yGxL<}zu w$G_#s'X˜.XC.ϫvlKXt;jZ=e!Yl<ǿ3޾V)+8?vIW2BQs_$o v8oDϓMv {MЍw4g7+qGVq���} SFS����I' grG'OE$U‰t%b!d R*}Fg^rڼdis;>ŏ)S4D}D1zd&�x*n8'%"y;�R#([LRb'BI2e^G~W.%9�]Ri_ݎw~ ھ)s��������|g��������#ô+Ni&LhTGcK~ ' 1zH,!pxQ$D7D'i/j 74iPg{BGV!+(JU<nCO@%RLBΝE4DW r_EJ%lXpA'o?GMf.���`���2=;ӼgX5k!т]-ni韬1<8_ .NAK"2e_&ŀW~D<]=e(v4UmX_b UYs�� �IDATD3e;"R96@)*X툋SuCoH'lUWBYt *_uߏ^ѱy�������_��������FWHz)W\Î;-pȷ2ȒN<.ol;cb[Ru%N m-/Aj>e0BԵd'D3+hJz2!8Rks;{nur:KoK~C?_nyp-uj���{96���W3(в+^;g"J ` TQ]gl 9#v";NSg lELa$L'bD2D}I6h$ӱ $gnFV餍=3QJ!.*p1JZRIs*?Aq)3 C:mKD8Տ?#_\O{f�������0x ��������#Q=u|ⲙ/=_Ehs ߠ%(Ù0a%0?z=2,D]Wf=A>GxCמ768N,%~k 2?w\*E'+R!jN9rbBpf)÷o\uݢfb���`/���/,zҋ\p; @D ]%P4օ NdҺ|cyFóx ll>FݰƒrgroR{%NV\%0朥Mt[,=fTsEyTeDiWf/�(I h2O?Զ6[76>Ӝ������� �������0L??z[.`{"p^OuS�եB HTOYiǖRjB/}dsQLqK`GÇyS,IR\أ)fNYŅG"ggUdB'.lEǙkw>޵WWE����{!6���W4i2~qy5eR r"|5C ]ɖZˍWƐqg("i)P.(grf#1Ck9*!f 'J\lN)$AɇVD&Jj*Nؼl-J,O}mRZ#B #=hf씙b0 *2yʟwܹ~uM7_sO������� �������``Yt=s&4~%WPgA?8m2&RXԤX0UFfen lAW[<.bwJ2<d|m::1$KUŬI1>z3ƞO}+붫6U7���@2@��`ogxS]uAr(-ʠډWÂ㶙f M+B8bmC*:ʍ^hgIäp:U(Kbn[;HubvF-dZsYwtG6uC(K%^nR'5=A \a"4QY)uڅRѥw^ç=sD�������� N������}_y$+.~axU$ F&y 0L#V֐e_.xWBMFm%Wb>_<6+hV5i_}n=ousG-_-)n{G<ъPElA|F(]X&Lnh[<u���{6���؛sQ>#̝D)}r6[DZX4 jdth <;o*V% w*Rٚ2]CUYaj+Nolw/9Sr[$e)zѩn5i;3OdPʳ+HV*N•)D'"6Az}شz-_êO;L3��������{��������{#Gd/lٳsqNe)B~vO":^(ădmD(d$rk34uİ`$3FF85{ۧ];_&$P v29u4>g<)#Bj\D)<%e̤<v4yݒ~Ц+[t���FSFS���|AtyqzD `~Jr"�"JXƈ" alq UƌV$Aj 4HH ʎ'Ds4 UghDfyg˅:U)鹖.Q *߻c[Y - {g/ہ4֌E@U埫wxɛ6[76>Ӭ�������)�������1q$z}^0yh8eÙ UNU}~e8#̏ה>QPв9Ѐ5?FfqI{Gޙ5; Vpջ6O}=tF̩̖Ֆ|.ⰘPG:cOZ(>~v|糛Y{՗6,���`D8e8��ĤߛL7qʇW?倩1\|"!$ҬR5dITJvnaORI10FpF GN:&QEn KBzK(W.z Oӟ{񸂕Te$͒ȵK%qej)Bg %+!p ^AƮ[ƦIFh&֦_77om[ׯkھ)��������x��������ME,ҹo\, M8R|5ă4.O\V1'4)ineGvXBT.XDot?5]~n4c;"|A8x9-.1 V%vLr/6C Dv~VlFe*H'Z! A6د7n][ڴ���@2@��`o={_uJ)X}UAVh8EJ<x%b%$DP%E4d PƆTO!&P5n+ |C28 )F^ۧB�%^, \cU9+6vDfĮ {%ej?\'YBRdcHhKa)Dv~{2z/ްjcc[1�������|Y�������W8UG?|ͼy}-k/ ˂9 ^EE@vyz>P*)[VXiD&<5Ι f?*qWU\bwU9hE*`Z9cY6\FާHճ L<Ȥq,ˠ5_A_r˃n{ظ}���`���ΜGчǏ8y:QJat.2WZ#J1�Kj IDhfͶ( R_UGxEV =1|I͊�tᲓ_›,d̍8I=EJ\B"tmZ4 [ʒEy�$AIuyG*/-*yMzi(Z~-_S�������`ߥf��������qN?O\vg%}7c,Y}]&A 1(B)X@n$AU!c0 jFE#Q<a&}o\%).-Ԡ!p(봒7nVvQM?z,Bn/Ddrڴqu������_6{gxUKHbW$ϥ)RraV!z)ذ1HXns}Чڏ<N&R'l}\,VZ"4 !2[/ X^&4\@c%2q(%-,3vdLי@&l'U[ᶻ"cD?݆-+<tɬQDbzǎ'\kcz�������`5�������`dIc?|'\xMT)ܞ>IAD}V|U׽ogәWmQocĽ!Z)bio'!%-fn٧&p3<yQ/) K~P A)\g0}G7P  HlM{mwy6t���` Nm N��0jL4Np)^1eS d'"9I)YL} "_RRM|F^LMXD 8 j&;FnlJy ~ݞK6$aqJ)hIƢ7*Hddی8?sRNT*DcF`lN fv,9Am4pTQ罤�^z|m{뺛nwmy��������Mlt�������}f'8폏9&4h EP6 Т%UVلEkGv1˄-ی9nhet˱trzi7Nl)c#ivq7~^9]A;Bt>J1# 2Ld‡."4 `x3~}#߼ӛ̤���) )���F7cx߻rլ>4R8% 4%U6̽N#!9!)ZCW"I ]r{jvrČ*'yݱy#[%>'ZR0ۓqi�(IRT'U.FN+%,F~+rם_\6�������oc`�������_y$O^85E%̇G&%A/߿<0nc)Ozm,)nS֢%!tM(/H ɫ(ǵ:'5ZCVX5&"a:3 + ^xK9XbG\w%gƭf���) )���FgI~_9#zJ6IfZbR"(6;oa "H`б/(3I.݅{ mo ndwCdF s'y@!IKJe(ǫR-B4h`AQx^> ~ fz6{^IV?#\SWsf���������6��������@#NE_Da @^T>DîAc,T9=!Eܳ9шSlOܹL Ja]I-nrC֨ww=>Xs_ՅM<b|4kpOʲY3ڰ{h+[ ���!@2@��`O/;{4!E�IQmK[Qi"vRoȖ{+Ƌߨ?kf (J5 O0*<q䬆 ] Wl&nBaJ 31#eJڻԪꊷBTХN|}"; ކ8 0].T}C;z ^iN���������߸8 ��������ĉh}]4yDq B'mIe TqQn,eO6b՞q|6~蝠7~oC2âQ>VyE9҃szLb|qՠOS#[#9[ x<<o<h g7߳7,���x8e8��ȤIi[?8])JT% l*$S%!W a 2P:m%63 C9&؄ߴ-!Q^l6CΜwqnCֶ*8GLo_RY[SeŶn$q�Z*mJϣv:\A%zvA;{7޼۟4��������hk��������δE ?vsfBTՇFNs)V!N7uȲ_'OɈ2=61T_J#<Q WaD8ٞ&ס⟣ 8xHw)5\-hL$N> Vȯ3Up~_mߺ3M���%���{,wt!脴<^;QRNE/(_Wbb'IX+P(A9xvhfL}C59{yքCTޠ-+hoJҙr<;JwMCad?'K=ʻҪJ(N7q̸B*#2-%6^Y Mjܴ5{w~i{��������|:��������WI8M !}Z}{U;YȲ$zNu6S@FЄ{7̓[f+Yv28m<co}| FҮG)�zN4 䘕�g7@,D*Ͳfx #-~Kκ灍[���/26���S3(e}k^ ^$J|T>$뇵qj{JKZHR1TxBR孅gcsinl%ds zS<c]cYcϛm$UNaFnJЧM/H-$51(B\& *dVGSWY�����������������GqfΜddW B4q엝ƑE %@KXERfc~qZBơ.=D1{QUI'F-eݜNIE*30㉠vΣ!NęukHB(TDrI #2X 5l{k޴[t���^D Nm N��R3eOvE}/V`l+&DWE!֧g<v~)fqLXy\_Rf5в:k@О8(&%sR']!_qWkbI@X3Y9ePҜTXL`yO8ٝCTc!{ךwE XPE \Z̄ORΦ"p鿕 mo^}ͷnl||��������@�������fI4}[.hӉh7"#]ƺBbf,d1J`X2YIu'ڛ0hG>%!90_JDYZ|348A\mCI|py]f@, Mp(% 5zB*f0_ڈ+:G1n^Y{ð��� ) )���^*&MLK:e)LRRr6D=kA QtmX`uo:nǍKܨ$̸0HR5P%GJ)(ȤT a�COܮO>VE% d Rܓ 8- J);s7ﶬžg͍2hc{;s뺛np]۷ʜ;��������\_��������dڴYxǗ}Y˚fH%WAQ"q'$Z\kA HN/3{Y FhR0A)ڥJ/AEOqj*Fd(Ͷ=1JY]p~^Ou!r LNOXE:yPִL:qN;Q濷?^q޷nfs8��� G ӧ�� �IDAT) )���^lz߲Y<5WDl�mM\Pm)+AXsdbTEK[S ߔg(hHS~PاU{,l".)sl fjKzvCeqZӦ{2ѱ&|:^ֶ(%+j2Qw0{R .m?Im#e#>6ս;v协=2��������|p8��������ߎ_y$vʋqb,% A/3MHS|pINYFUO`>OiIi{aT;w TtHvf_a +\ -Ržv9-B/SѰ"cڤ `.RW4-9wAcu˃nYq=|voT������/&s=;/=& [Ub(9铨,0bZĒ2Gt,Z(V[37&xghY뗣y҄I%lmmEB$m"^5bcg16K-IdaJ.D!JzSC)bRIP(@K�#Ok~׮n��������~ N�������#6>q̙0[T5?C.,oI5E#Z”^ō!a .Wԃvbɷ[jE,w>ah}Ի_]mԈ <^&h®PWǑP+t"$u-9y6c?{hO^h9z���w ) )���^ t-;M MϜ@%z,QDV`bG`v -�EN2>'Mb*dmPpc�+8!r'T*^'&NE>vН'bQG,-bu^$Fw STw]_g=O> ml/myPEWa Wb\mkoM4 ��������8��������wĉ\pӦ@u%PU. ':sп[gpiR{=3`=cŅ2y:;G_K6l=CK_YI圝V]hs-/`w,^en웡r�Nv2Iض7z������/$&M ?0ݧ,_1eP'M$zM %Jl8>(nxm%2fa}mbЉ:{ق QNGzה$,i-!C+s D%PUp劣,sGAW։y-�ŵ-i1T*Br.AC97~UD$cdUM5;wׯ۰m;~e��������p>�������=Ӧ͢SN?z&L0jU6xb >n#)'t^F½ȒqPB ̤r`%$+RRf ĝcӧ΁xxg'h'+>(`/x_+J�% R>FCfA߆+xc42.pK2g?[8[>���~K Nm N��BV}1g|\5k+ tx8b$ Vroh  TY$)|l}dz4wDa)F;^u\%M>ԥ U o,ѻ%vKt! )·<Y҄QlkCĉ&[I"3':;N~W eIpOk{4��������~;��������Br+wzs7/-NS5kW wK[F0K_\`,XS~W=z~aE^D>'OOH=vj 1y$2aQcG*{QWт&2Al]Tf۬%+ı_l[Vu������k>;/}B8a0<T@3- jDVBV<B"- l ﴢJ!-;!? ]ߍ6`X=ʄݠR儨TSD&Bbv)/c.ckv`Yqe 쬄1Jx -#SVW&q4dB5paJ1l江oy7ޟnn��������//U��������uG,?q̙g7**\\|SP笈p[JBzݾ'D9<dun6P #a-a3i(Po<dD:KӘy-><`!2eN& +j=Ѝ1c޴o?h9_���y�qhq ��3gDv@$L#I>XP߫Hh YTuߡ*_gU)Wy/+xꖋ6Ƣ;Ivpۃ~,^BqsI�X*r}9]RVԒD9#1 MNc(]޸p•(3)bdR";޶mݿN��������^L}��������x8q?zq~[Mޫ&rc"1Jͩiv`[c0bÝ3փ\#aWxu1u~{ctmG9S� 76oׇWLq {+{&P,-t޻4#2ay͵�>i v糛/n8 ���x@2@��eҤη~`N^b@D'z.^ȰE2DmI"ݛj;Q4"]a[.E!kY_4<>7@D` *bl3 cd2|J!n[*ac.ӈ+fQƠ#A=׼fE_־- w+y'eǐ8sEZ=ގ߹u;?Y��������b`�������i^AO?>e_n","q뼭-LOl(}-(fth 1gïj8RSh<|L� !"jg nRd7l\Ҭ!VOYUNJx)دp[6}f���@2@��|1g|<dv_R>DnB&*1IZY WP:j|l"9~K-P)+,Aipȫ(y3yL.5xI#jإw,+ JkT ZyxUҞAy%*lKVڏ}]Id,* 5ɝw~ak{a��������^J��������x8UGi7/AG+aJ(qh?w8˽" 9p}9\dςUN-Qr8$=_٪/6ȹ퉁"4o>R�>$"!@iTpJS9$WJ )^rDl[<x7.97n5���C8e8��aΡGyK8Q'J~f~C%WJSBtSҏAVWT \#?>^ H:CY u*| O*( \btV;UKv$gl?wW<߾XǴ"h2A 1<E&!X&2mBkGxUvsD��������KA%��������xxo/lٽ1(A (@D9)()/|^#|J4L;J~&8G \ao-N18TfUslz4E:aѾw)&_v>G8 ][GQ_4sM<c>i'[Y���qhq ��3~=e ]znn'VFt?q&ā}lmn 7~YY }ķ(R`ǺQ,'S_.at"4~$ȍGg+lgxĥE?:NH:Re\k,tʬAQ X8JՔ rg˚O?mݿN,��������|��������^r&NDo9nzLoHXS=8�n6Huϋ/Wy oP5Q ,?>쑸‰Na|1RbD-&ž 559:hZN/g}0DM=<!aA<x M"--<}.Acmoo+fa������äIi[?0݋2b'%ze2IuYAR*H`ID"}[AKXuf1pS΂e-M$Y*) BzIT,uE>Vږv#j=+)@ųkUqTj;F8B#on_Jko`M6\sǶ2+��������^jj_��������i?t^4&J*MPs2NxؿÄ56nOaH->o ^ByA)I! 9G tAPЕNt 9Sxb͒U_mvUB�D*h(AدW_lf3���qhq ��a/S]+>;_Nߐ7mZP>~U 2HA$(^5߉[BYxE^aֳ<{j#e:1ʛYm|IR]IP+Zۓ3ZDbor_^!XGٵFfnw[B4!vXe: <^R= Tx+J羟qrcc���������8��������=C^ua@|}J_s/JsBP!sцT  u&u pvl RÂ:" =oekqOW}RGoe'b>~9NԪ 9]ZY߫'NII;3qJ/x>SF9 iK(J۱_l\q|e��ǁ8e8��@9E~1y@$CPjT"^KZK '0(JӉaWZ6Zq5ХEGcˋ]+H'B죜+fI9xSφ(R Ԝ 5Lq[X)b?\,%uwA^OSsQwϷ<V'9�������= ��������s9%O;Ϝ!,/T9yeO~jv?')f25XHr.R9Ϯ2t_o.}Ҫ!TP`|%>S1RC Zܶ98"x),++1$߱ 9.qβG47ms��Oqhq ���́3~촋-<sf|I-@EP+AT>\ME & g[*P:54-^b &h>]9) O!,<?O)ži1ɦiC< ʦ('9B\O,טBDVO#f~rVHD Tr.8)UmOo۶_Ns|�����������������{8'G' MNDӊyK|]MFESsۡxApyp.j^.MA Pa"t5 h㴷B=9XOiX䂗q%4 `D%l?voE?` ȥk<EO<oD|v=7\ 6c��'8e8��@bҤ){+L>`zlOiX*~x}(G{ T6 T r+dQ ^}ܧ\`DydֶA{0( #.Da)b Y9EGB-PmPEˤ)fzbe8<MaL2T;+@0,uDko`M7m;4S��������{2/g��������`gڴYt_ǜ}N/RQ|?mPOHC!6lTcីB\Nqs?)D0E&<;0Y9ŊDp% ^+Xh3 yg/|N2;'=SfА<uӎ] {X`<}v&o��� Nm N��|%W:C)vu_^0X*jB^u׷멂 ~VIK,et}eЋ3Y@(Ň귡<~N;ꎴ]ٛ/cgD%)C)ٞ=%:q'z~|Iu:(&iZ+tnE,Z?c2����������������FC^u$-]?<y\"3dv`/n@_7拮 +]#PMS(C요hdTR?^y+K7dEDJQP_pS;7N_b9cBK+‚=9@~Nlb{D5湟_Wnw?q9���6��͜Co.=bJ)B9@s],L8%A JR6~ $,imJu]%kr}-o ܿ$Qs FQE*u(J,wͺ$0{1ΨpPxlo9"( q<aJz素d+vz޵yB^[WV~��������0#*��������#LɟgϦHKFL,**_i쥡!t/l!alY~6,A)yj>wUū .%# -5btq0Nņ871e6P;;f0H?#g'e`-=7%hQ">~Z19GR*Tm{1Ij|LO\wy9��8e8��Mfo{Ųr!L= q>)⬼)A࿓%YDQWR1Rߩr Q։,h ek1E._3Q ^4Ng[f_eb4@Dۡ"9F09unD\*v#КOo۶_N4��������`Ԁ8�������^ĉ·\p~N ,Bd%:KҾpﭯ IGxɍ+5{Q죬ݓx62>8ů:"Q{`ϬAL䉁>EJޮRL}A ٞ7H399g,2~ "h0|mt?6��qhq ��[L4.3)J !\>BxxmpM +|"SB(BH o0RLtB_=EX ZXgbQ!,2s]J $VrKcoO:"8,)kkٹ8Ų&ԭGe.\0َ׭o߶W��������-8��������`6mzǖ19 M/~noge(l̀_񃧀A'dP~r@x}|�� �IDAT#Nq‘,fZDE*얩R~踃\0Y �-΂+2B43*kLg;u8*yf֯zov&i���{6��AmOw]rA3>o>S|PR1F0Z-Hq <xejn28˂P~ Ľ$ 5+ v+v)UL8o 2;A kB^!V+mAWg Z4V${;K9Iv:~ SUeQ (w5{^@ޱkX=����������������%hya[p5wD7*lߵ;RͯcY*&ߓt 3 Զ֮ q;b !$">gj:hbpA >ެbܸdQb(y%br_lW";?~`ecȿ=6nէ��`��sgeG̙;/E)m dR#OE&<OM�#J}Fݔ8)!,hK - (*EL,> .Ix(VZbB+!uOgv!WՄJT^5SؤѱxzYfrʇ+6*Il+fd=&!k\[ƕ9<��������X+ ��������rKg|l#R(FLT Yj#2u"п R ?+A|BOLhȓ&�1s;PiJ!FcVt+`lN.6 l8d.03STqp&er<$rU;'|h/s��W�qhq ��8N,B3(o%)BW"Q>0@ 8I,kmL_#Jg(=Ԃ*R”]E⳿fV%FZsm)q J !5Nz.ĊRo1UqU∲&bO0c["̷fmii ��������M@�������`aIt_^0yFB2?Gj )pV˅37u]9"k#hHTAȈHQO^-E2"6ڊnٻ8q0芳w2?K`d%A7{ g$*P>On n*K'8mw|j31����4i2-]g|riΊBUFU@~S{Gt8`E Xօ(�D$UP*I D*D MsW(Aj!]YE앟O$zϷ߷_VQY0jF'x&Pżr*KoM=4;feD(]L TT(n[Jgx۶߾;xҜ��������7$��������iS_AK~|}9ƊTD@ |$~j۞XL(5ף2+bM1J(ZH!)!zF /8"8kO.1lo8E6O ny}WNi"oA{̼ )B))R6KEįپ_o]}z9���# ) )��Sg|]\rh"*o$ E7Vnwj` Ȥ56bxս O (h+D **iP5n.QOh[JߔقTGF%hI4Ny<Jd6TW]Il?KC*V "= !4_X{G��������f*��������<9͛*A8­tčE0@&zd"Pbo|oMf6~#W]ٝyb11er.jc3=˳ 'fY0o1I+n\ӆU |ԘbEmx ^7{ƪM**!u#?2/>k3~`V&���#) )��ٿKGh=씜@BPxR)W()*UOE+R,aT |?}I |xC%h(&dAW6:TČ[fF<4wkdxØaY۾ȅm7,+/<'ݐ$*coI="~~֜Tu1mZMnGW\q�������`l��������->bN3gT{wWߵ[ ̄*n)}'Cv}53 ǟD\୻ gT n"bnXBïE_-[d8 7BYR?\YFˡX'bJ@"+4Lc&-ِaEOl˦_̼���FSFS��`WgNӦ0'L!K_)vY*) hjP<DT DQ1"J%RUŒt4e< BpE)^_WxmhZvb,iŞT*ۄSfz\URX? 4EYjIb.""v858j8aqQ8ՃJ"E_mq?-?f+��������o��������1&ND6WRc[}ϚُA#x,57&)i\XR;ll0>!(I)h2<XE[DG$U 7KT˝X QZ Έ)wDK`B:I)-Bɢ<1>|j>���{<6��:e)D)>:B}"` JxjQJk^ŔJA׬| KE," jId6Wl¯{UiEW∍~E~hrn>ֳ(/z$ X r!FQR/1d!HYXN"l"j';.3hkSUGUe7oܺ~ m'|��������c1��������]M}-Yo:s0S8(Ǹ TY<yܯ wȲo{ Ut͊�9T�ѻ˭M*% _dAtȁ6yTUFmWv hYx{<?\^XRXq*U_@%%IPϘ'~S[W}dmWm2��qhq ��odƇ޹<P"Zf6$Y>XZC+0QKv>suޚP% eUGQOLТX)nSVd_Wdoy߇9idn`ƣ,Uӵ>8^!") Z䭙JF~ODfpnISbwVYMatCzwˏa�������}!!��������`?uO^|a慾@e4RD!/RlB]`AJik %X0E`Lu%j!pZ�"Ʃ=TKa ?8"%B^Ȋ0Jر9 o*e, z�A3!J~TUѱAnH _Uz?߼��8e8��F.;c~7Y"|6?8V5&nyWv]fDH?uCߎ[W H®qŚH~3KކHN`CJdvX>D6ʹ9oD&QTkVspxvY$&3wFw?ِqcOlyW^q9��������m N��������poqڢ/?~uX$*%BtXv獑R8Ad8FpD.rm6+d9Td u 22 M ( )UO<J(2j#A,8" ]8ĴVxcYC{-8 OL,xY}2ALa@J(:zA UPw<D;ַKx⁇7}5'G���h Nm N�^oZM3byrѭ +>wgQV"H5SQ}/>CD<A[X�JEd;FTj(vmXtbV6:}=_Ô7PA|_u3J”MvaGg)59Z<1J*;L&=np5+1>ӌ ���������q����������ĉ }'E7mꠒ%(߷s~7 z/D!EQ]fDNܷ, F]tdmxu!} ]Ev 2G+"|S͋-^> sI$aPbɦ+PN|#!0,pg+<Ѷv?n���qhq ��ٜw|SD)%Aj+߂<!LcߗA1FM^, xŔE IX!p>$7()Z|tԪb{SRV|Ti:DS`蔴0l~0ҬC |fQ<3V-;w~ׯodmU��������>���������i?MǼb1/Dy*9^;9w D8^'kmUgC~{U ؄7'3cQD-`GȶeWM1W5D*/PQK,*i|AX^hM4eyh "o xmn]|md��%��3y1л>كfrhq~,KU8߃[*D[Y$(mu6 j"Di|Y8&M\ͤhIMx+dLGVI#vc Y!KV /U=!�Ukm(4C z@Ν[8S@@skK"/ጅzAᯔ{G$9giZKsGIЊDc; K{Z{g6W Aܒr[1cLq."Y 'uzi}_f^8<}όL"G6hGW_9B!B!Bs !B!"yo~K8If 濋'(K3 $3gcRYcW DReLAcO&M@e^_qp^U'9kwƢ!F/b&5SLюFP$*54E탢68WB,0pH1=k96 ;A!UBq}ˎ|q')E$S Z̟6Dڊ*:tjp,tULt a~%pixoaudNQfH]ƕ;/w7 ecHMP}zT\xR OUlR62+6PG^!W?fg)A=̹F۞/w]w?zӎB!B!؈B!B!sxeơ$ Avx?AD+GwV}B�c*0;{ޞGf Na9.#:QO#9FQEn5  Tey=[dg#s``)kP@f)UQUX)G|{[^طUB^=hNohN!݇Kpޙ>BUqjcG* 9WbSb u_9EN<ym;\S1 5~6}4h3K}/ʻq-駷J}e-rEW^<FqT#,vUtt=4$")7}l~T唾]zt۳;~W\)ӏB!B!33C8N!B!w'_fx` Ҥ$v=#F |xYF{W%FU=WcxF趎`pqO8:dR<3TN 4jĠ=ʁGzzdYi8Nj4ܔrpBdEOG=f-}'vuV^w=u{!*М2МB!=8c٢~u)EO\".Vv-b:lH� LFaDNcD9j*:OvnϠNlSR29Ag>Q~۞񢞭Eovtb_SO1:[] tO~DVʼt ׬ ]>5=5?W3;~aB!B!L,!B!a?yo&6M "`1v1︣/jz4XyE𫨈̥%8Ϝ"H6NxbyA0k@,AfyדO/ Lш+P3&B <s $A83�uJ8Z7@$6Ҵ;'Mqw|߶?u-g7B!:474Bko99M!VH&S0ؿQ8h- ڮJFL-4t*/mLмVEOrJIa*'#<<] {$FǑ8֒8W% !Pȉu]{F$i!q $K>Rgt곌&.YM!,?ox׬O3"B!Bȋüc B!BKM}T8/}a'B8OZV2lA)7;BmAYbx7?HC. 5Lg9}Pjb҉l&(EʕSDT*q|McA bu3c8EQ?H SZ)bu4GIOwej7)}&ޱ?rBy9e9B^nZCBlЩ)�|PcuFSDWY$t܁KՐXo$0en%N3!żr9bqkDf6$3 Tc15=gputv:bv1?sy&.%wb^[KWU̽G1BtO&>_ڇ޹*!B!B^ 4B!B!�W.;xh3F9AtP5ܐǘY9)s Sto w3x{(&x{i\4DoSA#*h!< }7Q3wc$04yʤb+Ar<j_P%TB+3HQYhM5a'5ef!"М2МB!.ō3ϋʫ)Fm q#": ^ڜy!K\v*, j^ H̹ѕN2ԾhFYx5iqLP7E2GTX1oILFp2S%I߯ңSx"bQUA2[HZO]o߾\){B!B!d+ B!B!<~'~'_tYo+T8t!:NJ迊%t#~"H5ۨ^4/kO`E qU TfY6<cJ)*"yϴ0(d>Z~?8a%Dܙd {[2B6^놉'}p?E*|0o]o5D%A'v6$!-�� �IDAT{fB^VhNohN!WsO裗wX'@j meRX#dXu4�Đlg(mb0;TB T 0o4.~s`ЙxF(Yߎ wO_ϼ1 7W黦:10f ]{ފ;kg< LSɵԭO,Wa7wsӷKB!B!B!B^VC_9\Eiy"՜b/gUSBYB\Ih� TudsG@#Ih`')?H@kHY<% B,af&ZHۯiPOX@*ޠFϠcY]٧KByY9e9B^YN~{\pA)ES"4PblRV/}N1} #HR1] RGDZMf\jI AelC'9A&y ÑwŔfܗjhKP32ΠH>.ܪ\/J7tTsxG6n\~wO3CB!B!yCC!B!W:w ' Kj%!*1Y[CRإ]ONR+I`N\d$K)P4T8^$9 %EQ)!ME.8^]v2"7(i`ܘs,by0sފ >Ϲ1.;ٿ}p~Kw/&'\vÛrB!474B+ǍK\uOJ)9i~HSqT1EUY*SF2h&0em@bߘX¡c48Cx"+jUS:Wʨz}`Y[C[|v 3�>gI;J,;TNq=0y$n^ze3-ϼRv?ۺe{tiB!B!x!B! ?Yt岃:&j�EL8-V"@BגihI^K?1Ik0њm){ %Vױ:v5v4NҦ,s^]˽NnbCoQ1&ǣ~15P-Bɂԝ}*0xUC䣏mX[\h6BKBy}y16Ma> ( bWA0yL 19@T4ӑUA1frm�H6EAtN{8VlHMk@џrFmCj&A%+{}RcнϨ!WѣW hP&Njwr0(?pG_oTȄB!By!B!B^!w>5kցJ*wGDg193á8CSkdg!='|7*MUª&y]ILA-j5">iP`9eFz`G/885eOLQ+`#&$U%OtuxB[UV&zy ^zϒ 38! ) )qi?O~!^N&GH ]KR R*&vnU `[h_XǍM+8n mƀzFS / SKRtΎ i R_V82][DDl5Z'όϬ$!bg->)uzm7yMB!B!78B!Byx gg;Mܧ&b$Q(Txm" /Pt9ZER1R 4y?fq\9EDa dUT] NPY=! *j +lm ǽ5F%`Iا_c:9} #2AJޤFg^_Si?|v'3OK֬aC 9e9B~uN~ș}!stX ahJǧa9U*b�s 仁!%w(3γTnZ'nSP֗?*AƞAf{V4oL5 ;@۪)MG~B$ 3I_﵁i3z(پ}U^sK BGq]׮?4 !B!g B!Bơ̈̄߇Nvz ! GTI6d1VNExM-8"ؒ"X &N`,Ȣ )5ih3yI5;f<L(#A4ax{Trү\*VNPTf&(Q\'[^քT1 ?4DuzM쩭ޱs6ml)!SS!W㦥k:*ZdSַ_14`TMnbH*dfR]j'\ ]-]01>e NuL(ܝo{c44ecLq`=(P'ǜ"יct9M%s+7er&C)UHP)g.fLUDwD2+1_>k~{yB!B!&!B!Ɯ-\็:H#$ Q A"z3j<ƌUOTC&Q%UO yZ|%VQrff*JUh<6φL#?m iM6}YMA%QI B4hUi\*k&߭^7/!) )ҸC7ygs 3=A/aQUPU0qb?lR{ܒJ2g'puL16QBЙ|[ȑЙJ`j>,L8j)Թv\KwXB9%;cT}-QШbJo7ƼXW;1whzz4 B!Bȫ*B!B!%_x K^xEuL*!$+wJGz q'5 ?<EjVGC)bj"MkbJQ'pF"%Ԫ# <M,F8:<Q%EuGs# )GNC5qt0I u (WFS>ujD9!mRUWTaW'Ùl۩/]wW>zY!SS!qi;寛5C r�bCh$"jU ш (udbb) [att<7&,MWe [ c4a.oBS(B1t+L,C6՘2O< T5&p{22`[wLxubAs %^d: ToUk*x OOOXsӚB!B!3 B!BkfXpř=wq t| }}A 08ט,ь%G迖6Tв%La*F>AռEt38?P0d=dPTdt(F17Jge\B5=DqML*77P <ʄ4>*vT+C01L>g[-Y!9e9BvGs.<o|o<$_xݐh8 '[bZ*]0f*`$+'岓hߊ9u!uM'a[YZ.T[aLAIT9Q۔QȦ_TG |h9k8<`ز#h'R1SI5ȾZ5m:a?ƍfտ<C36!B!B^{waB!B}x<o;R [fwV$_%Z#Wihd:WÅ4";Qc; J0NOq"՜b+h8_U}έ1gǜDO,FP FW\/)S_Y6VifX"m?誵=eBSS!dܸ:⸓CTJ('%HJ&F/~ !5F"rb 2` r+0K'zr b�7yq6M̹'*߳@aqܡ"\M(x<ZwOgr߲bwK03W%IJ3zl?1w_s[o'B!BCB!B!^gye>c<-qдCj)B - kd <ѧ]0kv }AqEwFbp" gX>U@Uߢ҉H#u2dyaf춸d/M1V_si!ʭܢ0%˪RZrU@L"Fs|tˆ5s ͢!М2МB!\zgbOTƔ!%d'ʰbː+ʮ1~5۪KSоUdFԖX#^ՒaT%Ԑr' Q  I4K!NGIQz*"TF)[A%XvfCIK0W ||js0дy�݄λa߁)e۷uo驞}!B!B}B!B!ݖ}?xY0;WR웞#!8e(ȗ TAџКȇB\ k+4wإ5zn4ik>7ex\Nz1BݫVy34dX+`f J܋w$7gw(nTʦvzz[V^s=ٽIBsxCs !X=cǿ_ZJFL`W{4JءRCEb1O:Jl*Q7U2k["O $LH0N,_K%+O@L%TѠYCgbqGa�A*XʖK\SovzOrܳ&]I=˧ow~s}i3&!B!BvOhN!B!BƐgxgs?f?-zYzo.AhGPd3 TH09K*0ٹYhBV Aihq==&<sDtL>nEJeB0ڨPbl j..GH!QVU{uݒ5n`6BBhNohN!Io9uxЛRP"tLBum$' VA oaYf"\Tuh>!3h$8! G{oQG3f6T bJ߱Jmfy1)$lw=各٭!`^AΑ"Q!;qY'~hC!B!S!B!1Ϳ}T8떾OTbq2@>bgFeS"5VR,k Зn=dNj|2zf^ ^OG joISsUK"Ս<Qo󉂫 c:lV Fd󭏮Z{96)3aBً9e9BFܸ:⸓K(5%J]1ࠨdۋӪ$�PƣćtJRz!_$yBPq/-UL3 AdsrL3pYVGSf:VrJ=C5_58b�U%}ϕ'x `LShҲ ?xbo+@!B!{C!B!1#OEW.;CUTDVJ\hHCӀȚ Zt6ڄ)ǥSEfRc砷ƙfĜ+ %hPjѣGdq&i>pޥq1d d t4B;YLqUbIs0\%+/y+y8`/{73C4o[\h!%М2МB۹C7`YS)B]%?+1brT[Ka2I|9$ \JUKUyEBR2\b@kt y~Tڨ5L<nCAAE#SwmxZ>J֣Jg:/УL{8ͭ+br4T۷xpf@!B!1!B!BXpG^xʧ>uL]%�E)"!M߽30Uc;D̚i}�F]0h8&5krJ2Dt5ڭPYOk;9DP87O;1԰=j$ 5JUnX㏟=YQkfNt,}=˗pXodNO?knGo67BphNohN!쭜{'_]q!j)' \^C\9Eɝ]�.Q`Q{d򊴬Ddb�7bL50a7EB�,U j)jWջưҽ5R 鶴oNAO%FK-##H_c/dzrNl0KE0r9)WS__wwx̖B!B!JB!B!ˁ g,yǞ4J?;6cHSc esΚQ[ӴB1goĭŜișBcƃc3upg &JaS&BU*)0zo(a(X o)DdzJQGa &3O떬Y B ) )=} u{kJ#o}?T3# a!x%9GipKIƀu@̵$>uFP~r42"`x*-"D,6ǡ,#L,8"ǬkH =gh!=}`ߘ$qRqP/mʤCKX޸^'~hA!B!!B!BƜ7QӮ[ַxBJ(,@og<;9 "[*v@SL8! c(0GϤ f<sI΀[P C=I}sDɻ!*JA#ձ E'-9l60$kPjdqUPA8UY =KL$U^#3;ɟoytٴkOB) ).~w/w@P oj;=%I\ jĊz$pQcJax.AWbVlݜeUřF쫢F㴣, PRtFz!&9g�g=J@^mTickQŚKm@ /$$uytsʆ g?yuݺ?-Mn B!BȘ⿇ B!BG>̅W.;x** 1e=bD^D MA;jrS:m1*R; 1fC |r<&V)9ZT }z`*F{M&A`̈:Z^ߘ3;*(E`aU~Vg)#GhVh>G]6'=SS!{|f_Ɣ@PDEC`oy=f ?r(nAe &p8)"1DpDzF/M�� �IDATVp{qTD(qh ;c2]$W1 [Qe0wm_)%T< 22x%w`o ՝[s۷uM7? B!B3dB!B!ddɟ<S.x֬ !, (�B&uƑÌUSgQ4CKhM*I@奄,O#‘DŽV4(Ã>o^HWD=8{/=6ZDWhFQ?fjQI螻(G4P܅hPxE*$N fɶ֦ln2!М2МBٓ9O{¿_?;0]j ,Lm &J6w2 )`cT9j&4aHs 9 &&ȄrF 0UzӶ:G^aByȃף'رGӗ]-EWZQWsL-mK`<V^/XԶp6I&?RVS__ww|>!B!B,ߖB!B!dg~]8Ʀ&`/A4AqVY I%7J<e*X= >+$p>!XtޑP%wΆC#RTNj98J )o/&d))=U)4E_r1:1#eL4Ba٧y%a2М2МB9?3/aS !:I]`Tb ʸR1N(jDIŋ\*0ôz0Jl uS`ݦBjahY$[֪)F\]%|S6! i^$9EV< 5 >'qM(/zʊƍz叟B!B!{&o!B!Gso9q>TS0$_eu Кi5APX#&)JZ<-gt h|FRD 0os aAr]= @g܃ѭbP2# 3RUL*1{24<O ."m}:z{)t"<M|#^vΦ?en�!!474B4&.?'J)V!?(SJ s_$ۨp$Dkx% A3VAK"M]hکP H %"`q~4p8xW}%uyPb4jlʅWELTK{ LSRpͶeyV1ZchJv�!≟=w]}ZךB!B٣q%B!B!d#Os+<eD TE3Q LщtZ Q6kw2" hy Hoos9D/+(u<<3B"zsIiXE>KW_bϨZKTFjI u(gYñx3$\qiD/ڶ^q fBȘAsxCs !dOa&;</fV2f "DK!D ;ゎ;rb9WeMYmybW$wx] y0Ʉ1~3"!Enp/R8 Nޡy;N^D�շĨa$M,LaV~s>SmApr쾊14rJfso߾o|?zaB!B!oj!B!W>yfxࠒJ4;4UYR�fgz|oA,J.|cfM҂8h$}a5vP%)-4 Ud`4tcDy"1 ]X'JokEX89Ɏ Ľکn VdQVv7{L!qBȸxǏE =>'xz�"!&ѿ/hl5aGqG+*0V74P` %` ǂ3[MT2],\'s>t:zqz$uVMj)h6e%%ub٧\"B,TEQ٥Xjy٦Uy7<dtuw7߾=!B!B4B!B!Y7}1.h*D; %[)S0I6Q8>HF+VGP 4j%}Za$!{]F S'm0Ɵ }"+':$qe8 rKMW'uE\0,[yDHѢ3I=!dpxێ̓|%aC 1BȸcO{YWL762M2?0Hn9}Ac5x\bK:J D8m//e|hˢ:攁T+|/9O*֖cP6fT(WW"oOZ0uw@e|]D' N=}ʨO*}V#7~+LB!B!}!B!ws_~c?PElՠQ79#M5NF$TuL(*k=gM98]% tv8h߉F;z41ˏg0pyŻ@cY);@sMO|KF{$B!g3И+æwϓ"Ehg{ޭqϷ<je 2&М2МBG&.ڵGД*Fb'# P+Hӊ,/wb&;D/ &r@7W%mq`ҰKY\c~L@T7m>TI,md.Q7=z&*ckc՝<dQɭ[n몫7}.#B!BށyA!B!2#Ϙse~"L* |`TjY]b -AO]aL *F4ryÙOOۜl {c�z % sp9ŭn\`ޒX0Vh"S:۱5 jlcڟ#mXsŭ .4 !d7B8sYc׵F*5iduc]بƀR8gxxx?e!d*$/UFc1`+/=5(Ƒhlu;b_ TX+[6)MAEWB)kmaQU:PㅌڠK]SEUIo7#N~Ŏo뾛&;NMO !B!wc^B!B! OѧKg?{vJi*Qd/"TLQmXho-JbY:)7<L]2DEeNGT{8:!+{EB.� 3V Ɣ ۚ륞yLBb�5_&.+._LG 2{ h5TaK1 bv7od»,!.М2МB߿c9`^V(@Bdj&Ä@ D�,f~SJ�c ~1:VLKK1ڊlޢ:EM i5WfP0�R*I#nf1FJdUdAٶ.3VykBXNO_wx\B!B!$8o`!B!B\;O8ŃXIe h<U$Pv \ip%TTZ`nր&kPc$=F=E2ecUX닕7Ҧ0QC״^2+ ?!f"XLj(hk<Í,7Lor("1=gܷ ,!М2МBٝ9~+&xЛH ŬjF,^HYŎ4vk%UV {ԕIDWLЮ6+1_L&qf9jD*x 8pb>82jbYɤ3r|w%F"4kl  L>l RA~*6aydz叟B!B!qS?!B!BH?_o{J1$hݽ12Bp|E8ӔRQӧKZM*tL,}ZC_y+)&yG-,\ 91H!T:CcȕW䦻n",x۠."MDD~7ӄ&.\Gf|tcj[Ye2 !5Bĥ_#qB]ZVfTH STH6Hz d rh`qvWS2pEGy$%צj/�TN19=ae~~l/\=*bbniDIx_+SKkH6LıvsM,[OL>w]ukB!B!'B!B<}Y \vCXdrtzj2/&J�DS+NU` (= Y>E͡vgfҷhX1IGO cώD_];T₠I?9f4xژiq ^�PJj8f`qMI[uqQ&{%6seњ*1wm{dˆ/=[Bk) )ݍO"*wj)n"X"T Lpz÷ 1T%3|F14):>`dqiRm|MҥisKK[js kUVcAUiKk(q&K^7F>B;USWRz>7[>{:0 ?}cXg{Mky_0&B!BþA!B!BEɣO{%laRQ2.*864_2D'S !X;/.Fms hi^XuU lc*$:ISBTo5:Vp[WHJvNL+R,$d^5%vPL{0b,[Yl9ǐmzt~eɄiH!2474Bv/ļ/gٔ誆~(C1H:`> }/D&<Hc:cW{ܵ'JcN bD Z{!a!&du01nrqoM{+w{ЂDE4՜g.MSx^J骨4֜j2Dy ae;=={?г;6"B!B]!B!BȋCg| ǜ8f_$z4j<}v(P1/k(ǒ4vf\+*GȵL;4]\i1onl.!mmAtQ<UV1h>rQ?ѹOԨs,iNJ"~<p^]H2n r!EaX02gZA<yϷ[r6Bȫ) )ךw{ wo}!Fy;|<kpĂ\~_qD)sbf2<zS$h / M"e& fMfbs&R*ӖUB RTX )/RM%<yVHn|K?)ݼqmw]O4#B!BU*B!B!%|c?T`:֍h] G"#@&\4Sf4: X%YM 0ZŌ!'7ǦRz3aj>r9e~ѿ_e�#ӈϮ &` LYcE4MƭeP7 2 hG"F٧ZrC%V!yjr[?[B+ ) )גK^{ǟB:.;7Ĩ_kZؑa@13WW!`׾Es=ΠĠW!R}0ze?4d- jeL ^8_d^�brs:bJ`AךR;h"ls u_aNI]Eg0Z+8&F,<ʟo_}啛c!B!ByМB!B!c<} \I *H $2[x) QjVbѾM~EJc޺x0ZwNf^hqXJP {UHl|Lz<Փd5!{Ra@dڈQҎՀvyʴ0J { .4B+) )ׂt{?MϾj)84U�R>g{uTc}w<ՎńC%B8L$Er"tfƄy Z4T&g91Ȅ �Z^X4jz9Zy%UH5}<f/i%iJ+O߹榉߼cT;eZB!B!W[B!B!: OѧKg?{v ]%[@4*cCITwlg/<ljЙmqPԾh1aB Vp\J]|WցDb4ECJDcȶ5!ͮ;.yOCW{Λ78e5.-NHF}0&M ^ok|KWㄹ!М2МBy5Y޿c9`!?t?JE["w\Ss;~Oqqj>Nl7{W!C{+(I$?xLXzfq]9BŤbHX, A0x~>vwԚ؋b[M#Ш"ʠk@ "ѱV6c^u =f>B!B! !B!Bȇμ=w>iR nߓD(ƃ3 Vit[UKcd($"+#\^Gt̆I׾(cџF v8<LfƝSWygcUXxg>*՜c"V_u(m/+^{߰4$SƛߚO{>B^Yus/'~7|x TJq28 9L2Fl~Ȏ P5q<df1'1߾6;|1z f<bk2لWJu` m*6 ZedIu^uTSbYR%Vz^+IU<kIhyV~o?IB!B!!B!B ͟cX$F_3z:0Kh Nz;:>VחC5+(!8mE>a]F[XC@_t48j?6i-Wց qM^t \Qz;FHrzLIhqdm�6brɭ|saON2@sx)WK^{8TJ0Ɣ,Ag\À&_m!r`)V&hS= M%!e$b8%˵0[4},PZ7}Jj\9 5.w=XmW1-;>hX zE&n0*K7?w_yﯳ!B!B^F-B!B!�y^쐹%dS-)R L(=HC/0 G.LhfIN qMT1mt@ݔ7`Òm7Įо�� �IDAT=!S$90IY'rlWĻۢM'jt%$1BFf+GXNtel"ǪaE@L޻R={Bȯ) )WM|8*ivR"AKݙ#Qp cD`i'68>o eV #y&wL*FLr$p`ѱ-V0Nzk$1rtqLn {xCU)mn5QEWP}f%. r<=j7�!B!Bˊ}B!B! Ow]|fϮT>#Vжë"yXd~PԉV bTZe0&Q( *J36hja(?}I@D(EUQHdAIX9&`a*hSohPi۩ogɄ<!DhNohN!,^y_g϶j ~r +C%K])+Dk>M&֣rS<>rp*4m:* 9 q4`1 `AF.J.]S*ejW^�rr\DqI jV-sUyԢ*<<,0j�kJ9𚫦X;zCx !B!B+B!B!UCg~9M!ExB'GZC'g EI >Y$# SKP={t}1\ф=՝3R+ 2 #'Y7 j}̾tΛV)L ۺ7t^49unZ4/y|%m3!HhNohN!\rs/'CLE8P$_Zk#y5XÊ6Ȗ©$/FvAo"J"5DヱV*_8˜mq 2Z T _FZEmzJJdk߻˜2Z-|i2 <UR5cmo-O`B!B!䕆B!B!\z/}[),*BS@VπS&jAl%r!$IP錮п(2 2ĖD06J*m3艂ExaLh<33Mgu1fz6jsFY�)#XJ޾BSއh2Z a6tx[k4B.BsxCs !<pQGR0֣>WRS".zflU'_?>`FF/P&<�4ĉj;닗J5vw g"ЫlZ� M jsyR1=Iy~ PcZAŨϖ!<Գ*+$wD\(+ dr^vﯳ B!B!W B!B!5أΘs+:1,ZQ%XHp4+hq "Tmu9QebYѩlbF&#*kSALˈ$G'\t-)ԳG?FZ Ա$m{u .4#]BȯeM|8}1%"Z0GH`.L8wmݍ/H`&=DT$jxFLb8/+9'4S5":N 5@S=uiqF¯A| iAF/x(c8/�qr,^�@Ļ-ADz$uQT@LB9 Rm$E $_�|g^sӍk\ujz̋B!B!ľ5!B!By YtEǾ/ك}Rz) ]"bשfjq{.!|P5iMdYGr[C*cy{r O\A\%R L^[FT f"CV%ڵs=vfWV18kЄ`21řN||+K& !dhNohN!/s~|٬^7;Ɓ)%[o6҃1Ur{~D"˜+)s~ NAAtcR �XHbɀIJ)*NֱmKgNjM:A=�ꝥKf 0g;nlQ UhhQFo/ƬVEu}`w|&!B!Bk6B!B!3o>c/iT֭"6]p'I!:r7VHEE\A#SZئ&vԚ>GDq>e *u=f<1S3 8`FQHv}jFiL˂H[}mpk{RT#~۞o^{7|vC ]BȋcϘ{͹{xJ8VU-D /9“-;o3<ՐW($huU|4:KkLT'3SUĚ1XĘZ~a5bP)֘6ؤƔə e?„bv!ޞF"A O|C٘7޲zيB!B!weB!B!]KzŠj&W-5)|iѠJ7'p}DʓkB'ff164:̱μ16Y;P|TECMTkRb_?^Z sjy+ J(M1ush17C^b&tŘ(6{s0Fg?^vؼM!494Bv_GR>Fb dKDm[gX`k7w{0?nu=q2ր1<ZaTOP*78L^,Ja.regIUJ5Ⱦ640HqP*hI^1t,+fX1e̒ u0q)aO&nW^!B!Bk}B!B!q̑9gUW|a"KKOha5-,Pb"8{,! Q:h;j t`<mDj!<5X!:HHW%d Yw\յmf �)2F8}G=>ՔLzk @۱ݭgĶ~lݽu !tМ2МB?{&pF iFV,:6y;v&kNe k Ah р/)`c%nYIQs|6x5ʜ]<$Gdɂ0:zτ 5i|*@ �ˁyI= "vR7"{lE̢yEW=O߹>j*B!B!5!B!Bnɩ\ti\t0+Dep(As+F2lD1Q6rx| |ZzfSt'Ǭ;18#B6iDguDo`Pﺺ0:Ŝ}WUw^Is�z,C㋓7A&MY_> U'BvUb9en|%,!dBH~b~3!__‡s=ZV!+&qjęJW#AU\Ğ*46NkPj5jzƹ%Xi"9近1fmSjJ8ּ�{(�C>e/c.QUUd ėx5{tիsm ӇB!B!dwþ B!B9̿9M4) L*`؉ CkKW݊c޹趰XlMJ51{m-"�+*(ͧVM %;5"HR׋UTր I]k;5hpj9$=F uܘ0 )摶&|>InGE[O'/56SS!S=c|1FG?s�ށ VOɕSo뾪'}F zdqabhTSPHn ~'m 1CcVAQ#c\(sbbTK $r1fF=9YDr5AUmB1wWSm&ʿ ;7n+W?0cB!B!%!B!B͹삿_̟C|M_K"4(xΫL!U9Ԩ&#Yi+!PY68)4e@ ژNAѫCҍZ2_ zP֠h CmH-\SQG-XQFa j- p*50_wejEB$1ꤐ[]sktC٫9e9|?wB8.pG';J]e[J{rW%`3<)Ԙ!HM&?ޓh_֪cU:d8,/ CH."KX7.gc5LFz\C1@&Pn\sid$噮r\a((R ,~2e˭_^vﯓ,B!B!1Q!B!B#99{ء**^cVi +moFU iLGa218|!2ʘQӫ"EB(l{Vm (Vd<0JE3Պs+2 ) |j6)SKFC٧o}u$}o˵h0 M-μQ%[\hG٫9e92?‡cTLM`S">U4T#姹t(<SJ7=r%kױKL<vT\JX312c !gƌb&C7:eӾ/}rY}f,i:I583Uy>3O߹榉}KMMOB!B![B!B!S.:\|ϞM*}dLUiCQgVn 7+~Z3$;c\uuƅBL%cU:ZDP@3W�9&@p.6)TSYFun 5TeL{-4:ܮ}cUIË^Let_7}/ܳd!dφBn/s~b٬^7;x\1990A=!XBW=RJƌ=q9/g0-@Gp_׌6N D*^?c7Y1xlQ^K&?/>W6КSLc^绘RW3tS1Zc(ƪƖ42g^;jVMOOO}}]w? B!B!5!B!B8s9l1Ea�p)P^Ȭz8 R7叺p(S I1:)"$u,71i~擠<\R !TM>SKsQ\>AVNi×Ǝ$i$qEd4BT`Nl{#n솞n=SS;93^WL7B8lM5(P~q CXR�GJav4#N~@8A<b2|=ߙ ]c`%f@3J 2fqT2W/sM3B;,K|6BVhɥkj TʺhҖ�QZjWuΣ7޺_73B!B! !B!Bx/~rXEEwtE'[ f}2(QZѢ]Q}I]eXzl0c0(s#Bj`)LOG~OB)O8TwPlH3 SZ3D t=ЛR"}®bڀɭxFJ^ѯ6GW<p9c'YB ) )}|?OUJ _i'qvf^FgtgN|t0BQEKX W}[c0@URH6v_{L!zp|_<cJ2Wl1R+7MS׾>KhŠ:Xs+h3sV=1u˭_MFB!B!+m!B!Bۏ<c =4ƸE:') ,hEBSf Pج)F@B4EShtL^U]xjMF<qD}Q2Elc BHdSD>{sR =ɥE2\xz炾V|[[ !{474p?y|8}~-pLݜA<J'&PpI4˿4G?_ _M(qM5駐Ӷ:Ϩ] -gM&mR![Pa(.YiR|X}1`ƛA9\sӊ5P+٠3LLkm[V)Ir\cF>?h( P qճ=knXj̽$B!BwWxB!B!{cK.!* _$%ɫ{cU T*$ahDBjBzpF%maV !a*䵣DJwyָң%,*B.j-\\<+j8~4_z9H"dsCZ{>Sn`FP;{jm|%1!dB|/,߼n_R̂A?j0B}[pW?E qƍǫV`~^:oDjT bV҄JGmW]k%* *�Ƃha Ɯ%FɦY-ƤIVb!c,SiDg06z X,2Ɣ�7Ebz9LX5HƔUSSlX>gaB!B!)8N!BX}&%4vLUVPDIIxQAf"rn&4`;aCC i`FbP37Bh*#B;[}Z|QEg^{u[!BΥn]pw@OY5c 䖖Y42Vlb  m-rJ^VĒZ/EgV~: H+:T6Wg>e-ZT1RƹV>G9YFL;r"6S+Ym)4f5?cn'ݰMn/!dC9eaC9wWw~7V]e(⛈ZDa8{4z (}4})Z.C56r{H?Tϋw-u\YI?zpD$8#ʘMS<4Ȝ~܋nHNTPUܾ* `3SsDU BT{_k!B!BF- !B!B͙'|co竨/ (m EKI9JN9Q$+. [;KHALE# M8D;(J8UPy0a୻x_MRRIFɴ ->6OK%$;uk;q[BIk-am^R̖>wTKa�� �IDATǎqIYPNYPN!d3nԛ~mEX4&>_c>9W HRrUO!JPd*}c@S{QÃm9}_wQ`PFb; /I<g 8L}JOr)870?e~aCr嵫ݷ̺B!B!o[!B!Bv#_%K$Z8xAqOq> mNrRIH=4[6)yFyby$Kd$f])~F͕$άv>?IʕdT+)$Ʌ_1-OM!qĬxBݯJ2gH�UHK52o^R{m7|'B$S6Sٹ?󧇽%u͋)>R&+@["~Pj5'5OJ,MVM^4m#6a`>Uu2 sk_ypM)I[% &;'bz_F FЋꧽ\D kۋ2H<mA*V>hr<Ij/ >@'Ⱥe7ͳsR!B!k1- !B!BȮt,?_E)íd2$?m7)x5+"iEL'c T@4*xd%Ԏvshrpj'ly`l*(059-A܀<A[} 1Jԕno].[r*fn;|V1y0N2m!n -h47_3_=2wRBȂr†r !;>=>{ϗlRłQgl;6ޔT%gp<aLT 1Oq D4,A mIbiwh(^lQ--Ϯ"Nz%qz7+Jmog&E a+iR j*yb*hmvs/XuY7777{뮹ko/qB!B!ӿY!B!BE[s;.g9\%V(r mCi$YL.G gSΝLe2uIp Q+6]j`eݰb ۭdrE']^R=8p+H*TLٕKOo`Dr="pñ.(2hIMk1ܞiq䰇|_^n%NفBfuO\^ϼAzF+@L6ҫ"N�pq4 Qz)F(b_lm@uSxՌʖˌTllTROЙ;^0ULEMI~ɵbEҏ~4 T~Ft?e`jǃ%ǖ MpA&x>x([G159W;ry?qM!B!+"B!Bم9o׽�9&QbH$h{j9ZI'ch!:~:P omޏO)9)-!LKXG4$آ)rH"^.t׮3ΛW�ǧyqL͵ +KCrpN]fRc2U}>'%?rn߽w#n/!dr†r ! ϮSozK)H{HJSDV2(9l<$5r2pz ѺP:Nȝ1ڻ^{!C9\ ,Ɗ}oiǨ"-[I(/XVPq=Ç+PR/ڮ߹}J~OouB!B!o]!B!Bvq{%Y&UTPƽVu8.ZOJAB>X7CBQi:kR79G׭|V-֗J]GTP1lH0L%)5λYW݋i7\ _0D.mq~"Ŋ)b(}0"̴wo톏_d׌B9eaC9_?=m81,Ea+`AaB1(dhG}YjrvIFqnǏ@V9a )VRQNog՜Vtp '#W1}F66bf- Q\ғ[ rOϋ"6C\[ׁܳϽQTw1ޏR'n럾ƍ_<;B!B!RB!B!2t:K*oVtP=]LRIr>JRb@ڑ}=�+߶! Vǝ4Ln[,uQڼ-QAEWi%=r+BQS_=Ǥ4mpTRvs zKNW!6Ym9,cIfJUF7ٝ$FO/~3ןrkK᠜BÇzే{%)-&6/(`ӓ҄~NKMk#]Tdy\E}\>98oS:lӁ� 485Om^EFUYLQ ?] z"̴?N~HJXom\=ҡqu#dSqŔw᪹M뮹kl|q{$B!BߏB!B!x[;.n8J6֯rJƥe3pg.MvrI\a֯d:ۙd2GY%AI=Wt]!b [U@c$Q$wYmn2xM_om6 m2WQpHG9Դ)CbZLHSHyj/K6) )+>O>q٫"yxhO'&"(-kǷ#HVT HI3mDM>q*4(HIh8A&DָGmz?LcZw;խ3"f~(!BiGJ| &P}Nb}ѵ3/$fĕRwƬ>u?wӦ+|<O\ׄB!B!dB !B!BI> {Rd$uEnd'UlMY؎$$L XbWҵBK%Ҹ$dsZ ) |&|65M*VŇN"ll=r'-/9`I&xy#Jiӹ3-j+KN*?,B'3b-Q^b}o(&dr†r !;6]z>/^F2lBk!&}~[5 _A6E6qKimb@NU^2[fB1dv郆^D5w}g "Xt߿e|1/{U։޷w6N'{bݟ !VA/j>̳ͅsٗPu7/"g[_Y}wqV!B!BT##B!B!eo<7?xovIJf$&k5ٖu Ct G<R%aJ&Iu=/ Pp<.E9GxLI|r[]0]2\J*` .%]%.bv\&ǥ@ ,|֔NƠب{Q>Hn<|n8s튓]') )I$RzQHOfh IJ%ȉ U+"UIFȦH}G򾑪tZ:g\y mSgs{@^7"q(x}vm.PE~{nVK&;W'<'J <{Z9E+ș['X93\Y@O&E?Eu[xu7^z鍷|iB!B!!B!B!L:uّ~/Z$Y *fH:f%\ة(I@;WB!ʶԵ4|V%OKR#TD&EW(1po9Oە!.NKR $mp`׀$j@P=~ 6P&_Թ91S5Sg }S)) )X|x+=w"y)JV"HZt]AJL#\Gʟ "m} 8}jQ~2Lkohcjw2/Iá TGmN.LUdv4✞~Ҋ@s+H L^57nt5_E>K%!B!B&B!B!l/5Ǽ-~HuJ; 2}AlWfiM$J~Yw]46rN.<rzt2OVBaFcJ)P#ՑGJFR+zyCͯ; sE*\sL/韋ji_Zᤍ<X½IB4 ~ɧ/8ndoGy!BȎ!KW}Qg_o)lm0a% r4ѡEpNS}1%/J$z4JnqJ?d#AF̩1 &@tӍ<譡=w?7E1WTO{}?՜7Ndʄ/m\׳^7_sB!B!gjB!B!<s>~ҷ>x^jW#_fNTRGgWӏsXId,9ǭ&SHӄ/Y09\])D *flE ^9bDaAJ2.ᪿ 澙M d E,I]yڗ(d<&xL[ԇŖ>cGu߆G愐) )\?߶<gY)> zlȬ-WĿkHU^ @(T W9E01pݵ!*Ӧ/;״:oq>܍Q0B'ꛊEnPMcoBA{ ['3(4 ]"X{ID}qIijwkMnU}B!B!oh!B!Bȯ[߸r1G|/YdRE%J ]| e1\Q(LV'QB $ UD%՝Be/ +vQ\TAcUX%5 B(P:ЍgV(2'᪢S\JWsv=XWy@q^Im<wm:a,yPk"y{m7vBG(,l(??Rv"K1 $4AMN>'q*M@ a:E!raӶlUYEWYUW\ e4FVA0]QRhau\Qߦ+6==X Tl~YՂŹ I#'~u>}[yv^ !B!Bȳ%B!B!<S㮲O.R̍ sI墉he/D)yUs 4+afM' %嫪-PM"qS0ڱ|bU݈)IwYvOnUVl—h@#}p#U0W0,?$sVNvWNF>npF.^B7(,l(sx=w_R"-Uv[cIm[V/U/-&wQrIc "r "IƊj x0oxVqC_Z|IensUϾb5ΛQ:OLץ^N |/gs}CaIa2,nn4ݴi_ᢍ[;B!B!z |UC!B!B-en!IVᚬ$^"?'E"5 _5ŌOE ^3AB=DI&]es:HW9vp*HlbwAy; ԘZYr1Tg๫ǘՐwAMܳZպ0xH }3zj#_x _M!9r†r !/,]IG}٫zsK O}u WM`1⸑4"ZD*$sߪJ :܄`I;6lƸN>1Ӏqhay-FH`aeW&5KX/@W,>(֧vۻO믿>,ϤZ�A~u%=VrɦbKk3#kq^hKaٰq/s$B!B!ώB!B!qI7׽q,n6"jMV kPq_emQIG}e&@bg ,O[t}Vc(yqbW5}uz`>Z"r̶DR9%`dJ2 'ׁȫB?A6+dWg"Ͻ Ea_y[܆3 Ƅ ) )09i5^ĭGa]@1#Q*QT#a (K >RcQy2F�b<kD9|Uڳ L76ds\FAY$xh ңrKTfCENGz*UL/Ejq|g4+-gR=~י;] m‰O/9o>ye B!B!<'DB!B!瘷8⓫%Kj+|%nR&KPd%5<d bLIC"DH+b"VWŜbd1)E(Z&Nݗ`d\DrO$F f2LG74KlcW$Ωi0y1yP7L4+"g=sn˵#<'PNYPN!?;RJd|[TK>`P}_u !?S +D*\|&#UE}RFjaF|Ǯ/ߏ7EJAk GǞEϪ sNJ?*OT9%(P"x.HY,>338.sAE҃qFκǟ|u.t-_<;G/B!B!$NB!B!</U޳3}"ɲd~L`y.X5VjrbP(cܷrߧLUKjUoW#y{<TW7&qEեp'#ŏ!:Ԣ1\zɍSLb"^_4>^ײ*gho~|S.sBS6Sy~8U??o_h,` hc9yć9I(RO\ed E*`L Nk羲HN`[N ӭݱq!M7?IC|}?TMfE{}Ki@&E=vl "^_*usM\]tYDB!B! B!B!<ٟ\w㺴oL$X2aR/H |XEMB픀ҟ3SR kΙ%ELW2+j'05zIl.wg?O̮AJr]9a6a$է}bZ} qgm dLKB Mm8Mrarc+ h=$<c3mox@DŽg唅 B[/]Gsz>97O:�L^]QE&%; &kTA1Q#^(}aMNAuQ{9uX΄j #}sUQ#Ǐt ;VFL{u-87"~Kc8E|Vxk u2~yxggϽCW+-e^_Mܿy&B!B!�� �IDATPB!B!⬓s~1t~PM fbx&cm%T7JƵ]1&M~.&wm:X8l,:1K 8Aޜirmg;цs`VD98\!H MadWdq*eS_{u&^{grqwݻK),BsǚӾu_rH)6$ڎ&m8"t"E)RVo|m}W+u[!eߍ*2s\ߦu9|enG0VD ozI>??R/jqSEI//Rh,Pzu?ٖ^wy߻Yw!B!BNB!B!o\G^Z$%YM*QQ˔lbPMX3dQՔ*^)REڹIjky9gƁE7%Ôܬ>aMY:ք(I07ߖ\g0ARq $(6'}aLGжY94%6Ƌ(*Ƞɔ]ffn+=Cn(,l(d~ǜR7UYt":^0D2U,}Fx xVh1&*M BD)b>{AXaEK6mRخoeJ *ꝠU`q2\w197!%x^@+V4.J{)Gp_勛gB!B!XbB!B!jّO;mJKoDTj"Jq6o D_aSYv>ˮke rqqx! VV_j~i!d+j 䂫N6#3 UI\_f+AmAqsB4ZI2Քϡв l12Ok ,OFsO௯?Bt(,l(s<xޞ/y"YjqS0{zJœ4w(R_`T`;p J РVWmsRCV1VtWYNvTd٪+6=ײ1dH\GNb'Ď~'w6mv~_vRKL}ySS!Sн,U}¿7#ɪKbfggosE7?8!B!B!DK!B!B^DN8z1\zq:IEh<$!|3-%$FJP'Il*YI)j%vpKJRt*I[1̽(h%mҮG'3}~0۽(JSP2A@wmSNꉖ_<Lv.:}g|j#_傓[]cB S6Sy,_rufnJi!*v.J *Tqs_o dN5He3db_GEr?nxF`9URURq2ѐIGIAU;L]E6W1R 9TW4vQOp_D]TǥW}'iP[u?wܹg_Cn!B!Byq9B!B!?'|^E**&gK68$NK%% :(d;𲯦bVMpQ)̘^W1&1&7K:jD:O]͸H3ZOp>̘̊f/S"~60qB)"K;N&SE|?iղ54FK3! yC3[78޻K0PNYPN!qo^>o[."oxBI2m>ۗKmw uVArz^o[}9V@Iys)75Yʷw֧3'6\W-8()Rm=x߽Ի 6w‘z]pϢDtu?}xW|}GgB!B!_e !B!B~o<j1G|r+/Y2B&d#%EOLVuzۉLrJW J]%,Ɠd gU4K'J(S]KC5ܣ\$| ]$+#^A܇oᣆdNd>Lkg~>' ! ) )lgُNcB<$j"5i S%Ҫ`_|5HmD9 R E}/j|M~H"X#SU9E99 v:JےK0aEms$RnƲ9]cD&;{!0(p{{$r8tҋXj"xGp7O=B!B!l1B!B!#:u{9=^h$YQuD"JTO r],R5#CI(Lj*AIT\$ms\֙Z1o甐H@jR|5eTtϓv kѹ;5>-¢ L#4I@,yr[HI=z-5+;Ov/쫧\:'L>QNYPN!d:U??{,zŸZJ1[`O.6 b\K d(ٵ/]B�a-֎"rH-ehGe ު1p-h7Qp2Dct_nJRsm|Mt9&'UK)5cZ0Gר<g@9'EZ2pR;~ "~$?>٧7X/}›>K7&B!B!|D!B!BvTN8z1\zR7yIEtQjr$VU$J%ePB臨+f趴 RYK.]e*Į2ES"Z̊ ]dnTzL&:I_ wrW7wgQX_yH\PUZ̃ٙ[*3O>/rvѭoBvq(,l(sҕ{|Թz%V(gd )'V)U&ĺ\7}*>k@/їQI9aq N%p;~bԣ[ܟ$׀=r_Ә.5i_ GFU 7Ey6Z 2Wpd-eF2<CYD'xSCuU,(Y6mZsݹW>9 !B!BȎG!B!B١O'|d]aVt"n.lm&LVg}zn2:.9Owrve%H�Ud~W'3\BC$J%glΔN>%[$S]TMnMraeXWۆvThM%] z[~+o<hDPNYPN!ijfշ.|>/quZs BK&X!Č6㿾hKJۊT)VF+¸*%ڴA:@Ů.'d%$׮SL޳-9:R9ECK$vXY}68WZ1@mUļjeFMOj+B>R-Y7B!B!d{H!B!Bqz+/Y"YVpE$6QhRBBo*ANW0-3XB%N9}^ύ+GˊH)ȿs\6;8ښDfs]X$D2TQc\MS\r$x]t7h. Q !ڞgm톏=1! S6Si|5'1I]ISH J0nNJ*ZfnB (J6)M-㿾&Xa7uGPQCC3 5V.iURr=TZ]fJ*%nlKnJGbx\ɀkb'?}tЄ5-TwyoT�пIίqdsme'~أWo䒯ͳsR!B!BUB!B!yЩˎ\~i{WJ*.Ǿq^ loynX1&%TbS.Yl5Q*pZ,]McUtL/Ar:J9vs|0f%UVDs$uEIh>IYLP^L" FCGĿ.kg'LjEVK8Wzʙ٧/\pWO ]) )?|ة|I7{crtZ lE *5hiB$b7B5WϺF rOp]UW1U[NHMԤs=&<vDys⸔b )H+Ȩ [W=B ^.9¢D}j+.4e5j3[4`Qʲ~4i5|޼_ B!B! ;*B!B!�95S%ɊE+ޢQ\~p:%}vj; &63 Tn&6L+2M68"p`]$t'{}( H*XD +/l.WUIn'eLTĞ|8߇g6~?_r?i?FL5}:'gU/o<MnHPNYPN!2ps/^GDތT4ƟFq(0s?Ҟ`<<B!T1�GU"ʸSܮU}D(A6oEXqר?� ڪy1זDZ* PϑkWI{@ʪ{+gNɶ?si<uLK~Z0Ήzdvp\{Ε<c7B!B!da1$B!B! tg@**m1XlotŔvl2qehx\&d$ATW@\d4-LOrS5H=SV(5HW H<@pDJ w@N &}Vc  +GF1,>Q_Ium":'٨B^GE%(̃37q]HpZBvZ(,l(]W}}XJXIİbEl = %iUg# ɋIsT%wj4Jn&ʜ(?j;7,oaT@XhvN&ME fU=WN}TݬYQꤙ#̽UϷlsݷ̺%B!B! )B!B!;!<⓫_xɒyIED* W+F``ɺX J&I͵$ZP+g.Vk.U4 ^jR(/m<Q5g0Ik9^Qצ,I]9OQ"=Mt#zL]Q }$ob"h=F%yg_uUwoٴጵ>] !;)S6SȮǏ_sa뺜mdeŐ&IB 4Zn.c2_q<(.%�۸nUulȹ�9=@OO&HNBD <6#"RڭJ/F@%cgU]@V WU7;(B'{ \r_B!B!K!B!B49e]~i{WAJrSK^Dd唔0 R-<фL3K}RXs*rD-odyUBN`Pҗ"y#5qXU]$WM+"G׏KU,؞:iUM[G2GꍒNz1H[\ X dOl3٧߾pןr!;S6SȮzq+N]K^H$j)Q6[oH[%d%h!t,>?)C A9@$&\ IR(b^f%|x2iDX7֐?-8bBO2E,$J'5Ŝ~Vr~Pצ/\V }%5d}oY7777i5|qE7o}E !B!BvF7B!B!dģR7B�t&%s˹*i^}ӧH\ yItuɘP3Zh]5X?dU7@p9kNlZfe"H"4 jyqmK\B4S-Y"|F⎜vVԫv PuOԜ!U\L3c3oSnuAN唅 sҕ{|Թzk$oζI/?)Ve?XJn1 [ <C7TNQZ &b"Pĩ}Gʨu4iEZ$\E<_ ټ-$+9H 1N+J6}~ +McHI^]p@�j͝?UP$Ɗ+Q"پkh۴iu^?vC!B!Bvo. !B!B'7,9,%k1^B &7%Ȋ}~\lU ΣޒԪ\ѪqX)#CD 6-a9CFZs+D[:5,y6s1RIqbQ!)z[ߦd^Qt+d2Qژ$<sfŖ{F.Mv:(,l(W}}-Reb% Ľ-< $O_^TAU~ⳍAd;eQ�Q*1:#8RJ(fY {h_)ގFO-'U$e,!n+XAv],J9H 9A>^O?߼=w2kL3!B!BY`!B!B~o\CG^o-YDV%Ta;-"}2י&<DL'gQcĖѕEp\1LUq`mgcՆq}r+PKgL>wIoŞWk޶b7ݥWsSscb!<$ebh]یo~WR{m7ܵBvF>~'&:IybBRCyl~ÑaY #V6!I>*m uhR˨3':Njs�*J'mHYR lQՖ+3S> KD!-D4] ݪނQ}ISŠI�hQo\ēm]w/-B!B!]%B!B!;;Gj{>=|+rN 'lR 0Ujiw$@g(U-E0鰍mE&Z&mdۮSK-Mi'~Q9nǮL}ǘeV5&lbRFiC(ClFX5i>3777 \: dB9eaC9LN{ױtEȒ9Et VR|1ݮgd#kdA.1MZ<TD1+4o=GέzJ.Lڡ?m繹-x2)EZ 6Z[ArTiS$i-4#|GL!쪛!z#Dm &$~sGs߸}5_p[g@B!B!]IB!B!+qkyײc?~C$%-:W?E/ )rY48ָXsI*ZZSDLYj]<0oLi 1 Xq$ I^X$Tlw Ҵ+IU �� �IDATzӈ3Qۋ0b0m \E%LbjJiWOm}dO7E d@9eaC9 ?_kO yww cYWOtL;1AFV%d]c]Zj(HR1(J P*o8aŅt>{1)a[DrJ"JT!$^YEY7=,cpfn)#IAk?Sbޭ;Kn!}wܹڳ>LB!B!]@B!B!]Otox;++1c=eބysZT2L_oӫHcsJ"AJ+8%ޗL߶6Ζ4s0 (hac%5I(|6{ÌNb54ۣ2>'L( $͵i]oK֔w%2_I-\ӏ4YPNYPN! 5~}yȾnǛFN#Š}n盌}OJ谲I+t̘@(qnc+ضu0#u9fZJPn0ѫu]Nvlvv@=sh$K;Fx_*ғ+o=Tj_N:w oF+>+ryw;],!B!B٥WmB!B!dWb7\#VK$ܥs@a4K,=H=,:RVb!fli;nW q]0`ΓG+SjsV[)? -Mb[4vcY%YWW;af;KSZ.$@酪Q;*<vj5v&5Es?oጵN唅 Pלx~8QR7+~_]D":+ !Iǎ%1GJY/bil+Ol>Va ւ }Y fzQ IzQWmzPL)W+۸Mg/X-y@N:͆)Ȟf-,۠[=yٖ삲L~[mjx6?=B!B!}G!B!Bvq޳eG-?=w_(gYQf%u.Yo=PUE H-,.WlvryԶ~|OA":_VPt1w+d/Dw^ԎےԢn[^z$./N<'~ʴKM3B(#Z|ps2cF/WO,8) )dqU{䥋D*hGL5jb6Mk~i7C/D24!ixqdGE/ZMsP }U6V{") aĐЧTkPd"$Vg{R�*Fߞ;f *Clg;3c}Ԝd] 砂5} mhXk/y,G!B!B2J!B!BvyN<z1-;C))5IY&\` -%\}WU#+w�9g }4VZ+f8JWg-9V2] .V<'5:aRQ喠/+?a⹶ǛDXBWLCj8J<y^ʃ�R(\J::VKi9%y!&Aj럗'5?/& ) )dpңs.+XٶɸLUbD[0)cqc%[XQkdQ$Jܐjk5j/?;wO% l66XȸzآID^J)6fǴMR0Szc67'-Lku{Lp,ٵ}<̋)?;\{DB!B!BB!B!bI7@I*rJB/ &Z_g$OZ&QOtuMD0W-Am2f URٷꆸU͘Qa$W9&Mfi۷K׉18^/+$xdpfۣeQII=6Zؙypf=Wxww#&;,S6SB`ͩߺp}Gd_]%‹5?`UU FjHMٶ$ jZfeIQ(4?F9gѢEG]46u ^]Np*t֓㞬%phVzRF0DF.q~N**h_r:a8u1zgȴ.wz柫Ϸuݻ7κ !B!B)Cq"!B!BZ#>/Y"zI%bՖ&@%lR@zhV@#\*ReB3j#E3+x:4 <xVVHOl_,zH" CW1'88mP$ŌqzonK۽#$gm.}fuIt=hm7~Ŋ]�PNYPN!;2'&:]-@nŃ]J"R5Z5?-WJm7MhSس977-!poe2M}6w60;b;LUV~P*`<+`Lth *֧iϥt|k_JDgKRkգ^}%p~2;G/B!B!Lg[?B!B!BB<e+q||%ɽR@j5iLHK(IRY)d~K픈"EPv&BNbRv_~c fx@z*̂U T?s7%NrItghω:KMP!E2̙K@n:aDI�q&m2) afn4 >}G/s"B9eaC9bՁ^K_6/!ZvRF.j1EEt!=ATH*_dqAQ@#T'JՔRCVr%Q"QjBqQlœ֏'9L g}.FBiE UJjT<Qh 47ei@ZL(Vl.ۍpHrhnvw\}6\|1B!B!BiD6J!B!B69+>e~Nd{6A' $X% a4ɉVjb!$iV$ג v2&\PVUn`S؝RW*妙Bwx>o88}hN s+}U@q \U,۷J]Q7>d'\ś\GPNYPN!;˗)+[ůg"dD2r7!T ǡ*%NzHcD_Mf'XDŁi -JH(k$ &GI(iersVB3n*@dJ%!)]߲GRqx�xn۟~kp9W>LB!B!2 %B!B!d;I9yIdJb•}%QT>To- 6Nd8 $VU XxԤ0WD>4ӰwfJbĬ@.WVv oĊ1ZN1lC(jpSZ]߯:EB^{I%IטM$Ѷ̃33 ƄPNYPN!; kO%,%OG|G51R$*CCWWTiK|q i 1c[e6+@`¬ xb(qg2oϝaPLqOM̓+ ^DzH3be/Cg8 =)6s#u(mۄ6ت(5v3}‰ں+2y._s9|ѐ !B!B?oB!B!M+{%KD&UTL2MT¶ɰj Yj* ԭQ'FCwoWÈ%vdbY/. U{"Nee}LDtϐ=ԽuIi3LL�%z8;q<V'f|*T~N_{ d@PNYPN!/6g}x퉇͇#fDqF6QM_VkT$wͷeG9h^HVUE %?3-((BWEw\/ȋHCP]@)EQc^`Ix߳M9)Wݤ`TFsjGGi7VF(zGw?[Vj'{o\rnOfB!B!_,!B!B!&]jg TRcS3&av IH%!V̱Zi:ja|F]إ9ĞJ\z^T% l1 J/wkߋP_PE=0RJkUfSvfjYlQ@W+dwm$23ϭ\I$9r†r y8U~ݫꥻeYao^;ƄJ bLO#NbEMR~o 89-*`14$XR`N1> 1*uRhf?WJmc;]OEͶ8|ȵwإQmˡc %zLT_;7;;;]ů_tcO5 B!B!⿆"B!B!Yrk9-7JRZ1N* w:U!q-Oad>k_`dܷdYe ~l&vHm^m[3oXE%Um|8zm?:C l6lJh9Ogq`S) _m/2Ӏ3Ktmp3Ocx _Mnp<OPNYPN!/4,=jyW3_)O?) (rJ"`0x2b+EnN}VQS"ᡜ1e[Y(-&\:7FFl}jfM꽪@׭l\ksh`!E3 7ͻD9A;nwՓnmu^?nB!B!LjB!B!g'}oZZ N'XD|v%/5@Rx-.(ɓ6^E9*@I*sɏ綪4nU_b" qG7h)Jl2LmU]``%DQLLesj* *HB? \Qj썵\d{wCrx3n0<PNYPN!/$kKm-#D!m☨ !zIH-&DDL"�]TZQft> Hu VHihb=!p nJX)%MUU跕 Q<K j?O 2/yr~l:\SJ*Jtls=g�!B!By_{B!B!ܱZ|Wr%KDd4"J WP:OJI):VPI{QW6ڱ$[j=w8OQڠDRh?n\WK 7,BjܶJ{|*׈RIHY9+IrJ3ǡx =ഄ<gPNYPN!/g]:U-~j*FnQ3l@[?uЧa$,?Ƞ \ /LOMΤ*S=%Z56R>J½aEjXD1p|48JL+)Ϟ[%[TVԱD0f3�@O +O>ģ^}/mB!B!K(!B!B!1GjQ~|H^A2зTU:Vfs(dݒI&MĺJcVb)V*B1VS p}꠬R%ꕪ;c ?`ڭ|@H.u2 'Mg2uDP"+4 o09F٧_鯞r;!S6S+Vw/zRzJ -q�+PCK]PH>e*@d~W66_Y到4*u`61DhmSQ: CR(CĴ|(gS'".QNr>==v *>t3Ө\HTqO_)e4Ʀ/'~A!B!BsNB!B!BGNzc~qͯH`E2\Z@h*x %@`[KP,V<?nb㚜aE抙?4 H*odԞhhمK=Ɏ߮:"gNg'\0<&VViqcu-N*I}L$ۙ'Go<~&אg唅 |zk_kEOJ,R06i3H.8+x%i-H_+I0V<&�e/!Ci,Q@:t?k+;ZHq Z>ImsUU`TdܪJ*ExP4џUG Y-%ۃ[W]Ђo5s#f7 BJkpw?]?;=!B!B!+B!B!B^9;gq@YaZRqU &878 -J _KJӫ_KM.۹T&IµT&`hegL>wԢUFQQ$CL"dS[فgP'S HhV׏GGI|ZԌKF8 }߰frߕ7rg\;B~ (,l(皵KoSJ)ߧ8UPPĆr.-*ұL1b%ol׬V!FڈUެb SL, ϫIhrgTLv"J2k43cwOcZWޘYdVZtϷܿ溳?q=g݉ !B!ByWJB!B!BQ?|{dǘ\կ1L录,5prT|VX@%+BW@]ҩz^6ڪ/Ot6A. #CX&Sb0q#:Kƒ̊"JT<D59N( dd/7ukK3cN[{ d<C(,l(犳[{a^\>1g~BH7«؟!?bV~!׾bZPnNIDm!E $>sf[˵%<VCuߟtX >˹l*2#%<@ rK',>*lWce{(m@MrO> _>9z)B!B!g9 !B!ByX<x`( oo3Ģ`8'xJI_3ֶ&/ ``;:_W@C')P9_:n :cB䳿ah c4/7jָ'SLC+.QT|m%ԭ2&ZANs/\CB) )rCW/{o*) {FtideNBv\4m[KqB29rQrA9%:ُKdHO3J@j@}Up B #CͼVLA\ #Bhl�� �IDATdY۶T&0WJ@j͎.ǘR7K9f'!B!B!/ ^B!B!(|W|N9\}шVS^Y}6Γ}ʪtxPn׭v5m=k`ف:/Mb̓@ 1g1{c\X;w[;q m0b7zj>5DNx̩SV[\'Iɝ_8~_=5Wnx!ۀr†r u9dQ{־jkDJ) QAt̪Yu8/Ar){=;>Ro93Q1J'!hRG=sʐ5nx|F>f"58mwDhVRqaPEލ8F*`R%<ByϹ}N<N'?jbdk]B!B!LB!B!s?"+�R/3Wcg.a_yRsWUE/lz(+KSscN'mMh$f` /wDvNW #1Ei%#mFZ1>C]v]rJ[gO+6qo#n< @9eaC9:/wR S%զ c2*jֱQL<#O)ۨ*jM8.;oTڏ0Qh1A$vVteYǞ+ "2 ξ]JZ`ɦJLb(6[-XEnZ*xId[ϭ#Q e#R {FOҗrO5_9wݳqH!B!BȋD=!B!B!/:i8+ZDDV`Mmf(%S|ڮ[Ư&ӨmZ*$HmZi\εjXD V\>w)jY~/Lko DׇI$k@iiIix.ʹ`*a59XMN[{ B(,l(gYǭ=>xrb1Er 0KwϨe{ܧ;q%/wzS\2_ ? QPPkǤ:4Lmი}3\@PNM=Py:C)*,Lѥ Kb8?Sju')m/8!XkG}ӗw�B!B!B^dL!B!Bȋ{֣9=w_(I%(m]لCs&RKɱTye&*^fmmlZO$I~]OIɋ6x{9&2ګ~ڜȜ-Z1[ O#t�g Pj /i47+FQC@%&Dk}y,Eeؙn I:s]^k}/JP\3{^^Q )K�h W΋A}0ʸ]Ȼ Nq.tԉM1WYϹ7]?l߾{|m4PNl(w-yeRJ'>I9HζHR'+zdYRbɞb\JFe]7kc#rVgK ODh,bXN9eQNiYQT̀R"]˻Lu͋1v^P6џx*5c_K(K3f}۶mwsMeB!B!"|H!B!BȮ٧\wNk^8=ēGY3"7&D0!aСShUET}2 m6ce*>ht j0/᳑3zc wˆ6!Q\]:,^R<"Q戊99 Ҩ(7~krpʄR FD�~.iˊ^[٭ӟ۴|{l*#rC9zuf;R)5KG]B<p59R%D!V`׆ E(ʺqX_+N $D=]WUdA3v^d SțuUB]˟b3Pk^-Yv R~<yj\]C|k͛^UB!B!Bv1xB!B!|d zQ!D(dl!!"a]Pil'Rt 7J, +n^B[v!*/Ğ-zTJ^i z4=nN[:lǓL\<5 FO̸- x_&C3(veyG\'_/~r'~; {6S&)x=r^;# cwTLI&y=7oy^DJ9)qT~=*T%ѥfA)E@٤$m*f%嬥 A׆@}7cGR%yu%Z5Hq npm-$SX~H}GK}wM=B!B!x4B!B!Ks'\x<pq^ܗtYm`]ktZ `rJ 닩ES f8@tfĮB& F!|nf;5q*Ej_jٌ G 9zvt`6#DݱV ug#PCώ9d%I9fؾ v9,lSՎMmwyw-2 =) p㹧.nbWH fC]壞SY2uP3uKɰdʈe!2'gwUk -l-*M ,*RP֋]h̚jQh)%lq!)V]m%[x~"P*-x]WUE 3Vc,*֢k|zqU6]B!B!] 0!B!B!{-{%K{ƌ&Ljnϥ87֋Vw>�Pt$(_"\%VR2ȵҗ]Żs'{ш;_*g\jzBJ$CtjgPA9ǃz΍S#ʂҎsOQ#\ŝ�-ݾݴ|źsV${S&)$sƻ>|YSK>ʖb18$,lRp^HWK!%Hq5ˆM'(Ĝ^ܤQzQ"TƏu]ӳImY%S]]4>JѰע[qWiD1%T.j2.{ |K`{Pm7n5<!B!B!�B!B!2}ͧ/^MH87 c*R-bOC`�#o0T7d )ZKKLFwZAS"Gۊ{G!][~Y7FiG^J#(AQGIDRD0V  5KE'?d2}zAS QSvA'-O=6-_vͦM@9eB=bsע"KonE/@822ܪbBPm-2,23HbցXX"@�1;j\]<aBs~>k+`nBhBpuH6u-$^Q˰X2gE)u{.ֺϷU4ypd詡ڼSVrB!B!L[`B!B!B&.x9B첨6Avba& _h*D8F˝{5AUL#%6A"3 ACw9%WԓE v`&H0&: 05Q\̸8 ]gc>RnK#U&gΆh;�q|ͤsNF!-?Y~yiݡ2PNٳ9#ސCXeݩnؾGj }mPZ-ed`)FkV=iŵA )DXH.QM0K.SהLaJdF1t<n,^p *#X֢"ui_3dE)pVy ~~Cd>oxڵ7}`MB!B!B& \B!B!B&#?q/ٳcI*CvɣcNe \L['(bZcR<)w or^pwhD4Em!mKW;dB 'G> [٩Xã RтȶR.BD7}Ҋh x[%;+75WYwa-A~)l#wëߵCvk(L6SL.\x?{_4k-e4%j oW +=MLZEŵU#Uʜnok &x"0 D*hEV5=qQitG Ҡ(%u\3:|$2kH[ힽ8%y;߭.gnW]u2B!B!2!B!B8qޒ'tɾ/1#2tI*2B7?B\ٓYRZ91 @]!Ӵv(w9V2QK9x9:Q1PUR<j *TmXbɀM}= (.fTa3NLq@e0oio{+֝\LvK(L6S,|ג9cR<AROR z@UHjtc٪SnLijGN2ۆRreD;:q!*#1KD^0#_ebG\ȱmAT)GG<Ŕ;evҘ{yG[qCyڮ +MUORWm˾fB!B!2PN!B!B!5眲}x…16@h})vnvBGΉ-k26F:+덺]՟Ųyzځ"۾NGu;pJP z,dyy/Ztn,)H$yl]Ujיb5] [&&5 dU俷<ӟ۴|+6nɆrʞG4wtA!7y5s:Kzb,Uz%|:3@H;YU<@,Fj Y"3,křCfD?LvW널9exf(!mM6-&AB8-tk̆Ǣ|%XǏ<gXtp~y2uB!B!~ H!B!BGtᜃ:jEGnf2j.`Fa]jg!@�fT2J3/hEus#@ROj w N^ךy۷38>%8jưB @ ]˛cDsk#rPcM帕O}};9E>y`e''wLnɆrtr߬;kNE\q$-+dĎJ:N emɞF'葉 NZͮbdgo!ǔtobqs.cj+atqP@45kSbS,߃w[Jyڵ7}`YB!B!Bv#ܯ!B!B9<˖r!Lz&Ux^ :K(ݲm,腌QjMbҒ L '4orsO^LfqJH&4U Z4(Cd:I>$ 3J@}ށQ Vn\&J-œ'+ߘpGq?K8-lZ=M&) ݗ^Mlj)ֳyUN1:{ #+zfk:J%ZHzɑKfFղjnRȀktdVXfp'1,P1#PRZO&RD2_{9R,[)kzz֛_yպM=dB!B!|F!B!B͉=إK}ٌL*9 lkdSb_HGPnux!B@fkDkUAD"S1;Q}wδ%rTe-eM g GHܫ:t!%Zo/5`C;9ТIwc%T5{][)-m}߻iշ<2PNl(~%o?sj{Z $̬< *I; *hκmI%U%3g:dd(TavG}ӳP:'섗Ĺ'F*N #Ư#ބ3ڴVoQz(ື2LTK21 v{mk\s_7B!B!c$B!B!dSVo^06 F`<J'Y Iw�O*N+ʝ(oYjFJ((gh,rMovCS{T\DԩwTD}uI/M}s1ځdz\d7^ ԎNt�lw߹-ӟ楋~kfY2qPNl(>?YKWj_Rj[o1!8r7Ipt)Zok KH(Qae�ծd/ #rt))BNv»Nu\Z(U\i<$:cB곐qY $9^UD x',ւ)/jwuuɽ,Yqʪ@!B!B6B!B!=9uTdQ3_՝~DuL5YS Fq c*L|Hi/ <4YU1]&J-}}eٱ0^"Rf;ƻ L1GF t bƕ#z�Дrc fmR>7A7x!ڋObz=*lyW?z''wLۇK&) ݃?=r^J)JT?AVL2ZLӸ;cg !Gz]dpDvFF)U&=lCltVeF3Q Jހz`R 7D<R̳�A$%Eꈵ4S[M0%3JXu2\2\{-- m)˿oo<OB!B!`%B!B!d?|3NX|ցgt 7vC2m]Zps'H=<(.{ITVb k ؇*Qpn-xH9et#D,to!x(Y$QayH*s6rMTM(L9p.zn:L@o,DnVkLS&)E_16{ 5Dpz�P%E1h)ek P^I=ka:Knޫr'HyT-n(~RnD/V0qF2~,&xpZU\ʣ(^ZDJ*H2 e볠Ҋ{ d+dǬR'3민jݦ2B!B!~]L!B!BȞI}ϼKt< > )).9^ &-cӇt"*Mv,#iwFgɅ1p'` /BvٔLKqDzV9%K#&H獰Kd3!fT5r1UNEݍ$zB`�� �IDATH+J@cp&}K+֝;٥2PNLzҷ9c!9xUiEgPȩU.Y*)sOXRh-FJw :S \'=&X Z5 : GXC9UBH}oscΚ#>E<WUZîDTRayXj<-?#h lgPǢ<Shv۶ Zf/)N!B!Bm!B!B!{<眲}޼pal?B Se<эH4ТǾA ]@-DK!!esڊ 2Upn+;vDGQz8FInP&N}MdT AJ[:5A-n>L?'S P[uMyl.e!OJɃC3s1N?[>E_wf. Ɇrd1fKWtk 0(ՊZo {LݳjS'[]#͙ܢ9j7Z=zdPI l/YHݣb rQ]gITdhi2 UP߬.DS4f,ѳL+TE^Ob ڥ9xtk͛?Uf!B!B1_B!B!B*9}L �4!Λ@%>V_fܩ3Rx_0RaEe~Gڏʿ(Q?(E~Xd?bͪ:9%ρ͔"ƳG U\҇p8꼶(c)|喇z_3@9e29\V#Wq2ܩ~e2ZRP 5"j[b~B'"VR$)*J.ŁMNkR^V6b5[l Ĕ1 n7Xo*XGn`RcGݼpBKUZzAecGWKO\B!B!BޗB!B!8</u!"d`ZGf)3@YvI8DviVAq̲#L@Xn0wk8m^0#R$ 0( 7}GQ a{9%v"d�"?HPw =?|h1Lok=BC9esi->῝vv{ ṟQ4Sm937"z(dn0J{0AsIe0\՜Z3XELrQo9 3ݕSα2_(*9Rڢ #ܦ`Ϝ GcQ2Z'ƽ|3 a аܺ޺ W\q2!B!B!!B!B!d8إsOtپ/1cIbR"9 X;֨`=]f0jK+aΜb>j :%MԪ>e_t L̂ @bA'8W7+U"ԑ!ƛ:JP Ȗ"Rf)'vsw~W;{WC9erҷ5c19Uh <P,Ndī<W^NzIU!33 ^a8Ƕ̇+bײLaˀ~ʊb$jVzyx&UtГS ҍW+�IEy[c@M{Q+c _`,BUNӀޤ>?mk۶a5+nY53B!B!M&!B!B!dg}Ǿ3 ),*e fDع/W.ݘf?Q H:TcyWoWхfwmv)23Iy'֮SpyvП\1)2n64=BR 3(cXdgWxj2nnr{~S(M'$駞ybg7^KlN^2(L6Sv=qҬs߽W|19 Ň="KVE0D} QHԂdbF7N}k8c £Up.2IPǺPGq%E#ZGmDx[4ֵL>0FPc<V B0IQ}ΔSTr; H:Uu\xFjTGu~r=)!B!B!dB!B!BvgopGB<.e0g#BJhoeR6'x3 ~3"w@[ feUwt.FgB sH!©PYHNn/xT~|cl'\MsVft Ȗ#ACLA<S ]c@Pn+wE*fJD/q~ɋɆrʮk9/gJ A9`k%4?}>y3c`tIe.93T$oȓvp>뱶Ιj 0eƖ,1J9EIYi]@"EGFBׅ1u)U<uw|9 &.VrJ}u26q]RfL(kRʜ?[/!B!B!yM/!B!B!dgx'<.Ձg,*ilDg T~l kHx,WUз&.@;z}q߆zrKV1vNvK8"Kw`,)l/,zcD~+ϋgw5Y vw?Qݷ}کEErdC9eӮ_|[O=;3wj7Ij? ! +`ʦwX BU_ Z%ZAa#vMek9"Zϗ: MQvi42V ?@H*BH/ -TFˬ,2 3gvm]dE<q jOU1RF|^G=֭7[7~(B!B!B~#~L!B!B9N:vܓޱd~{ҔȸO+0a Lp#otIGz<- Vu){.hő:RoDYN|5טI%rOݵ$w w[?~+{6#8YTS5LFtZmn<o܆n={eϭ) 唗w~c3QgUjhbSeU#[htoPxWNր~z#ZKP>ЖZZ!E%nO*mjH鵌4`qNLt6sf\M<)UbpQ$IEªs &q_<ײC!ʺmm5+nY@!B!BZB!B!p)ם: v=Sb?YJ2a6|Oe< ]KvO['fb[9^w&եXaB_SjTkF몬 blc ;Iޥ<"6ڕjCxպa9eiq/!"ո[1ǻ>3Oly㥋tfP ɆrK#Nu{!9U�B4/L!Z|-*o_m]5Cpm)oݓB5p]^mZ1KalFY6NvJVwDO:J\+-P':{u+7:AJ#r]>M!hJ_O"X)+?jCYßm'2B!B!B~'8B!B!B~[/x9VU=L%AE)d'`g0.l'8˸/S7R2d0Vُæ%wׁDd~oz,wƻ9v (fwrmp\TLPr㇟5]\Oi~jٟя)__~n1F^(L6S^|n]+# 2TF%  Jm9+Y1䥳$-:4!w.Aƕ:~:}hٖivD^j'jɆsy!&%tkAc)F4>j =Tdxm :s %sգZ{E?_B!B!B#!B!B!7Oy ]>kI:2JTR7҈.#: G;zukut")5ThNZp7Xy-eD4cD)փCl5%?w-`�OF&lG 2Ti9I|* =r8fF<TU&ʲ꾧ݷ}کE1S&)/~~/qN[Z$Gt3wWnT~΂`^=?ܩ=,!@o4WF*[D-+p[QJ֎ZQ`ڬC` $"c>E&Y(k\uf!oFLH 8>\mPgK1Z`̅DZbQʺybg6\qڍ=dƂB!B![c%B!B!N9iޒ'l~/1# 3HO Q`-&`S)0P/Ej (Zֶ-uw7.c Jvkƥq_eB]ftygL;Sw_WBPi&ZQ()X# _PU,JRy1VE[XrJvYw|fBm WzJg) O-}\`w ﲧ$#|FyywLF- ܚ[gs]=/"ϧEtcr}ׯNտ}:$َ<_%ĕ:%gP1Kp6WVߣvq ֚¾C^];ME+z@l-&^qW%#Q붷۶m֚5W߲kB!B!|-L!B!By!SVطqf |rh&sn(蟲!z6;Udc}ђ ";[2Z M9n2ԲRL-FTcf!xz89 Uڮ3 4L 3SbL0iDbt Bృ?OlK}$5S&)/8i_e7jH)5C;l37"+7R(/d9'j_iMm[t=cغ<FZ_+d;OR0uSe#CãQ[o &fv,'Ep# .J*¬,>jJ'J+ H/ɽ.ٽ|hłOB!B!B U6!B!B!ś.sa2È?2GU *E^_"X:hkd`I)ekb ] tqB"`bwBz]JEvC, A={yJ%NPG4wP7EJ?VGd_@[0د~k_p}1mƅPNl(0Vз !) &@H5߅U�*gr(yBfPMNhLٚɎ\5nΡI-udA*1fCe@%\S JQ` 㘴RD9E(!Tϴ+im~>"ˋ 2\26UBDj=*[ߺţnƳf@!B!B!/S!B!By 8gyeϚ9{v* �Q`=tĒcSf:LPTPۊ;~1)cp2=g�(�[tEh2%G]$|~u$q&͜bL߹`R p3j$0j9 ٤�rϱ*ۤ<:f�rbds]CÇWO-2I~#(L6S~\t{Ml"i! ΫAC9Ntȍ1%)2{Usk/UV }E}mW 'ows<7$RD3!*~ |ќtN05j]CL*Öhҗ:@K \KFac']ͬ{[o+n\yB!B!+RB!B!BȋĂyK4o~)BB@oM,^|LjXd}]SW'h1N ^\GP)ے"K)N(BEJw7"Z.Qև׻QC0 01%*EF/J3ئu<bzȂ6|ru U p V EREq7ݶ۟[7-r+xɆrog HFzHRZQ"|9w(?lhA|4_Z.:NYĮ>z/!:SܫTllՆM9xMPRk {S/^HU8q$*̤"I4)F1g hϹnºmm뿵f͊[~-B!B!B^ܯ !B!B!/.y{g.S9B ^pf ̔!^w!) Z 4èIw6ңP*+J"3aſ;3qOQ{`̴38`*mlcO9ob4,`ы[xt5%V6&k3Sl7~Ͽx~NA9e1fo8hkRj nB*R}ER]&j;#fO-Z%ݫG Dޞ'H8u/eLS:Wu>{͓7)ZCm ΄^>(8Bh-'e}nIjy.WCχ@b(K{,S9[yV,~JB!B!U*!B!B!/s1P0* ݺ4hP r\}zǼn㿦ĺ E@gKl,J~ڇ)Pc6w\p"cW:V6vS_`Tcѳ(ۅgF1]Mw1`'c[~k~rǴ{2) ߜt͛^{T0O�Y MFF |/y+[zɝEmjJ]̏^U3Ka }Z%QR'{LZcx2Myް@b^}UyG=4ډUZ1־'g|1 odKE_>裟6UB!B!B^to!B!B!/!GWq寜9{va*?zFG' "./Xx>mkjF.BA*@S4;Sd2 by/now!:mF8C9F)Dn.}m@ $<ގ/(Y{}ZdΑ^(L6S?vz9G'C ffXxEZ'-K$w#W3deњ89VLn IeԨk #(:ʨlRYE\_3 o )N6;^imR;2SYs)-ȵ~m(AO>|Wݸ!3B!B! QB!B2- �� �IDAT!BK΂yK4oy12]3351QgX`J_vu)Ur^{Hp]͘B=E䀁^<g)h]#"r9:CQ:< 14X4U;~`WP?[M\0nE!Yi'Ao܆}z^iƎ(L6Sv;kj!{#p5j;s JfHY)tEwUbv|nVknu Ű8ʠO[ØQ=0Tʜ*r-d�GّzMH]k=o ϩJ̅ܶbm 6`TӪOB>_fu~#wxlmۆoYs-KfK!B!By% !B!B!ygqvYSP6À(u^qL@l[vKンGJkqL|+HdCuw[% ݮ!/ ,;�2@xPw a{uBnhlechг1[Kie `{R YD՗&c 0O?3.]{Wl6J S&);f-up׼.pX}%7DĞ: ]c# ϛɼo=p :L,#ֻfSwjF,,.Yn~AZ| < ȗ)V: '惥&F̊2:Ԗ1'J_ )Y$@-#oݗtXVR͛?b'{>"B!B!]�)B!B!L-x9FYT;#6Vtp+l8; ÉZVű c"HSI |]FՃJơd)o ;O}~2c/pv[7zndFqL̊dTŃx�5ըjQiznLP ǪJOr?^~=xǴ7B9e¡2>pya5D2lY%" 3J *"D=ྻc=XB]5Y5/;^Dx5=Ӊ97G\yVf7Ks.Jw(#I6cg4I[ϥd**T)l93q2J!'kJQJ;}tխ_rxB!B!KϏB!B!]?qY_vgH*^@Ξ]S9%u;'z8Px]SHq_U)^jZQɨ !Zh"w:?+GX5H;VxBIpZ & dJJtދI"4'n┎A\.Z[E&̬R>r[~=_>کEfp(L6S|.>siWR:Ldx)@ج: u(YONY t/[Vd'RPxS6ޣ r[ [ n0# 6 r BQ(kkҭ`@˹F2(˶&7P^=:#Wl-jUY^B,t hXIV ?֭7yk7^S3pB!B!]m-!B!B!dgs[d߽g̈!FΜA:l"ދ'ik QX^OᚡҘ@^xPȰ Q&n{䩁&%Zq.Q" N6A^gүSJ<$sZ+)al*Yg2}Í˯휕PNl(H?l^? xdPIH(4)+OfhL +qPxQ.KT=g%>`lIDLQæYdk%dTx:\F]+uà7J ;q+_X:(hѪt|FS0=PG kA+&l\RJi۶Ys-K6B!B!Bvi%B!B!2!O=0aNkwe-بkvYQvFg]1vcm?"$\p2&(�S:}gH"=XG ۞4�wj NC"PwWc^c!WB(9rtذu> QnzzO=Ėt/ݻb= ) X0?즃|͡!Ò R$ YWɲՎM)fscz_塾Sd=?C=v%J" &7ciN()$ot32sPNir<C̓>Ɏ> L۲ ԪńʺR{o>:ÿnCO,!B!B!d"%B!B!L-x9T dgx#a/ v(q^Z2bc_Q^ )-7o4Y=%S֯S;6 }Cn,Al'owws_N#| HEC>RJ,z J*A 62v1D'@\cWc:PNl(p^C6?0ʔ (E z:B9K)&#ZyjPĐ4,I�G`=U rBO}]+U HV_Ò݋\EM-<BZqFn盲@P@X%!C(NgpQiRJZ݉AH yGV !B!B! B!B!2u3:g8{6fQA,e(XANfTw<ؠDLɘGL:mF Ê! _6!+G=A+I"@䲐;/D֖,ɠX,m}MqPjGϺ1yFYca@-MAV7WX\w3N- { S&=YN=᭧.n0ax.g1/E-bc3Uj׌NDR ֣sr&F@1?(F!Hx#5$]GH9Y}י)UT 2H a%s AR2 b ̯8ގ[~ɨb3R.v&Td!ɧn+Xڟ !B!B!zB!B!2,dy˖*t4gA 5׏|bJFOF_$ 2oxPO#K)/;JD"1_B qMJLOlDb n*5 Ƙ ( .S጑^nBj+I|;jmgpT_07{1WcƳ>KYw2a[Rj_y9+3ލ2rʟM-wԲ̘"Gǒy/+ 2Kl)r.k]�ǽQ|?%!e|B�-nLs;\yZ*ĚBLe 2%hq&+t.p)g%Z\%x:gzQk "+T JIK,!H)OEIO"qmܚoaB!B!B&)B!B!즜N= nS;S^h2*-XwdR.KP YO6Q]B@QB V#eq^mH.bIcKmJ>J1NsNl(Hwح}ҁIb. h(PdoJF"v?{q˘O>?_w@9eٓ`yzM|!vRJ#?Œj&ddEWj*^ k՝C rv5b^URAu%PzśQoت ^&Z3y]uz,}(zb?F۠ )5iR2^Q]L٨֤$>=|?iB!B!2xB!B!Bv#.?{Ӆ?cbS!5#FD@h-mT|0+v.GJ{BL#B#Ć"Zc\2/KX\T~Yi 6;j�qʤ7*5oBm6O.ȀP>]jw|{JN6دN;͘FPNl9ܳM!ÌA8 Ͽw^8zW0_#Z(ϯ5|kf%7}-ԣ듿 V㥨Cw STe9}2 a1" <[OPSh#or1Q$o>"!vM}.yp29,HxS. !B!B!dҡB!B!BQo<qY3g1NNyꞇW_ QἛH6iDIp l#jbo M%, q&(^U,A`렞jGh%$E#P F"e;~4!`ث}!i{6@n/C/nʔq6\&0}N&PNlvw9n<rbӄi։L((":EAI{NBFr LK=  *I='26;mבS<# p nv/PbR@bS@±5t^7v^9+x9>gUKuMw?3On̝bkj!B!B!d!B!B!+tc-e3fFiCI(ZVGb'Bo�m*7Z(V%=#ĉ(2hŭO'bHƻt)jy 5ӌ_e1 [s}ɒ|N.])',wORwR /!UG$a6WƏ\y+̓p(L6gS9g) zFvnI=Kk(*ćz+#p$`Y} E㿢øWxjtkD= k[i-e-F&:^%"! %ґ"Ω2I [mցI+<WWd+nܦ+$۷۶o͚o30B!B!ݒ1_B!B!BvW?SpaMR JF)KD-xxsY\J S@F@L#u(iC"`Ij=>1<*`U{єǫe)Rw9'Sֿ'`'w-05I c+=fǪerNu'@~6 O=Ŀf{lڄB9eGCCBJFE]� ,W_ŀD$%`]9G N(zE/$1P<L_ h/Du)7By$lۮT=!)M#&%%" }=əsTsLGF"`M36|iR;z4 *#Piٖa?}b'MۄB!B!VB!B!B>v]࣏ 1LSrBͲbJKҚޟ<�\SU4Ԁ˦ bpfcv]3w%h䏒E&+9zKJ%pܸ'U5ˊڱ@p|NXbE H q*!I9/;㿎/<ϟZl}-f�' )$p=tQЙ$R)k<;CԻ$7$Ic'Ǵ|Q/Z-Gy)@*(F* =5kie{lԢ߱҉=tmw TEq楔qb7ou@Α(B)qYsK>H$U䭈҃ g{~궋/iB!B!c%B!B!Y8_9sTyܱ_.Kpj 2bЬcjhbnpk.ݹΙK% {2`@Ͼr;#`(# Nx,*&MA"Iwm3L@l;nYWمB3z۽B#Rs-y)ir S (L6ri7{[N?g΍ABн0@FIw _0#ΖRZUy0fĭDpQ:FsuD({m3TQO]*b+s {&/j5cVMR[2lS&uA@js3i A}3OlΏM2}#B!B!1}I!B!B8yҹ /[fH!L/SU*2E�ik 7:vQUYAg d3 N(Jtlhc.Q^]@T;gQœR#s2RfCq0fc1hN6X<VPpir!|^0Rwnj۞[O_~ŭ14PNl&YNyΚ3〔ċ{c讉-+3Ԣ1ʌ'[O)k#}]^*"L9 Š-E *}֊t&VNXː7A2QKZ~`P_xmLFdQ%"JC# %|נU#|VQt}Cf�u>lܯ7|ke !B!B!{^B!B!BȞc߼p >0j|g T#tV2M`GtHQB\+�FV4;V'B] >Grw%\VJ$Uk IKt9-D}"^@c%LFڮYl=|W5PmyVdTс>'\>e젯Q~:#;53}ޫ7م2L2ogA uÃ@@˻�~REb!$ *uNg^xuo5OGo<Js,D+29;*2f < +&93n23e�S 汚c8'.WUݻ>q9OB!B!2$B!B!|윻/sێ!N�vlJLȾ,$Q"(6�5SHt-WQֈ.F]QdI)L{-3"<۠؝1XVy5oP(Y\0(A2V/Mc뫃RcE;^%#:>HYچAEq"0::f;x߃@9e49ܻMm~RJT/Q*CD/vK×MF=i *v(,Ȗϊj~x&c2Ek;AywW)2 ;֑w atå:X0y%&[;ѦΥ(Ő@ ֘Ews>UͳV<$)د~n<gM=B!B!=o !B!B!$߸g.aEE )n`kKxv<"\F|),U)Xw#$ćb 7v-@ŦWƐK<}|\D<E@&);,Db ՙWj,k'?c<;d=&DL 8숯!P�|VF?]w"v1(L6"\|ڍi)I�� �IDATz!2E ChŁOFj@0"gzZR+n7.{J7X FEJ+,Gdr\KݶBh R0vrYAcȇb^(I\_!E{W -]#R|pk=B!B!~M!B!B!=إ3H+mi Ao66: GeVȒ"}ԠRx PJs;I{DE.ԎRr_j6  a@ '\F-W9( ``L558V?‡L̮Jpp]uk8wχ8 ][˖g2R~7~ug4@9ey6lB3چP}*D~U![zNfcB")V%v/r=?IP"xckloNkRM b=XcOr Jo).A[)XIMjډL`}S 9di{o K6E!B!B!d?B!B!B\,\cdI\v`0=G Uʉ9�1ul&Z$p"6?NeM5 Tb )|(``32xߢ�rnS<4,$T騾qf<G,ǿ>_!wL짟zv曗zy/1S&]UNy f'tЁ d(?lm  3YxT]l=e~IVʺ"[̒esMQ9܃x{\I༾]9e3wFJIf% r(9OܑTDXWoxZ*C3q'#A(c%~~?^sߙB!B!K!B!B!csxGB@PR"!�e3]eERTeRa?bѷ$%Vuvէ2l- H t !Š=ECkCG0[hCc3i/uboef"419QM TVMP `wUG2<8-'Xr}S&]QN{W鐷͏1.tLL#_Nε:T͜)mFF/"MT*x"d%:As=I;N;= (!InVF5<'C-!2S3A}C%Wfj)O52IΧ_c%rbʿ<#75J!B!B!=8B!B!BȎ9 ^q ]yu΢˽/!M sIDcm6NJ$ 2QFZT2F*9^vyRL6k& qW7"q,ԕotr:з&!Ffɵ %*H[<!txQ�rD1ܰmu֜< !bF}7=q=PNlv%9n:/+6{^W2$4|9L)9T c#t~ {K@AH$2t�CՙhDxY##h+aAg_jZ=[-3G+#K(n @_: Jrm1q7'WM4>ށ"ez\~S<3w^yŗZ@!B!B!y#B!B!yK|e┾P}zLG~R(X:QitQqvO{ :D]W;{TBn;Vep 9AZ8BTT) ݯ%"f%I'd@#&M2G;qmωtm}>rm2"B9ey粏ϔCDF/2ߘ{ZN6 "dGQCP IPRü2vD=+k{$xm̢NB@1/̼_8;KyoTT|#龜'ް~,[!xs7)r,yBJ-f41ΫU긖>)& zcWo5W}a3΄B!B!|K!B!B!Ϗ{|i16pЩ js2d`(1M]z7$2t)C9UĂ .DPv:̑sQ_P"HwE ":|$!|-}/c!HH?,f0ʺb ܢSm55(Өs駞yb7>S�楔SG'yr8R0_Mp`-A%a17vi�džkP` |_Nо^}XD؊w:G%Cͫ_NAb]JWD<je~Diޱ(y#HY+2n ʙ{RASSc rU-HJ\)bxc?{ꚓN?B!B!By !B!B!oϹ|QA%KHbjh,1h  A\|AZ2 ynƏEPB'+)ehA "ayX c$mz5rw0Z:[ m`{12ӊ`cq|Q* ANWI$ŕ5)%'~'/"S&JN{VѡLdN1/#ey"J.mqnԾ8Sܦf=C 1M+oǝ9EYo¾hWQΌD/neI!/(2YdA5I > A?3q&cG0|S%[c?ȧn<gA'B!B!B!B!Bc޸g.{yu iʆu =ѻ ]~*JtPcl ⤻ZIApw~CƸWos* : ZD7`pe@@^ވ` Wo2ՠȤy(f:INEQkʩX"0Q[>bI ,=L֞PPNl^l9n: e0֞"HYcwtplB犀/&;啦яIxP{IbGބp/GJ =$^j@-|idB0NR㗜#3e%1+@}Ӑ}m{?-Y*<9+[׮ꋛ>S!B!B!}uI!B!B!5=v;إK}ٌ9ʎBN#PʺUmj1XeBa9ޘY0v\rKuEr?r,rwOi(~`'ЕV3 d5A?&V#m**/3xFͨTĘ׌4*KIp>(( :3!0[(_/). t>W{Gwګ(}^Fu {DQǝ1]%T́ `dPΌwJm'٧ )bCp0""wp91je} W5}ݫWSo=);7Oc?t ,;{]vIoC,h2Z0iDyxف& [m<*Ѻ1:V$6vRoDk6HjDڰ" cզQKD<oz?19E0GOׇBCI6Meۀk6Y7>t�~37)o.+N]:C!B!B!េ !B!B!oǷuKI*1?$vC@1CpHe[A_4  :8F9DNjN@ҡRg�J6@W'C@" ;Y :W)MR db&7nUv56x\@(n}5`X a{m]v*}=ok|ܿ~ݟ׹:'(c^嗼`}&LfE(D%[;` ܤPV؍$ 7dftBJ(9Ey% .n"̒tCiAԽM꯰<j%c}i;NMi9zl@n~F«M3uW ,-J$$?XYB!B!B~Kf3!B!B!<|k< T[L(&HJQ 3g-غ?ڷ[^[pݨ,N]ǪQD{#]ڬ'5 <# Xۡm2h1%C:Jr@dYP&rjbo\oOTy ၻ WAwo 唝ߥ/~K.RGaw]V )S=Mjs}Mן)&XG?3.xKUm@o0rktSB9 1jHm[5bF{Ipu�a,pTlU{5d_홖ټD"S ,6[~E-Uw?s?rÆ솞B!B!Bg?B!B!B//m$"*(7}䮊curC K�h?5l xT5[G]Ɓ0WX'[3NK%Qέ%Ir�YMFg޺Zu &N&(: 31CX6é{?gLcrBNwɯ{ғ}]oelZ&.Tf;w<K_H)x/XGҡ~7lK2o*So-eQÈCgrvl,AO%^70B}y-$X WG) Rs;fޚ`ӧŬ\V=iˮ:/\s\B!B!;"3(!B!B!yQ|՛ಹ>o" -H$9ELf}&\  aW Q)+ IE JN1jlIg_= @-KG0N%s@r.owm+9%[}s$j( Iv,Ei˓̵Xe؂,aг"{y`k7mGϽ]%);7c>t;Yv]=I)v(s@ȳ%jCˊ)fplZf6qA/)tMP�a d/1;>h7M .Qr:鍷h}tUWޛZ /K1]jJX"ckY@ TJ y]I-ڎTo~7[^۹Wƍ3!B!B!30!B!B!<!|Ö.M ݟdRC I\Ԫ < [J69WE^Pɿ=EB1+08$spm EX g@񅾣h2 YsZP`A!&;9cm�<bQpoAS:!hŦ;zʴ�mcL>/7w\xPNٹy<c^嗼`}R6XllBwPF2r:{L{ hJ2yȽ i= 6Q$H8i #O:IY[_rf5C>k[~s5ʐ=EF=}ΞV(ѲcnO J4ՊAu=ƻ4)ïo5B!B!B!OUB!B!B >q5gG*V7`x o7PZ-r>hPi\EUWx[2@ŽU~s`}6:͹*k>̛CSE.X[I*-Y,y4\[ߘ: cMambp} ̮diY%=sM>M`s)+N^+}ͱ"y_+DF ox%lD>7M;ms4TץO[}ȕΰZV@xmǶf/副wB'u-0(Q'N>Gmgq'{(aB ن#Uo F'r3dBIdZ᪻?sa×71"B!B!'YK!B!B!O, ^2]_y{ YT,*(+6 3e :6<CMcrJ-j#ehJ` A࣯D tJ›/ ξx8r̊Ҳ ڮ@RgC<b3Tq UlTO≴L M$=.y'?W`PNٹyr߿N~n򜧗j/�zZ-XPR#["{#d@A3<hվhȏ=FgMPU^ExCDm*h;Cs3wСy,m{'`eon}%FD S&V=iˮ:/\s\!B!B!/PB!B!{渣>ಹ>/ ʘP"5~DiE@\qIi <NN| z ]~'Ã8(,vKm;rV0a\dX"z"DQuSQLۺlV|O)SA(z2Ov3eW5gsvΣYG;ݡD$ȏ=|y`kU79Wtl'SvnE/:egu޳}5+P EZj(kĔ{8VѮ,sm$ Nz+ &|2#X_-mUaC~zkIA}'D@( gv_ 7mJ#eZG' &>*E:CJ&l@'M׋GtF+ءlu]qZ70B!B!{ݖB!B!Bv/:Hu)c}}W_Z4-Qu; x -8I6g>Rj%I yx;65; #ʨEg7A$nd7[A$uQ }{ ^̠;/,QA̳Dpנad%a$[֓.;Kܲdy_>x?_p냁r)[^x_,~IdiЀyL'eee9KpOjd53E#F�N8mod%#7p|3SO۬ WF~ @v<mcop?_e?y*Ѡ'9RZ%Ec؟AﺖyϚU+|Fʅw=_[ _M!B!B!;�-B!B!B18k< !⛧rC¯*-DAEe<0"DAx, Y'Xڬ*آ_<F*( ^I 6GuLۧ NH1I.OWC;-w0>hTdv1;CGɪ4N&H wj ZR؆>7]USvnGNY_.<V$+(ᾧ$6ʄ^F5�� �IDATfhY$XJ+tEٖ ;1Kl*uE,i툔2daVcQhdO1s@2^7xFypA&QOb>-Z@BI)`4Hߡ 붿u>tZRHZs=?+߯p&wB!B!07\B!B!B١Xxzsb$XeTPz ^ހotݡYTP`IJ "ιOd՛+&hWVMRvA]0[JMB $Gc !UNQsR֊0'k}({X7U,`]ɟqRNMNɯ;lI]zLzDr t ^,~ehLlKF8rJt<W-%nUb\/MκɷѪ+b0X:NӖDyjv%]}!G{Ge쑽>{z+mY6>X6ǤךPV<]u9_37'B!B! W\B!B!Bفy?Nm%caZ^(C֮Cc.j&*d%Ap35]2oܗZ2"s} t3ĸi4;5[pcvZ(%@6& a`lquNEy+m)YŦImL-jPlQWP FڮG\Cz<e߬=ʓ.ƚ(Dr;cۮ$kVWn8EE/r6L,'+KTVP- K j7j!%AJRM?E0J%4&v2o %%'Y;A).붠쯳$d N-eSjBRZKOƮ3wyk.+NY!B!B!w[B!B!BAy[W̡ǿ#ͼ>c (l-*5x+z |}%z{3z(,XFd e;IX70 I=e˘KdH @f?ތE�c[!8Y2`UK$f9W3 yUL[K.'<m~Gy/N(r}Y ,pQ#\юoV}7iQb< (Hyl v[D`3 2WĐzIm\D=Rzjo=%KpZCjv۶l:ƶE/Yf ob3z7͗cg붐~0Z|kB!B!Bvp(B!B!Bvj93|#fO-wx,[1U %!IoWiׂHV%H[k$hi=2n#$nDoC?Сءu0n0}(4}U oC?RƯL5yrm5q0�^JfH8cQLO VWRNy)r%'WdY"%sdK|35PB{#f )u띭1ऺ\ L^m2_]AvR`d8-dnCQ /6q%>`v2_e~6 ۓ=u]M׏[;VB5E2VrKL^_J#ӹXu=?3W~#7lzB!B!B oB!B!3po`,(TH ?0MJ֕d  m#<2v4a;?}{Ħ}B.A 4eq߹fX)PKJٮ;]/Pܜ(gT5h"wmW]d,7SuXS;w$ aqŕprޚk6}cdfܹrpZ[7]j{WZ`g_ ¾S"dT4kG&Nh"(#D<_*=h=5 &XW-۬)aEeTB&6CXf̍DZ6VSmѲJ bO:irU cߐi>?Rn?#<.spͧovCA!B!B!;OdB!B!Bvv~lZuE__sΜ]D^"ʩs('%H AR &6>bӮ`𴍄E)~f냠b ($A$o"cR'W@(4f˼ uvMkW4-Q fή}\ T. h|;SsK"֓9ZLN6(QeNgLw-[.9s/;T\>yIҳEdϸnuuGdhC,f mAG>Sh OQ3R >RWSڄG6|}52"%ŔiDJi\G{&V (Vڶg/MMVG % F%ЌU*ٳj7:Էܲ.;} !B!B!,l !B!B!dǭ8Ö.MJ&&LdٰH Ro(Ye3l"&`YZD+!ý^Aom/y2Ԭ+|A:QFkSrJJ:^72`bravl_߉{;_VT-3bORe(oϭ\W}Vz'p6p? Mױ.t͹N[nx`9h##odҷ^t \J�S[}hƎuǬ6Vd[<j}~ 6CeDؕgي$Ymhi'rɣf`n`ڗNJ֕:5oo6*#6K9"^=Xw/-ZYѽã΂_[ _; B!B! )B!B!'-3|HE)Bn`]1Ѳs62�Ձ_Ɵ3B"99]M`S 0 Re ņyF]:ctnvzZ8ȾJ.Һ.L];,BC4j#Ա1k*Ah h]ʝwj&3rK_+{B9/ϯ}m |>dL dH]ky6$wRRntק&kǝ2ZYW##;Ɩ dsYMH#<V(71cWC}Jo˖M mT==1YdZ 5w/Zy7lٺN!B!B!;#S!B!B!Oj<xwN)+&0Z@"ƿᏨ>.j a%^T@e6*2 O*"7 6HZ/m{ς˜'Fpo9`ۗ k4:B`EEįl36RڔLf!M 3֔w-kS|ySõI  PǧV*Nmg<A̝;W^jwPQBTvrvNVogBL=zBu}P6ޗd.Ndn qJֆɈ'uB4DY?僈b3yJkyyrVkqU^uVT]o%M[H3}~#xk>}stB!B!dB!B!BeQ˖u޼eF AT0�@[뇀I,b\]l,Ή+%2e]m~>F(2tlZfȊu gň/ c[9[9(L6vH6 K-AAAiֶ,5H{H1k6f H6jTk%O@O>E|h|7LD1g9CdgRu:/.TH%Oưt"h1M3( 4pֻMjA=5Qԙ$)#.eU~Ǧ% 4Sg&\ {7JDd>H7 =cb!d>?ENA]ӆ|ʢ{6\fk_se{քI!B!B!O"(B!B!BR|sҥ],(-PS-}&/woZ zVƄ!۠Z/_K+add{S'F~�]2WWC;xEhkہx2``֟jp='H-2T; C [s]%%[KY[!q](9N[|M+O?[#KV*sS҃2$:%I٩~؍cWLY*PERuA* ~$DGCoJ:2*FKC+~&Nч*mҟ3Y9?3}6ȓL,Wv. W?/u~{2ήsUӬέ_[ _{F!B!B!ONܟ !B!B!'~̃^5"H@ G +ѵQuC *VrE)BV`}mwe9k/�`57|aEx URYH1c6݁8 hbD"FtT΋΀I'6 <B c{w]+wuv<gsЗVr_ UfQY-$I\+(dU%})]cԍa?]ft/ج*dfRKo:ybP?dYrIYfilRъp} 厊Sۭۜ㖁^sx VEd]~W~#7lz8!B!B!<K!B!B!O ^s~Y˟> RJ*b qrJ:&6;%;vi RKͼQH8% /b.n˘0$p]kAek9[7:}N}=a 0.  dZ/H)eX$uďb-6VXE IL#BVvMrO>M՝ۮ2yt̝;W}ByiyA�5Q k )0"YV>I"O$vKy(X98AQNe^ꬄYؾL2POW` VV&iÔ)pF'GpD4iwiq9eVJ:ue!GOΣ4Uɡ5.]w'pͧo{B!B!dr !B!B!)_rE\$fzzc:f1q%L�ѿjĬyξ2H)Vy< +p0E@%ޟ!b%8$j6?'v|FeH"s6"S%skID0YZ˜~' sՔ8֢|r)Ӈ6wxl޼vl9sA"4UrOINq19Ed\h٥.٬G2̏k*W&l(D68W -{sF)Lב\Ff;6 1r^dSjBZ*%c۔ @E e3s1ʚ[lY}eSָ!B!B!)B!B!B8/:lҔW`Q7Ηzs"Cf!Ⱥ"GDQޖ_ewIY׊16J-JOZnQN NF oWc `z0QuEH*A5 76!#HPTJt9Z5fs (0{Iٌ/|.wD,4zw(#r[|M#bA{-/Y1 uLjZ_I}q*$ .0QkJgVSmd|]˒G=Viug^sX^<W-L 2ܻNuң< ƥ=FAQl<4F;^괽rFv+e%IMװ_l6+{ě^۷_ _#B!B! 30!B!B!<8įqDJ"VS,Ut.HO/'זﯭ3<2V RM3d[/k(R.f![!̓Qw&L\0Q̻zJ-۠>5J*23(|EΙ{+%rwɔr#e]S_Ǯ"E>(si֢ 0;/s+N%[۲زzfZB` (_f첖[.Dz=H:Gw[)SGgKBz$-kR[<SGXkt4q" w^-^+mM+)P=V3# ׭?+?7\uB!B!BPN!B!B!d_3YA 0b 籾vTV(W黬%% `J 69e2-yE]줓@q;S/4ɎY5bm<@WQŊ+3rʒM'~,w̬SvFuLfI4Sp,t�@7 7MrhrQRys է}Ss۵r 2w\yʋLN]ɺ.4{!f뱙{ʨg9b6y:y<eU91SEǖZ}ڬYrͦbj=b ܎^zZ=L䮁 H?jG?5 Zc}j+ErKnLR[zZȦ/9|+mB!B!BS)B!B!2 o;CN"Wmp3`?e1)Ap}6@vx*�4kI?Ec‡>](- AЩSA(S0z~Gl`L;=  E\㾽2K70n@4FJ:NxyvV `~M?lMP0g9C_Σ6'd0>s6,$vaʒ aٯ0u(L2*#BdR2B[ߤJ&63 jIr"SMm|Y_oNKҢ +Ҋe� ]w5l]oKxj[/zYԕ"ks޺e^zX#B!B!2aB!B!B8字+{ڜeQCgFCڋkD1{KZf;"wQP^bo#! Ԧ*AFb!8hA0t"1]3,kR#*`^T~<kಒUlۦ=JIF:[9\rT)HM^jK݉b*;}zFWy{!7v}}2߂堽ʇL:6-+L=s67Y|hxg5M0ɔd;d l@UY3tVN~bm$(f3-^ {I֗" 3SDNe=u32 <<¾fY[ׯ& !B!B!LK!B!B!$zA/^ɢ"BM&�qAP+9%7L} ^:6V;sdaY�� �IDATŒ *#cZ҇+u[}k#aв̧֗ ͯԒZϠ0u6CdKlPqhe`o+OV׋'ϙ\y~Gʞ%,>ͽBSGx|ʁGcnWo(b<*F.sLJl@DAA.>t c!JN)DEPAce2!-HKlġyl-ܸ.TF !z>{.o~e+}fg\n&B!B!ByD%B!B!2 y?o}dQĄ r˒1X$ r TNNJq \]J~%e@GR2 f*T\bƥ7ýBUwa3.s[H;Wej@f-%3(t3 F-AexQ6Z4S}$b;WG[ҰY#+\rS_)߹Z\[;;9OW^|-,(*&SQ!OQffVi?M:k %XN+,^[z</jÌE*{P:Dn>f}F_ǩ]kߨ%󄩌(0tc�z.N5 hdWfIH]Sm\YȦ/9|+mpB!B!Be/B!B!BfmG/;dٲݞ1oތd%_)[s R{>fN(RPdD@@Ak@AP-:cfoT\|K3ĒERho�{1޻7Hs\CGܲ1~J(*iX.uV?{:s_:`ksa֎;07~?Q6o٘3gt!.0QP~SDC<ogC)" lo4&;/M$ =5dR`^2DuMR6J|ڃEھމ<24zm)&#inI}W@e_u2HEσ@xeK}e˚.+޿UF!B!B!dB!B!ByTr܊=lҔI&JxyBTv[vYSOK#Rj"qe6P*1ƪ=)iVK t3Q&mT`R&eB]%)";<z%[++f͸r/'a(\Dž?(x^uz7nwv [#7t<jGq ȯ0N)S3Y@6{J-4HHXGF)۫ex,E50߬74vؔ-ϵ,PrM֬HѲ5N Ȕ-R5 ߉]f6v_%u]nײ)mz|\[ׯ|4!B!B!r !B!B!<NwW<pGc; N6^$,C9тmtm+: jT6>O@uĠ,)ZI()[V: PI8>HRI|7"uTqaھVCoޭ3ج1u0I<T!&`)DK.[y|kλpñϕWwʩ?9?a*ر+S$s\ Llg &ٕК ύe2QT=6{d71oIǔzSN2"L Ln:2poMT *YOnюJ;3C9[`]"(Ċn8&stW# Z{r<6B!B!ByT%B!B!8%?}dQ,%D5tqr:[-PƖ- +(V ֨nKzFVM�HPf8pC.{x�ʺVL3P= vIc)=V^@Ծ Xau(1^LX¹0Q;A9d(%1sէɽSksʡ/[({{DJQ YS[ ]'rbf35hg/!S bJz$ul+(@e}Ɨ鱭Ze}2ɂr,l|dPhہi-7D DWgLɣ %XMDd^Ц/9|+mB!B!BȣcֿB!B!Byle՟,[39/BY@ 䆙2Fg@ԩ`rKݢK|Q&~@_}wₕ`%@Y$H,fq163[J>fF$S# H˘+(YkC`lUx,&ζ;8IW+\ƚVs:>ծY )JNP^glѲK\}ȝmFټy(̙3G:9`aNjx'Xl&,EYLh+v=،7NJvD ܖ"NDPH(cٽeDIN2nCQ2lmU=՗p[EqM`q=W"J] k'r:ᣞl- d%rcb<rvUff,In-osw=!B!B!ߊB!B!B/N9nzҥ)u3~"UfP Ct]P3OP3`{ũ}SܼʬdfAPb%ΐեdHpPL3$w+JH9�t�} q\2yWCw1Z8V'5&Մt\YNЋ1 Of\ieGi\<{I{!v}dA{-,dhв:VJV2�0gĉJ%{AїC&ebJbϰ2gmT$SH>d'ΈD,.+7AɄVUVaؒmOfgӺCp%劷�VI\6$i~SqB!B!BB!B!By8įy#IǢ\Q2cU;. L+;"8(7 ^LDRCshb2"k0BlxVLϐ]vΦPP++QQԕ䃯m\?켩DYFd$[fRzSʠ%۳<Aw׵r]wyʡ/./SP;ԠJ6 g93S&|eTEHj|tLB.QXIQRخ2n"E0> _ 3ͦ` %d *'d䥺JH ŕ,NwX5kE}OO~՛/$B!B!B9B!B!B ^{~Y˟> f!CzgSj`l+IPX\6'2ZO֌�0ˈx1FX3Q:.=v8L&⏕�y n^:2c3sLx<L7tᔾ?=9).sbdI  ԲARe WGԂT~&'W*NΏύܹs?zrDdwsJ2IS֯-mԓk'XPr^T7Wugag:U=.J4\K=Ims(.d̪{RgیI#j.ܶE$fic^fM}7^z|6!B!B!<PN!B!B!'ɲesSJbSZq9.On/Sil0,tA1"|FBg/%B2Q75;#XL RxND@ÿ6sbVZc#2buu8QĸUpePH)͚.Ȏ֏[6R Bآe$+{<mFټyߖ9sA"?LN[| fPɃPE)ӎEY/d(i^WO >FPy $3n勜2|T6rxuy{eQ0FܾZTIEgOUv'=6V~c8\9Sc =lv1& 37͔[ۋS¡o/+޷걶H!B!B!C9B!B!B~Oz܊=l4I!jF (5n 3T4`2t$=-]q*GNnfL3 ShR%CejimbвC*ؼ6rCyeB^b'`ڀY^�)A҃F%ecei=?qW$?rm7Iߏ /P>ڧd#QBnDrBgN)a97NF8Z)?0Z֓ӂU$d2=J6TW%_ʶ<[%g&3 .ZS=Se4J[BI\W8/&_xcmB!B!Bcr !B!B!9pW>E3?4c�ťL urNjW! l/ 3)kL(ڕap;܇( ]Y ;AHTRŗp̏0< YuS笝0zILP*X[l $GgN}溮GÑ1E\Y3bkd>kλp<gsgﺗŏ58eF@@!s<SzG9vF‚#Z%RQ+؆;1ш<o:UV]QNe]ꂮW es^z,`mLCT/v[+52nlz};+k'w\N~úMB!B!B!S!B!B!d/_2=o8kg$%]8�$*X 60z\NcA<!,VEZxn8`1]g@"#@0P_7f3L<*K7L@.Rwn:UB܁Zo'1m0زdm&uY١QRܤ*kjm;Wc'W*NΏOyϜ'|V)e=fDknDr%S~M_>Ȩi%N/%)P/Ue-Q G{kn`u](дY�\'òӒupa˭? l JZ27=UFKBuDOfQSֳCgim٬/=g>ܺyrB!B!B!OS!B!B!dG/;mlnϘ7J*%zP{ ;AvH08$KU 1R +wJ0`6jWݫiЁQ0>Kio5ܒኄFY L;�(RlAYe ·1#o;%(du ֒:dR\,lکw ŗA s˝}_n7dӦ s̑8D*9m<H61�'xg*m'ׇ`ĬNa dM6+QL儺r˪},\'UmQuK]$H[Y_?+yS>S}l'/+޷J!B!B!r !B!B!쀜v܊=l$L,DRE@c-}p}'/W Qv+8F=c!0;fl;)yB :.S3@Qcɫgs? Զ'a~:/c-|x#B}Lv&UiN a`xA&sx/uQN"'V$ {5:-_k|x%ٴ?A&ubG]WY}cGXzΛSM&*GB:=42n6l3,lpnlq]=^d,lyP­/ƶuuXЧ:jok٘E%spxLd5Y}/}B!B!BK!B!B!O3\pIұ3ټ3XAe@nKn__b/(@}Fv61OGd@)$gu{&iL Ţ<bō@hq䳣+-˙\�mת-$#d\cFp1)3R6䦻;C3rK 1=Oٷ0\֑BFz(|3en5D݌, GxhαI4*ܿo唱T"cYOp/)."۬MY=X-enKĴkmfU[P%%E)V,&r_+hIk'w\N~úFB!B!B~oPN!B!B!ysSꎍz;Z@SƒD5ʍP?+9%z2ܙ`RKjStv1T +. ;zAhajwlF֟"X*dh܁͜M֋j4Z8 p9b-kRk%.Sg>Tyx}̧!,!&QQĊeAm{͛v }LNU xM%3_n_2l"z-(`HhވɚbTf`Cuˮ^G&[љMTSz-#"t2̶g{x/Ϲm B!B!B1B!B!B!;>}7YrɇOƮϜ+"&̐ kJc:jܴ>A:::A FY/֒ (uȖb3i9kT:w>|֎!+L(! AکSQ< z.DO 1q2=J+.䗠 j` >h_gRm]@QZikB5Sڍ1׸uH ,}˾a1I9k@kP0kk )DYʂH$vm9[$H4#9\e̸~n S%4'nKs#A*A=VK3ȸn;V|iY~l[Vx+~|/wB!B!Bv(B!B!BNĞ?_̡KvӺ󢤄 QBAeQ)BCP( Wb}ҥNQ4/1"^6Qq?m Pһ�\8`px* J& ?᧖ {1`g !]0jJ#M*]8H0ݩp䚝مjf.MnԊ"֥<ʈRG3K-v2FA !:$;귤p,Lu{oX`(tg{3H2(4D~չcJ4gYe۸ߔj8K]beG+f62NNOغo޺~W~ܟ[\)B!B!B!;&S!B!B!d'dR/_rīSJRm}/XO5 H,*4Y d:#~t.h=B0IZu<z@0޼IZzZ-W%d cW9FGjJ|رcmY�2a L gJI>sMSba̜R^<J Zbq2H ).KF-ӇRX凃�� �IDATz^(f'v$+Hp̴ϔgNi@ФJCMN d9cp}Ʋ0u-+6v뵵e* ed[Tmc.Q)᳣xqn5i' 0opg\GYB!B!B!;4S!B!B!d'e&Pȗ/7,_=,E. XVY f밎օV#Y t6Xez̎h$DL,TӤ;#JTicY k^tV+o[Bcle낁0)vMX'fGI86#BrJLow6+,2Fp˜"v.lbg~g[iӪ=6(cUd qkG9$VQo)%}hrz+LH@k;us_L"w!L$el'z`هS#؃< RFMY/'>/_-[~ B!B!B30!B!B!] yˑ;mGv}ܩ2y8 A)&AT2)VJT#`LtU҄Jӈuֈ蘿OV�(AV^UkdhV.<E0l+xb'($aFOF FVsx3wDZGc#p1BdTf$fRk"f4r]bƴ[ۀf\~lJ0U{eS"VPhzsScI6 * 7yz8(RLQHK=-ok? B!B!By&B!B!Sg@N)u3!ꋚtcP!aE\G2NX)b؛Lam` /GtRD$8s D%kƓN-JU|T uq4Բat^PJ\wW9l91K.|fox塬$r/ 9%+u,9e(,(VH3)upLq%c Z37L&lR"$*'9qZ#GHՙA*@6s>8M2m[R[?95-Ie^aۍ[JhiOJOպorٹ?)!B!B!A9B!B!BdtC7d%ɢzwA~#q"#, R34I=a謃u�͎R-*`dF:̖${59JidHtTLAeZ1T*hB{:Vd NH'eb?%Qi? 75c~R7IM '/t5%+lf^QY<f('VpMهKrj6T". 6Hg횾~n賕``\ sS,!{JKZ5qkPgjWt3nu.e<8"}_3p#nB!B!B!;-cV&B!B!3l|˗7,_=YRZTQ}x ӗ V+S8rxx-hɤ-C0@<pP#$ l=smҌiptvd\S*xXv' sQ`QȈuK Vhm3#7Nm\9o:dQΈh> TRgkNrkM.PUgO>Ȫe`|&RY;Ⳡ ev1ɣ)/Dz :U]e^aBJ4hRHd@۴9WDi֟3u2O~Of%m=ewe#/g7lk7uB!B!Bvn B!B!a?Cr:}]9WDFPSP"/QB+ L l>ȺQh}KV:ƴ"Af1I%&j]nJήMq<> -j\eEp,tY�N`S3iZO�4kŠ8!E%~Ĥ̭ɌRЕۂ9'eH@הԃ$j G(Z ^z}Of3FIgiϪCpqIa9eF1Sd5 l/i:'J=3z0N$ܞ2s>ej탌%zo>e}9.[W\x^7B!B!B B!B!B!O}c]4M%4HhD`$.2 Ռ([a&ҡ\3=:+Fe(з:f,&)4:SK |6~24):oӤ?8vÖԍ{&89;$ZkW@=`B!HcQMV^9Vn6DrX\{)F\!/F4rf@5ٗ Fhl3L2޾5SHPFҎE0;TZؠty%�s*}5xPSu߼u so-:B!B!B!O.?!B!B!By^)^ՒdQqKց%0TZ] ]$ TT�" X*6xeOi]POj�Ϡ̿:t_ *ANqvu E52KFNgMcsh۠.QPJڃ�@[gGiTZXCGMlYR:"UhwiǨlkN_KEr_Q" z$|3B c(ìwk juV-YPM38pTAŤQxrow푥vrOp;O,#~8_+H!B!B!IIpB!B!B!OZf_{y/cI"$�[NZ El�3;idgV(S,@_1p% F,X >@|ӝNv Kx%PfZnDG3, A,1-CXb6abReCphd%,H6ccRKE%wY3p\3e2Kg@Z/HUg,N24Q%cQ{m0^aKҘfj mOpq" ' rmqql*C9)हgTfU5ౡ޴q|'~n !B!B!<yՄB!B!BS]mG}𴹻Λ7Tl Ze7 A#dR?J'2*$<my%&aa b=*Ia)il,<Hea؁UN%0Qr@2qDmGBD +DA0 p-kXj8_^2\߉<7E9%pT3)=̈́7-/iI ӎ?c߽3*m;0Ja7z%+ %&dY0cl-/fMY ~&۸b時cSRkO԰qoa'y]oWp+n!B!B!<!B!B! ~ ]ХKr΋TJ|7U bM/>k9B1[Lk ũYx'0^G x NءA}#R`kTgfIj16ftESwf;Qa$'QLj"%\+>e>!Q2h㪊 mUrf֕8d_>p7(D$⟝rXRî)[\7rVWsRTiU0L*FF.[ޫ"KXubھ5&n$T\W][?ZS_\v?M!B!B!#'B!B!T{"'x _=ɢ"U` %' 5Pչ$ҥH9S >Yd`bbM (-AYy͒k`+z5sYLz o)z%i_`S:I~=EZ\Xe,*C|70O5I/d'Mi?\c3|`zzYEϺΨV-J&أx,0qZ)MvuaF&hDBRzK}{(mՋTV*i:KD^ lSF,/=_vʿ;_B!B!B!O91!B!B!e&�/oX"H ayDQ*j`:fW(҇dco%XlSfa3 ců�Hs!rSIc6#I("5IKz|t?PVބ~arPF1*EFЂH!9\ۮ,b⇘:(#.+s(~T^n hRP٬>IRJ=}"fFKG$Mv̼LmGlvR;^Q>,\X'U3lRf@:O)u>峖˵uoZ!B!B!qB!B!B] yˑ;Gv;WRZq 4f1q$A Ps:ŞjFy,!ߟ8u+Vۈ%mbhsYt9-H@RsC?|O6s2DgA eBadJ1mwˢbRvfGI\L`"a =S^Vj uhaE Ǭ,ޔ -!#P'Nj2W,)bzPZˆ3ٴ_nY͹3E{Rl̖tLF;kC[7\vgʍB!B!B!M!!B!B! ~ ]ХKSue>1>SJ.]Aw )aI:Sx<aE%79#8*+ADR%(D%0qNT}ՁTmToЀR㤁HN;Aa$?e%XGK22IbQK}O>+ҮLW';|v֣H6aUV6 ư~uez\$׬ZgJF6(9iwשnYŮ܄Q%F\ :땔SjPz~uso-n!B!B!$B!]U}\GBQPBghVct+z;zڊkKIxGlBJc$q#WI`cF!$${ޱ^s;zʏ_$^{{=>|����@ϯ}\x,ȴ{8z\7uAö8lmĆPX�^5E& ) 8Ra]P=ceҜR=] >Վbkשm׭m/v%?/<o)!"&4mJ3 R棙ο?F6վ.xcWFņO&#s;qbi|͉+.E|h/,h#ܢ_Dߪ>Vj?O yXlUHE3ѩ4xЎ?{ �������8��������?ޫ^x,f>PLﺲ{¿SSMiNϊ2qsEgtxZ ~p?ZS9T.9LQV|C>̩,R+Z;%Jtq"yHUaUҐQByzTPf?!tLnmck7<s<ahyqG*Cv UGbMp9| &>fvZcTN~j\01IX[oOri]թ ֔<ݏϝ;oY5_=wO��������xS��������[ _3VZp…VKC$%Py֊gpؖᦔ5%=Z <nIF~gԃӜRͶOBB/MŔFT]u, mm6]y|6>tW?I, G}tأ U/6?GbZTD5T!F%ms 4cN?:xUDN>[[\(y9hS4Bzg fݬX֔/}CA\lhu|W;�������`H��������+_zY/x)+Vt](u LD0i#|; 6'9=n ĴsH[1r05RGq*bNOqud6 A.N7薆Rǫ?o=`Jz¾4sj$QAՏ{HowFB!az.u�džD|ӵ1! ?}SȍQW+S0>"w"_|!.$OkYL|Kh&Gu�5N9 YB->5Vyu M`j] X9o L~X߿ntE��������Er�������� xk&+w, ˥ywiNi "BF:GE~^Vgлp}/oM'*A~s2I{IЍ*S7)|xT#T{컾CS4c�JTkLp'sL#{T9�Q3S#<K8Ņ=j(6&|]"b8yeֽ?Q|�FSZ0s(DF:fǩ\nLe*m6URgj3QLڱmg�������g/��������m{Շϙ=&T!=It8%a- 5n(cX7\?4OЩM%=mm<7oB*U%v7~\ *ϯ$IYP5pћmÈdioTWX_AS$?|P%$ĆD1I·IZZ*( tNCr]aJ(6IyQ9^}Nz[{%5؅uD1#ShNJ֓J &Me:rݓϲM:=4(uRFZpOlgg/}{�������Q[�������/iayɒ?|/\TR~<9E?Ip}^Vm+ rӰaI /!|)A)c9oɈ 8mdI tͅcQl"n֊?4 L%ذE{&|}3VKk5;DCq1q45VXPf8WtW,omu*r$. IQl6\bH;Lǜ C5a*L20v>wq6J/Tt%۷w߹/?�������P�������/=V+B:<EL L=!LD?쮚HL[C Tu2b#E= ss&_` B7tAwXbo& yFx +kٖ8U.m|@74%!Fh<;߯�� �IDATTKp+W"{:l]F5~GS)S vП/J#TWma6;ۚO?@|[AAm9"门/>%[;T#9j<qcLFkۺo_?/x��������*)�������g_6\o_"GCy\rJPϒR?]?@S  )#T�dMzN_KNs>ҷK耏 O9BC ek kC)A pGGHy+P5sF[R##gwsQs0m(U`%H~)}J>!)~7ۿ\h5WCm$~ry9RW0R{7)ػ$z=.9]Kk# /9gdYoxg'<�������, �������xN^vOϙ=WOj9B/$)lNQ(<;_7\9rPOg]~6#) cNTT '[V4 jW${pc\\ Kg6npN$nXM*f8Pf Q)I{Ԇce5}on|2?OB|ۉ=u2BޫO)? >|".Uɻwh!X^}Ν۶ç> ��������-o.��������x;lK+8ȅ&@wC`PA!UDat+;fHƉ|PP11k()|A퐉}C!hI}>> d4L$PRz2E:?41?^yy8T-!p4Fk]Ѫ֓-բߋ!9 Pb{)\)ь;O6l\!-6K1Sb>NFL^+?;;}Me4=ߋ ۷r7?ģg�������V�������+_zY/|/u!C]W?-w!*[Ai[z?&}m`>_5HS3˱eh'yM\tuEZ8&,b't0ڧIqِEj0i6{.?J 5n*%>`#p[͐9T_b) UwY1@ĄXdcG&tQ~[ *>ʯt8%=~b6} ^smK׼ў[ơ{oX_�������R#�������}]X""S.{2~:K~6>V!﫚|D=P)RńE4)-. LW<f4 'gLM "p]x\ՆFbBSwDDI!Rpm+>PxьSyN=W<4jʟW=>z nj2gue %l 7IS 䖺?m~uo&LU#ۣo,S!״ʿ{?퟽㓟_ݼN��������C7��������<Ow/;^sfg}~]DfL>ةP]x/w 6J$r{k=T z/jLB~޶N <AkbUGOf,&۶1%>1}?"ZM$|p0EOs?U N-ݠC?ӟG}8P&j{:L^>VI8<}Fs^3״4Ѹ1�;~iT |?nY?;{ۖ/{/ �������RM��������ϳ[ ǖƪU _0C*Z }ȽxiRI`1?$t#=#>.PP#=)A7q ,n)pqSi>gHz ᪖qD_j*KVr6&*dg^WADAu`cq8ŞC_KשPKZr~M--4VyB9u-%v*pg*jEC, wEOLMnkIur98VӴ ]J6&=^^֗d~<۷otwo7_}lj ��������<��������yʗ'+t"IH7,ئQ`s戴WPc@LH5޴C#~?G[J'LNl3> (Iꈠf'%Ect 4:<W&ImD عU8yվs5Tiҭ)K ;þ=[U5*GmsH.݆/m.*"l4ݸ3?`u)��������o8��������xo?xKCV@%Rޟ)idߪt~"!|;.ELTIf&"|h'ѯC&룆at޿D|HzB pcEPLR0'8$Z-{eerO Ir \?{7u3JxY7Zg{|B&8f]tʢ ,j( ф/WN:P/ӌ5&?>-8d7'<ղ����������������0~0{İ;;{'.5fyjRN$C|n1D۩>'3G�Q:I:~za!7c7vb)e?)5\RPuHjPG׵ŬkK! }OI}>ުm]9z{jN<sC+#X̻Uߏ64PKP;9t327)ͬ,q\|+6WpzkOl믞m=Z�������B���������2r޻>vg| -\("3$skJ- A|OZF S8ŵjר Uz>x"p#ɻ5p>L5&y{Qm'QϨ@LoV^s.1k%4?k�Q  mA`i\ ᗨ-u9T]I7Jާs܎R_e[K.)Qs VhvH }g*Uu |Fxc7yv郞�������E-��������W8ӳ\??t%Ad&S̸yp_TCH σyx^T%STO6M.H15Ԯ!: uHP}Kuu FoB)cM7"b"\.ϿWƍ|>ͥ_LR_[wQqWLض5kIm)z b4|Qbn<~+7$aV$St:4]eC)H>y4EbDVL>,1A6?ؓm{w?XM�������n��������pykO+NZti1ςt>>}?fZ<+4uFlKLD=\s#]ڦYMJ[\dתW7_>B&ii \:a64B+sCsFt}6lgީǘ``D(M,>Pac;t ċOisA ,R/X} Yj~5K.2Mmxm[?vWs��������5W��������z/{9W{D3%Jڥ x ޴ěa9_BC.6Wt@q;o>ʘR6kDqLu4jεTtG+X]5 C<i?C=RO%^ng9)zMKXdhh%eOޯ=NR#M)aj{1JRnN1AS30l,"|}c_{1rDQ?vݼٯl{>U]��������7��������;l|],V-p|Pb!t}\l!{Wz 6d9&qL5-aHݺ"f {SQ%91Ӵs}a6pD%jFuc/WPɍ{em zځ=b]3WJL3pڣ[TL|<J@VOףߋuj"}MJ+PbTF+ngv*>! GZ?Fw|[W|u�������@��������/2|q_Z}ᙧX!u"q&SF1+M0R@=oTz0^~ʎnOE|ND|:(5?Vo[O,ߞ *8QTtUDW`Cct({`K"+QEZ&u0KQ }ZZ$U)k2iJwNY%M܇ |-=u*1{usIV83ʳqQҹs,2R?غigno�������Ť�������7p\|xK'-*&tQo�\h7}s$Wv~h=/)AVX h>ΆkmC |ᕔ)دC.L2FB'q3סoh3<@ߖ|Iu4 /ߍqz:Rߒoa=']0?<#wl>nt;q},? GmO~r_]](��������/BS��������CNc>_xD1^P=܎P(9Ȣ 1}JTu~]c ;5HP!`/*9Uf'jlh攴V6P)s|Π>Ȣ5: +}$> #R/{zm\Nt&sQ=ʵZL@HWV3m6M:\OHMݿҮhV@Kj㔵3VlJeOlfggS=��������U��������y//x%K_jՂyG$, Zyה.QM-)RLHǙsKOŵ {6HYؐMj$0s~|lkVh>@5a# L[zŴSb[u|G5B"^#ҏ6rk Mw__-f~\7j>rQֆh;w-__}G��������b7-��������W8Yk.|)]7I1ɑM"LD7u\Z<xΝ VlY#(m-nN nf]NNt TKdYjUs{ե%%4 R)0iѭ+yd[i7DRD}riЪGZJJ+?Uw{շ3/{M Ֆ[TUJ#l ܸ_T/ܕ mݸ\y`5}��������7��������p)~^tDN[#t(D|$(ʾ>7rh~QcX|Xlw� H!U384J{,j-C_Զyԫ)b>60hZץ!G|Z?Fy:PjDA=h.eV8YVM=?$|dݱ$V*hP>2yo4plV~oOvx wZ偯.�������L��������|Ǿb8BlyPSjNOpK(%3b+.10~/mu /nhEJ0:,QkˣR#&p`UL~Fޜ &=26a_CQtX|_^PB)u4!#YvsM-jK镪V"~ZU@)F_uݔ4o\5-_ួOUW�������v�������ܼyɒϸ|_dF2& Im ҆ܒJtr#v fIvD*9U0:\P3W  tuDi Z-6fZIsn.q̚Њ[^Q!FCJ")( �u+^%gqbQ;|'C;꓊iݰ*R߸L Q.:ؓ?6{wowW۽�������h��������p{K?={gbEGdfP\b $7L_DTTѩ6|( (nHѭ/|}~*.8beHICk5tC ߜe u;Iw*SqzA4HM+:t}b^ǭu}u[Rt[u3n`3SA#i3n^>0lg1ۺqgn?P/����������������1o8}׽cI<{1Vk$Ƀ9RBQb�.NY~T\B$Tـ|. )?ȋ'+K-k/)Se@ fu9o:<ߛS(ד?&V5q&DQGԑBߌkZfj@JY֧cCUńER ل}?9W5T>qzÿ\j_] �������!�������Cc>rΚ5_6<dщ`OԼ"+*`+WTķ :P1w0u"Tuf ƨ[u 4fB/f*85غd^gJ|<%5HZB#䱿&l}~í*~<# ,QFj`1(wd6}G" I9HUv2=FuުB*v k1;-7pާ�������p��������vKyؒ Z`ޑG= yq+ϸ%*biTԙ[m(3Ϩn^sWaTѯh͠I DZVK{.lT1csV�I4ekV{KpmƇztkk ?1',dj2ɂʅ攲o5CM(J;ry\82Fw|w/~튯>ģ�������8T���������yˏr.JPOS0 *!?ȟZXg!FV>UkΗ)U!Boʨ'CavUE{?~I c?24j?ѡSESL~4y5+}{JrX+6KjN4m ߺqzOD��������8tN�������`?d]{[~}e&=|9ҏ tC@z >T�� �IDATXz_l~00L5-m@`ԁ4Pl# ]Nh5ZB&?Jzmdzi6,TԱ` UpŇZqh4(1Tأ\mrH$t!Sr[]X%WWBbB�U*0!{~ׯ|�������U��������|ǽbbTzN0IpA7"BM @0ۂQ|h@I6[QۻLH$)*-~~&=h8&A"*Q)\UKL{Qe ÔO4_n`>_?ݯSQd()v̂ x'C.j|2)nvݼav-{��������@Q��������9o%K.8UGp8C$&hESR9GyT$1EЉLķA}0 v >/}#Ɠ`J9ξ!I3wݘRj:iLU*M.` t(zf1:C+u쩄OA7H^;۞ҾmKJ&<Yݤ:9&Ro77ZݛW|;U��������w��������`Ы^~|+/|ϩ+VLKcJj`CqŵQk,Lt5Gzk8`o@{IZA2}01RT\#%:`oR 6R` "RA/V /JT/CklL#q= ŬSKaxwoN,>5؞m6]wʫ?@5g��������0p ��������7p׽cHXީITP:G$o/-:a!H8 H-Hlk3Lg %amGڡA@5 [DZM,zݤq)a۠I:H 4+>c7>>#TgAfUUD` t!sG5e떓Zk\'N:sC;oU<՘��������``��������gdoy1=>qQaybB&>'ܢ"VeGs&rh^"4 X݃;pP|Pu65ɘJc1QFpCIۅFhie4RV‡SJsoWE?f <'[ĴbyofmHavݴ۶|XY��������?S��������x?9]3VZ0#DdiWLH vFyh~%%PB;zXJIŵ`F+`~#ڀJ: >tb{:ذJ#У%_iGf?tJZtӋi ~=M4CwE D>Xjiܹh$QZTJd0Ѻ]W{j~��������3��������%ˇϼ3O]"H7WLW _R ZԾIxRP@oh+IZQuLJﶕƕԂ2>nIZȁ.3]Qk7ض|. ^IHRF}T&!y<=)BOh%>˄: K u"iD ~mt?^v`��������S ��������~eo8d]{[^tD!E<}^Ill@>f@|m*j'UC 6c|Tdh>QLGfڳ]mQa|Q#:D<`k*sJkƖطᆔ]&4~ߖS>C7]N(FQwJus墔v8垟<m>-Ӯj���������������<+!c.:gv^q a3}pR{AL 5I~mWlJ)H-ą@LEl%]Kn1)dOʇ2|n𡔨A;D7L~ 睊>SUv-S5M*~g&j=m^֬[WT1 B>#}?{Wmni@, Vy?o\5-=յ�������_��������Yqa .Yr:.1PB /@IS*P@(t†0s-'u7I}vUtb#Kz2!Ն/uSS|^;zڕIN߸9S#$z,J`Ķƚ`%%p3ۻ{k~kǞx��������쩿���������ωWx٫/|(3g /oz@޿zF  [%^~$UHnЈUp_U:pXRӇڨFW(J'YF:>vS&hZaҒ&iH!,jz%`"'G\|Z/*O}}6m/jO����������������<'p/KLJkTcy?''M0z{Z!z=^%VQܫn>gUǾ.I#N}D)+P-ycZܸ9zΣ:7 `t$6) ELGl ۷p'V}끻vU�������L ��������?[~{5hQ0#: ~TD0O )Ɓ`ޥC#S{UR4&ܙ߷T{6tI_Ա 9.pp5Hm*UPeNOWSc&!ߜ[T61tbQNƧ&jbiVKt=O<kחzm[>w{4G��������ϝ;��������9>t?ȅ!߆b *C3Q7*!=Vqaմb +`lC&-ѝCt"7p3a&ϱ^*҇0buş?> ηިw[ >=Fdž [|oOƹgG;sӗ+:�������Gm��������x޽eG^}Y\"M*Q^*0`)HhWq'h5Ն"j$ɯXXRO|o 7R-%%}Ü/:@B;PbRFu镪)^;2<(ܦ0O*T)5E:RB?P'ۚbk3C|{?seWo9�������m��������xA '_+X$̔9D6KdI#xRׇ,BΌ|]BB. *Ň8ć::T_Q+ZL;^5mNf:G GMmvO1C 2j^ TKƵ:bá ;&]{ڱmg}bշkWuA��������A8�������Aιc>qo93~_8i\!ZZ 3LĊ.lOIWY7"U#u7y>xyq(zߠ&SZu*ҖFe-#d@Jږ/A{v]_5mOS��������xᴿ���������/!-ؒ3Zp…!LTjRk6V*rQޗ8Ч" (=%K:(*LĞ;51Mhķj*UI& ߰&C󲫪$L']cYMgi՟ݑD.p&߬ROC)1Fg/׷={G&��������W��������(|qW_x)ęa2BL@EPJ'u_7cpae( }:QDZ&CO7dJ7PL=znQpϤyոF?< S/6>vmPnSmt]��������� ��������p@E_^qүc0Td(Ta'4>tL tzo'0 +6L{耉䆗֌c}T}-)%MibJ6q&hc^Z5iIiñl!M^q3{N'VզB#۶^Uz]Յ��������N[*��������p???8^={Q', 3f%!*%a4ڑN*Ѯaǩv.؇<{qDCǨэ$ѝۯBYh6y{#K0si7njL[ڍ1QRئ#Q=`"&`>u%PyCv{]_5m{>5 ��������l��������/Y <ҥ+Xr EĆT(mTCMk=^v=^|0i_ }Jh_Ρ}N{L ?r%ԁtf͘AdG79sO'yήMEPj�,1ءpJUs(ᔍѾw|wv>hu��������V��������^4^}kg{NBTAtGP4Zђn:g%1Vc}c\C)|‡84O"$l#Ĕ~Иo_XniU깏J JϩC+ o'=s`J7_=mݴ;.jT���������/o2��������o,:U.|KL[TrG+&Wu{Ji龭qT%Bфte$6R&TŇHbNPRS4$a8�[VL  R1 6xbKv++ pSP4Wc'lzOփw.��������N������� 1,{9W',f|U$4X Kݢc>RѶdaDÖ́= xb[SDԡ/ԆSFVJT:$zRFd:D,Zn>z]Gܾ8igb4yC=*!{]7}c/o{>U] ��������x񩾇���������/n[ <w\(fE92UB*s7t(~F.JFi$ŶitQ3t>m\1כB{#h"9U?FJN ݈?zOVleiN ů1htw֮ucw��������8x,�������«z|: ]Ii{ z4Q|$\o+Pa0&Q.JKkSn)L#]Q|#ޞsi=DV-2#:-d\i?9Z0=A?d]$ڨFLm6]wWm{��������)��������~Ss'.Y%trKGKRG.R!ݯ6;.'j q\lHEڰOn4S[bP 4+UKj^1k%=jչ&ۂ5m6R)9s5΢&[^]5��������Ʒ+��������`38,gwE"a_ 4^O5C:0Q<H%cJ[\崛XRCHDJB3nQUsp-/u8nL+s1#UbV'~kחz͗|>��������pp!�������!da /]bf.R[:j.%OA:״Q]+҈7vC{qaqE_ FVcsRK(zVSJ}ugTeU/!ئ{}G} Q}g{j��������4��������/vUz}HHߢ5 -GD5Q^L@ErCFaԡދDC?gֻ'CZz ̵ ''-(�J|);疔` Q>d-6޷m~U~V��������pp ��������\o_"L%Q7T"Lb k-ܡLk3kVZXѴHN_k]ZsNIM&*?zN<:S'Y'6S6>֭ׯĪo=x׮j1��������!��������Ryޱ3;kGhR A9cPoNaOjH T ;3=ݹ1.QڢZY4w*OQT/J\l ,jnWO<7}s/o{>���������������01#>3V?ȅIoQj-%-gp%11:TdGɆ*|]XjFi|m2=~*Ku0NE_F[m,{*#7G[ƻ?ucwg��������P@8��������~ѳ|̓/8?ХJb'6:q%>~@Jh|"Q%))9=`ItY4殯s}cIlIlT$[KI:|;lo{ҫ=@5��������p&��������ˢSs͋߾dP]$AĄKlƴq%:ѿ2XWZI#H $f8.ZZs1cOJP򈡜;'ΛStSJA=mw^[޵��������pk��������4~7;sfg=j"II0XNA_:R].=6L[ZBMiex)v1sρQm ƹ 1zgM(Pٸv}W^y۷?wOU����������������Î.?:c.Ttˆ萉T+X&ZE6+ ~N {摤'P[J4>U\h޽w-7[۽��������z��������GF: DL HǴc[/&ӆ.q)ult%ӓLxsȂL*)L�=y^)@>=u]T��������e[ ��������o\t|<i%《Gm%GLya3LPO@9F7P7T#|>evņOufԯ3)Mo;o̝փwzf���������LN��������q@zޱwvN\Eq Ē.D _ ľnDh߷F~LlqHhif|9EA53ZSmw?kח6޻Z��������!��������~%;B>KhU ;raLщRac%ѷLvm}9&bZZi3. 0HݜB1hQ7ht֮O��������/"�� /IDAT��������_«z|5: VЍ3)|(D9|h#ȉm\Q>ϭRBĵ4JPb` soWO0W74)nu^���������~Q7���������7.-ع׭9iO uHFׇ;&Z '2gqݦbƌ*7RSZ7duܵ1��������_7 ���������qzޱk?jѢ(qY#,Q{Gi$SƔVCTÌ3G%H-1f;R2u.@ic端Sr$&Rlw+u=���������~oA���������d\pKU;raYVFaMV; #0I(i]PHIsJ# i_d=%Lheho|ԭQ��������P��������,{ˏϾCgbETGIze~v$ƓPWRCHZm&CPb$*lSLZ_0J{㚢kdgb_73ʍmx.jTc��������<��������*לtۗȲ辬!.If9nض0@JOs.7w4>xOvl~]���������s��������,,~7?pEgwEPC}CKdmS19odyRPŜ0V0]?ֆ\l~ɝ;o5_`ާ���������+s~��������\9yʕ -\8nRh4ZM$C #uPvhQ?@ @LL)\kZ2~l{7?v{o�����������������z_#u BbRˉ~;&nTZ!ו�F<^̱hJ|Z)mQu ����������������E%gּN 3))F#)??^7jUI֭)*p4V#<Ӛ_l~hǶ7ӪUX:��������yV}��������B;~7?pEgE",;Z%%*R^* L$ K$VQtheoW7oOܹk_[OS��������B��������x?KG3\0ȅdJuDQ@t d_`">t 6}XAbZ5h;wn}lj���������/��������1GF.:?>7B3QOMAtkI+HTHng)'Ŝ߆QpK#l{y]+O&��������`o;���������o\[s[KD˦I}IHB~A\$Y J*d8_+ҟwC;mVՁ���������7!���������qwzޱk} *"U�$qEe 2٧F`tC=O41O=~m~?۹v5nٷ����������������_@V\?Yr 2?^"%xRS\dP(? K;UtE[R7F޸n ��������p ��������xQ:g{'fk7-'QgHLGf)aKŝc:nt흗���������ts}'��������p{ӢߒKνnI~Z034NiI&rOƯ |#չY6?߹rY��������"Q��������"3[;sأOxLB*Eeb܄*U Lґ,)0~͏?sM\[{=��������^��������Î}||ժ;raYm ,R-&vOTq7htnZ{?��������h��������cz\tU|)߅'!gK| eI%5H((JRS|J,},%6u_qc������� ��������pzSso}NT:&4IW %S{l~hǶ6?pN4��������p0"��������jc/>k?z"Y6tQ7 Jߖ2mJ7fXRϛw?sM\-��������p �������� !,Yr#f$҃RM$kQB߾f vͣѾڵ7wps���������������pH9gY'~6'$t2B *2]Jm���������V,���������7.:U.;ٓv,KWA�J^%nɣ?ns޹{��������j��������Cָ-o=ؿ8k9nL !S&M)Mټɝ;o5n<)n$��������pH"��������y !~;?4rÎ\%.QR8egRh4]ԭ#�������C��������1/9}C,Cq_8m6][!��������yB8��������K>Ϭ9ii 3dCn~]+Wn~Ν�������������v@�`@�:TvPԕTÝ���23έu?������ S����IENDB`������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/package.json����������������������������������������0000664�0000000�0000000�00000005372�14467713645�0023773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "@rjsf/fluent-ui", "version": "5.12.1", "main": "dist/index.js", "module": "lib/index.js", "typings": "lib/index.d.ts", "description": "Fluent UI theme, fields and widgets for react-jsonschema-form", "files": [ "dist", "lib", "src" ], "scripts": { "build:ts": "rimraf lib && tsc", "build:cjs": "esbuild ./src/index.ts --bundle --outfile=dist/index.js --sourcemap --packages=external --format=cjs", "build:esm": "esbuild ./src/index.ts --bundle --outfile=dist/fluent-ui.esm.js --sourcemap --packages=external --format=esm", "build:umd": "rollup dist/fluent-ui.esm.js --format=umd --file=dist/fluent-ui.umd.js --name=@rjsf/fluent-ui", "build": "rimraf dist && npm run build:ts && npm run build:cjs && npm run build:esm && npm run build:umd", "cs-check": "prettier -l \"{src,test}/**/*.ts?(x)\"", "cs-format": "prettier \"{src,test}/**/*.ts?(x)\" --write", "lint": "eslint src test", "precommit": "lint-staged", "test": "jest", "test:update": "jest --u" }, "lint-staged": { "{src,test}/**/*.ts?(x)": [ "eslint --fix", "prettier --write" ] }, "engineStrict": false, "engines": { "node": ">=14" }, "peerDependencies": { "@fluentui/react": ">= 7", "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "react": "^16.14.0 || >=17" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@fluentui/react": "^8.110.12", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/lodash": "^4.14.196", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "babel-jest": "^29.6.2", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "react": "^17.0.2", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "publishConfig": { "access": "public" }, "author": "", "contributors": [ "Heath Chiavettone <heath.chiavettone@freenome.com" ], "keywords": [ "Fluent UI", "react-jsonschema-form", "jsonschema", "json-schema", "json", "schema", "form", "react", "material-ui", "rjsf-material-ui" ], "repository": { "type": "git", "url": "git+https://github.com/rjsf-team/react-jsonschema-form.git" }, "license": "Apache-2.0", "dependencies": { "lodash": "^4.17.21", "lodash-es": "^4.17.21" } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/screenshot.png��������������������������������������0000664�0000000�0000000�00000435621�14467713645�0024374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������8q��BiCCPICC Profile��(c``H,(aa``+) rwRR` `Ġ\\T�Qk .ȬͫOp`ݦKcG\)@$000&�% v -Rt=N׀I g -d?uӑP{nP021H$XRAIjE v/,L(QpPg^(!?�#B,)q.PP!%VC20(H,BxKqͽu5^.c`` �%am���VeXIfMM�*����i�������������������D����������������ASCII���ScreenshotK��iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/"> <exif:PixelXDimension>1216</exif:PixelXDimension> <exif:UserComment>Screenshot</exif:UserComment> <exif:PixelYDimension>895</exif:PixelYDimension> </rdf:Description> </rdf:RDF> </x:xmpmeta> %x��@�IDATxDUHPQDAb b]{QaEETDQzReln~wޛdLLr3_9S_kF&" " " " " " " " Ŕ6tX" " " " " " " " "H�SC($ӫ�6 " " " " " " " "P H�+֧W'" " " " " " " " Lm@D@D@D@D@D@D@D@DX�VOND@D@D@D@D@D@D@D@ڀ@& X^0bM@X>:8 `j" " " " " " " " Śb}zup" " " " " " " " D@D@D@D@D@D@D@D@5 `D@D@D@D@D@D@D@D@$ kH�S($ӫ�6 " " " " " " " "P H�+֧W'" " " " " " " " Lm@D@D@D@D@D@D@D@DX�VOND@D@D@D@D@D@D@D@ڀ@& X^0bM@X>:8 `j" " " " " " " " Śb}zup" " " " " " " " D@D@D@D@D@D@D@D@5 `D@D@D@D@D@D@D@D@$ kH�S($ӫ�6 " " " " " " " "P H�+֧W'" " " " " " " " Lm@D@D@D@D@D@D@D@DX�VOND@D@D@D@D@D@D@D@ڀ@& X^0bM@X>:8RBP,^￱J/_T\96/E`ٲefÆ JURŔ+W.6/K`ӦMfdɒbŊt[YLD@D@D@D@D@D !VLOMIXT Ӂ@͚5kbU93͕W^֗"pꩧc*uᇛ;6/EСCSO=eLr<xpy(3 .mq]w5=zMKH?ӧOdVZ9_3E@D@D@D@D@D@ҟ<<G}8qbl]v�/"w'~wU;d$%#" [p#M<TZլ]vࠃH@X;n`nm;UWғYT{1;v2_3D@D@D@D@D@D@ `E|߾XA`޼yY*ڡC,4CD@D@D@D@D@DHY�۴iټysK*eJ(82%K4ݻw7m]qF &ŋ5kz꙽۰իv.]Exo]vɑPa3}t7TV-W뛺uFV/ȅAmO3?6n<#of,Yb/w97k6jWrxƝrJSN;dvygSNv|tұ}M4L< &@;`7n+ˢE\.6QL8͛'霴T~0ǵ &M:'7rЭ[]q2w>hk?={k;=ӝ6i3\ԁvqƹm+Vmq-9~s49.Kvu}]|ysi; njcϟѦM-Z*U}v1pp#| h)Nׯ7O<x#W_}52:ZAlƌ殻2}]r~yg<̤ Bꑟ9S;<87Nl; rVZe*r衇f1pذaqN .]8Qǯ+O>Ǐo^z%'E}9\gq!![駟{N:kT^=rs*9h'suE 矛7xuCbԋvq'r.b;O{,b1W_}=Y 0sȑ桇rm`vkÆ ݶ8/Q|1y睑6waM֮3gΜ]={. ʑLD@k_29w{l{E}߼+Y#xr-㎋-K~^o6~O>d /~86}7>l h~ ;9\`N:$SlYW^D@D@D@D@D@DH)ϟ/8r!C#<2E:< /tE2u';Qr4Ȝr) / =묳\1#wGy�12}ӚLb; Q ~:\~푂/ydGqꫯLa/axeFR ODGe3vhQem!4E/<LFRG޽3gK.ĉ%Q:o k䧟~rm->NJ #p/֡s5 o}]MǵǍ7Wb=<| ^<̿D@D@D@D@D@D(HI�:@<~嗨Eyx }gvOu)Ϯ׌=:r5:w_x3~mO[\"dqfYV#ꨣg)eCty4O+ "^_<3 GbW]౅ 8 ԹW^:f>}TD#T N/( @mv /²..ҸTq#"z1c ,yfYA3D@D@D@D@D@D i<;\9 pNI!ux=裮3Lx![v9k$bÇWuHڵ4.ʓCq!t{,JŒ$+0ދ`Gp--yյkW%"l5XWD+#p²!\Ot?S],GA0pF8& {tqVZlW>sqᘴ3]$$4h58]%Dk\x{ǃ }Y<* WkO_Յ'hӦ Ώ0J*sL\<:<:!2pJ&zd=hs1B}8 (n9W ⺀c8\QUm۶NyRkkb<m:a=%9AYLN,ht&PFϏ%&w8 <BY07 'E! FZ>`_}"%R&;v5jI�0Ѡ!==`wᇻ`ُ>(@W^Т#O47pCVBDBA3?i00X IHDls͐m=p J ڴiӂNݖ-[خ7D$`{k.ٯ$sa#4o0G=BF V8#mv`n958!0zP(}�Gdfb` !Q׺u+5B{BR]D@D@D@D@D@@rp$CZP$DUPpйd4ޢ$ _,Ý7ĶpH巉4lѩ'_[8wVtt߁itFưvu˕+6ĦEDF]^ 2Li Ch is~=/ZP7J@4 cD̠!nE%+(~;cOJ%k&QO,X�4yhaq裏"~m ΄-"<? 꺠x>S%xq| Z!vrM|d2(rF_ժUX\sNQ<cT9=!;xxA et(6=˘3-*SL{v H-[,z VBz :A>!23':Tzԓp^LQcҥdOD O0DBa?V_8ЯgA( <sb<8�'fԓ?+,Nɵ#̵]:uXb|0߹Lex(&2cN5L %Wa\+H:vy)Xv4-" " " " " E@0<ux n$!/^Q6zEG [k=XXoTDHTjq{a2u/h (Ex #܅ dFaX�K%ԬYZ8>"X χO7X(q%J |VX@!Z"#L6.(իW/^Hp( Al޼y5jT&A&9=zZe^ ^<q1Xw(23D@D@D@D@D@D8ȱ�@8Ƀ:u>ιꪫ2KeO` {HNe'2anw31JS;S&F$B$gV&,pXTT}\{?*O@6[~qܸqY!_1,蕈w0D(.XNq88^x,E3B<U1cd*֭[u=6*y٭ʋ@qD!my/fժU1^;= /(vXc_~.40a T{ƗtI$T {͓pGn . x0Zcܴ (oG>?D[B"dA%}uJUFD@D@D@D@D@D{%d!,*мafr/,HgB4h2<,4aQۍ\{cqEr>DuG)Dar~~2_r1J8(/0�Y0EXX8ɕ]OCϤ ?✅Q q] gcΗς.6cѶD@D@D@D@D@D`k"c,$B ~g{D$\og "Q7`Q^` ( %I&`h'C:uJZr3_*5@*Q6mڸ?v8qH Sd9L~'%tih\caODq7`6E \1Ϡɮ3W"١SG1=_Q4ʰE>>F's=3r|0njXF~T,Jy_^@`N"둿+QN ‚ 0DH;:Z0t2dwy衇2uɩ�Fe~]"9W}kDG2x>l#>Syr1+ۈ駙D=d)-?>}yD#s=׍4' ];"?[N[ph6dTۣᒉKk8Ѻ.[:^ʉB _pRyĭ{wq\wޙB;, l2aÆE ׏oK?h {̨{A xכO>9K5 ȁ|~(B1y@$4-8ި&MDϓy/<iӦYO3�šjY*WP�(Qug7'pB&1-|]#E L 6r]$KD@D@D@D@D@'Otp;wv{e,\~O?Ib 5͛MK.˼pY<E~nlQ9~z!̊Zxq䮢#.zիD ,$?e])Gu0%>jU,mWɋOŇ67ߜIL=E e:#ݰui XR\^`GEguF")xV=Z ! # Q&E~N:%<#fӦM.?e'2x?[oy<Gmrb1`SNPQnLBm۶.82Xn|W]$]?^^cƌ1O=TB0oxzqy88>F jbiQe?� hN:n /|C ˯vi]s9<hZmb_7pe]ZFÇgmPUmkOP%hw2aE(ڇ%"�"q}W '00#IIs#'9bl}gWp;rGXg~ `窫rG0Q:!$/{YBЮJ(=kDۻ[b2 `LAy_Hˢh]zw-yb gh8|08+^z/ʹXE.M@$/!BE]'S$|xĞ={ݻ>vRفf~_{oIx9$?]х` Iw"fA|_~'&\[nYuȲ\`�ut8'g.] OxwT"cQ9$9'/l1~.y=zac}qat!~oJ%ɷߠAN3!³-1"^DiZF(Y2C<z[?rbx a_~Yr"G˅$=އu$# /E~UZ vm E!.aa˯Oi m+QX&bx_V|lm>wق" " " " " "PJQ l5VϘ1Å/.Xl.xb$'ٳ]rwº d[f2YdWf"E�_7}t}֩Wp]eʔ1nmgJjN'±�o+5n02bvs@i\5rh%/Myr͝;7vZ.H[!cy.%tП9mvuAKw6yތ< IH/5aUTq#~ 0[PǞEAq~D@D@D@D@D@D  ��RHNSNq" " " " " " " ")@fZ70c䒉'u(e|G.O?RtJjr!" " " " " " " i@@!ipUEq9Ґ]&" " " " " " " "M@!\^zI*gJ(L ,L 7`N8\lAA@!E<5ʬ^ڔ)S4hԯ_ߔ-[\U' ρj " " " " " " " ",j" " " " " " " " O@X@D@D@D@D@D@D@D@D  H�Gڴ@�V@5G6-" " " " " " " "P$9P D@D@D@D@D@D@D@D@|M>RTaefg ͺ RYX)Wkms! cl]֬YcfϞm/_n6o޼ufmLժUM LŊֻĿB:" !{ig`l4KD@D@D@D@D@D@7n[d"gi3͛7O*%�K^_ѧ.y} h!x~!~UV͔-[֔*T6(BG'7n4eʔqDmڴiKڒ {' >h@"@c:uL  _%J(Zn5J.mJ,tKfI}$棥" " " " " " E�aeʕUtNV[SYDZk* `[-IlVx!NiT(@% Ȟ:U\D@D@D@D@D@D@D@D R2" " " " " " " " E"{TqTH�KʈYSE@D@D@D@D@D@D } ]֌;֬[̞=۬Y&}+٦M̬Yƍs�VϠ/" " " " " " iF`ԨQ37x:u袋ȑ#cƌ1?|tRӫW/3iҤ\mG+ `u>T(>Ӹqc=أjȐ!_ʕM޽Ms^JDuU,cm4^kyǙfպ neJmcZ7a~ԬgSWgZMۘVz3Zm*+mjV*ipYriX)Q"Ӣ༭XԯVhQLҬU'-qod̺ٚ Lko4KV7;ԨN .^ά9Kטm˗1\幎mҦޣnc/{AT:oβ̈́f*~#Tɢh} [Mm?ͤy+nu5˔ oR9$Y=[{ۼ?ziz[6:Yjz=DVT3믿n㏤ỉ'hԩ,QժU3t˗u4!hK,qyºΝVT3yLժUM ٿ~XJ*RJrǐ3\>lOd܅^h?xsx\]y[o5;Yb8p -Ϸ桇2+V4+W4xѮ9s||W1gy-[̴o?\74i> j:(w{%7'|rpvJߣz)Zjj?b'ӯǞ?FO7MjW1o\\flzvN�Vp'~S13i~{D{>g}G9:O5t9Z?Vz)OǛؽk7Ejcg/3G?ܴy3ώj3|{ay~Lg.}3灞ytKi2q1Vh~b>߳y*?3b`zڜҾ]b˃_wę킳sfXQO6P+͵g~,Ӟ-ݳ%~Ċ{GWhڡz %l,W}s2r~I )O|&?@Ӳa⏭0?/_kz m~$S5=3m`iXὸ/"yjӫD.̭�֭[+"׮ӛln_n؇o1W_}븇4@XȡSID2Cڵiڴ+�ѳgOsg$[Uˋ9N:9qt̿AX֯_o/+_+p}mذwyf…歷2GZ`95vڙ6m9MZ.|&A@<Q=u]1 n0TvE|.fʂD+j9`}'6yY湑̏f~+xǿm5[Fad6X~)Sc}oh=xȿB|mڹr?vZq9Mְ;gyrLY}N6N]dޣ- Ch{I zqtsvZf Oů&-07{rڗ bg;xn/b<+zI13>2 IWT<l0Yix}?JlwTdžO6gs_0sbu5?>��J&hyRx <Oa9Z7W;UX3<cve�v5ٶ󛅶za{S|ysI'ekg}Yxycޘʕ39묳ܶʔ)c^gΝJ1Xϙ3ǜr)گ <h]^`Lv-_U 2DYOE+׹ 0\hs!UNNj|=y \m&uyuM-ΆOknܴ6Dk<#/w/=|1qʗ.eV`dբ` ȝeߪRLw~32;h;m#3̑-V,2:. dCIgclVu~_Gq^gK+ܿwn`bv~Vpž6ܪ{沮M]_y?\XF&هnv[O.|ngzj•җ~4ߝ@z"s-s9z@t}͌fF=Ƿr:09Em=s:6Ͳt1/:Z;2[紏yqߐ46|z=mZtj9xS澓Z;q3_M5/Z)hk+{7Өf%qf3ȮmTre&Dvf A?Y/MB1Gxv=iy!|7m)p۞%|瞏ǛuljGJ{+i_i^DžGXl6piߤݝ}D߿\f޼YhE[l{;hN{H1羜{v1:ZhESjsep_߅_o~˘>XOwv o,$})=9uIxj_ۦu߸~5܏m½F-b7;o#̏זN/j0\ٔ~޵/3n>s`Kָ~{_߱^xں_i=KtOcѪm<px̶7xww'gG皈w_OY/sߘlhƹsm<s\u7Ev^oC}_p/ ?q˱s^ڹ_,|黩s^vl_\}EeC#_|Es衇}:_}lg?!T!x6\_pyLɒ%ݶz'ݼUV{|n-ZP2ĩIrpֵh"sw {n!BDmQ2s;̻ktBA #; vͭGcOxȶn'Ov�xiS[m MEe_%NLC7q";(]|gIiń {> ͈qtlGێ 4.o7#RuKraGC <,{w' yǾ}f|hRvXNh<aNI+ 2pS]GTBy_1'-\6a 7{3\1<nV#}+Y=xkcqdlN,Z:rǵilo{g+0Բ%o vS xK߁`qγ-} ъ@x""g;5Ⱥ xuk!x- bt|0#vBjٰ;V8 О\x7Y#a 2+Z!4cm0Knj3Bi{><‰wܥΔ_cwmwonٖ:dB+Am\g<\ :?v8 FmGUN8yo0߉mo=0#v[)czq{cW6'r5asՃk~ ҹorV <}<e=ͰLD:v6}8i.f,|? ?g/asS ix!aCxsnwU+v/a0^\.mF;=Z+*huuΞt51o]sULԖ DtrmmC'~%-&*3 ս {يLww`*G;HvOI6?nr+ԏ_`Cܻ?1 α٠q-Bwx0y0+7/kg-^sb_h`\dV.-#^z'cEԳwn%uK?v6D;>gw4/FK;hè6o<vygw^wuΛsV"/2Dի7lJ 0Q^h7n4'Nt;9ƍ$SOu>m_Gy+F~}'|co}Q"٧O'̝p ;"#u*ر,me #|+[6sln'!2ʂuZyK`^_}<:G=y6fg&@r]eڇ ϡ}�>̷@66)ū<ؐsmt!xvuF~ۏX߬*oRŮoτ3#hCB; ^^jx&/xN0�BWxggtc?mn@wq]ͣVd#dúy9 fёGy}]FT@(y$< d;%u<7d+B a'kd8 7<sxCF V.V[%Il-Ҽ^ n VH$#,;svΣsoKmhx v+<ӎ2\wMVqNv> tFɅPqX1`sj=9 +KQO>1Ym"j DcM=,l㚡cgp?~trm/XBJt 748apFNu1l3:}h5 ݡ>e9Q7[q3'DɑDŒ%~3/'b"R vQ{~w߭)GŸN޹xr,)9c:VxLj<!/Nٷp﴿ܧ^ﵿMcʖt{_>vq-2:9҃ ^$̊q] =!cq_[gR:_%pA0-BӚ0aMDn/<||<Y"X߬hG1bg@{wy ,D%^gxVsb]Fxa$1-h K/Qh/+CLJ}Gfʔ)[,=}/~h[W̙oذON9?C55jdD]VLE!\VӅC`ދ6_*2:hp -l$}ƛH[zt1FBf9۬gTPKWh;")a7N/<kϲE77@n =i}G. Ú_,a ޲#ūSx�w 6z�N^56Y@k$�ӧ[~Ng⃶H>'<p5G�nF DD:ޮK':; _s «jIVe*I?#9dx3rwmx_-,ՄW`t,^}V|Kpv֫ BikvՄ%a2*cB!}3^Dgu(Z$ϧ!U?>![otx"/A +\O V.5+'h=ݯ"6ɶE/|'ڛ?ACs} sfx۹F{%N촥dE}6YyΜH39q렿V� mWam2V'2t=\>;o?=/tq/ -d9mCɒ4gE0 {esOł+3.pEcpT}%h{キ>|B<rHg }<~m-7F#<b~]g1'K/~n8�&]#7'Qxal~}YiӦ m$4[ǎ ӄ K-÷_6꓄֭sބxy-\6Qe5]xF )H¥޿<G'Q eY73-k<rNG%FH&ǣe5eᓼ2}$ voxa;tƵ*on>\jY&#Lou^vT/k\^ w%lGe`_y8ނX}|D p`ۤ}|F. r9 t"RRXx_ 0m]t=+eY픴dB96#ià9_n9.O |ßlZ5>I~?S,l>Tu~E4,̒p0*Y2xdGϊQF;x\-#9QB䣌\u\xv`aNI��@�IDATb+ȩ '[yϨx;m) .imջsݶ췈 gS)o)w^F zz%cZD~}?:=o>~P܆~6̖{/k<x}3jÚ4/$h~[ܺ \ 6rHw@C@D>+HE7i$3rHE("#Dj۶mJ#8Rߗ#0Ox:#Zb e"1)G2{Bs7�_|+].{_3B݊oMh |VY6�HbʽqSCU,Y鮻ڐ!5e!0|p_?/]>P,&mPz|>xwa IխZAkVeCcD:Fण^vґË'yeLO#8$j'i7Lp5|2[& ϓԙh-y܄G$ wtJ['|Zyסd> W焇犼uնxD;XP%c ۏmiδ+Vë R<^5<N8$-g5+ym]FM[tB0L^1 QbWƳmWԷ!za?4C?<$?rdm'0CўUף[|.BW.6G ~�aނK峡=sH+c!95 n[5oy9dgXxF=rݾL;uuOar^76}y >\JAn:̕CiAp3?6sK5/䷍qg:^2 Dd$u4֨Q#yE,dQa^xˈ0Hʐ7 ã A92;5hcΟ??6gr]֭W/c(B<qRO?r9ɶWoxHθ5k:*8b0 x q,lofl yt/omh~"؅#E wUQ!욃ܖ߶yM[m<1ʝ'㰍h`HmU `m04r8V"nUnʻ) ɅsX*# G'J4v;tXm{"U0mQx^kAcd>G`w)7>>dE6;tdԬ19ji;+AF;Þȏ[#l6E{&+ǎ]x)$rN8?EF{ݡz0z9g !Zޣ5׍P0&O;#U{Oڽ굟\Go1>#!=UZyŃMh/i8*ƾ-a>kCMq1o/FYx x]<<yCR/̹ÞǢ`߆E6-'oQ,߳[>ceI=em\[G1*h߲KyoDl⒗w~GDVOR2\x",ϓ(70j}s]yE##> X|ٗQkL˶ӧOwagPjU|pۻ" [o0r$#vm%^W]h`>! ɽ萈aW XgΝItϺo|[RA#ē#!?l/ @R ޏxk3Wr9Jrm~/`G.b0:Z^Hk} >PJuс?<vvJ Emuھ1y /la.4%O<"aor}zu3N;~q=sm{ A`jol8Waa<2`@cn$kNf-lvM<^aig3t:َtM8޽el7d.|hW O <)mn)V!C]iZn$Qf$jw3'b 8uhMP./M? [p>}(?<So q%?"&^0>$:} #Ԯg!�"Ot:<yV,^nWzf6ߜ0w5I~?ݯƹO""Iy\FľspK:Qs30ҡ>P-﵉~,Qx~p�]l0J5{-ƻpӹ㫺%ձSh q `�dLjWeIg8 F3}P>,޹p Va6^JaB�<ow=/':^x PY| ߋa;#0YNO?mnӭ[7 9.iݑJ/ ëk׮_~A%ə7_e裏vE؎3J]Fvވm\qy~{fLj7Ѿ>D.4!" y@%L&_V%ٛMބfc'md.C.gt*rÐӋD'o9 @ϼLA򪐼8l$7Ze7WxyxO'B,5 j)�iB' Voy0/]_.,Hն08:xLHhth(\(O#"j v*=) $@"xrM -et!ob@ 0/<AD%1x1瑙zY.;mz&-:nj,׉/R<6zUj-+o*:'}�_ɽ{i5{!ОކIqzZVxFNddF1cƸ|Zr<DVNM>%vxax!:>(˾_r؟eEQLv\>Qcrk'@5# QXptd/㡗PTNf^_/�)#KUj{9J䢖ya! +r46]ޑ)䙉SNFJԶ- v / //tB^žFA?F>%{k訥"~Q oͯnI/URާ}yLb=En9R^aN[ٽwd|ߛx96' x/(cR{O"a9}BtO<ѼY<0" |wm3?{!,m&*o+}*gAeD@@ `q +[`vlD n=y.?d7_vE U6 #+63FyK�A=I.1ps2'PN*V D@D@ ,24]X!ʼnED@D@D@D@D@D (ρj=@Fg޾TZD@D@D@D@D@D@D@D@Җ=5,FܴiST{\2\@֪" " " " " " "P0(ŋݨt,œ�^ \'O 4h̚5,X@`[y[HvJ{&"= dr TX4o̞=̜9Ӑ`\&HG<hd&,!-�bBӦM#֡n 5el `J܊$?tIH%D@D@D@D@D@D@D@D0 $:Z0?EVN �v!y9EG&" " " " " " " "Jk-Y^f~6ьЬ۰)Yb /į @Q&�VPuغ $ ܺE@D@D@D@D@D@D@D@: `E " " " " " " " "  H�KG E@D@D@D@D@D@D@D@: `E " " " " " " " "  H�KG E@D@D@D@D@D@D@D@: `E " " " " " " " "  H�KG E@D@D@D@D@D@D@D@: `E " " " " " " " "  JT E@D@D@D@D@D?y(vi's':u$,;k֬%K5ke6˗/7u4?˖-37n4jՊ\uڵfɒ%~b  իg8Zni&3evۙ5jdw*k֬1gvmx9B6ۘU +U\(\oE4$0p@Ӻuk'_mƌc⊄e[heyÆ %\b>`SD 矛ڌ;6K۷Yb8,m?c1}a?sSGĽnݺʜq)WsF�ƍ35rkNDϜ`BX]x1ci޼D_({X`NE@D@D@D@D@ �M2Al~29cN:$;?.bs=?609L哯&om1rM6Mny@@9�6!" " " " "u\ #\01G}y&/Ơ<;xS 6,_uM۷7]yfʕ֭3~ܹ9Ý~ֻ[\YOߜzNcɓ'N81"9OǦYֽ{wwxbM>=lԩW^Q(yEl(c=:ctCuu'l>{1_yWÇBHc_s5׸s0e  -8VYV H�+XG(" " " " "P�w_!M.gϞ6C"\aAMzNDC{7b5f}Bl=X/n-A ~:sQG{<䓾HqNP4i/'oM#!Qۀq3g<.\Eb>}\"Oa\rF+㿴lG~#< _| $Y~̎;hn3d#|ӪU+SR%w\_9_n>3ӥK'Jd 51rQ"qTY+ ,r_jX]\ Yo6nlW\;/wpZCZԏ#/b~jT*k*+66nlZgjU.gJ̞fFClPx%io lmVŖˬn qYd?gߦ^ qf5]T6]x eJ 9aVw״,7]KW%k?q7j١Fѹ^i,\e-ZiW,k_Hs<kf{g@:g3q wkVw[S;~ҥ sm˗1mεR> p=@^ 6tRCmoD!b2rծ]ې 0/64gēZj;gxs,hHnA>>BӃ>h &'Dagᄏ駟 y̾{Im۶fѢEna`~g^{m o*Uy+"4ʲ!<3 Q vE8 Νr)n^vmڴk]vu;xz衮 om4iছnr6my">!x$ڗO&w{"qGm+ZT(hf-YcߡPW;܃&OWLˉ 2Uө9sStj=Na8EgFVȪTy􌶦K }_KL.=p 0yg{,|2|3 ¢e׬z ^a~4캃M:&D5u%V8aݏ<C춽pbرֱr܏ d(m?G{Pͼx~a<Yńu8}9QQ>iNj,YviU6}fƌwDОm4p~vvǝͭGiJm7q^;۬eC2{5;;s2~w{}>ug'(U^=SHU<ЃE8NjalutN�231 qIxyC# ь@ Dk Ac `{_՝b엲^b^Ν d>^fV2xy#|q?bo9SD49@4?oԓ|o^K p>Ex(0 |<7]r7s~>E /ݱxl? M[l^`s}=<tMȉ8a̭G0[ַM(̼2Ϙ�W1+7;jfQSNMkoʂEU6K%/)L{ƒ�VEݗ˔yO}!~rkӣuC̥7;޼l?EkNb^;cfk <d=Xʱge>m{q{ɋmp;l0\}z~!\?'STIsӑsu(}^X.wnTSS{L묇WyrJzЬya}>ȋ:hA`„ "$ۋpBQ5y}4h FX#ABLRm~ >4wğ z#EFN.8�Ch!_ԓ\^AÛ,dC 6#2h.:z1*X6݇(.ٳqp a ok дl2I¶iO}cهg<lSCcԮb?<j;t9}c)y;ع .uOmc^=>46nv;"C?oM͏.6<;;d@B'~3cSWMuCEXp!b44Wx` `Cp \'=FpAi:um& 8^٦ymtz$┫Q>|ԩZޅK]s_!pN ofKkF=Ƿb@Iy~egǃ B dqYi֛-z4֫^]i;]Gwq؀crO~9ٲzL}'==bYj6c;mXN+NjtJsԡI-A嘂ا`t Wψx=mY£ԟbAo=wEO}sھ;#P/qVYn5_ۙ[^qo:ծqN<K!m<Ż//+eBH9nlQXK+$gx0m0)3ӆs_{N7{;{Olmv ЖzQK_7y ^u7+eDe5V;xw}~Ofwh-ޟlY\nIqNqNϗÜhZOIG-Xobݚm>ٯw{kCivPWiN|ksm70OƻߍlDmR G{qmXQ:39xgWO~ڢlg߄켨Q<\m'5}C&v9, ؗY˕|>pԿի]H b;`|n-@=z?Ħ#8…* O*r[Q}Laz3f##jB"<a~aS {饗{B$N`Q9`o5B'D1XL2};^Bȑ#>˔)ㄳ~ ΉB\" "� Sǃ^콃`ylsM'~A1}X~6 oژ)}Z=V)zn(ϛ~l¼妿V-mލj[׭E+יr>5CSrvپ BD> io+餞׮pevӑ-l\0r=;rZoED"8ƻ[(a8i js`W:ƌmfPę*"=|@NMذɆPzBs qgx2խ9A -g징m<س6'm·|,^l _ԉ3`|xiaC:~o'ѹ=m#dx{zk=uD՗31qo-uA[SkQ4mq^ \D5x xhF&_QN'}<\cgvϽ&z\``Z~OǛ <G:4Μkc,~q/?x:M}WWd+_:_3ݭe[,~񃆈�v&FA uyҸ>{X{uظgslq-[GL~׮}g3l|s]'}b/{|6nߤbmf/w@xt<yhV<NM3~Dzgyo޲f}fĒ]%=g_d{%mT=B~B;N:ɐ{UaC!BBܹBx. {4!q./3nY:v  DϞ=  /0O/ !i%<`6B,o,XQG6/>hI0pH/r>?м欳Ί拀#(Q/h<!4aCȫz=pHI~ pb{oc�r3vb(֣&+9xyMÃßO4'Nxum)o\k9Խ+ݛsr9 ÔCd[gyF«:£Yg;/xNa8oCZE"ho%6vF ufC[ 2›?tx!d U(kNƛl_t&YB}9 IsV<y=녖!Ͱo0MsuHyh3 "a*~r# -U?P.v sl]_1Ŝoc'b!m|6gX7+|neYCTB'5! <,xg=9wUzHt?*ޖ>?`&?zf]_T-oW mr,Xo"+{PTq|g:=okg8ӗ y]]uE~/I~})ϳ\>Is&^uxB]ywBQfܽ{xs uMK^!}|>g'@H#II$a>x-ݛIg.>N>d7Ns^Y$k:4I.ub~-DXbTnݺ%',? {kbjy 7/<Hr!1"d(ww:^xn LjQ>FrX7VO7gyfl:%Y݃e]Dx(P7'|h BV}bfZ\^HB\g5aXQxOU! ~a-!a޺Ι`x-4<8mm6Mҹә"nCCQ溺7~o A6^>I8#@ۡX"N|~E(Cc?vߴᦈ hEr`$n_1So''G?œOaZk$G�)w<ĒWZ= ^b׍ `\m/{^'^�#ۛoKxEޗW. ,Yi=fiimaf[BXhg/ٜAz }^^#n8$2<%/7ןj鍲k7&&2z!Apx�6mKjvqậ}~`l+m=t\2/[4FȤ)8}oP^ մ^<Kȱ≺r?IGLN4XY^<< ?qy%'_풞'%傉#$[|F'B!Q;CUdBǣE!oRH~F`+LB,23L,G,~> -[yX#ÃcL$R1ymqL^z#wZ{ 2hQu@f͚e96=u|pnjժڣo Ο?߅Y[WIzǹNJkZa}ag=x|?A Y/jr/4+ڇ-qe/\ɅI|aw`RM.$9#IPQADAQ J `B@ QADA 9H9Jzxw{w|LOO==5U_5�oyw'lF kgb$&7L\;bwN<;,0ͫS:'<>1ĪVj;_=5eu뾰yxJb%}eg{Z`UN2p+ܘ�buli8J,O_8Oip|~ٽ= c\:ׇn\ <7,8P?؁r"Ce;(_,\*hYe/4w$g"t C=䉽>ΙcOifhD2Yg`_?qu* y"1^-dpFz-BxCL38.{"_zjmGy2yd2eA( ]�r"={38^N%s{;Ww.(Hb*`QLq'^}U\ĶC1bjn5Ć G ^`N&ǫ*]cA Z:T6J' c+ژ/ �ROe]ʰA~a+j=B͢RG-?VZRE$UYyO} 5&ksƝn!NFXY=[ɦ O\0]RS +Vp:V3nRޤB�&X"p8b>9;D<OYy\\~O u7N�L-*4A +,X-{p[%1̞L`a'psII{(Γ٬&eUQ M!6$[I JU \`-B;-;\<p@tuK1Xy hOYX`d&j5] ;81 0ΦE taOw(Ajx[jS(cELR'1+Xǘbdz%A6J\6jn (M>}So�Jx@yOq», $.8С4kL:ud�/6l Hh:Bۡ?_l,ojhΓV X!P31&D0jPXN|;e(EFhp~ˍڀW1 PKȁR`! #d3#VC@g/ ]0- +ZɦIOrk]y[{qv> -,.}X'" (7+c}N[ WJ>Eh='$.l)] Cژ}y^-"m?r@l*X `EW*Ik\2NZhi/VmB<vBѰD,\ ƙC?pGp?bJ%#Eg^~uԅ4R8@+A.)9&uB">hlEgxʶPWgm3ꦋ{*ۜ<~O :<"p~A'T =Uy&zW,f�+0bp\cE(=ai v+q1ރB!/,A=sguvI$@7,h�)ZqE6XTb,k0+7. kӦ`A +k_jՌص+@Xj_#iŊM^XBī_._>_X ص̷U K?+U`6 w4ny늍TyA t.3Eyά n%Xwuix&({8JclhYFSwh&MKϻ n~^K#P9=xX N 3Cr",`}HYWC{XL'P.~D~ZS뺬tշ3y`bΙVsXHDCĺ mmYLJs{n6X0 :ׂ{+Wba p`rXu׈t#u5{ֵ�&P|M1ʯt kg##@|r5]9tY)P53Kp5~t+jPBLj.adIݖȘ�m_^>ib>ٲ_n?6>CŢ'ĴPhJ+(`}{ѝj1ޟl*$>;].J~ꈾ( hWkke] ^^=I,ºnzn4 xfhy#D5Xl{i>ж5-xNE8$@$p#@5ڧOٸqY] +ϟ_ڷoo dȐ!ҵkW*#G4 (k V0$ȰpرcMҥKbq!m͚5jP!ߏ?X>s.!'dj]nӹ9#,a oavPL˿Xy 9y Kd|NEsK wBlq &#z5 ck#7CA 1 ^6 (7N4qWغ<k0yk pEl$Xz<dqq?1Q0՝+}fӶm]lkuaIWG|AF<5>YסC~L輾pΩ%Li<*s֏Uvz\`^cLx#>[XO`3J.R9[Nt'zͰ�C%;sԏ^U {B$@I�byA_ޡCiӦŪXZ +,a6Okҥ2sL_,eʔFхb(V5lSN5 A VJ՘ ߥKA}\%%;nS7~6~Xb嗳v=Vsw$(-A=m~#= _ ٠בQٿIhɽq0L7+"Wq1 4t;sOiB-1Q0՝&zù?6|jq .S@=xk;~љgÚ˛~11y&yqW?Q ;gqvJ'H\D~sӘd}ݣT|& r%oSl"˖-I&I֭ J-,ìɓUD(*[n(6o,gΜ1n6ѣ'?I Q~ ?*aVA.7N._,/'OiLʯV � $6[9AI8U&\7lWpһ8^ � $�ŋx]85]ŋg}(~ÇI,X >L>]2g,JdUT/\`CfWRE4i8n H4`qY]iJ; )$@$@/% %x^WhH˜�, .e%[rm {)SL0ѣG~2.E*"Eh[nd .bRHn#      �bue͚U:v(˗/'Oݻw5=@<ʬcǎ Vıp ؽ'ڣ>*|'+VwH?$ @� � � � � � � G�/Xneʔɸ>ֈU+yrꇶmʾ}䡇2fȐX 6(KTX1ywdܸqu.XaÆI D $HHHHHHH b"S&X=bsS|9ʕ+r  Į^*O,Y8E+1[s.g&fg^;ІoY2       D@�V`A9r;?;q/$F [b$        F Vc,/ � � � � � � � @P� � � � � � � � � $6T%cyIHHHHHHH"@XPHHHHHHHH ,K$@$@$@$@$@$@$@$*$@$@$@$@$@$@$t $O\^t/pfJ'ZNu+$      dΜY9Pڤ׊k$}T%:� � � � � � @@/v풃&iK0X~qfJ'?B       @;wN#'Ok׮rHKGX~A.]DW~8xTόG� � � � � � � � $")QYYT     dɲsN.\X7o.s .^(۶mÇK"E[oU0Ǐ te=ѱc ,Y{QY> �-nJ%� � � � J`ذaR\9\_-UVIΝRmQ˗O.wqGxwe߾}GCF!>-Z4,Nʼm!|Mp 2n9}tVV-iHbCAcCǒ� � � � � 5X~E ] b#G>@z-?3fȽ+M4-[ĈI婧r;vX۵!2_e˖PC$@, LLD$@$@$@$@$@"۷o1cHNL2Idɤ`oKbŤV+��@�IDATW^՜9sk׮2m4iԨTVMx +ʓO>i+Vs͚53yҳgOӧVV=,-[k4{/"sɒ%۝y#=o^+Q1o/]d,ys]P={r :n̙f_6m̹'S6`>2K~� @P� � � � � � nj.v14hBԩS2{l8q<3RNm۶r=EnCW@J.-*U2ߝСlذAz! 6QF\ƌiܸqrJo߾}+]w1uI>}dRn]Yv[ʔ)cʇ@yk7Ow & 8((2?790(Tt]_sٳjԩS6O~� @0?ZLK$@$@$@$@$pC8x~osaCe1ky}RF ֭ٽg>iyhB dBq.p VTy1ӤIc\3۵kgϛ7ϸiϟ_nرQ.yիw pȷzFI2eJy 1ʠs 8\SV.X9!(… ȑ#ҴiSJ+W.c҃%H%@XĘHHHHH%�GM6B2gl>ӥKg_E¬@hp+e+XV_PԩS˦ٸqc>WT)7ٽ{TuAifW^1_|1|I}}$@$�td;      � ~zGuJ/!B.7t)`es\7n{XY+$VPA!M._lv_ڱ:&,/`̌;IH@ ̀HHHHH$PlYpB|rʉSK(Z7�Q2݇<.-`cٲe3x  'P˗OקSL1">_x!fsӦM&6"F,YRZ ^plϛ[>N$@N�sw     A�nutRҥhB\0nZfj>}d.XrvL*UC7E<"XTLm۶U"_~evG_yd  cK,mfA 2;8ЬXa iy sM9A`-ܼy+_AC$@Aw؅ʮg+Qyfעl紼{ ℤk�WR+pB-{O3#C}PEmAϽn ~#/ѳ.p)} ўЮB-I }q t|YggI=f;:u!Ь4]RGۘ-TOWm;,s7ou~xi\'~|x{Ŷ?&^|_uSgM ?X/o(`ߺ%OVzjZ"O>1-"?n eHꐰBZXYF`7cJ衇L 20Xi@:+0�|rK&Vr3m4Z<xcP�4+V6kL/=/?IH PT0l6kFi[{+!:eI~RCJݚ V:&/Լӕ&>`�<kJϗMzѿmE;c KsE1 7MlOIV3h3./qm %-*&m_bѯ[dYds$[18$/NX.)tAw|\keˠGcrx$y#G P 7._LpG?uDŽ>.KTQS#%#VzSks2A=fˍ|u}ܕ'4PPz{} _RG-Ooc6?>h=m|,Kn-,RSA9[Yxfaڧ>[*>NjJG牟8QX z-rHZ^d2s )] k'IB)bʕ^բESΝ ѣBh'b}XY1.ʕ+b 1`D\0qK<p<sqфr 0OlzOyp � Xם~ME;@t~^MIKJ0KaT !>Y|p]|U8-#lVO%^7t h U,K1ʯOƪ~&W#[pbØ=ϓ2ɿ1/bݖ-&X<I` dXquL7`MP+[z,F(VPԗde)o.PjK ̘O*h+I9$Md*ޙN +3Ւ iRʯS@6UǤc.km<k-)Jڋ:vZ٫ܡxW c~7c֕ K,i߮m^lZFZ_UHt Wɯ2ymI{e.'_ׇ>A{>2mLWW(rJK._/$ :0 tN%7$`G9?HHg[CMՔJAe:I5Z~X/S2i2WXy�ԁjݱx{y=R,_f~tRF*o&)oJ.+ҽ=2jVYnPx{<y9)+9=H݇IFv yB_#ǀfZH=T,4p`DJ+Ժ'с~9ھY?߼9'.;%3_Ȟ I޸zn&M:H]/+:*9u"ՠt>]Bod4P@Y{f6+0w-V7wL"0QNsFNS빶(;D;ʃEN keReNJ4)p:uUEM cZ0:KBjk@{C V5oEۍKImm; Yov!pYF+3ܜR6&}CNQU'p7{Kِ҆v Bex枳ECD}j[9k!veUZOhmbCmr'q=X1\a[?.iոsm{J[L014=g4%El 9ܤ>9II9kzB|'`:]ECp*bby3nxVWS>ynb}Ueæ3Ͼm2mWF<վ$Cre~nWQ3k2=_e"T?rk^{7E{Wyc7>OިW\Gߖ#}4~~_ct1N_8yA%t}"Z||=oЏ>E?Z,Ü<G>}T+36|Ep"p }1@z-O ^(p`|k6<:MZiƕo/ڕ#c'ՍkxW ':V@q*t<~ɝ;cEHH@҃,d?T<ܙ;*;= kY`ѤK̸I<^|M" o`:?]jbBT3\ҁ8=n^:Q$֚sB9 �K'[P>(<CɑS˃I(P>>婡o}B)vN"hb3Ѕ{I Pa0bKPTX'HAsK2YYi=L2>_�VzAli LR!AFUU)biѶCnBK$[4RQFu[):y(] @~3e@Y0yĵXA'MǍb{  W:�d%IU]]OYc$".vy2wUq-CjyY c؈b5ٛd|<<\wʀ˘A9A}? _PL^份pU1}(k1um?L0 PxY~a6REY S `6P~\4Љ mJ=:wQ#/_;%#^bC;e=fBrBiC']e f3ֲ僕Ji=<K+&öF:_I } Uŋ�(?ۤ*qo>p(Yp}dL^Zܖ#4վ.MFs&zlZ7:4/O\a `-C%+PoVy2SFySdN, 羿ƶF]8?g?꫿;"EBq蠨5fb0eAKJw2 /V}Xqkl)nݼoǾ�s+\dg>ˡP~ԋ""@ǦpmƋ>sȔzSHHHF&o`XcbA0*`5CE)> #N*Y:QELYE,'r/k&P Äc`W'Js?Gj:ټMVS%g~`M4- ,-.=RYA(?߬2= ' ozm` XxY`t |_ =T�+Y>_SEXEZ{s\F P8F Vcs60u#-l9A(/Aٷ)=R eo=b\ up=,PW11TPA}QI=t*ԪWk 2NI!vOP\*푊H{p[@I#ڶ_!<úR/>? +jȰYf"UBU|O;1EjyJ' ߴUCryA0;)TaPjQTMW?toJDwދiuJ1y^DEN}*7Ud*a29T12fN<IUN(RmYU*Aϴ⯏Pp(;<սfs2rQ?}),`ɘ:8,1Fl=xs5܇UWU8]Vӫ[8 ټ=oy.#\^훽 Uϱz;&>=$0bϹ?5p*p@rft?wH /7 F{B$@$@7:xSR�q)3|5">Z hl:XvKZdnCeJ^U6@|lfI˴ ʦ pCs ̋%걂8Zp ]l*ݕKAy =V0骊 I'Խ '+P@Ce6\G` ܰ<|l b8ũtDco Ŧޓ2fE--U~!q)p=b�x#v4~x(<+oaIɝU~! > 0omFkw.DaNIeNL<y'&5 fCf%Gk@qX)۰Ҍ6m8-"o\<p:˘`ض�h :+UwT2hP*Z ?Um~ (!p>.S<}zw̪PxYӄ2Y(O!pSVq6O),<^:JҺ"[o 5|ևx¥8AhGxYg^h y~m\ ׵{7,i^TGP&Rʞp@lޞ7<Oe^vX&x桿mS={=n2ynĂdMqN$@$@73^-֙o1P]+ %t S0o +Ƨ79F!kj@;6P: \Q A\(g99L~q3ĽEӪ!: \B}# 7cpmSDX )UKW"&Q`+H# &M4Xbw5af"vUtEpAAQw{m^_o?$žm6=< !Oo? &c\cfİtխVazB{@ra% W.We&|mi٥O' a۫-OkC> SV 7Eey>|up^񏹜?? Q c ^hmLMb k-iOXÚ/RJU+03)P%+A>-ƶe.[o<cG7}+͸ęW|f 湌qb'Z+ne}Ɏ&ȼs{|2sxI;2V da2/xA dO܋ژ  c�CnspMuV<(_2CApiRn{ /r $"@T "LFex^tr oX y<(/Ԍ ~LRE`'>:'_X-kZ�^!oۜMhp}iuDliF,LV6O' ,P>iݖuda]hP@̾7rjU7,Nm{A_oSP,mNm@o(NAljTz(`)òF߄@a[?(0@%܏h <B̗c%Q0L?W#k z 壕rJlY#b6fˆ3A9<ýS=pB Aa-XZY-ZǙ u:" Gg_p}G<<Vikymv=kÂpQ"3/xBJ c6{IeP8ؼEpE ^ś{,A t5Reᎎ6� � � D%,!jXBx ݕ\pAv(ZBYy!ȎVd=?1.0}NMYm _\f�yVs6֋3vc48#V5rrgHL>H,oBw�.;Xa2gLjO_o?}Sܫ> Q:'k7Q^mG,+ŊV; h.m1`G(಄ X .Yߞ'VĹݠߝ'&vÄ}bN \%PWD{|^9gHe�R7 u >5^ꂰRV~鏍m9|4 WAQ >[ͽeownw(0'sU!4&S\b e6uiVE߅[Vq6lW"iNCdz ةs$}Z B)o\߾Qg VUIhɘS}.cEp7XSuE?ztt 7nv\kKB |=v\c+([">xxcHHH@=)B Kc XZ9#ڟSSq,;18 ٺ)" b{ܷ?+ ";*`Ud8 e 8((osI7V*#&qX>C'觛R@e"X:&dP@ܼlXA\ Ѵ]'6ր.:ݧ݊{ 7Gc�]_ oEꜽUq xdʋU/VH3~ʮM~}[A״o_o{[meU+MJ-l>mZOX! m{,3BșW`7,J +"D<1�U>8zPG:VwYM:~eRD/ $s"/�B|i"rmcz/z6 IhX mBbsoy:?#\upD?kf.2Vudz2˕1Ƃ�VqFlC~lEn?[y� uoOF?x6S?~R&OʼnW]@W X 5X$!%1?T\CeӨӗXCЇ<a2ۯIR靪O:.pO?d d<n5"^9Vh΅tpG3;~'  @2@7/n*3b9xΪ*Bxۺ@0Aa]&p^ƛc>T,1sƸb_dvf:ʥ+ytqll`+a#�?A?sfSF~ ,0F2 B\ut?[7Ltp4X+= vu VpqD{˞!}սLh~(&#E{=X[ͽ :}?vpy{g2 ,<_ڴOЗ>DWOA*VݯW >'_RT!e^sٖ hP{ClpDbL:-<& gN_� � @R'ha/orVw\)r6p=wR vP49Mҹo ܢ~k@jg{:ƛb˦1oOoo7>:8U'X3‡6LQ_u):}_LضP݋6q^ͽyB y T7%imITvRP<||cGrwL|u|v xo'OcП;Wt$@$@$@ ~$z\vHVnp-JXqúU\܏7Hl^LlLX�|.UL$@$@$@@sLY~        %/@%l$@$@$@$@$@$@$@$@$p�`Y � � � � � � � @$@XT^ � � � � � � � uT]go$@$@$@$@$@$@$@$@I�`IRyI$@$@$@$@$@$@$@$@ Pv� � � � � � � � $AT%J%� � � � � � � � \'@uF$@$@$@$@$@$@$@$ P+D$@$@$@$@$@$@$@$p�`Y � � � � � � � @$" ^/HHHHH ɓeΝ~.\X7o.svݒ%Kɐ!Ctϟ'OJ<y 3JéX, � @TB;3&     $0l0)WT\o)-Z$VΝ;L[D ԩk.ZٳgK׮]eݺuӆK&MM6r!ꫯ駟 r,$@$St)9G$@$@$@$@$` tXbŊ{+IX֭˱cdܸqrܹ( A$@ @X(2O     �#'L`ߖFO|M{jդQF2zhvZիWe̘1&]Ŋ}yfXoz [l){>@j׮-8Lj#\;ٴi̙3Gza?_ � $%T%䵐� � � � � $((6l`ʀbP(]prkʔ)RHСI TÆ eԨQF*#G|Pz-cլY3Bz(x )Pٿw^[,YD؂lر~z;_痪Um5k֔EC$@I�`IFy=$@$@$@$@$@aAVZ˗/7PR?~(-[f_Pj=SO.]?qDy饗2N:FQ.]:4i+mƍMl2oѢ>x`v%۷|?Px=#'b)S' � $)\2IU'/HHHHH \`5I(Νk\dtfYfb²ʑ#Ge`=fe׮]k& [N7H緂*f*zٔ:uj$@$pC Yh     РA_ʕ+"ʕ+ߪU+I6m]|N2eiҤ/%Ouzޕ_HH$@ y$@$@$@$@$@CF`:&R`A\ӧ7߱JlٲO޼yW!ի;I$@$�`>p � � � � � x"ˊ+[dΜׯ`u9r$UT1n{6q(eWTd'OA!CHΜ9M{¬W^QGB(ʗ/o|x � 3*¹vX6     $0}t >܎,Xr>9~'KzLrz嗝WD{g6(lٲ418awu)KvB.y8 WS ±\$@$@$@$@$@$Æ rIʕf VΝ;M Ξ=+BL/aΝ3~  �΂HHHHHɓKʋ͛7H! HZ�KZɫ!       p#u\I$@$@$@$@$@$@$@$@@+.{Uv=+g/]ʵWO.GIl;xZ~s{Rq{#g.7'ڏܖK {Ev;gp-c݀kvwg{Oh=m}yJ.({OV5?qHD紝#!_ql?"3#w'P9s6I)ݩF?OQW}kSb:     p' ѿmJgʠ7D)1URa}'Wrgs-*Nu&a6K7zCEٞP?ke>Pu\S=~ϝ ;/ ϓ-N ?wd~;mnB Oj[/W}}~R@5ް?vO?9k6Yns~n7?ex. iqюK4@O^-}8_*hBXG?7I>WwER~|._C?P\ }[iI$@$@$@$@$@qB E`&hȖN>/党wJJ%_rD|][:|L6-#-/dJ5fVQX�Kd:dUHds$Y21mxWZ%Ւ4)o %2}~)uk6*Etj1z~Ѡ>cΌnbYշHo5}ًWE}9_eNڒ#Bշ{B&-A]� � � � � k|do[ ?S^*5͖Kr;,~(:MZ)J7wÄC;嵩kLW߄;eǡ3A y2Y0'%ZQr `̍2ShmhJ•5a7c5;t|.ɟ5娹[䛕Zո;h ɔ6U,a=5B/*[T-J@۬VBӧ6m&Q&Џzmp|^1xtۥN<f1m-G.#ZiRz<a5w p/-S0 jZVʓue rKƥ$w]`ߟ[2E/;K7&rU8qaQ ќ-ƕqZ)MťxR|̞^f;^ZnO:˺㖌ҷqIn9 2Y-ok=T-zMkE5m"v}[doϡGpN{?vynƫ}hIWP-Ϝj/XgbCUBnVeߟʹH Rpv)O2Bc`'K]{()=r2t }TQ+}w}ִ.{fMJG\ � � � � � x!: '!U.ܙ;WDUL+0crhmP:b;\Xݫ :a jE[2eGL Hɼem92H $Z@ecovUH%dѶCjQYio\'t#>VSNjJ= ($Cgn$ Y$cݞ˳^Z`zx񳳺-q0}rL"ƙxi*zS̺@ęw|sovWfHۈOT/ʝbh/M;B{:{qa K??]ô z@SVKȼO*:=tQ*]UenSU`BX|Yg,;ԸS[`g-n)C(ŮIue_\ʺ+eUY%-3Z%WK٠Sh8 ~6E{kt[]^m3{G։SW-QtƇk;agWK_ � � � � � C ,0$f35B Y>Tl=[ẃ[j}Ћ,uWG[XM 'Xʹm"QNaF5eˊ͉ ,o&ͩ"SܔLi*| u K+YnS"Q<RWȸ(^nR ,RlXkP:iZ!<VI<q-s㥍"6\U˭y=(PXe#>B-0O,{6@%"XW_~Q[掰jF CEQ9U,TK ujgIJ>]#g0Z$X֑"=PAqkJц+YW%Ȁ˸,Vcu)+g4t9̰jõؾm"Z ȐZ6+_m]ýoZ�ݢVv8/3r#j]~*YQ65  @$@$@$@$@@)`mٸl嫺\NX@<YNaDɚ`"7X~XG*NⳌ;GX|Q/@ia9cV<.վ'KV8g)Jck֙KJI8Q8.IF[{u@*U7HJr/<,@&pu*I(F׸%*^[MZKPE` jj <+PnYeU UZ6芯VʭG2qfZfc_8I?CVVk@a+?wkjV`c.=gJҸ DtXY]E*jV Er]?=G}².Z]CyMԒ{%)wRn!    &/ 0L w:~%. uDkLV Gs VC%trU]i$k1y[􂉰KH z/U5noԕ쫥7,.L;)W~' w J:9 \�ESnRܤv$Jq*$Uw@w 2 S`-t59 2]p\i"-nX?d2=Nfh-('4]UZ.۽NvV ?R 5ta.P_HΠb(qUǸ""KX3_tyx$@$@$@$@$pC&UpiB�w?ǥy2W"p{\+@" eq{"@4*)U̒~ۊX;b &0y$OQ`Eufo�E]xfQb${LREX)Pf N_`> Ѱm֟sX`/ @ \kNW'δݶ_g VWXBZ  \lRBn{BIe%Bp<fN^01 :='ȫX$t r>_^6!WϵeͰG7dRɓkJug8W Γ٬ ׾rzĵ@ 0 � � � � M FXLxHpWr] ۡ( Fx|%ۏP_"4m.m܈c _AXa pG#XBA� ՚W͔u&u(ID<1sq֬-b4CcPVͮ^oXv93:w*0}"V)xdN Nw.~8�S0;{m+ULzԪ@ o~I^MW{D(H>{_be:4'PcBL|7dz/4~Y!t:\ %Y@y0`kRM㝁gm5"wΆЧu=, XPbup_}Ɉ`ā'� � � � � a,au0(U=2\+GFvL<m uN_ݽqA }+e_)+ɖ0Vc!N JjlLaNb-ܷ̱n1VxޢVK(n夷N?ʆP۠d Q(kjX졫r @[$oKh3(YB!CqY ,9L^8߃#E}~BVtJu<&[},\ mie%(\h6}U(aAgOCeykZcc5VD|+VH3=T_W +zd7k]<R aX�Pn#5fb:xfp-ƽӟ{&Xq]� @J̞>kOv�kLUe{*Ϗ_/q>,&t��@�IDATPV� � � � � @iNj S;n\:Ϫu Uqğrt.ç/H6u=w:S$X/1 !0:<]k[#F 5Ĕ8,u hx+Ob؎{*ȡ Tb-a=8u?#|lnǵ @N+`Mylm5^Ʈ&u낶Is.%    Hz,U HHHHHHHH . 9e̋HHHHHHHH�` _, � � � � � � � @ PB̚HHHHHHHH Pu� � � � � � � � �`!ˬIHHHHHHH�` _, � � � � � � � @ PB̚HHHHHHHH Pu� � � � � � � � �`!ˬIHHHHHHH�` _, � � � � � � � @ PB̚HHHHHHHH Pu� � � � � � � � �`!ˬIHHHHHHH�` _, � � � � � � � @ PB̚HHHHHHHH Pu� � � � � � � � �`!ˬIHHHHHHH�` _, � � � � � � � @ PB̚HHHHHHHH Pu� � � � � � � � �`!ˬIHHHHHHH�` _, � � � � � � � @ PB̚HHHHHHHH Pu� � � � � � � � �`!ˬIHHHHHHH�` _, � � � � � � � @ PB̚HHHHHHHH WGK$@$@$@$@$@$@$@$@$`gS;IHHHHHHHH  d"<HHHHHHHH?*3b         DL D\y,: � � � � � � � Tg$@$@$@$@$@$@$@$@�`Xt        �ψ)HHHHHHHH1*q$@$@$@$@$@$@$@$@ PS� � � � � � � � $bT%cIHHHHHHH?#        H�KĕǢ� � � � � � � � '@FLA$@$@$@$@$@$@$@$ P+E'       O 0HHHHHHHH ,WN$@$@$@$@$@$@$@$�`1 � � � � � � � @"&@X"<HHHHHHHH?*3b         DL D\y,: � � � � � � � )']/ʱcܹs.3M$@$@$@$@J Yd.]:ɖ-ILHHHH'd V ʯI)ڵk> Ý$@$@$@$@$ɓ˕+Wr-P 4!  @H] =j_Pu2^: � � � 1-1̚5;z,sgv$@$@$@I@H`�HHHHBA�csυ"kI$@$@$LʫW+ 5^ � � � Xa¨v, � � @ L        sT9RfH$@$@$@$@$@$@$@$N� `YHHHHHHHH�`q� � � � � � � � *©6X        8'@X#e$@$@$@$@$@$@$@$@D p HHHHHHHH PH! � � � � � � � @8,je!     8&pڵ8Αّ� @#d`wޝj%&    $B`Ϟ=GʲK]O~a|:v<y0uVyJJRLiyô, � sОʯwyG͛'C e<+\rIʔ)MZe9xO^ɜ9s|^jmΝ[ */_,YJڴi)t̙ӵŋi&9~dϞ]nI*k/ǎɓK,Y|%>    0#0|0Yx)! f%Yqzt&ׯ7$3g͖[n%fQ]xuS[o(ҟ6[ .V>dHnH^f_]/eʔZ;vgyFƌ#ŋ7JW_}Uo:9{裏YvSN8چ/5jmPo^*T CdɒN:Uf͚%|ٶb y7烲 Pf 4H+:ۗ>@RH!{IHHHŒ /4c? _zIf% 8ҥ3a:u3</W^%7ߜVJ*|=yF^lo>.WZ5k3g< � %D�sW~+WܹsA<ľ;cv6m{RD cl2ҥlR7nlf ^zl?Kݺu=ٳҩS' j|7ˮ]dȑңG1cܤo($@$@$@$@Iٳ J"J!_~3Jz)lV֭[ <%:J)/O(GuPz+(XRۥs.a[VH@UyR~Aaԯ_?\rP o.*U2/#GyZߔ 5 J/-[6y'FY<oeذa L\-mݦbE2d0fZrI˲;3o:[{LڵkgҢ_|:ͱΝ+{L21hڴTXєL (`, .l駟dĉ ȳ>k0M!   K`ߛ4}#X͘1=I(2e$ ~axH�_d/$2r;^cI w=O$@qE Q>}KUZ5,Ϛ5k aѵ~Zضm[BL/=֮]cj2aey?~i9?\bayJ*\Kj*[j% .4.6EaQfՠ6l0 ?j(3 ʯ�׀Pu]ҭ[7:j(hEܻ+<?x0 HHHH/ɪU/6W/Xkc@ jUul`.q\@';woqիVVQ[(xXwѣGw7<J֬Y#X & ۷)w+֙A!kk6/p`h_@O kao6i$}zFcc~,+1Q~x(FX@F< $v;8YP4axrO?(�=M7J%R o!xXb%hx ;w-XUݮ&Pv-E_K*UA8!P 1 h\sɒ%M!   M�a.4<fL7jH{t{>cݻWF*x g}f;?lyj6{G;Є'ƔlټUfx/CѽQZחK.st3^:v|8qL0A8ڞ&Mi yUB)Sm\! j䥗_$o^Vx|'Ƃ cS&eI75oeQo6:uH7e1cF|Z^~Fe',>oz>6yq$t>Iz\nO#޽ߊ&ikij]KEݺk=`h_o6XC=c2 � 5V1 xhѢd ?|:BQSO$PH oAlMu/p/ywO<!tUOX u]ImۦoW>s믿{U~x <\'V[?ϟo?P!8?\/mUsMgpO(Ѱ`̙3vA� � � � @/=1ʛ79.} "5N&L)w~f,Vц{5~^BaqFiq$3ζA) ϻc숱!Ƭmu̜\%RfR؀GB5r͸y 8z{wy}*(Z6m(wh/?S9 pl)^^rΣ=U3á]*_,([ą2y7Eӛ>M!Cޗ }t[[9s/b´`z(aQC|_Y8Uj U}:.8w -v H(boC[2Bxԇ V~ XTΝ7@OI, &MS>|x]?zh '}kӦ >7nK$|bP5xZ[O.ܨQ#PZ$ur � � � իBkɾÏN(;ΝÇ7Bʦa?PkUҾ73g͖I_~%O!𲀂f^nA_XEpzI,]\~YiDZc=}"I"b?yI aU(jka'oX[[.J5zh+kҤ/e .͚O<)F~}_xl 44P΁՛7N>9p^bk5zԇUz; *dXsWz*lr*Q]|�s t�[[sXL<Yz[^&Հ*>j1u|;ʹEG[ݾ}RHH N  &#FW/adź4s p7t -o*W_}e:lg:<g X(;"t b)LPp: |ʯj4̗/"4\8@Dp^r{fZjZf6,s\ٰ4Ҭ\+G{o^{.pA<ϑ$7Jb K 0ƌ�1NRHHHH'X87L۶q!mm۶/bM S+b(/ExשSGZl[0D[~"7o#Һuk}\b\gq{Ew ?$ֆȳoM8qϪU#E:#WU|Ty-"YۿD[f^=yQ,*7{>R Tإ:2CNoڴ^6|1yȿ_^{?3Ҫ/\aooŧ:^+u9[kȿ~i]Pލ#]$bE ("mO?S2 $@$V2L6ifJ MW%2cїr OLGI7&[aJ\tFey:hCN_DeN㘄>[(Fr䏸Ȅ t|`o[�Sj#+vyp?3U1b/91:%B$@$@$@$8yyJyRjq9kMHDR uy,EB六HӦt>RJϪE=tn֋_=U2r_וxƶ}Szﯞt%cŨ%FyV_fÜ;㥸Ԕ?Jۦ 1"߉-C,EK#AD-uWL߇AYmY5y\_[R$ Up4o4E\Q7 � 5i0=F0bx~ktW?T%5x@u}IoϹo߾xt-%I ,F6K1uFH/ubKȾ ,q7"_M=ȚĐf)^ɉ%"'85 FxfIK \% R䩧a_0ʃHHHH6ի17ԤI:FEE{_~VܔK#ĉ桳f}[7/&/; I%Q '*^su'1$x~:hNdʫDx~RVקI$K-așӧVcHob5 7כ 4~Z1xy%V[k:l[hHX 33Q|/͊X   Y�&5`ƤUOK ^m%oO$e,*o$v ?@}d>')$Ub%+<e:%Ѩ/Z#!,o$ߗ",+%ixI62fhJ_Cd*<hȚ7oީS'15p(&aqEu$40A$@$@$@$g}t_TƔ<#P六<%&^^yuSdǎQ'ר{ɖi$ztÆ*1F|0zz5Y:_V5{o$àD$l:0\r(NleV)Fl*HAv2$Gۡ/˹ksJ; 6%Ry'⎹%G"aV�#Gܿ=Uemy\]`q)=X+ � K dCbI(u?ݲ('nXqF}j/K-=bd}YZߞ:c]@C>Ⱥ왓}HHHH H# <KԒ=S奨D<H 9$)EbX"agtd'v-|�(i?9Oes^W}#՞Y_:yeV>ۜdžx-/I@/9 tP%rR9 :ŖQ73m.C^)N]5XI$@@2e"n\ � � � � EϥKu8tNO,OJ!D%OLaiXr]0K٢E oyPItx a]~5kִ^t-A]r->4k9u'&y+UM.s̝},Z^@\%McipYDr{>D*!UU  � 8 LQ@s$@$@$@$@&1fH֭NOM˗-3_J'9Rd:iܸ:Ch#C:vdN`.Fh}H(:$%"'JPyc Ó-[6k5WJy/&u(xIJF_[׼ҶD"鲭eVrDu  hEٳ>QdI"'=\t ur O<AH�=[HHHH2%95m%:7.$5Paλ~z}ؐў�;kߔAK<|$xD lV/ xӦM}&ӿ?Uye%Ġv97=IxW_oxI:Ǐ?YS\s0Ϝ9mZ1>ڷootKZj}z ˦Mhb8 `rҢln˘yŰ9N%ׯ-$HɟkH*U0ï}4x}0[9u]6:4<<\߲ ٲiHH -,-(R � � � � `m۶6zXWuhquQ9-^6j~ #1ʉgڵk&I*\QDNUO?4+'#ex)C9ѣZ: }̘V*dMB z1|x{DOʖ+KKjmڴI^vs=ȼ2גC:s/ ƛog]�-{}$7ϿСEC *E%)$@$H3W`VNl,޶PHHHHH c8a.qb8ć*ϤsHTb"gTȻ(<i!կx}pzuVyt]~ʸUh$=%a:)sP'I~^%q#XY1}Z.4-I9@B; 鴜'4;)<Qff &ȴ&J}$@$@$@$@$I HDO\Z$wϫdS&:ٸ]r|8KZc]%'~[Ri1o! hy{VX3H$@!P    p`[{Ncp8]-ƴ*$B$@$@Y�=·5� � � � C$ I?`j׮ҥ}c:)I%R[nXC\"  ,8HHHHM6&m+_fHH252ő� � � � 'ٸr 9seU[I/Z3%HH ��9HHHH@!u*|5kHH1L}. � � � � � � � <jh�{ԾqHHHHHHH1y…G )K$@$@$@$@$@$@$@$ۻCoɄq+6jтh_thkYf-ZhΟ�b)g hǁ_%hg4k T{Q R[qa:D]*27E^{?"DGD\gҺp0DïwO]!ki= � � � ٳg/_t}o߾1J$@$@$(HwXΜ9:=xM9eC6l#\RT36yLw"{AA6;ڻ.ιsbH2PO`Rn1-C^ݶ!W8j(]JA%zD=vGgZspD";%[{yQVݾxI@8{A(׳هSE7R{ڏE+/!Gnud2y@N5SAP& cDŽ޵ 38   0y//OXq� � � <r�#GOK;WggZ돟Eۊ] {b)PLٻIyf^oiLpQR۠MTAe2+Wߘ oPп&*ST;9~GJ}k0ݽu|c(NW:<y}2<倏2`\;1HE+á^_Xr?DbO={vTTk W9Ɏ8 ?17pȩ?-:s{ Z-Y(q>ujëLJ$@$@$ ]''  p8nÖ+w%X*$fnڋ?Ж 6)P `¬D))㒥(o[(c R%y=A*Jymx 73)']:sF…m,6^Vܾ(o'CTz7bZ�ʕE2tG\ 7yzn3ݹժ@ժzM% 9k[ʐA|9]\TfϠPZjndHHH C$xɐUpR   G#l*aKng)/כ׃ ^jTհ;('CYN2fb�K͸l*ZG=~ܕ-~N75?}{,{M%bwt܍T bQj�(}b"c'^}*W*dSʺbD>ˮ E9: ['N̟J%`OH!  T:S}\ � � 8 t79) |ȍH)0(SJ*z\^KXf\JJ|#ziOЦ c*Vzߧr4�3KZ=k'M}?^ꋿZGA(J52Q4-Vj2x +ZU21)42UTF8b(_^EIЬY3;z � � @Z~M!   ,1-؞J!RX޴U(?=ӤO2Ҥ'qE9mʸ$\Uߋkgٲ(Q1yU~m|M%wR. XϫbSέ۴u*D'svٿ!MƊKuZMbPSuy. є<f5k^ݶC'Ta `2ӝ}HHHҐ@gTrN$@$@$�<U>%xg:<V(>kȈd9ee`ϝ8NR0\M@wt{i,P:~6Ū_F QD%_ҤDF0NU^{U/>/ \_оXf~hNprCvuAgaÀAXP_˥r;;[)RL � � � � � � cPi7.jQ_RAnH &ba)wvW'-f)QkAȦNftɗ'mV]U1mJ!9y2FydڵkѢEK| 0 3; � � PώS" ~~~ <SHHHCzV/cGȔfqdJWJeE>}R:IHHHHHH2)7F!01'NQ+ � � � � � � @'@X|        �4� � � � � � � � dq4e/'       H� `Ia+ � � � � � � � @'@X|        �4,z鿍;{Nꎝ <fíSqEssbh{~HHHHHHH' ia=Vu3/׻0yG7Bpa?g0קEa)i_|+@>wo2V~?||I$@$@$@$@$@$@$ K^m쏞+OZ OGQOwsݣX(_ x1ͷqp)4o}/,xlϨ+>=܋2aHHHHHHHқCzy8'㎅п~f]K7o,L=8ۗ6k'txsɸkvcׇ/m:Ԝ+:u'h]c?2_A`YNz=M� � � � � � � �gq>լ`Y_MWJz5G]{5ŘPby8tbV-k#Y_26CٵOuAc݋/PsGd˙<gmqem!z?gBRs< %prbe(Viˀwێ'_k2ZoHHHHHHHCzY~;3?eÖ}~ ^c}%ڵEZvdv(Ҵ1_@td2<D ƺχmt)Wsµ.P-1> Sucrsi�BUPz`㬀M_r!pwXϚZƚy%   J… 4ѽyT}6.\۷Z|PƎ·# $^[5=:cs հwd\\aeˠo!vd't3-Ԝ1&eϕ w"y*P@šuq3|Q6,& � � � d #G{8tPVqIkAAAܠݻwoM(SN8|0n޼i+aL~$@$@FC }*X Rԝ;]ヱ8M&T `zՆ-[a`Z1pR!1Q{B9Pװf=sZ,,o:aF!   @?ƫ+d}}}b P/3lڴ ￟ٖ� � &փ73Co3ſʅ׃xN; abDEcsAś[ h>8ȁ5k3o[+K^XVZ|)=d?Xfz}s~-2YgHHH2@J1|r1+WD!!!~ҋ-juo41`(s&&an#7nH9\)"/T/|IWav!uV/l,^KNd46  8؞WU|l](V}-陸T!F~=*UԹÜTy%w^'2$1~>[}ϱ]~y~/l`.9ª*W<{Y_94 HbM2g-n� � � @"zj*U Z̙3j*2hk*Űa !b̩X"f̘ I[>u <=TGٳȦ^j~7u?<ﯧyř3gtU'>#8Xŋ:ĸ%-Z?}:fڈU^=L8M6ůӧU=!O]u/J*?>N 1@M<BCCG/F%^1}4"EաPÇ7n^'&Oyaɒ%zàA,-yL$@$JLzcRG3~T{׮]c5m/mctvΟԜ錉2?okJn^?M{w =)ϞYgR9srg})._tTjU^1ɤ BӧOL*ԠAӴiThMk6)+=^׭[j'O4iƴqFݾtRdg}4eݻwM8eҥiΝo?70Woذ԰aCJd=)ddʰgR+իTBFz_}Uӭ[Τ,|&e3)925iĤN:ej޼6 R4)Ccǎ,?2cX  Hp$QB!mɕԜ#aWr]N$@$@$@F@< elkh߾-[a'[t]QRޝ]cmٲ%{wKKɓG{ UDoҥe�2cǎ!00P{}:ŃF<Ȣh"4k >Yc׮]u3Epvvϟ?JxW2i1^5$vʤxmV?ךy^y_|l:VY'^gXtYHH>iًHHHHҗ׉er/Ɛ!CuFCvT'a 4D{zz"_|F$2w,E SʲJ%Q,጖:,HY~=zeDN%JJJJآ <c̸5_%gs!کN٥O%l0FJ? / *@cz3T 26/  �f&v"    P:䕲<Q$$w}߾}ѫW/|w0`e'eɕ_Ę*'{1כxo~(دcFߔ^X&^~efk]3Ra|bMoasƕ+W0{l[{X^;� � hm HHHHH lݺUh_N:揄)JbS 1(a^Qi!k֬ UT.;K cbJ1IƝ$Vk׮5+J(ZzI/FE9uRDPuuY<T15 .ƨI&i'n?h1=(?Ҋ$P � @XpL3-5L� � � � d, sŘe)'$\O%glݻͧJX߈# Z HWG +yW'T|5i$=(ar:c#K M2gy|"=:Rwƭvix{'`铝;wF2eVZ:SN+%$RB#%'كzc1ԉ`Ϟ=SIHlp6JJXWVT0aD0,+.k&   !˧x@sGXA&Nq^` |`ѣGDu1&i#Vj C9&a{Jn-K>0 Wde2~{O:;B$@$sP � � � � @ H"E`DʺA^|`e+Xj3.%/C_jc>(c77THH :] ,?Eȣr2tp$@$@$@$@$@$@$@$ 8u;0ev:%`Bfx\,U\B';,f.HHHH x饗,22cWF˟� @R0h ? SA2>x{8d6ɑ$dsA$@$@$@$@iNG�KsTh&@f,� @#375膥}'-YWpRHHHHHHHH-)!ʕuxU}PI8)$@$@$@$@$@$@$@$@4I=+_W`׹˸nRr$@$@$@$@$@8ÔT��@�IDAT$@$@$@CDm9uA2΍1HHHHHHHH"oeRzR|{5k0{FHHHHHHHH =8L~GNν( =Ph`!:G-[! C$@$@$@$@$@$@$@$U8djE1u}0/\ur3m* ~pp˗/-q$@$@$@$@$@$@$@$ 8L ~DS|ء F!Wn=ر7N+<<6mBnPl        #0b6udV4~ڷo&"Dƌm$@$@$@$@$@$@$@$@q�M*5j&Scm!   GswwGp2 � � <<4=<֜HHHH$0wqqw{:u.OvV)/`iVޘL&8*G7nAYu \7 � @!@XL    Iԩp<:<y 3>P'{)S\’%K0uʧX|R24F]SaFݻ>t9Gq _@$@$h�sJcK,MTcΝmc � � �  `)9(wÜ"""|: .ٳk='OuUgܺu ȑ#?ng^d˖ͦp͸o(- ߴ%W^\\\l5#q< .Kh�I$@$@iA_L$`4"C$@$@$ ԮQ׳ؿUT?F':!O>6mZn8~*f^W͕#㝷F Цu+o|5:u|Mo/>6z~[� X#\v iM7!rr!7oFѢysȺ|du-\N9A%_^3%۶  HK4%MzdHGf( � � q#}sD4j͛6ᗟ#yVL)*7x۷:f&~DX+Vs~[ӧOW*t{Q X?n~;AAAV.]/ :u͛.x'1}|^ p<y 5kcU6l8fϞ3O[3n1o Şɟռ� � @phXt n TrD\R!"wG{9e {LE\o#Ξ؉ciZ?, >aL/� � � 867C1o/ORիm {pCΝx\yVI8erPp f͚(W/QW@~a&:v w<z/FEС*<M{mRF7K۷ѯ]]T)<sz-իUöm[u$T; $sݿ,ՙˍ>gDhLs= $@$@$�6qVGNG叿k7҃_<zY][OD\C!`D >th{JVu3/ö9 ?R߷g/֮^݇F&ڏ $@$@$@$`IdɒXv#YIzM7^?VuVd`Gϯ$R+%x~͜c_ UF,K)_MP_ress1U'D._>|e<~I2H9B$@$@C aj=KźמCb3/p5C]'%r* 6xשNVll/]ATNn� � � @znvWл;'|)V^}Đٱ};/Z*R$*eh/NNNVUٜޡ;!wAǟdKxC$@$@iH W*hU<J Y }@X݌^z4n Xڬһ.8B x`9!sV}5k:=vcuػZ5#,r\�77OJ&<~(ge8HֺsWlyc&9l݆5=_둽_ بm&]dPHHHHaԒŋW9ƨSE }!b >}*K cN$3Rr@V!Ʋ c8v,3 WT0 � � d44y)WPx\Y$X DVASCܽ@ D_³llڐse"MÊP@#oT\ٲ Mjc p.^y LDpe[> gUD#NLRM^;~*z-\!:ŨS(ܰ.˽yliBo\۵\'^ ݡcWQYa(I+aaaدNY:{U}r7_ŢJue; � � � *W)'0:-ZF5H0___3'<7{~}5~ KzEWV>}лW/۷WA>^%  !m+8ev)On׬BX3H #oy?G]U(ۣ[ir19Ҧ-*ɨ!e?jo ѷk%26k?"_5o6mb_pym:|xUge pjHdsPc[(ٱe(]Jd}R/b}rj$5J~^= K!%ڵ5櫟M˛+țTWqi亳HHH\_iJ(!.bjrt]t y䁻Ex$_OHB}/u2-/b@oC U={21jԿ?j}v}]<k  [_F;$@$@$Q K^GNKХz1[FqNy=˕:=˔C(ڴս:VF#ILQ/*ŵP׶:n>St4.Y?T玈e' 7jŏtʖ ةK1\%]{;oRԡh6q,1 47t"9y z   HsVXhQ+$W?͛7Md-I2 � @FpH0کj9'BqR" ;w.Mxd-m<qaA=8Ro ŰdMO,O17-ΞCފRnE zLdk=6L3A;&&:AuR风˖ `瓉xRin Rvܩ$7qӤ..(fˆQ3}HHHHHHH2Կ*Oj NGdT4^A쎳csݐP'q+9X-Fm;.߀B 3&٧(Ҩn+Ѿ-.[KmԞ`ҿ+ZY<c&;O)Jjh ݔ$e"O_TnݻѮ]{L2!~G}+Y       ydPL ۾q"Rc1ϯ&/~mѫ3]Qn69$Xa_Lz 5a+cKuz|/Sv1i�K=ہp-~Ŧouȉ"ϝ8䜦{w'QY ?bco!p%z3&xg� � � � � � � d0'XOs$3Jy]]Tti0a"ťZq':\y!JHs*O}Y<eU1Pŗpeʗ*~~iyε dS9\z[,YC U2'Zv@:s2(6�;wJ驟HH ):ƀ.!7yeHHH 8X|dxyt+\(U;e2eϕ cKGm5[]s*w3Wu"Öɵ!T;HHHHHHHRHa `)eѧtR\O!:<y+oكHHHHHHH S,S| /BW4v       pD49= ^*%      H_4/k߽{kx/&O_N$@$@J߼S5HcE$@$pϖΰe˰91 � � � � 88 HH#^鿉N^�KTwrcIHH f昁_Y+{~KIHH 8 ّfR!w"˔z/ag]ݱl֩8r j [9MR㸺]G# 6JCTE$@$@$@$@$@$@$ ,FY8S~Ӑ8bC'gx gLpUެCd[~JScY'q毿@|; 8/̞cbÀA+[7e}zN&kՁ?MCJi"##1~xl4HHHHHHHRE ?Qӧ޸IܽK{xa8;U];UF#=p1:=aûN-tڰڪAoBŵD+cȁϾ0ܽ:U͛zjʪ[IHHHHHH! dYX>kxE_Ӻ5-_ q fׇcI ĎY?- Vt-o 3Ӌbocks}~,^\kz=~Q&!2o+uY#_5 aEB7Wtu|v/,Lw}H/}XXnHW+]NG|߾}ի@mXɞ={b]XO$@$@$@$@$@$@$l|oDq?|ȕ3X/5o7[r˕8GhhtxURs0z{U镗9٢-jxՅs޼&X;c3 !!8|m>=OO떨?i<.\@L]=,_h,1/]Bqu)JW_ko4c.'XϠ)`qZF"Emhg56nBm/}yo㠡(ڬ \ D/{ނ:wDǬ 111ؿ?-Y+UbŊ%Սm$@$@$@$@$@$@$@@5%)8<s`8t) `wb|~ʼښR$w(]Jf,[F.m}1M62_J9rwFr9rχINJ/氷 F+$.ӯUBE1E5WJP&mvo(SgT ^Dq Sn\\\0mTV{Woߎ]3s)=~$@$@$@$@$@$@$dȤ37B1U٣-F%alKWV/.^` )"9\%]{]%^8<U{+UANjW{u.^;/#J'-gN'ɞY{o<+%RfT:]R ~7T\r $HHHHHHH spH0z6^ }}&^$^=kq \?Jvm{D<wq]wTy@,m̘CrN[Jw1Ie8-JMW~u�<˕hrBfz?Bժp5higv"  08s8e:vWFk֠zȟ?i  |ؙPSD޸ iWR_Kzy"^>_ *"cқ~?ɍVST<˖U+[A$d2xPmZcF[B:lRKs+;3o p+Zw\Ilފc I^ܹvڣ{IXHY$\{RHHHH EܬG>/ITV|]4OIpĉĚYO$@$@A K{3%b.3 O}/| ŪWSn0+ MC2t.?wH&^Nh ԬM1BF Qa,iBn:i٩kjCQW5of>=cy U8fvKo0 U�Z̝m=ѲVKx<z(J*Z5G$@$@$S]Wyॗti8y{}ip$@$@$[)jQ_گNQ:}TkW &bav{״e]߹l9%_4]WIDr1QѩofB6mbͼ'  H@@@zv,DM???<ȋ,ۚi4N81ٲeOʇڪe ?pP=g֭0x?Y;Ad*^?"ڶqPndFHHRG޿nߨ,s(0~%.kW^SbJkpr+\(U/+_2^tT;(#)$@$@$@([XW0/K,VmZck!"_|9ƎƏ.]Ć [,[ M4FTe#}z~a֭hN޹3p$@$@$U dȬ vly|($@$@$@$`OeU>da%RW_xyٳcF>-Z4ǝ;*oit;-I?EI{Y � � ds$@$@$@$@8pwwB^!'P˶ƍc떭vѸIjJ{ΝޱӧOiq>DÆ N$@$@$�-HHHH(Y׮]$iiEQnٳIf|*Vf?n>v"  F%^IO!   Zb|0R⅋񑑑t1>ػ7%}w$Μ=iӦu@$@$@D0G6    ,G {x31{,ÙӧhB@-޽K$y1$_7O<kV$oV fy0s?!`  p4Lh(C$@$@$@$4jX>l4jKOIF٭{w<ۣ;rʥr}o2q۷Dž 1x xzzFFb}$r{% gncHH:'Ȕ(_/=gz&LRN cq2A8Vǎ# x͸['O:ʉqan�ٜs1hω Ol="аRa9]C~Љn޾G^yoQt>r{PO$@$@F @=;O󃓓SǦ�!;?WEDD^P`//22B IroKqzU|[XG$@$@iI 5r~ѕeC ccc?G8 A!Vlv붟vjMB{'O uCO?cз:E߽ ΕVusn?XZO S3؟wミv3A)Vy/='ťv8 |peU'.D!B(BCWRIHH2JKv+Q㗴KRG!  G@5O͖ln֤/+].Nny&q/<\uv^>sL}~r � � � � � � @ dYX>kxEtuaF6ȫʔ#qPݺV{/,i}~1e5źnYN1j ~Tը%rVcoLQQVyPz ;w.n)jfNfCEu,/GqnSXS~Q_tN|!]g1k;ޝ 2fNF]/l^3J$@$@$@$@$@$@$<,#\GʵGg3_NjJuB6k&} d5gX׃j {.GxivFDu43\۵:%:CWWSagFOSl(XJk"їiVAS|NcG!|+ullݚA*ECPa6U�v^Cl6EHmZ#*<r`q'y:˃^s~/9oH\P*;9RǮDfeQx^SF^o |aռ_;f y5.˚)$@$@$@$@$@$@$@ dYX­Ai<`-sY nE+s/QK()3 {iϯb-cNz=͚h&8א^2@uoڵpߵ,:<A>">>(ۣ|}7p(`EmP O.t_\S 7yzVFE, c{Ӎ|-96hrEJ^_:+Ւ~Jn/�֥A)tW:٫U~W* ˲ $@$@$@$@$@$@$@� `Ex0괥/Ʊs=u>NÐfB*{/W{aa k9=<+>I#ɋqkk/,ܯML_^>^hQ&yLq#,֣mxR R !a hF;$@$@$@$@$@$@$@ �f k!`+GW駞Ď9Vvja5:l\'PiKn Te*d֭Q'C6innĦDnX5qjPV*8T![\Xՠ$n%rd{8z.<2|( u5'W8s ?2eʠTRug; � � � � � � 8,,_38rK9go7uV8N«eה]un?DZJwAhC-Ԣ%}2._bN*VgĂu0/Ʊ7[M<dPk/^L'.+G&Ƨ*WXD܉n.9Pn=і"EZ,7Ī׶G]S" .D˖d� � � � � � `0!-˦#/<|鿐ώv1,@_S':'7VO>4+(]ʨ_ԡUMq`Ӑ7iK&}*dWzR.߸Fo-5Pvd5-lhn˙ϧb];?ec>:)I.9$${`Vk � � C$R<; 'T$@$@$ '_D1Gf9aD >,Kܽ{UbȃM|c} [kY9>hxU�('9Jg L2yB6VMTt .^ _AdM䝥о9a~rkkԨ1;3gN#W<ƲHH2@@@zv,^*e𓵍w i#fV� � A@X|l o~m?( qDh:D9L-;D M%3Z#C֦Vq:~ {N\GZ>vaPۇ>F]؉HH҇<g~ZIHH ,}gj^,\`3tƪjYe1r pM 9fv{׭[7VN      HW4+^WV*JrDؐ4| ;HHHHHHH YYdw$@$@$@$@$@$@$@$@<_        &@c � � � � � � � <h�{HHHHHHHL& (so0v| ?;wX;vn:,ҟ=ޭ[zܽy 1tkvO㙫aXnrvݨĺ۬| Dϣ&7oռBb&.߸a~IHHHHH2),k�Q4d<N8{ %F~?Eًq:8BB{'O uCO?cз:E߽ ΕV7~6XV!`7Bpa?gHОXŭgOy2rj v/zF6-C}T0L if۴Ǫn"EĵI'.Լ/"DݦCW`J$@$@$@$@$@$@iG GکzлNel=}&q/1&|DStR!w"}|v;>х0EGQ㝷ئ}9P ׀|/^7ۦ=j F[N_ǘD ǒ� � � � � � #M z5(wZK>V([^nP:^U b@#^qPݺ{/,i}nrjݦֽ6l4KH=w8|.}>I_E`鏈[}^,YbU7 䆏'V9 O[i[K1w1<>/Eoz,o}e^[ (u3d.}9* ߣ!H_Su [Nzhy'OcVfCٌ1x[Uc^w1C$@$@$@$@$@$@$ dY0o7Y8JQX0 :wD @dH6k&} %3SfMr%Ue 6RC3fK3nns4Ipa4M4: ^*0I80K#O14>%|Ǚ.^JեK~ܸqê>ՋǷ]j)o6gnk_okl] dݿFذI˹_lĈn50o]S!"?+.1q=׊beWO]5o< c9eyk8r]FiЭq.FyMWUJ~NcVR /t[{N\^[=eAbo>UUuc/VjƘ:P} Jt׼JP|rrr,2 � � � � � � d,k�I3!d"],EW׹(ҥt#(KʟQ Y_>|ege, pj2z e{t3,۷wAԮ]ۨJZ#R}Z%S'G3$ cnjz˫{GM]U^rS`n h_Q/:EJ+R٢yt;UF_�݅CQ'jX[l{5D܍ֆBLt?^(\]r $.W) we ʐ&Xo&j+`g˲ � � � � � � d 6W_aQ2_^G=px$ѽfE<Ӣn߆seÆ !1*-1*tUƨu.j//14^v[*//X#Z:QG- XeAX=ܹKpΑ :7e 0\ w^Wuܷ_ jl      Ȍ�er>~yZW(� $b^VE5:tQKjj}[{UTM{dIy9qBܛy?7<g=|9A^Sjң@7 Υd$1B҃:u.33RBooo\~k׆nQ"X. ?iKfTo$-5=ܞLT_~&g9!z T2rYf3s9*W 77\Z�(@ P�( $(0qn!{c %#pN$k g0:p1ܼԔL]5Q3ݺ `6>pPܔov˖-G׮ݰk׮</݁ثKj^GAF9JyZO*EAoߥjˈOR2OZn^|#֮]Os�(@ P�(@ 䛀A�sfÂ*:s @t|~zi% sSin@_N©SQ}h2mj>1 =DŽq޹e 8h ; 1:}{SXk9vk6SAr>1ʯ[9eLrm Х`??L}Myef5#K>Uq#*�&]Wœ}dF3J|q%r>InZ>@O};/<Ƭ[^镡^WõVkПjwb|}RxxjOs�(@ P�(@ 䛀IH6Z>>>&f 4c7nlo4<<6Jk's=)  k{{{:8A%gaM͞M6)9wb6X^\6y+4rvZ);kl kk}6�(@[TV-wwL?y v�(@ Ph z~*1l\]Ƙ$7gdq_2JW'~vqqq8{,͛WnX�(@ P�(@|`�,I9 (Q@Xc P�(@ P3x6뭞ɭ$�(@ P�(@ P,�XfP�(@ P�(@ �`FaV(@ P�(@ P�2 0�ل%�(@ P�(@ PF$�} P�(@ P�(@F�KIMEpd 25K2 ?ΝW~9~"SMABNkzOMI}<{W>95߼֮W/9)/ u1 HLJQLݓSp^ DM:a|{?z%rWCХ,۱�(@0~<F4K7JJ\d>=~\\ /� d/^q54\ Asŏ3=~G^ېspfLu|%˘ _8㝯.z/ǶT_paHIJE^⥙r:gSpv$:O[A0?t񎶵 x _x/+awtm_y}~Y7iZ~R2ޙ?v,�(@ P _?]~3\rݻ<Nk/L-;{l_/�_``25`F4pqRRim1>CwT ąCf5Z4%kT+7z$j 0q/_ݓ^?ˊV{a86z�(@\޽ LNNFЭ[AMuqn($e3vƱ,0Yaa^AȌh,G#L*?m=3�(@%`]<ethFE s+nV]/ S;'_~UómGTR[.ҵ:`sp9MzMTr؆VqTZ`*`6u,{.x ز G~Ͽ5h Ʉ8Ƽ+./EzѩSUu,gM^%f\ h:n035AeРrix!h7nl_],9Qo`ȜG~a7:y2ˌf8X Gnd1(@ P(qcǠ]6hۦ5z۷khuhӺ:w&_ƒ%Gi?~2cx4m>Ө>||ZhΝ:5kMvޅ@Ъe t6?Pv-uoVWDWzĉG[fXȑ>�Qi2֥Ko?%TFQajS�mE0K {1kq|bヘzvG/'hInw�+DyPw}N絹Kw86n{wIcdżh2c:nhlJ֬SSRu/| NMa `Eg_9*yeZ4SyylU}WsYwQmd "*߰jZVh:o ß%;nX9=2Ž8m^܍x�RF`ئcas_Nc6_M Q #_}Ew2u(@ POE@rtt’˰uvW~'u.93k7ߠU8r(/YZ{N׮0jtV#G~Xmۺ5jP,Y5}Y3>Cݷ_|v܉?M?3zÇ+q~D;Xr:ÇA,ZO6cgVچ ej)dVXF PO^7A<\䧛э,~$atAl,M TZ~ť_PVMؔwEuS&n0VyK]UA/U܀ߥcmf̋mE7XG(SN)YYYa9(VXn9KY㭎6"%SbM*`@*nE{p-q\B2~TVu5isJlt`E[{u_NoZQg�(@g+PD|o-fh(Q `9xURU]hUu3^}jΐ!{9dPw>߿~{N͂!j|y]2xCWn];vT彼O>؊]5j޽{2^_ʽ_%^ٽEgj P@> u�>HSbl؃3_. E{uj#!"mRBf]4>Űבn m qI"hV UX%/07��@�IDATz(1"t(O.կ\J[UT1EkOYS�kx2Kb8s-=E�(@ <۷o/  D@*BBB1nY6m*)Slٲz_{ZLvpquQ"/V\_8wH(UZ*ַfZ*eRǷnTryeKmlllI󞱞�(@0�Ē{.u^s@HT ߈> xE}4)uXV2qpPf̀+jSTyj<[Tb\Zofm De Sr\|/Oǔ]r=S�k1Sm۶ϭAYв"\+}?SqY%kK3`_У収ŋ.P[-Uw=Tz{5;eՌe�(@ Kg>`rɓjۮZ?nj1o|Oʹs>Ļg}2%gsO&Qcڌ#Gwa�(<W칹$/~6 <io�_I|? +KI έZ p.D o/aT}[ȧ<,]$I຾~kd.eEAXѴK)œ4-5Uw[ jtO7S wC[*KF~{k?U[^u0i)3&]SШ^EK{䆶 unq}qO ]QKT,ceS(@ P(h]eÆ ڗשS3ׯȑXnBBBh*m"~ɩz߷oZ:G~ߑtK, Ĝٳr< ӴAp?.Moa^G=G(@ P `3ܾY%`ʧU[u/ժmEv3m Rl6j[SӶ+.ַe|9*Wkm̈_ &|fɍc_-y}$h*6:C^eiK5S6c}{[12hΟ'oЈ8V;o2Ïj.%зu%pE֮߆G*K/מCԡ*63W`nfqom�(`P2 k~{w %ꊞ=_$-]*SqjiOȮZ0͛7Sqɔ~W¿׫prJ ?cEbܹ0~<Fw\.)7g�(@ </&bYϥa}||P{ Q/dw"cP5lgfƍiĆ OvxX,y,NJ_(͋xʐIڊw?||"e)>1ǢLɢMwE𬤍e+gXL\ʖ* lG Pϥ%bָr{NRM4T̴733oy gmC|'ə`; `Wkkkfט�(UF %e%%X9JٵM_.[9k͗cJ nNy\Fu,ic%d71YN P.%@.?>Iwz\�(ʋR�(@ P�(@ �`)@ P�(@ P�"�X^ؖ�(@ P�(@ P�3, ~5�(@ P�(@ P�3ϐw@ P�(@ P�(�`9bUbb!^6�(@ P�(@ <5m ܻw>, Y)@ P�(@ Ps&`TxE`2|:gI;eaU,덭s݃~ o6P�(@ P�(@< sA-߄A/AH;>~9x:c{xx{/o�(@ <+/GTTz. PSAж]~N`]<eBb0 }6J{dCvofffxS�(@ PPdk\\2�(W0m HGۢ(fi퇲Uק~lkEb;vd93XE P�79SPlh aݍ5;0wGƴbr,^WPh{�(@ P�(@ PR(`n;cA꓾x;# ͧ>eT8::bUh֬Yo((@ P�(@ P(`{eI))q?yj:EV:2ccÆ ؿZlsko+W 777:P�(@ P�(@c0�rG% ,f`_ v~V)09uGƜ0 iݺu5j4fGXc P�(@ P�(`t�sf`ʧ\[VX32G2Lu,�(@ P�(@ P(`0}]f&Ч| ĪUн{w8;;gݻwa}T P�(@ P�(`F 1~PӬY3v`b̸8={ӦMC(@ P�(@ P0hfO˔)2m=+(@ P� @bbѩp0� �g@ P�(Pr+z �7=q~ݺxwȐ'P� E0Cx�(@ PF+�__̚93=^rq1 ^}7X1{(@ P�3όWL P�(`p\.55{f!pdXXX Sq޽c9(@ P�3菏O P�(`,2 5bHLL矫Ѣy3 x 4mc> 2% թ] ۶mŋ:~ƍx71sh׶ :-}bbb~x+e1(@ P�37䯮IIIt<(@ PD_ǯ8~?f={a'nau>|7CUX^iSA&Mtn_ċd۶mǾ/ҩ(@ P�3O1=>p$IDjk+emer2x{n^'d P�2IbP [ڵCfU]77ڻ7mݪӶG(Y$T\*;R7?.]y~S�B``)"yf/@DŨ2YytK[o̙s#{rƇ#%>[i#s>tDgUC"=hMp叧jN:'NV֭Okb�(@ P-PbE y]|Wbo^ 5)W߿TeSյ2/77K�(`�6MdOy U7T뉐3tM{QȗD$ hٲe (@ Po!CEBBVZ sssN8}XfΝ?'''5C]S!7O2355;C`=hܸ1=$''o<(@ P 6�ּ ØMC6p)a +l۱غ ZRG{.Dϲ%Uٶ#"*69K{ &OS=֒m,P9荭/R3NM} u[P#s\W_}kی 3�(@ 什&};Ymb/Q{w=wرcrڵk꫽䌯;wryell,:}lMv�(@UIfs]EyTOW]wү aZ<%kT`XRSR(Q.^ bpwK*u~"WWT|)⫽P};}=T|zvi_˿iDW׬7t.%s޿pƌm_tX2(V#T"`s%fN_kpy`?7sΡA:דہ~y۸�(@ PY ԪU {%Թ3n>1/0^VCUvϛfEDDb .k@6�(@ <�q6&nڏ¤nrfu]he*bY/O`Zk"% _E#l+idDLpv W.s:l.Ƶ{E©iX ^oqh/z Rl/r~]R E`o9VtxӘ1c([lΩ)(@ P@.%>? >[bVtH)S铜5&_S񣥃rc0O P0$]\ߣ;`ק^ 7gZwjU.̘]XJe ~+\*c@YV*ߴE6sʆ)Er6çY[ ]tMX.>xU,YၛxZ҈#Х>}R_0.]հ,�(@ PL@>Y'$'K.˖+ד /(@ <F9,nG!19ViK2)L2Sž'SE}*6}v ٰ葨;9>uj;oi0_R,uGù?jjS;xLKLfP32Tz'OBnd_n\Ek׮?�SNѫQ�(@ P�(P=~E`KHcɀ`ĉ Om ~)YșSс*&)rV\bDHn#Y'nPVɒē21UxJdz*?.׾> ߠK>cKa9r= "ŒL& P�(@ P� Gg}#T0uXZRxgգv/ww4-rc'a36o 8 Vf 8LLn"= QOdɍ5Hs̱Sb{-U^Gө{3ȼLO+ctNmנ9Tܽ*Z�rc&*yNN/j??ldgg7o"<<%JKW�(@ P�(@ PL#XrXѸ{ZLB"Bb ?*V_Ìcܸy>؄#oO'I*rwレ  fW霹C4 EF%sk/ M4%ɓ'/p28�(@ roo<=FqK3zZofR� FM4`9},-PgdN.qK!JK,s6\FY\ܚkx #u`F P�(@ PS0�S^@loo_@ P�(@ P0Py�(@ P�(@ P'�X�(@ PF.`kk~~F~= P@BobA&.,H|>wAnϷ(@ PQ 4ӦNATTQo�(82%M,�XA�(@ PF-ж]{(@ P+%ϳS�(@ P�(@ <e<=bY wj뇐'rko<{A#%!zj(B8WqR�7õַOv"c&"ba5g9(@ P�(@ PP l�,%5}l2 :op?k}:<83s̘ }ġu$'$࿏>;!:O pNSw�u?9^jIzhsUZwNHt>".`2❜�(@ P�(Ph 6�&_mD'᥊&%/S1R^oXSSHMN"1&1zGT7mxژ~3]P�(@ P� H`7o^S!$* !g;X%X.o ̬Pw/9 ,Ḓ 46Y;7b+ҵyZZQϫmr|<|? ~Fr\9\,~gϞŦM=d~rl>wQ="{q7md/ U |L>Sv 岓4Ð!>aj׹+&n pJNŨ^u0I)1.R[S%l,G1C P�(@ P@E^pE=5/ـ bbghge۱Wxm,:7rjD1sгmG4a*l+TwjD%v nGiߩz~NQ0/RgŲKhи!wV-yj :blX><®\s!^Mz&V]e`םѰjiA03ӴISjQ?X8H١x1Km8<*5O=T-gЈ8U_K?k7\`GFYe+ƶǧ"svo[5\K`[*֐/ߜWUcwQmd "*/�(@ P�(@�|+J^hYg?3woǑQ5bNGUKCCm^fue̦|yVtSy*Wp<rک>FUm۠lָ/{z]c \tB҃86j`%CdqqA}5iGwA~:/ߴ61S=i]J:(NUig& j>-+/Rd@˩dD3M*d\:;&fD�Ws7:QO)q}ouL�(@ P�(@Gأ[Ȝ+Y4m][nYG11BPDt,y2TO.]]IIOT}Θ@\g_B !"шwvU/ [[ cĈ(Q"-8M3RGP²ޝ¢]&OԮnYϧiXr)MJӞxBe %u嵅P�(@ P�(Q�s+n{mƋ� ӓ W$:$\YTұN@qU=Xڨ2NP}X~ѣOlݺ5~Il^ W3N ^Kg$~vɮeٵX.*5+*p*QD{[~~~\2rkz P�(@ P  0 RN@X$Lƒ^OLg{və\wBn^HK8qt@n]pRE3k\_u,T/f"֪Zo\o>|v토 H؏LJ==񱨕9j/ ϣ7 aku`xKZn^|#֮]nlK P�(@ P0:BajO9ŸoD [Y^ۖO}<$<UJ*_Cm$ZxziO.3|,_iW84|<ۼi(Ӳ87?SpX,ZR襚cO}ȧ7~"6:YMzk>,hU{ ;2nj}4ǝ<\~b'nQwm + 9<<- s<�(@ P�(@ 6TMa}||PFOѱpK[n[1{76CzyXqғ}s_/<'}1:Z^2>Q6V{E`jiY$% ^,J<$yMrVZ1[M][˖ 0+/�(@ X-ϧn4m< ;P�(`tJ"Rt;1paBDh^eY@$Mk3}:7t)8}4tы)..gϞżysK(@ P�(@ P:�froryk9t^wK7IԻ>/kPQ ovt_PZ xT[g_QQuX P�(@ P`�iqqB?nk?$:V, =F�(@ P�(@ P W~ dw�(@ P�(@ P^B�(@ P�(@ Pq 0�fܟ/�(@ P�(@ z �(@ P�(@ P-�qzpy>!OW0ID߼9= \[^.]εAbTGBdRTA]McDc[u I)=uMP&1 H.'8,nC P�(@ PF(`TxE`2|:k?2YmÌspfLU|% 9!}  )Opj/}K3LJ#%>[eϮ ?vȫD,B'`q|ϣ7qfU|tԱ t I;w>t0<wWoG*[A0s:yA�(@ P�(@ X-߄A/AH1M49൛([F[LRq}?f4dӵ¦XWjoSWڣ>+&(Hy<HIyW~__mihQ� N{y3~sGv�(@ Pl�yEO,<xZ|ɔ,zcB:mx##w3k+T uFS\_~Mݺ\ydXJ pmh^ww KR7[fz1͜ҥsꢭ[`гgOm'&c{MD?HDG,YUک %DZ u<gmLy<HHBӑYfAZQs>hNb(v l_3מC %hX5U^ː[3i.\q-8!fl/6(o>lm*S.iի~ % {t�(@ ]ڵkYvTR,�(@ Pl�Ѷ>~ վ6M?G|x8<vD¶BXj˶mZ5wᄊܾv-_۷·_:ŵmڳB9?d͚b8?'5F1rh16lʻg6*_^nƹsSAzvIʥxT[/Hͩ\[b)|3!LMM͊S7mN6:So`\(9~ /cCugU^d&8.~>aش ]Q 5E/[q)<^~R ۳E\vj2qsm ԅ(@ P >,G,>js4h;(t>ن�(`t�X|^Rr*;1snhCC[,Z%K2a[MJɗ FOE֥_~[P.@Z/&sD}]5ݺu5j)E%_2Up[s#4Ǘox @l/Uǚ~%榨lab5KƝ(2}5:1d~mבAXt<^ Q+YqMe[4-ס~9ԫT j8umgQwo5cD1+u?M;aֺs.f1G{QP� oKE^˲f` &L͗�ؒŋpuf!(@ ݏÊ郬XPQnt/{̴XXZ>Eg~Zغ3bifo}^w^StoR!_.ML+]Z_3Q&2@Wi)N>l-,BMFryV1LDXXiN PTePY'2hպ]L=Ga3 P�T`y] SORn!:$g Iu.33RBooo+gڵWӜNy_/y]~�^ڊR5kǔni3oB4)61\Eg9,cu/ </~j6pk\O˕*&D-L_<(@ P'0p mǍV&L-8DFF:YT!!wLwSS V`l; -_6fk bl+Í4mdI{͡{:vviT�(P@x]~^2EBO!-,'KTsGHϨujΑcy ))85kfzE@>`6>pPw7<7e]eѵk7ڵ+&U.7O{q=,(1/(n3I}QxJ}&rCt:?Ɓ&%@ʗ\¨oMmֿ-u-w#ts;Q�( TM0M4FK~fK,FƍhѼ9oߦ=I#'믾BfMѲEs > {[tUN*ۦOV6^]o LުuUn ///܀oUK1_ч}Ǵ �(@ AGܾY6V* VCkwp.( S+\+؄G_YK]r^Sgh,9/aZw2NNf\tFa3lܷj1veWz)o&c~&LJo־\WiٿU)K5T䒳JYދӘ-6K#5I>a^uvF?TGid|׌mS\Jꡉx¤wOX+Z/S2�(@ <Y3s̛#<7nRd)mV̚9~v-g3N9m[,_ꅽ{5Xh*%֭[ M&M`3f,\ccժx0_\͛7b25|غB>kKԹm}\)@ P!`"|f>^GLo#|<s1Ԍcܸy/h~Ó}>N)  k{{0 \J-3/G3b S*YeIb}9,Ih K)a=:S�* 0سgor{ Q'ݯ:YRS4i!Il+Bb?6nuYlM{ 9+ � ~Ik0nߨU 0eQd*,^~~;Y:tv-O:A1v8 4CygΜCQDIn/i_]ϛ:>ldP:Çɓx'Цm[U?ct-Z?: P@A ` s珀l\]g<؈>TRl /_2=IJ>InD Px9<ݳ? ؑÇqJ4I_<֭򎦩c…*�& =<z5&W\ѶwrrR/YPBUUF mKV֭[WB܁ECtV}㶋 'zM-_&Lsٲ*/dϘ3�(@g$�3i(@ P�((]պM̚5[S}{nOb|p]0 *ݸq][fu,}dpj $k2s[] XNI^L#FDԔu�(@0-�(@ P(VVh#_{Ē?\ 9KnjϚ5YtY<1?~8~8~?_m^_}'I^}U ;{+V,nXm c K,Ŏ`^G֕�(@g"`τ'�(@ P_}-9SNUTT)So  J?!(f\lJg;kٰСx>WWq/~WV5Lnŗ|8r9s}Fsss{iNXG Pxf)Q&OV8,(@ Px&rjժ\>0M𳻱hX%k-OHH@xxv//Mkn<;Q[[lJjd.#;ڋ $V<Rrc�(@ </| P�(@B)---32HGsljj gggc͘(@ Pϛ��{>'')@ P�(@ Pq u�,5>\w>Bsij P�(@cX,6?c4y�(4 6�"[}l2 :>s@BxRש7O ػw7ܾ}XoE P�(NN:pqqIW,(@ P 6�&_mD2^hZtD1hYWSm#""^y�(@ P�(@ P 7 5)0CL?Rm,иBYGxMaHfeO b�(@ P�(@ P]``EQ"h[<s+~>a|f0O) XbQ;v@qy�(@ P�(@ P QFLL5A,BcbѺk{7+c%(_d �(@ P�(@ V ~  Wx7][HHN.4)SիWYfy�(@ P�(@ P yc8>r\JآC}fwذa߇-[4*W 777:P�(@ >t˗#**mQ� C Bv :�?Q / ,f`_WmMX~au:< $geL֭èQ1s=ztjS�(@ 䣀 ~0TQ9(@ P8ӦNa�q?6ojvXZSe1S3bBbϯu.4{{{+ ;;;&#oS�(@3*y�'oaAφ6`2ؕ]rL~5FɶXv͌|XjwggL{n53o߾X@ P�(@ P�Q(7|Pq)%{֬ O 0LpYL6j�(@ P�(@ P+`3cy;+SLeЫf{q�(@ P�(@ POIg=%3K P�(@ P�(`@ ЇK�(@ P�(@ PȻ�`y7c P�(@ P�(@`�̀>,^*(@ P�(@ P@�˻{P W\۰(@ P�(@ PF`)l$>pjBND_Ybt4]^A?xBN#GsL{ΫsE!|=`bb-Z�(@ P�(@0�XJj*<e0>WCuun QkSo;z %un5e7Q,]U5׻ MzϏgf3P>WЈ1#>>ӧOǚ5c6.�(@ P�(@ P 6�&_mD'%*b$a<a7}$*.vi {\h(nlܜ'+{{4z"zS822RrÆ ۭ~)@ P�(@ PϵWtAaӡI&MPLiZENӺ|*2-,qql mh^4KS⯚Ru4IIzȥ[RGl='O|wMpu: ^S<,z~~>z:I11N.rᧅj36fϟXԫW:u֧N;_fff:<�(@ P�(@ P` 6�h[,-+)^1K |Z<e۶V. &Eޯ-|>66hlz9H՟K=7svѯ_}܃wKw86n{wIcds{ v>h�|<IhU!C^CUUws.xMz?E_}87GU'ur)gh|\7U'g~"Xը;j8y2xm]w ?)spYM;v쀍r݇ )@ P�(@ Px�ˉKJDZW#(*y%kTWRk84H/VtC0Vyyl^8Pcب!OZ<o8O(U>%m_A67j =yJ[ڹ#*.Pf d ܾέZp"7ݨ'328&}븽ˠ[t\Isnέ[on]T^J Ν)S~qaFOpXdl@ P�(@ Pxldrv؆zc/B`S]a&!"IeȺ}7-0Z.YUĒKM*Q=-+pk!n=%QkRQ2HPDjժw+qrYL17ok!_295ma ?1bD.tk׮Y#fS!ya<�(@ P�(@ P@2�&E{ԩ^25'۴NO6ХSTv*Xr$J88ff4 r.MKk~Ȧ6%GGQ1{-}2Is=>�ūV��@�IDATXqrr2v k1Km۶ -&M`)S.](@ P�(@ PxYG,)op REBkҡk7+wv/̠oWskO.^wE$W_덫WT Tԝ;wj7/׾}tZ>)koKFm[rjQj c92Tfu(xp'Dݣ_ܺb]_zO)퉤17O_<(@ P�(@ P'`3ܾY`ʧ\^ BU1[ھO4#+=l{hǯ%4+OlVPes]?v4Se(^UmRqtDV*$T56ۯ3|(JTU&&4ᬮJ" ?tIٸT:?!534iꯙ:i{bqVg3]OM3؊e2]rnnn*?�(@ P�(@ IHO2>>>i$1nae-NՌcܸyKl ,<E <,/E.w xEbc~1.-Hr2"iK-'}R,@7yOCEsضm>]؆�(@c<{x฻ga-#~G֬9"(@ P Dgm.-ԄuYXب'5fQc 0+W66%ﳰ,n혹Uș_:3g6 9& P�(@ P� =Mk|1Q�(@ P�(|0�||F{5b�(@ P�(@ P0XDx�(@ P�(@ P)�c=L�(@ P�(@ P z�(@ P�(@ P�3C P�(@ P�(+`TED#)%EⲬcpyU뇐't<7qEоHIH|8}5^~j+8t)w�s'v u1 HLJQ욳�(@ P�(P 6�97\b?;(U؍M_̜33ff>WЈ:]Gum'vy] );�O|I+j߶^;=f|b2|?^W1k9ϗSë#y܊@wr: P� @W <%(@ P 2ɟܖffXh^.EYKѺ+^kP1b˿W;wj"فM$,}Sq}?f4R 9p^?|3c Y[zD PA 4ӦNATTA^?/�(2%M,d/Һ5jU%`o[48^aq(YZۏ]@Y[R^3r.,X[Ah2mv=oAŞQWk845<3@/ƣRWUx~V8T{s<&~Y&Ξ=M6U{'2~'|nE{=ETs)3o._l X}"8岓4Ð!>aj׹+&n pJNŨ^u0Ig>@hХ^("bPQlbyVĆ~*DW@ H5^HH͹qdC6Mym~ݳޱF4>*OJҹIe W].o @�(]* !� kripmm=B,sXMpq$"JBJ o/yr@?DT L4 *Yض=g5gw^ڎ{CjRxvmL3x2rvN9<}u%6,\ ÏI^=ūdIdM<8{txxO<%Z=ok;HO>4umX:|ۦc;w͛7KHizO#iJNzh_2ҲnyYk<%~cHk9'Y>}*%|ec鑛1h&uj䧮 ʾ=mF}LWy ~BХ4(75/$:rK垮uM+ˤQ]f� (m$@�@�@�H/0<>7ڦ9315Ji}͚&�2Rvв}[7|+O@Ͽzu *ZJծ%+!#g"U]g2ս.ܥTI}^ίj7 .A״?l`BDV:<yRʗy[**o(_Ү}w~R6y}tS9˯ j)wte/:ZLZ˔Hkwf4Qg`7+�ַ}Mo4MZ<? >G_$@�@�@�,.;ڧ5HSYrly|{͒]"KL`\>}XSwԽ{<Mھzjm,Wq# [Q5m* ~F<=; @J+lV/ aTG^4qH\״6]^J9?9ǺCV�̖,#h<#� � � @n�hMk*Y1jT+syDN�9u^nP9R~+7յּzY˫R>t:r^i87MoMEZrDXwԩ梆EB\m9.w\m}y9-h-Y*{yZdfy2J×^z$R*=֝6j׮-5k̨ !� � � P$L*ç-O?kqr\9n!5s2%6!Q&,['=֒,۷Zґ\.]޾Uaɠ Re^2S=Kv?s?~B_`f֪}ͺa/ w=ocǎLV?gFj)Z+:6^ķ4^Ff< I) yrUɢGdΪCzv$͘1Cw^OH1"� � � Pv4WҥnuY_Gf Mnr<RU>P= 㚱Ⱥ0R΀;мR jMfw.l#f|sͫ/FEڎ{S*uloՆUo^gKѳUj]]FjhzQW޽qRh0אKeodc+޿1mZT5xaYt5դw9""yX R � � �5KVrIkvz.d63Zu*X]<Ș18\|nҕM{)le?-rL*7Ξ.eF}f6kYS}*J1k4+SbE9~^ʗ.!: $퓎Jl~SCcker)fT^ve9� +BCCώn:4tXˍfR�@� @$V/+N@VslS뎎˴>3=/(IMՃ F_tD@k-ɺ=epe1ʦM? #12!� � �fB�+o\A97_SS[x]}r!93rҨ.9#ιY@�@�@�%@�YE^Jez ?cZ@[H֙8� � � � ] =32 � � � � ` ��@�@�@�@P �+o/'� � � � @�@�@�@�@�B-Xd$^Xߤ83[J-{57{jZ>r$}g;r\.!*J-]&bBپptghmQsdY'^?OKlj3kޡQdEȯt|1E}|h@�@�@h m�땛%pReRfϋ%!rb/[2e֢:p}_6)kѩJ'˟#FʅROb+˱%e̞#&w6Bn.zW[xf;ʹ XM.mW럟kvqRz0ODGω>^!m5^:-=!;E;Gb[U]G#% m'sU@�@�@�Ol,/nWUäҩv5r:<j/d R]d_ӣd&ghĎ}:8ձ->bKа2tm;Oʌ7ץ|εEݞm^2 � � � @ {Z5j,Ֆ%ˑO@kte?̽Ȭkʖ&+?sK O}NԼ?R_hulx=OV{$3uAUeɐaUT>ci֬̚5+ܼ()UGIrU)i5)nw$~Z*5En$|J8m^ErK L}^^(bSGݞ#rݘ9\3m&6ǵ͗.Of.7GSV?eM%!� � � n�Ky!N9,kU1utX)@aCa&W[zK˱KxY'uqoHoܥt$[3e72ykqTlkKdq􏥲Qxp$]-%j{_5lk$UUǏ͛7ٳgSEfUۧ3Y]^&"\Y>񋴷Fmvب؏:u}.2?KȜՇq v4^F}OESgC@{37roULE6l+L~(n/?U^^BD -gl&?+M^=X1Y1@Jzu˛r� �#phzhMr]eƌz\Q ^qa@�g }�L?>7 *+C4uU;ڎZsZ7h?_pUMڿzu]\9etH]6J7oY)Ulk=^ϼ3ui@|`Ya5-dw?)^OŋmjR6-7S>}kREedP&K r}ɾ37e=I˺dfݯcfog|lDOv *ʷJU쿃[IedFhݑT^Ba=?p2J6?#cja~khSfcԐՑ>mkHӫʪk}(Լ+._QX \ƤBfh0� �9رc_mۖir۷Oz)aOSE/ׯ_/_|Ey2;(}۷˹s2V_q�B_a.2^Ytxܦ~]^;T:2-e'd:t}G:x2ZKkzcVIx:̷F^i)`% NX#4կ(˷O}::LSymH԰zy+%!UJ˱wl^r�J9?9g(ĤKjKLl3  �>} ^ҨQ#kU,X@ʗ/x#/_.+V?@�Mg}5H)^EK֯{'x1`Jz)JaMem8~iܸTZ5WuP2ɷR:̒oq/M`[@fk4֑\I/g19hҀW@oF͕ HTF騭ċwn,Wr�+~j0C|Sfʞ={vRf,r@�$'ϗ_~Y^z%3f(qG,"""$A\+W(9sFXt:Y9+mv[IdtI ooo*ÇM�,m]'O4}|/kO۴_bbb5 t\y yfd\mY؏� 325cS ,tg-?<BKɨ9p&RYJ3r錁BZ_h!{TI#9b9*.^LWb6fW)-mFfIW6~;Ś"poeɳ7^S͌lfօDuG˪ӟLTY0 BK@ixM*jy=Zj]=enD6q3 YNg.m_Ӭ;ƣ&e9MG׋MB�@�DJ*hѢliGKnv1bq iڴ1,s|M<xɧuQo״_k<rmIǎg{Ǭ;us=r뭷u]'>frz,Y"mڴe˖j~GӆѮ];Ӗ-믿СCen]{L鹼+:u2̙#zo1jQGux 0@NJ^A/O=y?նugK@�r/CYz3{lSU/j˘K棧p\ʶO'wj˪/assSȊϘomo c ^fu&V.N&evc)߼Lo~X>@ !?6h&G[NϜ濒| 1]e׫֯hJFTH~]ڙ`U?.'kA{1].;uQbgx^){deN_L5f+o+f{}o�~W/$h몃l>GD$/_Bl@�$0sLFs޽E_g.ֶcTz2*͓W_}׾}{)ip>SM] Mfc .4}Лeh4@ԲeKSŋe׮]a[Ug =&j*ܹ_2aywM_~EtO>I`֭[6m$m۶5B Z5F\ƍmкuu1k i`nΝr䲹꨺oFfϞmyĉ)-Ʃ: @�\ }d 3Cϥ@>Ҧ3b ?2ݳ.wvP?|y٧RlY> 4ګN F^ɠһԑkѰѩ:0mjV,zTu9(QZ`:2,}/ͨkw-z?s^*gvit!6,?1)Ž=y<}}[7ZZ}_yV֚a<;>4$i!� P4A i馛̈CIuCiSI6lr:FݻS 2 u12A#[IGiJUW]e.K.MvݻMKGOM͛77y5(]�i>h6 i`KSllc^?:n0Y{:6RVZ6t$l7 hѢOC@7tGЀ:EFF�TΛg@� m�,gG.w(fMoM{ǂzNV!u42dGFIR:Ѥ[wM҅ã~~AkOA�@]tD9aȑSc6tӧG RiAék֬ik^]Ж􇩔we�Rʤ)6G;3PfHzA?V2iMѲMW}/[> j4k-BQQQgZt1ͦu;ݥk^VG뛀 l �H�XȄ@ ]$E0msE.@�" ^)?SKt[ZyaէLk׮̶-Htء7lI[j�vʫ2Jn2VF3tݔ)S̔IS('Ma/| �no ]e2VIB�@�Xrwm=}4E=iǎ&SuQQyt[o|>Y�.ʯ<͛6Yta__LQŔv45z_֭3:No0vXyD-ӑd:"MG1kn2` ⟼2� � 7�GjA�@�@ NsԻ3\J3>] LSG}di}ϋ+5}Xz7ȴIGg7δ ZjJ?k]KA7yY;eذai맟~N^rԮ]<t3k;WHͮwґiye:̈@�,a‘Vuyb ɣݫ~Ý^~hqUB�@�P 44|cG %!!!)[P&%%Q`zg+ ^2S~aƘNmO%]T^X野iz9i+丮ɶp~Nh2m2'eSKc:mklm@�?uR@�@�@@b\ԐuQ H4z`MWFk嶾s$e/7ele3{Rc__̪f? @.X,hA�@�@�@�pt񒜌�_~]Jtbg RK|3)(Lgl5 ~kD"w8k֭:Sk֊op%Zաr%sCsT.]}%ӵrZDR}{)[q p1I}J;@�@� <Ƙ'1 @H5*L׳Wn1KK1ȣ?/&ߚCǥKH>KIȁ3`e/~5{Ysؒ?sZ썷es?2ݾCVy!]u'Z.|'~qxbYt]dqw削 ]wymy_IWHu/JL|\,F�@�r$PbŊ9K `;7J!�!0k]nwG#\'letd7w3o=!^zHG?VgnU}F;S!lb\:ҥ#~(#-Fy%pmZgLX9O~,,;Ms0 � � � C ӪtWS|)hkKFe֬,n,e|KUe@ӆ9$![Z}n7ꋎ=9K%K'۶</{l`̺lI2;^)39,2L4p)azɧcfYo49{O)Iߏ2uiql2{ً ϓOs\n9M;X5k.iy;ԘIүqteݸTT!]k5cQgqGB�@�@�@�6�4#/ɲ=}*)w۷ = ]ְf#@aCa@[zK˱3ٺM){}3nS'ӅS]:K HR\Ć'jl7mOo*n+zFl3}>R�T#¹t!V|ɟ':u/>hks/H`zL[Wx/.MB~itkjul؆M[t[9b ?+ۤt=)`/;w͛7KտrG=)N|`grskhtDyى� � � � }�Lc)OMB6Mӝ$k[};Ǝv4 -[Hn| ^*j)OŶmL�)Lrx@)RKUb:JaIBt l:M4l >KKѣRb|=_O K/Ky} V1O<>Ҟ_@SU5ůrx(a<VOHPR5X`}f[3#eQ>x_V);{!Z'L]M:%k1K9 m@�@�@�p߱W>5D=St}S‡KT]b>>RیҎh�))>>G}*Ӱ$ʶ\ԁr))IĞWG%?o]^]]\YHU5Ij]es+?J=9-* qޜd,S_ cџˌ+ţxXN$ � � �EQ`(~_%+F jeJz:!2M#7w,"^\@.6úAǥk߶.WF6]'LGwE::\R";CvI|}}Ze*ʊáYRl9yHz�@�@�@�&zȔM2|_!E3}\7a<کzL'S"5X)-mFņˁs=AI]/,rJm?+M2rc=.={$ǎq +:+F>z.yj=:z ha w_ # � � �ێ�1Լ}jԭ.KZD[ Osy2$|xsۘ4\f$mމvF]3kgJ4Sl/t״KuNOX{;<^VkpsZ^&ٞSi#`<)T|yi;̮._}.5zݳ5bѴ.b>|TZU#-=4Zt߾j\[� � � � v˶]vI=k~3ƺ㡃i ҢJ~%es`>Eϟ<!%ʖMX}v_JL֝"ܹ1y1笻@OJ{ @�< >;s]:Q�@�##[Tϴ5տZ56GF;Hg n̥;Aꃄ� � � � �;7J`]?KEGu:YJ׭S{K@�@�@�@-L.냄� � � ��+w� � � � P7"N@�@�@�H'@�, ;@�@�@�@� �nZ璐PΈA�@�@�@�L`I/ɱhIx1KĹOw0;ã Pa>M @�@�@�ȱ땛鿙�qҦ׷x{NIz7#]j1f={,]TK쮧B@�@�@�@�<p`>2smh}]ͻ J�?Y�9?)9# 2Oܡ-ZnFFFCw# � � � TvOFv5W2w^0}hR:@]M~XݞoxZAMEkga_9?@�@�@�ȝێ�KydٞҾVU[YKdmS+/$$$D-Z$H � � � @Qp�wt-2MTM2y *:V_|4^ @�@�@�@�>�2^ZLOf?x{QI]7闔 믿!AAAS]v|9A@�@�@�@ 3]LOh?edŨARL ѳP*y9uތ0c!'f͒e˖Jǎ љq* � � � n�ç-)z^\_>$>^ruՊrL|l%r�Ӥ#H � � � @Qp�4W{إnuY&vyz#I1¼lSTƣ sn � � � @Z }?#4mSت<#%$UTԩSw\TND�@�@�@�2Hj|Y(]?]9{̞=K<Ȉ7 � � � n;,?ܩJ*Sw+ � � � tB;r4� � � � m � � � �` dnrP.,,<Rg9|#ԡC@�pksOn}t@�E�X0;Hu3,w @�@�@�@ s`ɑ9\O``ixxy~{Z5>;@@�@a}a $D�@Mz rd$&^tSn:T]ڷh'7l8{@�@�@�@�r$zQL_<+~%d佱3U_xݙp(Fڴ'ʐ'ͯn^PJ@�@�*LF|H%eCO.Cڔwy@�ێ�?"1;>ߧ>%O]~Y!|T具4nX"FK' � @_i@$@�p�=}I ŷnvT~.]"gn` m� � �#͈:R+ P6�= V-wOl>whԸgDFD[/ � � � P`>�#y\UQh`OG^^>z.(0wݤ{ҰV� � � � .o{^Wt3־�jE\Uv&JpPi[cv4ycҥurg:� � � �4MLM\(+f</Ղm0Do)giY7Lwl/bzJ�at@�@�@� f,X/ßV?L|aRIIū2arõa#66V*V] � � � @p�k 'vi[_L{ڝ7tmНVZ|@�@�@�pAGvӳ\:Uv K[>3@ � � � �&0wv 7.ʊ#Eɋ� � @gҲ|_ 2#m'cK#/ �"P,_Z/n"@�@�"#-!{^l*Ƶ4:l˷jIyչNlyN/y� dp[8slerS_q�@�(@:9xCoԓ_'xdAadYy(F~H~x4мLZ[yXlpNԊ� ʯ{ίh@�@W*)M*w8!Orå's}$2'\̰bRC&%p}$,&ў?.|rK{K=+@GB�@�s;1f3[@�@�w9|ᎏwT@OI:[BJNG_Di7')Cۖ't/#)I<eŨҶ$Z<96D `M^&PYt&ۿy#eu5srr$"^𓕣KէqV3:']O^9? ��k38!� � p%'%ȳN3=*_*,߯ .Ub䕛*K9k|[Q(S\M)@WwՔ~8 zD_J6-cn<3+yd$@�\-@�̉@BBkj@�@�*5p\#_ѱ)3ayJ퉒b)MXm-aa YִǮ!a[_0l=vOY' �B`:Xd5d; \oPL(n@�@�b?FIv_J֔orοE󇞌5WW;t6NΜO^/<_wyd}K^1f/ �Pm֝f~xkȷ iDM=ɨ„Ty<rmTbYtR/Ipp~@�@�"&0cYp伴'XNFsU)#G#j"rl%)v^J}9Gbns{s { m�SfM_Ub&mOn\M_!+,wE[dd$04� �.g$ʺ{VJKGtYAco,/,_sZV�B)+6kb5%+um82KuލT� @�W m�VnkKFe&�f;Pb`4uf@�@� @uJ;=XeH})Vה1k{ݚp߷T.m:5yHެaZk ݲ=@�p5t9 /Z]^</J"/I?Ul#<opyMc՗&Gs]0.ϋ@�@� >;s]R ?gy<i kݯ55+m;C[ѱxkdWhZ5Uc(i>pVYg( �)~Vt-2MSsjŽ!Ȏ,kOrݯN}7E&MFW!-J& � �8 {2 ~iqIY4YZ sFKEҺI �8"S m'2^Y�Eh`ԯXNbKK=;d:믿!AAAIfl]@�@�@�@ :�62Ub VT\J#QtQ{N@y i��@�IDAT\\̚5K-[*;ṽ@�@�@�@ *ç-)z^fY~.&ƣd²uҥn|~0M:� � � � n�1h ]M\K[vγoU=X&\5*m!� � � �EMm`#( mTYkXίdFٜo{dԩһwo vz{4� � � � ^ȫ,?]9{̞=@ޖ;3;#� � � �ImGÛPR%w&}D�@�@�@� @V5N@�@-|%:k(R PE�@�G.\='X$@�` #ZE�@�@mʋ>H � ZF֟@�@�@�@�,@�T� � � � Z`u@�@�@�@�' �s20#� � � �V�ki@�@�@�@ L � � � � �ZZG�@�@�@�p�0'S= � � � k֟@�@�@�@�,@�T� � � � Z`u@�@�@�@�' �s20#� � � �V�ki@�@�@�@ L � � � � �ZZG�@�@�@�p�0'S= � � � k֟@�@�@�@�,@�T� � � � Z`u@�@�@�@�' �s20#� � � �V�ki@�@�@�@ L � � � � �ZZG�@�@�@�p�0'S= � � � k֟@�@�@�@�,@�T� � � � Z`u@�@�@�@�' �s20#� � � �V�ki@�@�@�@ L � � � � �ZZG�@�@�@�p�0'S= � � � k֟@�@�@�@�,@�T� � � � Z`u@�@�@�@�' �s20#� � � �V�ki@�@�@�@ L � � � � �ZZG�@�@�@�p�0'S= � � � k֟@�@�@�@�,�O � �E]ϜE/G�@ {J(}ȁ� �  (� @pZ�L+]ta4@�@�\%9*}E�@=<.YY]MJJsITTƊr)P/ � @Ѐ RJg%]B�@�"�sA9i� � !o%g� �l<#� ��B:@�(^u|@/iA�@�@�@�H)ES66 � � � � �*yE�@�@�@�`L# � � � � �*yE�@�@�@�`L# � � � � �*yE�@�@�@�`L# � � � � �*yE�@�@�@�`L# � � � � �*yE�@�@�@�`L# � � � � �*yE�@�@�@�`L# � � � � �*yE�@�@�@�`L# � � � � �*yE�@�@�@�`L# � � � �rvñ.111r%g7G K<<<Oʕ+'%JpIlrݵI�Y ]w 3� @aRNJ闰cǎIӓ�Xa<@ ~KJJ0\˂`\wӽ5@�B*`.R^N @�B')EP_Ŋ#Ut8!H)%NyzsU*yE�]wumxXx~7O{ � fN ?ތr3�Z@GU뮫i\%ݘ1jv@�@M�_l7  خ{ɕm `g@�pZ�,F9� � � � @~ �/iA�@�@�@�p�0( � � � @~ �/iA�@�@�@�p�0( � � � @~ �/iA�@�@�@�p�0( � � � @~ �/iA�@�@�@�p�0( � � � @~ �ŋСCF; @[�@�@�@m E�L2x`Yn]:K.ɑ#G… >=uh:v옜;w.U3gȊ+dɒ%sNr4;@�k; nݺUbccmozMǩSv5J � � n�} ?SO=%ׯO''mZv9vqs{Sڳ}r7ѣ^O &<Ymh}8#!�E ']=իWKn{:wmzǭ*;v#G/rځsҥKs| � � n�K%f(111W>/Yl|.Ma@mڴ[4ho[oɬY|'RF EG2^׬Ya#� �  xaM3)\{yrZ44jHn}4kLƎ+{챷"5P|w2tP)V,9x3A|U\Yx 3*A+>H 4% bjW"##e… =)#N<)Z?'e޼yrYC=$ݻw @ \wuMLS@(~fdhѢ<RL+"/mnZ~G3VGvkN}_zv*T`^WREj3wޑiӦeyk}v@je@�@�p`K~9uŖ튟[li)_~2)uͱ'N駟nA+eց^֭kؕ-[V^~eK>tMI&:-SZG5S0 NԀYϞ=efThDҾRfMy%!!@ WzܹTXQU&z2? T?C4ȯWZ%#F$sM g}51j~ ~tr 56#t*(EpY]+^|yo&k+6L@�@�(~tt t@͂)ґYeKmkĉ<t~)ҠXJdƌfF(Q6_o]7u4uiٱcCҤuȯAcr"OPj/оhs#�IґeڎKB�r">}^%K;\td7onQNs-)k`M^Gڂƍ3װ]i:u2a@GfJ.mجv\Ҍ ;MsmN � � �[h ~)މQG# ؒ-uuvsƍef]1k2x Ѕud-5*Ut-Mk.=[ 3w/u4ib_54L[iRH SGKM߷)�9puw߾}[KӰaC3Q�X߾}5NtZ&\ݶ]u;dNtZh1@�@�p@ٶm[ h,7/ۗ#GmM<? L~|I3ԩSf._xq'2;A0M= ̗>=OmmT;:BmٲŬH #yuMۦ^21BnKl3*o7tJJG3 � �ǿEcK*eֻ҅ml/]09'#4NgԅuY�K64F]FׄI 6Yu US;D7|3t'M.Ii:ӑk|wfzMќ̑vȋ�[ it1z~Sm#tī-&e+ٳ0i:k3@�@�@zؾ f ~z09M~ҵz &u}A1[~9ӅuJޱQ}fѣ Zaŋ1]',ԡCSӴ ]^Sܲ'qoDDz,<<<e@�,꺛;NgkuAzC䇌ue֭[g <ya@GZ[Z.(С):yF�@�@�+P`JXn_ZqС:Jf%]_ݻw;iK>>-R:uɺ`VVI6 83mBͶdˬNumY_ٻworرc? @^\wSN@N%< 8tZV2(,l?P}Qsw?Sn6rr`gMiy� � xX _rFZ^*"Z5\*E/5r3T^EMGVČ' ʬn~˘NIle2z5 =2xH~$!@ڂ:j�Ε^wӞ}MN{<?^;zt4~m eW]w/-@�(n�+PW}sF�wpW]w>"� @[LB�@�@�@�@ r+G9@�@�@�@� �oD�@�@�@�ȭ�Q@�@�@�@-D'@�@�@�@�r+@�,rC�@�@�@�p `n6I@�@�@�@� �˭@�@�@�@�B�[Mt@�@�@�@ r+G9@�@�@�@� �oD�@�@�@�ȭ�Q@�@�@�@-D'@�@�@�@�r+ۂ9-wќf% @pD@�@�@�B%�Xz! ,'3kLv!c@�#i&y2Ppppu;38u72&A u Z'@�H-�X֫ڍ;[w(abcc3N pu?#p\wT � �dhٲe5%$$�W <<LFaGx(34tW8|7%uYԋ� �,s+5kHDDD>H @[@�@�6�~A?3yL"y>RW>,6!�%u7i@�@�(gͯJ~WB.^t%O=sV4k*yZ/!�EnAy' � �d$P(�+PR|WT*#sؔy뾸8*Hc Pp!� � Hx{WAx+ pP Pg[^N@�@�($&&ʭ7 R/ t> �Vn}k91@�@�XPv*yPGe#ę1R @f\w3a? � ��s߀ +ϼ0F|}}eՊUNjj@�T. � � @ ;'I||m'$f:"j6(\w »@@�@�@ #B�IrU1r*ygyǑ t`i� Jԧm@�@�J.?dz:|=6d~ƿm _\wKv@�@�@QB�s™  ~=sV:̦@˟+0bCyz� �VN,h%JR? P8B�@�@ 7�ˍeXҦx�P 2k|cl8@[� �swn'N �i5 � ��0'TVMZIS-@xx/_0ZປT y@� � R7SC�@�@�@�!�_\tI39n@�@�@�pB�bsAb彰39_ӧer1H5Ι'u#r^ ߼%վ"!*ʘğ f©yvz^;=e^*B pSۆɈ hOsr&*ξ?BL{$]gxSobR>1_dL$X}gaT� � LB�[sT܇x79p&ҙyZew:O]' Tmhdžeˇ �X~-><U+y/)NWsvTU~}_f3oQs{IH}j{tc͚52|9zWZ(\wE:>{' @WUiRRdBshXb+X{\nqG=~oH`N%!� �@\_~һq+'͒ w\߾Nk˥d a`}r11FOu.Y*a7Hykhyx>vTZU*WBݼSF}}{w y_sKHY+m#Ԇ� � Pd 5+˽KrU@вaGxSYvH3S%-;׾52l5V}zI<L%\ҫ2U3kQe?̽KG{i{[>`rNOSnlz}_VNmKᨃLZvd՘̈3gً9̖ &aacm|ҬYs5r}ٕOHȻN(\w^u7>YKKʋV�̷/.CIY[]S۳sd׫cYKY阴~|xhF]}~̶0y"hD- � �!P(`i = ]HtCӿMKRoptki}Ri=}|qjU\fu0/1G|)Ro"֧}g͐&)_)5omk-^xV:}j; fAw#CHD.>ۆN/󀫲ĉ{W4+,lfjZNLg{oq@sr/\.D8Ͻ>>{yd{p P61]Vw '|?"IQvtǨ3z^ع%d+^^2s[[.]2<޽/ѣ YP;waÆYl&!n:%^wYdLu_K>(z;kAh],LS\7M; )8axSX~…P5ႋsc:u 1q=| ~F**:U.k;ksn\2�`L 0&sER-|5J;NHl+^A07]ʰvqL"aji <):JHM{TE.͚ʣbE'%^6np,%V}R<+sΘd=Hă It@P\i׶mT4FٖAj$7Vcpp@;(Ӥ ˵_~KGG&|dc֫WOFM4Q=Λ7}6^sm46 L d"n&$u73ʩ]Q(]V‹̗`dʐFhR#۳<xSZ^+01Aj`~putMm &�`L 0@V[+aQṼ1)3 [ =rL%UUݱ+S,2j.6j*թqrd\/ 6+''YF�qHJ5SK 07GrḶ@w*5-,[r"GJGx̘mNs]&^w xPn9GVEGY\ .{PU*]8UU]gL 0&�(L`(YoAU ȧYUUF!˶?}qK'8 ,my"\C5Tg 7 a_ (>kZQOƵLLMjOzJ񁿿?ԩ#g(S zut?Xf 4#C @8U.;Tw\zpIs aEXNXt:pS9{<9ey ~/臒VDܸqʕ͙L 0&�`C@_3<#tk 0Bl"g %T6,1nA;wkSt Rg{hznZrչ˲IUC{Kxd*xɒB {I42U\9DEw5 ^ws~y5.R5y+<:qpvu]Qu7yiE ¼Weءwu6wo6y:Sfdҥ+֭[g1&�`L �~,=͐o"&1 /YaVHKđIC%F87n^7+Y0ys8=eX"LiXqz4zj&<S v 9xH6aڣ<x< @4gd~7ߠZ�'+3cSg{{{ e`DDJ>3fL3^wUo?*JP̭Hk,f1G 7{v`hrJV"~G kvu\e=v\53^RmYY)!~!qvvβ0&�`L  'Bԭ/҂?1>ϡQµ`J|<PR4ibwєX<s|Rw/T#yz*k|x +Wg#vD(ws: xuWuWwVG O] >q*"bPF( yv:慴i~~~•>�Vb(lnί[0&�`E u<n 7G ?Q\0&sRh+_| =WyL 0<#q() ~N̴D/iɼ\p6_yaL 0&@`X䮊ruJ۵\_ `L <+d#_ 0&�`OKhzZ:ܞ 0&�`L 0&�`L`X|L 0&�`L 0&�`(,L 0&�`L 0&�`yG`yǒ{bL 0&�`L 0&�x 9)<%&�`L 0&�`L 0#Pd`O 4*1IyGtə?}~9ubx8BQXl;a޲ O?.$GGKfIQHMN d.<((Hyݍ k @~SUnǭuIj_1aۮ]XTvygT\T}gt{�`L 0&Pb}8 /g_篵Qi]H<>h+p୑9j4]OUxZ]. y( -$EESsuM%&?Ɛn8?ded¾؍]KΜĈ7"8<C|}kX.6ekbE39f N[)Km~2oU ߭>vd/^Y?EpfCܼN$"G3=WdL 0&�(XERV֮$v0q|?@=' t!ݥic9'fjGº [6s~C \<7z+@L|%<_[%P|7XXr?%N&[rLL_F2c9&h)zײ .{ L 0&�`H*ZTv;ءGXϡg�,Pɸvr_Ǝp|x5OIcskJ<>NJcJXh�ή~.= r]�m'R/ňmT}lgH'?iu}(#oΗ_TL*1l,_ߴ5wEvG*pczdڎN+oM6~ޏc6=܎#ŌU黄 +&.w|c5p=> I1S(;x$R zN ' =Ru3ZEk wP'E:P9e¡n\$  ;7ƞCz~lNٯgHY(;;[<ɁE۰aoȵ,(Hj)G[ksԬP wd\j:r1됎rHd3CϷHKgSY;4mlنXtKL9 0&�`L0+43Da{~%=&mkɉ7b<]\ԋ,%ӭ`WZj ׽_~ F:e2Ķ4^�&&ӯ8(ޣq ;wɱV /^ZZ¿q)b :-Ge,a#fѤ qu7nFh\LGkggܺ7IW.tiDWoլ_ b$< (>7严 PTt/ֿ ۊVJ_W)owŋxHR g oDaT-g$AG %gY^a DkYQDg[XI0=U/tG&kuumZZ҅;խ#vFq07bϠ1EX:9aqv%E!딡5)c?f`MDXo:/[/G_u5h&u7oE3abZG߹YcT0~\~pPd atR@::'lfƻ=ko9/_c8,Ŭ@k#5/?m`€f\SقqD,{;B.˦Ѹzki om\vBqGi�`L 0&P8i >8y;.v6hT\#O9˪_Q{C5यM K4flltM@Aw@-UyN'BYfW2H)G}PZ[vcC5g_-I ²ꓲ,c[#E]i8  z8*-NʔAojj<ei'T]# k^zE̷I&JVG2%dg)U\61L_W+.eͲXǗ``q^ u'EbB#$Oz$R0<+ G]ߨk9ݺX&ʶj!mۀ֨K ȪĥIc\V*ap=먱ҹ oQ#G}' %K7NN:}KXtP`JeCk𮞘4+}l/R0NBﱌj0PZSh<>2&�`L <lA1F>۴nϗ>w9)jvY{϶/"^1m)17Er11+.4Nuj㕪k,5SOvo#QdIagQ@Ť+׺F}VYl7-Yh2KXrȪN~֭Ag!-nxb"ƅVF!q%wE9aEf%HJ_�]k$Y;Z 1TLiQllV.UҶ؈"ɤ(G,QXٻ_GkVBo 4تF#K/7ķ+SaͪHX4HWթ,,Bbhh 좥|SHbl&;mviDs8j~0Д�`L 0&sP<LV f?qL)+nG3+kΉ<vn)9DFn;@R$h.Tx-_ "wQ\~]|' 'CDeh6 I N N|+aḬR< Fڱ(,ꉇ'phh&U57񁿿?ԩwwwCUWH RJJ*Ǩ6+a FBZb>AN29Ȗ@Q]w PnHV/8 {aKҴ*>FI-NXrm3tIuU'@rW^1CuIV<sYk<q"ڵM`;SqpjVH+#Kڅ,c35PS*ɯ5ā p]>4( Xt-~q<<<Pre"N3&�`L 0<3_ ANv!~?x(ckL+,:7nrŵ^B=dJ_0@BVavJśO2XHw(wm\o5[PC{*2(*\}..I˖t$];KK2 \b񓲌b{Q~EVpό4l� {3>%Kѳg/ٳG;;۴jUtX4FuۯMJӡKKx8f%:uΝ 0D8v+_e/%@:>`,)ݲ09mgGJgR Pw{&Cg3$H1j?\ )BX3f\BBt cgUTڧ!8q؅ԗOJ"F.DŽw]~=tu�`L 0& @T?@KaϨߠc.:1F='EIh1e2z4Tz/B.2JX߼p=UD}XQqw4Cz;2XJH; >bV2\rl77l/cgRuQ2+}QF:7n$F^Ç%JQή/D__u3/!XVfW/l;~@cf"m_i R֨7j;ktv9K{8w@AoN3}ź+l~\ke1hiZgڣ\s:LJ39kBE8RUQ@M'CII%кk P0k5>E}ol74me.yy|hWHE^TV@q*=}XX=j]$-#>-,eMz%_A8uH{nfcOC%q0&�`L <_L6%98u 9k޽XօW~94j@1vܶ3>Ίy)c"ŷ!kBVIQQ2 tƲ)f Qv̮RNdD.RFGS3f%\&2C[Z,206q"7~ Sb~Q g}BD.N60Kׅ۷OZ͛7#G״WR7'#, ===AKۛrYܭĭӌ\SSKPqB֦ "NbIFدu7c݌CGpeq)+ce,iKHJA9d~!"@>`nNM"$K u7 �`L 0# l9BJ]Qy9hkѱ*]:KHg)bzF07B9No$k6WA OV/WF9u4VÇg,s&`@q^w3*ҵAœܳZZ~WarCIhs6 "T oXOaL 0&@NYXN p]& L9�` ̻TdL 0&�x(7`L 0&�`L 0&�( �+ <,`L 0&�`L 0&@`XpQ�`L 0&�`L 0& �+ <�`L 0&�`L 0&?X?y&�`L 0&�`L 0" {bdOA_J Gȁ9jST*'ֺ ]MBrJL>S={q 0bqaY\S3WÜK%c ?u:{箘�`L 0&�&P`:1cu.]<>Zï\ÁFͳ8) FFFqbk:/<vw*{t*nXJ(t w"!`>zZĭpLCZ & u7hn?Xyp,n��7eIDATvĈg8>/֦?,]G~ԷfK0/k^gf*{A&�`L 0&P9z>1ȹ\/ ]6FC{K1mD>3*ߩ= [xYkZ8n] N帵v}` 𺛙I~洩XUޞeޓ'OУzC]y^D &�`L 0&P Y 07>[?OQ=,N;9qg{o?7^LBis0.<pQV+7ƞC%2 'ORӾœYv䃱3uҬsAsFmJfyǤhVTSGy}溾ik\#Ònہc}ֺj NOJ=ϊZ@رc_Lj1@Q]w[ʵ2Po7dec[T<NLٯg`ujΩdkCnݳ9U]6_oTemK-n_Z֩TY`L 0&�(li|2][?[v2QKj G !zj|c(VDj*]+t+gkҬ pdGYbD$EھZsƸr, #]4kZT;h?Gk tZո6m,DGѵ-m[#qYv)ytiD>A)~T' %?B䍛jp[b@ *.^@:5J*:bPeq2jۥuDFMZjj'"P]Z7Mq[U'2Ck׶M{x,qQ*Ɠ'T /tYLqB,'ۛ|ڰA5V5GZ#GzƓPDֆ .{gA:M\>iP!wzN0&�`L 0J(^؃8|.7&_q_Q/bjژC5W%}3 f66:Ł[54n(aQ~=\7)k ˃V-`nk+Sm`舐>ڷCA-ۤ\떰qsbbEUqnUAf^_;wm{ظYN~УPOo0+dA[daW({j9Mb@OOO̚5^^+kK[axWOui|Su쥖4'"PR^.ѹHiO-Uy 6 ;wA(~uǎƝd]_ztnt"~z-h}5QgfKKK6,Y2cQ )^\?^j]rl3Fi 'k['�`L 0&@Q$P$`wEJ;x"ەa W{#?7fۙêL?U2) 򼄹FD')qUCIJ i`jY%,D*[&Y{bRdݏ-[)]/Kׯ ʕ+,54sU+0캫,1vq9x u759Ey0jJL~LW,S ]6a\(V*b|[f0MofܫۡX~>lK`L 0&�(*.BW"F#1dfs6jy]5%̬^61BCH -E5cZ4}tz<rJs# J_*$YY,X\dAdd^#]k6cx">'A;w K`KwR(",? $C3gzwEQQQ8}4D ]S%Pݠ013w(i"K-Wfs;.:oXYw@СCڟsa٤k,Ma&,ǦmTyr]ԩSm 0&�`L 66,;w@wܜ|~9RZ:b"bCZcBfA0s6YINUSG, ">ʧz6>{ =|TE\rmZ@824]Q;X3*S_N,rQҖJzpU6d)˺ I&#+4e+ܵQڥYSDnM)B\;I ѳg/LgE.]1yg=_Lu¢8YX~w2ZD̥HwjrWW暵H(`cJx0p >MoM~;w!4&,CrJF6ENѹs<>aL 0&�`@TOf6XU}|hp'$rqWev:j1V/<ݼ?.gayXV Eo]k6RAEZyPC]g8xYڦ+GܿN~6U3ul/d~|P]^d=FJAyR]{`' ˫xSl RM;ю΍ӭ 1P6"qF4u9͂/qC&P TEO+=kc}6B1TU}#~ml- $S yl2}tܾ\S7jțj—5!1%K/{Mg6~: ;*eJEyE#`L 0&�(LW]uKV&^‚8Hkϩ]NƉw_ZBMvuBv|$7F.hڣޕ:+'rRqGDȥ2Ax4),.Ae0G~O6_}.]:uװnmN\ rPܭr?mA֖{'NxfG[&6.eM9<g$(!ⓓPE'>c߾}k޼9rd~Nb@a[w1&�`@3wi. FPS[vuuF2csj ? U[Fʫ2*]Zo4 ?~Çg3MY}/<S$/2  ZH)[ѡL8u4V*ׇ,+q`L 0&�(XVoZQr9ʣ5(צUV8�;("&rB\;��bpU >X�`L 0&@Q# vG mʕEA �xv(>X�`L 0&�x~ p̘�`L 0&�`L 0&�+�"w�`L 0&�`L 0&`{oxfL 0&�`L 0&�`y@`y�`L 0&�`L 0&�x~ 7G$?}~9'1<!Mq[6W~ C%}IMJ~jnFzP^ èw6_[Lul(,C.+مFʹI%GGxjS䍛xx:څ.#nŹNk]k{<Ɂ!%DG:/,d uP$;⏔dž?_t/oߏ11&�`L  P$`ca2{ל0]5Ϣ9+p୑9j4]Oz.mjR]+V⯿x̀[pq؍]6ΜCӖ{c3߿_[fVxte.]>8|E,GVyeE p!,9t I[av̷o!wqw$AV7hy&]G~]aj_&=6,뫖WgT!"؋b2$9Cb݈KL1T .`u 0&�`L kfYޒ'O4s?p+)OJY[ Ǚ4m>ۈ aao+m,x$.Y[k縋kץeכomA4t<�Qt1} 9Eʡ -v>w.Ps[HMyz+g}J7~>V5ˡoˋ_E٘EW`L 0&%"ir%` RvP{Ynvrde/cG~8>n|&F)ܡ+vNcauwj ,vqj]"zKODqBȘAJMm;ɗ^HF~6h*>63ƪPԤ)X]w:C9!|UO*}FcRކ߰IKGg7d}CDGꘆa簭gnkʉPi;Lx x_ϐA NVC)eÆ (HHn8Gw\Ǣݾ2=J҂ۤm E B6=7Wx(% .|E׻tZAd꿿亙t| f:'kj>tSmBftd Csi( 6h]Y^(r>Z(5Ӹ*Xݳ̐a.oO r<*9~zvyP?l:53wn3>E%ǧRŗQar1b5 {hz:@BW^D<zM.3/Mߥ J$aYGcwMaJIf>dUEkIIK5ॲٹ*s>7b٭sNNug@d!+qR,Ȣڽ4}'!wkZik<aztJU)k?c\(eA'K&:s@*w*ϊ>5y=.x#|u�`L 0MH+'ρ~t\mnkmxTz1BIz Of 7Y=B!EWeB;֮^6}pwFu!196ݲ<O%:. '|s[[tZ|4m"oGOơݼ?pg\5[ԗ_!x^4v^9yj<A<=J֍(צt$SP6541]wsRvnہR_D1JP|=^K&\7ÑNujkRNKY~A@޼mfDֆڭsmmnWXLx"ŵ+ ˮ^+hj6ڨ<6M펎0sufFW)ŕTI N3נ:{Qw˘a ܛH*aѤGd֢FYژSi[W/Rٴ=>}T+ֱ|KTYXfR*<[UM)0CmDZp~N?]N>dkz~]+XX]co|e28TPmw#m5w$=>gFg#D#d}_D}RfX_}BMVMs }^ FboŢS21V~;asw;RΜMmֆKsQ@{p|BiNӓ^BNr6}Y{}슕n`e@OڿN z:w'y \ǴQ*_ZHXSh$cͨ"@nX .<:^Cy4?)};&~w~_oWj>TX|f]hna[zoa|9Cq*w-�`L 0mE+E.8u.&m99bZ^$ӤhQbJҨC5梅%}3 f66:}ZY %G #9UwJeR z 8~n&M�YM-_V*/Ρ �H|7 eP]_Gñڶwne[6_kǣ9j=\Xm@Og< ܺ]fiQ!tmV[$[@v$.bN7WݻR^E6h�%uP)y)sjI 0-^B`>Qk 3L~EAzyo[Sz`kQ"5eeaJ5"EgceHjrjWr1Y#UJFU5'egF+ȇS>BaȪfewZ<|&EE:夕L>S7h,z3=0_4^T] 8"^]co>+R`olQ|>"aQA*<IHo^⇅;,ZSVSƵQYRP0kL,Y2cssH^jY9Sݡ?ydAC⩓ӣ<?en`p\fxFeRCSOg@6UpT9<|HaMn p *qK(Z,%{|RhCp>R ZV +.RV(!V^\q{o>eH#ˆ5,reX$e(`0q`C V4xn'\x$]k vo6�%+/R`Zeu ֵ+Չ|L 0&�PQ5)F1gr|4@ s3|L RSߋnLJѸ);Y?^q )EJ bYzOf;7HX$0KB ;{mHFf$%,,CJvxT,HEPܕ-k P@YuPC#Ey(9vp٫y 52C }Lp/ܓHqR\+=lCP2˗.W;D 4O@qVnNCPPo8NXZE=$$#^2T^,1߾#b$: uסBOPH,E( D�}ǚs֜!,ۥiرUq g|+\i)5}<teza5h oBDVJ&}<\[Z JR~8;X.O3 K8l,h-MVo~F:NJXv:Hs&+PcP֓_Y YJLj++ʽ2=yaJRMúzQffFj 7Y;3>Ҭ4'+w+~ -w|Wi;Q6[?O#X零|4k 1&�`L@%f%#,U̬e<n5J^V'#ai@|%_ /"-?ͅ˞ (V"|-5m4V eJ|?)ƴQGx P:5)Q7o)d=Fjbj`HVr,Ekggy`ˆxhHMUiq: k74:} D!۵k yFwbdEƠ+Eꂝץku ټ[ ŕb]^aEZ*EYhMߜ R~Q]=Kk Dl$mkAМKYQ\wcHewݻ6V_E|�I9N"Q"^XIt+L%_Xv +a%ۡC}UrGʆ. ˣfRp}7HBzܼ23n"O֠nTVL \BY .+yRh׷&߭9~؇5o W"P~1G/60-a~?(?}ur¢kՁʩY/c{G?t2O4}2/߬F?a%K.$d1HV_n^Z4O&;YO�v7PX`=R#⋲0&�`L,9,;3HI},:TX_tņC ) z]'`dJ_w2.*,pNxPF,;!OJ㲭ZHEGFo b3Tc`4;dx e=wrF{2V5ke`~uޥNKՓb)=re@JWFbEFnm4_Ry4] =rLy3f,zyFZgVuՄ(2Q⼔vp@[մ<o4O+d1&F)@?{uj"{4 zMΉ(@|루uo ͺtT[u!wo)&G 'O7c$^F{ATq$K 䢸bN\/-(3P|+x<@~ AcW •OD']>6.^dIHXQBRoH.!SX!FV7/ nhV} 1\/(![K[l͠\h9ڠpc~yiQG 1#XZ)sE(ᅮ祆Pz/%r'e+l%!;ўOvu 0&�`X8] [+nZK=/ z#Ъ≔OO7VѱhhGGn^) i ݺO< NqH9"]}@zCXF*{d32 K;Ra|TzTΊTP^]4ӴV�Y[~ 6"*Uʪ.¥ 7׺B5k+ބ&\H+s?,YY3V[x(?|NnFWߵu+ljYpdCrTO߉R-~e!^], :>M_@y8Zgoзee _)P}rx@4K&V=aH>ܭNC"%udj+Qw»",HȝwZ0]8Wֺ#UIyNJ^76#XH"wu %2~ mه}H%ɦe ]rSbw_vH|ɨjvtDZ)VeT{GyP,·,Ti'ZRVxRu坖b7j2n9eqҢӲ95GqKv"v誉hzҌEډQqm<z5Tރ/5P[v?~k oĂ\I5=;5P(,z ?)/IvTC1"Nra. @֮UC~n~:jYU|&�`L H&O< ԭ/<E+GǂpJԸ-e(+x{CF scnd{%'mK,R|-1P (蔱(sEA)> h]!1R@+B_LyY hu HF CYvјf62CSR% WFj 2 CSYaCy%Pe:#k;%VKgD8^�ȫ9g[w]N1ɥuEiKku\Hqh@"(Qb ҡ~N\)0VN$!+OApYiHZHўBYZW%>qiL~sh9'Lj'?eN1#Cz9j{D.u7ӄ8 0&�xn /22OTt/BjUZK^e`K5v`WF^V794,3 ?R*`O{ An5~ =mw:!ސKrzଉᖡXuF(s#ƸKgц@/=Bs#3++ETvv>1HOZw*1mYD$Q(ň=^%bԧU;(?JM|"kr 0&�` YXK&`�,)A "@0.k_Drίqy&@a'r*!v$˪{pfaL 0&@q& |u_by~4rX�`L g(!X�`L 0&4'fL 0&�`L 0&�`D`>as8?8 0&�`L 0&�`L�` �`L 0&�`L 0&4V=755)))xJL 0&�`L 0&�(|,,6ū0annj8}ta:ϕ 0&¸?x\f㈾(Y18w3 7׃"pjhz#/]MBrJL>+4eL 0&@q'Pd`B뛿<7(4uHLL@ձdB3o(`ś@a^wvƮ |p,vĈ"C}#BL[)K1~ ozp-ͻQ>i|D"B((}ʽBs-<Q&�`L wfE@p!5o ^牓 (P]6l@/j<Y&�`L 0&"i6"cߎD)k+ss)t E0`u7Ӆ7m':+]~Z3oX.;&v뛶 # IVe7VƩ/}( {hݯJ5yeZ;_~U{Oe>w<T{m$EFdذ7P~eWըuG11^Y7uؽM؂'O0t,:1CQi'lY?% 0f<\{$$=ƄNv4'XsOȵqn9�`L 0&Ph Iحx8aM0 Y BpA<z~xL }umm&oS:hIIEu_tY <pjTƚ١scE:euq}BC(vH*+Y 7:o!ʹ !oc{ܲ)84}xtN[Pq#Y~m =6] 򺔆(u_/ 7D%+}j㣗zym$bp+m_ġKwFd Xt S4;c X}NML~8|9v~pQ7lw/ 1bm Et/brJcmou,=>SLW,VtPeq2p 0&�`L&P$`;(pa[0-Q| =իz 'x饗,&A<j?  zK&GwBX Z#G%,JybE%9u:Y_ aaƑ޹I#=|D74.͚޸1;wq?x |Ui�C_mClh2Oy3ìY3Q ʣKC 5\rʐqkЦv9kSE'EXnxG n^ouꃷ62k`Ϲ;ן~"A,r̳TzQ"WZedYKʶ{׿MU㶮UN[i{+ g+XY4)X�`L 0& "F2g8 $2nΈYү=z(42&PuНs^M;xxcRurd\/ +2+''Y8BRDc5uǎ/U=kՔnVZR)F1ߥdp'qhSLӛ[6j)qq2^XY[ޣL6h c]LfHD;E<EtE[Nohw?u2~z*a2x=Q>37NRѸ$|{IKAװZiD$2~?FHL 0&@!P$`% 4n)bi$cay۵k7:tum;wŦI&ppp(,dL(*뮡 KGGa4ZqwCq}B|0-_ ͑(;Ztk<63wڵeVeZĝ}_տHGJ6rq|"O3Ť( *UBlddQ7u- ]?8qbwvF,Z~bEEhF2ߕ<%~,h-O>W5*J/)r$ݼFX[ [=i|gM8�`L 0&Ph~r-|68Ξe#ވNLe*u6sP/|܄ˌ>:+t>>>9 0&ʺk߲H8)T(^W3 Yɒ} %2禍hTA*ʵn)97i,~+V12[y| U-3f,z셐yپ+_ dEq5rvRe?qxEl1,+!4fC;W.4q|#z:5p뚨Kn;g;W`L 0&�(%V A"gEe7rqGfD<T]ri-'O_$Ni6 0&ºHX驱YuF=zs%LΞ)@$* iPw⏑+f&ybi &+(oẓ;CҌ1M_6ꙢZNձ;-myaJ;d647iwI!d[RUw坖b7j:mQ޸]EwȲjN0&�`L n&BѢn}}}% ^>Fi09ɓҺ<x@HXx9_3>aL KdaeyV>b@R^(OYU|^wsnCW @|CX:9B OMy ߕQȍړ,j2zg,AƵLf/ʓǏN"^XN^׋MBBR 9₥<~rNK{n"Xxt"\l`aˏ,ǜ,A4%Pã1&�`OC@/9lk& B( >> ssLQ/3�`I22݆\ 6o[bCezheRkU˔](sj|(UR( !˯'caL 0&�(Z*++,c5iFI-fL *.h<uHq�`L 0&@$ yxL 0&O(}Fh< `L 0&�`ςnЋg1�`L 0&�`L 0& Fjwz����IENDB`���������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022265�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/AddButton/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024151�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/AddButton/AddButton.tsx�������������������������0000664�0000000�0000000�00000001304�14467713645�0026573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; import { IIconProps, CommandBarButton } from '@fluentui/react'; const addIcon: IIconProps = { iconName: 'Add' }; export default function AddButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <CommandBarButton style={{ height: '32px' }} iconProps={addIcon} text={translateString(TranslatableString.AddItemButton)} className={props.className} onClick={props.onClick} disabled={props.disabled} /> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/AddButton/index.ts������������������������������0000664�0000000�0000000�00000000104�14467713645�0025623�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './AddButton'; export * from './AddButton'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ArrayFieldItemTemplate/�������������������������0000775�0000000�0000000�00000000000�14467713645�0026622�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ArrayFieldItemTemplate.tsx��������������������������������������������������������������������������0000664�0000000�0000000�00000004140�14467713645�0033637�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/fluent-ui/src/ArrayFieldItemTemplate���������������������������������������������������������������������������������������������import { ArrayFieldTemplateItemType, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export default function ArrayFieldItemTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateItemType<T, S, F>) { const { children, disabled, hasToolbar, hasCopy, hasMoveDown, hasMoveUp, hasRemove, index, onCopyIndexClick, onDropIndexClick, onReorderClick, readonly, uiSchema, registry, } = props; const { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } = registry.templates.ButtonTemplates; return ( <div className='ms-Grid' dir='ltr'> <div className='ms-Grid-row'> <div className='ms-Grid-col ms-sm6 ms-md8 ms-lg9'> <div className='ms-Grid-row'>{children}</div> </div> {hasToolbar && ( <div className='ms-Grid-col ms-sm6 ms-md4 ms-lg3' style={{ textAlign: 'right' }}> {(hasMoveUp || hasMoveDown) && ( <MoveUpButton disabled={disabled || readonly || !hasMoveUp} onClick={onReorderClick(index, index - 1)} uiSchema={uiSchema} registry={registry} /> )} {(hasMoveUp || hasMoveDown) && ( <MoveDownButton disabled={disabled || readonly || !hasMoveDown} onClick={onReorderClick(index, index + 1)} uiSchema={uiSchema} registry={registry} /> )} {hasCopy && ( <CopyButton disabled={disabled || readonly} onClick={onCopyIndexClick(index)} uiSchema={uiSchema} registry={registry} /> )} {hasRemove && ( <RemoveButton disabled={disabled || readonly} onClick={onDropIndexClick(index)} uiSchema={uiSchema} registry={registry} /> )} </div> )} </div> </div> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ArrayFieldItemTemplate/index.ts�����������������0000664�0000000�0000000�00000000136�14467713645�0030301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ArrayFieldItemTemplate'; export * from './ArrayFieldItemTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ArrayFieldTemplate/�����������������������������0000775�0000000�0000000�00000000000�14467713645�0026003�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx�������0000664�0000000�0000000�00000004164�14467713645�0032266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { CSSProperties } from 'react'; import { getTemplate, getUiOptions, ArrayFieldTemplateItemType, ArrayFieldTemplateProps, StrictRJSFSchema, RJSFSchema, FormContextType, } from '@rjsf/utils'; const rightJustify = { float: 'right', } as CSSProperties; export default function ArrayFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateProps<T, S, F>) { const { canAdd, disabled, idSchema, uiSchema, items, onAddClick, readonly, registry, required, schema, title } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const ArrayFieldDescriptionTemplate = getTemplate<'ArrayFieldDescriptionTemplate', T, S, F>( 'ArrayFieldDescriptionTemplate', registry, uiOptions ); const ArrayFieldItemTemplate = getTemplate<'ArrayFieldItemTemplate', T, S, F>( 'ArrayFieldItemTemplate', registry, uiOptions ); const ArrayFieldTitleTemplate = getTemplate<'ArrayFieldTitleTemplate', T, S, F>( 'ArrayFieldTitleTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; return ( <> <ArrayFieldTitleTemplate idSchema={idSchema} title={uiOptions.title || title} schema={schema} uiSchema={uiSchema} required={required} registry={registry} /> <ArrayFieldDescriptionTemplate idSchema={idSchema} description={uiOptions.description || schema.description} schema={schema} uiSchema={uiSchema} registry={registry} /> {items.length > 0 && items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType<T, S, F>) => ( <ArrayFieldItemTemplate key={key} {...itemProps} /> ))} {canAdd && ( <span style={rightJustify}> <AddButton className='array-item-add' onClick={onAddClick} disabled={disabled || readonly} uiSchema={uiSchema} registry={registry} /> </span> )} </> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ArrayFieldTemplate/index.ts���������������������0000664�0000000�0000000�00000000126�14467713645�0027461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ArrayFieldTemplate'; export * from './ArrayFieldTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/BaseInputTemplate/������������������������������0000775�0000000�0000000�00000000000�14467713645�0025653�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/BaseInputTemplate/BaseInputTemplate.tsx���������0000664�0000000�0000000�00000006246�14467713645�0032011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import { TextField } from '@fluentui/react'; import { ariaDescribedByIds, BaseInputTemplateProps, examplesId, labelValue, FormContextType, getInputProps, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; import _pick from 'lodash/pick'; // Keys of ITextFieldProps from @fluentui/react const allowedProps = [ 'multiline', 'resizable', 'autoAdjustHeight', 'underlined', 'borderless', 'label', 'onRenderLabel', 'description', 'onRenderDescription', 'prefix', 'suffix', 'onRenderPrefix', 'onRenderSuffix', 'iconProps', 'defaultValue', 'value', 'disabled', 'readOnly', 'errorMessage', 'onChange', 'onNotifyValidationResult', 'onGetErrorMessage', 'deferredValidationTime', 'className', 'inputClassName', 'ariaLabel', 'validateOnFocusIn', 'validateOnFocusOut', 'validateOnLoad', 'theme', 'styles', 'autoComplete', 'mask', 'maskChar', 'maskFormat', 'type', 'list', ]; export default function BaseInputTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ id, placeholder, required, readonly, disabled, label, hideLabel, value, onChange, onChangeOverride, onBlur, onFocus, autofocus, options, schema, type, rawErrors, multiline, }: BaseInputTemplateProps<T, S, F>) { const inputProps = getInputProps<T, S, F>(schema, type, options); const _onChange = ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onChange(value === '' ? options.emptyValue : value); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, value); const uiProps = _pick((options.props as object) || {}, allowedProps); return ( <> <TextField id={id} name={id} placeholder={placeholder} // @ts-expect-error todo: TS2322: Type 'string | false | ReactElement<any, string | JSXElementConstructor<any>> | undefined' is not assignable to type 'string | undefined'. label={labelValue(label, hideLabel)} autoFocus={autofocus} required={required} disabled={disabled} readOnly={readonly} multiline={multiline} // TODO: once fluent-ui supports the name prop, we can add it back in here. // name={name} {...inputProps} value={value || value === 0 ? value : ''} onChange={(onChangeOverride as any) || _onChange} onBlur={_onBlur} onFocus={_onFocus} errorMessage={(rawErrors || []).join('\n')} list={schema.examples ? examplesId<T>(id) : undefined} {...uiProps} aria-describedby={ariaDescribedByIds<T>(id, !!schema.examples)} /> {Array.isArray(schema.examples) && ( <datalist id={examplesId<T>(id)}> {(schema.examples as string[]) .concat(schema.default && !schema.examples.includes(schema.default) ? ([schema.default] as string[]) : []) .map((example: any) => { return <option key={example} value={example} />; })} </datalist> )} </> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/BaseInputTemplate/index.ts����������������������0000664�0000000�0000000�00000000124�14467713645�0027327�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './BaseInputTemplate'; export * from './BaseInputTemplate'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/CheckboxWidget/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025157�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/CheckboxWidget/CheckboxWidget.tsx���������������0000664�0000000�0000000�00000005470�14467713645�0030617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent, useCallback } from 'react'; import { Checkbox, ICheckboxProps } from '@fluentui/react'; import { ariaDescribedByIds, descriptionId, getTemplate, labelValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import _pick from 'lodash/pick'; // Keys of ICheckboxProps from @fluentui/react export const allowedProps: (keyof ICheckboxProps)[] = [ 'ariaDescribedBy', 'ariaLabel', 'ariaPositionInSet', 'ariaSetSize', 'boxSide', 'checked', 'checkmarkIconProps', 'className', 'componentRef', 'defaultChecked', 'defaultIndeterminate', 'disabled', 'indeterminate', 'inputProps', /* Backward compatibility with fluentui v7 */ 'keytipProps' as any, 'label', 'onChange', 'onRenderLabel', 'styles', 'theme', ]; export default function CheckboxWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { id, value, // required, disabled, readonly, label, hideLabel, schema, autofocus, onChange, onBlur, onFocus, options, registry, uiSchema, } = props; const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, options ); const _onChange = useCallback( (_, checked?: boolean): void => { onChange(checked); }, [onChange] ); const _onBlur = ({ target: { value } }: FocusEvent<HTMLButtonElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLButtonElement>) => onFocus(id, value); const uiProps = _pick((options.props as object) || {}, allowedProps); const description = options.description ?? schema.description; return ( <> {!hideLabel && !!description && ( <DescriptionFieldTemplate id={descriptionId<T>(id)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> )} <Checkbox id={id} name={id} // @ts-expect-error todo: TS2322: Type 'string | false | ReactElement<any, string | JSXElementConstructor<any>> | undefined' is not assignable to type 'string | undefined'. label={labelValue(label || undefined, hideLabel)} disabled={disabled || readonly} inputProps={{ autoFocus: autofocus, onBlur: _onBlur, onFocus: _onFocus, }} checked={typeof value === 'undefined' ? false : value} onChange={_onChange} {...uiProps} aria-describedby={ariaDescribedByIds<T>(id)} /* Backward compatibility with fluentui v7 */ {...{ autoFocus: autofocus, onBlur: _onBlur, onFocus: _onFocus, }} /> </> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/CheckboxWidget/index.ts�������������������������0000664�0000000�0000000�00000000116�14467713645�0026634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './CheckboxWidget'; export * from './CheckboxWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/CheckboxesWidget/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025507�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/CheckboxesWidget/CheckboxesWidget.tsx�����������0000664�0000000�0000000�00000005535�14467713645�0031501�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormEvent, FocusEvent } from 'react'; import { Checkbox } from '@fluentui/react'; import { ariaDescribedByIds, enumOptionsDeselectValue, enumOptionsIsSelected, enumOptionsSelectValue, enumOptionsValueForIndex, labelValue, optionId, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import _pick from 'lodash/pick'; import FluentLabel, { styles_red } from '../FluentLabel/FluentLabel'; import { allowedProps } from '../CheckboxWidget'; export default function CheckboxesWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ label, hideLabel, id, disabled, options, value, autofocus, readonly, required, onChange, onBlur, onFocus, rawErrors = [], }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, emptyValue } = options; const checkboxesValues = Array.isArray(value) ? value : [value]; const _onChange = (index: number) => (_ev?: FormEvent<HTMLElement>, checked?: boolean) => { if (checked) { onChange(enumOptionsSelectValue<S>(index, checkboxesValues, enumOptions)); } else { onChange(enumOptionsDeselectValue<S>(index, checkboxesValues, enumOptions)); } }; const _onBlur = ({ target: { value } }: FocusEvent<HTMLButtonElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLButtonElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const uiProps = _pick((options.props as object) || {}, allowedProps); return ( <> {labelValue(<FluentLabel label={label || undefined} required={required} />, hideLabel)} {Array.isArray(enumOptions) && enumOptions.map((option, index: number) => { const checked = enumOptionsIsSelected<S>(option.value, checkboxesValues); const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1; return ( <Checkbox id={optionId(id, index)} name={id} checked={checked} label={option.label} disabled={disabled || itemDisabled || readonly} inputProps={{ autoFocus: autofocus && index === 0, onBlur: _onBlur, onFocus: _onFocus, }} onChange={_onChange(index)} key={index} {...uiProps} aria-describedby={ariaDescribedByIds<T>(id)} /* Backward compatibility with fluentui v7 */ {...{ autoFocus: autofocus && index === 0, onBlur: _onBlur, onFocus: _onFocus, }} /> ); })} <span style={styles_red}>{(rawErrors || []).join('\n')}</span> </> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/CheckboxesWidget/index.ts�����������������������0000664�0000000�0000000�00000000122�14467713645�0027161�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './CheckboxesWidget'; export * from './CheckboxesWidget'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ColorWidget/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024507�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ColorWidget/ColorWidget.tsx���������������������0000664�0000000�0000000�00000002522�14467713645�0027472�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ColorPicker, IColorPickerProps, IColor, getColorFromString } from '@fluentui/react'; import { ariaDescribedByIds, labelValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import _pick from 'lodash/pick'; import FluentLabel from '../FluentLabel/FluentLabel'; const allowedProps: (keyof IColorPickerProps)[] = [ 'componentRef', 'color', 'strings', 'onChange', 'alphaType', 'alphaSliderHidden', 'hexLabel', 'redLabel', 'greenLabel', 'blueLabel', 'alphaLabel', 'className', 'theme', 'styles', 'showPreview', ]; export default function ColorWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, options, value, required, label, hideLabel, onChange, }: WidgetProps<T, S, F>) { const updateColor = (_ev: any, colorObj: IColor) => { onChange(colorObj.hex); }; const uiProps = { id, ..._pick((options.props as object) || {}, allowedProps) }; return ( <> {labelValue(<FluentLabel label={label || undefined} required={required} id={id} />, hideLabel)} <ColorPicker color={getColorFromString(value) as any} onChange={updateColor} alphaType='alpha' showPreview={true} {...uiProps} aria-describedby={ariaDescribedByIds<T>(id)} /> </> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ColorWidget/index.ts����������������������������0000664�0000000�0000000�00000000110�14467713645�0026156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ColorWidget'; export * from './ColorWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/DateTimeWidget/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025125�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/DateTimeWidget/DateTimeWidget.tsx���������������0000664�0000000�0000000�00000001536�14467713645�0030532�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { WidgetProps, getTemplate, localToUTC, utcToLocal, StrictRJSFSchema, RJSFSchema, FormContextType, } from '@rjsf/utils'; export default function DateTimeWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { registry } = props; const uiProps: any = props.options['props'] || {}; const options = { ...props.options, props: { type: 'datetime-local', ...uiProps, }, }; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); const value = utcToLocal(props.value); const onChange = (value: any) => { props.onChange(localToUTC(value)); }; // TODO: rows and columns. return <BaseInputTemplate {...props} options={options} value={value} onChange={onChange} />; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/DateTimeWidget/index.ts�������������������������0000664�0000000�0000000�00000000116�14467713645�0026602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './DateTimeWidget'; export * from './DateTimeWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/DateWidget/�������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024306�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/DateWidget/DateWidget.tsx�����������������������0000664�0000000�0000000�00000006156�14467713645�0027077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import { ariaDescribedByIds, labelValue, pad, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString, WidgetProps, } from '@rjsf/utils'; import { DatePicker, DayOfWeek, mergeStyleSets } from '@fluentui/react'; import _pick from 'lodash/pick'; // Keys of IDropdownProps from @fluentui/react const allowedProps = [ 'componentRef', 'styles', 'theme', 'calloutProps', 'calendarProps', 'textField', 'calendarAs', 'onSelectDate', 'label', 'isRequired', 'disabled', 'ariaLabel', 'underlined', 'pickerAriaLabel', 'isMonthPickerVisible', 'showMonthPickerAsOverlay', 'allowTextInput', 'disableAutoFocus', 'placeholder', 'today', 'value', 'formatDate', 'parseDateFromString', 'firstDayOfWeek', 'strings', 'highlightCurrentMonth', 'highlightSelectedMonth', 'showWeekNumbers', 'firstWeekOfYear', 'showGoToToday', 'borderless', 'className', 'dateTimeFormatter', 'minDate', 'maxDate', 'initialPickerDate', 'allFocusable', 'onAfterMenuDismiss', 'showCloseButton', 'tabIndex', ]; const controlClass = mergeStyleSets({ control: { margin: '0 0 15px 0', }, }); // TODO: move to utils. // TODO: figure out a standard format for this, as well as // how we can get this to work with locales. const formatDate = (date?: Date) => { if (!date) { return ''; } const yyyy = pad(date.getFullYear(), 4); const MM = pad(date.getMonth() + 1, 2); const dd = pad(date.getDate(), 2); return `${yyyy}-${MM}-${dd}`; }; const parseDate = (dateStr?: string) => { if (!dateStr) { return undefined; } const [year, month, day] = dateStr.split('-').map((e) => parseInt(e)); const dt = new Date(year, month - 1, day); return dt; }; export default function DateWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, required, label, hideLabel, value, onChange, onBlur, onFocus, options, placeholder, registry, }: WidgetProps<T, S, F>) { const { translateString } = registry; const _onSelectDate = (date: Date | null | undefined) => { if (date) { const formatted = formatDate(date); formatted && onChange(formatted); } }; const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, value); const uiProps = _pick((options.props as object) || {}, allowedProps); return ( <DatePicker id={id} className={controlClass.control} firstDayOfWeek={DayOfWeek.Sunday} placeholder={placeholder} ariaLabel={translateString(TranslatableString.AriaDateLabel)} isRequired={required} // @ts-expect-error todo: TS2322: Type 'string | false | ReactElement<any, string | JSXElementConstructor<any>> | undefined' is not assignable to type 'string | undefined'. label={labelValue(label, hideLabel)} onSelectDate={_onSelectDate} onBlur={_onBlur} onFocus={_onFocus} value={parseDate(value)} {...uiProps} aria-describedby={ariaDescribedByIds<T>(id)} /> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/DateWidget/index.ts�����������������������������0000664�0000000�0000000�00000000106�14467713645�0025762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './DateWidget'; export * from './DateWidget'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/DescriptionField/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025514�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/DescriptionField/DescriptionField.tsx�����������0000664�0000000�0000000�00000000642�14467713645�0031505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { DescriptionFieldProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import { Text } from '@fluentui/react'; export default function DescriptionField< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ description, id }: DescriptionFieldProps<T, S, F>) { if (description) { return <Text id={id}>{description}</Text>; } return null; } ����������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/DescriptionField/index.ts�����������������������0000664�0000000�0000000�00000000122�14467713645�0027166�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './DescriptionField'; export * from './DescriptionField'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ErrorList/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024212�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ErrorList/ErrorList.tsx�������������������������0000664�0000000�0000000�00000001372�14467713645�0026702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { MessageBar, MessageBarType } from '@fluentui/react'; import { ErrorListProps, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; export default function ErrorList<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ errors, registry, }: ErrorListProps<T, S, F>) { const { translateString } = registry; return ( <> {errors.map((error, i) => { return ( <MessageBar key={i} messageBarType={MessageBarType.error} isMultiline={false} dismissButtonAriaLabel={translateString(TranslatableString.CloseLabel)} > {error.stack} </MessageBar> ); })} </> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ErrorList/index.ts������������������������������0000664�0000000�0000000�00000000104�14467713645�0025664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ErrorList'; export * from './ErrorList'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FieldErrorTemplate/�����������������������������0000775�0000000�0000000�00000000000�14467713645�0026016�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FieldErrorTemplate/FieldErrorTemplate.tsx�������0000664�0000000�0000000�00000001213�14467713645�0032304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { errorId, FieldErrorProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import { List } from '@fluentui/react'; /** The `FieldErrorTemplate` component renders the errors local to the particular field * * @param props - The `FieldErrorProps` for the errors being rendered */ export default function FieldErrorTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldErrorProps<T, S, F>) { const { errors = [], idSchema } = props; if (errors.length === 0) { return null; } const id = errorId<T>(idSchema); return <List id={id} items={errors} />; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FieldErrorTemplate/index.ts���������������������0000664�0000000�0000000�00000000126�14467713645�0027474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldErrorTemplate'; export * from './FieldErrorTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FieldHelpTemplate/������������������������������0000775�0000000�0000000�00000000000�14467713645�0025615�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FieldHelpTemplate/FieldHelpTemplate.tsx���������0000664�0000000�0000000�00000001117�14467713645�0031705�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { helpId, FieldHelpProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import { Text } from '@fluentui/react'; /** The `FieldHelpTemplate` component renders any help desired for a field * * @param props - The `FieldHelpProps` to be rendered */ export default function FieldHelpTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldHelpProps<T, S, F>) { const { idSchema, help } = props; if (!help) { return null; } const id = helpId<T>(idSchema); return <Text id={id}>{help}</Text>; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FieldHelpTemplate/index.ts����������������������0000664�0000000�0000000�00000000124�14467713645�0027271�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldHelpTemplate'; export * from './FieldHelpTemplate'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FieldTemplate/����������������������������������0000775�0000000�0000000�00000000000�14467713645�0025004�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FieldTemplate/FieldTemplate.tsx�����������������0000664�0000000�0000000�00000001667�14467713645�0030275�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FieldTemplateProps, FormContextType, getTemplate, getUiOptions, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; import { Text } from '@fluentui/react'; export default function FieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldTemplateProps<T, S, F>) { const { children, errors, help, displayLabel, description, rawDescription, hidden, uiSchema, registry } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const WrapIfAdditionalTemplate = getTemplate<'WrapIfAdditionalTemplate', T, S, F>( 'WrapIfAdditionalTemplate', registry, uiOptions ); if (hidden) { return <div style={{ display: 'none' }}>{children}</div>; } return ( <WrapIfAdditionalTemplate {...props}> {children} {displayLabel && rawDescription && <Text>{description}</Text>} {errors} {help} </WrapIfAdditionalTemplate> ); } �������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FieldTemplate/index.ts��������������������������0000664�0000000�0000000�00000000114�14467713645�0026457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldTemplate'; export * from './FieldTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FluentLabel/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024462�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FluentLabel/FluentLabel.tsx���������������������0000664�0000000�0000000�00000001167�14467713645�0027424�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Label } from '@fluentui/react'; export const styles_red = { // TODO: get this color from theme. color: 'rgb(164, 38, 44)', fontSize: 12, fontWeight: 'normal' as any, fontFamily: `"Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif`, }; interface FluentLabelProps { label?: string; required?: boolean; id?: string; } export default function FluentLabel({ label, required, id }: FluentLabelProps) { return ( <Label htmlFor={id}> {label} {required && <span style={styles_red}> *</span>} </Label> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FuiForm/����������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023634�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FuiForm/FuiForm.ts������������������������������0000664�0000000�0000000�00000000713�14467713645�0025554�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ComponentType } from 'react'; import { FormProps, withTheme } from '@rjsf/core'; import { generateTheme } from '../Theme'; import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export function generateForm< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): ComponentType<FormProps<T, S, F>> { return withTheme<T, S, F>(generateTheme<T, S, F>()); } export default generateForm(); �����������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/FuiForm/index.ts��������������������������������0000664�0000000�0000000�00000000100�14467713645�0025302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FuiForm'; export * from './FuiForm'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/IconButton/�������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024351�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/IconButton/IconButton.tsx�����������������������0000664�0000000�0000000�00000003531�14467713645�0027177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { IconButton, IIconProps } from '@fluentui/react'; import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; export default function FluentIconButton< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: IconButtonProps<T, S, F>) { const iconProps: IIconProps = { iconName: props.icon as string, }; return <IconButton disabled={props.disabled} onClick={props.onClick} iconProps={iconProps} color='secondary' />; } export function CopyButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return <FluentIconButton<T, S, F> title={translateString(TranslatableString.CopyButton)} {...props} icon='Copy' />; } export function MoveDownButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <FluentIconButton<T, S, F> title={translateString(TranslatableString.MoveDownButton)} {...props} icon='Down' /> ); } export function MoveUpButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return <FluentIconButton<T, S, F> title={translateString(TranslatableString.MoveUpButton)} {...props} icon='Up' />; } export function RemoveButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <FluentIconButton<T, S, F> title={translateString(TranslatableString.RemoveButton)} {...props} icon='Delete' /> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/IconButton/index.ts�����������������������������0000664�0000000�0000000�00000000106�14467713645�0026025�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './IconButton'; export * from './IconButton'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ObjectFieldTemplate/����������������������������0000775�0000000�0000000�00000000000�14467713645�0026133�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx�����0000664�0000000�0000000�00000004053�14467713645�0032543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { CSSProperties } from 'react'; import { canExpand, descriptionId, FormContextType, getTemplate, getUiOptions, ObjectFieldTemplateProps, RJSFSchema, StrictRJSFSchema, titleId, } from '@rjsf/utils'; const rightJustify = { float: 'right', } as CSSProperties; export default function ObjectFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ description, title, properties, required, disabled, readonly, schema, uiSchema, idSchema, formData, onAddClick, registry, }: ObjectFieldTemplateProps<T, S, F>) { const uiOptions = getUiOptions<T, S, F>(uiSchema); const TitleFieldTemplate = getTemplate<'TitleFieldTemplate', T, S, F>('TitleFieldTemplate', registry, uiOptions); const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; return ( <> {title && ( <TitleFieldTemplate id={titleId<T>(idSchema)} title={title} required={required} schema={schema} uiSchema={uiSchema} registry={registry} /> )} {description && ( <DescriptionFieldTemplate id={descriptionId<T>(idSchema)} schema={schema} uiSchema={uiSchema} description={description} registry={registry} /> )} <div className='ms-Grid' dir='ltr'> <div className='ms-Grid-row'>{properties.map((element) => element.content)}</div> {canExpand<T, S, F>(schema, uiSchema, formData) && ( <span style={rightJustify}> <AddButton className='object-property-expand' onClick={onAddClick(schema)} disabled={disabled || readonly} uiSchema={uiSchema} registry={registry} /> </span> )} </div> </> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/ObjectFieldTemplate/index.ts��������������������0000664�0000000�0000000�00000000130�14467713645�0027604�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ObjectFieldTemplate'; export * from './ObjectFieldTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/RadioWidget/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024467�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/RadioWidget/RadioWidget.tsx���������������������0000664�0000000�0000000�00000004746�14467713645�0027444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormEvent, FocusEvent } from 'react'; import { ChoiceGroup, IChoiceGroupOption, IChoiceGroupProps } from '@fluentui/react'; import { ariaDescribedByIds, enumOptionsIndexForValue, enumOptionsValueForIndex, labelValue, optionId, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import _pick from 'lodash/pick'; const allowedProps: (keyof IChoiceGroupProps)[] = [ 'componentRef', 'options', 'defaultSelectedKey', 'selectedKey', 'onChange', 'label', /* Backward compatibility with fluentui v7 */ 'onChanged' as any, 'theme', 'styles', 'ariaLabelledBy', ]; export default function RadioWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, options, value, required, label, hideLabel, onChange, onBlur, onFocus, disabled, readonly, }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, emptyValue } = options; function _onChange(_ev?: FormEvent<HTMLElement | HTMLInputElement>, option?: IChoiceGroupOption): void { if (option) { onChange(enumOptionsValueForIndex<S>(option.key, enumOptions, emptyValue)); } } const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const newOptions = Array.isArray(enumOptions) ? enumOptions.map((option, index) => ({ key: String(index), name: id, id: optionId(id, index), text: option.label, disabled: Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1, 'aria-describedby': ariaDescribedByIds<T>(id), })) : []; const selectedIndex = enumOptionsIndexForValue<S>(value, enumOptions) as string; const uiProps = _pick((options.props as object) || {}, allowedProps); return ( <ChoiceGroup id={id} name={id} options={newOptions} disabled={disabled || readonly} onChange={_onChange} onFocus={_onFocus} onBlur={_onBlur} // @ts-expect-error todo: TS2322: Type 'string | false | ReactElement<any, string | JSXElementConstructor<any>> | undefined' is not assignable to type 'string | undefined'. label={labelValue(label, hideLabel || !label)} required={required} selectedKey={selectedIndex} {...uiProps} /> ); } ��������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/RadioWidget/index.ts����������������������������0000664�0000000�0000000�00000000110�14467713645�0026136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './RadioWidget'; export * from './RadioWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/RangeWidget/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024465�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/RangeWidget/RangeWidget.tsx���������������������0000664�0000000�0000000�00000002751�14467713645�0027432�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { Slider } from '@fluentui/react'; import { ariaDescribedByIds, labelValue, FormContextType, rangeSpec, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; import _pick from 'lodash/pick'; import FluentLabel from '../FluentLabel/FluentLabel'; // Keys of ISliderProps from @fluentui/react const allowedProps = [ 'componentRef', 'styles?', 'theme', 'label', 'defaultValue', 'value', 'min', 'max', 'step', 'showValue', 'onChange', 'ariaLabel', 'ariaValueText', 'vertical', 'disabled', 'snapToStep', 'className', 'buttonProps', 'valueFormat', 'originFromZero', ]; export default function RangeWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ value, readonly, disabled, options, schema, onChange, required, label, hideLabel, id, }: WidgetProps<T, S, F>) { const sliderProps = { value, label, id, ...rangeSpec<S>(schema) }; const _onChange = (value: number) => onChange(value); const uiProps = { id, ..._pick((options.props as object) || {}, allowedProps) }; return ( <> {labelValue(<FluentLabel label={label || undefined} required={required} id={id} />, hideLabel)} <Slider disabled={disabled || readonly} min={sliderProps.min} max={sliderProps.max} step={sliderProps.step} onChange={_onChange} snapToStep {...uiProps} aria-describedby={ariaDescribedByIds<T>(id)} /> </> ); } �����������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/RangeWidget/index.ts����������������������������0000664�0000000�0000000�00000000110�14467713645�0026134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './RangeWidget'; export * from './RangeWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/SelectWidget/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024650�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/SelectWidget/SelectWidget.tsx�������������������0000664�0000000�0000000�00000006455�14467713645�0030005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormEvent } from 'react'; import { Dropdown, IDropdownOption } from '@fluentui/react'; import { ariaDescribedByIds, enumOptionsDeselectValue, enumOptionsIndexForValue, enumOptionsSelectValue, enumOptionsValueForIndex, labelValue, WidgetProps, StrictRJSFSchema, RJSFSchema, FormContextType, } from '@rjsf/utils'; import _pick from 'lodash/pick'; // Keys of IDropdownProps from @fluentui/react const allowedProps = [ 'placeHolder', 'options', 'onChange', 'onChanged', 'onRenderLabel', 'onRenderPlaceholder', 'onRenderPlaceHolder', 'onRenderTitle', 'onRenderCaretDown', 'dropdownWidth', 'responsiveMode', 'defaultSelectedKeys', 'selectedKeys', 'multiselectDelimiter', 'notifyOnReselect', 'isDisabled', 'keytipProps', 'theme', 'styles', // ISelectableDroppableTextProps 'componentRef', 'label', 'ariaLabel', 'id', 'className', 'defaultSelectedKey', 'selectedKey', 'multiSelect', 'options', 'onRenderContainer', 'onRenderList', 'onRenderItem', 'onRenderOption', 'onDismiss', 'disabled', 'required', 'calloutProps', 'panelProps', 'errorMessage', 'placeholder', 'openOnKeyboardFocus', ]; export default function SelectWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ id, options, label, hideLabel, required, disabled, readonly, value, multiple, onChange, onBlur, onFocus, }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, emptyValue } = options; const _onChange = (_ev?: FormEvent<HTMLElement>, item?: IDropdownOption) => { if (!item) { return; } if (multiple) { const valueOrDefault = value || []; if (item.selected) { onChange(enumOptionsSelectValue(item.key, valueOrDefault, enumOptions)); } else { onChange(enumOptionsDeselectValue(item.key, valueOrDefault, enumOptions)); } } else { onChange(enumOptionsValueForIndex<S>(item.key, enumOptions, emptyValue)); } }; const _onBlur = (e: any) => onBlur(id, enumOptionsValueForIndex<S>(e.target.value, enumOptions, emptyValue)); const _onFocus = (e: any) => onFocus(id, enumOptionsValueForIndex<S>(e.target.value, enumOptions, emptyValue)); const newOptions = Array.isArray(enumOptions) ? enumOptions.map((option, index) => ({ key: String(index), text: option.label, disabled: Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1, })) : []; const uiProps = _pick((options.props as object) || {}, allowedProps); const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, multiple); return ( <Dropdown id={id} // @ts-expect-error todo: TS2322: Type 'string | false | ReactElement<any, string | JSXElementConstructor<any>> | undefined' is not assignable to type 'string | undefined'. label={labelValue(label, hideLabel)} multiSelect={multiple} defaultSelectedKey={multiple ? undefined : selectedIndexes} defaultSelectedKeys={multiple ? (selectedIndexes as string[]) : undefined} required={required} options={newOptions} disabled={disabled || readonly} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} {...uiProps} aria-describedby={ariaDescribedByIds<T>(id)} /> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/SelectWidget/index.ts���������������������������0000664�0000000�0000000�00000000112�14467713645�0026321�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './SelectWidget'; export * from './SelectWidget'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/SubmitButton/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024724�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/SubmitButton/SubmitButton.tsx�������������������0000664�0000000�0000000�00000001232�14467713645�0030121�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, getSubmitButtonOptions, RJSFSchema, StrictRJSFSchema, SubmitButtonProps } from '@rjsf/utils'; import { PrimaryButton } from '@fluentui/react'; export default function SubmitButton< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ uiSchema }: SubmitButtonProps<T, S, F>) { const { submitText, norender, props: submitButtonProps } = getSubmitButtonOptions(uiSchema); if (norender) { return null; } return ( <div> <br /> <div className='ms-Grid-col ms-sm12'> <PrimaryButton text={submitText} type='submit' {...submitButtonProps} /> </div> </div> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/SubmitButton/index.ts���������������������������0000664�0000000�0000000�00000000112�14467713645�0026375�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './SubmitButton'; export * from './SubmitButton'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/Templates/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024223�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/Templates/Templates.ts��������������������������0000664�0000000�0000000�00000003011�14467713645�0026524�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import ArrayFieldItemTemplate from '../ArrayFieldItemTemplate'; import AddButton from '../AddButton'; import ArrayFieldTemplate from '../ArrayFieldTemplate'; import BaseInputTemplate from '../BaseInputTemplate/BaseInputTemplate'; import DescriptionField from '../DescriptionField'; import ErrorList from '../ErrorList'; import { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } from '../IconButton'; import FieldErrorTemplate from '../FieldErrorTemplate'; import FieldHelpTemplate from '../FieldHelpTemplate'; import FieldTemplate from '../FieldTemplate'; import ObjectFieldTemplate from '../ObjectFieldTemplate'; import SubmitButton from '../SubmitButton'; import TitleField from '../TitleField'; import WrapIfAdditionalTemplate from '../WrapIfAdditionalTemplate'; import { FormContextType, RJSFSchema, StrictRJSFSchema, TemplatesType } from '@rjsf/utils'; export function generateTemplates< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): Partial<TemplatesType<T, S, F>> { return { ArrayFieldItemTemplate, ArrayFieldTemplate, BaseInputTemplate, ButtonTemplates: { CopyButton, AddButton, MoveDownButton, MoveUpButton, RemoveButton, SubmitButton, }, DescriptionFieldTemplate: DescriptionField, ErrorListTemplate: ErrorList, FieldErrorTemplate, FieldHelpTemplate, FieldTemplate, ObjectFieldTemplate, TitleFieldTemplate: TitleField, WrapIfAdditionalTemplate, }; } export default generateTemplates(); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/Templates/index.ts������������������������������0000664�0000000�0000000�00000000104�14467713645�0025675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Templates'; export * from './Templates'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/TextareaWidget/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025206�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/TextareaWidget/TextareaWidget.tsx���������������0000664�0000000�0000000�00000001065�14467713645�0030671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, getTemplate, getUiOptions, RJSFSchema, StrictRJSFSchema, WidgetProps } from '@rjsf/utils'; export default function TextareaWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { uiSchema, registry } = props; const options = getUiOptions<T, S, F>(uiSchema); const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); // TODO: rows and columns. return <BaseInputTemplate {...props} multiline />; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/TextareaWidget/index.ts�������������������������0000664�0000000�0000000�00000000116�14467713645�0026663�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './TextareaWidget'; export * from './TextareaWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/Theme/������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023327�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/Theme/Theme.ts����������������������������������0000664�0000000�0000000�00000000763�14467713645�0024747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ThemeProps } from '@rjsf/core'; import { generateTemplates } from '../Templates'; import { generateWidgets } from '../Widgets'; import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export function generateTheme< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): ThemeProps<T, S, F> { return { templates: generateTemplates<T, S, F>(), widgets: generateWidgets<T, S, F>(), }; } export default generateTheme(); �������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/Theme/index.ts����������������������������������0000664�0000000�0000000�00000000074�14467713645�0025007�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Theme'; export * from './Theme'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/TitleField/�������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024312�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/TitleField/TitleField.tsx�����������������������0000664�0000000�0000000�00000000764�14467713645�0027106�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, TitleFieldProps } from '@rjsf/utils'; import { Label } from '@fluentui/react'; const styles = { root: [ { fontSize: 24, marginBottom: 20, paddingBottom: 0, }, ], }; export default function TitleField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, title, }: TitleFieldProps<T, S, F>) { return ( <Label id={id} styles={styles}> {title} </Label> ); } ������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/TitleField/index.ts�����������������������������0000664�0000000�0000000�00000000106�14467713645�0025766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './TitleField'; export * from './TitleField'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/UpDownWidget/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024645�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/UpDownWidget/UpDownWidget.tsx�������������������0000664�0000000�0000000�00000006320�14467713645�0027766�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent, SyntheticEvent } from 'react'; import { ISpinButtonProps, SpinButton } from '@fluentui/react'; import { ariaDescribedByIds, FormContextType, labelValue, rangeSpec, RJSFSchema, StrictRJSFSchema, TranslatableString, WidgetProps, } from '@rjsf/utils'; import _pick from 'lodash/pick'; import FluentLabel from '../FluentLabel/FluentLabel'; // Keys of ISpinButtonProps from @fluentui/react const allowedProps: (keyof ISpinButtonProps)[] = [ 'ariaDescribedBy', 'ariaLabel', 'ariaPositionInSet', 'ariaSetSize', 'ariaValueNow', 'ariaValueText', 'className', 'componentRef', 'decrementButtonAriaLabel', 'decrementButtonIcon', 'defaultValue', 'disabled', 'downArrowButtonStyles', /* Backward compatibility with fluentui v7 */ 'getClassNames' as any, 'iconButtonProps', 'iconProps', 'incrementButtonAriaLabel', 'incrementButtonIcon', 'inputProps', 'keytipProps', 'label', 'labelPosition', 'max', 'min', 'onBlur', 'onDecrement', 'onFocus', 'onIncrement', 'onValidate', 'precision', 'step', 'styles', 'theme', 'title', 'upArrowButtonStyles', 'value', ]; export default function UpDownWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ id, required, readonly, disabled, label, hideLabel, value, onChange, onBlur, onFocus, options, schema, registry, }: WidgetProps<T, S, F>) { const { translateString } = registry; const _onChange = (ev: ChangeEvent<HTMLInputElement> | SyntheticEvent<HTMLElement>, newValue?: string) => { if (newValue) { onChange(Number(newValue)); } else if ('value' in ev.target) { /* Backward compatibility with fluentui v7 */ onChange(Number(ev.target.value)); } }; let { min, max, step } = rangeSpec<S>(schema); if (min === undefined) { min = -1 * Infinity; } if (max === undefined) { max = Infinity; } if (step === undefined) { step = 1; } const _onIncrement = (value: string) => { if (Number(value) + step! <= max!) { onChange(Number(value) + step!); } }; const _onDecrement = (value: string) => { if (Number(value) - step! >= min!) { onChange(Number(value) - step!); } }; const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, value); const uiProps = _pick((options.props as object) || {}, allowedProps); return ( <> {labelValue(<FluentLabel label={label || undefined} required={required} id={id} />, hideLabel)} <SpinButton id={id} min={min} max={max} step={step} incrementButtonAriaLabel={translateString(TranslatableString.IncrementAriaLabel)} decrementButtonAriaLabel={translateString(TranslatableString.DecrementAriaLabel)} disabled={disabled || readonly} value={value || value === 0 ? value : ''} onBlur={_onBlur} onFocus={_onFocus} onChange={_onChange} onIncrement={_onIncrement} onDecrement={_onDecrement} {...uiProps} aria-describedby={ariaDescribedByIds<T>(id)} /> </> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/UpDownWidget/index.ts���������������������������0000664�0000000�0000000�00000000112�14467713645�0026316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './UpDownWidget'; export * from './UpDownWidget'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/Widgets/����������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023673�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/Widgets/Widgets.ts������������������������������0000664�0000000�0000000�00000002067�14467713645�0025656�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import CheckboxWidget from '../CheckboxWidget/CheckboxWidget'; import CheckboxesWidget from '../CheckboxesWidget/CheckboxesWidget'; import ColorWidget from '../ColorWidget/ColorWidget'; import DateWidget from '../DateWidget/DateWidget'; import DateTimeWidget from '../DateTimeWidget/DateTimeWidget'; import RadioWidget from '../RadioWidget/RadioWidget'; import RangeWidget from '../RangeWidget/RangeWidget'; import SelectWidget from '../SelectWidget/SelectWidget'; import TextareaWidget from '../TextareaWidget/TextareaWidget'; import UpDownWidget from '../UpDownWidget/UpDownWidget'; import { FormContextType, RegistryWidgetsType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; export function generateWidgets< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): RegistryWidgetsType<T, S, F> { return { CheckboxWidget, CheckboxesWidget, ColorWidget, DateWidget, DateTimeWidget, RadioWidget, RangeWidget, SelectWidget, TextareaWidget, UpDownWidget, }; } export default generateWidgets(); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/Widgets/index.ts��������������������������������0000664�0000000�0000000�00000000100�14467713645�0025341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Widgets'; export * from './Widgets'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/WrapIfAdditionalTemplate/�����������������������0000775�0000000�0000000�00000000000�14467713645�0027142�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������WrapIfAdditionalTemplate.tsx������������������������������������������������������������������������0000664�0000000�0000000�00000004374�14467713645�0034510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/fluent-ui/src/WrapIfAdditionalTemplate�������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import { TextField } from '@fluentui/react'; import { ADDITIONAL_PROPERTY_FLAG, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString, WrapIfAdditionalTemplateProps, } from '@rjsf/utils'; export default function WrapIfAdditionalTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WrapIfAdditionalTemplateProps<T, S, F>) { const { children, disabled, id, label, onDropPropertyClick, onKeyChange, readonly, registry, required, schema, style, uiSchema, } = props; const { templates, translateString } = registry; // TODO: do this better by not returning the form-group class from master. let { classNames = '' } = props; classNames = 'ms-Grid-col ms-sm12 ' + classNames.replace('form-group', ''); // Button templates are not overridden in the uiSchema const { RemoveButton } = templates.ButtonTemplates; const keyLabel = translateString(TranslatableString.KeyLabel, [label]); const additional = ADDITIONAL_PROPERTY_FLAG in schema; if (!additional) { return ( <div className={classNames} style={{ ...style, marginBottom: 15 }}> {children} </div> ); } const handleBlur = ({ target }: FocusEvent<HTMLInputElement>) => onKeyChange(target.value); return ( <div className={classNames} style={{ ...style, marginBottom: 15 }} dir='ltr'> <div key={`${id}-key`} className='ms-Grid-row'> <div className='ms-Grid-col ms-sm4 ms-md4 ms-lg5'> <TextField required={required} label={keyLabel} defaultValue={label} disabled={disabled || readonly} id={`${id}-key`} name={`${id}-key`} onBlur={!readonly ? handleBlur : undefined} type='text' /> </div> <div className='ms-Grid-col ms-sm4 ms-md4 ms-lg5'>{children}</div> <div className='ms-Grid-col ms-sm4 ms-md4 ms-lg2' style={{ textAlign: 'right' }}> <RemoveButton disabled={disabled || readonly} onClick={onDropPropertyClick(label)} uiSchema={uiSchema} registry={registry} /> </div> </div> </div> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/WrapIfAdditionalTemplate/index.ts���������������0000664�0000000�0000000�00000000142�14467713645�0030616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './WrapIfAdditionalTemplate'; export * from './WrapIfAdditionalTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/src/index.ts����������������������������������������0000664�0000000�0000000�00000000601�14467713645�0023741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { initializeIcons } from '@fluentui/react'; import FuiForm from './FuiForm/'; export { default as Form, generateForm } from './FuiForm'; export { default as Templates, generateTemplates } from './Templates'; export { default as Theme, generateTheme } from './Theme'; export { default as Widgets, generateWidgets } from './Widgets'; initializeIcons(); export default FuiForm; �������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/test/�����������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022455�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/test/Array.test.tsx���������������������������������0000664�0000000�0000000�00000000150�14467713645�0025245�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import arrayTests from '@rjsf/core/testSnap/arrayTests'; import Form from '../src'; arrayTests(Form); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/test/Form.test.tsx����������������������������������0000664�0000000�0000000�00000000145�14467713645�0025076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import formTests from '@rjsf/core/testSnap/formTests'; import Form from '../src'; formTests(Form); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/test/Object.test.tsx��������������������������������0000664�0000000�0000000�00000000153�14467713645�0025400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import objectTests from '@rjsf/core/testSnap/objectTests'; import Form from '../src'; objectTests(Form); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/test/__snapshots__/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025273�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/test/__snapshots__/Array.test.tsx.snap��������������0000664�0000000�0000000�00000403701�14467713645�0031034�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`array fields array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar array-item-add root-110" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-113" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-114" id="id__0" > Add Item </span> </span> </span> </button> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__3" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`array fields array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-126" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm6 ms-md4 ms-lg3" style={ { "textAlign": "right", } } > <button aria-disabled={true} className="ms-Button ms-Button--icon is-disabled root-155" data-is-focusable={false} disabled={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-156" data-icon-name="Up" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-121" data-icon-name="Down" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-163 ms-Button-icon icon-121" data-icon-name="Copy" style={ { "fontFamily": ""FabricMDL2Icons-2"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-121" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-126" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm6 ms-md4 ms-lg3" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-121" data-icon-name="Up" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button aria-disabled={true} className="ms-Button ms-Button--icon is-disabled root-155" data-is-focusable={false} disabled={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-156" data-icon-name="Down" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-163 ms-Button-icon icon-121" data-icon-name="Copy" style={ { "fontFamily": ""FabricMDL2Icons-2"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-121" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar array-item-add root-110" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-113" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-114" id="id__56" > Add Item </span> </span> </span> </button> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__59" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`array fields checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Dropdown-container" > <div aria-describedby="root__error root__description root__help" aria-disabled={false} aria-expanded="false" aria-haspopup="listbox" aria-required={false} className="ms-Dropdown dropdown-136" data-is-focusable={true} data-ktp-target={true} id="root" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} role="combobox" tabIndex={0} > <span aria-invalid={false} className="ms-Dropdown-title ms-Dropdown-titleIsPlaceHolder title-137" id="root-option" /> <span className="ms-Dropdown-caretDownWrapper caretDownWrapper-138" > <i aria-hidden={true} className="ms-Dropdown-caretDown caretDown-154" data-icon-name="ChevronDown" >  </i> </span> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__19" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`array fields empty errors array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-178" htmlFor="root_name" id="TextFieldLabel81" > name </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_name__error root_name__description root_name__help" aria-invalid={false} aria-labelledby="TextFieldLabel81" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__84" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`array fields fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-126" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-126" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__16" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`array fields has errors 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-MessageBar ms-MessageBar--error ms-MessageBar-singleline root-164" > <div className="ms-MessageBar-content content-165" > <div aria-hidden={true} className="ms-MessageBar-icon iconContainer-166" > <i aria-hidden={true} className="icon-176" data-icon-name="ErrorBadge" >  </i> </div> <div aria-live="assertive" className="ms-MessageBar-text text-168" id="MessageBar62" role="alert" > <span className="ms-MessageBar-innerText innerText-169" /> </div> </div> </div> <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string field-error has-error has-danger" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-178" htmlFor="root_name" id="TextFieldLabel65" > name </label> <div className="ms-TextField-fieldGroup fieldGroup-177" > <input aria-describedby="TextFieldDescription64" aria-invalid={true} aria-labelledby="TextFieldLabel65" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> <span id="TextFieldDescription64" > <div role="alert" /> </span> </div> <div className="ms-List" id="root_name__error" role="list" > <div className="ms-List-surface" role="presentation" > <div className="ms-List-page" role="presentation" style={{}} > <div className="ms-List-cell" data-automationid="ListCell" data-list-index={0} role="listitem" > </div> </div> </div> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__68" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`array fields no errors 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-178" htmlFor="root_name" id="TextFieldLabel73" > name </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_name__error root_name__description root_name__help" aria-invalid={false} aria-labelledby="TextFieldLabel73" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_name" name="root_name" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__76" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <label className="ms-Label root-180" id="root__title" > Test field </label> <span className="css-181" id="root__description" > a test description </span> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar array-item-add root-110" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-113" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-114" id="id__87" > Add Item </span> </span> </span> </button> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__90" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <label className="ms-Label root-180" id="root__title" > Test field </label> <span className="css-181" id="root__description" > a test description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-182" htmlFor="root_0" id="TextFieldLabel111" > Test item </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-invalid={false} aria-labelledby="TextFieldLabel111" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> </div> <span className="css-181" > <span className="css-181" id="root_0__description" > a test item description </span> </span> </div> </div> </div> <div className="ms-Grid-col ms-sm6 ms-md4 ms-lg3" style={ { "textAlign": "right", } } > <button aria-disabled={true} className="ms-Button ms-Button--icon is-disabled root-155" data-is-focusable={false} disabled={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-156" data-icon-name="Up" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-121" data-icon-name="Down" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-163 ms-Button-icon icon-121" data-icon-name="Copy" style={ { "fontFamily": ""FabricMDL2Icons-2"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-121" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-182" htmlFor="root_1" id="TextFieldLabel128" > Test item </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-invalid={false} aria-labelledby="TextFieldLabel128" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> </div> <span className="css-181" > <span className="css-181" id="root_1__description" > a test item description </span> </span> </div> </div> </div> <div className="ms-Grid-col ms-sm6 ms-md4 ms-lg3" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-121" data-icon-name="Up" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button aria-disabled={true} className="ms-Button ms-Button--icon is-disabled root-155" data-is-focusable={false} disabled={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-156" data-icon-name="Down" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-163 ms-Button-icon icon-121" data-icon-name="Copy" style={ { "fontFamily": ""FabricMDL2Icons-2"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-121" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar array-item-add root-110" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-113" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-114" id="id__143" > Add Item </span> </span> </span> </button> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__146" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Dropdown-container" > <label className="ms-Label ms-Dropdown-label root-183" id="root-label" > Test field </label> <div aria-describedby="root__error root__description root__help" aria-disabled={false} aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root-label root-option" aria-required={false} className="ms-Dropdown dropdown-136" data-is-focusable={true} data-ktp-target={true} id="root" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} role="combobox" tabIndex={0} > <span aria-invalid={false} className="ms-Dropdown-title ms-Dropdown-titleIsPlaceHolder title-137" id="root-option" /> <span className="ms-Dropdown-caretDownWrapper caretDownWrapper-138" > <i aria-hidden={true} className="ms-Dropdown-caretDown caretDown-154" data-icon-name="ChevronDown" >  </i> </span> </div> </div> <span className="css-181" > <span className="css-181" id="root__description" > a test description </span> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__106" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <label className="ms-Label root-180" id="root__title" > Test field </label> <span className="css-181" id="root__description" > a test description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-182" htmlFor="root_0" id="TextFieldLabel95" > Test item </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-invalid={false} aria-labelledby="TextFieldLabel95" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> <span className="css-181" > <span className="css-181" id="root_0__description" > a test item description </span> </span> </div> </div> </div> </div> </div> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-182" htmlFor="root_1" id="TextFieldLabel100" > Test item </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-invalid={false} aria-labelledby="TextFieldLabel100" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> <span className="css-181" > <span className="css-181" id="root_1__description" > a test item description </span> </span> </div> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__103" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description from both array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <label className="ms-Label root-180" id="root__title" > My Field </label> <span className="css-181" id="root__description" > a fancier description </span> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar array-item-add root-110" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-113" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-114" id="id__211" > Add Item </span> </span> </span> </button> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__214" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description from both array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <label className="ms-Label root-180" id="root__title" > My Field </label> <span className="css-181" id="root__description" > a fancier description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-182" htmlFor="root_0" id="TextFieldLabel235" > My Item </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-invalid={false} aria-labelledby="TextFieldLabel235" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> </div> <span className="css-181" > <span className="css-181" id="root_0__description" > a fancier item description </span> </span> </div> </div> </div> <div className="ms-Grid-col ms-sm6 ms-md4 ms-lg3" style={ { "textAlign": "right", } } > <button aria-disabled={true} className="ms-Button ms-Button--icon is-disabled root-155" data-is-focusable={false} disabled={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-156" data-icon-name="Up" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-121" data-icon-name="Down" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-163 ms-Button-icon icon-121" data-icon-name="Copy" style={ { "fontFamily": ""FabricMDL2Icons-2"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-121" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-182" htmlFor="root_1" id="TextFieldLabel252" > My Item </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-invalid={false} aria-labelledby="TextFieldLabel252" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> </div> <span className="css-181" > <span className="css-181" id="root_1__description" > a fancier item description </span> </span> </div> </div> </div> <div className="ms-Grid-col ms-sm6 ms-md4 ms-lg3" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-121" data-icon-name="Up" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button aria-disabled={true} className="ms-Button ms-Button--icon is-disabled root-155" data-is-focusable={false} disabled={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-156" data-icon-name="Down" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-163 ms-Button-icon icon-121" data-icon-name="Copy" style={ { "fontFamily": ""FabricMDL2Icons-2"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-121" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar array-item-add root-110" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-113" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-114" id="id__267" > Add Item </span> </span> </span> </button> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__270" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description from both checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Dropdown-container" > <label className="ms-Label ms-Dropdown-label root-183" id="root-label" > My Field </label> <div aria-describedby="root__error root__description root__help" aria-disabled={false} aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root-label root-option" aria-required={false} className="ms-Dropdown dropdown-136" data-is-focusable={true} data-ktp-target={true} id="root" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} role="combobox" tabIndex={0} > <span aria-invalid={false} className="ms-Dropdown-title ms-Dropdown-titleIsPlaceHolder title-137" id="root-option" /> <span className="ms-Dropdown-caretDownWrapper caretDownWrapper-138" > <i aria-hidden={true} className="ms-Dropdown-caretDown caretDown-154" data-icon-name="ChevronDown" >  </i> </span> </div> </div> <span className="css-181" > <span className="css-181" id="root__description" > a fancier description </span> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__230" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description from both fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <label className="ms-Label root-180" id="root__title" > My Field </label> <span className="css-181" id="root__description" > a fancier description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-182" htmlFor="root_0" id="TextFieldLabel219" > My Item </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-invalid={false} aria-labelledby="TextFieldLabel219" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> <span className="css-181" > <span className="css-181" id="root_0__description" > a fancier item description </span> </span> </div> </div> </div> </div> </div> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-182" htmlFor="root_1" id="TextFieldLabel224" > My Item </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-invalid={false} aria-labelledby="TextFieldLabel224" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> <span className="css-181" > <span className="css-181" id="root_1__description" > a fancier item description </span> </span> </div> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__227" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description from uiSchema array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <label className="ms-Label root-180" id="root__title" > My Field </label> <span className="css-181" id="root__description" > a fancier description </span> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar array-item-add root-110" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-113" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-114" id="id__149" > Add Item </span> </span> </span> </button> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__152" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description from uiSchema array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <label className="ms-Label root-180" id="root__title" > My Field </label> <span className="css-181" id="root__description" > a fancier description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-182" htmlFor="root_0" id="TextFieldLabel173" > My Item </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-invalid={false} aria-labelledby="TextFieldLabel173" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> </div> <span className="css-181" > <span className="css-181" id="root_0__description" > a fancier item description </span> </span> </div> </div> </div> <div className="ms-Grid-col ms-sm6 ms-md4 ms-lg3" style={ { "textAlign": "right", } } > <button aria-disabled={true} className="ms-Button ms-Button--icon is-disabled root-155" data-is-focusable={false} disabled={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-156" data-icon-name="Up" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-121" data-icon-name="Down" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-163 ms-Button-icon icon-121" data-icon-name="Copy" style={ { "fontFamily": ""FabricMDL2Icons-2"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-121" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-182" htmlFor="root_1" id="TextFieldLabel190" > My Item </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-invalid={false} aria-labelledby="TextFieldLabel190" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> </div> <span className="css-181" > <span className="css-181" id="root_1__description" > a fancier item description </span> </span> </div> </div> </div> <div className="ms-Grid-col ms-sm6 ms-md4 ms-lg3" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-121" data-icon-name="Up" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button aria-disabled={true} className="ms-Button ms-Button--icon is-disabled root-155" data-is-focusable={false} disabled={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-156" data-icon-name="Down" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-163 ms-Button-icon icon-121" data-icon-name="Copy" style={ { "fontFamily": ""FabricMDL2Icons-2"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-121" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar array-item-add root-110" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-113" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-114" id="id__205" > Add Item </span> </span> </span> </button> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__208" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description from uiSchema checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Dropdown-container" > <label className="ms-Label ms-Dropdown-label root-183" id="root-label" > My Field </label> <div aria-describedby="root__error root__description root__help" aria-disabled={false} aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root-label root-option" aria-required={false} className="ms-Dropdown dropdown-136" data-is-focusable={true} data-ktp-target={true} id="root" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} role="combobox" tabIndex={0} > <span aria-invalid={false} className="ms-Dropdown-title ms-Dropdown-titleIsPlaceHolder title-137" id="root-option" /> <span className="ms-Dropdown-caretDownWrapper caretDownWrapper-138" > <i aria-hidden={true} className="ms-Dropdown-caretDown caretDown-154" data-icon-name="ChevronDown" >  </i> </span> </div> </div> <span className="css-181" > <span className="css-181" id="root__description" > a fancier description </span> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__168" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description from uiSchema fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <label className="ms-Label root-180" id="root__title" > My Field </label> <span className="css-181" id="root__description" > a fancier description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-182" htmlFor="root_0" id="TextFieldLabel157" > My Item </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-invalid={false} aria-labelledby="TextFieldLabel157" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> <span className="css-181" > <span className="css-181" id="root_0__description" > a fancier item description </span> </span> </div> </div> </div> </div> </div> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-182" htmlFor="root_1" id="TextFieldLabel162" > My Item </label> <div className="ms-TextField-fieldGroup fieldGroup-179" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-invalid={false} aria-labelledby="TextFieldLabel162" autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> <span className="css-181" > <span className="css-181" id="root_1__description" > a fancier item description </span> </span> </div> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__165" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description with global label off array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar array-item-add root-110" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-113" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-114" id="id__273" > Add Item </span> </span> </span> </button> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__276" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description with global label off array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-126" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="a" /> </div> </div> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm6 ms-md4 ms-lg3" style={ { "textAlign": "right", } } > <button aria-disabled={true} className="ms-Button ms-Button--icon is-disabled root-155" data-is-focusable={false} disabled={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-156" data-icon-name="Up" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-121" data-icon-name="Down" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-163 ms-Button-icon icon-121" data-icon-name="Copy" style={ { "fontFamily": ""FabricMDL2Icons-2"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-121" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-126" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="b" /> </div> </div> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm6 ms-md4 ms-lg3" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-121" data-icon-name="Up" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button aria-disabled={true} className="ms-Button ms-Button--icon is-disabled root-155" data-is-focusable={false} disabled={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-160 ms-Button-icon icon-156" data-icon-name="Down" style={ { "fontFamily": ""FabricMDL2Icons-0"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-163 ms-Button-icon icon-121" data-icon-name="Copy" style={ { "fontFamily": ""FabricMDL2Icons-2"", } } >  </i> </span> </button> <button className="ms-Button ms-Button--icon root-161" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-121" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar array-item-add root-110" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-119 ms-Button-icon icon-113" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-114" id="id__329" > Add Item </span> </span> </span> </button> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__332" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description with global label off checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Dropdown-container" > <label className="ms-Label ms-Dropdown-label root-183" id="root-label" > Test field </label> <div aria-describedby="root__error root__description root__help" aria-disabled={false} aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root-label root-option" aria-required={false} className="ms-Dropdown dropdown-136" data-is-focusable={true} data-ktp-target={true} id="root" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} role="combobox" tabIndex={0} > <span aria-invalid={false} className="ms-Dropdown-title ms-Dropdown-titleIsPlaceHolder title-137" id="root-option" /> <span className="ms-Dropdown-caretDownWrapper caretDownWrapper-138" > <i aria-hidden={true} className="ms-Dropdown-caretDown caretDown-154" data-icon-name="ChevronDown" >  </i> </span> </div> </div> <span className="css-181" > <span className="css-181" id="root__description" > a test description </span> </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__292" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`with title and description with global label off fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-126" > <input aria-describedby="root_0__error root_0__description root_0__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_0" name="root_0" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm6 ms-md8 ms-lg9" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <div className="ms-TextField is-required root-125" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-126" > <input aria-describedby="root_1__error root_1__description root_1__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-127" disabled={false} id="root_1" name="root_1" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={true} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-120" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-111" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-112" > <span className="ms-Button-label label-122" id="id__289" > Submit </span> </span> </span> </button> </div> </div> </form> `; ���������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/test/__snapshots__/Form.test.tsx.snap���������������0000664�0000000�0000000�00000276273�14467713645�0030675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`single fields checkbox field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-boolean" style={ { "marginBottom": 15, } } > <div className="ms-Checkbox is-enabled root-201" > <input aria-disabled={false} autoFocus={false} checked={false} className="input-202" data-ktp-execute-target={true} disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="checkbox" /> <label className="ms-Checkbox-label label-203" htmlFor="root" > <div className="ms-Checkbox-checkbox checkbox-204" data-ktp-target={true} > <i aria-hidden={true} className="ms-Checkbox-checkmark checkmark-207" data-icon-name="CheckMark" >  </i> </div> </label> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__169" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields checkbox field with label 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-boolean" style={ { "marginBottom": 15, } } > <div className="ms-Checkbox is-enabled root-201" > <input aria-disabled={false} autoFocus={false} checked={false} className="input-202" data-ktp-execute-target={true} disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="checkbox" /> <label className="ms-Checkbox-label label-203" htmlFor="root" > <div className="ms-Checkbox-checkbox checkbox-204" data-ktp-target={true} > <i aria-hidden={true} className="ms-Checkbox-checkmark checkmark-207" data-icon-name="CheckMark" >  </i> </div> <span className="ms-Checkbox-text text-206" > test </span> </label> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__172" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields checkboxes field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <label className="ms-Label root-130" > An enum list rendered as checkboxes </label> <div className="ms-Checkbox is-enabled root-201" > <input aria-disabled={false} autoFocus={false} checked={false} className="input-202" data-ktp-execute-target={true} disabled={false} id="root-0" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="checkbox" /> <label className="ms-Checkbox-label label-203" htmlFor="root-0" > <div className="ms-Checkbox-checkbox checkbox-204" data-ktp-target={true} > <i aria-hidden={true} className="ms-Checkbox-checkmark checkmark-207" data-icon-name="CheckMark" >  </i> </div> <span className="ms-Checkbox-text text-206" > foo </span> </label> </div> <div className="ms-Checkbox is-enabled root-201" > <input aria-disabled={false} autoFocus={false} checked={false} className="input-202" data-ktp-execute-target={true} disabled={false} id="root-1" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="checkbox" /> <label className="ms-Checkbox-label label-203" htmlFor="root-1" > <div className="ms-Checkbox-checkbox checkbox-204" data-ktp-target={true} > <i aria-hidden={true} className="ms-Checkbox-checkmark checkmark-207" data-icon-name="CheckMark" >  </i> </div> <span className="ms-Checkbox-text text-206" > bar </span> </label> </div> <div className="ms-Checkbox is-enabled root-201" > <input aria-disabled={false} autoFocus={false} checked={false} className="input-202" data-ktp-execute-target={true} disabled={false} id="root-2" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="checkbox" /> <label className="ms-Checkbox-label label-203" htmlFor="root-2" > <div className="ms-Checkbox-checkbox checkbox-204" data-ktp-target={true} > <i aria-hidden={true} className="ms-Checkbox-checkmark checkmark-207" data-icon-name="CheckMark" >  </i> </div> <span className="ms-Checkbox-text text-206" > fuzz </span> </label> </div> <div className="ms-Checkbox is-enabled root-201" > <input aria-disabled={false} autoFocus={false} checked={false} className="input-202" data-ktp-execute-target={true} disabled={false} id="root-3" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="checkbox" /> <label className="ms-Checkbox-label label-203" htmlFor="root-3" > <div className="ms-Checkbox-checkbox checkbox-204" data-ktp-target={true} > <i aria-hidden={true} className="ms-Checkbox-checkmark checkmark-207" data-icon-name="CheckMark" >  </i> </div> <span className="ms-Checkbox-text text-206" > qux </span> </label> </div> <span style={ { "color": "rgb(164, 38, 44)", "fontFamily": ""Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif", "fontSize": 12, "fontWeight": "normal", } } > </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__175" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields field with description 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-130" htmlFor="root_my-field" id="TextFieldLabel191" > my-field </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_my-field__error root_my-field__description root_my-field__help" aria-invalid={false} aria-labelledby="TextFieldLabel191" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_my-field" name="root_my-field" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> <span className="css-229" > <span className="css-229" id="root_my-field__description" > some description </span> </span> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__194" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields field with description in uiSchema 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-130" htmlFor="root_my-field" id="TextFieldLabel199" > my-field </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_my-field__error root_my-field__description root_my-field__help" aria-invalid={false} aria-labelledby="TextFieldLabel199" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_my-field" name="root_my-field" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> <span className="css-229" > <span className="css-229" id="root_my-field__description" > some other description </span> </span> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__202" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields format color 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <label className="ms-Label root-130" htmlFor="root" /> <div aria-label="Color picker, Red 255 Green 255 Blue 255 Alpha 100% selected." className="ms-ColorPicker root-131" role="group" > <div className="ms-ColorPicker-panel panel-132" > <div aria-describedby="ColorRectangle-description62" aria-label="Saturation and brightness" aria-valuemax={100} aria-valuemin={0} aria-valuenow={0} aria-valuetext="Saturation 0 brightness 100" className="ms-ColorPicker-colorRect root-141" data-is-focusable={true} onKeyDown={[Function]} onMouseDown={[Function]} role="slider" style={ { "backgroundColor": "#ff0000", } } tabIndex={0} > <div className="description-145" id="ColorRectangle-description62" > Use left and right arrow keys to set saturation. Use up and down arrow keys to set brightness. </div> <div className="ms-ColorPicker-light light-142" /> <div className="ms-ColorPicker-dark dark-143" /> <div className="ms-ColorPicker-thumb thumb-144" style={ { "backgroundColor": "#ffffff", "left": "0%", "top": "0%", } } /> </div> <div className="flexContainer-137" > <div className="flexSlider-138" > <div aria-label="Hue" aria-valuemax={359} aria-valuemin={0} aria-valuenow={0} aria-valuetext="0" className="ms-ColorPicker-slider is-hue root-146" data-is-focusable={true} onKeyDown={[Function]} onMouseDown={[Function]} role="slider" tabIndex={0} > <div className="ms-ColorPicker-thumb is-slider sliderThumb-148" style={ { "left": "0%", } } /> </div> <div aria-label="Alpha" aria-valuemax={100} aria-valuemin={0} aria-valuenow={100} aria-valuetext="100" className="ms-ColorPicker-slider is-alpha root-149" data-is-focusable={true} onKeyDown={[Function]} onMouseDown={[Function]} role="slider" tabIndex={0} > <div className="ms-ColorPicker-sliderOverlay sliderOverlay-147" style={ { "background": "linear-gradient(to right, transparent, #ffffff)", } } /> <div className="ms-ColorPicker-thumb is-slider sliderThumb-148" style={ { "left": "100%", } } /> </div> </div> <div className="flexPreviewBox-139" > <div className="ms-ColorPicker-colorSquare colorSquare-136 is-preview" style={ { "backgroundColor": "#ffffff", } } /> </div> </div> <table cellPadding="0" cellSpacing="0" className="ms-ColorPicker-table table-133" role="group" > <thead> <tr className="tableHeader-134" > <td className="tableHexCell-135" > Hex </td> <td> Red </td> <td> Green </td> <td> Blue </td> <td className="" > Alpha </td> </tr> </thead> <tbody> <tr> <td> <div className="ms-TooltipHost root-150" onBlurCapture={[Function]} onFocusCapture={[Function]} onKeyDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} role="none" > <div className="ms-TextField ms-ColorPicker-input input-151" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-label="Hex" autoComplete="off" className="ms-TextField-field field-113" id="TextField64" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} spellCheck={false} type="text" value="ffffff" /> </div> </div> </div> <div hidden={true} id="tooltip63" style={ { "border": 0, "height": 1, "margin": -1, "overflow": "hidden", "padding": 0, "position": "absolute", "whiteSpace": "nowrap", "width": 1, } } /> </div> </td> <td> <div className="ms-TooltipHost root-150" onBlurCapture={[Function]} onFocusCapture={[Function]} onKeyDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} role="none" > <div className="ms-TextField ms-ColorPicker-input input-151" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-label="Red" autoComplete="off" className="ms-TextField-field field-113" id="TextField70" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} spellCheck={false} type="text" value="255" /> </div> </div> </div> <div hidden={true} id="tooltip69" style={ { "border": 0, "height": 1, "margin": -1, "overflow": "hidden", "padding": 0, "position": "absolute", "whiteSpace": "nowrap", "width": 1, } } /> </div> </td> <td> <div className="ms-TooltipHost root-150" onBlurCapture={[Function]} onFocusCapture={[Function]} onKeyDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} role="none" > <div className="ms-TextField ms-ColorPicker-input input-151" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-label="Green" autoComplete="off" className="ms-TextField-field field-113" id="TextField76" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} spellCheck={false} type="text" value="255" /> </div> </div> </div> <div hidden={true} id="tooltip75" style={ { "border": 0, "height": 1, "margin": -1, "overflow": "hidden", "padding": 0, "position": "absolute", "whiteSpace": "nowrap", "width": 1, } } /> </div> </td> <td> <div className="ms-TooltipHost root-150" onBlurCapture={[Function]} onFocusCapture={[Function]} onKeyDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} role="none" > <div className="ms-TextField ms-ColorPicker-input input-151" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-label="Blue" autoComplete="off" className="ms-TextField-field field-113" id="TextField82" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} spellCheck={false} type="text" value="255" /> </div> </div> </div> <div hidden={true} id="tooltip81" style={ { "border": 0, "height": 1, "margin": -1, "overflow": "hidden", "padding": 0, "position": "absolute", "whiteSpace": "nowrap", "width": 1, } } /> </div> </td> <td> <div className="ms-TooltipHost root-150" onBlurCapture={[Function]} onFocusCapture={[Function]} onKeyDown={[Function]} onMouseEnter={[Function]} onMouseLeave={[Function]} role="none" > <div className="ms-TextField ms-ColorPicker-input input-151" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-label="Alpha" autoComplete="off" className="ms-TextField-field field-113" id="TextField88" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} spellCheck={false} type="text" value="100" /> </div> </div> </div> <div hidden={true} id="tooltip87" style={ { "border": 0, "height": 1, "margin": -1, "overflow": "hidden", "padding": 0, "position": "absolute", "whiteSpace": "nowrap", "width": 1, } } /> </div> </td> </tr> </tbody> </table> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__93" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields format date 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div aria-describedby="root__error root__description root__help" className="ms-DatePicker control-152" id="root" onBlur={[Function]} onFocus={[Function]} > <div> <div className="ms-TextField textField-158" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <div aria-describedby="TextFieldDescription98" aria-expanded={false} aria-haspopup="dialog" aria-invalid={false} aria-label="Select a date" className="ms-TextField-field field-159 readOnlyTextField-156" data-is-focusable={true} id="root-label" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onInput={[Function]} onKeyDown={[Function]} role="combobox" tabIndex={0} > <span className="readOnlyPlaceholder-157" > </span> </div> <i aria-hidden={true} className="ms-DatePicker-event--without-label msDatePickerDisabled icon-163" data-icon-name="Calendar" onClick={[Function]} >  </i> </div> </div> <span id="TextFieldDescription98" > <div aria-live="assertive" className="statusMessage-155" /> </span> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__102" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields format datetime 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} type="datetime-local" value="" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__110" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields format time 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} type="time" value="" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__118" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields help and error display 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-MessageBar ms-MessageBar--error ms-MessageBar-singleline root-231" > <div className="ms-MessageBar-content content-232" > <div aria-hidden={true} className="ms-MessageBar-icon iconContainer-233" > <i aria-hidden={true} className="icon-241" data-icon-name="ErrorBadge" >  </i> </div> <div aria-live="assertive" className="ms-MessageBar-text text-235" id="MessageBar237" role="alert" > <span className="ms-MessageBar-innerText innerText-236" /> </div> </div> </div> <div className="ms-Grid-col ms-sm12 field field-string field-error has-error has-danger" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-242" > <input aria-describedby="TextFieldDescription239" aria-invalid={true} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} type="text" value="" /> </div> </div> <span id="TextFieldDescription239" > <div role="alert" /> </span> </div> <div className="ms-List" id="root__error" role="list" > <div className="ms-List-surface" role="presentation" > <div className="ms-List-page" role="presentation" style={{}} > <div className="ms-List-cell" data-automationid="ListCell" data-list-index={0} role="listitem" > </div> </div> </div> </div> <span className="css-229" id="root__help" > help me! </span> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__243" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields hidden field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div style={ { "display": "none", } } > <input id="root_my-field" name="root_my-field" type="hidden" value="" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__186" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields hidden label 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} type="text" value="" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__218" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields null field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-null" style={ { "marginBottom": 15, } } > </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__56" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields number field 0 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} step="any" type="number" value="0" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__53" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields number field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} step="any" type="number" value="" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__45" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields password field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} type="password" value="" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__126" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields radio field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-boolean" style={ { "marginBottom": 15, } } > <div className="ms-ChoiceFieldGroup root-208" id="root" name="root" onBlur={[Function]} onFocus={[Function]} > <div onFocus={[Function]} role="radiogroup" > <div className="ms-ChoiceFieldGroup-flexContainer" > <div className="ms-ChoiceField root-209" > <div className="ms-ChoiceField-wrapper" > <input aria-describedby="root__error root__description root__help" checked={false} className="ms-ChoiceField-input input-210" disabled={false} id="ChoiceGroup178-0" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="radio" /> <label className="ms-ChoiceField-field field-211" htmlFor="ChoiceGroup178-0" > <span className="ms-ChoiceFieldLabel" id="ChoiceGroupLabel179-0" > Yes </span> </label> </div> </div> <div className="ms-ChoiceField root-209" > <div className="ms-ChoiceField-wrapper" > <input aria-describedby="root__error root__description root__help" checked={false} className="ms-ChoiceField-input input-210" disabled={false} id="ChoiceGroup178-1" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} type="radio" /> <label className="ms-ChoiceField-field field-211" htmlFor="ChoiceGroup178-1" > <span className="ms-ChoiceFieldLabel" id="ChoiceGroupLabel179-1" > No </span> </label> </div> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__180" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields schema examples 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help root__examples" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" list="root__examples" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} type="text" value="" /> </div> </div> </div> <datalist id="root__examples" > <option value="Firefox" /> <option value="Chrome" /> <option value="Opera" /> <option value="Vivaldi" /> <option value="Safari" /> </datalist> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__234" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields select field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-Dropdown-container" > <div aria-describedby="root__error root__description root__help" aria-disabled={false} aria-expanded="false" aria-haspopup="listbox" className="ms-Dropdown dropdown-181" data-is-focusable={true} data-ktp-target={true} id="root" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} role="combobox" tabIndex={0} > <span aria-invalid={false} className="ms-Dropdown-title ms-Dropdown-titleIsPlaceHolder title-182" id="root-option" /> <span className="ms-Dropdown-caretDownWrapper caretDownWrapper-183" > <i aria-hidden={true} className="ms-Dropdown-caretDown caretDown-199" data-icon-name="ChevronDown" >  </i> </span> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__148" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields select field multiple choice 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Dropdown-container" > <div aria-describedby="root__error root__description root__help" aria-disabled={false} aria-expanded="false" aria-haspopup="listbox" aria-required={false} className="ms-Dropdown dropdown-181" data-is-focusable={true} data-ktp-target={true} id="root" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} role="combobox" tabIndex={0} > <span aria-invalid={false} className="ms-Dropdown-title ms-Dropdown-titleIsPlaceHolder title-182" id="root-option" /> <span className="ms-Dropdown-caretDownWrapper caretDownWrapper-183" > <i aria-hidden={true} className="ms-Dropdown-caretDown caretDown-199" data-icon-name="ChevronDown" >  </i> </span> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__151" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields select field multiple choice enumDisabled 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Dropdown-container" > <div aria-describedby="root__error root__description root__help" aria-disabled={false} aria-expanded="false" aria-haspopup="listbox" aria-required={false} className="ms-Dropdown dropdown-181" data-is-focusable={true} data-ktp-target={true} id="root" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} role="combobox" tabIndex={0} > <span aria-invalid={false} className="ms-Dropdown-title ms-Dropdown-titleIsPlaceHolder title-182" id="root-option" /> <span className="ms-Dropdown-caretDownWrapper caretDownWrapper-183" > <i aria-hidden={true} className="ms-Dropdown-caretDown caretDown-199" data-icon-name="ChevronDown" >  </i> </span> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__160" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields select field multiple choice formData 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Dropdown-container" > <div aria-describedby="root__error root__description root__help" aria-disabled={false} aria-expanded="false" aria-haspopup="listbox" aria-required={false} className="ms-Dropdown dropdown-181" data-is-focusable={true} data-ktp-target={true} id="root" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} role="combobox" tabIndex={0} > <span aria-invalid={false} className="ms-Dropdown-title ms-Dropdown-titleIsPlaceHolder title-182" id="root-option" /> <span className="ms-Dropdown-caretDownWrapper caretDownWrapper-183" > <i aria-hidden={true} className="ms-Dropdown-caretDown caretDown-199" data-icon-name="ChevronDown" >  </i> </span> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__166" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields select field multiple choice with labels 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-array" style={ { "marginBottom": 15, } } > <div className="ms-Dropdown-container" > <div aria-describedby="root__error root__description root__help" aria-disabled={false} aria-expanded="false" aria-haspopup="listbox" aria-required={false} className="ms-Dropdown dropdown-181" data-is-focusable={true} data-ktp-target={true} id="root" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} role="combobox" tabIndex={0} > <span aria-invalid={false} className="ms-Dropdown-title ms-Dropdown-titleIsPlaceHolder title-182" id="root-option" /> <span className="ms-Dropdown-caretDownWrapper caretDownWrapper-183" > <i aria-hidden={true} className="ms-Dropdown-caretDown caretDown-199" data-icon-name="ChevronDown" >  </i> </span> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__154" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields select field single choice enumDisabled 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-Dropdown-container" > <div aria-describedby="root__error root__description root__help" aria-disabled={false} aria-expanded="false" aria-haspopup="listbox" className="ms-Dropdown dropdown-181" data-is-focusable={true} data-ktp-target={true} id="root" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} role="combobox" tabIndex={0} > <span aria-invalid={false} className="ms-Dropdown-title ms-Dropdown-titleIsPlaceHolder title-182" id="root-option" /> <span className="ms-Dropdown-caretDownWrapper caretDownWrapper-183" > <i aria-hidden={true} className="ms-Dropdown-caretDown caretDown-199" data-icon-name="ChevronDown" >  </i> </span> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__157" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields select field single choice formData 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-Dropdown-container" > <div aria-describedby="root__error root__description root__help" aria-disabled={false} aria-expanded="false" aria-haspopup="listbox" className="ms-Dropdown dropdown-181" data-is-focusable={true} data-ktp-target={true} id="root" onBlur={[Function]} onChange={[Function]} onClick={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} role="combobox" tabIndex={0} > <span aria-invalid={false} className="ms-Dropdown-title title-200" id="root-option" > bar </span> <span className="ms-Dropdown-caretDownWrapper caretDownWrapper-183" > <i aria-hidden={true} className="ms-Dropdown-caretDown caretDown-199" data-icon-name="ChevronDown" >  </i> </span> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__163" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields slider field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-integer" style={ { "marginBottom": 15, } } > <label className="ms-Label root-130" htmlFor="root" /> <div className="ms-Slider ms-Slider-enabled ms-Slider-row root-216" > <label className="ms-Label titleLabel-227" htmlFor="root" /> <div className="ms-Slider-container container-218" > <div aria-disabled={false} aria-valuemax={100} aria-valuemin={42} aria-valuenow={42} aria-valuetext="42" className="ms-Slider-slideBox ms-Slider-showValue slideBox-219" data-is-focusable={true} id="root" onKeyDown={[Function]} onMouseDown={[Function]} onTouchStart={[Function]} role="slider" tabIndex={0} > <div className="ms-Slider-line line-221" > <span className="ms-Slider-thumb thumb-220" style={ { "left": "0%", } } /> <span className="lineContainer-222 ms-Slider-inactive inactiveSection-224" style={ { "width": "0%", } } /> <span className="lineContainer-222 ms-Slider-active activeSection-223" style={ { "width": "0%", } } /> <span className="lineContainer-222 ms-Slider-inactive inactiveSection-224" style={ { "width": "100%", } } /> </div> </div> <label className="ms-Label ms-Slider-value valueLabel-228" > 42 </label> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__183" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields string field format data-url 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div> <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} type="file" value="" /> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__29" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields string field format email 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} type="email" value="" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__13" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields string field format uri 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} type="url" value="" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__21" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields string field regular 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} type="text" value="" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__5" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields string field with placeholder 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="placeholder" readOnly={false} type="text" value="" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__37" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields textarea field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField ms-TextField--multiline root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-178" > <textarea aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-179" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} type="text" value="" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__145" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields title field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <label className="ms-Label root-230" id="root__title" > Titre 1 </label> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-130" htmlFor="root_title" id="TextFieldLabel207" > Titre 2 </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_title__error root_title__description root_title__help" aria-invalid={false} aria-labelledby="TextFieldLabel207" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_title" name="root_title" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__210" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields unsupported field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-undefined" style={ { "marginBottom": 15, } } > <div className="unsupported-field" > <p> <span> Unsupported field schema for field <code> root </code> : <em> Unknown field type undefined </em> . </span> </p> <pre> {} </pre> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__59" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields up/down field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <label className="ms-Label root-130" htmlFor="root" /> <div className="root-164" > <div aria-describedby="root__error root__description root__help" className="spinButtonWrapper-168" data-ktp-target={true} id="root" > <input aria-disabled={false} aria-labelledby="" aria-valuemax={Infinity} aria-valuemin={-Infinity} aria-valuetext="" autoComplete="off" className="ms-spinButton-input input-169" data-ktp-execute-target={true} data-lpignore={true} disabled={false} id="input129" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} role="spinbutton" type="text" value="" /> <span className="arrowButtonsContainer-170" > <button aria-label="Increase value by 1" className="ms-Button ms-Button--icon ms-UpButton root-171" data-is-focusable={false} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} tabIndex={-1} type="button" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-175 ms-Button-icon icon-172" data-icon-name="ChevronUpSmall" style={ { "fontFamily": ""FabricMDL2Icons-2"", } } >  </i> </span> </button> <button aria-label="Decrease value by 1" className="ms-Button ms-Button--icon ms-DownButton root-171" data-is-focusable={false} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} tabIndex={-1} type="button" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-177 ms-Button-icon icon-172" data-icon-name="ChevronDownSmall" style={ { "fontFamily": ""FabricMDL2Icons-3"", } } >  </i> </span> </button> </span> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__137" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`single fields using custom tagName 1`] = ` <div className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root__error root__description root__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root" name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} type="text" value="" /> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-122" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-123" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-124" > <span className="ms-Button-label label-126" id="id__226" > Submit </span> </span> </span> </button> </div> </div> </div> `; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/test/__snapshots__/Object.test.tsx.snap�������������0000664�0000000�0000000�00000252304�14467713645�0031165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`object fields additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" dir="ltr" style={ { "marginBottom": 15, } } > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_foo-key" id="TextFieldLabel15" > foo Key </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-labelledby="TextFieldLabel15" className="ms-TextField-field field-113" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_foo" id="TextFieldLabel20" > foo </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_foo__error root_foo__description root_foo__help" aria-invalid={false} aria-labelledby="TextFieldLabel20" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg2" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-131" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-126" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar object-property-expand root-135" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-136" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-137" id="id__26" > Add Item </span> </span> </span> </button> </span> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__29" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_a" id="TextFieldLabel2" > A </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_a__error root_a__description root_a__help" aria-invalid={false} aria-labelledby="TextFieldLabel2" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_b" id="TextFieldLabel7" > B </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_b__error root_b__description root_b__help" aria-invalid={false} aria-labelledby="TextFieldLabel7" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__10" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" dir="ltr" style={ { "marginBottom": 15, } } > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_additionalProperty-key" id="TextFieldLabel34" > additionalProperty Key </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-labelledby="TextFieldLabel34" className="ms-TextField-field field-113" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} required={false} type="text" value="additionalProperty" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_additionalProperty" id="TextFieldLabel39" > additionalProperty </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" aria-invalid={false} aria-labelledby="TextFieldLabel39" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg2" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-131" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-126" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar object-property-expand root-135" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-136" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-137" id="id__45" > Add Item </span> </span> </span> </button> </span> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__48" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields with title and description additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <label className="ms-Label root-139" id="root__title" > Test field </label> <span className="css-140" id="root__description" > a test description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" dir="ltr" style={ { "marginBottom": 15, } } > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_foo-key" id="TextFieldLabel66" > foo Key </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-labelledby="TextFieldLabel66" className="ms-TextField-field field-113" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_foo" id="TextFieldLabel71" > foo </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_foo__error root_foo__description root_foo__help" aria-invalid={false} aria-labelledby="TextFieldLabel71" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg2" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-131" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-126" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar object-property-expand root-135" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-136" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-137" id="id__77" > Add Item </span> </span> </span> </button> </span> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__80" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields with title and description from both additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <label className="ms-Label root-139" id="root__title" > My Field </label> <span className="css-140" id="root__description" > a fancier description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" dir="ltr" style={ { "marginBottom": 15, } } > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_foo-key" id="TextFieldLabel168" > foo Key </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-labelledby="TextFieldLabel168" className="ms-TextField-field field-113" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_foo" id="TextFieldLabel173" > foo </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_foo__error root_foo__description root_foo__help" aria-invalid={false} aria-labelledby="TextFieldLabel173" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg2" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-131" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-126" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar object-property-expand root-135" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-136" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-137" id="id__179" > Add Item </span> </span> </span> </button> </span> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__182" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields with title and description from both object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <label className="ms-Label root-139" id="root__title" > My Field </label> <span className="css-140" id="root__description" > a fancier description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_a" id="TextFieldLabel155" > My Item A </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_a__error root_a__description root_a__help" aria-invalid={false} aria-labelledby="TextFieldLabel155" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> <span className="css-140" > <span className="css-140" id="root_a__description" > a fancier item A description </span> </span> </div> <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_b" id="TextFieldLabel160" > My Item B </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_b__error root_b__description root_b__help" aria-invalid={false} aria-labelledby="TextFieldLabel160" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </div> </div> <span className="css-140" > <span className="css-140" id="root_b__description" > a fancier item B description </span> </span> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__163" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields with title and description from uiSchema additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <label className="ms-Label root-139" id="root__title" > My Field </label> <span className="css-140" id="root__description" > a fancier description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" dir="ltr" style={ { "marginBottom": 15, } } > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_foo-key" id="TextFieldLabel117" > foo Key </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-labelledby="TextFieldLabel117" className="ms-TextField-field field-113" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_foo" id="TextFieldLabel122" > foo </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_foo__error root_foo__description root_foo__help" aria-invalid={false} aria-labelledby="TextFieldLabel122" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg2" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-131" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-126" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar object-property-expand root-135" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-136" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-137" id="id__128" > Add Item </span> </span> </span> </button> </span> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__131" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields with title and description from uiSchema object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <label className="ms-Label root-139" id="root__title" > My Field </label> <span className="css-140" id="root__description" > a fancier description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_a" id="TextFieldLabel104" > My Item A </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_a__error root_a__description root_a__help" aria-invalid={false} aria-labelledby="TextFieldLabel104" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> <span className="css-140" > <span className="css-140" id="root_a__description" > a fancier item A description </span> </span> </div> <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_b" id="TextFieldLabel109" > My Item B </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_b__error root_b__description root_b__help" aria-invalid={false} aria-labelledby="TextFieldLabel109" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </div> </div> <span className="css-140" > <span className="css-140" id="root_b__description" > a fancier item B description </span> </span> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__112" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields with title and description from uiSchema show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <label className="ms-Label root-139" id="root__title" > My Field </label> <span className="css-140" id="root__description" > a fancier description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" dir="ltr" style={ { "marginBottom": 15, } } > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_additionalProperty-key" id="TextFieldLabel136" > additionalProperty Key </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-labelledby="TextFieldLabel136" className="ms-TextField-field field-113" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} required={false} type="text" value="additionalProperty" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_additionalProperty" id="TextFieldLabel141" > additionalProperty </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" aria-invalid={false} aria-labelledby="TextFieldLabel141" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg2" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-131" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-126" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar object-property-expand root-135" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-136" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-137" id="id__147" > Add Item </span> </span> </span> </button> </span> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__150" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields with title and description object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <label className="ms-Label root-139" id="root__title" > Test field </label> <span className="css-140" id="root__description" > a test description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_a" id="TextFieldLabel53" > A </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_a__error root_a__description root_a__help" aria-invalid={false} aria-labelledby="TextFieldLabel53" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> <span className="css-140" > <span className="css-140" id="root_a__description" > A description </span> </span> </div> <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_b" id="TextFieldLabel58" > B </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_b__error root_b__description root_b__help" aria-invalid={false} aria-labelledby="TextFieldLabel58" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </div> </div> <span className="css-140" > <span className="css-140" id="root_b__description" > B description </span> </span> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__61" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields with title and description show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <label className="ms-Label root-139" id="root__title" > Test field </label> <span className="css-140" id="root__description" > a test description </span> <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" dir="ltr" style={ { "marginBottom": 15, } } > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_additionalProperty-key" id="TextFieldLabel85" > additionalProperty Key </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-labelledby="TextFieldLabel85" className="ms-TextField-field field-113" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} required={false} type="text" value="additionalProperty" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_additionalProperty" id="TextFieldLabel90" > additionalProperty </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" aria-invalid={false} aria-labelledby="TextFieldLabel90" autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg2" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-131" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-126" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar object-property-expand root-135" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-136" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-137" id="id__96" > Add Item </span> </span> </span> </button> </span> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__99" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields with title and description with global label off additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" dir="ltr" style={ { "marginBottom": 15, } } > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_foo-key" id="TextFieldLabel200" > foo Key </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-labelledby="TextFieldLabel200" className="ms-TextField-field field-113" disabled={false} id="root_foo-key" name="root_foo-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_foo__error root_foo__description root_foo__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_foo" name="root_foo" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg2" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-131" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-126" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar object-property-expand root-135" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-136" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-137" id="id__211" > Add Item </span> </span> </span> </button> </span> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__214" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields with title and description with global label off object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_a__error root_a__description root_a__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_a" name="root_a" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm12 field field-number" style={ { "marginBottom": 15, } } > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_b__error root_b__description root_b__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_b" name="root_b" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__195" > Submit </span> </span> </span> </button> </div> </div> </form> `; exports[`object fields with title and description with global label off show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="ms-Grid-col ms-sm12 field field-object" style={ { "marginBottom": 15, } } > <div className="ms-Grid" dir="ltr" > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm12 field field-string" dir="ltr" style={ { "marginBottom": 15, } } > <div className="ms-Grid-row" > <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <label className="ms-Label root-122" htmlFor="root_additionalProperty-key" id="TextFieldLabel219" > additionalProperty Key </label> <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-invalid={false} aria-labelledby="TextFieldLabel219" className="ms-TextField-field field-113" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} required={false} type="text" value="additionalProperty" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg5" > <div className="ms-TextField root-111" > <div className="ms-TextField-wrapper" > <div className="ms-TextField-fieldGroup fieldGroup-112" > <input aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" aria-invalid={false} autoFocus={false} className="ms-TextField-field field-113" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} onInput={[Function]} placeholder="" readOnly={false} required={false} type="text" value="should appear" /> </div> </div> </div> </div> <div className="ms-Grid-col ms-sm4 ms-md4 ms-lg2" style={ { "textAlign": "right", } } > <button className="ms-Button ms-Button--icon root-131" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-126" data-icon-name="Delete" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> </span> </button> </div> </div> </div> </div> <span style={ { "float": "right", } } > <button className="ms-Button ms-Button--commandBar object-property-expand root-135" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} style={ { "height": "32px", } } type="button" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <i aria-hidden={true} className="ms-Icon root-105 css-134 ms-Button-icon icon-136" data-icon-name="Add" style={ { "fontFamily": ""FabricMDL2Icons"", } } >  </i> <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-137" id="id__230" > Add Item </span> </span> </span> </button> </span> </div> </div> <div> <br /> <div className="ms-Grid-col ms-sm12" > <button className="ms-Button ms-Button--primary root-123" data-is-focusable={true} onClick={[Function]} onKeyDown={[Function]} onKeyPress={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseUp={[Function]} type="submit" > <span className="ms-Button-flexContainer flexContainer-124" data-automationid="splitbuttonprimary" > <span className="ms-Button-textContainer textContainer-125" > <span className="ms-Button-label label-127" id="id__233" > Submit </span> </span> </span> </button> </div> </div> </form> `; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/fluent-ui/tsconfig.json���������������������������������������0000664�0000000�0000000�00000001044�14467713645�0024204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": "../../tsconfig.base.json", "include": ["src"], "compilerOptions": { "rootDir": "./src", "outDir": "./lib", "baseUrl": "./", "jsx": "react-jsx", // There are type errors in @fluentui type definitions because of which skipLibCheck had to be added // @fluentui/font-icons-mdl2/lib/IconNames.d.ts // @fluentui/merge-styles/lib/mergeStyleSets.d.ts // @fluentui/react/lib/components/SelectedItemsList/BaseSelectedItemsList.d.ts // @fluentui/utilities/lib/styled.d.ts "skipLibCheck": true } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/��������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021777�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/.eslintrc�����������������������������������������0000664�0000000�0000000�00000000164�14467713645�0023624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": ["../../.eslintrc-typescript"], "plugins": ["@typescript-eslint", "jsx-a11y", "react", "import"] } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/README.md�����������������������������������������0000664�0000000�0000000�00000010555�14467713645�0023264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[![Build Status][build-shield]][build-url] [![npm][npm-shield]][npm-url] [![npm downloads][npm-dl-shield]][npm-dl-url] [![Contributors][contributors-shield]][contributors-url] [![Apache 2.0 License][license-shield]][license-url] <!-- PROJECT LOGO --> <br /> <p align="center"> <a href="https://github.com/rjsf-team/react-jsonschema-form"> <img src="https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/59a8206e148474bea854bbb004f624143fbcbac8/packages/material-ui/logo.png" alt="Logo" width="120" height="120"> </a> <h3 align="center">@rjsf/material-ui</h3> <p align="center"> Material UI 4 theme, fields and widgets for <a href="https://github.com/rjsf-team/react-jsonschema-form/"><code>react-jsonschema-form</code></a>. <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/docs/"><strong>Explore the docs »</strong></a> <br /> <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/">View Playground</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Report Bug</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Request Feature</a> </p> </p> <!-- TABLE OF CONTENTS --> ## Table of Contents - [Table of Contents](#table-of-contents) - [About The Project](#about-the-project) - [Built With](#built-with) - [Getting Started](#getting-started) - [Prerequisites](#prerequisites) - [Installation](#installation) - [Usage](#usage) - [Roadmap](#roadmap) - [Contributing](#contributing) - [Contact](#contact) <!-- ABOUT THE PROJECT --> ## About The Project [![@rjsf/material-ui Screen Shot][product-screenshot]](https://rjsf-team.github.io/@rjsf/material-ui) Exports `material-ui` version 4 theme, fields and widgets for `react-jsonschema-form`. ### Built With - [react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form/) - [Material UI](https://material-ui.com/) - [TypeScript](https://www.typescriptlang.org/) <!-- GETTING STARTED --> ## Getting Started ### Prerequisites - `@material-ui/core >= 4.12.0` (in 4.12.0, the library developers made it forward compatible with Material-UI V5) - `@material-ui/icons >= 4.11.0` (in 4.11.0, the library developers made it forward compatible with Material-UI V5) - `@rjsf/core >= 5.0.0` - `@rjsf/utils >= 5.0.0` - `@rjsf/validator-ajv6 >= 5.0.0` ```bash yarn add @material-ui/core @material-ui/icons @rjsf/core @rjsf/utils @rjsf/validator-ajv6 ``` ### Installation ```bash yarn add @rjsf/material-ui ``` <!-- USAGE EXAMPLES --> ## Usage ```js import Form from '@rjsf/material-ui'; ``` or ```js import { withTheme } from '@rjsf/core'; import Theme from '@rjsf/material-ui'; // Make modifications to the theme with your own fields and widgets const Form = withTheme(Theme); ``` <!-- ROADMAP --> ## Roadmap See the [open issues](https://github.com/rjsf-team/react-jsonschema-form/issues) for a list of proposed features (and known issues). <!-- CONTRIBUTING --> ## Contributing Read our [contributors' guide](https://rjsf-team.github.io/react-jsonschema-form/docs/contributing/) to get started. <!-- CONTACT --> ## Contact rjsf team: [https://github.com/orgs/rjsf-team/people](https://github.com/orgs/rjsf-team/people) GitHub repository: [https://github.com/rjsf-team/react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form) <!-- MARKDOWN LINKS & IMAGES --> <!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --> [build-shield]: https://github.com/rjsf-team/react-jsonschema-form/workflows/CI/badge.svg [build-url]: https://github.com/rjsf-team/react-jsonschema-form/actions [contributors-shield]: https://img.shields.io/github/contributors/rjsf-team/react-jsonschema-form.svg [contributors-url]: https://github.com/rjsf-team/react-jsonschema-form/graphs/contributors [license-shield]: https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat-square [license-url]: https://choosealicense.com/licenses/apache-2.0/ [npm-shield]: https://img.shields.io/npm/v/@rjsf/material-ui/latest.svg?style=flat-square [npm-url]: https://www.npmjs.com/package/@rjsf/material-ui [npm-dl-shield]: https://img.shields.io/npm/dm/@rjsf/material-ui.svg?style=flat-square [npm-dl-url]: https://www.npmjs.com/package/@rjsf/material-ui [product-screenshot]: https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/e2e1181d1020f18cad0c80c661ddae28edb9794e/packages/material-ui/screenshot.png ���������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/babel.config.js�����������������������������������0000664�0000000�0000000�00000000126�14467713645�0024645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const defaultConfig = require('../../babel.config'); module.exports = defaultConfig; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/jest.config.js������������������������������������0000664�0000000�0000000�00000000025�14467713645�0024543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������module.exports = {}; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/logo.png������������������������������������������0000664�0000000�0000000�00000240341�14467713645�0023451�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��'��2���Kj���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<�� iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"> <tiff:ResolutionUnit>2</tiff:ResolutionUnit> <tiff:Compression>1</tiff:Compression> <tiff:Orientation>1</tiff:Orientation> <tiff:PhotometricInterpretation>2</tiff:PhotometricInterpretation> </rdf:Description> </rdf:RDF> </x:xmpmeta> E*��@�IDATxVƇ{٥tD,H,$k5XbhEc1Xbn]W&Heew}ww;޹s̜̙rC%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%P5$Pjd32JJJ티f:$/Us?qJ$�D d@nG#%&4<. l Ifw|2QQQUDIXE%Pp!L1qH|㝎NI$oJ2IñACEE^ |rޜǜE TVQG 8v\<qz@6Q (qȱ9~ޠpBzP*rQQY(QY혥( �m(@b0RO!f@l 8/ $rnC`82(:)J J {$IEIvI JA@a kp[DI @bp$ >9 p#HA*_(HQQ0X8�H� ҹvڍׯߨG-O<#G얗׶aÆnM9B).˖-^~=`!̟?^{mmݶ>K tbH|?+Os\P!a(((ʕ@lħG T)a!@ `GqDo )R|ƍ̜9s_??ϊUV0 R�6$@Ɵ?@I#FT DpR �.r=\Xǀ?}=Ѓ7nL\V^yY>Kf_z+SI@d#}H*_T~T\xJ�% 4;I*3zW=묳fX ^BJP>s/ $H*C�lZ;w?~! .|E^- oĉ{!>F|x71+ `M*J`/^fv⡧~1nU#_|>WmX q1 ODB%%%%%P[°Mk1z^x5kn˸WxM'?_w}ż7bM'B(((((�FNj˗/m{ӦM;@<Mxb<&��eHQQQQQQ)W`[;ks޵-u}:}ZjuxF1!siΜ9G7o޼\\M^{uJb@XP1j/n!fM%B(((((�8Ll+A//7|=ڀ=sx1 @B'1y(/@we_lvM7uՐә ;m5k]w/8bKD_@DB%%%%%Pqh׵k.-؞0mڴ?y9Hp &2σɸu:mذd^>'t8�nb<2�y8MF `|1~tѰIc?>=d1C*w� -ęapQK@( ��"fS(A&)J J J J J J%À 53iҤi0LwYܺuNJ)(N!OyItTTt'�y$<~%%%%%%=H 3wAǣ:j<&D&NM:MRIb% xE e r#?0R@@@@TdUvS&x �N?3nܸu\.y4i{%?PVV czl U)J J J J J JK^�e˖=IIzZߣ?O3%xm�H-ѣ"E D D D D D T�&[dPv:@ |&2_Kyk=''CsI-HQQQQQQYq}K2BJ硇zUGb67c!8!&)J J J J J JK�cc W8?>͢�EF%'O爣DB%%%%%Pwa@H�dW a3}xh̖Lt^zw_(fW,f?~*#E D D D D D dB���mjŋfb&xMlؤA./B}<<>ַʕ+_N_g,j#uSL eHQQQQ@yL/S~p㙰0 BfF1c^*6�?˃D�&?w"礚5kqzwWK˕8˄Y ,aIf❕L((((0Jv, ��0%xH 0c 0P=!{Rh }(d OQF물.ÝSNQ{,3'+�5b:#0ACIR4GI ��d��',5ug \l6AѶƓbwA01185~WN<xt\.u[|a]7cƌyzj1xKx߸)J J J"%P. "_ >%`@�0(apIj$77F3{B�I1�b=aE /x@ ()&׿&tA7lNi.O~XH`${J x +_( g\.DF&GB! 驧:O?QDny晷wmuP~`1j%ؐ�PI>F�`V#sܶm_.hѢ%]t7 1(x#;$HQQQQ-9)o Wn._@I>}3G=+Xk0xC�(xI�"*fNzQ0!/f->|x?lȐ!SN/^xO`\WbQQQQ x%a5� '?;ciN(;XbQ[`^ 7@b60qh#5nk}IyW}V3l)@UH_7T$4^]((%ʥTl�[^ѽ{5jf?ߤU-3p}lboe_~%;+O,O;讏?{|a4�=n] F׺q49:ޡCh F D ؖRR=^Æ ;թS-ݫH2}s6H[עE 4ؚ`ĉiӹsVGշٳg&9s,O |Ĝ&2TcC0\copqeBhp9Bk !%eeT8_U]C((2H I[Qڻ SCW_}JW. !$ �0�y VL!@4 >0'sޞQUtV;O_txi %q`dk\}\UP\xwp1R@@%Fdcr"Iْrֿ{'>=lc@c{KFA+ sa0:\! c {^+dr&4'A\2DptlP&%y]&>빿<뼒ww,xoˌÀ'8(=?W7JK F~1޹I*Jp҆'xo۷Y$va6}g{iϔ{^r+[kNʣ Fq P>{ؤ P Ve)et4p�N;oO٘P\ #d,/%R~UI9Y&+4'9ǵILHIEHJ 5jhXMHP0F#M]/ޥU7>C66d)@QFGM0lذ*3]1@0g,|uX!k01Mg@!6ɐc:|3 ۷oߨM6 5NZj[n|Q7K~}d`"yf03di&ZK)i:}nY^2A7{Ǽ?繇7<ORuLaI["E D %7آŸj(O>V\#/ʾz[ϟ_~M7|800¬àdblohʔ)3^$6LxO20C[mu[`$`!qJL0VRǭvI1KJ.lj[neg1/08!\{0�AJ8-E}̑�& 10;2,KMHޒyr+:GF1$`cm|˔nZL"lgdVW �`AAK6P{啾b d0 EqONn/) =9gc4YTH@ P!s\Ymm2L= C\OCm^{u<y~upʝXug!t޼yȌ`a=~��CgcM~%^g6Xk!Gdf �ep vޒȗɺd#E Xܱ:-[l9[._Uk׮ݨtYԲM!9֯_죏>p·^xᅹ/e6a�d81ʟcXC<`w⒐dy=@ QZ.^(~OL< '||q䶘46J8oH�6R isG4iҠnݺuT9f@kfOYʌ=)`|b<Aޮ:!G dbI3y]|GKףwjolœugLDR|⾲)J`Ǖ+e[,Y^1zB1ayH0E(n3L{z%Rz6g7,YN׾0 &i{W?Ɖw,I f jBF rrrp aPMIdF Gw�䈑7@A(Țs\([yKB"פID4~g5?; & ^ ӑ�7*5Z'u"x?0AyE)ӃDI(l4qf#鬹&6ǡv$ oJ%�$`j@b 44IN뮃6mWJTkRo>0�. $s 'ڵk7)9yv9s懧vܧ~`a!lHQ)WTw'%%5 Dp5(nd>WC5[_~e@ ^ `\`"9tJL讛0%&<ڵ؃JrW$ F0d`Āb ԫW жcBT+[otٲes/_xO/@0OX@1K:�(19#<2o\,VIBL)�B"8:eGWZghE&a>9g Hڈ(L^,1,IF~'C PX#ȚJ7#0yO?vef!ӟNZhPO7Edҥ Ƌ:S\fp:kN[y^0@2481]�0R@$P憻c|VIJ @6hٲ%ʴ pcb#b|sNMM8.a�fpB6F�lxM$ѣG;묳CܻT=}-EC5M!AuaFME 7ljiZvJ#k}t ZEzNsuѵES_yM)Y7:L0J J DpRp)+K7詧lҾ?FMPo \c!ǸiD_!6]e�a2w{L~M B#% `Rsrss_tE{ᆪʧ.ׂ-v<H jV0;=rՁd)5 L^N\pz0yJ:8[`|]6_ oK#F4ӧ^Wr-q9}u)J J( DpRTv- Fa`+ {fi_U?Ja&2pϊLT^Cge%; 00ȕZt 0IzF�# 1mڴݴFRK镙:6j^ y.zwfCoPL9�tY:!l| 㶕Na&&ٿO=ZT h2r[m8://y%I,!yFJS~L( YaD<p9 al0 JB1,o:k֬51իWR:*sܹsi%=MU poza+t8Ycw|](c$xFwq7Ug_YU5 /Ey; (+mҨr\_YjbQ&V2 ƍ{7�SW3R1Yԗl)J $T5%`%k0BHyazp!ݵ( tT\nX ̲IexPV=uXԩSz>Y=5A{Xƀfb� ``ҨC-[n_)4Of>fߓN:e۠l%(acRޭMWqQ~4(njVջ|[zC˕&Dx�,p sU)J$IɺO2!4 )`� +䨣;^t̤4)M Gp°{1Q2H{\*s9/ˆ s{G鸥Y@13裏޻Hs9t^{+t};F Cm0]R- 'x<(T/qI0L5g{O mp' ru:%%.N%]@#I@!1 !LMT?w'5nܘ^~F})<�J001R{,':P@n%&mA 7x<o%91=oD歑GYmv;}S_isI"t0BF@U}^LfL;3ҥb%Ŕ)kc)/V6~Y,c.$wF2}؆^| h(u]w1cfZv�Ϳ7nܸ{6&K'xN N*g駟JH%'xb{nĐof\u! j[JyzZ}mL6K/^![I"lⰔ9Ӟs3FZVIޓ7N �Hh • i'7Ha((0v*W$$ a!4k@@Cuя~4R@y PBZD+MR,Ƌ n6khK ͛7-2[n2YIgy6Mٳ1n  WY@E Ѥ{EtYJOӾ2BZT[:iZJʃJ;ŋBH}y'{FH@l )9a H`ĀfnN;_2Ms�{dwy_j {Ll$;Kť_C^r,l9`g+n F5EyG q-;뻈e{z]n t,'{vC9S@!r2 I `ޕ{\# {o$~; #m3cPsQQRzYL4aworlz6\rvAZͤb�2ew2 `PQC6X #jPF'u&OJ^53nYD =$#xH `$5W^5n71cǎ/N?ϧ {I�%Tq1`lծ}?W?ڪ}+>ssx F H҇k<_")]! $`}5.]զMV '.KXŋ0Hڣ2't@#xE<Tc@iLԷo67tpY{)8Zxr<Zʀ V``%{4kc'UZ a_ p9CQY-7{G-C1/`;%vh@B{ڷo@lvWNje ऍSl%HQے@lK2T(tH3B i4vH}cW4ǖߕ]v٭?[ XlP^?F=ìQڒg^ %MdTC4O\|ŷh<=r3bd@X~u*R %vHhPBŽ)Sk%L.װVyL6sb/>vI4^J җ<J030{F#ui4nܸ."Ҥ<ftyۣG)33^EOIОM%*NK;.o>c1>$(ٻd3aA#RRQ/ mPB;t<%M4Y 7p˅i_g R ßI`MmGY%]( 8q[2gH (l#8yIFɝ^qYEʬѣG_8LtEPQllTCYWV#56/?{uɒ%oyk<ogHTɍLU1JC٠ H%0xҤInߪ/P.L,?y7qC[b~C'nG:#*[X )҂gSϱ@gtYWw2=3#0ʯ[;7VVgL׶7h8b2C)ȺeyW\?)ms=w<6 9@%]6C Jّ*@?01n-j4OuBVo:j @°(9[�~Ir8TYZS:!T3?DBew'<LY)x\85 нʤVtd=aR@Dԭ[;JuQo,-W!)7uYiJ=Ƞ=@ ;hT2U4_TC[O$~e}Koϝ}(=ˁi6(c(oBCNъ[Z/Y&)L:_~>ʗʤBHujW/kh0(YU=чܖ"r@#ޣ#6H@E?u>gI1ġ1p4F]Ymt*)y/1{G(2 mtVJ_P-o�I%'<!_dIC-U:" RlɆ>gJQ)F*^?+Do9`3f8NK>Pb"wo{Ls`@ ^b@ 퍺J:PJP2==IHUWn3m/7.Orĭw$/}7\0?#5Ak+V4H7 wkh 4Ь$�k%R41`Đh1(AyBUwqƉ!?oBgi^k--rS@zR0d, Nh0F9M$HEH J<|r, 'k-[-" zזjS@JqigU0Jrgxau~aʢKtIoHK?asχ~weK9!ܛPڶΘ3*Lۃ?4RXA(*ȅF;�0}Ν;ϪeFXq}衇ޥS8&pF#uy E y饗>cW 3$0@aG@sM33}!<N_tEjޕL eᄸ.md1s sM2}T D%&~p-u çZBZnRޖW%e_ Ooi- ]v:=) 4Ot meHULvH#ĔNh>~x3vӶCX&:t[2Ӳ#᳥CMG^Wvٟ~:[x¢R,=M- ṬR(0rٯ~!{uRe%n֧;*a20caBl+[q7Oob#<r9/ 8 F�IPB]|I']/w .8L{Ow.\H}F1Ɣ:Dz<MYp:Veew$Y6�>"Z{vMk蓬9sߪU\s!׽G\9e^,(-i#nrz }Z jVW^+ݿc~ҊT$,lF熶T'aCMJOT7E1@ݧJ Nx0"6 >cki&O<#<raӺ]!`(QpufCa F|VZP\V?7A #�( 3 C ĭˣq6ܧQip7=W0]麿:Z&}[ʃ@򟣽k PS&d^)mHƝ (A)| i} N .W�&td ,<YW�7JrB݆°&{Z>UWQf�%`3bN@Q焚;ʿ޻kj�R_zod0/ 8bjl(*ȁܠO8bt:a@xGÌ+ RLL#Ƙb,0 ?AkyJ~!�@eH'A!`a#\�I<kt<$SaJĻ#@eẦq} t9�z%" 58Ne*;b+BCۂ)A4~@8v}Z*R[ΆUWf(c$xhde^Q.G4ebh߯qfRs٬PVnQ\)%Phբ?'gЮoD#;[Tef0ޢ[RSG+*TYSf6 TIN]un8w}u|c7j -Ċ\FBzgkkgmVؓ 6.{M{m,Hl0B V92J;q'B8S~6{'Jj2tl) %la9(/2SdRіkNw!j@ ^`�˚7(N߷O65ZtPZbMlB&#e\^d6ܐۋ/ZuR-fBkl]P2Ve'KjjO(0s8{Y*v;WWdNܹsw.+Jl;<ib2K#(@ -aW 03-M8IT+35jFT$&}W]Isl/de&p.`4ESM0oOIC7akzL <??Y~=%t(_ڧA-]#*<e ]bRNhѩWsc .SKlôIn.AJD~ N =r (uS�T޳rLjk"sMjujv޾/C=)(x 2 )}ئMޥU8I}j?kK.Ũ% C:CRIޟښ{ĉwh7jmHB6`JA)Cʬ$yU!rny:cp ַnj/kHY”1eJ >e( ߠrCÀ}ƆvR$T RDG߬G7=0@14 u2BLyLR�VNd2N/dG%B3&qa ݦ=X> fꮱK5D@U}7k'4o 0o`lT9_j%\k ~5Je ڤ�1X'�mN՞-&@$a3YI;(ICф}eJLQ'vìm]G|Pc]€); @I#fpb۳ lxH,?ShP렕8%`oؿuh(e�NRʉ2 NMfA hP) .s[KL.0\+ ^vЃYcP|0�YJ(DBW~pm-n_TVKׂ 04YP~[=ڹenR纬" ͭoj',X!dt6iOX+2(QhbR,r)5{j^A ]nO )U\_QV< 僒=!S'.#z]T[TU@e(?,8q> f}(DS/tCCYKOFObH6iԿ59=?1`P|ӕ^H(D4鹁V\ܠA+Vș4�!3 5QT- ߜ󱵆'5'Z;-0i x?S2\?{J$ r$; m6Jo7~S-kLzI(Ez6BԞBRUIϋTZ U9h{riʿG-/A N~DR Ph>ЬvǝaG‹OW$ *}HCoʷ,tqRo3&^[*^^oU+=eJVNNN]˳7oݲ0o=aΐdR'HzMxc3q>N&KĽ\2# i6E/{Khٍ%\#xh6l6_C7.W(/Cҋr閕\7S{yB+[ {j^CFJR.|%4%HY4ӋaEH )_KROKKF+)OΤT';[d`SZvh&fD7,<}aoA Iiڊׄ\tg\ZR#LT_<%ĸ9&(?_Y[UF%鋵 G%I9b(S 0-jdH!k#!lBH}Pa/]al"3<?W($ig+$� eYbt*\oPBsР0bIΡ~;_bD$׼ml$I`[^NaSC]"e/)J.b 3^Qg z:9>{቟>zofX#τCKI)z9 )~Zrό<sCE /-lo^ݻwڴivw@`>|V0WB$>x KK &B07e%;5k6$ 絚6WӋ,Et/eC\vŲz,&J~NZ<yr4O$[WCTQ"7q+R DÔ?Cx.иe0䀩B뼚[J\)ʢ'~KX `7:``KO'|X-g�RB�RXXP(ߨT4 v kM7\{G0q>l�da(Re}١}ȫJo|zu)?nQ&ŵ5?r$;kby3{!U{t]8&"%L4{<'W.]o(n'ΐe `ddfҡ.Jrݰ·Qj\S&3 I" S* ^7ξLi?@ !FZs, g04\h BOI$E/!"ً)҆ ΧzN^P, eEAXzBg'qԛz-,מ)<⭐ߊJ1q1i77HbJ֞YЮ>\LUa j.5q?GtvBx$>&!a6f8 CyZ2Tk]M�yDeO?\{*/Aՠ5l$>P�6J'oժ%)o I F LcovK£/ JYJ_yFAM  -E(˟|1497;L9GZ*L컡wFk=K z堇vS:\ϓDk׮x#<0Va$| jI-%%7ә56„I=>5x+}Z2ޛJk֬o,AR`�RoyvM-TK\G�S%u[j]Xa׮]wԩI-iӦHRvSɤ\mBY]LRmlp@X|^kxr<r잜,'UmV<-/ H q1#Zϵ]+b!s (yZE%[JtUaoYǼ9*RU@Q/wXS<mrڲ^ʹvb7[;� Gb׫mv-(>ް%:P / H6�Z+r?k-&e"}zm%9XYI^PO %ecJr8Ys\O|0ysd:5h:́2BZ !66ؤz}ulRCڴҥK}kfu# o�-%' U=pŋ?>SgeɌ<#?p- .W0Yjҙ3g>/ߢaTڼB/ tA~tVrF=N,䃒;𥉉4vZ0ROWka7?_ nM꫉+)-Z?{놋Ц � GN^aIe((,��rJ5KIL{@\Gny뭷| IRQg(MgJ qnSMp7 /��@�IDATLO835YI{]10F1{Q<[S`#c+IBcɛy_|L>@ciEt2a* 0{uOj e˖-м> <��ЦxW{VIPB,qmNn~ۧQhSvۧZ\W8TT�^v[_:184IHͯrw, QJI)9$ H1Pv4mSgξ',xu�| ͋ꯁ�XBP6lXK,{7PNQ�ky˿<<"L2q_T~]9n_kAIwZsp:ǁx( ֭Z2-Y#2e_we}*J�j[U?ۥz.vCNt /C8[%À!2J.C;tKI.)RUʟ!o!AO ]wrUR5U]RVBj4]xNtAAZxg%ޣ:TqwSoס:GX4q(d~KKVS,U:aki;M꘏}T!P>Nw<`u4kjȤɓsФp~i{cXX_N8ފ&Z 7_m)? %|� !lCzLv`m9YN}~r xpB Iqi0B*= [F熆ͻL mŔ- VKD('M9&(+>`p4Oxs [6,ՙU5b RM9]扩e]wݵR;p/k%JCsXd1zM PH2 1W<4|;t|z tz8_{UXO݋AFi۶mېv-WChF m\ 5ס@I;]vw`31�:aZF:Edr#Mh]k)^/pDLP% m 6(a iT`� }8Gr?,G `$~Rn{%YE\NғЏ?.o"5 4?ꐋ"(V] sꇑ't:≮U3u() 6ȭ@Ĥ^&D&~xdը r\|`E[1[: |�@~;9k>oڵkCM m0|VC iN;JFM~�8D)C{.A1!oݻ@y\HCP<Or!Xyx2g; VX)[FWJ]FU8j0_JTe8yw(@ (:bD4eR4RUPdcL/5fҪ_0 5<{?RxQ� R�(/nܸq/(NAhҥc5^q@J*Y 6A)jPTvP٠0 Z ⑲Bɥ�"jn,sm,T-sssk l#jil}�VlerjpH@Ԛ)Y' /k8}2arMqTC$@X.-s=_3{Eyby3ՉP|&ێpr{mZ], (u4kDW&p"(@ U+[JszJ y#zVUU)KR]YM˿jj mlfi: >>s/֯Yb@ l ?*KH:c3^^"`sVG'Pr48*$@z lԝ6mZ^zj!F 4qc�7(JݣGG*8ؽxGׯ_cp4U}} |- �,0M(;^s4Z3Rrp]aI0w=դ==z G+H[J6OԼڡ.IO‘ȪJOV :hw_}5z.WK~YTj!(QMʉ W]pq1?ǃ52$sNW$ !9ԓAp^.}Σ<L(QKRb νmo@F�U=fjs1C5_=:ihs#D Уl(O'_KV\… g}/5?iâE<b0a RA!v\2L[%ǜ7[S�vI7^裉+ohnY*^&^!xZ D൤@;Nac4XKCu*ST8bܮ1D Pŗq{, 84<e ~*N\(,y3�R T5mF32<yUxQ�)x5� k~3ZSNA%&)M26oZ7|`|:�vPIIIT+{`&Mu'N7n� i"}@dmȓZ+ܹshӶ9gϦ1f{, .1 8=?u_ְρeMW\1ŋ̃!`1SULb X<Pޒ.C;cd HITXA4~jn[p:4XߢW~,NS >M{P,=n;}{wy:,t-z꩟p9ҹo$ZR;WJ[ F0P(^z$GGå!ޖk+4`H)C-[6Os|w@ 5p4.dXh^t-Lz&g^YvN{OlE� C8xK>: @]4(hpWNNh:O_zZ\KBD4_^ "Qt(]~ءe.-n^ jՔ8q!:$ojHzQ j==$7x{rkf%\O~$C)ލ2^jj:0qO889n@RZ[R/C(A H@<6tI3ax>FPeiG:Huy=İCp[hk7߼DdA^ /"^IcIu&BG4p�% gLY?4#PbÔJA?q^DUcArIRG_fM/CWz=)A]e4jU?:}G^@x:P^H|Ă .ܹMHG_<H %kGMѼyTHh-`P�%01&U)":ޕ^_H\_򗿤"�r}؋,]qoޒv.K;o~(\$!1BjG pc_)@ s92 oilFu NP UbJʢaՅeT, ҇]v}Kag1rE$R H0Z6\0td&kzByX"3c/MY33' `:]g:)RV uՊ2ձz+V�>l 5UydP`^Aq6]nH꫱ܥ[A BrTT3o�?7/ =Cˮ*bOY,K1 K1[}(>|l O@X}ړ4(+ݤ@%c+`¸Ib*~U%G836}Ak_oV3y~Ҏo̤�4_hNi~"0QPFLy*|jl%Gm-/O+dHG^ v@:"2t*A�rO%piM. MyJt015l7NN;boGi8p5", �PP/,=>z7}PpHxGŒ W, > HHpf(͢_ԉlTFIxZ2`Btlٲ5\7�xȯ}.%fhԩO 4C8 VdYEkCj@aZXxq ZfS@[5)_M_Cry䁴0⸼adіCE%=D>y@2~t]jޚWFK$ے=eD]ޜ<GJ/2ϼ"%Bji~C~K)D`ԡwp'.h2!@M؞Zz n}Ig`|uj2=\qˆXcxCKgk}v~=;ҁy4HG-[58=$i:3BMibL5!�X tXD-\l�BN?&?!�>3E CKG+7&߆a8]Ey#uY֐e,y4䆎j~E6R0앀˟F�P[%࡚W29t!4X򗘶M4fT& :v!#CO/r鱮x 2O(PW+G߯?Y䓍B# mxɍ78Ou�* LoKha;8!p4JܧJrNjd<K 5F2{LUt˗е5C$ٮ̈́KN2d\MF[[$p pudyk1Gf�}�ʻ듢rGK�J^eGK[aM =Z%DukkQ\,U9�L]hz<fhhJ<ޒ>J+lm�R6=dH:_x_=,{Lgm37CF/CfBt5aFik&MQyAU^Ίk%Q/_I /J;cO>I^ $"g|s2IS=2<=[.PrIYk(@Pڵy] 54^} Y4g; � pQN<ٓ9+,0J=@ .rz=1FHdc1 .P eĝð'LH- KLbˢ$eCh5:Gv6ο;;4[H@*b{=#Tl7A:N)OS \la8͵k^z UfH[-TB�{MTpF&k$ьOINzQq`sư@Hk/W[kM(Bq�K΃5<Ȏ|/#WZ@WN;s-1K9XoIs1F oI72jipAI*hIz~ e4R$@.5 çCNh߳}h*Q*u3jU4eє _@EFpR\GT=T$*j Bur2)m{aȡӿ/,H-=^37+򬕩jg2 ZD* q|O8ۨ xȘͬ?3g{0ׄׄgor%eFt` az)h$H_n{vC4a@މJ'}@;x!?)9[R&+>ˋ (=�P=Xm9uDɮER'7>a'uReɶDZ2[m"(6㻇)Ï 63<qekb#r#+~_nϪ{ヲRe"&itM $y2, VLa+Pg@b n%47dر;t+pRGpH#+Io=Bu]w!g ·0@9(�}u<_f~u4-%v5);<mW'iROHdՎ(]Fe.j5ڪ.ՏMR~ʣV;P'T)%M*+;v & o\hx.+Ղ`b&F;~r'0~H!8V+E0@ Pql2f̘.r0}zϼ"WHv۠[awyeo{xo|(�#,(e7%@@ C8m=оʑRS '=%$%Qu F2 WQ35!>vK ɡ`@ jYaN ^0\B9+r@ڤ 6lxsP&ko缮D( P>xOׄ>&AI;M/=9#-JRIYj[U]w}~y[&{ ڧ\Aa(ٲ-JP#fi￟vyr[))eǞǰHʸv'U UKE4$R:ӽ(M Yk7}tG +Jla4zL'[!<%or-,,˔15<Cw0DM0IPsֳg`V;/+rq7W/hBkF�0Pi�343WaN =tKC%H)K@kfutQ 0Tf DpR$՚͋U)C}=?AŢ�)ŀm QUz<uvHL%ܹ 19$s2]9�%Mڵkjڴi}k9Tb%ϱUCUm9wjj � Z-qa(][q+e@l-jIcMzN{^I\*DJI5:(2K ЪԎy&UazaCCK}0LJlEJȴQTUZȐ}oMֶ\{sg̘Di1Hp XG$S;`Ml=Lv+nF*Ar'ʛm�! LiI{\Rʠ!%ljGIxȆVH2'N2!KT`bib~;o+" #HPDc/^_3 Ff&3l)<dHMCvm6o޼SXә0aBYr4aN8 -Iǒ TZA ީb@ _7Et'[ &O7HI?QQ@'"i {Q�)]&F8̾O-RAP(c@JJ *!IC:HLzQ:95Y)2cIV${ꀒGuTK/j',_f{@Jy>Ҝ K-4hVZ !=Əa?i�2Pe``D-%w '-Gjv`pR] P11(!%%q DpiZ {QP~8:^NW$ cZ(j!e}og}U Ysl rbiMȮ#O-0�YuߕkfQǨ $=8E'N{a5 Q;v<Q+n\.뮻E (C!";%DWNzK J %z\qOC"E D MM~۾f!f�;wi\waEK%ԴlٲY~ xK<f l�XCC6Bhs?rc-5B%|oc_ x衇0_|)Sj{N#sssɻ)̤2Z-a¸A eD^ )�%+i*f^I87tNWcK5ӽ%H#D(o DpRF=ӽ(xOAAb* kǷ'N+]4_걒f!9*S՞0S v f&T^7u`Fɹ [*r%~>qcYUIؿ P(`K{y$IXޗ't_~=hΖ7JLJΫZg,̀ I ]ʧNwkJ[ۈsC6Ð =wnZ,5!Ǖ@((@'//&ɣ:^T~A> tBR0.(dƤXC{4}&1M/I7l޼c͟X|̙+<H1t$/L.an]h׶SR!jժš%`4[ ׹ڎs5Z|@ٚ7 ~ɛ<z7ֵ 'uH9&Vt= (ebvZ%Nܒ!gPW]%(J@')vT'C5@!&#'n.y ~ E.E[޽ItK <5 ɑl(oM,ňQ1/0rnf z]R" Q#e㎽S5d�'+fϞꪫ^3]_�&B$%�DIQ>ٮr@>'hZ:|)¼@0bPdY)+ݚ<\qxhi#à)NPgS9%:$I <*DT.Ąt/ &e6a~/>l;,{.ct082 Rl3ahlVֶmb-Idؖ2H5byB<ql뮻v5eIjͺC=.ˤj{L<g0KIMקd>I){֫Wt˽O[o:YBu lPEђAI3J4'K' IS"("E T"8,VV%݋H:GhOœ_ O~_W`|C`G]Eh4kq>.=Jp&MÊKO{իeF]R7DDIoRe 򸮘9/5K_~v)@crcmzYp/rgy%xKAIC4MڡYۚW[$Ep DpR"O{lQ*I1#4WKG03R(dzlNTf8 4J򚜡IH]:SӜ<jI`W\%_,m#Qk;c3^\{Ƚ6N[qw0`ܯI`ipM%SKi�'PDӟE$ DpRIcrR2_89CE^0wn30`�R[W�QB.%`caÆЄj I,^?ӵH{j9۝~9]H=4+9-#6J4DC8F&M ]fA1. "E T- DpMeg5b0f<(0#whnCFN;?O\@yFAJ!K%5UA׶jjt)+-ڇZ9�$dSK�&ZEa<!V4Mz>(^#Vlk'. .J1.J $I2dul;0E-={0HK=<H7 ;cw@©-ܲvMVÊK[o}g?&Kt`C9/]=*9hV@ۭ90xa{8uCC7iC8D "8bzfhfc{Q�*|ֲnr^GWeb C=?6\{խ;,l$&|LRRќMZy.a%�@V%ʑ5:pi+nzK8i~@L8%Gg�&p/pRQY-Nx 24sk O9)0Oa- ɐM3Wʒ  +o UD?l=o=&x(SO|sv1C8Bn}ài, tzJtW%B(%NJyd'7gO �8W8daέ/W_Xzـ ;�+H"EU, ANX\Ӝ~8%vDz"lje5%6*l$(Q;)` ove{o[gi=s ё�H)tmIR݌ Q t֭a矁f7^<$T9|$1%s8{Gv>Jz=c 9gJto!9KQ"P-K "f0#'mk=5x<CʙWRkYRT0{Zy6*6ގ_ܪRhҙ:%#R-<NG2a(U:3^d,Lc eggnn޽|x^D%&ޡD̖⡥Yk<evgԼ;W2OG,VB%L[g#'͚[DLP ڽ+I\Wa{d./}M c;D8䄝ʄ8(DD/S,f7+_ʟ9cxW: )//cDWI{Hvoռ6 .8AJp]"!^br ‰w #`$YЊhwͼ $(JRr0âBFx_=%UoTH�K*WR)/)dZw MPٓqW$0*LDjYv?á?я$]Վ.֜y^<!9$vHcתWi9`ie3W9Jd,Mo/Nd(44cΜ!<KNݘw?x+Ekf9C=KRO˺1zh秝|Kr1#!v옔JPHNH<ƉCPJRxą^%)^i`7" L61==soϛ7R䄊:wipNK'&+!URB' Ūq VEE%rVm0~z< Z7mߤ'1aRv ٕ?6Q&}Nhl,UI!R <Iv:*)yCX,o~M1VBBrDE<II ^/-w.g΃8pg?kgŔk~~R_:-X%ѦCN10 PWr;MS|$y7Tgm&g>[h86Nv $݂JQHTࢾ#U"/Sr쵷q(<Ii$p1PRRGJy??~<H&HR˿}߸q#g%A;)!`03~.EINx-8fDN[|133(㬯_WW}k_ۄ{a0L.iI$Ĕ2IvH[Y)C 8v*1q- 6I sߜ?`:[m/Dg|8l)!'ZӤ&|PaKcf܉_EI eC 3B߮sQs I> �;v 尾Y D۶mҨQA7uVTQQQHːbČGn8(Ia'^ ;szpAuqĻ ?TTT4]Λ̟ VRyV;DzY2@RFIe YdrϝJ2#.aΨ=GJp•p% -GW^9c;C ~3l^佖X#k<^9BJPtGf8AsȖgR~3cP#Fݴiӣ={,ʴ쨚K_p?O79ϟ' !a<WWrNKP3x≹˖- ;{」 EГ8$&2-mGܕzL44+g6VHK�Vs9D"7$# P9[JNVLϓ١kY_w¶@@sKC<@D]~!=dwU-Xؽ5kc $; SJχܼyfЎ;=zٳg<yW%&H ]_0 ߌ2dHN=8ԐiSz /? ObBŮ*ϵ[t:L$%dRVXK!QI :.bלOp9B|4:I ?x\P|g32sI�x&nĴE/N]:KǘO%)ȜOεP3@ɉzv$)eBFouNC=^}y^z; $H;4* .\رc↠222'z6 uX7U>vDDIId/RE\IqI8SWҳ1JHc${HdQR=}7/gC%'静UW-6qC@I!j.ݸu!>>҂D_ut�7؎K ^H)IaCOArKǯ?N^38J($)Tּ|ڵϢ+S .++tKHPoaxuH~$#0TJ$& t"6HĚul%Z$% 4tOdkS"dKPxܜ`<R@WS͏�] 62R!ne5 M|"G fT59.^) x/wM-]-p3RlO) ;3IW_1oMrLӿ2/-qT+-!�~E,9,-cRYz%EO^BPGz@ Cc*kr}k;Jsg #׼~MK^H$`fr?SHou۷:pվNZA8|M!T4ԄVJƸ$%E),%%, ?RzM}2/^ &0(`xE(,[BDDž0hL$blXw6m\` C1$QbD #$V+߬]8;;E\,$)wS|i!I7>r & D%%!-!6q|X ¡^Iipz2q)9:h  q=RίW5.kGFNZ ]@o'KR}*J ){h ]"Yy6`1?/_bd ~R̻>|?@^Bu8T &);Uq/NKT0zLG̞=Wt$[;()q$a2bz%�%\* 47/q 9#'q2`Rr!K 'z%*f߾V=+߆/*R6G}G=K. 8wʕw͋H%$JH8l*$%0o7IJt4xqR+>0 ft*1 ()yrFGML Gj|Yx@6_f~\(`:CɉzJPԘY&]%|gIR4a gz|mq%? s,Q>P!,Ҳ$c$#!zЪ!\]e__9q6)(I p}UilMit@B .6^ wW3 $E}ds;CEȉ"aaг䐠x(삯vNw# kgˤIam/| AR4z%#)Qԙl˜4||)]x+,]BA6EgQIPn$*IN`?mIϮL^HN2K'~Z󋸊R(].\tƠAե:thFNNΟbg,*Oz7\Zv-z!Q uF],)!Y&)'f]0"_[cdKJ*!|]i C �RC Mo._EMHbIJ]ue?}D./ 9[8z^z$E<TD6`q~|ԩS;<C=̙31??#Xg. p3*]8|3Y۷o#l[z5I U}ithe|4'sďv2e2ljdB. IF i R'Eh0VpmM?XݺZx$I<PLgN gH*IaWR ˠ.{~JA$R꣨n;wo!y饗nikwҕ㝇 ҹ/酅'` /14CDsfl#DCz.;w 9w5Gz#oHnH@Hp0l:sMpWBG~ұ@,1sHi0(1qOIJT[3 � @WUl$}깑"c%)aH )4裔='۾!zz] #+VjZ!:5<1zGd<^=J434~o HZ`Ny\|ip;�Y!<!)T �"V^:ĤkX 0dJQ^C{o,)wO[َiCI MbWUSQK:1=^P p?YӪ9CR!NGR>Ow-V 弃C8JN7DLy̜!`$?nݵn49I|1˲zvjC=*Ap֘_?Ijf]ِ1d#$P.D k pVRJMip!L*0tOIKo73Bv!`JJb1ro=2t_YtG(.vLwJbYgpT(4PK(^b\`M0kiL+,!HQX9"`JJ|DL�1%EGPUY&%LOl&\(%,I (QI v @674C8R<}*fw%+(\JNɈ=n!`ȉ"aa!$ݦJQ0K;R)9LRLMi"z% )%wU)Ew㕖 i �s@p acgyNIv,}*IQBB?bwڟ;|U'8Tc\RN%)!^v��@�IDATn~HJ "4fF $FuII82gyj7ʐ^<w2SeЬ1f Q4$i^#-qX5X]P~D+#%u#@"tJP9bdȉ(1Tra+IUiz<|dy+佧vUmq"׀ip9L+jp?DJz%:�3 G@l.bg[w;;^)JT͟_]+0=~%IQ}NƫiÚ= SRC8+k\BJ&Ԗ,08YB Eg"9̷`Z v$*,:ԣRhiM.?1z9,鱢DtLlLŭL ɯ(')!Q v@2#&B?2&11a.9IkK ;UzEI fDV=ކUU)ETA3=&2D(4fɓ3jR0#$8%uNɈ=n!`$9 Bsk$9-رfW~}$E x>"EwO_ "Ab”sǻjp>,oFKyeN&}ג i �s@$I@22pp*RYZ9=$(<{_)v&鱦DpM3; Xg$pJI "0s!�Y"oxѰ}!4CJStpC CzSeOk؀:,z8lctBVF©j9w@N]׳j7 *)1RE $FMI [:#'%],>JAeַO)8J}JRjzMIY5+dЄQ-UDRpߜ!`�ogD5#' Bc'|�+zEIJP`�\Wq_3Ee0 V*$ VBC8^fs@@@3QDjI-a�i"ۭ$kJQ8sC [V"Sk? |y-kzLΏϓ9h*TDppaq>WEB$8IB')At]!n6gI# : sIݔv Uxz$),~wfEcXgzL'.KH` #QW (B�M d4@)kjR4)ο(9!1aO$E Že?)ᯟv(<g= ߖkLCLMI)]X '! IcC8*- C Ax![vFNR8tc*Eѡ!Aq$' *3We+UpL5f$% gw1 _&,_V -i0FyW@0g$UFM%65rL퉉D@i�XBY=ItɐR_*[lƆ1,GJhL+/cϖdITNHJ"W י>BChMްkIdNga΋/\kȒ+{, NMfiph2r ?H Uv7Fֿaܯ1o0≀m0r:NM}.Vצޒ"9INd Qf*^5=Ο2@^oY%Ƿ;4ۜU!=,KܪJ�9C �1 {ar⤛o49&4UzI|*[ 6䓜PR\KpO)]?^/,& 93Gi]KDpM+K;$wxg^R'a;iܚ C$M9AA,;N}>\C9i;<WI(QŭzܯLRmY#ތ3xMURtO:Pv;JiB?)NhNɈkܴ5 !` "ҥ[7Dw.{s"` Kج8ExKPU=M_{J= G\ \ '4C2g$3lEB_7oMުC4$%11d4*0PhP( JRHPIEg&zerA. Ut|$G3 d}R`f֚Yc#f0suzkThs1暅feoKR8@d?tU[+|s#mޡpN`&pH`%1QgDHb`pyN;oE9ilvS`Br!k꣐Ы>Jnr7eeWk)Ex 'Co/0 Ʋ>!ʡHKvˉyœ!`$"51Chq*N'Qz|U#'Pp +EQB) %($)2):@>c4+,CӤ; I&;kǘ3 Dܨ&7:'pg؎k1FNZ ]̍̂i.`EaHG`}PNRpسJJ T[%*7RuDg1)v^ KKDjHJK@=OJR(E,&btW:Ju ޫ3G*1!sAA�ZvzZ6K-p5HMH y}+!LZ5rB-=Q.; 0 IN?0)=QrJgO7qA'\ ILmR5 Zɦ mnX�XC>$(>V!`UfPvL3{+{y$I!YcS&sx9ύ lUJµ%,zMjl䤭;^r֮5m|( IPDE`oQ c>Ӈ#[,&%FNe#r󇢅c#Gg_!<e|�)泹EYIRBGBj0 rEڑyn��,I Jl! x~[UDDf@:C0r΀G^GNB`%B&/L(@FNHIIT{S9UbLGshU0U g9K8I27:%K,)DUH%H.4⻬pj`�%Ԓb$%FN|m )l?3mNYĒ0' )$Q-@!`]3B\97C()a}2gGȉd.QMg ,v@@1RC?9O^4 6C8YC@b7J($ɂd)gT;kRBCp%6֞=CH$G>5KJR8e TCuYS K!${6Fac)ɞV"`+BDFNq#)q�a!@$yum{!  ލrne<Ay`5#'mqbDCn xb𷷶$lPm0GIb@c]8,Piٓ F/�oCm=H4FN~0L`zm/'C\'sds!t=5}NrzBCj e?fEh>D ʛ.ƢAӸt1R #'^H"b0eW?6h98ʂl'52ݯלxQhUeߑf'55j׳Q䏑{PLȜ}\ 7rEHQH;nbC}Vٌ0HO'1O:m3rj�2aj-1/>LJ0·q(@-)ap<<m0Hʝ4#Qi3rj�(t=^s@`CR¢yx\{!g(ռ$%n\c˝2D:Ar�] '0gEuDNDs@K )BDke(}@#@R¶C8$'$&a܃oq\~y'pIO}6'QSILhQ l-NB^n4�0%&JN(Aċd~']GY[﬩h=׹0HwClkBP2q*1n9Ur8IxP)Oi3rjS^qJ|43hGTRHI8)IXZ$%gOcO)!9FL,s-D,-Z^oCypIs0X];$&Tr7ᐪ.TnKq910+=c7 0HIId.l617gEdYKᨴȫ{GWH{q5nHJhCB%i0Usr6*f#EP2ВmNRDp#ʮ7QO8){_%?ʮtva{B\φe26#'@\pR>OItml/_,FS‰-q\teyw<;HJSBEWNFR[; JH49~z([“Đ9i|vsbE A1R>eކ7s"tXO6d0rCSrz%Tt%Mw>92x$hd̖+Dz9Swrﶺ7r͵X<)>TG3j޶u! ׳ n4RwO/)-!)^ Gْ7D.Y,JH@L.BRsR𪇂9#'n m%&n!`@PI#%hxdC8aUv==Z-|<D$l_-] #L~Eup*{nKPa&|``qukĥܶ}| !0K%!` VS'-I`jϿ$;vNFN@R!~2zL)[<OGu8Iq:+PP\hi\H~I%"6t#e^l4VW1 )+m#;~=Wi0XYɩ!蕌'ee|!^Jd9i#` 66Z'0)1LwFWBbp@DXehQ5 &Ž2Bg"B(-ӽ !I]M #'!hm(XЕ$*a~s"a$R5 uǜ>`JJHzf?)[2OJϔ3(n016 3|0m㌜ Ԧ"#)uC- qw[OhC4f|'^![])]^`P7|M,%ʀRHNrI 1An[8#'m=_dB- �s!kHTj^ ))!a9A3y4%1ɑQ0 gPᐘ) asNlζIAkn6,FL [opMo; CPB]Qg^ HHCUow| RLDY$[!E2bD7,S:`*%&$l^:L`v"Kbk-PgV0y)`Jvhe vCh>$Q4篜&J\54|c*gK9?tɆUxŮsJ49iGUD ҉T�\NnEspʦxp"G?|Rڇ6 2~-]$WWI>ZI3r8MF�,%BT|]E37| V$'$&Nc̡TBrn״{81 "/wK)%%:\3rL(4V^ZG Ԍ5 ,hgtDIID\IJK0 ޷f|t-5l,2rY4C7 wkIouFNBƎq$?3beMBB %_"66K'4j0M/l!\8㔟?ť(lǃv "@RAJK3 +瀼*9븚ҒW 9Zʗ.!JA!0!63rӌh5gYSٱѯTn%c$G|P%>Vfkx`/3'H.L;4DD E1&" 43rלx5ΨRsv`b#LjIʌ]m'J ()c&WW^_mGEipݵ?[͖$gURIR9 `dG:Qqs:60C  auu ըi r}FL'MrN9O|)  :M8#'ɓW&#ɱ\E*) jZRb[DrBbp@B*A>yLW4+L'ݽDF(>C$ aGw'3rfQn:*̺pLK@ܰ$uP.@R$%8H xW UWgi0q"x *$=;"1!~ЍucG$E6Y$[@M'gE i7II7MA@%$nGLpǯc<㑕M2 .i@smPbw8i 8t wsc$9b\7%1+sm@":KB}Kb^'Q#9$Y-_܉+6 W<J.[* #W)%סL%$|Org$3Т 'ۘs3h@"!$nĄ)\<r+=yW6f<PZ$#gM!1#'EV׳3!5ؐ/;!X8䆤t 1V8</_٫#X5Q\1d\k<ΙRUΒV  'A;" tFN╩$%L-0 uP 2($u+O7$jIN#ڬԱWKf뒆8bILܼ[J9^\k HLreȤ 0 yҳH]3re[*)ygw^,?f"6mCh ۉ##eϐSFS *\WC+r eJL@L.xl~l"[*3J4e ?.h#Ij̨79iZz-%;z: z"JcZ|Qf]1^:fY n5y6*}p2RR΁fΨQ陝;T^X|Z�K�U!RrË/߀sC8IJ ̑qI)V -(\CiP<4r v n/!80eEbu#9LϢ v+`dHM;HN /bCAO=3u+v<I t~ v(悈�[+g&z]>8|BYW .e}G>jQ 4.nA‰׳eؑ|pkrxG0ԹYz%*JP-x53"ĄSI) tT]{TaP<[9#&L|*9scJLHNn3%H4w "ګ<%ϱ'`!>Lm$[r{ɰIX5jSg䤥DܙrP.*tCG IPx#JL_=x'#=:m[!r BJ@HLH6t-v99L^ӵPF,M^^ -}q K[4p9mzX$>l MKv!L;$jr¡ȹ})쌜4h}S)+%rߧ&KلN҃+E<(Iq4lDl0bND+iz<s; RuPt"-ބi[Ͼ&Kn, ËNӂ ћ 2z{[vꔐpl~2zRR1WaڦYI _1h3_ 8&7oVɳ?WnEhL[T*CK@LXy1|=>|�IAt?r x9!6 URRߔ7pk*ϙ=YH%žKE(Nh تs8f[D$OLƪK4!'еذ-Ӝ>R9ii`9ⰌH:Q;E/+~bL_ x($)Š}sC@ ÉfqWOǩWBbEJP9DkNuXv?RWWw(juzp$%S+o.)>Fl%:òBa_rnXI댜Of%l9v6'!Iʖͧwˢ̑?1OJ'ux+Ia.(AQ$|�sA bURJP^ *CZS;yQ] Hi(PpS\R#Pqx<  #a\P(?r9O8FwXxz%%Z4ĩw5L\|mh~>y_g?k^?U! ,#3$eX JQD`\͋jtLW6@^=g폀Kذ㠧Iz&2l|M|T_4/fS.]>..BISb6x"R^r[$s`Dd0x JF4 4ꌜ t;ǁVΝd6g™*?m{Z"b\u}M!ԇ5x�N ¾Q5>E a8R<JJ(=˞'Vɑ-oj*0.2`DL/frfPJN8 Ie.$AÇeg-A2dKV70 3r7<#y"龰p7G,]|K懚>O%)8dv@JP\#2{jQ`^&|!GLp :X%?Uc"&)n ?.y@>MC4tL^D)E|e|{vD�yLtqR 44%R4�3"aPKMFNڮHQC+,acGrFJ֭ ]3dԸΒՀ1I <Bs�u/`!%琍I$(t V$<O~Lr>9R`V̒ݤ3j5A>;#}}sAE_QnVgJs;%1%Ic9H` N-z IP8~}Cg׏훷ݟ\,s%ء6$(|>@*4> Euu+!yi𑭻wTd%]1^R2l-Z@ɕ^0 | +I1r|XF28pjx }*8SM\ft!I @T{{_/\tLS C\9Q U*Kk @%<)!n#%ȼ4 *9iQ1g9Vhv>|i>Bj,IY p% 3!vnzֶաmZ ɦ$4+I=eI/|!T(| =IR!j(!СWFU-᱋^V o> R`*QĻ+d4- a::t^;w'lRdجf w0$QaH¯6s2ବelzf<%2މ24C:N JQD^߀]s@PR@RB;k9R/&^`*W+q+/%ܪ q}34gqCIܠl\4EzjM W LW(5fgݐ$ڃ "d/W7bJr߰2%z K+IJ<Ш9C;FNiMJRHRjM~Ze0=B)1PBY~sA:jUHo)֬w~ W7f<X-[,g!JT.["{%"OJPk0⏀c'zI ywU[OΗʏ!#(KRHLHR(A1s@" BJp@^iKRa˧k7G"6 33 %P8i T=%#&+oC I0r⯌R ߆^YJl.|fܱpLL/AQI =o9C )peW4]Urj^\݈iIRt/ɩj*%#3gm6E/p0$Ip*N|ȳ.>S)Sfah) 'JR%) ?#@rZxuKhK෠Wr�1KJ6u L4̱NXEs#'W*A!IeT<0Kzp%rjQ^$OSI vB@%JJ4 >qA|Nv?o4xERV1Mjln #VQ[C=n!`FN ('NPkz|FVJ6"JD)!.U>kH(,bCRB_4`|g߳·W˵ FLg.HX'W; Ǜ`}?Cs!0$ f5JSt*yV$R6`K[X @dĕnl5 ~c+9}R7.=Msq,S πeWJLpZsc0D@SeTmz*ڟ'w.!,$;vǫ}b8ܣO`k7bJ cig{q#)X4%R|X-LL@8Q݆p�9C?9O^47&^"xodo_{?@*,7l׷J "z%8 j|Ǯ*^/;y4fw=JHnҍ+| 8#<WМ!` #'ʎfG5czLo{>Eacd=k$Г3₀+S0l4:NNl-ot|{/^ ()`r 2A.ef DI$p]3} pFQ<_@^xrb4V=H!1 ~Ur`}م#@J4xƪhtR!UQ;'^gCIlzUBB9WR%6% 92j|w[A;Iq)E1}`NGdT U; \5^p6] /Sc)S2 &)!gh #'~ʍ}QJTH-H5W=^*Y5Tʂq3=OS"a}C8j+7 0 5rA\5 #JBC8#4x .]i3^i :H-4 #`Y&w3Ti\2=^j3f+E2dDHrR>JRR>ݜ!PSjBz|>y?W1 swWB,:W ԗvHZ$m59J'HR(I!I]' C~N=)dz (Y_'S� sTbAA;|Y56M++dĬoXd<8iBlkI$˰VD $) ܸӿE~ fNғ昸+I!1aG̥" `+~DEK0 ~ 0 ^ na|L)]<יgip*+Ksj"`$uH2CJQH/HPr>0=޼a+Lˌcd(V=@QJRIuD}vͥ.ϱaX^ %%NZrFl-{`|C'MRHK48/$!!Uz%*!8LC 9 zן>׍)JR8fmz??+ݟX,f۪@\4$,E*-HJp)"Ωw[?_)߁iC"LR̲MlWr2N!C@9+%&f GIc`BrKR(IWם3bz<z\wLNJ;X()ꕨi0(_w\+"UC,sr|)_r..;J!BRJlvW`H4BGB}>yG4 ^Ms_TY[>2;މ2,C2ѷpR}:v%9./aXN4ܰEv>Z.>2 ΕsUFvwCq*-QȔi!4N#'B2|$JSMϜqyaL?D/,Q > o$DRW:z$:3 FFs>)'Tծ7|}HAa!% #%!lkW/J2_^Q{{FNZ�Zoat$)o>s 2;_JXX(jO%J3 F^,igLtN-Y`"ed쉒[ `JPXX^4Ƀ.|&w+B=ت9i|KR^ԚaxIv;!3=N¢ WWgc\5dO#Y�Es%od7(JJF4@bpٝcn@PJuOH)CJQ(ǿ dC)a�>EzԹ\dža}z%$%nXzٺGv 9޻C8 <ir~<6 3%#Bd2Rqaަ<0_It؍m (I5=G/ (w?X!gIh) 'JRz>O6xH*-HJpʮ.91y+t3ip6L.FJΠ4X42')I|hN y]\(As 넏./9Ŋ+ `7E9IRBǯ<wZ^yux`Qʨ 1SEq ficeߊ_lD8+x4x钧hɼC8l{Q04\L[�I oD@*.3xRDoo.h3$[fD5=>#~9R0_$$ӥ'90q7r 9q+JVB  )*ebP6r4x Lv!bJHN)!8q 3Da3G_p*N{GZCN ěɱ[t" mBe IQaR*͞ǪG8"Vn3=S4ܳ{|{~'y')4`L g!w`M+i ] \!P'8)M(G.-a_"Rr⚕pjdIĒOtL7x(EQIJ1W='sގJm/gE,>>5UmTbѨi0ܡ*y{ ]54kA2.<A4[%&]Ɔp$;|t:O9:`�"z݆Qb u'}(gNeKO*¹(2)؄֖P)FOVObY/L5Ӕw /I᝱$ŚXaP*QxEUvؕ3 Y4dɕ0UGv.=kIO" ɉ�_?Aʣl3Z@kI0^tYI1jU4`z<?9ɌWFJ QM_[Mbcc3=nu9 C^ ^1˼S|uk@ؖ}L{x ?^ʖ.ªһ:̫dDЦ ˛(;<C2:%R%-%' CTE\ yH @-f6T Ԛz<~z?-ELWHHUZ[2N;&ozv++k C)!*+dQX5(1ő]YsAH. Isi.CCoadDȂ!!]TM�3:h!9aHQ{g]SgIPqPK(>O >왋E@%R4ح7�ˮ70 \ % AqnHqak\#tM9CTNG:Q|c�֐}oYeAVb -BmNZjP L5mwr(Y6IF``'AW)a C$^k'Ƀ3b)Y}I :%#=na#pr\>G%h: 'f t hІ!Iw'rH<#“/A(E2dDHrRA!ʼn(%qbSݙxW p[a%Pv~i02;:zm$%N9)#'&-h,{i;w$C=b̬*~rM-y/v%)*IXSrp+N,iyɗMæ -s&Jΰ:IJLH 9qHPDMj+ "'JL`CJRH-T¡.wF֯k^$K`L;DX§ٹ4bz% _=M=U4 ]I9Rx6V 6 شqΨ$]th{DN4a(l`ӱQ=ea* W$w3O˦;*FI|͇W K2 ƹ4aÐz%PիuVKU6 7N`3hl,IITRBU !0xB:;tgrԉ "`rē1Il)H]7hNeT)J}Uu@^\;QyhLqޠЗ^cC=$)# ڑ%ĚSzBbU\ݘip]Z)EFJa %1z%j$-#r ΄%.hONbJA"F%9!I~ϒ'WnQ%IaV) BO§|C2:%Rx%%Pryw%LXd6n<2f4Ɂipn!z !8EI|C9C5I[Hs)f$)ѦOJnǟX$sO1ҹk$%{ Ci0gvuC9j0Ml*;]-WNմ¡T$kL;e@ L䄓<QJ!#3 HLbM2KE@9�Ą-GNNp]"ɐ$z2=vf3Kez|+`v2G+_%wF \��@�IDAT4r 0H }1nD玹 D{YJɉ"Mb E( J*lM) AQIJ[kOfTL{>Q!(u:I� V>iNCiٷ֦]*掓vLJLXwkS悀ֈ!7S! I@N PSl0وKE$B%)izj<R kH vCYy'*I\QM/\l-?xm|҅s#JW[58ٛw<ՠٴ31Y`omIBNi3bҢLMFzzzjME?<%zY~K;IK4슐S88y7MWH$jc@b4>_z凤H*)qC8HIzl3ݚ|IK@!\䤾qv,0uJQ?|F_يЪǃ(:㕢P§n:k}zcgWi0&w@UthiÙ_u}=f!$$?9n*bF1vҌh㗟=-/?S>0[?8WJ&JKđEٷ9yg둶U4<%}%s[1_F͟*0 p*JKX?L 19 0ǜ!$?9QEY66ܥeGG$*IRMJ^}a܇z=AN鱋-6+wz%6Ic4k‰H)x3m1wL^|)KgG"<ކpA~]@[ɏ@7?l(*. fҔh'1L__**dũ<�::o&9^u,.vظIJDJ(E9simp;gw= O?1@UrR 3 dPh^pCNIlUtm%ŶѤ( I!6=ދUgɬŷɲJԾo@> kURs)N%N7xIIDSSοU<6v`,&JJǬ2q9gd͐P9!DIԂ(EN4ib@}lUnv*tQcLqJRx'(JRT$u$%:|Cbk/_.Y/~7óNSo^IxL iIiV %WȒ8+)!P[x49C D2{"{G."LWO5=>c?<-n|O`zD GI&8ACC=,FJT3R:+-y珼Ur`\~W%V 'Bdʮ$ NSl�3cH%''H}"cuDr dt`C= 84Gaz#Ir׃d<)"(JRT,б-,c< vQ+0 ~rp6\M+ꕐ4) `!GKN!ȨSv,J48l.0Cp14g''|tw^hRd9O@rBahkO;13W2j<LsB Ua^+! |WIN\>uQ>Yi0DK2z47tnd1 m<\@ K[{d4"'p%笉e`%'Q"xcUyVӋdV=v ,+JNX{x']&Nɉ+x4[rbؘi0JzSlB)(i4JK|\)xyj)j)HN +<H(V�M*-ݹzĘx3 epqȐLi\)<VzL9_ %6t`\In3mǁ3pB$۶$']tQT ٔI4ERB@>U7[̊l7Î(DП:pJj[6lܵ@):84 Z5 Z ^ Pv�iMd9j&*#úu\HmrBX~T_K1`+I!A%)U.8Cazǝ:2OT5ykFJ#8ٰip/+;K'(!DdDC6ݱIԒ%CäE7Mn W%R}Ƨ4r9,p\[ޓv09fxfCǿzl\KeƲ2)(NPar~<S $tʮUL%a3/tUV8عH)$n.JD0'D]r:2p4Ǽ4FNb*6 MnRo. iQ) CԚ;T%/̑=\''^I=X5z%Hn!.AFeZ%&,!FsAB%IX*Hr&zNHPRƽ3r*RoILXX oE өt`.`Q I 5JTg)!5 y6 SFϽ]`LOj9&~8I�31CHwyYs8P{6rr¯N}Ft7oaHA}JE8d-F  * C%l\LHs*rY'-+WWtE%Igk'6#ΌdMN7nמe~.DhxISsb4.&XhkP)SK`@$"}sd`i9Jɠq9D^QHN"$&0l#0J035CIs: 0Kfcɲ|в�vZqϤ7؟D#e>ˉ IJ <S(cV$(C2aNRĄE_ѮaO @D@җ`e},2:ͭ4CSʮu;51KFױFm|XTCdu33<h.09a\�?Pc]e.aQRdDCl. h7$$%!ҮrJ\h/Wr`9i tBG fv`gg>v7sz Ċʀy\SֳRrB�h鰯+|u$YJUw'I6|oJ 0仌@Wgݷ xZ;`Xdɥ?s [y\p`c U/_.*Dʐ3TAsv;PӒʕȁuM~r ɟKA%%*-Ą:ekt-iP7J+tE5*Vu\HI.WZIf3o( B`.bE,V<F ΐa"oW:.Unw8K&$%./)[ IqaNJKIKmK0 s+:rRȉVx\xǯ3s#'--8Z4LL`#zO�ɹS7hFc5rDx_ X&.su]1a"NClwD<jnX)IJtJ�JK8sO$_N^B\#9QPǹh#%&q+!PZ5r2BwEyg؀G, &]΁9qR4\e0tl$&n?<H6nY{oDd- YQ"*pr\GW '1q:'3N۲6J[ tNZ iǪI: %Y,,\p4:.rk? m^&.p|-^l0�W \VJ¡^ %$%sRd!V ,yE3KjPy'*߫APϺ͵#'-.T[s,cP].ac1e9̘׻ 'Q1s Gy<14$%¡^.!\|)?K,'�B,E!) 8ύ"`䤵Z9l-~?8O!Ĝ4ھarH! pOuNA6i ,/v{c"\I p8<)8QJ -X_zc ##MUI6FNⅤ='vb!.lH4/Ru`裐P݃6v6¥ݷ慹 !U]1i0pBC8Yم2nY5VrIJIWW)A m0r' 1C_B%;C<< =D!X$%mvI l?>\Ut �w6ɏH+48O.[ 3%SԪᬇ4ꔌh-+FN =�j藖Ak;:)08v\>JWZq78L|vw Xi$(V+Q+ha0 .X(r'0aJK`:EM PC� [xCN0L"NBc@hكyv\Èǹx4.b.@PAb$4xcp02˽D?TB/@ 9)FN;G@EC)aG}L YN@rPZըn~aG+q )2XYi( #1 ΂i OBt\=()ah0rnPۋR6x 96z!= VPωcG$ Q!Zq7)xݚ($%k4xt,)]0Wun0t x|#'틷-##> mkI(OaS,9Yσk]d(߁u$5P g` B RxL t8<i #%w eyn% #'BޛN&QG992˙(;6jzԂK<7;sABd9k'Y}`|R~G4d!ҙ$CFNFV}%Jgz HPOD:~ROQj #%)${,}o<nB)Y"9<ҨS209I(rC�uc PM\D^9!L7?J!lyۄ%?AJ fꕨN]ಊE0 ΖVpױ8*'#' �{!A&Ho:c|$ ,٘eHSYfҦ%"=AvfD%wUʰ)EwpHb7$%|ˇJHXdR#~wFNCB hc -19r�Ba: a?Sᇁ#>L ̤!X<<HU!gM”!`ܢ=GJP@04[6k,b)�ԆU5=Sf\IѡczlzlIul}EK�KP#C8(X5x̝3bCC2'-1R$9IlH ^BRߙcH'}0? (Oce6`gn`Bj#&T O$%U=K<I\!&O!I<`cې#i MЪ,MщwgL ҔfrDgƒPZB+rJJř6rXB$DR@ 0;w}9`}$ 6QYEP9kW9mVLꧺ~Cu߉#G٨!Ą%XR�#sEI涝<`N8V34(sL=G1>>(hL=rL'ăn5?$�"P \%%`|tJh*&*k"Wp/t>&bcuQ(9ɨ*@]m= =) kۦv-ӿzђ~4dlP`4WBb 5]z A/#{s ]<yٕ4Y?(9 fT qڒ.mq~e΂G cDT3<1oT^2CM xRY)=w`Z%%C;,%׍ !|g5$MP"$`LeP|z|s5dܶT0$`ˉo*|d2_=fq&pCTQıFSz a]ӫnxg1Q[B-QkB\H oxKLL gH  VUē8*":;_>;OpS=CW1 (H)Tz| PpoA'v"5Qx҄<e)uXkɇ i+ /9!gV[mnLX2"Č@+<_+F}p1"> `8z܁Zj9w.O*`a1|L12@`U+f),G;D=b=b`MǛș`3<q{�)AIIQJZ %VH5iؐwQYĒsn[1ߺTbF`4% 2_y@ QP"5͓`.'! ځmݝxhFVDH5ۛ;IJ8" n:Aǔ T|{Ji޼ڨy+Zb[nNMm9>YvYz9D',.&C[O|'gOpsHgG9e68x\y|@$A͛bx$\k QS6aِ G`NMFϼގ]H 0pa^rBJ&+9Ḫj}Lcq<$o8ޮL$)my4S6Iq=̦+kINLjamI\3HiE+a1Hʙt@Rh桹ڥ!)냌235e +=ӥ& dzzY|5BZ`+M2j49I8eZ*@<TLl w�2 my&.yԓ-\uć�?I<1a9tf�>yxh{PAX!2;B; a3$,2$'FSkt7mW%MN%!E$$']̈́I<f,/4DIJxO%X7 "&îR:Se#SeȨVD#A:;FEqlhiЄW$bUO0}rbs3 C;I9 =[Sl5a�aH#]YEHF1!9Ē Ĝٲ#HP^H$%]$}?(4C)+�)M*@h7yc< Oɀ9l#7o&KRHo&ܐb̭<C\W,ap+w2n|d 'H0Cs:2n/!F]a]񏤄 III%ԜЬs9\|zhMػPcB3NWSBYKHDI `RqC Vr;t9ԁPǮryʪ_!79@KN,AQLX Kf85yȸK 3dќ|]oLBKߵ7ރ1ޜ&e칆Z(11 shoє`i%$)LrrF0/IJHN:I߱7@[2Mz*mi}1!ṍ&U2Yh 7q=S%ڀdTvm,ܸ_&sz^ss'Q95($&LRKE58Ic5'$%f63\Ű >WhR>W ߈#ɼ*EO )APCb4%\G"))9|Fv5W-܈ 8H3ĔIkҮ'BgNKǾCy$H%s\zoW9X QaFXeHrA1fyɻn?Jsi2eIզpԃQQC Y&kLiDnmřfOiڔK J|`3¡O %_ ʶ>kU`g/v{-&]707)-A.5�,2f҈p%KNX-g5IT}Y71~d_ϐ;-FN%'S^j�lSQdt<慤 oW_91dB%m05qiCID䄚p89fl)?]i)$%x˄ gALJmyMD2 9T2Ӗ!q_UJ$֔KVjQJ^ $yߎȃ_&7S0k ]Z- Kg"<$I,Zcjߓ؋N庒E%~CB$!m>c?k"7bLN iӘ4%$'Ж`E_ 0tdנƳo&z iD[Vʚz&ZyƕEH;e&Macm'L07kf KQ"~H9:$żϧ*ݮ3(i*Y0'IIڪ|wiFoaGhWNQ: lhlMRb#qjVU2~nU@x$ttN9f/E%)4ȜWwC_&>;^j$Z֤X£Y K57<*@#@B~w?Y %<#_vژK>!|) v>Y_>HJlh0)VೋV桃Em |-4&2dĴ)mH+hL+)ASR MS1 QsRLcKBHJ2 km+%+4z.],W~yV6 3΁oEa)$(�a";`@! ,[K)ɓׇ%7XQ^꩏9 $#Æ=u?]șۚpIGK$h ce5toHPHJ(VCss]%;0͋k &73ZO695g- iS";6C'{<T}sG˧Eaڲ`M*@&#~>)³='"t ŗch4' o>T6rg0>*IC=,ooBoϕ}7 7IIy'a`hpåS_19 GQ,A�$Kl@Rr"'%)$($)ԢPXb>?IFq{ =8*ُ�M1ȿLLly|.PvOY;zr u;zUV gIIsdl~C\/W& zjp3lvjKV@r}Eaį79l"Q U5P&gc7SK a[-*@&!6'ru|&9lwhC[Wz?.]CŒ\jGlM:C�=n |-2b}X[iRi\5#9U{VCbT)S$ʮ044J䒔jQlq((_|`|irk@xR%)�A%3Nj ,a9 = IԖۉHXN./Ζ#7M8$%H2p:,g͐~J %`%NW3X្?tYhbRbQM%9upIQ=>SϦUŲin�fƖԤ=`M*@#M4 \A%4(~"4h豷?1  &)9H [_xS[Q%*C' WH=VU�!%HݿdEjAaI ~{HY2 4Ɯ@$(XY=VUtE[rL|Vv- H)8̖/SK HJle[8ԖЄSy._-k1&4xj;3BgI M8Sկĵ)k#:}8I�t!'Bx4$izazf cd ̩I!Aa XUQ xy=lѧ?\1M!ImA2¾+Th05%}9rj]a73&)~jBԦJݤȡ!#ChoՐ~Tіo9nC $XM?z$B' [- o$*LN*@:!MWt=ۄdq\#8LV%q8^Kgh0DjX3ri<Y:~%H`7f'$$&$m )$F*ك�gu儮yF5וƧ z&ݲņd:z9EWu`QX>w�A%]f3:nsp(2osIL߄$$%XgWtʋe^^>:D"nJs8$fFS/5J!e;9!z1/=jRR,\$0]&7RA`#JZ>|+g"Jqr6 C{2{ ǥ?I †Īw©ÀŚpxW5<jwKmf$%69o8CLpVUT! bc)Ԅ9P,B wשEQbqe HQZf\5?J_<%OsF܍N3413"a9_;pԖ͂bC;IC3]4�&dXbZ&%%"db$'4jPRcٱXv'|V4{T/&rWNr£H 6(�onҍ۷pͦc 6$&$#a.:/g/o,GYMZtqΐaw 7KVS$yHN4pԆ=^V,^~jLWh$MbAbI%*$)|ke"履cUEHG:9Agk:Ȫ0"C1GRl„UV\W˺_AFӄC;Vs1twOS'K!F,!K]�#ᗁg*9ȣ%4$+iSXT/⬬p1|u{`4rGqjRHPX=VU@5/ٹ& 䎦[Cq:ClP֬sb\9 .Q =zo]u@|*o2;<A:f)ۊz|?i2fB[- `'IOE pEfosX)ҿEP3ͦTT"9 L3u rӯ$Dhp™ұ�Ё_I=HJrbG .IG3z2j\s8 DdT /ĄuGۀ:CAPHTHIXCL*4"˥ ^*[_GBLh0/B3)if drV80 /te='z<B@pZv>*@ oa" 0"c"wD{)ENSJeCŒ.#Wm,K;WʎFСC<n6 VYN~$v.336{%ɉm-HVbQLV"&_ e;Oϔw}'NB3,1Tx_BN.C5P"2fP2[Aӄc#pQ8F-ʩdsԖ04/VI Dh~7=R1!pF -LNl9 sRڡ;7F'7vH>$R[ .VXoz8ǵ\IOOnyV< Ƃ~%Bϟ,,oDO#YV_ v>|5QSbyI?s^VU+~(.)59!q/I-pȂ˒ѯ̐iI^zҚ!a�U!PEU<~\&]eؙw.B¨bZK$?&`l\Q%|,/תP)cat!=تԔpv.21>l[CJx]|9bɈ]ppT&eDS0[z|??+/X-}yLg =&´SJU3K=/S%i+dx͉;݂e3M1DdaC u{eC{%gM>cKn57hKFxndlO<9`qk\#'ӍunٿH~C2izQ=L;/ !iΒ'A;�  >;?.;N̅)Q$EHNBӷY|d̬i2��!|CbDIIPfO6vJ$Z IiT)F(L$|x ;KZ 9im<eR1Z8ZцN"Dmǭ`=/YVB\ ]_orE98glNg"$/+ &1j{'J'~%ք %(U FmL7W4/'QUurBc_=~km!!=5YY0L\ByU=*k$} u. ƺwGDKig2\hpJ!*<)+8HG@bH Jonjp>BM VT[bȮeLeIP͝Q|;KL͕&FY- QE)>"K.36]FL/-{ڴ$a^Uv#tIo q#p" 9U �r ُo8B~sHvǣE/sDs֯Kl%T >,^#W-!)iP|o\>NJpT@[ub1� )j3C*PrR  Ʌ5Mvd['ɔ?*5N(;d7>»Ŷ66e{,/җi-SQ$~DV82ӽEMMOռ<Ά3#mFJha?Q*{Y {ÄqLw 4κ\ dyO͙hxMXQr⎧KvKxǫz\9c ѣސ?BU(Ԝ4]:I+l;nWd V<(zI͑E߅}u!d>vs 敨Gٵ6 $*Vٳ�xJ,IJHX 4`Dz9_f?@N3<137֊K]�ڙMXeqLD6zL,t82K6 ngB$Ƅf.P(S%}`blն_cℾ^|,?~(0ݤ)6xv%q?ԡ%x}#(8]Y)h\PE>e Ǐn2Sw8EKh*R}9R7 hOy%(�~%=FD 3&4wIJB ٨ mŋ@אwrBEɉ78y[Uɐ4[dԖؔjh|$U3|1'lp4 4$]N3ye\y ™xРLۗ2gdq `M@=ؗ1?LN\}!ѷM&Q,&׍*í G!AQ>C]]¯HItװ$ZjIyqI^K,TyҺ7o&wtyXN"g@1ù%]@bv]ETl&E"|COKJc4hUF͸K3Q:l*-|Ʋ=g4%89T�i>IA)$XDFSRe@@y<4^$Vjܲ莮�βG>.#竓O=gzSi^Ol~!62hM2s %%N6&bII}@"%)9 .ͬ`d5eyƎȦ@V8zRH@3AX}$3/D:Bb,ronT١90ytB&{D%n"<q(ي�ɉ4jTpr]xI'Eg։,ta"~6=om9%I$/Ҟ;˃zli@Z#S#:~%Rs(F%0WI8M}#QQ(b&rةZ_]FY8{}1*!sz>WݽԘLXm!SYUo'�$9+8-Bbxo'<_n`<&e# k ;H% 1 2R:=y2 @rU.]+ tNy˫ '3K>4 WS0&@�"Q53gCNHLebS 3f9X ?iONx+ᝢ d}Ie@E993=BC}l(q=w՗I<4Df4AĄҡv/g"WEv$4[I>INHTIio $&t~mo (Hs}5".pq`dkgٝ^'/dmAՂJϓEQC]$)G~'{Kp M<ԚZf '9FS $ mD!>n*"t|Z4o'σzSDSg >6L`IQ0PBSIhÅߊe ^َ-UWrULwisFe#_?VEyT,<1ͶIlSsHX9U2jk*9WdmD~q}h$hsweX3EADvǕݍo(PF퍢[I^%dE u"O[Q׾1#R5Я]p"鉍r2u^NRr͠E'O0Fz748اR~:ܻ }C',w<N_56*�#L1vLJPrR乎sEM3aVO0or6z=DKY~#h)-Hg&xxر(UoHJuA*"BCtѕBRMs j)m?1c%g]Z_)?<Ƽ#Tձ(9N9E;4_KU\kdvz Ʊ9? ̬4)E]8vxu㽼(�i)הOԮx/E i,:آp&ܿȫ<s9cEiE|q$s/%k$[X/mߐI��>%IDATw8G{I�A̵^}MXoM{/grGy5g.!�fBmp2ѕdD3i%s%^N!L.#}ݏx6{͙|%<--0^a&~1S}%'zi/WI3?#kp)m0ouκowߗwvJG!QNVA%'n6E |+)1sɢ d! ;"lcyҚ`%s`/ܓ8d%*9Ӫg.wa\7M7,tA0ړpv~;?ŋ0tx}mSk% /JY"$Z4" F*_ C:l`!;~Aa4p5/rӲԽљ4Qv0Ƒ̐캴\%'z)E`Oя}5{`0C1u{sdZp*t^ŚNQ߷6׃\̺7=h! FNjU %'Y՜z10}:Gp.DNVz:0 /_=xމL*B W944_ @~ G&jxC@p\@RXƴ3CLU(CC?'MsUT<E]ِ"_[{B\\`r4B4V%Q$QHj9@X~<Z֯k.~\[}[X\UAX20afPݵQ#$j�E M{ArTWm&Y[F5=jM"&TK4>'@={ϏCW$o h{-×{W/n}]{nKŖQUs&T7h{44{!$K\_ۋa"(:b$w\omn[u"-d!0?FM85dMSd:ֽj1؋u˶[F M~;:7-7njס)#?-2J v?5m_>=kma|ѹ)47bAmv3 Â=̧z/ZͩOS$x8(p) 5 f!|gog\y.}&7Vg R4gB[} @b:B4h@b -JNP P}0-_I<î_M8UrgW~%I8a[RrjǫHl~ הT1{曤$*q!#i53̝+yD >.;|,kG[-= JJ€fV$&TY =4[M>R L퉒  IfPBC3ώ '#Ν_*S% g&VMI MZAl+') e%Xlʑ*GMx7eg_t0퉒Omvp֙aL;, ?=o}9u.#=E*CJ))!''F7RQ-mkre cPE@H'8牛|7$DD-:ߡ?BOMU#uᔐ\O5& 4iJhL1HNL)4̑ 됛SHJVP=D!JN�K*�P8KHpaَ=v )Ms*D�7:z$+m>hKB e9ןϟ:/{_,\4RwJRi&$',1.Qr|z"PpȷԞP|d!j:f�ʼgQ !)cjIo"Ke[m VHLzAHma9t)?{GD:D3%3a1_p@ed߄i'^r~ X$>l #) pc{"kH" Fm Ȥє`i%ԞP{b~rj+' 1zHH4㐔ĐcDɉEB@ `q ;>BN+n)8z4zUͶ= pү}kvbSx0Wۋ |3W-\4PSX?jK,)Ֆ`5$xji@Qd -q< }M :6*x9hA?M6t`m|cڒ{Uϡ5R քc-De9<olBAMuv_E$zl%܄2눒:E x&sF cDW@e]=L%V/EwŚ;4lI=pY]HJdĘt.W[egKٱmM8$%|-'\"č@~+a8:sUA%n$aȩdHFTI{_ %VS|Il)\&2$3 BJp# lqTd#�DB$ڏ}mKGHTCTËDÈCq37r<SIk_qvE{ rEVh+I+ >}"fG"MO;#܍0VmI9Y7aUCm�yі`ZJ?_z<TT 'B$Z4"dnj_+BbNo<;�11?,ttfbI</2O5piCOn9 ;^AhmIIG h@hHHĐg=ޗnhP^r;ynt� y H `M8)1Q8 "vKNl}.4&PϔGh@BNkJHѴq;ЇP]BAӽO%l 4lM|ݜ0X!%`^Q8J+pIIBv%'"$#02ioDI| A"ME݃(a Bwa9FcgmO1 |* H^kcn,)2\hM6=\8yIJHSsG%JNK3+E_q{�.,1a=ۗ?ӷ,1jq;]I[&~ЍhJPAIjKĚo8_ KA|5U؄i-JNEL+ID}P3 Op P[#ArړnlYuw�ol<v + 3q 1  7CT&~E*mB FE@HzqvU8Oﳇk(B|4|[a:<U ) 9xF'?4kte]n)Y͔ fuf,!a .T~K9gE,/"},#q | HRyKGpp}KO.z:^B_ d-F9p{=#jG'tIp80H-}5]y&;|A&'rV0q$~;+$' "PԬGZKdkC25*}CD �, )r{L_|蓐7IXd kA-#ք7�-4<9{#3tz"x8RnX;/Ka tk x;E0QKZ"=޺>[7l~Uli|[5Hk1$ %ԎPK0`B%2K?1Yv#@*@bDg{fpP::E utb7reqL䟃‡i|8iO7|{M=S|zLMw/Dw;hoB <?lLJ *�II@[fmXjgޓӇpTƅGJNEL+i0Q3T'Lno}o#, nX<#7f"jSӠY@Tc 3 .dͥfÅ;4&xl ɉ >{W.6 $)jp@:FXW<"0I_ج]ykhb/;zܰeTɐ4 MK˺R>%ѕ8JO]@~@L>քCZN xp0hgi,)"z6wnGcl$rK{o3)rp|kS: jJ#Z`KJLhy_hܧ~(gѶh@|T$`pjLoa~Oq3=٩f2}vm?&2u[#!3r$%L֧|jP~|P>oMhpU9ZΚh[[}NEL+i�5p>,_WL٣Ƅ+dm›D&l$NCaL⯯j$l'ވLԘ8]Wr r3rHZ4ۜE~%0$'g5ڮFE -d_rNFz'~Gt䷇D^=HB ˾;E~2<tݣD�o;k PsdGOd>&XϪ`\OT$*4"KO*9_SD;U}|mkۋ1 GrY"1Խl%x4\e7d~zҺXRbL8Ԓ фSoTK"k{X syޓyqKKE(7 d!䙑"NY_ =N|+{OD HQ*!1ik.{dyMr4& %uB̎rlUN{џQIi~E c{=G>޻F1ikʜt ]|rȍm:"|q榿!QhEMo9Ku`:#1H Θr*?sQPB=z+%kTU*@|31la)?+rm~O _޺}/^w%Q1~/=uYcۆ!Qne&EnqƯ2+1q&-673H 8"*/^%kds($nJRk$o NؑTɯyN-FNY O%&.R !Jhװƒcd4UԼAdepKcGSȮȉMۑے86 ݃JdUs[¹"]`%W8,&L#"iH90^ 9pGm,:.,lkg{Z>iJL|)A -4}g' Ecx\c9dS)͛_&X * u3DnďE9. Ҹ|;)d+ 'E c[ rzL�65JjI$!!QX\!ɦjJN!ѭNxrG0b₀Pt"v*\ɔK+l[90QsBrciO52kmɶ;B�K]97Styd]]#�ېm%Z bm$+thVl)+`m=�rų (!H.}aҭ$s+� S%ȃ)iM8&lo&@>/2e r+hG;Z ~Vߍw+1q`lKSk¹^7͕S7^j0-«g1|}\2{d_͔acH>RAb($%OmISpnx>F˃"?I+t_:_R ƖULOsb؈;vr?7?>]釀ՔH nlМp]},.E%)S[u\&pTQcG8|dB#i٦jHC %)\:KO7 qĘ>K~k>^s&u xߌ1slv7g`qr3Ű=Rp-)}Y!f2ሚ~Ċ2Sו=/6pHG_bgv勋J4hѼ"�LW64TeXo't6I0Ao3xaBnÀeo 2nJ"StIXoXˑǼqPuL/<Qw"/a9%?T$&ER"r?96 ۗ27B*�$|IJLkCHЀ\RkB ^d߻ڕ8O"5&6<ҝJ4(c4"!T$BRr㤱[I!a.i`N&?{ec=ne=!wx pD>3[A]$K$$8GAg?'O[Jz#`4%5ḅWa->zd5rCW˄StvUR%TUE 68jNKvR],!m!,CǶGq>$/,HA 9pdP0:pz^3g"Y#Hω[F4a6X6 G +AnTN"<| 9`l}~1BU iV |h*ts$jQ!8MJ}䑯ΐ{'o($ %*΄<"knzB{a"00"10V͜޳YapjO�ۄPԞT]Uv<WEnXRIJPr0( E g$)MJ#ݤ!g-\'}`{sv{L- Em?�!}7Adp~ΖHr55%rEI`b8l- ~p�TWu&`N(ΑHaz6 &d(E×R|HV.NKiLZbP#.>;-hαB׎=fdo &9'PVC9qpr_H=uDL (_8"Gp94Gh7Ț!#I 0/fn# *n.\D/Z4՚L=Ԥ|+Se&ʠM%,1t0Q%ƿiXIڀV@n&A87JSI"ڄ/Dy"K.[v+4'jNX}CJ#` LufwFRQqU ?\%?W.L8%X /քJ2PrLtlE�3 P}B]!˭z4+8L=`{<{X[6ڙ @4ئX$JI/&W̥@<b'.)lmqJN idCA3~%W얃rf ~%EHHhP'Ѷ8VUd#+5X"x7ʧ&c'vn}|G[tѢTYS]ƺi)yiHf.Ba~ᅜ \ߋqCĊќ sV8@rpT?J\C&NJdϛB|5wM|-[7z\GϜ%)h,  u;d|� I'Iy'ahƧ`}aրxψR_g=⑻[{.VK8T)9 „61+$~\@SήԖN``6$mB+cXGzܾs?yirdȈ/]dR= E/xk#Ԧd:Xk�y7J:6=.|c?^<o|dp(;q<1NI<�&Xux]v2GQ4YRBp_ 'KVI!LO|? caE!I? ,p8b<= BZ?IߋVl \o]@WBͲܗ4|}ҙ?!r. 'D*rpB:"_@Nn؆ˢ_i$ N6[EPR�Ш !`"ݠvoѕʾmEo -#>F:v1Aۑz7"#Ayˁ1liWj \6B5+a)d\D kȍɔT2)>=Ưuv`O_=/G $KJH/ 9oS&4A@I4V#p>8呤p/E)FZ+}z/~wAʃ P?DSìe BO}MBmK'}%zړw41jO~[9GLC-4|IKggkhp**1TrE qɷ9p$ɚLTĩd�BQAKD٬#WЌ=cWe4* ?}FXt8yb#�<6t(bL{:ƪRI$#l㰡yvArz-~%IVLZ"?|>K(W'ud-uBG?a'O^=D8 (k' =έisl8Y=pw/|N8~$ǝ"?DlqI0~MPV % P_ÍUVP,;<WCCyUsym50H RdD=3h3/NG|iu~'97,? �9RYjֽ _~C俆>n5�J `40$ܼwBv[#Ֆ$g S**�TE `_CSϔb*ZǏ!珧p78H~!$#KGp\RI8f?DW8f0)1N ^N2pE܋e+`'@ljpTgLf%'TZQE g֚z%©A=C .7y]$"ԚX`- DžY"ػχ!^|rk"E/%we):Ľ!؄cC+qQcB(g폳~58nӸ�%'i8Z5E |vEalI m"1`Ƒ2eDy mC7l0XeIahn}W|  {\٩(5!eЄЁףЙĽ2+9S")1jppVO=-o-GN ihp5RHIcgT�_KR:Z_=.|m2dlciE H$y$Qs (O]1*d*q WWNYce@Ԭ"s_Jo._+TUJ(6W»ڔJ#$P�>4Xz01PE Yfm=n�_xLnn$vsƋLsO=a62Gj1MrJNa`qNn> ^zO؍Xm ʐʑf[S%`g(2F0b\J˪EpiҴjRZË.Y]b5r|7)xߋ=JHdQG�XQ<|v{./~%v5\J�v|HJޕ ~K[ �1Pc^SN*ـlhEE6쬩`$r9r,9{hKZme]bI YBe Bػ j|\y(.q%'4D 1_ grEJ@NtdYhFLRb05& ĄN~dJNEzcSoQYb\\Z*:40G`R�hOj mazatP4~%DH"%'('`3<-wtvY`2uM92SCm:)`Ւ&ҋS2 >"?2.BڨDv;<8ilU"Uz(1"OvP\;f^+!֢Qe`$!&4xQ9`ԜD5%5̚ijG:C>f̏2UFߌȊCHDHP,IᒤIR3^({L==Dt#l3Rrd) p:(sˮ7@JRBk݆̦bn2a(9ɰ*q ݒsY9Ǎu1iz%57FB2(9qCO�[h@Cݡԭ7)APrLVPLR.׮ˎ e=rz:I1.&t<[-}O[n\D h̥8}K.v}6U?yIXUrHԚP_VD(jKx:QO\B".$FBˊKeՇ0Cm[J+̒OBbI]Z%KK֧}k%\\~k(VqLNj�Sb] Ж%gmh0'TG4480c7(44CT: uA&S$|q\CKiGBHm{Dj]$TOt w�]´ڭC,10+fy\jI_ ]˖80,Dϼ{)KEx+ "KwH/hADY,,MlA*g71V{Bじ,QNɞ"MXo0m\}5D`ekWJyJ,)z]MئPN� ]Qr;HRXBBR.Je}m}4nY۶Ppw*vgl_ķ^$N\18M8$!T?q" ʸdⶳCgsoʶgKeg)@:dJ쮼ϜH⧊"C@ɉ "� 9xXB#)gOsabi ̶i.%%Υ5|3)9S`5L+e9槯KiVNRBךՒ%&�Fz~qnUDR ҍСǟAnHspc 5XI _$NXoVF.4m\YqU >Z-w\.=-֯4PRT!agoi.E@:1i ;S*UU%IZ>Y2iP=8OkMZEEޞUs*.[3 F1\mxt|5xߍ_+Zj ;JNc9\EC8zI'>Ntj9̞(,YFy2Ҷ8Q8(,AgH _A[BBӍ] {%8gw\%)ֵ(Pr+ͩ:$(Ԡp!ͰFEHd,׏C1fio$IPXXr=CP`:ReŅKrh2T+4RBUEPh0C A!$|x[Y f|oEڴWY8pdI]bS"_ȧ<KNŘ:%:5e %Kp5.d+rhr>tGH7f*Y@ S/HP�R M85u² 7\Yrӝ}�lpԆ SD D�7S .>.G}plXh9o%Sb&P;-:Y=d[pF\2^-GT"7JNP P �Iiut3RW}Lv^:$XB ) wØXC^Z 3jd:9!)1׀$X- W}XvEMӯDMDh" 'PW4&?n c@iI դIʡI"\-ђ^%qlhNXo- }K_ HHh\~U -/͓K q;[W EP23 NB]+7~[$K_%~~cp? Q=PX{%&&ć`l)ڻ'tN9oL$ۗ$aUE@H4p N0rxLVOK&=0,zyIDOVQ  0 PGah:+Ai9+M8E ۲HŹ]cHf-[M*@Pr<ldE@!lj$)|ڔ,))|z`.FQD29VIwrY+WBRB'u.Tʞ?{ڒM8ʒro I%%+fE 9(9IZ" `JĈh9lHPjHʞ-rNr/m x5t-øI!گn0N4q.4GVnU?~%ˑ0$ *G@I@k fŒ8(>RqL6';M붜{f>897,JgGx%V҅8M84 &m|5r^\%ǑMurR^""{8=|rwOu=}a|$*/+h(e0LܰTd^:Z hspPYn+;Y&[(U`~LKeh@%)YvH:KF/Ou DZ1u/LЀ ?]` =ڋ"_)I*pxLbTZ@|_Vg pI ѧQT)RTQR@G9uғ+@n!~:jR8sVi ܺH>呧gFȀ؄CH4?B]~:Қ0Ir)4LQu|)عׯ d#@EPT#`|>ļz|ǻ(B@Ҫu%PKkYT,0Za/Z_ք$j0su}[JB 44ض.%'iDZAE Cj"x[ Xdsud!MNx>k1Ci¹XrYc،#E)fP_TQ%'Z E@A IQljR +ʊ )ݤm{_%'ٸ$($*!=q.4iBh KW a#H4!!q"5)))*�+E@P34bc(2ٸrߎ㆝1?J[iۡw$(šY9a1MCNQkvWrh ܛRya(D:�A%3PrVr R[BrBӄ<zV|MNJ㦘eus$!)qDdWb#p%ٕ%$(v[^@u)-rH֯4#;k*@"$}Fk(ʁBT.@R`SO#i]/IqҜ$%v`M Î.]O~^~Jՠ@xp�Jf"$3Mk*fœpSժ}!YlTWlŝXX4)D`CBp(_IOl܋)_sKU~T~%քcJdJN2"P�^NԠBˊKeB; nB$z!+a?rbM8nԚTD_¯-wR.l)@&Fᐔ0"(9ܶӚ+BrԄob|u/i|~'KIG D*Kd|~%44 d7JN}\@ P2HRnKt&;4>gP%%VrbI B+\z|}G@I^"+8I rpQkEZi#m0C՚7(J,Sh0@g_@*_I!jA_ $WZZSH( A 8rP)f!-4)3{F`b)vapXH !4XJ"{PrmW:c5)z,Үuwz셜<6,^N9o+_CU?xQNnX:F:�A%7PrW &XӠPRulpP6sBtCz&Za/j5'Qeٵ J9K|r>Ye t�Ghh01Tit+9�S;DV-%w zܦUB KN5#ScY\IHn?wjgߖ jp-<"�m(�I 6ldQh( wz\tZp,!BjN.49 9< M:*e%jtE %'n6E@fEa[0=?JeyKhPJ;|6K$(\%HMB~80_ *>V*""$N=8/?'cW68UQ'&4o>+7^s(93=BP z&v1z'zBLZ"b|H8el,9!1);Q&[ߜ+``Ο](q $PE@*dF8B㥳R�SwVI>�" XoWrrg-S_(9/<" 70xy^8||M'pށe^],ʃ#H+ѯgBkb2m*QE `H 7Cj[)>=Ym(B־!ѵHEP $ 8KPrp5Hmx"H~ێE.C"):k D"C@I8tt"(>,I)ܒ&LnbXZ.D%~txA@ɉ4"(>$.i؈:ԒXm (@4_����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/package.json��������������������������������������0000664�0000000�0000000�00000005477�14467713645�0024302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "@rjsf/material-ui", "version": "5.12.1", "main": "./dist/index.js", "module": "./lib/index.js", "types": "./lib/index.d.ts", "description": "Material UI 4 theme, fields and widgets for react-jsonschema-form", "files": [ "dist", "lib", "src" ], "scripts": { "build:ts": "rimraf lib && tsc", "build:cjs": "esbuild ./src/index.ts --bundle --outfile=dist/index.js --sourcemap --packages=external --format=cjs", "build:esm": "esbuild ./src/index.ts --bundle --outfile=dist/material-ui.esm.js --sourcemap --packages=external --format=esm", "build:umd": "rollup dist/material-ui.esm.js --format=umd --file=dist/material-ui.umd.js --name=@rjsf/material-ui", "build": "rimraf dist && npm run build:ts && npm run build:cjs && npm run build:esm && npm run build:umd", "cs-check": "prettier -l \"{src,test}/**/*.ts?(x)\"", "cs-format": "prettier \"{src,test}/**/*.ts?(x)\" --write", "lint": "eslint src test", "precommit": "lint-staged", "test": "jest", "test:update": "jest --u" }, "lint-staged": { "{src,test}/**/*.ts?(x)": [ "eslint --fix", "prettier --write" ] }, "engines": { "node": ">=14" }, "peerDependencies": { "@material-ui/core": "^4.12.3", "@material-ui/icons": "^4.11.2", "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "react": "^16.14.0 || >=17" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@material-ui/core": "^4.12.4", "@material-ui/icons": "^4.11.3", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "babel-jest": "^29.6.2", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "react": "^17.0.2", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "publishConfig": { "access": "public" }, "author": "Agustin N. R. Ramirez <agustin.ramirez@cybertec.at>", "contributors": [ "Lorenz Henk <lorenz.henk@cybertec.at>", "Heath Chiavettone <heath.chiavettone@freenome.com>" ], "keywords": [ "Material UI", "react-jsonschema-form", "jsonschema", "json-schema", "json", "schema", "form", "react", "material-ui", "mui", "rjsf-material-ui" ], "repository": { "type": "git", "url": "git+https://github.com/rjsf-team/react-jsonschema-form.git" }, "license": "Apache-2.0" } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/screenshot.png������������������������������������0000664�0000000�0000000�00000432431�14467713645�0024671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����~���Y��BiCCPICC Profile��(c``H,(aa``+) rwRR` `Ġ\\T�Qk .ȬͫOp`ݦKcG\)@$000&�% v -Rt=N׀I g -d?uӑP{nP021H$XRAIjE v/,L(QpPg^(!?�#B,)q.PP!%VC20(H,BxKqͽu5^.c`` �%am���VeXIfMM�*����i�������������������D������Š������~����ASCII���ScreenshotC<}��iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/"> <exif:PixelXDimension>1221</exif:PixelXDimension> <exif:UserComment>Screenshot</exif:UserComment> <exif:PixelYDimension>894</exif:PixelYDimension> </rdf:Description> </rdf:RDF> </x:xmpmeta> Ż ��@�IDATx-)(X` 6vwwQTD  w\gg޻wٸ~ϳ{̜3s})5#"D`"TWUUD@D@D@D@D@D@D@D@bj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " ED"wUabj" " " " " " " " E@"WBT%K7Ve˚ *Ħ%,_lذ!vP+V4eʔMKشiYb)^)W)YdLD@D@D@D@D@D KYQ?U%KPh׮YfMp<LsWǦ%믱:#=֗"q駟6SNppᄏy73ӄ@" O\:_?YhQl޽{lZ_D (hFL^"lժU5SD@D@D@D@D@D(K/0&MmK.b4Eқ�>r@V H*)(2T\bt\Yvma@a% Q�?CNJ*E }̞=;{4_3D@D@D@D@D@D@ &b󼹣a E } ̟??o><(%mڴl޼9V%JbŊi:EMnL͚5ce7?L8,YT^ԭ[>bWv?ݶmb{&;ц ̌3ܨsԩFիgԩyxA.|ئ7lv~2[vǍg-[f.]!VZ*ToոW\i~w3m4yy.bj׮,Y2ɓ')S YkРiԨ;X$_/^rQgGR\{͚5K+jiQ #q?hhkkk77v.hvin:wq^8,OfΜ9p.k/wۤθ~hgx0rms ?~믿ܶ?lrhI{ɮܾ.oҶ˖-kN;4wq\cƌ1 ,ph&MLMŊUti/RDϴD 5Vlf}P7|ЁGka(6sLsw>C9?A3gyfRQ}~~˃3&Ŷ#{iٲe"vX' w`Tw =~=]}~29a/>,6/ˉ': aw1<Lr;t`zSj!pACL7o[~ .}?̅^DЗ/Ҽ[Zh; -"È/1O=y#{׺\V3Ga~a'fǾn[(w>nsJ;&ik]w;wn.L=E]Dv& 5/ޜ;."޾g^}w#xvm㏏-Kn^E.~O9/Gy$6]v'0=\ "i>} "{'9\`N>dStiW^D@D@D@D@D@DHU)+%\Ic AQGW |p ˅yQW_9A# ƺ~Q{ィMythhN=Ԅ锞uYC\@̆ :1dw)rGyGa!H'QqϡqxIdxQ(ˉv]vG bA\+ /dQE=.҄n֬Y.sJԆom⊸zѢEZEP;vkk1(j  9"M$%jY# 6Â=6|q7XOBf<=_z%9~Ǻ2( RŢ*g?(6"j_|9]Tx:tS޽{QFEFp|w͓O>oqϧӋ=3… 3FG1Tx +a駟W D³'loygóN 3f /+8"\cS3F^LV$Ϭ3bYJ/<9veyq]\~qz#gEgc=?j3q'ʹf@(YDh^$!X0ыPLB[sxQjB'lժˁ3:4Zj۶myzQgzdhD8%aW]u /ex;zፐܶ(.]N0yS$7!cE«"h), "E?w^(r}| (/$Ca/aUT튰ɰs9.vW ![N D{キ Mcw_x:O?4%nxq /z\|#"Y|yw g\'i;ǠNn_9}YB\i7\ãpΰmqp[gJH; [o5yΕ.41F(r|GnӦAWQrp푫:bYG ^''H GD1_q:tH Ze,:݈|cxc$ѹG< !!DPB(%ac!⋹O4:W q; 6 rIi!0B;#_'|A@ {/hQsI'n) IX, #D@tԙHD, yYЫd${."~Ns͐m=tI^ ӃN-Zخ7%D`ˑk.ٯ$ s#:FX+^c>la\~M86ĮQԑyD;`m=(j}u>y�`{dӦMc`@$Q׺v+5B}Y]D@D@D@D@D@  $ǓN[PK%DVP۷}[W'AA̗c`~C�6Fޮtp!: ί;蠃2 6B֢c2e�4<8B x-x>_y_F3x^] G Ia~42rl1_~vq dm%J w}0H傆Q0m5,xs11 Yt^];O?td{//Ci86PɠL&" " " " " @y:XrLL‚v”ّPNj\xf(=xEy-Y^4<G-*UT{_/_ VBz D B~"^5*[,?WUz'Xao"D Dǒ%K ;ascvUX聾p|PDy.xY_X <کS''pᓏ+,Xɵ(͵<&Dڵk8> s /q5?dLd z/jjժ>jQyyy]p r<ϔ[,f\x;D GD1< uz x$D"/hy6B#F `p=X噦U><ag59^@De!4D A(B"gS<A†O2#L1,%O~W-aևRWD E 'Jp%^e|G\bEk+,-b`֭h'gp0H6|wms}s]92HӜݻG-4Ь^ ^<1xL\QeMg@a$#)kڴiċk0/+xT;sxDqB4AYٞ/ve(>5Y98BN=Ը7 D;Ru<xP.eD͋'RQ ^l8~L/@^DË O]ࡔȂ.XNr8T9^x!-E 3B<UG1cd*֭[u=6UKEJtBjǡ" " " " " "r$Xp?jժC �I]A /(vXO>.0Y5Hݭ[7Gy$z|MC#\x/2BbcmiA0Q^yOɼ<+/Y9f@x%x!*T߰ٳg\Ua/q$4aw d{9G!y˨FX@fqǺ\b"?דj! *Qa|pJ$z<a,Q_g[?K.q\U9ʳ . G4Lv9R( YLo-Y8O@$̗p@kr.Cbq&er3/r.ږE9"%G8bP?h}Lac$k,ʛQ,!"Dd6yd %CV\NuF̊E d(CZ֭xEM4ɉE$[8&cǎuaQg5hJw۸ "2Ccp ]$:LjX^VDC bcTԽ+Ch+ 3bPᬔe u_" " " " " "P (82 ),Ґ C .a}G l~~8CbkF&Ј#!϶mI8gm}Q /d(On'rmEy%?Y?<La!&LȰDG!w'cFS~1pO? f!% j~6(Ge"NnVE[:^Yʉ@Q#X8q=|`?H֌6w饗f/Ĵ`t6ТEؿk ?3||]v_&SKOdƱqoFs)d: rjE1o4Fj=ztl]%amQF}V7nU<Gq|Q9M4ɴ}r!E1/Ut`)̠^AQ/t3F;]`93xhm.Jt azK+(E^2ѾD@D@D@D@D@D ȑD*ܱcG (X?31-&?-A#.j͛7~e d]yԩS&![n%<ygGl#2pFT^K,UTRsGo_|D ,$W\!,G}0Mc=fZ,mVɉO҇6ޭޚALEe:یFH4!ak"I" " " " " " [产X%\`<HguZ"|$҈+x`=_I"# &EO>%UsfӦM. eX5xI)oyFJGrorl1aNޣxQN M6.ը{nZje.C/7ؘ1cO?+翐a`&#%a@n&aQ"BYnZgD.xԮ] W_>(nyr]d6N.9 yy.r61/ c>9vuW滑7lСJ+m5(u2a g^XA.!" " " " " @b@A�Bwf_{5_"{' zc;AQ0{E~L/*F1EN|:31`�<Mp=BBsSx'Jyq)|ꫯvcKn-,QmYw^͵^a3A/˰ 4nY"mD{3xDr~Kd#_MA4Cg%/u%\yu UӪ" " " " " "P zxtE,}><2c=Lnݲ>t钥<@JLJ v}e ;3/ϋO?#) /DլYӉ * f^|_yCO:Mm׮]3vi8Aܹs9!^sbx"l㙘ۉʦ \Yʉ@Q"(FrTbaDv駻˅<ҹg[s(+ 80viFx3FyD(?ACKfJO<cGl C+)W\,!a|~ \8$xňKv[!}+W6w}M(qp-v 1 [n~M^h[B:(ܲe˦.ܥKE@D@D@D@D@D M#m[+NR3gDž v"a5g@0:C.ٳ͸q̲eܾ6m) r|3fpguS_ޅYT)SRveHN)B �o8\kԨaDTs@]>7rr%90}lKyr͛7/VgD.F5S\UXNTJY9vi\t7nI?Hs]"[bE7(㉺yUt.#" " " " " L DtR N`AQD@D@D@D@D@D@D@r@9sm+I2lx|D@D@D@D@D@D@D@D@<lbuT" |'.4?t8=iOʡ4o<n#FD@D@D@D@D@D@D@D@Pdb>f_,A-@~Pd~M7dN<ؒ6!" " " " " " " E' y9rYz)U_W)]tWD@D@D@D@D@D@D@D寽ڥ@(w| Q,k" " " " " " " " K@XE@D@D@D@D@D@D@D@D|]/b_{v)" " " " " " " "JsdFLYdmؔꅮ|́2WiVJ*$" " " " " "Pt Y̙3ǬXl޼PӚvmg*Wlׯoʕ+c-F;"!yG cl4KD@D@D@D@D@D@?~Sd"li7͚5˲0b>p]@sE@D@D@D@D@D@D�C AJ*tҦD$TSjA'qFST)W m&MTZ4!'>-(X]~ ^bŊ+X%K4ŋw!xeR}Xbⓘ)SFX9eEHlniKI+tUq(X<ʴSk*&Q,Z*+" " " " " " " "P(H+QHDTh@ QPFUBD@D@D@D@D@D@D@D R" " " " " " " " DBqU d6mdfϞm6nܘYv;wnr x% Q,wj" " " " " " " 9D`ѢE桇2VOsɓ'']o1^xar x% Q,wj" " " " " " " 9D`ٲeffb ̥^jիSY)/qJ5oU)WjGSf5ѳ̪uKδjT<OM9~@;ը`JLWo;78kjSLIS| ˢk͎ʛb2, _k7zU}'ڡgTBSt7Doٸ_b|?f݆Mv9~|ko4V7 mZg[a?טJeK}V[.KmyyT*[T{^-t/*[X]8oشn[W<rnK/fߗիZΔ.h&_ivSɔ-U<IMg3wRҶoJ9joقF#Ϙu*JjfX`y7t_;S9餓Lڵ% J*oob SN|& A1yc+Q"yrfS~XbŊ|RW4}̙3vm34Yx}5\c<ʔ)c=\s!7nyG]Yfn[o5?y]뮻qSNq>"k֬iza=PW}ԯ_߅K~'/wƍ 0EZ 7`vuW~xp 栃rE=+ٶ<kf>hS\~5k̇~@FxNQO od^54UѼuIsk?>m('*1 bo>Tɏ0{"ƽfܫٳ^l_Ll[+=T3 v1;nMsctlR˼|FL3m_}Go;6wM4w߷XGU<}V!?;|o)O|cNm\)G3O6~vL+tǓmzv ߛqg-%GJ"ζܯYar{O f88A] {3W4.秿Ȝ7n2-v,\|s⁣2bn?f| l`/|3\jV/l6Ѿj5W|~meY9mժꪫV)'+۵kWsW>;6[sך_5ӲAql瞑@d.]&M\p&8djy!'?Kx|ɶ/R̼欳rQ aN:#(.t~۴ofذa]vN,cW\q`?yGLJL۶m;vXnٺuk'ֲ"1ַo_۳gOs=g,+Wʮ_wݺuN|+VH_L{F2w}wLC馛*;g^(7uL]ҜdE֛N`{>潱ѿ#d|N :KM~5[Fa lԮmQ,7i[G@Ln{KY3ێۣgZ7}ۥ++N]捰ii!{6x:yy! `=NZo|i\ `z斷vx&OQɾ`_xCX<뀝]uhl hE$cf9}gٓq zx!f/+Ño5K7,YY>:Ŝi}a<g USL&C,Ip7Dlׯ_r*gu5^Ë',!p#<믿6 .4wɪU)<“QF_~-͛(ֽ{wɉGso3( Q%Kyc[ŋw.}M0yA6BZoy8o=V\wGԪXrrF)lhj3͇?16cjT(%x;ssf}!㧙[<1vzNfؤNl+[Y~ NhHw}J٥י^3<'h;MC3Q-ꙎV@2:3lPgcjZu_'uQG +ًܼ;> <s_]RՆjukQ\ѥ ݢ#0/~ h߸}p6m1Mq/͠_h5|$h[LYle;GZOnI mhiX{BK'&Ú'*\dy9ƑY.w_jEKxv1o<B `> 鸹e}NM!n;ת` ~=ͼd=hvn}cvqaff]aN Mxl!Mc=ZoN1Gx=ey!|?})۞%O'/ssg{1o{«a.Xi:QۅV{Y/l2hi׸=}XZn޾Ydl{3vu]e}qYmcwx3Z =۲928awC{|<ݒޯxAcqׯm'Mu=ѯMvr'm> W{)^9\/{8`"z#46xm4~Kݪ]f޻)io_zgZOx}栦;8nsqmξg[rױ~p/=ūҶ3^)~>=�_n{㞀s5L]/oi 4y_ΏƻsZӶ 9첻 "{?!ؾ_p/ ?Kݹwsw\{/G%y2o]wh=|"Fs�/9L޽ !b7xclgO<P<M"/D(;?v!dt1zͣIѼysu#^uB BHnٲey7;w6;A44hB8&", o?lذnKsaK+{oaư`-˾'L`B()SnbB6i4hں\_e?yg "?:lO>i'K7poމWbw1*S9wTLWV``;~ӡ(9<f}-(yI*oͽCde\uL޳oۇa:x'a8/W; Ea>|}yzT' JC<8ccs嫣cyφ@>>d!֣z~v+'X_ۡoE :Xc-v>:َf  ?];䶅W odj3ژVms""Bn+ZQyEkl&y{0""yCQ {ZƸv O2HFgAgƪM.D;V3x S#[+D9`~z[n,gl?F!MQFnG;ni߮糿cݚP?Adq9=HƶU3u8YdE6?ţ~扎9ȡV1߱mg=0#v;?ѩzI0ፗ׼>U 'tB6ds ݹAA?^eAh+~}Mc2C~:cdKӐ \=ݯx1s=_2V\[yOV op}Iw]Ɗr璗~ph*6i18Ίf?[fՃ gu|Qgw1Q[!ʵ6;:A,oQ}6Qyy *_xn+V+`^;լ =%9+R/&nwb)kAZ%x:yp+7/pw-^sf_r`\zw+9/‚ܓ"` Q֋{~B];d{B;k~ŃLy~7>!@>d <Yve筂�DYr@BW~g!$UZՉn]3fiD.%$6nh&M䎇{?~ C#d駟v}.bQG劵hӝy\xe^Xw' f_AԿm&0#_ Kۏp˒%K5jZli:t7B1c/}0Lx5aQƵ6tq̲%1D0İ8<|_GOkmvox)wN^HQ}!ۇ~:/f9a/Xe8VvuGp҂v%Gg8]p}tkF=s7! GC6 4x݃z.@눘PYa>]y7v�n{wbtl?w?wHx4 []󠏗 x~l <u`&۰64W[ pD<Qasn#; сcC?YCՍy*4!~ŠKc C"}vGyCn8yq.tvib4IuפNEWwBb4/ /Kkn^Ɗs+0+�ȑH2^$3||`4Ё!^6J!l1k:Q EɾtvcI~KDo<nx�&Ϗ~cfEul{[!o\xQjt~8&BM%(-Ah:}=p﷋ [sf=QGOq>/upS$k<tܽ_zDC^_#'eOq7o_K݀T~D ]Ƿ0y /|68PrgV^c[뜼}& mV(@BHޱcG3qD':E1<|R~"WY մh>u>3s]wBnf'@&]s5<ue1.^mz!8^qAcG 7Txt{!ǩTR ѧN꼉O%^|Řm<F%_74޼WxᭉEb߃ƶ#aΚ5+Xs=c[=a(y8/L9�F'υ6eŐ7ma#7X@g`|ͺva^rfL#cbYʱt},6JX_~_Mmr =,lJ?qaQWuen ,YY|GrtJH'Q /lfo6lH.EO@NlM"?z0>d;SǏuD6䔰LtSw^of;Fx_\k=|T6G$'~-^O|P&m<o#^l jwz?}:}w(>]0+ȥK(o[wb5D<lBGœCMЍKxw:PYnԱ/*BZ&#5rpfq"[ovx"/i \O [^1'd=ݯ"Rmm`2Oε7҇6K~mKuwXG<=GSiK~|}6YyΜp\3렟j( Ğmc`CZWvex3\Od{|*u䷟랗<޸tgឭ3K SE"ȽsOł{3.pcp4e}1Cuv:`_|G7 D z3wu^Uxamxސ_P0<?FKdP1r>$)e;3g%Pw_?Kh% 1 Ac&$NVKȗ5%�OH؏J/JBtY"^^MD ϣ FY1$yErغ?m,|P䎗!B(û!o OgXh'n}X w?0MpN:oGMߒ'ŗMO𖒰)y[q˃Y51S 6Q=~{ar)t5\YN{ؖA0 ZTXSpy^~I*_~A\{ >36B9B $4DI ]9FXd?Kނls!P��@�IDAT^ �mEK1/!mB휀3̑uy_Xs'咇kٰ$g Cyհ0KCSy+JȖ[a1h_ɵa2*9%>}}Λ_!0о:0rV۝XWtض>ׅg4޹cj[J[DE٬O7dtnYG†lMzzA&J3_O}ENvʯO_D_0W_?_jח\5Gо->Mm|iQ-}mYC 1+҉&, #I?F.EG#Fp^a1 ƈ~ &L6m4r$F]úmACbt>o~_~Z@0x5Dت\hxR"N6EgX՝\+@s9uS B0z#sY1_e}ee[*�bXN b-KGcV tokd w`RnwӴ<$ARB8JK>6L759ٰ6?^`B!Vu*o5S\lc$<F^vڹaO(yy֟F-.FrsBHOb|o3!Cm!r`^�eJmvb.mHM5쁭y܄G>& zt*oB>C d\yסd>`[  OylNjw3H{uq-q\ sr^omxOzᙊW kP;|<tWݽ)tS!cxmxzcpz6/lgn'%xGέqBɭi<9_y=Oo"~%_jsu'`xJ-B`=v~O-Ẑݧږ|{[D}6Y;9q\xCATf_۪Mw1 :ӵ3uou7]Vϣlm7uJy!MM0pM䟿_ hCxa#o<g͋k{ m# #wL/$>x0ᡂ]tE,G8 %l!!!c<cMx1vYnݺ|P_OBƎkvm7L 7+A #,8X˗; x~q= 4Z40.]8 A-/!a1׏JD[ MFdۄS+bug_9脼vJ~+:_\w;wmެ0r] 3J9l'-r9|K+]EZ6}HᡍA$!;>oGaE.uou<p!)<V░4xcA&FpcNL:17u6o ?r?+68xmAcD@G`wQ7>>5l BQ띫m2ZW7xӴ PyaYV#6E{掴]x83rN8?EFmP5y5]}R5a6aO<'wv)&kƵ{c]o8>#0eUʖm`:p$̌}щ[nC1o;Ά'#2#7:OXQ,0>OrE<.C!{)p_\icAaͭ%kK$- {hK})6ϵu>[F#[V\4o;:a/z~ki󼔸m| ׄ7^x$PIsE53{{>#\!\x^xQudIq#w?"1ʸr#buY!0c Hآcļ&/HMbpto0b%#C B� L 1ޗ!N>R"(ȗx �LuDe} Jg K(8E]b31 8%LPm0M/QbY5B:򌗻,Q'gb<]ҏvĴ}mV$ȏ$9=AioڇL°.:h7^QltP{b:s[Wke?`�o$#-qQEG<nⱇu& 7Nϯl޼̎r0n8rO\_dG70:YQ[ FH) J`i":5I U @{!?ؐ#;�Լ[-d;/ߎ9voUs^J$N�x\.(xЈ]J/>Ѝ`ʌD.yF`E' ͷik砵G .8e_;+܂zC[Ƈ}ax1hDZ4 #shCSgMV%'!z{Iy/!??~X}vO[7 n&=0 \юֻ S) 1R^(bǻK1)޻1=mP^ٽ8_$oNB+x~c1Hܒ/ʒr<D�1og aXs?-laCbK<qW觃nx_{*~g%F0Ї0*:rB$ysM7]U:ud.iBPD00Z3_pT=_e=c9Yn;^H]FU3h|{vf@,o[ID@D hl6Y+Z$vYXrp1bq.|qI\3#(P»r>#'66 B$ZZ /OExa*a\-&< pق<MW\M-;oڄ/_j;`im5r0vn760!w<9 )]!`nEȧ=2J9ʂID^$H^i;Wa4Ѻy81C Ȫe~fQm`o #t'uTYG~K-q~j68mt2)S Y~o^xUQ٩#<͢ryE{*K1=/{ ,De,FE&33JV6'х׉m/x!De;j۲]A4HV09Ҵm6pY0j,J&~헥j癧Xh[ƃ0a6Y1:9%eeUcǨR[^em>XTi7|]2/,.zqvE'B>H>LԞ{hDm+Ѳ>i>Mjؙk9zs^ dUƼW_[V1Yq)T?ǗUV9ey/g[u(EtيxG\*mcMޑj ί7)S7T N#[ԾsI9cK{Npiz N:ɐ;Ň)FmJ2>{q,+MTv[˾IY9 *#"WEˍʭo""l|aݝ'HnG(PR6p:ͯ<{ے4j[4XGOv섪sϐ?32LD@D@ /ᓅ}~Of@Pd3@y6UKk@(s,%(4tӦM>H'@{MeZbM" " " " " " "2^Xd4啵1Fݥ&0$|HD4-" " " " " " "`ׯofϞm.\(1&Jͪ'ZaHN\rYffΜ9f֬Y$2HGL!F{f$eʉ@#ФI"VkUPdQ9Ӫ@@JXc+Kfⓙ戀@:HI;pZX9&ISRŮ:tw#ohpLD@D@D@D@D@D@D@D Z*9~r̈)̺ RYPE C AY*6)b #" " " " " " " "P>Y" " " " " " " " DxVU'$%ģ" " " " " " " " DxVU'$%ģ" " " " " " " " DxVU'$%ģ" " " " " " " " DxVU'J$\" " " " " "PH,XOZwٜtIv Ξ=;xztұy|͊+L:u2OubfƍF],[ԫW/ryNܰacݺu Mն7mdNjj֬iUU>֬Yc̙͛_e3+W67ʕKbZ˱iC" " " " " "xӪU+s$=oƌ3\uU 6o<w\veC1Ŋ3_~kͯl*3zm/C=,m?Ac5|iРm9F]DkƜqYޯ f�Ǐo6lsޮغd3sLӬY3 cy?_&O|ůd"?7|O&<s'l|zNK\`sOӯ_kW7e˖MJl3<vamV:o�ב:7i$WǖS,ajS" " " " " E@ \8x!!=c˗^z)^p^djȐ!ej׮ꫯ6+W-_n;LǎGĶǖmʲ'|D}ᇦgϞNc)SO< ><93ĦY֭[7W_<f̘[6m4s 2ʋ.ȕe;xExᇝg<x;vXr)O?~}9aW_u:tPW/5:]w;Gx1 S)BxẅuβC@X9ת@oܞ~77w߹=zGyĐ -r!ry;a 쭷ފ5ΆsqǙW^y7A ~osG<SHQFNd<y?I&oM#!Q[DYf<-Z䎋P^zpGy=UcL2xPQF/-Z0騣r"a\%9cvi'sM7A#s-[˻zx7W^y/LΝ sMB3'֐ɨK]㨲W8K̥۱Zy#wq/szqӿf2yᢿֺׂ^`VPdNl:mlܴ,^ԨPƔ,FfFC_p%o P)KjeVqYd?wߦnSqfkL=n]܃ۗ*akו4߳,w״0]KU%k?q7/]4VpWVWJ=Uη{elZbh;ޙU d|4/wkZqҥVJeKu+ejr~+_z!.2)$OCooFءjڰ4rժUː 1D/@4w\J*;^jx,hKqD>?C=d @x'b9c3vXC^~mBkӦYxq?믿WYŊ<B% e#PgW۶mE "#N=T o֭[.]8/;0Ww57 p-8xM> 0'G2@&/wlQN(SiRQe&֘ϗN}c{{IEsjX|5iaën;thlؔ)Qt7s^\G1Ʋ8ݴgGV*_y6sR3v2sqÅ/2s=b?h>7׌Px#_F'l2Ft ӤvHtsM\jSX2{7p݂0};'յ<z?:d-o9ګAdǯa :z2ss# B7S˜?/,,[~պ f[j92R| z.8p~vۏ˔nJyE:͸˃U2{uG1}杹ȹm}>ǤςO�Zjpۻyx; W죏>r"xA:8Q?`2f@blPhBaBs_/k/;v_zAy;vtW0ĒxZ˥Kɸxrޚ )E4C "7q^ě xt>EpQ <u7bB7x~>E '٩xc|?y O_b^`Ct}=2xRȎx~ךz$]n^GL{Ǫq+6;zgӖMjŪ7uJUÚ%(z|soixm ޭŢ˥Jlgug^޴/Oie=<OsK?7'OAb}Gvӭ7ޘ:RO/gYVɉ2^BwGr"9݂ ab"k6[1DkJ(nn96U%B/Mk:5uZg=Ϋ{WVǾ;֣3'l[r 0qDw $(+PD[9y(4p@1FH$B Lp~ڋ@~y;gG\ی_xuInuex!{4r,cUlo,Y2?Va o(YhZ:w<Qv*£sߚn[>iyjTiƵ*7iS:xܮ{Hy)̮+Gz6ig 77OgZ6jF-5mhiw2,؁yƙ1-+xu{ˍvEHEgCBqoʻ>w~ `q߉-]ǿoCC0Y۷N&8{ԭlzѼ>jʃܾqJra"[EjW.B-vY03ȶ)ag[,iX{BK+Z[\�y2!;gdz<cݪۛym&h;լw}<޼e=^j{ꫩֳͧ:̟m/^?\prGTkN+u bO^g,Ym<#qe :w-v^}~:v2GYI{_>P\)ž;>|m;~4Ͻ�ӮGFN(HmFqm<Ż//ו2AK ?}\ ;zp̂ȏx3X3ˆs_N?g}'2k i zqxo05V<4qۊ9ֻ-xw~ojfx[\ޟjQ\iIxrvq/9>#/~k;[[:қ63<|n_ ýSgLsߘlhi}6n<qf'ts,qm+HswӖ9ã/rVԷ-zwM8΋z9}.5v]< 4Ѷyf}V@h;PD۠9WvP 40>W HYԑGg~~۰abRXݺu̙3w{?!xȞQf}qxqcQ9`6.1c:uο]vŽ"ٽ#FbE}*Uʉiƍs/@Նy/ק yhe?F8vj.՝ Fǘٳۙ[74c>FGj7ZQg5 qz09>(Q�l얷2l> 7�+י2Ak.!|훩 lPхv!oґo+|126|my `1 DxX"Հ=tD\4M9t^cF6x}}̶fۊdmN6peDwjφS>>d! uȜm#OUoy'NmÒii<컖qG"+e4q =npO pt8t>GtOh|dp:޵^*Y,Q{ 2B8ֆlg;#zzKt vÛ5Mm8d/D/<?<܉{^HC|TP\f>WQeD`]=/s "n+Ȯ^){f:~V|ź? |ä}\+(c}}=CqTqeO&/B[Gf(cᓈs4Dy71~>w˻݊jZ۬(z =Z5p9[]OfȄXN^Kb|I<-Yខ C/ʳ1xA,XM6{e~=-k,̈%F|{}A.K~oߗQ+ ]{gN>dC.+r^ V?cm/-u{짟~r! ;t!xD~w"x:q$'s1JaC['w84QWm03 .t8FD7/9"J1PJ/r>1^yYgo 2?eX{t egAZ+~h=]8Yש$=O [ekxYV;ы0FV(r{~w x`x0ȗIc4 1V7V5Ϗfn=`Z ;Ϭ 'Ô{<UG.5oxKx-y Uͷ<Dl;ZO"r%6vK A˞u\i3юsH{[B?rx!lIl_ڶ-o}yral7|8'$星BZo-bLΏ3]t?G\6m7>V8J{<\|K/K]Bd7[O5 [xzn0<D߽ fA ._{{u 9nKCLO/1,Y'g?N5*XOYoΊܟg_L{=z^s.d0(o׾ mrl[//D<X3~Wh#o\|@̻vŭg[m=Η~,C}L'r:?o%i^$'u4d}<\m%wȋKVYoZ۴t:"(#r{{va<.贫4۽c^o}~C8d,Xwӥ^ʤ3BO8l\brti9-c`x[qnw}N ?`%"61c׮]NXŅLn1yC|we$2lE뮻/<c( ב\lݻw駟n<tKcwA D1ğ ]a9Sxber_xq aߝyB{0A o v|AXܥֻ+<,?~{< <(!z&bCU=3RQb/%˧'abt|^Yt3#2~_~ۊN>ϗC b"@~Vez[oF�;bP%f$CG Z#aq Úb0~|Ǔ,Y{ ~NV٣NLu^; 2s;ŋb{m teP(K{XϚ67$9WtkbveCJXwbwMFLˀO]+l"jcl !É,DF $08/Ŧo uM> pcv͡E}/7&uLc['URu ʳm,++tt: <P^'A[ 'K_x<}7.z\0}~dx˙Ϩ^ZA$'a~Aa|rcx>`)C#ӈNxOIa<`g<(6\ (AP ""(`ƈ9+zAkDP~sfbDL $ o:{gg3LOwMU5iҙrb| ߒ%K|̰e$VXzQd+V +^uѣW0bAG,ɨ+{t!nyC'@ 9ڦnݺz .sn6K?w!,hK;YGp (›΅? (@_bPT .W(oAك+MT4Vs0e9/f^wK/9\oyewޢvvn+X@aq~MULA6n&*zgO)g}r 2q 8Ml9ֽ?M .4dmvn]?EV ph(Įw1Prsk8y J忣ۓ]t{gt`uJb\ͤ;>*^g[AX[_Dxi8>S$U[T= On8ܻcv.츾sͳ~cA`كƒ{?oS-[Dm_f_XhqyLL gT{(D}\43v_\g[4oxaE.$U?ø ]e~84?wq/Br<,i=;\�3 .ުxж#Э[74h <8ePAcPl:u,ѣi~*΢ۋ{tTBiRPY<FO�3\q>F]bq]8аnĥ㏷~ǚ+@)ŒO7$.AN;U.J Ϻl{;b ]XabȐHjPw4H}A;+;6ÝY[9NySO}&W|ws) nfAxSLn@Aq i2퓺 p+@""Wңv\I拰�kKCC**+dY']wzo߻FjG+ep%%.M#HzNJ>u@Aqbrl: 0ƽK脌IR](vkPӯbx hV5I@`YIypkEgV$U,?opêNxkPvܻ?t/}p/EPH-_EVd<>K\p ?f3/?[;dwctqEPEu!AR-8}G rSI\0g%Nb)Kv$m,Ȅr#HQEr΂<(C{d6Nj٥VDl2{v)XϞ=?l }*L!Pj#]0O"%-tt%[^/.X$ 9= ad UXڛXfV\t.yrE@W>O8jlż֣.Wku])Ofa[( 7YI>wj}^r .4.C'+I))I:[5GXta@uJ{be@b�V%~q`wD"g/*d>Xv|=?&w9!^t6N.вot۾YmXWXl7(Nƹ8gQܼ.s|-imG:%yyT[H-rX~"ׇOY-$hz~$U+n^PJ0%as[Hi#&N׾UN5S=c3)X\'g<c6DXlcܪ'd/=p}q'8<Q7",TBSbe~s=V-+ WLZ UV&N\(B >HQP.g L}< {ut|έOؘhҬY3L,8,/YDE( GyY>lcъ oFξ:x+',0a۷a V[m۶ϋV%"@Y1 /V^!v疼?ݭHlO?߭路7}`So9_Kv<Sf%J78BLV؊bwzίX& xY7۸J2H-S0 fbzʃc gi완;.S N=ᅫSl^;{YB�hTJ?r+ Ҿhn +;neW]y0hz qF:k b k䇲n9gg}@?YQ1?m½Ȋ,7 'ҽ^r'97.VM}D\%FnY)cȟ Ыvp++Բ6Ec$=VrGo~g[cZ8[-891l+Uɣg{)ɐĐ ew>S!~q 8XR!F<Bɀ}=BNLxB%(%0DvWqaXa$,|?w~C.X]-p/1ptd.nu ^@JRV<]7mg-Y+x1 sk뮓[ES2l jzM<ٯj 5 /# ү_?+O|AH?l|r*.X8O<l*#kH۱cG* 3}l?G~owfn#&3@͘? S6c̿׵hDy\7狺UÂX('ʻ4ceZAYẊv& db小C>QDi2;ACB[.qj(^q%a$Zg긢_(?k,+ړFkk;i47캧š%=$YuF/誋oxmeո ^z]"Ա D{ԘM ;t/gNxd'hµ[=g/ʪX@;9owS)=pJD@D 6͛7Pn 2$XVSeUV5Ū % N|Imذa{yYʕYT,C/&U X_~?v%R:'N3@|f0c/ۂ(Ģm@l'm@g6; zc1<p;yȹP2OD$ KV\&&e/Mqo+m5h_|C>a{cLvc-e͹];?b4LcH=+8 >''p7]4.Sy>NcOPەpb{~;F\lݣR^9-" _r-v۴ilر /YgY(,Ȃ4h ǵKQzo(bR"SN+Vx͐npS"@Ÿ[76W܈\b!vmf9.̛.0 3ߡy+(/V+2_is)ңkX>s$1.y횖 V" "P>SӢc=_W? ƓѣGۡjC5ke]'Yt?G: ڵkAʤX !?b1'"~QWq %e5G7/{VE@D `E/##vzC=}GyĹW*UG;&[޽s3p㔈@2X28'" " " " " " ">bժUzaƍK̙3;p@E匂kѢEJ+&B@xJ;ξk{1_|w 'qH)6� 1,rK6#qdIbU\qٳ֨Q[ 0+bKռyskO=wݒU)=ؤ-'s@?D@D@D@D@D@D@D@@aWb\l͟?'W*eXׯ%Kb&۰a-_ܶjh<߱&U3?fR:G'nU%(# B̰u+d*/"@rieRSE@D@D@D@D@D@D@D@ D@JaA" " " " " " " " ebeTvR@t@Y& XYn=]D@D@D@D@D@D@D@D@+6$" " " " " " @ŊmÆ 廒QW,x7VME@D@D@D@D@D@D m5kִ 'YRlikTD@D@D@D@D@D@&ШQ#1c͝;\[a!F+ul<*d㩮j*" " " " " " ".UVofK.+T:\&C!VZ2Uvp+?-" " " " " " " "P T*eVE@D@D@D@D@D ̙c ~)M6nݺ6l2- ֬Yc?͟?vqGn {ņSOڵ:'ZhV[ezQU>,6VUE@D@D@D@D`c&0`�kݺk.%?&L`zJEߞ+]Æ w9tq6{l{!C=Ԛ5kni+μC!nFy ��@�IDAT?_~aSϡCzN:%L" "Ph((*'X: 1*Bt,|Ao6i~曶>X׮]mڴiҥK;sr}'| E8.H1?;vlA1" "/R @ӧۣ>j={O<ѶrKP5ink޼p >#+!Co:t0Q(P~mN;4#O/#G�秜rv_[|aE#l?3Z83'ۣy+}o-ZmX% vZovGz0\r%xY~C~6lwgs;lyO>;K}@H)V l:HD@D@D@D@D`c'{;wcqP-[̆n=]pvs=v}w< Od޼y^!Vzu#e˖v(wn&Mڎ=X{衇n-JzƏӧw#u]w٭jG:ʾ馛l<('>R%>|Ay{駽;찃]uUթSdn%Kԧ ̝;3H<nݺ~? vm}|_|9ݻoyːO>iQ (İjР]jUyyF]<5jd[o+a{ |^qWre;Rg(B@}Ngy߅ZTqA:f[`| ~rR"" % XA8�7|<,p]Dj֬?Ub@{, HX%1 &\g͚eu 5~^!<B}^{[oe D2sL+jFP˼?#X2odyiD }2JCE@D@D@D@D@D MX]!'N{n(paDpM6$vS㞉`]gVPEczM<99& %+_*$ >Tdݺu~WlugUN,_(;=f" "! K }t j+պuk*0gA袋rX9fk:%w_kذ?.޿J*<K~XfMC)S|\06sO-^o6K$M(mxd)@ @;?/[>g w:jժ?Sdn,ΰ_?蠃EQ∻$1ʪT~uK/+X3,oN¨&fopiwWd�VU#-nK,u`UF=N (Un Wʵs}_6k{XURb)Dz6}^]ֻkfuW2kj[&U/X>:v}7K +?RQr=q]/w'q#[䚍qY˶xµyPD.[GYjԏ2ј /Y}|9e%jsuz'n~ZXbRX0wlf,(ti¦ŭ+ ^{-'XŊz}~k&Oq|*;餓yQX‹U)"-b_}a$˛IP;̧Qc̰�vmʖ'ٸq wNk: 2ڷooz \Xpy)҇SD@Kc쓧TvnIۗb{mW*.KN &zeݟkZ(s=wwyybvI]lYq$( mS3:0lͳ(놷#vhZ߷nos}eiL;ߞ{n=v1=r%t?8&vWF. vkش+iS\`'=0vWF_{sYI'G/nhUr=kiV#ZF^3gO`丙rc3?6=_d6Nٷ]~<JkC,ҏlaQ}|i7ܖ0ﺵ <c۪Z*7"#W2ܾ$tjf=ORJc yc_?qͳgVCeZ韤DcvR?NzJ6$ … `0/ObqnVt,JY~"r5RD+orիW{Ͱ@<`X»w0dPœ@,coh=ָv5KsۼJL^RSŞ/7x}Pfd?$l 6mr8bSM,IRmtSn>mͲ,M_bOkm'8e.]]L<k㸇r4vN<9z-Rqnmf9Jm;kL[(m2`{q ou Ew&H,Џc ypJJ }ֵʛToo~gGizwU+Sh߼Jეc.;9ܗyؕSܮqc|mwq<w>rg<#u`Sk憕k_/p<yo;c|Q_uhVߍL`֭}֭ 4(B*YXꇠ9(tTe@VnݜdX|%S?/(6,6IM`k$.͟|?Ͽ6u<>FZgQM 9+歰;յ+ݚ7i-ύgʛTkn쪣vF~o ov_ßs;ǃn:΂Tg%[=Lb QgIuXv}-ݘ<9 N:'y["[�2N3-*ԸNu?MDx3_ כg>ٽmcU+om \Ӳ<tWksN޷:Wvo[soǬ,FNsgryn &oϷuߝ{SwioF6zv١YEό{t54Qx.wkl $ nrmU]]Z6Wt9Ky˳xs 6d5FِdUƸX.r^];l7_7H<Dy\ rV56lۮ{bMpUٕ۵7⿟ܽ&<|g:vm=> ilk]sluͻv˺]z˯=t[̸暺S[X%&ꇸb0GaPCv7gM]L"x<vGqQ{>aSܽ3dOgQπ_1^E'८aym#e]{l2ɳesSZ$_{Ӝ_+OPiw}?$\Xi*}KjTdV7iV{ŵe}YqB쪣۱{go$t} ;=naoI>2[FuGaC[=h?J{؍?r/,vz s/mI6fK=~./6΍F\9s=3=EN zo[Xgc3GЪ(_z'{D3 .{쪻EU,:k^ʏW/ilHY(s ]_fˏW M(sl/Da{4])s77&`E6Y}'>O}nL uYWfX>AԷnpζc n׿Dau,àM>Nڧ߈i^ V0GQϕJr7]yqo нZvI 8Oה3IL_Īn xyȑl_NHFkSZ nF�@t"څ4S1qE~g=vA;vyv}r_O~fkTv;um܋x[<MtWLl׺k?e,L(KbX3sWVOcNnϹA9țNs 'FO'k=AL]cSfe5nçɤKvwr#ݽn?io?Pb %kb(_L(phЦ.W5}1AJ Oݳ9)ȋx,H26LF`B7]U-=D^++Y?(vPv?do~J9Q\&b{7jB"Ha @Q͵3VH^j9ϤKv.@i;Y4~m}S,ꎤ㸎qe/2[Nv}]Jׅ|^}p: ^Gqss_v'V0(٧2pL< ʴG}otɞ`Bj %{Ob~Β(s?Uy \q`_M_c_r;: pCy)l̖yc~˼e`ׄ_z nܑ36ܲh]bϝoܸ'!ɞ>g9J(s^)nѼ{9YRcd1rSBa] [qx ,,P"b݄mwߜzrEA2,3!bR08FA$2/ g +k=n FMkXW٨$7ּm!EOnwi)(?9o3IruCW7&Ih,B-" o ,bAP<\kOۖeɇ{A#r �(q)5 x+ٖh |>Rmi%qf@JC9#;h#,o|SaqusݽŒ8@Bժf9%ҙo޽q-#g(ʂsʙDIHkYgCݟ.L,g+'92#Q\c"}o7 jZ%WM7{bޟ?Ώr g  $?Zc9P&:K!f:gUzR60SN|:Ǭ6f+qCdydetba[4y^$eOS:NroȃN \t٫iS0#ި!͏nd) }0JӜk(xZS4!0oqIDžt| VX纗gwQ+{NtݤSK\ЗbiLαf|?wsP~cmDX*/94:2duuga<2qj'g;fKsvۺ9oOp} ϸ_01%gV~'.ҔO>QRo,+sV| J+"P*J1, ɳI Y R]Y[]X|YNirY-) P PO槸2v i}20ƅn./ x B\.}zP{):Z)b+O,0 buseOq5 eT(~tʳ po/'^b?_7^ClDWN$G(PPN&'4߻by9J1D= ͎RlI۟VA*oݱ8dbmH (]L"c]ŸK&]7dMoPawȳ$??`]CLn50SX|䂖cS}uG)pN7HG?mYC>Rb oSpmh bbƐ_{1f ܭ^fIvLOwkP)^tz*;n\W郃BT)e2WңoD p+V EYܑ#y = y~-l)po:vO[2 E Ltl7y.ת^/ެHi <p+.uSD}\G߭=ފZF͋-V Dwؘ3#+Z77+J&9›ՠD71p b|&}Sb0zbu!ܘˣAAX,o3-'Q1I|bSG˵C:/4&0' mJYoa6¤f"X>kbE 0&^ )E'A!Md!x\XOIJ-*ي=(?M#7ĺQdv]( ҽBp)#aL&LL?pVhܐxwRc%D;q=p]kRp]X%p ǦIfSj$?PQ]z I^LT7z!6]T 7Ve~6z>';O|:A9E_H.$ ^õ/7UpH7UeG?$ꔗ+{:W5) ԡOKY4Eʓh3ۆ~^`?.U3fKtO8X;Z_?qdݞ)qkX3 W:c b˰OsH:e{_ b"PJ1ܸքGV2`t dKD @/p[8tn=8`c2IA_PJDT~V||݄ cg/U<q4 jYA^pʱxSLxSg[`)D"¶n!MW uC hn1Ub<!NgEhhF+ ;d^΂5wsgp!_2 \oXB ( O_7e�CxV6$ )=*z,ᢊTm K&a1^pi m6Cy$:M܏# (TUΰ$K&ؠ8ʏ*룠bbO($|^)̽ѨVdwdy}@|&;O&{[׻xE\Qrhjbs!YZ J`6 QN)<P6O|=aZ}ny *~'UM\2U?o{t})t˼d)gA4 ycFa_&|b9ȋ!^ņl`!'P$Gʏ},ք5iƲ3f@|M-gp}(b.1l8~7*~Lb" ( 7=KW9&=� a96pT7+yqނيy7G]2DU˞<'q+8jn1pU rݔ:IgڟjfBDЉ>t/k}%y ft{|}[ybc񆗕Bώ \ rWkLr&/K݉@;WH*UpC}Ja <|Pw1 ljHqś} IX E(o#lrqhc䪗b3D%ڞWTGQދ }>A@㾣 ʠtΓ}01#GSQAȂ  W;V2>FK$U҅O,5)QE)hCx6Q]4}<˳o|C(IE'㗬yiF?j}LiKAlʜs =N/YIIvK@܅YD;gIo;х%+K- }+{эmQrG-$*_:c=WC> c+gx·c]D@D@D%j) q"+* )ʮn9KR#&˱][7a c%XnԟV8$;rSa9jP]$%ALAwmŽLY-UK#ĉ׭u8T?c<* % ;4,J{u<YX!yIsi7_F]$mȇ&85.N1Hx{߭ zSfB W&{Rdۥa7,`S\[}<}}5V x;>%ۃ$B@6K<b=81‚#(铵 ̱!-JFOh!=α{ٵe/d1|fXQeWUSdlBCR~ꇢ {}`-ŠiBUX)̽]w>H~fo繒<$`jrLGLz8[Ʋ 9I>wGyls ]VEBۇ}kgn +ǻw ɋ3Uy9QQ%=Ya!ҔtlZCez^н d%jV]FC8UׯOX*C{@i(<_qA4kɓ%G8\2pLGZ4;}@gupBKKAU v-gzy6z CG^ռafջ"d`Dmlx~nU߭o`?qqBr, JUAk;{ Ăgr]#biH]e?6]XnVRsG>\X,'k?k|]kO#45L\_AʟMy.H?T룤PVFKt}`ҎפD)}0N_؏ݭ,Q~rЗr&A D-;^k,YֹV)V&e*y.2aiʵ8Qf'bĬ4淌 i./&KD@D@D`c!P|# Ȁ(b7|RAȻb䙨7.؅C)J.v;TẅUa:@;I iC;3QǦ;ժQ{dmŠ[+|lcMjTl$c} {}׽Hb[_~Ϥ/yC d˥kxx۟l[}yScy$믳dƊ.<.T?'џGWݯ" " " y 49e#%PY \%i#Fp,s8�o%"PĽX֘%%\.ZL" " " @v,/z,_}d@^Re-" " " " " " " " 圀b弁U=D[D@D@D@D@D@D@D@D@9)yz" " " " " " " " y H)sRVD@D@D@D@D@D@D@D@R,/m(+ ꉀ% X^&"" " " " " " " "P T*SD@D@D@D@D@D3g 4~駔D6mjݺum&iڙ3gV[me5jȓnնtRkРA}-ªWIRYD@D TIE'R&0`�kݺk.eI>c0a+i-ZXϞ=˓nvWw}g_&mҥu>l7oKvUeRU(,O(KG!FeHEY7odI2b_޽s,ZȞz)[jUFM$ XqU" " " " " -\+}Y_[n\,~a˗:t?y믿r?6l`>O׶m[ mԩaz8 Ν;8p`N_ݦLb#Fo袋_I/" "P H)V[Uu(u(&MA2Lk;zW}ZR{=C^|=P曽U)_GuuYƍYfQGe}B1Oĉ}?a!֨Q#k߾ֱcGk֬" "P^ H)V^[V:ue7nDqxb;vW:#sJ-֮]K. ?+ϪUf/BNN8:c駟s=v!gJ#<${vSD@%>Y.U$biȑ}@-[+SXY`� + 3f_>Paud YV-nM74ҧld)Q7*/" " " " "PR9lʔ*+Xկ_A<L|soݺuwʕsmZY&g[Ŋzsld)7." " " " "Pr9#>YْH&M'WYڵom_U#>ٗ_~iKHO4H)$%D~/rƥ1Vj֬vmƪuI: yM78` X*UreӠA#}~^z>>1Pp GJYSDlmڴ(H>:FD@)B+" " " " " K`С_TG ѣs\'ه?n^{}>91.9c(. [j_;뮻wy^IWмtd: ;B|" " " " " "PX ֭[[vRfE &X^R-+W4JEj*D?UZK@JLED@D@D@D@D3g 4Ȼ+>vX5R"" "P> H)V>UHB :Ij 6cJ[v}.o_/mr1?]n~;&Zj:66݂k웙c7_]\܁K:Vf.Z'c_XlDzOtL8G];юɔm󗯱YKV)\RI,tO\cT(keݻ0Gq ׿ٸIWVYHn?s_(UߚnND@D@D@D@D@(U#`fw=)W9'^w{c{i/D0)n}vȝ܎p{Yd6Ʒrm/:vre^&Q0ceD7>j\Xn6v ;Q6m2#'ωMwyv (h毈;]xwm/rkSP~ϵ=ޏXΩϐi-ot_}2 f?yo}i'GkSț_fG;2>Kfjnx|.qK oO>F" " " " " "P*in kg>׮fsvinWq>:x.vցMVg ڗ3cΓ3QG5t%%-ޤXfy;Z= Zfh*=z~֢V~L</M;YʛdbL8kPJŧkG>hjUs}yoN&9*Ut$_rVY-u/,qUgEꕯo8kϾWXD@D@D@D@D@ -T ionþNh]:Av^ .{lgm?횗ײ+^һ >Ovmrҗn6AZ㘖 î[) .ݟg+H̽&ۛ=ɓ>ц3p n,`O|4z5U`iY6vq-lͫ+;ߚ-8%mϕf9vꬉT++{tJXJ?:}\hs<n)Nz`~';|~"w'66Eqa#575u&쮓[ٮ 9O[Pn;a/ۦf9×I8?i߭[vʁEuGaC{έK[{\7h=0bwYݤSa{4rZ: g+ooW4y- {_fҌk3Hf[Mz ǜ+o5vw>f?Nuyw7ˏrmk=sڝs;jφT7ipSLsJV([I\2ݱ~ ۷iks;6еm'9oMV;\ۣ}9<|?~|>e7ҖGi}\9vsCɱ}ַۚk\WN"" " " " " )IG:)vf B9eU~I4ncZfmǽk>N qfWr+XYba-.#mSZ*;rm uk6ΚVv;${;c[?s7s>YҎC&w= I@AQtcg}y6qvHR5NWRߖ-DaO;YWs;sE+3ޝl;89Gb&ѼKoWyK-_5zSJ\tw o'?7OK},dq=\λ?|Bf'诱}ݽҫiWg);Yv N{Sj[6K` ,ֻ u.;Sh^vNߩ]s5܏>;Ύu xo}=Z9JL+ 7&β3dǴqQf<еϔlD"}k:r̬Źq.vmVOQ߽?-m:`@X1!fb2OÒ .ҕs-UmC.~qʈJJt[8bw{}Lo]_gPr~{ 3\TmcSjAg`yFXasܬJaM*Ly.pJ Pcf榈-eQʘM.v <eg[z^i'H6K"9ZzF6lp^9P$e,5^gW]Y,"XlEXgAb}pugkMݫvVZ!(<j(c2E7޾YߪZ{r􏹔^yK/lJ:kmw 8@n?iVs(ըj8~3o%mCs 2_T$ٵ[#o}QԹPNsxG=gx£)_W@m6.AD@D@D@D@RQaL̦ Ժ n?'/1#g"7ŠbV\؞igpZleJIYV989֩y: G)ִ^ kW]|s \=cNq\i nmnytr:w 3g)v~Tr\ӲOT=X>5K&x>ޭ0ԇϨ;e7 .!YN(,̀h#U#zAPxyOVN1&fj|)sî 㘮m?#ǚ1H#(v0_(G)ܼw7NHY*+rki_qʛ N9w8G}bWYgZ,:wuox(N\peB,ӮGD@D@D@D@W1QuInr~S83a_Oba!_G475 i\'+]t_}"."�.>Q2M܋R֮೫]ժO 1:[ݘYU\,DxensC{_ӍM(O;,kʗ,?R:gqp;Mر}0*(ϢMM/yJ\?sʤr)(:WX J3x! VQ7UXmc݊Ă㸖.^ Xv.djl8y%\ 2T7oG `wlvvú_t.(W߱^3q?pJlEK,*lJ\)D w((׿..FH@`wb>X6+O;�; }{Z߷\p a=(@H}{ yd֠湔bM{?&4Fbͼ{b[@ܟ N9iJ1ʤX(|q|Di⭱k6Lmb!!\0XAiKrJ61(B~0DPsJݜns,sĂ;)#sYD8%ڜ`aDS`]{X8$' ^,X.O§¾a> 6&΂ _vt꺃H:s6c5 Z5 PDClSչRŊ.?v3ΕRn j(Yqu{hsW]A:(@ F 0+aՉ(O#FN |pkGwiJ5m}+ 6xH!beGE)p'nS(' rwD{i/N);^[}mw>ADx,+أūq]CEYҦ_y^Xȡ,C^Wtx}SaG|\Q.YT&J;.N돕ӑΊ<wotxrC}[xk_*ĢBzKtĬ,RS v Veݽ`B|lsWIu]s. W,1ho|=K3b:c;b~i׾uī TV~e!bv,p_Ҭĕ@ zR'h!|v\M0x&!X{$_P^ w!X=ne^2%R(Wg'g=D!R,X5�,p`=etcئb**X?&Ώ4Zq~\pDivۓ~xq*K:5˥lڭZ (+:as ��@�IDAT 7 +#2k+X_Ӻ>/w=YҞ/]|aQIMǔy;81% ]K(Oypo,K.|!x ֬I}^;C]JݳƱrj<}3`7ߵſO'`q3?rE, dwe;7Ҕk+{r0ykpN}xu&+ n΋s_r>ih3@~ Tpw2?M"VV1J"$l3"+Dp+BqYE;WXm/z/jش&eQDu\1QpO71وQ95u:n$*OYν)Qz+p@)窉q͟_'|a@ AuNɿ$MZLUgm*Vbk8biKiE@D@D@D@D@/r+ͤ%GZy@fR,3E(FR#\e-" " " " " " " "vQD@D@D@D@D@D@D@D@bWYd&)2]T*b$ X1U" " " " " " " " I@JlJD@D@D@D@D@D@D@D H)Vp@fR,3E(FR#\e-" " " " " " " "vQD@D@D@D@D@D@D@D@bWYd&)2]T*b$ X1U" " " " " " " " I@JlJD@D@D@D@D@D@D@D H)Vp@fR,3E(FR#\e-" " " " " " " "vQD@D@D@D@D@D@D@D@bWYd&)2]T*b$ X1U" " " " " " " " I@JlJD@D@D@D@D@D@D@D H)Vp@fR,3E(FR#\e-" " " " " " " "*X .Or%PNWo'iT"('>YNRHbRJrB@JrҐ@KRRT5D@D@D@D@D@D@D@D@' XRD@D@D@D@D@D@D@DR4!" " " " " " " ">)g" " " " " " " " 儀b!U  H)>+('+' jO@JY)@9! X9iHUCD@D@D@D@D@D@D@D }RJ)E@D@D@D@D@D@D@D@ )IC" " " " " " " " R,}VJ)" " " " " " " "PNH)VNRHbRJrB@JrҐ@*p)o[f-ZV^m@a TP6|s]UZ-T*8TkBlܹ~RR%믿RME@D@D@D@D %+mV~})RS$J1,x{ǠE 1]|" " " " EE%cZj1g -+R$PJ1%R 1ƚ QdOŮ 6l �C" " " " EN�1Y9Ve(" " @(48)׏*&" " " G@cόkHD@D@2@(2*FK@JUqx H)j." " " " " " " -)6ڦWE@D@D@D@D@D@D@D`% lh^bo۫" " " " " " " "RlmzU\D@D@D@D@D@D@D@6^R)_̙37VUE@D@D@D@D@D@D@D@(wJ1b϶/2iڬYlݺu9icʔ)6j(/lҥ9_6l`}GʃtIޫW/[ϟk5k쫯>_\ Xh-Y$I */3({=_+^{V .}Qc=lܹvWxeoкꪫ_Gշo_;C|iӦم^h*Ts/l~ʷ뮻Ο/w˚7os\/UTnDI]D@D@D@D@D@D@D@D @UQ۪UطzUV^uo5tPouvw?;v]|vQGِ!C>z.7uqٻロk[ʕ+gϞvs1^xu]ꫯ6,$" " " " " " " " EG\XSm&vmYvEkvZquֵ?ߪTl(k0cAj׮mv-_PEۥK0`SN8$3QΆ[^lzF* 4Xj֬�u?M7N<D;>Vt+VK9r>6x`.z'[۶m}aҸqcoִiS;c=݆E1c׿brg?Ii0ܚ1cFNk$Su!']_:vQP{s=PZ͛7+:w7N:2v5j]9©AvwzwO?Ԉ9EqE=DC!Kgicƌ15|Ƕxbk'I&ݸ:餓r%AG4bguQңZwޭ'No-Z;Î<H{g( ʔ.>ժUxnr&8b}(8e[oc}}lA  6,INl2ʇP&U(P>cxpz' HVu &AQtn~[ni& `br O?䭼KPN^Fܳ sWQW^y: oMٳg縀eb{gN" " " " " " " "ʌR 7BbPXM5k tB$ʫs9~W $J*Yry[Q&"pve;So^zv6a*駟p 1=#_8G˖-UV5\vpyd̨c�Z Aх B (X`ذak%HD@D@D@D@ F�k{U/.;,;cyK.^?Ytfm:v_D@J@qob b�AUky<f͚ch7&MAc=f;w DSL+rYzur"p#<ⷡ}}pan?oH^<A`I,N,VX2|'v{%jݻwLD@D@D@D@ ?a-CniqIX|zׯPeBV%5>`b!0aR(k~KvFA(Ŷb 8p`.Xh!b.MwH@(pU1*lmqbȗ^z[f 5o+ԢfAVo>wQ M(ȿh"|Wڡ0K& 6,#0? Y~9 [)!@a)?^ƾ92.d T-R"(J|EQ3gw}"1dl_eQ" "PV )ƂB,6NW咇뉷AqĊ {^q?˰"{%rEJ6U_}_-_U)}?V}$? +.ުan3VkIP:p]wbe[2yɓ WT&U6%8M9y`dDD@D@D@D =jXU!9gDcn]u"?^N(KW!N9e]snɯްğAuyi7$]#0=S>YgŊu={ʴo^APf$PO>�C{G"CX9o4\.q͏qLJNc,@1$" " " "  a<[NS~z@zx8=^Dܰa_@*~׭[%K5ܒ%K|<[^pVKxKnzԇxYWxwwbxǦM{ &wgAz ̇ u/~A9 "L%PugȞV8[=}@֭[( Hpx~*QNKÉʌ( -<c<=Ty87( #<(9A3vœCNJ@~ 0.kڴ%3=@xZF ߬JKt/i31wyɪ:GP&Hp/z)66di;رk~w+R!J=3?_< ҦM_&| s(x۾}{J<xQ/}mUQ " X/qS/Q}sٲe7Jp.]xbGXwB}QR6^.S氚}wB}c#p 1[>V' yGdx>>n(?u&I'䯓o{=_lbc|on@I(Jd>CP@Vn׮3&-(V=ʨcpV BfL; %Lj#b(rPp]z^/+PPd}>/:,{xP!/^ (\PB6(ςRsy:{|M-B`]|CSNq0-ѕDYL :tbV6z lQD/ign)FBu JP~6p\z k~@)WѩE@D@D@D@D`c!=a7(9:sg<k<?C{oQZU:թhUJ[Z{y!w?<r]-ĪMlAL*ĪJ%XvXx(VKE܆޽{(I,[CK0<xP[vIGk(IC1bΞ= 9X9boСWǎ,"~> 7Scm۶iaFD?\6kbbE&#$YW6I;%›$11xE!LJ$y7noԣ! *4g& kSI?CI&i Gf)1ٿX$̑#G D$f.>IH - dbi k� � � � @J$^Ju-nm<UM\(-ddJ6�#eqE0I,*T]$$D`3bUVM?<xnOK5 2e@bҖ,YRQbʞY"J9$Vl"Y9qHG"1$F5ӧOXٺe˖iVREp4 ?ĭPDGףyf=qDx|̶ygCv)"̓?KJK.Eztw!Vw ?ɋu)In_$@$Fh)F, � � � @%`_bqc>  K#Ob(Ք &cE$q1]$ޓąRܼn$ Ą1ٻ-ܐhR&%P vkALƶk"80ebƜscbg+zQi%VrѓZvkXTf]}ݟRkk!m"~I,䬓Y}}}' 4'@K4� � � � @f" !.gb-e$7(!O'^"fٚb{a=\}J\%[ K.,ObpnoӦD@!P@WCt>GRѫ!G\&uo޽ڢJE4%^.(B 'GOb[*Q#{ONJd jw{4.Xj='1O$PKo{    4 739u9γKܦ؄VfF2).%$D�Kq]_ 0/\NDq14ŷ?-uɓ'GH3ƥӈ&[\xIxd- %td\sZX߸([?ncH#bpO$@$@$@$@vK@sInM-†({uKZ[%}|[7'$H'kk6q[2e̺uG⛉h$ qʞ|Ʉ]`OzVZWZ\jNO?{k߾}M٬߁Tfx#$wq꿆ǽg; � $b)Is� � � � @<ĕ/yX{&m"YmvRbIwYSnHp)P '$+XE 5ϡ;バŘn2E H|rDSO=[ RGL.HnG3:6mqJF<+" xH8HHHH9sh֭7$d$𻤋/j+b$3xqFlXIaͺ>ѭDh[ [n6 .}%f & p5;&!#$^:Vk9ˌu{y@cHz_ HҐ�E4ϥIHHH2Ě2e>ޠ!E$GM~1"00,W~tY:t"T/v}X,}6V7xÜ#Luٳg#m;t{ݺuͩt^;2%%On7喸nJ`#UuJz6>szY>{6˃ 2IK-\Hl!@QJC$@$@$@$@$ nQW^fŋfʕ+1ca˗/׷6@$bUM7 Y+.#6Y,$Θ%l .+e}_ťH"J]rB߾}8"l\]T"tuuu'M]s%f=6vX=V*TM4AF4CnnnIK-\Hl!@QJC$@$@$@$@$0o<skH2ZFb?41ցϭ?C)ⓈCr)I,oiz6lSNSN^Iz oXhe$c}dbl2}ˤ"N,-ڶm,cޛ7oz~<EҥY%kɾf͚EAd_\v4j(-[DB\2'ƞ9:>X뗔O$G#e6|l}YG$@M 2<EezXn)Z\s� � � � dr.]ҁ܍q8"JP}{%UPvڱ߷,%XElMא[J(”\6p}=J̳____ k֑vYĉze˗&n▙?~.]ڬLbG_ʕ(A!/ pI BX,� � � � ddR8d+3#1$|t+3$@$@$ 8G  � � � � @& {X SLh먦Mpw$@$@$T<< ıW7?Y U@z!Q5[4֭WA>[DMx% .۷Eq)pUşlea/ڢ+WR/ax Ǽ1ڒZqi@8}-O_peV_sI]*qKD8+W#$iMJ .$@$@$@I&py "0%=z4 ]VAΝŋ"mڴ _3� � @HUQ,{~|Ա)fEV{)S#X KI9\qBU˽z7n Üo|8x.k)QT w"Ż}~ KxwFQÍ)ڮݸu(rȏkjo ^ZX:l%n/POo]|qz߭<5FBx@ rUW7mAV-Dq߹0Vr_�"KYezD9!琹3B"QqpSs֡ȮƖE0<<q $HHHҌ@NGQ,^g}[ mfNެY3L0![ف  �RUK#>X|ϣ]R[2y@I9\Rq*8�.J9Gu%1W(ּ)6||*(J/ p:cއnE(P*<,aaȖ%w|4|.*0!ׯ࡮ϫQcP_J40m'e~DGwGBDp%& 9+"Bqp:k`%98dCpdTM Va dW9r8;},lǸPp\8($@$@$@iJ]ċMÇǐ!CpYH( N_|yf.xt '*uz5vǀzU0w@W [^82whhh7D XroʜA#)LYd9x\yZ7իB]1D0eUșM>ewի!;Wٔ ~>̚-z!�%:>"BYE(K1YۭLi.;jW,m{jREP:8o<yʼ]<d0_ʴ?+ Ϡ`Z>j62C$@$@$&bI]pQ/S � � TŲ*Ns HY+٢ܜrh<i6C<Re;aJDJEKʸ*\ O XבziuJDs#N/Q~==&2zΈ*Y\E-\%ODhd?X[y{9= !sbfspPWCeTܸ{2,$wH򑔯rE*jn � � @#^W � � ]HUQLL哚K.Q9%rT%¤- UR%7mmJ,ˡuŨW=[6ן>G84a"<ܒmb xoT|,k;2�OzmC#DK뇫JV^U,4ٜE k0gnƆqD$@$@$b9Iz&   H%JHs*%MJi^ Jt�^mXwRd)1Ms+&)bK86_'Z=F+z}{y&-. [89kBTg?d> QT:z-m뜔{=,C�痭@jUtL<cT]^5wJ\z^۵G_\2mI͛G^<`Dҝ}HHHR@ M ͗J� � @F&XZrU.<=[7 "H#-;bezW781%Zm6Bҗ5+ܨ! �KCLZT״(fԕ^ٞt-͛Fsmʌ  -fͯƟUj~9U,[q{HHHHHHH(okg.ӋT\4,pܩqcԨ^wnxPI{o =eo QT3-z%x,3~hٲMW_}5+; � � @rߎ=IxFDs�  ȌRxr(-1cLT."<=lueb ĦݻTRx;IHHHHHH9gD$w,}[3HHHHHHH20bq$@$@$@$@$@$@$@$@I#@Q,i8HHHHHHHH (_N$@$@$@$@$@$@$@$4ŒƍHHHHHHHH20bq$@$@$@$@$@$@$@$@I#@Q,i2(-[t={xgEsq21<$@$@$@$@$@$@$@{Ql?;eˁASʠ=tsWxk$|~e$v�n9c0W2C>5^'7,?L| zHHHHHHH cpL._k\kW2'n"ͺ̘_:|rYhXߜaPyjTzmx>̐� � � � � � � @j{K1?}Rj7Cs~*,i3<<NC2X̳9vKFn/w}~K_w9H&84߿o\չ;V>47si�V#!O       [Yzy\ 5[WmRE}GæZ",{[n=- -�wbWEl%=-cÀQkgxu鄬ٳk!W﯅(۷Y/ּu(x .%h PVq+@`yN yao˖z29HHHHHHH@Ŧ:g /ݽTnfu|B#VxhJ Ŭ:sGvm*G z&,Y!(\(m YQ5oN >QsF[s'.شwL Iees,� � � � � � � L# {b٫KL={>*p`ѵ7z-9}j6JtzRb疭?5c9Y6GG=.[ΜZ p9 dOah!      2(6oqVڔ/_5�3,Z'(ݳrkkUHG1Ū U+;vbýJ%ys,ʝ2",,[gfw@7IM͖5;(-Ѭۘ'   J?qPX$m󖲚tT x"dJ[mC<yPLxeƔ$@$\vh�4mMٳe#GY~=\ZA.hqL\A@:5wܿqÜsq_dqp@Ց5‚Cvȭ֭s=y? _q#eBkFo].ڢ%EK}'   @`ҥVZj,\UVM~xg1nݺ]66lg?6�L~$@$@')k];2| ,jXP>eA y)Y '~*^WU/޵k͓*<J}� 3E6l%,n,J$XeifִgUFZ L^v9D.^ "YeHHHҒ*Fɓ'!UII]tIؤg+b={`ѢExu1 � � W/95EDDX>|hQjL;vlέ~ %i\Jpxnu}iSe!'uLhΈ0KŋnZoo8qx.9gzNeNRX,oVە?q,gϞWXaرK;wSNh5jEn}ꩧ,7ngϞm4heem嗖0/Zڶmk޽ҢE _eYg^!Yo۶m^+M>]9ȿ#E~++)˄ og6mE!kWAlܰaCެ{eȐ!e>3ѣ-͚51>LBұc,<w}r}ݖ^8HH 2Xz$=R(cKҖ˳=uМₙhu[B]N$@$@$@iJ@ WJk׮ӧ~'(1*=mٲE1>3pq[xb˗/{*F}D$8n8(Q9ԅERiL:J«:@?c^:8~Kg޼y1:;;}y:ѣGD,W#\&M0`�̙3G;u(#F6ٯ]*a הi֬Yzݽ{bPc}P IGzg߇t~aƍ>|.ؽ{>y/7oּJ,̙3uYo_$@$@&8 � � � � MD矵(.<EYDAvḇxb-=pqqbR\"㵸$Zc>RYF]Yy᫯СCu,((~~~PgZD)DtN*ƂLqD�zُ㪜ܹsZlQHB *T0Z\ktɒ%QHjPD*':[N ҿsκI(<fr9E�SV`A(+5O>Č&ق /ˤ5gs#̐� � $�Ed`    ]rԃj*6Q^7|^zAKb̘1Z\mU%XI1#*T>>>FQ? AL ' *QkĉfX9r,ǗٿD3Xe{2 &DKDdsb}D۾}΋e:EK7$E$ TvB_~EvZ(WRn|G$ 2>=IHHHH@@�%-[L$/)Sh%3Rʕk\哸ZXuVKeT1" x*-R2 ".iK"Y'C 3 (`dͧXYe6X{IsrCDCqӔ3gN;wxܣG-慇FƘ'Q/l&$@$@(f4Uf){,EIHHHR@HHM%>Ssn}R&T@y^2?#XjJꍕ֓I/IbY%eiPbdVU2SAu>+bQŜ;!Cc*U3U@fb!C/* TzL\ETII"`&'cIH Zf==M$@$@$@$@D@Ep1\eJĨ~ͨ2L_ĝM6iK$yyygr$ؼ}Q(=F߳gO{OIꌽ$:]3E[rv@#�$^\N rʥcfKN:7U0+\ޒ~7oĤI'Ͱ:KʞSX쉈'HHR�-R#g!    x $Q:+6r[˗͸YGj֬"N>_|Зm$ԉ *V"b7af1裏0vX,u~5XxJ}5R# 2YK&[lf14TF⎉�&1 ].-+YRMbUVM_ p?SNf9D?zy$8K4ִiS7~� � $@u3%=L/~r[Mre[䔷B!_<eƍǨQ#T˖t, z%IIHHH ⶗sR>%%'蒔u}S,7/'ĒJJ{#V|b]&zHLYD'N@n,_M›1S jLK3-8ǵ֓� � $),žٰ7ŀS0uieJĤNkV^5{tCnHHHHq0,KiZQ,DLOj%'''X߮u~)!Ĝ}IH bw֢ufy{2{R_;3 fIHHHœ?ΎCup3$@$݋bnчnX9T%[$@$@$@$@$ 6 [n GM3s$@$ wwfe?VMe?m]]' !v        ;v/Ʌ;=kVy<PAa&D$@$@$@$@$@$@$@$`wqN .|2oƓfkq&BD$@$@$@$@$@$@$@$`w_;{ y]P]V yuh7gAHHHHHHHHq{QL] UO0s.ΨR䚪shժ5|||Ru].F$@$@$@$@$@$@$@ZGpn3m*[?wHk&       "`ɦc\ AA\6֩[>��@�IDATكƍǘ388۶mC=Pt        I Sbrʌ(w%XJ        2(QӨQ#X,qHHHHHHHRO%\HHHHHHHH (^J$@$@$@$@$@$@$@$2>29K&"d8OۥK8@$@$@$@$@$@$@$~PK?;@4c{6Q        IX|/U"`Xv̭� � � � � � � db\ po<Eoޢ}u\޸ fsغ[mP?-[tvm^<E ۣ<ń/<IHHHHHHҞ@^�ߡ'o.Z5O?{_߻k{Fh@_Kg87vql|8۰{O[RH6+S�pt@$@$@$@$@$@$@$ؽ(w#�nĬpsΟo.'L'p}8OQ:oU.R <l       H^[v G2/<Qˏ!(A|#U4n}Kfq(3|)z3<<ͷuûwm[z_�(iχcsz>wߘa mǟXTo/f۝g8ΒSsB\|_p~j7ͱU]cǰfoͫ;wa]z?r2sV:>fn$@$@$@$@$@$@$`G^sSB؍G܏îeb7D)rU*w#.G<x�8q͆kio~/sq%pF&q2USopu.4y*~.mؤۂ/^ng,\ݵG]ZQi_#}nnPȚN@Yș+_Qn(԰K`W(ۿ/jIК{U3XPYF#Q{Ws=СC8| aJ$ܨXTZ%l'      HvJea7jxwx/4[[,#)'JSCQ6΍M[!,8r}U 5%l˧/kQE3].Ҵֹe+pe-f*V@%f_kԟPȚ#+_GGNͲd\JziL'ID+ѫߚY!r3 $"ogdgٲe1i7(WYPfժUի x?g'ԝ$@$@$@$@$@$@$@鐀[y8cݱm )0_GҶZ2QM2D Inʛb| VQ[p}^sҺ #xu鄰GxұPķfYPYYsTĚj9[СCѮ]L,94h ٔ ?z       tL-ń}*eG+ <+E8i-9FR%&GG.!K̟"6鎊O˳QB%sBȒ-|3[&{Hmj툈U$gVmרph/MiP݋"Ejժf}|<yNӯxw6       tH-ńWo1ydf?G?5w<IFJg̢xvMQ+[ƁU2\g= 7jۊwh+VVm1&.]fK(^e&q, uOppWr�\KFR jG0q7_UwՅL$@$@$@$` bȑ~߿~AΖ>ٳF1]=LK,?BUY&  Ho2X?S�1CS[CH:+z B3Qkko,oLj)yxbOYL,Kv 7l%MZ r~8y6t9ܔ)qķE>lyfۉ<fĵx&pq >z'执'HHHH>}SŊNҥ \=/BB$͛78~85k'xWHH R]܎9mk.ݸ Gw7d|NƵw997ZkvK|D2Np4j3!W {FO2nӴn,ܳO\)5%GȪb|9$&iFXb-k@Yu B1R \kL$@$@$`?${,Yvލ#wܘ2e ׯM6bn۶ JеkW-8ڵKqS4Dx2RSNEze-hu]=͛7됋ڷoWu҅ n:-ZbŊQF$DÆ ѲeK=]l9GΝA�K͚7HHL!9d͊j)B4}l9sI}bKrdn#)5Sk*+/'udj\J[}몤SO � � @$pIXd… `PD(I"8]v M6UY0sLcQ"XU^]h":URŘN?-b%C\M,ϟ)ohժ/+WjSNcǐM!Tʋ/Ƒ#G Kvں}Z$k۶f̘A~7o^7UX1C$@$@@4VZߧfJ= 9 $,%̨sny3o   4 sN-nK7o\bFx%!bI6`�m%gb%3Eyv %Jh!֭[M+WV@Z@سgOdϞ>>>LDhQLDK.E,C9aop-T268뵘'  "@Q,ȧPGK)LHHHHׯl&V\'V[bUBmed$Y&)<<9T $aM/$"Ia&.Ka,00F2駈l(  H(×-{6NIHH@HH#֠A;wk֬ڵks%xO8 2E%;p9N&čSIJ"I3:c"  BX:~SPqjfέuS#s&  Hmoƴi0l0 )b%)+YbPJ 3d'E^dɒZXe"mݺ۷ooݍy  H(͑� � � � dVY\9;V+=zh,"NmܸrHiK�"`}GXmذA[K%7V6iDu2\Kt}HHH =ȢfZFdz1S1/8Js7^[R,� ~kHHHH �ougEsR[S98~bL~WWqe0)M̙7XI,169Z,Y$ݻw'  "5NuE w?MlE zES8|%NDiU?.oΞ CO=)zwncʪ*or2   I@肘ș3g1#^rcbd b2N,I bBHH  Q,B)^KB3eXC6jnFiš=%H6+Q}Vts˖# hvql|cSqv2Leͯ O\ݹˬ>lZ82}>9k bMN_8Εb p"       d QL3F ςGhxǿi8?5>5ɂfO,\zc?CëQQ:o'J]r OQ W~oG<xvQӝ;wkժQ}� � � � � � ] QAIO\ hY/笮ذ2ςCA,nd.W`}4n�wcχctįV>VubB;x)6M*Vןck]uLK5qߔ ί\RQ.�qisUzNYOnriTy!ii r*64PK_ OgYncV:ڴig$|'      HYv9N*;rfwryA\ 7q?|JQj 'X}zP(X.rk7:#S"MoEWQH6PX#Ba+_qtOGO"o;rtu΅ /Ӵ՚<b̻3hD-m}MgF#e8@ͮ9o݆a〗չ\f\-�n<E5S�@ͩե >UTCaMwk͚5&-HHHHHHH  Q,>5#V;7vpO-ދtًolFo+t7۷3QQ)W"p)%Y3V[ eY|_ M*GFF|SE_O:VxE,U5Fm{y+_ ײe\ P(X =Hp\Qgbw}3dwqAR8⚕q� 7~�@Q֔#&MFGݻѽȑ#{)-j      Hkv>D\N8w;_zCn$:97m pX! &Z0;+疩5ݟY Le6.V tdf sKWĖ׆?q)F#e͞ɞ;ʖ=P xI>]3=SD% LCK/dKwݧrʘ?/TT r$ � � � � � � @$`by]pnU+<Y& ɕ>Hٕ#WK-|nF_G~yE]-WAXڴ$Ƙ.+ޱvՔ" 棔Q*TkµLi۲XvYf6 rvvFzJ~2ȋȳiv"  0 43C$@$@$@)Mn, ?Lw eI-˖n0 7CɾCW1군ti*˽J%\ݱ b%ѓr,ֶgf9,].e~ amXE ?k(<kL޽{h߾}gbk,,)X2� � � � � � � ?vc)Tnw1 ~YwވRbk93Aw<l:< Ow<^C /7C޿qC_~;ќG25D IK}dۥuo5܀~ ,]$hfZi~ʕ3%7:V3~=ݺ{,ʪ-?'N+p � � � � � � c"Ţc[O+Ӌʕ+8w0etU8YնxRNqcԨ�5kH47!St+!W4 lYD$e}^|%h۶-VZe   xߎ{hvZ   d4PZb~Cme]%H΅"]2Xv~7LDPPPj/HHH2�^p@(Z(e]HHH MLGI Ƀ"E$"@$@$@$`7޽oK:k׮SE2'Nr"=${HHH 4b$@$@$@$@۷SOZ0 Xz5֭[={{ a_� � ==UHHHH ]矵 oGNOCx ܼy޹)  7w D$@$@$@$~`ڴi:vcl_FF i4hT^za۶mf9s닭J_~8pe˖i7RJA֙?Wf~2;e^>̓� � =(fog    HeRR.]#G͝;7fΜO>$J[߾}q94h�;wo%9s7o"puV>" 2 /SNaȑ={n:y$ysȖ-u3$@$@$`W(aHHHH+ .MIŊ1n8=TlI"ɘŋc…xvZm&e$bYyXb̓� � (fw4un:' <k$dt"7o3ܻ~7nBătFą�l;v%LPډX"aX_#kHHHҔ@ڇ7RŊuְ:3z>}Z)ر#rʥ>"mĈcǎ[noFA$ � = Q,bçPLd2~7"Mō<;}nQg~ J5ۆ3l:]q.Z5O?w9ᬽzV 7<]p&>_/<dzu󿃶KP˜� � � ///K\]\g̘@fp0g>|˗/2eDVB4lЬ7L$-]ԬgHH와]b"7jxʢD2#] A =r;@xģ6#` ǙNm|tяĜlH¾$@$@$@6jժX_zUF`]L0o-̙SuVq:nQYP!lܸUV?� D$@$@N.D%=q70e?="3%CMG=?-pxd]>Tz( ",\V=|yupz8ᡡRo簄E+B~QZu:kkۏ+E'T{m>QR6ΐE:_G;R[3ͥtouKCkK9w~ݍwFQ c>RVlb)),<~ܡe!SVnx>IHH7q[[!*KnNGݩS[7ś_F*$MJڱcQ0Kbf]Ztܱ>L׽{ w�fHHH$N.q,1k䏅8;! / �ctB'5{G..mOL.%J {H׃_GG77>~V_Fo?߸?|`kCPc{889_ynr4 dˊmouՏPqC4ޣ{hDoMcC!Tk7:W2MѸrasW'oڢV{:eԐx.n 7T<pʵЙ[`^x̓%<\0昼N_c' 7-0*2f5z6+ bKE k" xܘV3xtSv=3� � � ?ÇEƍ&W^ ԨQ={y)ixW`I$+WA\^zf>];96w\lcHH썀]bR<72PVM3/"-˭n1r)Uf .s/G~}XіS>ϡH(Ҵ N& ڮ I<jׂ߼Z[,#)'J_o5 r?bPE)(agɉ.jiuXR Q1۬3cӍ":k̑M\ݜGO@uuՒuŞjgx'i)_oGy)3� � � b%՘1ch"1v /@Dlꏺdb4Ox6k ڵd2;L1b?\׉߿.  ?s'1$@$@$Po)Qp+׿/N͙2zxb\/~r%T슇AAy m]9|&/ N:̋OZŶ1zpm nElY*Jr|p;(mŌT A1E5O   K_qm;wNjdɒ0;FkG/]4FI#&sݽ{W@J.puuVbWLy{Gb #țȣ4@$@$@vF<Nl1Jv=_g }xneKA/@_?T2umZu3 iΝP7R6iq&fzĻVǦ5n=j(jpJQ<Ώ\* 5K<pB9b u2 ePw� � � 7nB>)la"  $$h wI߾)`UkVy`buaZH|30ɣ�whw㑱™EKWRnxeYT.g:ưC E`\;:GA7A*t9aγ '%3jfE,uk31i…hժvH8%      {%`7b^G#/s|~ ,?n|<j/xU|C$9F)]Ԝtgp~*RBWEZm]]e`_ ?ۆM[C% 5j`D__[ڮAKͮǠͲdF~5uQc3z던ϣx`o3MWX1FMMOLnkclQ֋)(P nl#      LC 8O+Ӈ+ -???/X\/==nx52[ۿ�jIIGΝ.[[Wc'-]�eIc)7HgȚ#{] !bIךXW;T4'FԩS*nYfX� � @ZQ%zi:\Cow$@$@$@FR /|2|?U$9M!g[ܹ!D|*>"kU\auv<mt_v+߿v1 � � � � � @f @Q,3T:F.VmcƨbZFnߺ,|/njfXݽ{Ǿ4$@$@$@$@$@$@$LŒ p.T^"Z+/FaV?_˲vg?        $@$@$@$@$@$@$@$@$`(f`HHHHHHHH (Y4I$@$@$@$@$@$@$@$``L13$@$@$@$@$L2MΙIHH <xp8Sb p3; Wi=o#(hVA)_޾ uk{¹p!i3gq}׭ByU`Ӹw_&pe65"< 4>Nԥ@QW7Ѭjpݸr(?Jxk�;O\Cr .jIwrsP$@$@$`+ֽ � � d/tL#B 8KB3eX0w?4=/[f;31 n89k S<uܻz-Juaߘqyf*?t|ψQz;�_U1㪸{;~N_۽'6/yG/wuЙ[[wC?f(u)> G+$9<~w4JT ~ێ^}r      H Ae[v |dSt\Kݘtk $` ǙQ}p81/Ӑ=wO ?J[ՕWu_>=vM"1oQVpqN9D_|ܻVuX       H<kPW>#Z֋A "W2ܜsdY<p<F?VF`Xަϳ}q 4|f,o�[zq~Wy)߿y_?~Ć_7Gjձdɒ(-k'k,z?6EjsRe _Oeo6>"0o2~_m@!t+Qտ2/YGʘr/ü~f;z|u'WʑMF,եt՛4ysI$@$@$@$@$@$@iE.,<\lUY(S"xgu+4�2ե >Hl; fĄ/Rq1UYSWM[f{Jh1WBQ瓏t'̥m[h/ 8=G.ϢhD.,r|jULmԢZQ|^;? Z .NuKЮu65=QM{~n܉t^371xGu{.U(+0~Qjנ/7CQF#*'~װ=uU6֣WҤE(/Ce/wRjT,uMS `F_=D({[56 xsWŴ7c?'pwgP@n˫]ko%IHHHHHH ؅(f+;a8 [d~72]VM3/"-]8\Jz#u 7g>wg7z?tJ@ t k1%zZ {0XCޯ]QR 7Gucq2)cFrwq| ̨~|ꪀ 0+ vxtـ/sJ*ĦE輭_wՋfx>^Dְ$$Vn \m'.hQLn^�+u#>(qM=\wPL|谾@Ak^y=_$@$@$@$@$@$@$dQL,^}V,J'l  /q.`2 ȑlذ!IV13+%PEOݕ@LħV-I*L[Ha-P)U'0D-yt!=m=q3glY d繫A.}_l[^ 7̐� � � � � � @z&)D篠?{hSdz~joGWnwq 'v^ Blٴd >>>8s *W OOOG=nyWY#ct/qsPvŴ\ weAlڲK, R tbA\2XjQ&Op9^^^ f3 � � � � � � </X ąwtY Fɿ& A ݑ_I" y˕Ņkje2*pu._KDD!aA.Xp~*o٪-$8٥bbYh߾矸Ǯ✊%Vb *{ Hx+-tYhxD*Aڅ'p- vӖGHh. $oKZp!Zj ҝ}HHHHHHH ؍SM8-& }ɛᤑpj7qT{Vy ` }ʿ8�T=bufk`𑐾5G5D IK< BT02t(֮-ڃk˖4OaMz~;:?idM\YfV>_fl[r[whQL:^Uc1yR])V^$ o@_m ]YeWX^>^n O٪˪eO�@ݭ@tg      HqY,*V*)̘ƍQF&@͚;89cVjx!W ;r= lZ:bi%ZX![ꈶaVVcMryF0Ċ-_6oԨ1N:sXTU@QD{k,Qc54cL5&h][{b/("A:؂;߳9Ι=ߙ9ffH PϽã*oE6` P�tݜX21UJN-tgDQbJ?i{OJJٳg1{ r P�(@ Pxj =5ZvL % fU< P�(@ P3x6볞px! P�(@ P�(@ .XFA P�(@ P�(g P�(@ P�(@ .XFA P�(@ P�(g P�(@ P�(@ .P"bM@|rJ"py)sOw-ϫ 3#Cis7ݻyU)R^-}뚊2N]MLv`$ 5-CE%jѤc~9}bG܍<;_Yv%(.Y�(@ P�(@}Ћz?," "Z΅Yp'X/&[Zpf y~ur>R-ypg#.0gv;9A[!)^uu)}paHKDܣŹ2\Eqv 8>tZ[>/awV}Rןʽyv7i/&.=)~ro/z̤�(@ P�(@ 蛀> H-݈Akd*A2MrĎQ"cRﻝGKΚ*|I=p}ΝEy'r#?ת<|<˟e7+}877j;0Ջ7|(@ P�(@ Pb n2 Af`nlʽU dĄJ ,5R]^bgl Ξa[>JYy.fmhwO[[sn]0o>fV8(PX ?qRyqK&'^ItcN]Jr1Kl ef�/ua)U ˪vFX_*3,H9|oz8kю#j0_[ .!hL~h2l8r3g)@ P�(@ P%J@/8X[-:v"0iվ%BwTR=ñ`c/=)18<b4~Ur6u3߫qOnYbןadf2325q<lkz e&lWso$GFvDnjN}SEbh(kZ|/hB?ٹs ǥhWGkXcjYA Fo?,Yb6sb&} _@jtU%)zt+J]e気kkb8eo3 P�(@ P EPLfY? yV*K[ǩUKu<cqz \tBd[ʆ"U޸2҂ߔ %ծ+JHOz؁+ &UEfɰ\b{ddnk7WGZB<qzYnVq3ѡZG8B lTD-yнie h[Ufs1e|+(%mW:iPlMN)">�#{S˼TT=6(@ P�(@ P9(1A1w{#]:3zn]~_~dm;c[G15)>(fe"de~`PAw~mJ8I Յ+R V qˌ1|Fm_tVP<2ZT%B"fڡ<ӹ%\mh~b>(@ P�(@ P@_JLPL|`b50k %YcA>q X|Pz7`ɼ\9|t}tk2kTʲŠm;&7q8eZdh5*=)c2]= ];vL֦M][RTm1{+f <\:P\6:^ey_Qʛ+v?#j̣�(@ P�(@ #Ŝ$02Aq.oEB-q /߹9Ne ,ԪDkr{m+ktɫ"}9?Z)@3wt@Jt\Bym ُX).yڼMS[Vn]xdeukΑcH-njA!1t/n&F^aYeƖPQhb0'E%%N^ΘsoFEF6&p+o% ņL�(@ P�(@,73\RV y])2Í{xkfMv"9jE)PoVmX_Wz5^0GFѱe{T^2;Q8D9c̮VM ̚*]bHc++o<w7JfӧwtyW>ZԲZ ey_I> Cת<& Y-Ӝ{8*WAWfmUP눃_?nF*mЭK:dw5l<קƱ_s�(@ P�(@ 2TP-݋ehx[)& ,gOcǎ)e}M==h8mu;0ͽTQi,?&vvt']I" XN'G=tF&H]]%fgeo0KA e,(@ PX )O]b}]f7n(FTTm-{ua]xeÆ vOz�((tAQ5YEW1$CZV>)"UPfenBy<656uo]Y~ Li~̧�(@ P@BKM��@�IDATCCyb۷oN<  A^HC�(@}(A1}8 P�(@سg2Wy@PjԨnݺc~޽W\3^}U*? 22K.ŠAY*Tq8{eoߖݸq*UBBnnnHSfϟ?_:qLMMѾ}{GժUѧO't NNNڵ+*VCfpiڢEj>(@ PI OB P�(P"ptYΪK.IkNْqF޴iSX)k.Yxx8֯_ƍm۶8|0DL+Vo)O_n|D,<ve11̙3DE!11 ͞=!E$g믿ss>Jw P(^)V> (@ P@ 3† "gn !VN/؛K̺޽+gk9::$ -m;*z,{:t g d{�kC 3L^zIjժIb}g> 21L&[F\]]5]�(P,+ԣnWf�(@ PE-Dr޼y2�%ڋ%"[{tbI.I4IA.ČN_JI<@2J͹X)l4m49;(@ P`Px�(@ P, NYXW˖-,К0aK r?~|bY$f?ׯׯ/g͚5+[51dff&'Nľe`ZAmYF P(NKYX՞)@ P� X)bb}X>_ , իOy]}DV|A6>a&͆Nes̑3t(@ PA3ŊçW_<[ P�(@,\0[.]'4H@%sNGLꋀx*^9s&FNDf͚odVZ~*2’ĉ0`�/_M6&b b%(@ Py0P~gG>==]nQz(Ir1mý=4=L~_l܏mCn>}w;vL{Zai7ػwġv -]c P�(P\L)"ߞUyKbdll-&Ob.tR,3",R2;_9::Z>Re&+(S",5XҥVd= PЋ>a9ש|~XpӴ,}k8$D1Q�(@ _k3404G|Rs8/j@LHE v}hD P"(3¦ hyzp߿.r}4441Q�(@ P�(@ d EP&~KO\e} ~>'իcE@9o�(@ P�(@ <^ D ]szu%1-[Tٜu\\*XI4)@ P�(@ PžzM*;!!%C/F 46^AL \͛7rp�(@ P�(@ P@<JND1F>j; o4Arr26l؀}e˖ن&WWle<�(@ P�(@ P,7A@%'?[Q06,1o'KȄ'ӱtPwt$fL֭È#1c9rdbS�(@ P�(@ЛW{Jy9gWRmllrDGȼr*c(@ P�(@ Pg �3,e�]>`@XݻwSaڵK ۷o2fP�(@ P�(@}+ll3g@TT$||6 7pYL6fffur P�(@ P�(Wz3SL>'4ۓ[ P�(@ P�()ϟ.F P�(@ P�(�by0�(@ PO^UTsu.ek֬UYf=nWlO P@(@ P�@zzon733Sk޳>_F([c�(@`PL>K�(@ P9HHHw}7oƠA5y! P@q`PBb/ ~MKK+�(@ Px4l[$O<YM]v o6֭ƍcWlذoGar Ǐoē?_^m{1L0AݩS'̘1j9(@ P.¡"VazMm܍tY׷ w"ֵk7*e|ݱ=(@ P%DTR4iYRs" &UΝÐ!CХK]ݺuC||cr&#bccqAL?$m6\~];}4^{5?o?~y<�(@ 譀^2kh|-"N\׼j>l!1~MFԅK8 ڼUgadjE85uƸBid;qlق۷1m)@ P(A+Wȑ#!_K,sMF_ ޽{X0w ȑ#վeG@HSL~*m"H&f1Q�J> T-݈AkhoN`R-pmMa؏5 ^ !!O^CvsEEs8ז-Gߗ)H}~(vΨP:NP�(@]y['OVfwL|ݺu_4m۶PN/1KL; \?p_T{wѬY3 ˫.(@ P*3^psFؔa4ϩ%*5LM֖Ъ;8c]0o>HJsu2lM�Y&f}vwOix7v^l s ]"g*[_-/3NMk=]^#_5z?|0o̫<Q  )@ P(DT%M6-[(y޴ipqqQfVf͚I:uri2'5YFЧO:tHS�(@Ћb~P:=Uǂ~KB;-Z<vkɻl;8tǙ85=u2D`˶zu8w#ơݒ?Q~=%�u enDvm핗ڣ;J)_4ɥ[g$!`:T&[t QXWv{b@Y Mr|Ʒ{5~ z--@! o۶m/r\u)@ P͛gϞL߹sGu(_r4UW_ebK={`ٲe锧N*)@ Pz+A>+Sc|TtP߸¤ jeUzåKgݺ =%bVzrk2(ִ=*ufBG~;:U-ʦ>'jVV5ZkI fMal;G~zy"Vyx]Z̻$TW}?8 c7oTPUQ�(@B>3l߾=D /_>ŋڵkoA&N(gK2K,9sgP =Qɂ> TgMp,MӶs3-pmJ]L=.y,] Ǝoast4Rc(_7g+-蚢b)9PYf ìlYywAè65DS6U>sg݃{ƪUCºxq O)@ P@b/W A&._,77n& {ԤI9;o  f PVJm)@ Pσ!ؘ"8:05ZNI:A!gIh2kTڶ# #G`_6jڇKfFZz}P>s?tv3˙heGDDɓrz⋫x$z`` ~i.NS;V�(@ P V^ӧOCQRI1kժU%VXny5i۷oݻ?/QOO?2�(P&( %%ҭXBeiF8ři)€؃ݎ͛/Arƕ2K,}LV!I iR@$GElʫLJ -!QS,S-o `lc+XޯN}='Re]3[9N*k#xW/_nm٦,(q樞W puŐ!Ch\e% rN& P�(޽{*G]6[.f}|YСCKaƍqu,S;OY6{lokkk1Q�J\R y])2R.N%] ~z5GuA}Cey'`](ץU~x|Nl/jI0;5y*VV *ydv VUfN6+_ dtMRO;{*]Z/ ѱY5+ul]c UV )@ P{C>$~/& P@I0T>]Y'~P.EJHIEx\2Ocǎ)u}==T"_$E\9İ;MT*蚅]C,L yZxreӦp%L<_|{/�(@ -Whz*g<YVL�(@ P mne89 /bIc^IY:W̫ fa%+V퉖[)Op<h�(@ P�(@/P"bOW(b٥}I>M P�(@ PxnhS�(@ P�(@ <�b*v�(@ P�(@ Pϭ�bGWM(@ P�(@ P�`P,oR�(@ P�(@ �bzrh�(@ P�(@ Py XD}S^L D{J1~D ri|p0BW.BCFJc_t@|#d?WqRck~um_l FLB R2qXTb~ՙO P�(@ P"` xvћ!>ڪC;rW#e޸0{̴̘4x/_K#x.<_CGWa?;p 'Oaϐwi;{KNZ lnMo~:fÌwB6ڕc|L;G:Eq|vO:Z5;WKGꏍ(@ Px:{:W Ps(0t"(s-݈AkˠX$Ӥ t] ԫc#[Qb?@fz:n]GCL㏯x=p>QGzlD Ps)P?pi PSЋ n2 q 0Sw_ Dd|ף-L aX�fOS=8trg043E^=Qa0w>n*!oíGw 6wyyP+eb />Cޯʺ8L\$x ca`?ٳظ_TTI2v'E=7{=<m1x[`fbm )3zOف/ل%'qn<~|9Tbz*aF-8 Wq]Y_B)%Sh1OxnZA۫�(@ P�(@Bt8[:k#Q-ڀ ʌ׽jawS4tvoo_;of۹*-fMջ?i; ʕalc-7cFQ h64,{Iٸ{4|1\u9*K6}6O``X >rMҥ3Z@yeuŜ`r Ν;d%krm0ѷ;ZqR?/;ZYTcFD%k0XK%HeҖ&j$ei2 6w}Th$Y^GO.zXAr2eIJ@Ǥmߦ*jVŎӷe@OZC,2c/&t)g#ȥX3(@ P�(@ P EP,bs}ߠ0⌳Œ]m82"k)eAmKjSyyLkrqȖgCظWA࿛P}@X6: m^D[r0q+,Bv?AUt)ܹeuy7oV#ژGsWsYK[s7el2Iлe,9Ll3uoZY:bv1e֘S |H _O#ε9(@ P�(@ Pכ;_vizYbMc!1z3b3eXxmJQݞ&% ש3HEj|<E=elmU@:>|8lm>`!:eebiex}Hztveӊe,kVYZVᱚ P�(@ P�tbN6{֐+2=xBe$;1qX ;[[Ay�j}?[[<ިtѣG,lݺ5,,_N['5x}n4TVCE~~啚x8JPZG[sU�(@ P�(@*73#c'?GtIq.wuW>/S99c̭̓Q$;/a`bWжs)ҵ3\hh7ـ0ڲU_,BWfާV N0 ;xXgُ?.]"$$D6U )gX|R\s&Rҵ :O}ÊXs:c[ء%[wڵkҌu)@ P�(@ Pz+73\~HsW9PG߃f0g;.M@<mĄI85yݥɪ歨r& g=1CN'#b{I李| ~d JDˑ>jݚnsq 69#OHٴZd+k3b·ّYȧLl9,'4~ؿKJ05}YAreGP�(@ P�JAEǃҟ;-#wdT/zO#0v"w{\Oşʿnl,vpFgQPf|,SAZ88q$-=!Q̰=kG཮M -[ڵk  kr P!|w(<�6�(@ P o FJ=O\(v.̝<Ir!^|ĶteVVDšx܋6@׬W%Y'$={gȀNbD P�(@ P%AJ‡_Q,T֭sco&)|.oge!?$V.\8γ̰rܼi P�(@ P`Piɖ~-;;ンo  ^p%R�(@ P�(<}R"(@ P�(@ P@`P �(@ P�(@ P(y Ϝ#�(@ P�(@ P%^AO��(@ P�(@ P 0(V>BGy;/\GY!I<M\_|E]oqqٻ)qHMVx<}[}}Q~Alb4IHA"|¢u(@ P�(@ 血^223shگx 1 gϐW.ǡ#UHOI>;ONM=M[8W~rT4.\™og歹ˈ} 6Ǐٿћ&}tqI\ '$;w#Cy;< 4V\h%0&|]S7D P�(@ PO()_-݈Akd*A2M'49`T(mh鸱v= |[Y*|lee=@BBǓ+yC[>(@ P"Y?!P�(P"(3¦ Cx\<C65x3֝_V' :\]Z@J0ɍ6҂_qҵ<)YA NWìLy\VrFoaVlAMԲs~_OB=qƶSY pU`#/?o{!q?% >YFK~o,^stT((+_ov0c9ԩlnjY>_o[.C\=UXz2-Szk߰ ~]^rюia=_pła`_(d(@ Pׯ_ϳQ*Ug&(@ P(^-t>[C߆5t_R+|M(]{tc*qHOhTXW ckBa_!Eujݒ?qqH E㯿eKu;{/}</vj)K,9dbrqVfY2f*44 ΝCTTTNկ%* b6(m\-X[߭ R ղS7m'Nl6g:3D�M,k舃0l!l/oWx�Jρ aݷa1=ۛc�tw\?C^npAF&bFrIz2oZ %' ~9\YIWGkXcMN8P�G}g/|~"je,�(@ PzPA C% VƲ@CA{SKyyfE'<+Xf+7UKkVi iy/%V&J�-mmKJpϕk١jjcMf׮]P5d^[m%^"UvFT071„=qK٨U,-6/MJ\a`�98X3tJxQrxS >'ET|2^ ,Qp]"+ݠ"W)5ѺFvTsYfki*Ӭ#f;ofel̲(@ P�(@ P@ E&&aى^/L_cv{gh,xcO%:!.1U^VlodX 6'f7DnM`+[L^_өy&AWY%%R2KMRfydjl(_JN,Il/VnQfiRHHJ&�(@ P�(@R +eo5ܞ8tfZZoKo;CSSݿ©< l:ƍS ޟK.s4Pn,zMvSzYQ̰S"^":קF!(MJL~Wm3ݾ>q~r֚_p4=i'g}e,1<�(@ P�(@ %&02A~a"݊8N œ(:L' BzTGжHONVӥWq1$FfFF&͛aAAjpLlkV8(g%ݻ>s/cɒҥ+vܙ_Gk^bOeX2?$lMo!&!NT*U)fL}C!5~MK,/QSX_<`י^$e[ k?G P�(@ P(z3Sܕ8s8~:΅c:<x<&䩨h:mZ !Ïc)=?+ZS7R/ԛԹZ2n퍘kޫZϽO/Yԓ E?෭W`g,{N\,*-:6ʦbY&';~ڳ.ڌWf[V  T1粖ӧ>*Oiw5.hז"O+sp긢,k&FӾOG P�(@ P@10TӼ?}T@@�<E%1MƎSg" #]4HIE0\/!fU2DJHJX=$f)iEMb[ SGك}>(@ Pbݻ'ݾOHo~:)@ Px1(eb JEPKv&,ē2]ŶL�(@g+PP F P> <\(@ P�(@ P�(�by0�(@ P�(@ P@ϗ�(@ P�(@ PCA<P!Q7ׇs �(@ P�(@ P0 b9(@ P�(@ P 0(w><(@ P�(@ P*PbbKA^a`P ~I.H P�(@ P�tЋX9 XE@Dt6Y{Ny(l4{f+ سg7~W09. P�(@ P�(Pd؀%xgYcLLޏ�(@ P�(@ P EP7gMMs;02VPI \u1PH)))8<�(@ P�(@ <^-`ib'@c'wڂbCCsҋ9fLKKKT^۷o ::<�(@ P�(@ P%M@#C@Zؠ,"Ѻj9/[ .Ke+Q`)@ P�(@ P@z;r6{+|.B!%==̚2e*r 4o\?QQ�(@ P�(@"sYpbh1s90o:996l}{Ѳelwwwf+ (@ P�(@ Pg)8Y݊8c 7+[/_4,=qbr}#b"b9Ӻuо}]6g)@ P�(@ P^ L1ׯܕ8s8ԫ;6ǐe(өl'-lllTAttV\ Ԍ�(@ P�(@ P@ob"�_ҋܭ5'2jz?`@XݻwSڵK ۷o2fP�(@ P�(@}Л哅}HP9s"1Z))) gϞŴiSaffUC P�(@ P�(z3SL?|6|Y@ P�(@ P�Yc�(@ P�(@ P(�bEbm P�(@ P�(@=`PL>D�(@ P�(@ Ph ͋)@ P�(iii˱qP�(@~^*̣HMM]Q�(< ̞=o.5j}X_Err2 V`&L;}Eiʺ�(@V32x,7z +WK%8 ҥQzv~j|<yfeQ͋$4,-aQQ(r2"?Фqɯg}o7| P�J@ PJu6l9;;/ѕ)@ P EP,Cb?87C?}Uy??8*_ U٩zW44?xGFSh2kuQ.eh:}WAFJ .\½s琑Ăb~6ʗGv ǑYT x/_K#x.</~mիWwOOvB P-LAeˢ{x�(@T@/b>aҍԸ _4) "c}bϰQXۉT)I"Lx\]׬+v <66VV**)@ P@6PرAAAC:uвeK*v,;ET]W|/Y~=ׯ… 044uZn_ömdq!vFFYAP۷o|}}qTXl7fhڴ)!KXXzuُ2lP<�(@ <@e}̎eܜ6eF{7uY1LkSfxY=l\uKJFzR|tG@6j'_!{It˩SwXQNM"gT#An2;8cSnwL䟘wuƹj Aֳf"Fmt4dX.̛/ޫ_k&wޗ5nk) 117PTX\ H '(@ PU 00f͒Ajժ7nʕ+B8[l իW11120uQFD lѢE]LLLyflݺ5[{]PB(+9۷u֮]-[\rr1vAYGͮ^Kb޽rhie q/"ئI2NM[S�^s0;%z&eaejAv-9<645Eۅα8D[7w('* }6O``X >rMҥ,wsw\oj8[6{W Cg8pFʗ=ZVB,{[p{eZ-823'x@ÏGyW?W?ؖF5+wW|E;oBTL^۵Gw86T_įdE/b)(@ PUGV/`cc#E:y{{|ٺÿ+g3S$ϟM6I&j}d2ЖYIJNL0S{رc2щu 9L06mk{3 D?#Glڴiy,:N!(@ POP@/fѹf%=DZZ f>.O.^U*j֐cr^YRX² 8݋tE( i#5>YVП[uboDd *%Y}cݓԲJ:JԹ#j]e֙HbcV-P}p^Uۉ#?>5RD ͑ ckkظWQ~e[ǚSVXظt_~qLFQ &OFÙb(@ PR ^<HY2)Tdd|UV$ҍ71J$Q,mĻ\(0j s1]0Ӯ#fH"P&6$E\_,$QGL3BYIb9$f%~e~N Pxz1S 1Ll?/+BKS( Y|/w"$4YX YlȞe~5%H,$J`ξNmD�\,#%:F&e+ၸ_�5K{d=UTO$T= Hb6.Iy!~M-J_׬YҦB<}ȑEiκ�(@ `I,?ə+?XLݓYb2ʙa~k'{wb&I{0͵*U]e"Yϣ3yB PxBzN/׭&_x˥ YI #NY :wFR&HSNbIHgN`^II14gćZGf6MPKd 2M;ikitE:e˥24@daa!7:u ֭ʒR͗C]ڳ(@ P%W@%eծ]\\bfH bY$V2[穦kL$M⸠5L/#v^^d%ϣSӖ�(@')wI^_nEBkҡHNKǕ;0jn|ڶ1JzKŬ;"S �$Y}z!`D]"D*`OM޹8}Vb6rKKpy,;R0ڲU͹ v\ xK.E*y֪!g1\ϳ~Lkl.]ѯ_E;::: PhV�(@ P )SF@|мd)s&͏o"/ϟ?/ۈe$<.]"/:ǚfe2͹5ke| PL1ׯsΓ9gl#GdB֧a Lꚵڠ[ T Cʓ)}^l4~ʷ|A=cFB<Q]>+7o`.c˺bJc_~#YV0U3.A)ucV)(AS-EFzu`(Y4u&*o(VOM{BZ gJ4^rUg9(@ PXb(fݻ+V@ƍݻw˙ya"_<R&ÇC&^)fvtE$5j �'OAt+c[|x/LBOGVtQY}�(z]Vf4'N5%K;)Rz/_򫣅#rɜO!^W<5R30W^:_EL,4yxRvjrz*[/6gLO<%ST(]Cƒպb|s@ydm[کv@쿑3[sޒ3:u<<!:5f% P�J@!f<9sF:`PpY(  h"&^"׫*5DΝ;K䉠N~?j`~xb,ZH-йs8ey4c(@ P d*3ѽ؛IQ=GmM_��@�IDATi8>;c<X_鋞 ܮ6X>kf}?_g+Tf�(@󓳞:H?ɉEm[6`-6fvf1={GBCC,/1QRFFSl5 g=J?MQa; P@^z3S,1x 4fr<xᓿ(@ P(؊A.DLեٯ+6bfYŊ+)_!uO"uO�(`PL#.Pݷ5x P�(@ P�(�b((@ P�S7ހs:6(@ Pz:ݲZ@GD P�(@ԪU+>cT�(@ P@y (@ P�(@ P�(P+i8K P�(@ P�(?3324y%)ՈWrD{ܘk?~"Gg{E+ٻ)}"!CO]; Vk&`o0bR!â| P�(@ P�)s; '̅1l? m�1?Ȳ~1 gϐ5.]CGf|w³?;k'OaGH~MZKO~~roO>S1|_0s9WPŀXtWo Z CԄe�(@ P�(@/A1CCΫH1>z ssW凛(z՘ܭnMP ]k#5!qyۊ+#XGzsm�(@ P�(@ <Fk}`ښC4n!fiX;nʲ[4Ľ8._QI0S@7CK+wC3STu? s#vNv{pn]^FFJPnzr2|7+W!=) CsXOt!8{,6n*UR8l?]wQ>og[ e-b@۪CykʌSv^$nݍǏ5۝j@,YW%LHqpJ8N^=ˁ^(d)3G~ +S5^[V&zjG<�(@ PX ̛7Xo�(_ :lkq֤xO> Nhpt;ۅ�>(k& 6aSrlT9~\Ӧ}?֕+Z;6o*_ ƌ._AЖmh6Y~/"ϳqict#ssUllB˟f}2 xKg8jf>A9?557v;wJpM4ښaokw6: _vW8 KeMFD%k0XK%HeҖ&j$ei2 6w}Th*;Xci\Uۈx9l٘vT TEJq IkCfvd{rVX8 \amn,=3Q�(P×%»�(@ zqkw ؛MIȄ(fr:.F`2(&gLy 8jTŁE'<+XcgCظWA࿛P}@X6J m^D[{]c*ueUF^{ zTxd쌪c?#F|;wlY݃A *]4<(kc]l粖6nJ jL` /nYE;K*A.G;s(LݛVDvL5&Tb=_pE?%x'Y˃q#ε9(@ P�(@ P*(6y!lހ2H${KsF5۱dKHtYA$ydeXxmJT{M;MpKSgP^=#^$nZZhlm 2tҿ\&IbHb4n֫P6p/XQYʓ1_QbTjrS�(@ P�(P~UD~Jvg8Z#<.@*uq,X d#;1qX ;[[Ay�j}?[[<ިtѣG<uְxr7'>�·P X p:"Mp?dcpIe~urJM<p%SSchkW<wwwY�(@ P�(@$59~xﯭ߷, o܋Fhlw]i$}}GU  Z tҥ" zU((WEՋS"PPRcH 5wBy=mzȾ;3Gi!!Ud]�_(:A}b.*u'1}s:f$:,,1yYsuFCҀw} 4X<X<u褙`qkΰ3O+mԔyHrj#AaŖz߀ +ɏ{IҜ9sdKd%Ʊ � � �[!\Q3_- 7Hp{\yeҢN,lOA 5OG=s.~X(-@W#_u~bb21{Z~~w�{({c[$<{C6qCuA6y+E9ޚ9ke2məf.%:7e2;mҎdL?sc +~{խ[7GYA�@�@�@ST322$**JZ3YzyӭĎXOlX#IW_~y䑇K\JGkҤ[9/_v,BefK֭Ea ŬaUC뉷"SzFM:5E{B:i>͓O_Tz-;w{H`{Ee? �!iتħa uK�2 � <_+S1]I8ѩ胲'IN>|(p_pF]Hk^˺]ϨXSb1%''ƍ孷$ V,1B�@�@� yŬ6 e/7jVS/o$Bv<iQNo{iϰT@�@�@� (V^Xnwso}(\@D@�@�@�-O,vk9@�@�@�@�K@�@�@�@� (q#� � � �3� � � � qn̒񉒞q||ݴscMOqtZI<pvgc^'m/v9lL̴t|b/GeɟfӲxIM?ێgKwIDNEpV:jLOJ>eg � � �x[>YIByC>|Mq&~avuK2cϾhސ /f13rHM_ƍG?_7=ȩlO9''l /&~XgAGQ[x\ ^#<>l^ |9,?mA8Yw,Q6+7lgi6Dǜav^<QNg緭GJU@�@�@�ߊ8iYG{hPnI2r,1I:?4eNW)/+#CvVR@.h/Iܷ_Z9Ǿ:}:x0vW[٦1T땯6ʪȜ.5իY. }?[r� � � �[K[ЪTMdHp5ʨը K1PBe SȒko7' \?p,9 vNn#ٷ`YX1-|saH+11c;#:/sͱ4+>ҨNy UM#ʅY=e]F,^]S3OzϐjWO?^-x<J~~\BS.ؓ9-&oGqqr#ߛ|mo ue=6_̌uf~!~aZCII � � �[/DYkhl^d kTs<";F>ʡ9:>]OHzM~S2RRqZښc[ Z,kހ52q2d|8,ήCP%I#gZYݡ}:,6m'N^J eC.#S+5^Ǻzmxն²=7s|'/ϗgk�H&5e˗_|tgJ5+87L>oxazo~70Cg$K_n'\/Mޅk˘ח;o]%I)X٤n1iVTg;c@�@�@�*[4�p%ZKt;2dz>Mv(M_fgaRy3ܤY]۾?fԈhiTւo*[KW7Zo#xw͜%5ۜ+V�TtQv~dI@͚ru#D`7v< <H| ܹs텭mZSFoii,/*EuoMCeҩe]ٶGZz. Iird9.2x݁Qc?$`ϑٴ<u}GSKc<6ڭ{S9y-YW\q,4!Az@e8Pz1[#S @�@�@�,E˯,-d(Yhqx_% e_UL_1L+$E4ٳiD "VZA’NVh=EXiY`Ҥ15dKz|ij(D~v>Ri/2Mu<asMS&!=(W"֐g|y~fAr"13э SiPd@�@�@�*>}jYy(i\z Y%df ^s[U5xY`{jg刌ݻwKvQF*~ov6IVCM{|edfzni!jW^ziL'F֮~&UP=5@%'q޽k. f͚u8@�@�@�p[t1RnLdM;6NLCI8%{Kò�J$C!CZEE?ZsYtj1Smr@defUnGXB9 cL'3<y 0} 4h,YCle^ZSo7spNM$_rL;5/['HᒛdŦ/xf l5ؐMwY4jϵl7=zפC!JWhf1iC <d:YqӜ9sdKdq � � �8M-b7DQ3b^7LgGuX<2oY}̾ wl}Cq~i{_9<!kd/l֫!s#Wh|@s~BS.G &ٿS_sLk*_AX&oo}m"3'|ZT':Z=W'ѱi鏺oҿ/4}m_ZٳS/OnSvVf홦hk(5|7|gO9AvoJ Nd[i@dcwIu{m=aݺu<@�@�@�pWZ|C+**JZY<1+#);^P|lNȤ'9,joPXSdZS$ubIR5 U>ػm C$iPj3sO]j}txgO݅˃V�Վ`IMz;w޽{$0d=!�NЪU@%ied3t߷)I� �'6sߥE,WYX:լK:+i|Mh&%}drrlܸQzMbA' � � @ +wbN `%qvg-} 3,!d ' � � �,@P)Բ苄� � � �e#˦� � � � Y ;kB @�@�@�@�l lW"� �Tjr~{)i彬@�(�Aʑ@�@�b 8Ê!@H� CmbYr$ᔄV*9Gfe&*~7ocy%~.I9qBBv{`![Y+UKpF庻S~ T2I{-[I= 4I̐`<b �-Z[ۺk5ke ~k֚Z!�[>YIDSR%8_Fwk/__|e;CrGs@\~AkyʋYx=\N^{Cӥgdnj?U+)Qg_;\"FP|_xYb֭KgQ۶ˎiJ'(ɮY_ʠɱ]W/Qx)9v,yT ؒlHH9-o//}SO~#?|,W`]Ԭ̿ +V@�@lA/}Wffy箭=ys4 9 � P7cʖC1m4X4�=&^~ mwĝNkΕI?!]R)EMH#{'(Vu݇pן)QŻ6Oo/ox/es  �8Er m+|)k6LO#]:ԕ[m%m"jb#0W6!�'sa\KK[ЪTum&CچAM]IͪҼv\\Zw.|Ȃ˯-Zڼ2-r}Ueen~ͅ}dϷr/lE{miid豢,M˼Ȗwߗ/ڜ/Vb7n~9$:1#9[q,.[nϛ*ioq:T馛nΗ7<}p9TѮg<7,J`q_@�@l=}_12_eŚ򲥤fq1;S@"(x}O]GK"HM,8wisXٕCS:e42H (9N5{dXCYc7̱7fI\%Na]{DRƏ!Ko3RRD@])ZҺ Ss\V@,E|V'<գ-XMļBtsT_O|>]\mMΰ=׻ojo'=~]WӅK6m$)V"j7zOEX{UgN+n� �$`%nMM u_%kZƧ8@�7pWtnZ2yy.Tkge&-u;u&/;Z Cv$PLP)xv�,fԈhiJ[G[A^r[$-1QNޓa99Kj9WkԐSRsG璙f?F^-u<(jxVzּ5@A9|vx^ U^>Xi!ï1 sa0'oԩSqsONjU侅Se`x}/ɲ&?I � zbZ3 hfX׫hݦ{PLhͣ  �([e;& GGI+=n,Zi$4%^o??J3kP)#5Xl@(,sž!?-=ғ5Z4kهVj6M՛77֢y/^ԩ%v7\wu>8֬,v)N>9W789@�*FIKKT+)g}: @�MP7ȫ?5h}wg̛K[,0 V^T /^zj8wL{%ۗ'n:ZJO>Rjճ.EzrLvT]6'<r)�@�_@{eX?O@}ՙ� @Ib䜍rdM;6NL4;'ϔ }:NEr=N,ǗRoau1+{}_d5.ud۔˓GeyʔRn{dРrb&;bʡn Roǔ<hKe?ۊ}D�@� h%MwWCNh{Hi& Y EO" è9l"K'`MOI'μlZm&R W/[O-}ɐ:N?ωrugZ_;_B7= #YA(ɒg$^ͮ\tn0l9rt{˸KKk1M>O[ jsǿeῆM}?@bk;t>V϶vHOgke9-ϙ}5g`@�\V`M^|ח@�w)יx% =1+#֓K֯S:v?:2IGK`Zy&/YG'T:!{'R~p+V:!� PfߎJ\^d -qeA]%$$ʨtqFO+ժU3鏓G[cYF�@Q-z96e7n\n| I7Okw[O @�*@9]y ʹ830#�n(@P /*M:#ELXӤFsd @�@�@�<V^zhN/ � � � (@PQe@�@�\\f�jP4i,<"K~/ZU$v]hӲ 2ۻt'իُȒmVۼ.Ь!IMͰӅ95%DlcuhSG|dUV5QXP<+1Ǔe|YF�@p_ +@�@C7g*^%C/i.}\wH&<)}=owk>]K!_?KV@b#/qVߔ&IedO;"{R-_z\灮Ҳy :f(@�!_@gs � � @Nɐ[Iv?oyңs\uY f%.S`Cn_<>\ة+rw9bޅ4؇~ze߳<|gGtv̘i, YA�@˱l`}7 @�@=jT BI21mUjZ<<w{I)L_m6`5b)t5dny5S{NNw<4r49~ڼR̾Ĥ3N&8@�%P9Ub'CO3)زffeᓧ$1ųa-~w@�@�J*o OLz5o\]>| 4C߾@T- > 7e\BzRD j\$@�*[ d&g W?ײMJ7>Ć;G޸z)x^v yseٲerge; � @%ۚ7LӉu&!|T-ao<;GSV01vg[ ,D,+.x( �T )#ߌZN4zyuԫ$?u$MzP<JMWR\RVcǎ&g|||)K  � |TY_1{hV3lZ6ys{Sګ+d ȑ45keּR5W^{:ǘ?v<m29|9r<e@�*[nVj&Uk06\o2Abݛ5*~ҰF5XWi.V jJMgF~@�@.b_3d2)ya#-4Uܯy?ë52w`VZzFt^m;u˺MGiÜiY2;�6jX+:t �Q-bSdңEC՛Keȣ+AAA!/? si � fukUדkhYԞxMPwȹqĪK[ SLs9Éffˊ5w� @p9l-ZKt;϶ټ)jUc9ʧΐѣ[o-\zdڇ� � ; ~c;J˪hf}!T>@}]ɿohk;6{P5in۹V@߻U;Kz^eg NyG�n{~o`{}pdz̻m*D>yn^8 >":tp8@�@]铏Ryi[u㯫ʋדּ7}cw.έ-L@ Ͳ&%k?lsmLykkRMzI,L/ӡg C\*(1 #�8SmbA^i4wEK[77 Iט3+\)))2w\Y|wԊD�@�(Ntlliߺ7!3.-ӊHp"^]̐MbE;>Wv\wYq}aߧC(uu2a�H �[thʌQC%ȚlwlZUe;\Ш9/o/_+R'+{4(I{@�@�*ܸ-ƼjMjjh � �y"(6{Ci٨[طeY: edʅFwAϨ 6ի{=ZI+@�@�@�@� EP쳛}t?OFvi+GNR%)ie̙2tP fN@�@�@�@H"p}|<c6ikrq7o!/74@�@�@�()V6WJݯQ@�@�@�()VN� � @_*g¹dd@�<^�@�@�@�@�<ON11%>E_={ � @?)UM/2/#�*@Půlx0j|@�@u5~ޒ:s&ͣ �(@Pqs]Nܛ\ !REY9KS^'�@�@bccJ+*@ڷ&6ǻ{U<f^-5 �-pg>S9)Iz{n:iDztP6)@�@,l>ye_9|pCQ_ǣ�� Pl} 9o40A&<3S3 L|{jv,uk}K.^iޢ|=+W&B�@�pp x{{^ 5ֺ,X@Q=[_uh_ɀ� Q9UҦ7%=:#[vDK++}F!-Ll}2-IITm� �xh4X'UTeMr1IKK3dx<R lu֕zjWMB�@n ڡ wy=(%w<>C^}|\?iǚS,--2U"� �/` > p4J*-HPPŊgQ �g"(v9" e234urڶk#MT⥆5> @�@4/} k_222:ڂbꨁFu՗mN1-vLKH@�OpAqϳ3%y=3ǎ']O&~^~Hem*oc9 � !l)O%b6^Cqѥq UP˶f/}DT:*7mVkޱIXhq}6,yo#٥ � @ -S)•t 9.p MPÙ9KZvt){{>o{RFӾ\z!7:T_1� � `sƢ,p-KMB�<O-bs.3+AUd 3=ޟ8~U32272ͱria!99YկWJ@�@�  S@�p[f/XkFoֲtCʼ]#!-[TfPw@�@�@�@e"([J>>ޒs[/#~<Ru2 � � � @epXe/N۴k++&j}R @�@�@�@a\b*L � � � ŜxcbbK|O4X;@�@�?)B � \Fm5z � � � @lU322$**JZ(SQ6 � DFFZ;*qk"#wHxxoȀ� x{X{i. � � � �BPI4' � � � �%6A,9(陙EB_s0oBI@�@�@�@�d $^")/ׯ/~>r$b[K T1Ƕ^7o,[L.<3Vާ|@�@�@�@�"(#ߌZz4o([HIӤOxc~Ak=F`C^ R%�ܱcv .>>XRS: � � � P[nȮMdHp5l;Wew+x)55 � � � �gfN1[O]GMS=/͑ I99k%((H"""dV,g � � � �pƙtnZ2y~+ei7^.kw]y~:CN4iǜwf΄� � � � `pᓶ<7Y=J>8Lu:ki]ĜJ7g' SC� � � � D }yղQҸf ȁIȔ�9 <wܹseeҫW2.@�@�@�@�+A9#Y eƨ'c$LjAvaudCQ|m1 Ӥ=H � � � �'A"%5t p2.Mם] p.@�@�@�@S c V"*TjSC'kU:y̜9Sj V*@� cbVJ\.noO@�([=}fC*, 459q̛7XA � � �  Iwҙ8  � � � @QS(#� � � �x�A1Ϻ޴@�@�@�@ (�@�@�@�@y% � � � � � � � �x�A14@�@�@�@@�@�@�@� (q#� � � �3� � � � q<`@�@�@�@�b|@�@�@�@�<N]r� � � � @P� � � � KN@�@�@�@�@�@�@�@�8bwi0 � � � �A1> � � � �'@P.9 F�@�@�@� (g�@�@�@�@y% � � � � � � � �x�A14@�@�@�@@�@�@�@� (q#� � � �3� � � � q<`@�@�@�@�b|@�@�@�@�<N]r� � � � @P� � � � KN@�@�@�@�@�@�@�@�8bwi0 � � � �A1> � � � �'@P.9 F�@�@�@� (g�@�@�@�@y% � � � � � � � �x�A14@�@�@�@@�@�@�@� (q#� � � �3� � � � q<`@�@�@�@�b|@�@�@�@�<N]r� � � � ഠ � ��s+/#� VN 'UTq+8� � z7'1׻.@�WpJPLN � �n$ߜnt1i  �,er>dffJFF>}Z$99Ypn#� � 4?jO1vo. @@�@4N i�L_�m4& � ;��@�IDAT�ӗ4 f[w<e@�@ SbzR[ Lmf � � pd ϢH"� 8-(fl#� � PB2@�_g7?V-@�@�@�@�r 0in@�@�@�@�^_b� � � � [Xn@�@�@�@�^_b� � � � [Xn@�@�@�@�^_b� � � � [Xn@�@�@�@�^_b� � � � [Xn@�@�@�@�^_b� � � � [Xn@�@�@�@�^_b� � � � [Xn@�@�@�@�^_b� � � � [Xn@�@�@�@�^_b� � � � [7Zʒd$u ^^^RjU]WD[*BUvΉ� �4{tСCRN!(VkFNpqr!111V!1.!z PZ~ i( @�"LHр71\ZN�%<=O}}*Rvu߭sn@�(@}I!FB�<E@y1\|h'nz� �C܃b6ۗ4: T}ח! pskB@�pe qsz z]P#@�\Q)A1Wl8uB�@�@�@�\b{i9 � � � <p@�@�@�@sy � � � KO@�@�@�@� (מ#� � � �+@Pc/= G�@�@�@�<W^{Z� � � �x[233e߾}{Qi8 l| � � pn/f'NoY֭['++K8 OγO>-Cɓ9;~\R.]*hyMZ^RRRq8@Ruߵ5B[ldۦr{OMM5sѣ{{@�@�@R {PK|||bb`III|P֯_ܺ}ĈNk׮5:dvtM2sLaӧO/\xy'[ncJ\\< @u}WHn([U}Ν~{}_^z=eٲe=@E}ufS @�(@JXR.NջצLba,_\}_&3 PJr"u&+Vs=i}饗dܹW_ɻ+M65?h ~͚5f; � �TbJ\w{b>һwoqgw^m۶盖ߡCyꩧd׮]uHtPpp :Tƌ#={ Ar Z@BBKHHU1zhWpUVxYhTVMnG{9rDt"O>?ĉ\wq 0^W@� 侫k7nhNu뭷tx;cz鎎;ʄ f͚?3Ϙc~]_|azj /Px ўaz%<<,-nݺfaÆr̚5{3mm۶?V.  � �TnJSL/LT};N:2tG}dPL~ך}6=tC=$^z| }l|٫U<f~m􋗾<؜gԩ& Wtt_tx $~齦>>ssi^~ei֬<Ӓf@g{߽袋^zҸqc2daA1Ϣzj7nddd{bdd<&0Q׀E�NLz~lԇh`{ԩcd v|'�@�@�p)JSL<:EIàI&fR}s='e+ET|yv˜9sLo.͗ݻweΩs=u), x;vLonв4iClԨQ_xvAPdj/:DIhz=/ (@Yw #J*2l0s/X:M59s/{`֭M0_{ ӧ5;TF s-^yW˪ULOÇ<Ͻ(y#� � Z&(xbS>}2/L%[@/m*vɤI<eڣKyjt~=Gk[@LO~稃ݱPva5gK111iEOS-!t-J0Dž*'۔xG� }6? bZ6mژzŮ*s=FO:R.\X=UXV^Y @�@�@b*ݻKDD]Kc پH8p^m|cۮ_S4/3=Վ=j=昂S~ i@_:EPr'\ek yf3ώf#!�%(ns.{$d ̶__ߒ?jh@LC^Ymu@�@�\O&* իW7g^Uh18=X ko3Ǡ>eL!;HFq CuNF )u/9ϲIέksH.Zs|fh7lIk%9"{ }7NxCuuRi^kO4bKz,Ձ � � rپ9t~&Fck֬}bɓ:ߍcVN_tzO|oɥhY:N?f:XQgϞ3L{9t|]v U~o\\/66@�Bx}*{u{aC DzZ^a֭3sM6XĴ-vda_T2yG�@�@�TA1tVOd3f|9:9t;Cɓt.'Ν;͓4�KҔ)SC*u3gNЬОZ*,H69kgĈ:> *S]w}g:tSO @equ/$#G4*OչK۟{[oɄ S}+\+νRxVa[sK� � @&f*)tȣ)%k;w.uq ~yX:1^<`mۮO7aCũ-O~�O >}Lį_HI P{4ssnv\ZW۰^{eIwF8� �E* 0D�/g+I@T}PO@�8#PO:K � � � �NXȅ� � � � PUG@�@�@�@�J'@PtnB�@�@�@�*ţ � � � � (V:7r!� � � �TbbQu@�@�@�@� +@�@�@�@�*�AJ|: � � � @΍\ � � � �XX%xT@�@�@�@tJF.@�@�@�@�J,@P_<� � � � P:e+]e$ @L � � N jy8wҳg\G`ƍc[|W^y}}72ݼ&lA*}- �/ԠXUZihԖy\SZjrԩ|+v6V�݊�ݳ$? �%@P(2_VM{iiiifNm, qw]7FF(p;_nsKnyR. �h&͗ΓfJ\\i@�מ#� � PGo+׎"^nsVQ>\5*wl8 Pw+Bs"� � @I>(vxt9U#H%#3$>e~'}ǧ˦@@U � � P)VZ95iX|Ƣ<}JJ={;rp]{m � �p茿 ir-E튒{J6+J-P؄. 3ruËJ@�@�pC5KOO]vhP_VP-��]4 ///C�@�n?X&;ۓdxW3"�$}׃.6ME�@�@J Wl9-'UꕫKc@�J(}`� �  xDPHIs FRS3m9-[{.4jH~nN�8S39 � �F#b><UzDƞG^,o~4^gFH ˡ�@աn � � 12W&/>uA�RnYjR � �Ge^7:5OȾ{K[ @�)}P w ֊*!� xIWX LwkC}@=uU � ��=Fy[rܛXG�?)*q-�]8T @�7 ( ei@�T.@�@�(LXa:eqұeT @EH:K|Xz 2p-D@V �x�ZyE � � � �9` |$===}lD�@�@�@�'A1+!1N˩ԴJwCj}19ldӎds%6.+i $ddGY46xI>SOY p[ޣhHiYg)&dOHoO8&W얌L2L'RMy~R%ͪ.>Tg(@�@�g}Pl;CwcoIdoexgؖ9/Qޔul:qHIQhsl~ٿ`o?ȑlV2RSqbNl.BɒkooKؽl+π\ždߒz2,cgfY`DG_|l#?!}Wn?VKo2~D>J:򨄏%u.GL+]dEǜah9g,MJK8ISgƴm=R3 @�@~}xvHdv\2y%e^=7R/T.Ee;L/^rmo*3j+E/]&1:փ2m={)~AiԨ4h�]eQzu[yꆎ%%-C['4@�@�pbݛ5UyӹB'/s{<*SJbڧ&"?^{lhj6}yهe^K$=) C\s2KOk5JVfvw#/b^azoN>w _{C:)S2;a>sn- G0=v3מ}׬/>퍶tXI+jwޑΗsϔWT &w}lwHhHy U 2=wԻ~{Y̖̿:M#ҍ=߈נMO->OL[#znsv � �Kb/ǒ=үeܛ]v=wO[~ڷo.իaao'ro7˺o7n$&);tyQ?u Z4_ 5CZIs$9rٕCv-J^_}?m&~X(q;l ~y.52\w?.VO_v}9shґ#rɆW&u vn8hdX=lF IpFlkwho;y?tlڴIN8%(- .#،�{FK:4^l6_^GWje{}lSO|} E/}fT/^;;fKw[;Y֡aݽsy[޻ 5l׬^5V,wjYv @�@�*tSWm=ώs!"D_a|\7^_o?_ּT +>fپZ -Ԅ[HW^4]w[0] Ftf Ŀf9.I9OΞK%?R;E}96Ըx9nh0KSž}V0+,%ڶ;I dӴk,\QCNEGKeíӓK@͚9L}Lf?P˨sζMEO2Eza+_C7Ef�#}7pk[6i^448GO0ľSȎҹe];|y=K7/ � ^#a_^k, � �Ŵ-3Ew^+Mkp55|^Ҩ3޼X6w&H_}e#V?D}Էz֪ePO y4y[|O6L_1iYh5_ٳ$iذaҴiSdڴ Kc@ྛǀn.m_S' Km4+I煙XA)${Pcَ� � P<"(vaY2++*jIg~me{H '5^\)^_qN4r2=$k_OV*[4lgۇegjX}oޢ7EFFݻ]vfsԩSG ${a'CP8h�]\wscMyu)~:zB! w4ہ_EV}_UW~\#AIصk[&6kolD�@�X:w;!O)tywlyIܬkJ$]YlɷJ3s'svCvf?I}m{3Xj223O١_WcɱgE:{Vk,Yb.կ__Ni10<Nn/9na[OM_k;"-L>LTy2)U>XA;C4)rX=~r(GU|1]Ͷ>=ǾV̙#\"g.0!� �T@~ ')2ue+/͇۽c+&g+ڼ{RSG`mxz̺?eil{-c{'Ț#AZ:F"&cj(.dѹ4P6zk̻U1>b\Q"_{'yu^qqq=Zq1x�ݯ엟t&])׾†tm"c/km'K*6V2?Fʨ-M=l&ך<;+Kw~|Eҧ]9}KsDiW^̶8 Mu-v � �TWʻ z;vH&/Z);V'>-11d=˷bNIfz5i~_4I:rG؜yͺu.۶m^| gsmժUki=5""";[ܥ}SzEL?=#SNJ+_ѱIRZ[O,ԫWoٹs5 Z!\2w-' �8KΪ1q nܸu6,orSa �ef9qDa8k#IK|} iY_xYV)99Y6n(o&B@�@*E[럧eWh  @yhϰ,[D�@�R'*K)B�@�@�N�f@�\X _� � � � P>ǵLJ I � � � �e/@PM)@�@�@�@z � � � �e/A̬,9|$ x;('AAA {o1jh11h5jԘbk-ޱb/`Dy.wp*r0n߾߽{s3F\PaS&GF"t\y%%Cy+?z\06V2KETN \ƒ2Iݸ{8-塊֖mzzDN zgnDzl~58 G.嵫."& ;}C3&!E֏O4{`t{�`L 0&P0zp8M'ϵU0?Y7F-Z#/]rI*?|?.Hf}\o!bA56v 7-'N27J~Cߋ; ,o߅KN䨌7΁C84>5@KSm@7֬ŊՕgr̉A^Sv#fk~x}e߬>vd?^^?HjCܸnv4bG.5=WdL 0&�( RCqzo~!_xk |nM6ˤ%O9|hO(fe~ rGibu%fX܊.¾!jS@ 8)=g| 4GmkQ y"ౙ�`L 0&"k^(6Ua瀺` w EOk)%l>&yJ"51wW^UQJ,{[Z0euv +͝{ Hpcn{=SO/%P3~R>JNo`KHK *ST&v(t{Ak !ȢqÏjj NNB=_LmGsq_~ƍmaɘ~Ϸ֨I kzź#+*w'ձ}G TZdLXpN 'L�)Ŋ{nVHkI.է�5TNk"o9pVWVR[GusobrpQ6u_K+[<;=}&mذZqWף%j+tAdEVnrV{PGafh Z߄e{çEڛs2BPYO[?2[ ~!Y*s`L 0&0q‹_?|uc/լo\t&M8S2Ú*60ʫ- 5OM8rI,)VȧOq[qgX7?`nm 'p⳩o9< ߙߢŏNXLsFa.l؄- |emnPMɒ/@7@˹?"IJ)'G>Qt%ݿr$!%sP\,Vfþ'A%Ցe۝;a8<<(|Cǯ7EdlT|5*qSqq$\+gʒS=T+눈$Yzb(OBcƊM,@-kFLT]6)]K{l`Kznvz A7YkWRJ 3NZi"3x }Moh$ӲE޷?ML{WASq]i Z<fpDڴc\zUe?Bs2w-d)VA:' lw~>{|<-:?ǶFrHXـFCk /݈\SقqmElQ:U`4ӺQR8%Rb˻cGQ2T 0&�`Lغs~8~+nvhXiݥ<ζrՖqZE>LkSM ;;bs|mˡr%nڬSGP9TRQ֖PeZpS<XR�@ܖHylWpk.BawuBA޽MRh:s:AFcXtAZ;;vZٳ|7ndx,U.ֲ^%VQoCzeT%+QKvRL,5S]wKx{^$: 5)Bu/HIN$bA{xkXH}EX} 9εjtRIަ5h =`XI7kR}4wE)+kP3~Qn^u \Wqӱ[Xou׬'uU)T6ɃȪM3,.K9ڠ֏%9vZ#`L 0&@'PdbYƽp>ߝ:CRDx,#נ=^Dp,ݢR4.cfZBX\jR+Q4V[jG<ܒϱJe$i!Le°cJ!x*]VZ^B:0[ ME'b)\l+2CK7V2FX(z�r&J$3}2P)3֨u?sֻ(r]mLE.)12.Yg쏬lX4hUGn+caHxԯ|]QXޅ(YK!60 eٌgYnfp@a)1&�`L k*LIlw^ sDxl./Ji [Ў<r*9TF.?TR$xNG*-_ "W3Q܅X`'['ЃBDehr EIܭ`N,Ю.|aGfnc-lhIqum1p# %ڵkPUeR+nJp8N>۫YbQطoѱcE|r$PX]-QR24*5KQXʒ5 `[{_@=;wT 5P\"7Բ3R;itutg];Ir"ǎCؕm۶d9lt'z*n_b)B?mfѷ*uJA5Ն4>\WۋUJ=2oo_*UbŊEfL 0&�( y<i(ܽyN m٘бkw�ɑ޾ w6=Q-DBH^[z,hTFk֐ w<;R g3ʶoGEž\9{eҝrYijK'iqFY9.(VmhފR⣑[a(}]ot\d)zݻwkg瘶@t, H:s 1 )cI1:S5.y!P_b;֡DǎЩSg<>auסb8a P$Iz]ťK7>LQ٭TFB?D:9jL RUynY Qxdf3Vekgce.cZډulP.-(b׆Q!1#f!⭑!׭[Ν=1&�`L �^)p? ,Y9/"`X�?)xo+bbU8aghGize2O\2nJZX׬p[UDXQn?DiHUd@%@;Tne;uŮm-e/$_~hN'~f|,8cͿcL հV .rESڨ:\bx$F!Ç9%jΩD<.=XVFol=~|Oc)f&mj;z][ktvWKH`wڤAoN3}ĺ+l~\s1xniZw{//f3asYK(U9F[5hޫ $]/<C뮙ւ@xT9ve;D0~'] F<ݼAQ*Zj٤Zۀ*o35VգyJB_~r]zɢ֬ǟE?"=HPwt;V+/h6Q4tQW `L 0&@$`&ܢ7N\2EݍG ;]XAÆJck;czwa+vt|B;5Rj,dM#Ng.bPleWʜ+duFnM.9)et9ŋe6ݒ,8)KL4j bQ} ۂou( CEڝvtwE|޽JcԨQ<r{NWšGhisA򺛷u7uxZ#iES N*5I],.v}X5f~Hnvneֱ̱T;P*&YFZnk׮ 7@ؐR%Lmr&�`L_x}y5cibDƦdlC!7żVvמD;쮅S__3SѼE2ˉ'Qre ><s3Y %ʘqG z #OBkgyܳIaΝ;~ |W< `L 0&BH(0&�L|1 &�0�Yf&`L 0&@~ʏx &�`L 0&�`L 0&P�R�`L 0&�`L 0&@`Xј�`L 0&�`L 0& �VS`L 0&�`L 0&�__<`L 0&�`L 0&@ Jp:`}S##@p4<=7&!;}Ci2 AmJpZ & dA{rLKyS̉p_=F_'b`L 0&�`)̝Ga6[Eonm& [4Wy 6Ϫ>=ı a+?7k6験$Me\_ gW%OyOzO zN M ш1JtWy?̿A|Y-xLq ޾ ;h:] 9*ϊwKO|kܼ�}gN';`L 0&�`&D„DS <QE[F}pwǏ! x9a%HMLU9]\hd/YkX+0&�YgNqs|um|˫{1Wkz-ϋu9�`L 0&"a)&;ㇾ9[Nw[a9v|϶^/a{~7! R2mj%U==zc't{ϝo{Êձ7{PiE.C$'NDZ dTx*7[ ӻ&]<|ܵX[g1%&V$Am.k aAn?Vk]_'|g@` qQԫWSN3P@'PX]Z?mA֨ Quls wLG8X]Zsj$еkljdͶD%g7m*@ijeGk[x:u*pU9�`L 0&"[zRx_߻(S6M@~}ղ`$Scq_=o9w^{}<5 E5mv­YS~C,9* wi"oہ2-[q#\_FLJܖ5y -g/vwkb4<mUkoTq,ݢ.Xd+We7۴BQY~<5i,{ MB*Bveޒ# J % 1 ljXfϟGPP%]X2ݨZ)O:KCOy>sxڡZ &KF_h\Fyz"3\&zn݈>b<>i2JTF:Iq%%rr߾i Z<7o@.5no樑^>/є>)&ƥܹs:ƞD&ai׬N5j�j~?CO�`L 0&@a'`Q/^\g' 3(I/[Gw5mL©jW5~5vv:A[4J5ja9Q^]\/<HW9 -^(Z}xk[JeVV-`+ge}pTQmڰTYy {MZAJ] p&vŽE޽PRBYvC �מ]:6a=HtO0wx{-h]ԩj)Բ-*iN0gE^.ѹ 'CJܴ@D9'j@khޮ.XrݻJn:w? X>ӚXC3\/Ȩ{aV/h\5F7& d< jZL 0&�`L0(JۏiwċÎ ҝp#ៗw1K x,MC`SBP˪ Ԥ$y^RRLыR8׬$Ex/!bx kWګq7SIrژ{{eזn%ՁCŊx/,:4sU+2(1v؜q9( 0UĈjj\yL;V(0S 6~\(6%]*b|aޱ-x~{XgߧzSu̦Umյ ��0IDATa?s(;T9�`L 0& 3 U h YIowNX4-ƪMndeP`.,ȒK[WM<?~',t=s\%Oic]<.(%jd}rߋRKҋ=Ҍ,9kk8fM!@I]bB7)RE,m1Jh5K;!j})xxxnݺj><y.bs <"K0;vJXS>0 y(i"8-7hK͏0];oHYv킍Tk߾}ڟ}AոK-a!,36o>.v1۶\�`L 0&LTSߑ/GɚKXbsȢ}DBuȚjtPۋd)? XQu%Yء#(({Vj%=\Im\Qgw|Tp{T̀ss/#Hig[ )"Y][B]ݚ6.R*,H-l+hOoO=zs>u;w)SP!P]R BKw"Zg.Ub"TynY b>T1xLk* 2XO_Ƿ`M=3\O>[p'0i2<LM&]uر:uꬓ'L 0&�`L(Jru[-VU3  \I\-wotZ<''jh/bwoB5,+_g"D5}Ss<wVEXm'[ed(Ũ·?\LWSu+TCgfN^)Tc7c̳2ʌ󤺎 +yS M;N2 1P6"yF4s(5/qC&PYO+ja]BYhUf|%mh%\$s++yl<ct1Ԯ\S7lv—5!9!?wt'㇑pMpx#E*ϔ%G&�`L 0&P w1]gpy4Yx K("{C>v'nM%4IJ7 o6hZߖȊ+7r?2vˍ;fh RY^r,ya:>} \pkίaMn??\m\* Pݼr?mBn֖NcYNJ=[L(J(eyHp}$>LA%g7xc4{J+QFx,& ں˷ 0&�0=YMxO@ /ʠ#7e=rl3?ꭘ;/vu[vf2Rh啁Mɒz'amϨÇg3N}͚#c,ګY�2^[HQ[ީT8q$*W,ׇl+q`L 0&�0a3W^˰q,k537}n ʴn]57@`mJ 0 7{,:X,«y;q⧠ `L 0&�(X)VX﬉]N\ݮLiz\L 0gGӋ 0&�`L 0O{3dL 0&�`L 0&�xX)rwL 0&�`L 0&�`�+ =2&�`L 0&�`L <e{@;&�`L 0&�`L 0ObywF\Pl~媯H?6Eø8w|9xHMwOޗO̍^\ ‘az¾szH%${F@XIνOal,nmنii1E_/]yZ?u8]廸"IͰ9%:ҹA`p9C bR�>2{y+<PW\�`L 0&`B1~=kӯ FW-ZtGU'tt/mRRe\_ g6o\ ޾ ;m:] 9n/ԥdn*A\R`N?_iI N$yS@2S;<i  0i?kzx Sda.`³wd82vvqڟ÷~:/}ʫ[dZ_R{φMEgzeHsDģ]HHN5T Nu 0&�`L g9W1k(P\6ʧٻ5iwh@RDۂf̷12 M %qs\wu媴~\} 6޵VOu1}ja5DSo7+[@<U@#֜=uIڏ5ʠo{p|]qL 0&�( rw8=<K8J.G߯ ˱㓦(xz ϸ Y&&bS.ʫ:eocEX)c:; DY|sǣ$1I6A/5ܔ. D}t'HWSf}9#Wvra+2_[ArL[ߢP7~HlwH~@P" -mXC +w!hKG8:304R6lW>5.J~^Sk?kU,/f%?|$^^(-MN r}$ dl*e95D7]yƼN,sMz/: ] rI:|_:#{j>xCmBitd1Csa9(J5?,496ȶtMi\Q~,鯾gΩ*oO r<"9~zvߡ~tjf=IHH]e-|gkT.㈏Ճ% /7Ϣs?rA%j|wcuu\󯈡ݨDM~gة JaGcw aJId>d}EkIɋ3\SR5ॲ9.*s>7b9sNugˉ d!+qR,Vې6~ѵtYg=:!*Z51nK ͓{9] ;gEPٓpcy?&x#|u�`L 0&@Rsʯ0^:&yhV^k&Ru Ib=<60P(2@ZΝׇi=BIE.eB;ת[7ϡrrāFua|yskktXLorkX ٹ3E_p{~Ͽ@=h:s:^>~5kx?iB<QYXǖ (Ӻt;$%TP@54z']9� ں%m? cfx_[{N5k(Ԯ%rQU :d9>ukyn߀]K=6ן4ԩVfAgW^,X@X}ط>m|;ڴKò8:Nd7rz@W$|f?^AVfqpw÷ϛ.bel-r"w@jj,!Y[1wCFoh=K8uü-j8Ig7!pN zRz}ܪ"^jYQ::| { ֛-k_u2[+S9-GS]wE]CT*OL<wx.J֫[|Jwqk>~N}X4.5FFFS24ܹ Ûp& }\JUKb٢:V~ ;Ngd}(!$9wg/Ri\(im_Aẽ阆gƋMsNE9oz49tƷǿwױYJm'A_q?f\3]Biլ?ƴQ4_G`ZZcU)~B2BzTI9IJ!Z0{}{AUOQᄐI)>SDûx߃d.̕h$>3K`pϰ+wR!|>!MCüq*w-�`L 0} %VepL|�:=QHHݕQGUpGbVhtXenc#W"> P(~VbfJA:c!k2s:4<d]umJ*G6?A6 WM_l.BawuBsuoY׽MkڸJh&R &M@1+KTs[z)|e*ը!bŃq]\/< DRҵٔtnnwY⑸9XtJx{{zԑ>BWV0N˪%8*z9 Gul,0ՆOje䃥ҾMmw.O!~.+s(Wm-J+C:Vŧǥ[PqV �Yd坡\#RXvZXtDyܪ|<wO*j^hZ^vסliJ]FZD+5%q#FB7G<SLzKⵎd{?*禾}XR{C NRU nHXO*7<`?6Afњ"ַۋ5R b,ǃsx♋ +CԷE,uO5B{JIBʨV7k2[v7R8"Xx(¼#"!ICJlR~[YCwGкY$EX_/+q.?9xfq:RX{OD1թ8ai F wAaG/[S4?8Vo(\IyFFRҏ6JKGZTrҭ`wVlCJQ#(YYZIԪVE~;ўOvu8 0&�` 5!z针O}'1Gkhf |3bY*=Ln/"Q#Sjő\,QK YY)RB( 2۵qևH"\R9VDцbdFRJ<Z%hgIEb$NUrTh6d0R!Ic'ߏ=TK@3NlРAڧ4M pDʯ[vd)hH,̅I7~Xn'Xdqجؙ\yj\H좩/)QCKE!GnEYs\C$jYPX[kX*F[w䃭A4QXu!¾:U"oPG>[ ߹FD\g|Ƃ2vb};vlNr]3{1T9FB`-]"D-^(ȚIPkK+ayI 1W'=I3q@}aVȢ֒iG m4nC�kl=,9R1rK(IH 섬h}-bW_)q Ԟ䬰x%a]-(3sxu݄Athua_>rT'G rYЩ=0ikgHp`L 0&xbRT83mbsk^TVƷQNjew|BHR!TYy o)X`dMO(Xfcnh硱f-URIY-Κ?ni)s&]2gN]9BBrM[G TG[l]]iYvA"-MWqbQyv$c%vl۶-2Y݉j  v\ZtI <i*n#Yvݼ1j!E\fEIzhMߜ R&ûxIw0Wo,Hí9¸ߖ ;wm,! �œ/EbD֚J#ڵ 6š})E%rooP* )rN <Ki $.1UZZQ[q ,HlFZcPIC3{ NYs~k^N/ {Ō^|ڨ}K@(U˯Uo(z羄9/"ʸ?q'I;F(zNBd~5-e!Y)ҫYyB`$ȺmʒX7,~d<i`},=#2? 0&�`0.H1=:Cq*( IŠ?8i*r!kHoA|B݃^ӉFm) >) 1 dNd=uTe*dEZw(qͥ#7�Kfdp%*ۡE1Cж2@}r!2ll5I+ƚ2ٹN[&Mb)>r]4/nĊ+.ԁKZ2)i$@J?xt$;Q6m̘C<iybL!7:HAnN\"�&9�CĹyR!J�PL]U+r{r[9u֞oN}^[B,]!涥uݏ[ b= Af$ j~8Ș깮Cd3m)hűBf+4 "+ >;X+=nׄ;ugl3nPhaFW @$}x.IJgEA@.#zc7{tL[.68(bui4>tg;.߮9+-X!fd=K#+{wTU%˽RW%wO9$ɩ.3&�`L@!`OJm<^ [ՙ7) =hURE )+W*IW@.}J=Bz\θ&Wzi~qW0R~6x Z#@ YQ|-l__** eQrGG*(Yqz+;uy*Vgi})u,k͗2Wj{3Rs!|7K ˴/]5I79P,! 8dY\6""{ضl7/聺rg::~T< 5vtye1Cr3CR@4urO8,b UR`$Ihl%,0Mgzf~;cXcK&GKVh+>툷YH+XXdZCdQXwIuOLJ?'bB=mmx7oC"QJd ײzז>dL!rwUbw_�otPm+|jvtDZ)gT{GyPl·,Yi\R`nhV ~V o %3q򢓲9?E,gmE,Fm!U:@4ZiH-0y>@nBmPw[a#MBn9 ݯBg{C@ Mr(P8S$)KBjV:}v8 0&�`: y'4?A9w/cA.<%k\rnjAÆ ra^fĻR!69ե)^*Y(&WJLpat\9ݢZPkrg-SZu\ i�J_,yW^ e HF SYјvu3SSR% 7H;jL3 c!=9Mŝ*?BBP,4C{:n w"z-5xyy~Ri9~xۺWriHƮ+J[ZSmm #ݢ] (Ĉ2Ț>r[XYLZ·A)N{\z*i {~;KgI8_ǥ1kج}rHc#2.Yy7*A~JYʝIcFȡz9z;YD<u7˄8 0&�(rl,.b?U*YBa5'lJj|kG1uo,ظ=*2:'wesgiG Ee�%sI~"%ڂAOڝN{z7ө˹jbe**ҧEaݵȳXw2cڐG((}^bpeʩ·6P67)镟BNY;/?8 ]׫o\tJr'69[)cQOtv.�`L 0&=" '@NJ~587 5{| 0&`^jY deFwT,L 0&�`�+S(Y.Rp4vX�`L w(^"X�`L 0&t O 1 0&�`L 0&�`L <W{ {R&�`L 0&�`L 0"J10&�`L 0&�`L 9+<-- |<=&�`L 0&�`L "O}2%񁥥T'OyL 0;ɻxB@ZB7Î Vg̍^c\ ‘a&ҭ8.!O4{`2eL 0&�(J ՟pJפoժPZ5,YdeLh0u7x.?X{Nc׀!H*77#yϊ徘mW0bϡe%9wbmVߎFPQȥ&s-<Q&�`L 0 "U} =1˶B ߤ&ϓeL( ni|L 0&�`L(b{o!*1�kkA]7x܍ 3&@aYw\Ȉ~tĩi3rulj.U͚7b7OYv{~,alI+Y@<?ܐdWv}jlڇbkWxK&zkaKq~'݃ʼhv9 :իU� vF= aEv7J c|, ].˨N\ĀX{w-~X{/EqE_ K\S瓔>!јG#=!qvԿ6`L 0&(JQrsEawx΄Czuq<x?t|L niֿ$oKh5o6yZJ uW/S*81yzC-xQT"vz ɑpu{LC({H++^6:oƵcϐѡzl^ԇ88]xp M mQQCY~!^oX u) 1P\zϟ.JVz‡}zV#m%cՁ(im_ wFx>[tS4O;a`|lD0l vV,#eZvJo^`ج}mƊ Eϻ`|BcmoU,>]P6wQl-eQRp 0&�`L4zy C'8Ŋ5;LhͲgϞի\\JoߗJ8�(XL}-*P==Qu�@;~,ܚ4F1a]/k"d(+YVj,Ueװ`fn.dWV^=$ED v(.7V֧ΡpkuǍAęsHWdY5U&d^Ts8Jl}*7c|8̝;J T,:7pi^ / kA֕D.M ~Ru灷WGf17V! A}Vܖep뎐{p 3NRF~1Z,T&<DdlG(h~[WH1ned>t.^puL 0&�`Lbvi=ZE?qp7E_н{w7O 0GSةJytY*OAamf"[RUdTUZۣ*eWf5f5Wl@T2Yn.8yycp+SZͣ]k5MԄiA(,H,lmXL6h c]OHD;TޏG*ʷ]p3,Fߚy).<2(<N]z.c2@>`ދNĶSPRѸ$뫥kP$Rdѣɿx$&�`L(J1wZ[h~HSSTv܅wubhgΜApiܸ1LxL Re5t{C`,,4I+!N.XSkWBq$6C.G}\t̮LwRQKHFif^V%t/r=C o,憮啡맲cǎ!Jٶm[؉Qѳw%LIeK;ʓEr%2 D\+Iz5_%o .FF4?zfL 0&�0]cMw9μWEYga_&`2~s(<>6 t~~~9 0& ˺kڵe+ q$K.r!LWP>.Cť%>[$\4ߢRVc{x+Ӫlڸ<^[Zym *.  9 t>\e޲1cƢG [43qǾ,(X׆9QGXlֿq'2〈UFhńmhj]B&_H\O,]us L 0&�`E[9Zc>$aW/u4X<h]t ^n1'OVb$.: 0& úkױKc]q߲;j.t%ϕdH7a8}'NNzw3TVaYߣC{PgFBn?/jLVPQy*v5IE?7b-7m 3EkaoZ V-4 vfj*fmi.ӮCɶn%ln2[-.QwZuF[rq5^#˚xu8�`L 0&P8 ^ oyI^\5#9_3hPq?.݁E? u0`xY_u:&%@ٖgW'v*$]ŧn]C\7aHkg[Y4i@2 @R|"wGm1T]O_%عPXyVM;cS2ιwפ8cӞ[- w;XY# 3k% ںtx4&�`LiiX@ C!8@~~W KK,Q<1/3�`ϓ2d݆# ho_bCezheRekU˒/sk!|(Q\( ! '(caL 0&�(RToMZn-ؤ�`&EM)X�`L 0&�0m3dzgL 0|$@k7:G䡘�`L 0&�xVtg<Q_&�`L 0&�`L 0&PX<&�x:A/}ҧOo}ٜ�`L 0&@#J"vr�`E@M\Ƀ'q`L 0&�`E[I>����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/����������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022566�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/AddButton/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024452�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/AddButton/AddButton.tsx�����������������������0000664�0000000�0000000�00000001250�14467713645�0027074�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import AddIcon from '@material-ui/icons/Add'; import IconButton from '@material-ui/core/IconButton'; import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; /** The `AddButton` renders a button that represent the `Add` action on a form */ export default function AddButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ uiSchema, registry, ...props }: IconButtonProps<T, S, F>) { const { translateString } = registry; return ( <IconButton title={translateString(TranslatableString.AddItemButton)} {...props} color='primary'> <AddIcon /> </IconButton> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/AddButton/index.ts����������������������������0000664�0000000�0000000�00000000104�14467713645�0026124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './AddButton'; export * from './AddButton'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/ArrayFieldItemTemplate/�����������������������0000775�0000000�0000000�00000000000�14467713645�0027123�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ArrayFieldItemTemplate.tsx��������������������������������������������������������������������������0000664�0000000�0000000�00000005125�14467713645�0034144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/material-ui/src/ArrayFieldItemTemplate�������������������������������������������������������������������������������������������import { CSSProperties } from 'react'; import Box from '@material-ui/core/Box'; import Grid from '@material-ui/core/Grid'; import Paper from '@material-ui/core/Paper'; import { ArrayFieldTemplateItemType, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `ArrayFieldItemTemplate` component is the template used to render an items of an array. * * @param props - The `ArrayFieldTemplateItemType` props for the component */ export default function ArrayFieldItemTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateItemType<T, S, F>) { const { children, disabled, hasToolbar, hasCopy, hasMoveDown, hasMoveUp, hasRemove, index, onCopyIndexClick, onDropIndexClick, onReorderClick, readonly, uiSchema, registry, } = props; const { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } = registry.templates.ButtonTemplates; const btnStyle: CSSProperties = { flex: 1, paddingLeft: 6, paddingRight: 6, fontWeight: 'bold', minWidth: 0, }; return ( <Grid container={true} alignItems='center'> <Grid item={true} xs style={{ overflow: 'auto' }}> <Box mb={2}> <Paper elevation={2}> <Box p={2}>{children}</Box> </Paper> </Box> </Grid> {hasToolbar && ( <Grid item={true}> {(hasMoveUp || hasMoveDown) && ( <MoveUpButton style={btnStyle} disabled={disabled || readonly || !hasMoveUp} onClick={onReorderClick(index, index - 1)} uiSchema={uiSchema} registry={registry} /> )} {(hasMoveUp || hasMoveDown) && ( <MoveDownButton style={btnStyle} disabled={disabled || readonly || !hasMoveDown} onClick={onReorderClick(index, index + 1)} uiSchema={uiSchema} registry={registry} /> )} {hasCopy && ( <CopyButton style={btnStyle} disabled={disabled || readonly} onClick={onCopyIndexClick(index)} uiSchema={uiSchema} registry={registry} /> )} {hasRemove && ( <RemoveButton style={btnStyle} disabled={disabled || readonly} onClick={onDropIndexClick(index)} uiSchema={uiSchema} registry={registry} /> )} </Grid> )} </Grid> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/ArrayFieldItemTemplate/index.ts���������������0000664�0000000�0000000�00000000136�14467713645�0030602�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ArrayFieldItemTemplate'; export * from './ArrayFieldItemTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/ArrayFieldTemplate/���������������������������0000775�0000000�0000000�00000000000�14467713645�0026304�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx�����0000664�0000000�0000000�00000005252�14467713645�0032566�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Box from '@material-ui/core/Box'; import Grid from '@material-ui/core/Grid'; import Paper from '@material-ui/core/Paper'; import { getTemplate, getUiOptions, ArrayFieldTemplateProps, ArrayFieldTemplateItemType, FormContextType, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; /** The `ArrayFieldTemplate` component is the template used to render all items in an array. * * @param props - The `ArrayFieldTemplateItemType` props for the component */ export default function ArrayFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateProps<T, S, F>) { const { canAdd, disabled, idSchema, uiSchema, items, onAddClick, readonly, registry, required, schema, title } = props; const uiOptions = getUiOptions(uiSchema); const ArrayFieldDescriptionTemplate = getTemplate<'ArrayFieldDescriptionTemplate', T, S, F>( 'ArrayFieldDescriptionTemplate', registry, uiOptions ); const ArrayFieldItemTemplate = getTemplate<'ArrayFieldItemTemplate', T, S, F>( 'ArrayFieldItemTemplate', registry, uiOptions ); const ArrayFieldTitleTemplate = getTemplate<'ArrayFieldTitleTemplate', T, S, F>( 'ArrayFieldTitleTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; return ( <Paper elevation={2}> <Box p={2}> <ArrayFieldTitleTemplate idSchema={idSchema} title={uiOptions.title || title} schema={schema} uiSchema={uiSchema} required={required} registry={registry} /> <ArrayFieldDescriptionTemplate idSchema={idSchema} description={uiOptions.description || schema.description} schema={schema} uiSchema={uiSchema} registry={registry} /> <Grid container={true} key={`array-item-list-${idSchema.$id}`}> {items && items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType<T, S, F>) => ( <ArrayFieldItemTemplate key={key} {...itemProps} /> ))} {canAdd && ( <Grid container justifyContent='flex-end'> <Grid item={true}> <Box mt={2}> <AddButton className='array-item-add' onClick={onAddClick} disabled={disabled || readonly} uiSchema={uiSchema} registry={registry} /> </Box> </Grid> </Grid> )} </Grid> </Box> </Paper> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/ArrayFieldTemplate/index.ts�������������������0000664�0000000�0000000�00000000126�14467713645�0027762�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ArrayFieldTemplate'; export * from './ArrayFieldTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/BaseInputTemplate/����������������������������0000775�0000000�0000000�00000000000�14467713645�0026154�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/BaseInputTemplate/BaseInputTemplate.tsx�������0000664�0000000�0000000�00000006271�14467713645�0032310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import TextField, { TextFieldProps } from '@material-ui/core/TextField'; import { ariaDescribedByIds, BaseInputTemplateProps, examplesId, getInputProps, labelValue, FormContextType, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; const TYPES_THAT_SHRINK_LABEL = ['date', 'datetime-local', 'file', 'time']; /** The `BaseInputTemplate` is the template to use to render the basic `<input>` component for the `core` theme. * It is used as the template for rendering many of the <input> based widgets that differ by `type` and callbacks only. * It can be customized/overridden for other themes or individual implementations as needed. * * @param props - The `WidgetProps` for this template */ export default function BaseInputTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: BaseInputTemplateProps<T, S, F>) { const { id, name, // remove this from textFieldProps placeholder, required, readonly, disabled, type, label, hideLabel, value, onChange, onChangeOverride, onBlur, onFocus, autofocus, options, schema, uiSchema, rawErrors = [], formContext, registry, InputLabelProps, ...textFieldProps } = props; const inputProps = getInputProps<T, S, F>(schema, type, options); // Now we need to pull out the step, min, max into an inner `inputProps` for material-ui const { step, min, max, ...rest } = inputProps; const otherProps = { inputProps: { step, min, max, ...(schema.examples ? { list: examplesId<T>(id) } : undefined), }, ...rest, }; const _onChange = ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onChange(value === '' ? options.emptyValue : value); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, value); const DisplayInputLabelProps = TYPES_THAT_SHRINK_LABEL.includes(type) ? { ...InputLabelProps, shrink: true, } : InputLabelProps; return ( <> <TextField id={id} name={id} placeholder={placeholder} label={labelValue(label || undefined, hideLabel, false)} autoFocus={autofocus} required={required} disabled={disabled || readonly} {...otherProps} value={value || value === 0 ? value : ''} error={rawErrors.length > 0} onChange={onChangeOverride || _onChange} onBlur={_onBlur} onFocus={_onFocus} InputLabelProps={DisplayInputLabelProps} {...(textFieldProps as TextFieldProps)} aria-describedby={ariaDescribedByIds<T>(id, !!schema.examples)} /> {Array.isArray(schema.examples) && ( <datalist id={examplesId<T>(id)}> {(schema.examples as string[]) .concat(schema.default && !schema.examples.includes(schema.default) ? ([schema.default] as string[]) : []) .map((example: any) => { return <option key={example} value={example} />; })} </datalist> )} </> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/BaseInputTemplate/index.ts��������������������0000664�0000000�0000000�00000000124�14467713645�0027630�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './BaseInputTemplate'; export * from './BaseInputTemplate'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/CheckboxWidget/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025460�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/CheckboxWidget/CheckboxWidget.tsx�������������0000664�0000000�0000000�00000004575�14467713645�0031125�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import Checkbox from '@material-ui/core/Checkbox'; import FormControlLabel from '@material-ui/core/FormControlLabel'; import { ariaDescribedByIds, descriptionId, getTemplate, labelValue, schemaRequiresTrueValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; /** The `CheckBoxWidget` is a widget for rendering boolean properties. * It is typically used to represent a boolean. * * @param props - The `WidgetProps` for this component */ export default function CheckboxWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { schema, id, value, disabled, readonly, label = '', hideLabel, autofocus, onChange, onBlur, onFocus, registry, options, uiSchema, } = props; const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, options ); // Because an unchecked checkbox will cause html5 validation to fail, only add // the "required" attribute if the field value must be "true", due to the // "const" or "enum" keywords const required = schemaRequiresTrueValue<S>(schema); const _onChange = (_: any, checked: boolean) => onChange(checked); const _onBlur = ({ target: { value } }: FocusEvent<HTMLButtonElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLButtonElement>) => onFocus(id, value); const description = options.description ?? schema.description; return ( <> {!hideLabel && !!description && ( <DescriptionFieldTemplate id={descriptionId<T>(id)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> )} <FormControlLabel control={ <Checkbox id={id} name={id} checked={typeof value === 'undefined' ? false : Boolean(value)} required={required} disabled={disabled || readonly} autoFocus={autofocus} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id)} /> } label={labelValue(label, hideLabel, false)} /> </> ); } �����������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/CheckboxWidget/index.ts�����������������������0000664�0000000�0000000�00000000116�14467713645�0027135�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './CheckboxWidget'; export * from './CheckboxWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/CheckboxesWidget/�����������������������������0000775�0000000�0000000�00000000000�14467713645�0026010�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/CheckboxesWidget/CheckboxesWidget.tsx���������0000664�0000000�0000000�00000005524�14467713645�0032000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import Checkbox from '@material-ui/core/Checkbox'; import FormControlLabel from '@material-ui/core/FormControlLabel'; import FormGroup from '@material-ui/core/FormGroup'; import FormLabel from '@material-ui/core/FormLabel'; import { ariaDescribedByIds, enumOptionsDeselectValue, enumOptionsIsSelected, enumOptionsSelectValue, enumOptionsValueForIndex, labelValue, optionId, FormContextType, WidgetProps, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; /** The `CheckboxesWidget` is a widget for rendering checkbox groups. * It is typically used to represent an array of enums. * * @param props - The `WidgetProps` for this component */ export default function CheckboxesWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ label, hideLabel, id, disabled, options, value, autofocus, readonly, required, onChange, onBlur, onFocus, }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, inline, emptyValue } = options; const checkboxesValues = Array.isArray(value) ? value : [value]; const _onChange = (index: number) => ({ target: { checked } }: ChangeEvent<HTMLInputElement>) => { if (checked) { onChange(enumOptionsSelectValue<S>(index, checkboxesValues, enumOptions)); } else { onChange(enumOptionsDeselectValue<S>(index, checkboxesValues, enumOptions)); } }; const _onBlur = ({ target: { value } }: FocusEvent<HTMLButtonElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLButtonElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); return ( <> {labelValue( <FormLabel required={required} htmlFor={id}> {label || undefined} </FormLabel>, hideLabel )} <FormGroup id={id} row={!!inline}> {Array.isArray(enumOptions) && enumOptions.map((option, index: number) => { const checked = enumOptionsIsSelected<S>(option.value, checkboxesValues); const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1; const checkbox = ( <Checkbox id={optionId(id, index)} name={id} checked={checked} disabled={disabled || itemDisabled || readonly} autoFocus={autofocus && index === 0} onChange={_onChange(index)} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id)} /> ); return <FormControlLabel control={checkbox} key={index} label={option.label} />; })} </FormGroup> </> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/CheckboxesWidget/index.ts���������������������0000664�0000000�0000000�00000000122�14467713645�0027462�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './CheckboxesWidget'; export * from './CheckboxesWidget'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/DescriptionField/�����������������������������0000775�0000000�0000000�00000000000�14467713645�0026015�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/DescriptionField/DescriptionField.tsx���������0000664�0000000�0000000�00000001302�14467713645�0032000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Typography from '@material-ui/core/Typography'; import { DescriptionFieldProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `DescriptionField` is the template to use to render the description of a field * * @param props - The `DescriptionFieldProps` for this component */ export default function DescriptionField< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: DescriptionFieldProps<T, S, F>) { const { id, description } = props; if (description) { return ( <Typography id={id} variant='subtitle2' style={{ marginTop: '5px' }}> {description} </Typography> ); } return null; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/DescriptionField/index.ts���������������������0000664�0000000�0000000�00000000122�14467713645�0027467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './DescriptionField'; export * from './DescriptionField'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/ErrorList/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024513�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/ErrorList/ErrorList.tsx�����������������������0000664�0000000�0000000�00000002672�14467713645�0027207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import ErrorIcon from '@material-ui/icons/Error'; import Box from '@material-ui/core/Box'; import List from '@material-ui/core/List'; import ListItem from '@material-ui/core/ListItem'; import ListItemIcon from '@material-ui/core/ListItemIcon'; import ListItemText from '@material-ui/core/ListItemText'; import Paper from '@material-ui/core/Paper'; import Typography from '@material-ui/core/Typography'; import { ErrorListProps, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; /** The `ErrorList` component is the template that renders the all the errors associated with the fields in the `Form` * * @param props - The `ErrorListProps` for this component */ export default function ErrorList<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ errors, registry, }: ErrorListProps<T, S, F>) { const { translateString } = registry; return ( <Paper elevation={2}> <Box mb={2} p={2}> <Typography variant='h6'>{translateString(TranslatableString.ErrorsLabel)}</Typography> <List dense={true}> {errors.map((error, i: number) => { return ( <ListItem key={i}> <ListItemIcon> <ErrorIcon color='error' /> </ListItemIcon> <ListItemText primary={error.stack} /> </ListItem> ); })} </List> </Box> </Paper> ); } ����������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/ErrorList/index.ts����������������������������0000664�0000000�0000000�00000000104�14467713645�0026165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ErrorList'; export * from './ErrorList'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/FieldErrorTemplate/���������������������������0000775�0000000�0000000�00000000000�14467713645�0026317�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/FieldErrorTemplate/FieldErrorTemplate.tsx�����0000664�0000000�0000000�00000001766�14467713645�0032622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import ListItem from '@material-ui/core/ListItem'; import FormHelperText from '@material-ui/core/FormHelperText'; import List from '@material-ui/core/List'; import { errorId, FieldErrorProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `FieldErrorTemplate` component renders the errors local to the particular field * * @param props - The `FieldErrorProps` for the errors being rendered */ export default function FieldErrorTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldErrorProps<T, S, F>) { const { errors = [], idSchema } = props; if (errors.length === 0) { return null; } const id = errorId<T>(idSchema); return ( <List dense={true} disablePadding={true}> {errors.map((error, i: number) => { return ( <ListItem key={i} disableGutters={true}> <FormHelperText id={id}>{error}</FormHelperText> </ListItem> ); })} </List> ); } ����������react-jsonschema-form-5.12.1/packages/material-ui/src/FieldErrorTemplate/index.ts�������������������0000664�0000000�0000000�00000000126�14467713645�0027775�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldErrorTemplate'; export * from './FieldErrorTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/FieldHelpTemplate/����������������������������0000775�0000000�0000000�00000000000�14467713645�0026116�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/FieldHelpTemplate/FieldHelpTemplate.tsx�������0000664�0000000�0000000�00000001172�14467713645�0032207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import FormHelperText from '@material-ui/core/FormHelperText'; import { helpId, FieldHelpProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `FieldHelpTemplate` component renders any help desired for a field * * @param props - The `FieldHelpProps` to be rendered */ export default function FieldHelpTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldHelpProps<T, S, F>) { const { idSchema, help } = props; if (!help) { return null; } const id = helpId<T>(idSchema); return <FormHelperText id={id}>{help}</FormHelperText>; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/FieldHelpTemplate/index.ts��������������������0000664�0000000�0000000�00000000124�14467713645�0027572�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldHelpTemplate'; export * from './FieldHelpTemplate'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/FieldTemplate/��������������������������������0000775�0000000�0000000�00000000000�14467713645�0025305�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/FieldTemplate/FieldTemplate.tsx���������������0000664�0000000�0000000�00000004002�14467713645�0030560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import FormControl from '@material-ui/core/FormControl'; import Typography from '@material-ui/core/Typography'; import { FieldTemplateProps, FormContextType, RJSFSchema, StrictRJSFSchema, getTemplate, getUiOptions, } from '@rjsf/utils'; /** The `FieldTemplate` component is the template used by `SchemaField` to render any field. It renders the field * content, (label, description, children, errors and help) inside of a `WrapIfAdditional` component. * * @param props - The `FieldTemplateProps` for this component */ export default function FieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldTemplateProps<T, S, F>) { const { id, children, classNames, style, disabled, displayLabel, hidden, label, onDropPropertyClick, onKeyChange, readonly, required, rawErrors = [], errors, help, description, rawDescription, schema, uiSchema, registry, } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const WrapIfAdditionalTemplate = getTemplate<'WrapIfAdditionalTemplate', T, S, F>( 'WrapIfAdditionalTemplate', registry, uiOptions ); if (hidden) { return <div style={{ display: 'none' }}>{children}</div>; } return ( <WrapIfAdditionalTemplate classNames={classNames} style={style} disabled={disabled} id={id} label={label} onDropPropertyClick={onDropPropertyClick} onKeyChange={onKeyChange} readonly={readonly} required={required} schema={schema} uiSchema={uiSchema} registry={registry} > <FormControl fullWidth={true} error={rawErrors.length ? true : false} required={required}> {children} {displayLabel && rawDescription ? ( <Typography variant='caption' color='textSecondary'> {description} </Typography> ) : null} {errors} {help} </FormControl> </WrapIfAdditionalTemplate> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/FieldTemplate/index.ts������������������������0000664�0000000�0000000�00000000114�14467713645�0026760�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldTemplate'; export * from './FieldTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/IconButton/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024652�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/IconButton/IconButton.tsx���������������������0000664�0000000�0000000�00000004634�14467713645�0027505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import IconButton, { IconButtonProps as MuiIconButtonProps } from '@material-ui/core/IconButton'; import ArrowUpwardIcon from '@material-ui/icons/ArrowUpward'; import ArrowDownwardIcon from '@material-ui/icons/ArrowDownward'; import CopyIcon from '@material-ui/icons/FileCopy'; import RemoveIcon from '@material-ui/icons/Remove'; import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; export default function MuiIconButton< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: IconButtonProps<T, S, F>) { const { icon, color, uiSchema, registry, ...otherProps } = props; return ( <IconButton {...otherProps} size='small' color={color as MuiIconButtonProps['color']}> {icon} </IconButton> ); } export function CopyButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <MuiIconButton title={translateString(TranslatableString.CopyButton)} {...props} icon={<CopyIcon fontSize='small' />} /> ); } export function MoveDownButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <MuiIconButton title={translateString(TranslatableString.MoveDownButton)} {...props} icon={<ArrowDownwardIcon fontSize='small' />} /> ); } export function MoveUpButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <MuiIconButton title={translateString(TranslatableString.MoveUpButton)} {...props} icon={<ArrowUpwardIcon fontSize='small' />} /> ); } export function RemoveButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { iconType, ...otherProps } = props; const { registry: { translateString }, } = otherProps; return ( <MuiIconButton title={translateString(TranslatableString.RemoveButton)} {...otherProps} color='secondary' icon={<RemoveIcon fontSize={iconType === 'default' ? 'medium' : 'small'} />} /> ); } ����������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/IconButton/index.ts���������������������������0000664�0000000�0000000�00000000106�14467713645�0026326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './IconButton'; export * from './IconButton'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/MuiForm/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024144�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/MuiForm/MuiForm.tsx���������������������������0000664�0000000�0000000�00000000713�14467713645�0026263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ComponentType } from 'react'; import { withTheme, FormProps } from '@rjsf/core'; import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import { generateTheme } from '../Theme'; export function generateForm< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): ComponentType<FormProps<T, S, F>> { return withTheme<T, S, F>(generateTheme<T, S, F>()); } export default generateForm(); �����������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/MuiForm/index.ts������������������������������0000664�0000000�0000000�00000000100�14467713645�0025612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './MuiForm'; export * from './MuiForm'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/ObjectFieldTemplate/��������������������������0000775�0000000�0000000�00000000000�14467713645�0026434�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx���0000664�0000000�0000000�00000005425�14467713645�0033050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Grid from '@material-ui/core/Grid'; import { FormContextType, ObjectFieldTemplateProps, RJSFSchema, StrictRJSFSchema, canExpand, descriptionId, getTemplate, getUiOptions, titleId, } from '@rjsf/utils'; /** The `ObjectFieldTemplate` is the template to use to render all the inner properties of an object along with the * title and description if available. If the object is expandable, then an `AddButton` is also rendered after all * the properties. * * @param props - The `ObjectFieldTemplateProps` for this component */ export default function ObjectFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ObjectFieldTemplateProps<T, S, F>) { const { description, title, properties, required, disabled, readonly, uiSchema, idSchema, schema, formData, onAddClick, registry, } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const TitleFieldTemplate = getTemplate<'TitleFieldTemplate', T, S, F>('TitleFieldTemplate', registry, uiOptions); const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; return ( <> {title && ( <TitleFieldTemplate id={titleId<T>(idSchema)} title={title} required={required} schema={schema} uiSchema={uiSchema} registry={registry} /> )} {description && ( <DescriptionFieldTemplate id={descriptionId<T>(idSchema)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> )} <Grid container={true} spacing={2} style={{ marginTop: '10px' }}> {properties.map((element, index) => // Remove the <Grid> if the inner element is hidden as the <Grid> // itself would otherwise still take up space. element.hidden ? ( element.content ) : ( <Grid item={true} xs={12} key={index} style={{ marginBottom: '10px' }}> {element.content} </Grid> ) )} {canExpand<T, S, F>(schema, uiSchema, formData) && ( <Grid container justifyContent='flex-end'> <Grid item={true}> <AddButton className='object-property-expand' onClick={onAddClick(schema)} disabled={disabled || readonly} uiSchema={uiSchema} registry={registry} /> </Grid> </Grid> )} </Grid> </> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/ObjectFieldTemplate/index.ts������������������0000664�0000000�0000000�00000000130�14467713645�0030105�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ObjectFieldTemplate'; export * from './ObjectFieldTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/RadioWidget/����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024770�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/RadioWidget/RadioWidget.tsx�������������������0000664�0000000�0000000�00000005025�14467713645�0027734�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import FormControlLabel from '@material-ui/core/FormControlLabel'; import FormLabel from '@material-ui/core/FormLabel'; import Radio from '@material-ui/core/Radio'; import RadioGroup from '@material-ui/core/RadioGroup'; import { ariaDescribedByIds, enumOptionsIndexForValue, enumOptionsValueForIndex, labelValue, optionId, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; /** The `RadioWidget` is a widget for rendering a radio group. * It is typically used with a string property constrained with enum options. * * @param props - The `WidgetProps` for this component */ export default function RadioWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, options, value, required, disabled, readonly, label, hideLabel, onChange, onBlur, onFocus, }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, emptyValue } = options; const _onChange = (_: any, value: any) => onChange(enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const row = options ? options.inline : false; const selectedIndex = enumOptionsIndexForValue<S>(value, enumOptions) ?? null; return ( <> {labelValue( <FormLabel required={required} htmlFor={id}> {label || undefined} </FormLabel>, hideLabel )} <RadioGroup id={id} name={id} value={selectedIndex} row={row as boolean} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id)} > {Array.isArray(enumOptions) && enumOptions.map((option, index) => { const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1; const radio = ( <FormControlLabel control={<Radio name={id} id={optionId(id, index)} color='primary' />} label={option.label} value={String(index)} key={index} disabled={disabled || itemDisabled || readonly} /> ); return radio; })} </RadioGroup> </> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/RadioWidget/index.ts��������������������������0000664�0000000�0000000�00000000110�14467713645�0026437�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './RadioWidget'; export * from './RadioWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/RangeWidget/����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024766�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/RangeWidget/RangeWidget.tsx�������������������0000664�0000000�0000000�00000003105�14467713645�0027725�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import FormLabel from '@material-ui/core/FormLabel'; import Slider from '@material-ui/core/Slider'; import { ariaDescribedByIds, labelValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, rangeSpec, } from '@rjsf/utils'; /** The `RangeWidget` component uses the `BaseInputTemplate` changing the type to `range` and wrapping the result * in a div, with the value along side it. * * @param props - The `WidgetProps` for this component */ export default function RangeWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { value, readonly, disabled, onBlur, onFocus, options, schema, onChange, required, label, hideLabel, id } = props; const sliderProps = { value, label, id, name: id, ...rangeSpec<S>(schema) }; const _onChange = (_: any, value?: number | number[]) => { onChange(value ?? options.emptyValue); }; const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, value); return ( <> {labelValue( <FormLabel required={required} htmlFor={id}> {label || undefined} </FormLabel>, hideLabel )} <Slider disabled={disabled || readonly} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} valueLabelDisplay='auto' {...sliderProps} aria-describedby={ariaDescribedByIds<T>(id)} /> </> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/RangeWidget/index.ts��������������������������0000664�0000000�0000000�00000000110�14467713645�0026435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './RangeWidget'; export * from './RangeWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/SelectWidget/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025151�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/SelectWidget/SelectWidget.tsx�����������������0000664�0000000�0000000�00000005767�14467713645�0030313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import MenuItem from '@material-ui/core/MenuItem'; import TextField, { TextFieldProps } from '@material-ui/core/TextField'; import { ariaDescribedByIds, enumOptionsIndexForValue, enumOptionsValueForIndex, labelValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; /** The `SelectWidget` is a widget for rendering dropdowns. * It is typically used with string properties constrained with enum options. * * @param props - The `WidgetProps` for this component */ export default function SelectWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ schema, id, name, // remove this from textFieldProps options, label, hideLabel, required, disabled, readonly, placeholder, value, multiple, autofocus, onChange, onBlur, onFocus, rawErrors = [], registry, uiSchema, hideError, formContext, ...textFieldProps }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, emptyValue: optEmptyVal } = options; multiple = typeof multiple === 'undefined' ? false : !!multiple; const emptyValue = multiple ? [] : ''; const isEmpty = typeof value === 'undefined' || (multiple && value.length < 1) || (!multiple && value === emptyValue); const _onChange = ({ target: { value } }: ChangeEvent<{ value: string }>) => onChange(enumOptionsValueForIndex<S>(value, enumOptions, optEmptyVal)); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, optEmptyVal)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, optEmptyVal)); const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, multiple); return ( <TextField id={id} name={id} label={labelValue(label, hideLabel || !label, false)} value={isEmpty ? emptyValue : selectedIndexes} required={required} disabled={disabled || readonly} autoFocus={autofocus} placeholder={placeholder} error={rawErrors.length > 0} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} {...(textFieldProps as TextFieldProps)} select // Apply this and the following props after the potential overrides defined in textFieldProps InputLabelProps={{ ...textFieldProps.InputLabelProps, shrink: !isEmpty, }} SelectProps={{ ...textFieldProps.SelectProps, multiple, }} aria-describedby={ariaDescribedByIds<T>(id)} > {Array.isArray(enumOptions) && enumOptions.map(({ value, label }, i: number) => { const disabled: boolean = Array.isArray(enumDisabled) && enumDisabled.indexOf(value) !== -1; return ( <MenuItem key={i} value={String(i)} disabled={disabled}> {label} </MenuItem> ); })} </TextField> ); } ���������react-jsonschema-form-5.12.1/packages/material-ui/src/SelectWidget/index.ts�������������������������0000664�0000000�0000000�00000000112�14467713645�0026622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './SelectWidget'; export * from './SelectWidget'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/SubmitButton/���������������������������������0000775�0000000�0000000�00000000000�14467713645�0025225�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/SubmitButton/SubmitButton.tsx�����������������0000664�0000000�0000000�00000001434�14467713645�0030426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Box from '@material-ui/core/Box'; import Button from '@material-ui/core/Button'; import { getSubmitButtonOptions, FormContextType, RJSFSchema, StrictRJSFSchema, SubmitButtonProps } from '@rjsf/utils'; /** The `SubmitButton` renders a button that represent the `Submit` action on a form */ export default function SubmitButton< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ uiSchema }: SubmitButtonProps<T, S, F>) { const { submitText, norender, props: submitButtonProps = {} } = getSubmitButtonOptions<T, S, F>(uiSchema); if (norender) { return null; } return ( <Box marginTop={3}> <Button type='submit' variant='contained' color='primary' {...submitButtonProps}> {submitText} </Button> </Box> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/SubmitButton/index.ts�������������������������0000664�0000000�0000000�00000000112�14467713645�0026676�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './SubmitButton'; export * from './SubmitButton'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/Templates/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024524�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/Templates/Templates.ts������������������������0000664�0000000�0000000�00000002770�14467713645�0027040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, TemplatesType } from '@rjsf/utils'; import AddButton from '../AddButton'; import ArrayFieldItemTemplate from '../ArrayFieldItemTemplate'; import ArrayFieldTemplate from '../ArrayFieldTemplate'; import BaseInputTemplate from '../BaseInputTemplate'; import DescriptionField from '../DescriptionField'; import ErrorList from '../ErrorList'; import { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } from '../IconButton'; import FieldErrorTemplate from '../FieldErrorTemplate'; import FieldHelpTemplate from '../FieldHelpTemplate'; import FieldTemplate from '../FieldTemplate'; import ObjectFieldTemplate from '../ObjectFieldTemplate'; import SubmitButton from '../SubmitButton'; import TitleField from '../TitleField'; import WrapIfAdditionalTemplate from '../WrapIfAdditionalTemplate'; export function generateTemplates< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): Partial<TemplatesType<T, S, F>> { return { ArrayFieldItemTemplate, ArrayFieldTemplate, BaseInputTemplate, ButtonTemplates: { AddButton, CopyButton, MoveDownButton, MoveUpButton, RemoveButton, SubmitButton, }, DescriptionFieldTemplate: DescriptionField, ErrorListTemplate: ErrorList, FieldErrorTemplate, FieldHelpTemplate, FieldTemplate, ObjectFieldTemplate, TitleFieldTemplate: TitleField, WrapIfAdditionalTemplate, }; } export default generateTemplates(); ��������react-jsonschema-form-5.12.1/packages/material-ui/src/Templates/index.ts����������������������������0000664�0000000�0000000�00000000104�14467713645�0026176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Templates'; export * from './Templates'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/TextareaWidget/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025507�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/TextareaWidget/TextareaWidget.tsx�������������0000664�0000000�0000000�00000001373�14467713645�0031174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, getTemplate } from '@rjsf/utils'; /** The `TextareaWidget` is a widget for rendering input fields as textarea. * * @param props - The `WidgetProps` for this component */ export default function TextareaWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); let rows: string | number = 5; if (typeof options.rows === 'string' || typeof options.rows === 'number') { rows = options.rows; } return <BaseInputTemplate {...props} multiline rows={rows} />; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/TextareaWidget/index.ts�����������������������0000664�0000000�0000000�00000000116�14467713645�0027164�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './TextareaWidget'; export * from './TextareaWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/Theme/����������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023630�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/Theme/Theme.tsx�������������������������������0000664�0000000�0000000�00000000763�14467713645�0025440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import { ThemeProps } from '@rjsf/core'; import { generateTemplates } from '../Templates'; import { generateWidgets } from '../Widgets'; export function generateTheme< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): ThemeProps<T, S, F> { return { templates: generateTemplates<T, S, F>(), widgets: generateWidgets<T, S, F>(), }; } export default generateTheme(); �������������react-jsonschema-form-5.12.1/packages/material-ui/src/Theme/index.ts��������������������������������0000664�0000000�0000000�00000000074�14467713645�0025310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Theme'; export * from './Theme'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/TitleField/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024613�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/TitleField/TitleField.tsx���������������������0000664�0000000�0000000�00000001246�14467713645�0027403�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Box from '@material-ui/core/Box'; import Divider from '@material-ui/core/Divider'; import Typography from '@material-ui/core/Typography'; import { FormContextType, TitleFieldProps, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `TitleField` is the template to use to render the title of a field * * @param props - The `TitleFieldProps` for this component */ export default function TitleField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, title, }: TitleFieldProps<T, S, F>) { return ( <Box id={id} mb={1} mt={1}> <Typography variant='h5'>{title}</Typography> <Divider /> </Box> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/TitleField/index.ts���������������������������0000664�0000000�0000000�00000000106�14467713645�0026267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './TitleField'; export * from './TitleField'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/Widgets/��������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024174�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/Widgets/Widgets.ts����������������������������0000664�0000000�0000000�00000001420�14467713645�0026147�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RegistryWidgetsType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import CheckboxWidget from '../CheckboxWidget/CheckboxWidget'; import CheckboxesWidget from '../CheckboxesWidget/CheckboxesWidget'; import RadioWidget from '../RadioWidget/RadioWidget'; import RangeWidget from '../RangeWidget/RangeWidget'; import SelectWidget from '../SelectWidget/SelectWidget'; import TextareaWidget from '../TextareaWidget/TextareaWidget'; export function generateWidgets< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): RegistryWidgetsType<T, S, F> { return { CheckboxWidget, CheckboxesWidget, RadioWidget, RangeWidget, SelectWidget, TextareaWidget, }; } export default generateWidgets(); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/Widgets/index.ts������������������������������0000664�0000000�0000000�00000000100�14467713645�0025642�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Widgets'; export * from './Widgets'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/WrapIfAdditionalTemplate/���������������������0000775�0000000�0000000�00000000000�14467713645�0027443�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������WrapIfAdditionalTemplate.tsx������������������������������������������������������������������������0000664�0000000�0000000�00000004554�14467713645�0035011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000�react-jsonschema-form-5.12.1/packages/material-ui/src/WrapIfAdditionalTemplate�����������������������������������������������������������������������������������������import { CSSProperties, FocusEvent } from 'react'; import Grid from '@material-ui/core/Grid'; import TextField from '@material-ui/core/TextField'; import { ADDITIONAL_PROPERTY_FLAG, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString, WrapIfAdditionalTemplateProps, } from '@rjsf/utils'; /** The `WrapIfAdditional` component is used by the `FieldTemplate` to rename, or remove properties that are * part of an `additionalProperties` part of a schema. * * @param props - The `WrapIfAdditionalProps` for this component */ export default function WrapIfAdditionalTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WrapIfAdditionalTemplateProps<T, S, F>) { const { children, classNames, style, disabled, id, label, onDropPropertyClick, onKeyChange, readonly, required, schema, uiSchema, registry, } = props; const { templates, translateString } = registry; // Button templates are not overridden in the uiSchema const { RemoveButton } = templates.ButtonTemplates; const keyLabel = translateString(TranslatableString.KeyLabel, [label]); const additional = ADDITIONAL_PROPERTY_FLAG in schema; const btnStyle: CSSProperties = { flex: 1, paddingLeft: 6, paddingRight: 6, fontWeight: 'bold', }; if (!additional) { return ( <div className={classNames} style={style}> {children} </div> ); } const handleBlur = ({ target }: FocusEvent<HTMLInputElement>) => onKeyChange(target.value); return ( <Grid container key={`${id}-key`} alignItems='center' spacing={2} className={classNames} style={style}> <Grid item xs> <TextField fullWidth={true} required={required} label={keyLabel} defaultValue={label} disabled={disabled || readonly} id={`${id}-key`} name={`${id}-key`} onBlur={!readonly ? handleBlur : undefined} type='text' /> </Grid> <Grid item={true} xs> {children} </Grid> <Grid item={true}> <RemoveButton iconType='default' style={btnStyle} disabled={disabled || readonly} onClick={onDropPropertyClick(label)} uiSchema={uiSchema} registry={registry} /> </Grid> </Grid> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/WrapIfAdditionalTemplate/index.ts�������������0000664�0000000�0000000�00000000142�14467713645�0031117�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './WrapIfAdditionalTemplate'; export * from './WrapIfAdditionalTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/src/index.ts��������������������������������������0000664�0000000�0000000�00000000501�14467713645�0024241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import MuiForm from './MuiForm/MuiForm'; export { default as Form, generateForm } from './MuiForm'; export { default as Templates, generateTemplates } from './Templates'; export { default as Theme, generateTheme } from './Theme'; export { default as Widgets, generateWidgets } from './Widgets'; export default MuiForm; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/test/���������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022756�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/test/Array.test.tsx�������������������������������0000664�0000000�0000000�00000000150�14467713645�0025546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import arrayTests from '@rjsf/core/testSnap/arrayTests'; import Form from '../src'; arrayTests(Form); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/test/Form.test.tsx��������������������������������0000664�0000000�0000000�00000002107�14467713645�0025377�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import formTests, { SLIDER_CUSTOMIZE } from '@rjsf/core/testSnap/formTests'; import Form from '../src'; // The material-ui Slider is trying to call `findDOMNode()` within a useEffect() hook. Since the hook deals with // null nodes, we just mock it to always return null. jest.mock('react-dom', () => ({ ...jest.requireActual('react-dom'), findDOMNode: jest.fn(() => null), })); formTests(Form, { [SLIDER_CUSTOMIZE]: { createNodeMock: (element) => { // the `Slider` code expects a ref for a span.root to exist, so use the feature of // react-test-renderer to create one // See: https://reactjs.org/docs/test-renderer.html#ideas if (element.type === 'span' && element.props.id === 'root') { // Pretend to be an event listening component inside of an event listening document return { addEventListener: jest.fn(), removeEventListener: jest.fn(), ownerDocument: { addEventListener: jest.fn(), removeEventListener: jest.fn(), }, }; } return null; }, }, }); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/test/Object.test.tsx������������������������������0000664�0000000�0000000�00000000153�14467713645�0025701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import objectTests from '@rjsf/core/testSnap/objectTests'; import Form from '../src'; objectTests(Form); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/test/__snapshots__/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025574�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/test/__snapshots__/Array.test.tsx.snap������������0000664�0000000�0000000�00000613002�14467713645�0031332�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`array fields array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-1" > <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <div className="MuiBox-root MuiBox-root-2" > <button className="MuiButtonBase-root MuiIconButton-root array-item-add MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-3" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`array fields array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-11" > <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-12" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-13" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="a" /> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall Mui-disabled" disabled={true} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move up" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move down" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-14" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-15" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="b" /> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move up" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> <button className="MuiButtonBase-root MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall Mui-disabled" disabled={true} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move down" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <div className="MuiBox-root MuiBox-root-16" > <button className="MuiButtonBase-root MuiIconButton-root array-item-add MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-17" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`array fields checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <div aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span dangerouslySetInnerHTML={ { "__html": "​", } } /> </div> <input aria-hidden={true} autoFocus={false} className="MuiSelect-nativeInput" name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSelect-icon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-10" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`array fields empty errors array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_name__error root_name__description root_name__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_name" id="root_name-label" > name </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_name" name="root_name" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-21" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`array fields fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-4" > <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-5" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-6" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-7" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-8" > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-9" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`array fields has errors 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-18" > <h6 className="MuiTypography-root MuiTypography-h6" > Errors </h6> <ul className="MuiList-root MuiList-dense MuiList-padding" > <li className="MuiListItem-root MuiListItem-dense MuiListItem-gutters" disabled={false} > <div className="MuiListItemIcon-root" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-colorError" focusable="false" viewBox="0 0 24 24" > <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z" /> </svg> </div> <div className="MuiListItemText-root MuiListItemText-dense" > <span className="MuiTypography-root MuiListItemText-primary MuiTypography-body2 MuiTypography-displayBlock" > .name Bad input </span> </div> </li> </ul> </div> </div> <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string field-error has-error has-danger" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_name__error root_name__description root_name__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated Mui-error Mui-error" data-shrink={false} htmlFor="root_name" id="root_name-label" > name </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline Mui-error Mui-error MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={true} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_name" name="root_name" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> <ul className="MuiList-root MuiList-dense" > <li className="MuiListItem-root MuiListItem-dense" disabled={false} > <p className="MuiFormHelperText-root Mui-error" id="root_name__error" > Bad input </p> </li> </ul> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-19" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`array fields no errors 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_name__error root_name__description root_name__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_name" id="root_name-label" > name </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_name" name="root_name" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-20" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`with title and description array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-22" > <div className="MuiBox-root MuiBox-root-23" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > Test field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <div className="MuiBox-root MuiBox-root-24" > <button className="MuiButtonBase-root MuiIconButton-root array-item-add MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-25" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`with title and description array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-34" > <div className="MuiBox-root MuiBox-root-35" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > Test field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-36" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-37" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required" data-shrink={true} htmlFor="root_0" id="root_0-label" > Test item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk" >   * </span> </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="a" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_0__description" style={ { "marginTop": "5px", } } > a test item description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall Mui-disabled" disabled={true} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move up" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move down" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-38" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-39" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required" data-shrink={true} htmlFor="root_1" id="root_1-label" > Test item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk" >   * </span> </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="b" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_1__description" style={ { "marginTop": "5px", } } > a test item description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move up" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall Mui-disabled" disabled={true} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move down" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <div className="MuiBox-root MuiBox-root-40" > <button className="MuiButtonBase-root MuiIconButton-root array-item-add MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-41" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`with title and description checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root" id="root-label" > Test field </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <div aria-haspopup="listbox" aria-labelledby="root-label root" className="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span dangerouslySetInnerHTML={ { "__html": "​", } } /> </div> <input aria-hidden={true} autoFocus={false} className="MuiSelect-nativeInput" name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSelect-icon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> </span> </div> </div> <div className="MuiBox-root MuiBox-root-33" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`with title and description fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-26" > <div className="MuiBox-root MuiBox-root-27" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > Test field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-28" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-29" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated Mui-required Mui-required" data-shrink={false} htmlFor="root_0" id="root_0-label" > Test item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk" >   * </span> </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_0__description" style={ { "marginTop": "5px", } } > a test item description </h6> </span> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-30" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-31" > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated Mui-required Mui-required" data-shrink={false} htmlFor="root_1" id="root_1-label" > Test item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk" >   * </span> </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} step="any" type="number" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_1__description" style={ { "marginTop": "5px", } } > a test item description </h6> </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-32" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`with title and description from both array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-62" > <div className="MuiBox-root MuiBox-root-63" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > My Field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <div className="MuiBox-root MuiBox-root-64" > <button className="MuiButtonBase-root MuiIconButton-root array-item-add MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-65" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`with title and description from both array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-74" > <div className="MuiBox-root MuiBox-root-75" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > My Field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-76" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-77" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required" data-shrink={true} htmlFor="root_0" id="root_0-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk" >   * </span> </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="a" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_0__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall Mui-disabled" disabled={true} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move up" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move down" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-78" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-79" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required" data-shrink={true} htmlFor="root_1" id="root_1-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk" >   * </span> </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="b" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_1__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move up" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall Mui-disabled" disabled={true} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move down" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <div className="MuiBox-root MuiBox-root-80" > <button className="MuiButtonBase-root MuiIconButton-root array-item-add MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-81" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`with title and description from both checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root" id="root-label" > My Field </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <div aria-haspopup="listbox" aria-labelledby="root-label root" className="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span dangerouslySetInnerHTML={ { "__html": "​", } } /> </div> <input aria-hidden={true} autoFocus={false} className="MuiSelect-nativeInput" name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSelect-icon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> </span> </div> </div> <div className="MuiBox-root MuiBox-root-73" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`with title and description from both fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-66" > <div className="MuiBox-root MuiBox-root-67" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > My Field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-68" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-69" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated Mui-required Mui-required" data-shrink={false} htmlFor="root_0" id="root_0-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk" >   * </span> </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_0__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-70" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-71" > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated Mui-required Mui-required" data-shrink={false} htmlFor="root_1" id="root_1-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk" >   * </span> </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} step="any" type="number" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_1__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-72" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`with title and description from uiSchema array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-42" > <div className="MuiBox-root MuiBox-root-43" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > My Field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <div className="MuiBox-root MuiBox-root-44" > <button className="MuiButtonBase-root MuiIconButton-root array-item-add MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-45" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`with title and description from uiSchema array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-54" > <div className="MuiBox-root MuiBox-root-55" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > My Field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-56" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-57" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required" data-shrink={true} htmlFor="root_0" id="root_0-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk" >   * </span> </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="a" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_0__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall Mui-disabled" disabled={true} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move up" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move down" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-58" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-59" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled Mui-required Mui-required" data-shrink={true} htmlFor="root_1" id="root_1-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk" >   * </span> </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="b" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_1__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move up" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall Mui-disabled" disabled={true} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move down" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <div className="MuiBox-root MuiBox-root-60" > <button className="MuiButtonBase-root MuiIconButton-root array-item-add MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-61" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`with title and description from uiSchema checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root" id="root-label" > My Field </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <div aria-haspopup="listbox" aria-labelledby="root-label root" className="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span dangerouslySetInnerHTML={ { "__html": "​", } } /> </div> <input aria-hidden={true} autoFocus={false} className="MuiSelect-nativeInput" name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSelect-icon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> </span> </div> </div> <div className="MuiBox-root MuiBox-root-53" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`with title and description from uiSchema fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-46" > <div className="MuiBox-root MuiBox-root-47" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > My Field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-48" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-49" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated Mui-required Mui-required" data-shrink={false} htmlFor="root_0" id="root_0-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk" >   * </span> </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_0__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-50" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-51" > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated Mui-required Mui-required" data-shrink={false} htmlFor="root_1" id="root_1-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk" >   * </span> </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} step="any" type="number" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_1__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-52" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`with title and description with global label off array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-82" > <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <div className="MuiBox-root MuiBox-root-83" > <button className="MuiButtonBase-root MuiIconButton-root array-item-add MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-84" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`with title and description with global label off array icons 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-92" > <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-93" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-94" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="a" /> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall Mui-disabled" disabled={true} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move up" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move down" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-95" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-96" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="b" /> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move up" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall Mui-disabled" disabled={true} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move down" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z" /> </svg> </span> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <div className="MuiBox-root MuiBox-root-97" > <button className="MuiButtonBase-root MuiIconButton-root array-item-add MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-98" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`with title and description with global label off checkboxes 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root" id="root-label" > Test field </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <div aria-haspopup="listbox" aria-labelledby="root-label root" className="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span dangerouslySetInnerHTML={ { "__html": "​", } } /> </div> <input aria-hidden={true} autoFocus={false} className="MuiSelect-nativeInput" name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSelect-icon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> </span> </div> </div> <div className="MuiBox-root MuiBox-root-91" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`with title and description with global label off fixed array 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-85" > <div className="MuiGrid-root MuiGrid-container" > <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-86" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-87" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" style={ { "overflow": "auto", } } > <div className="MuiBox-root MuiBox-root-88" > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-89" > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-90" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/test/__snapshots__/Form.test.tsx.snap�������������0000664�0000000�0000000�00000255715�14467713645�0031174�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`single fields checkbox field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <label className="MuiFormControlLabel-root" > <span aria-describedby="root__error root__description root__help" aria-disabled={false} className="MuiButtonBase-root MuiIconButton-root PrivateSwitchBase-root-24 MuiCheckbox-root MuiCheckbox-colorSecondary MuiIconButton-colorSecondary" onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <span className="MuiIconButton-label" > <input autoFocus={false} checked={false} className="PrivateSwitchBase-input-27" data-indeterminate={false} disabled={false} id="root" name="root" onChange={[Function]} required={false} type="checkbox" /> <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </span> <span className="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1" > </span> </label> </div> </div> <div className="MuiBox-root MuiBox-root-28" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields checkbox field with label 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <label className="MuiFormControlLabel-root" > <span aria-describedby="root__error root__description root__help" aria-disabled={false} className="MuiButtonBase-root MuiIconButton-root PrivateSwitchBase-root-24 MuiCheckbox-root MuiCheckbox-colorSecondary MuiIconButton-colorSecondary" onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <span className="MuiIconButton-label" > <input autoFocus={false} checked={false} className="PrivateSwitchBase-input-27" data-indeterminate={false} disabled={false} id="root" name="root" onChange={[Function]} required={false} type="checkbox" /> <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> </svg> </span> </span> <span className="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1" > test </span> </label> </div> </div> <div className="MuiBox-root MuiBox-root-29" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields checkboxes field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <label className="MuiFormLabel-root" htmlFor="root" > An enum list rendered as checkboxes </label> <div className="MuiFormGroup-root" id="root" > <label className="MuiFormControlLabel-root" > <span aria-describedby="root__error root__description root__help" aria-disabled={false} className="MuiButtonBase-root MuiIconButton-root PrivateSwitchBase-root-24 MuiCheckbox-root MuiCheckbox-colorSecondary MuiIconButton-colorSecondary" onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <span className="MuiIconButton-label" > <input autoFocus={false} checked={false} className="PrivateSwitchBase-input-27" data-indeterminate={false} disabled={false} id="root-0" name="root" onChange={[Function]} type="checkbox" /> <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </span> <span className="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1" > foo </span> </label> <label className="MuiFormControlLabel-root" > <span aria-describedby="root__error root__description root__help" aria-disabled={false} className="MuiButtonBase-root MuiIconButton-root PrivateSwitchBase-root-24 MuiCheckbox-root MuiCheckbox-colorSecondary MuiIconButton-colorSecondary" onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <span className="MuiIconButton-label" > <input autoFocus={false} checked={false} className="PrivateSwitchBase-input-27" data-indeterminate={false} disabled={false} id="root-1" name="root" onChange={[Function]} type="checkbox" /> <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </span> <span className="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1" > bar </span> </label> <label className="MuiFormControlLabel-root" > <span aria-describedby="root__error root__description root__help" aria-disabled={false} className="MuiButtonBase-root MuiIconButton-root PrivateSwitchBase-root-24 MuiCheckbox-root MuiCheckbox-colorSecondary MuiIconButton-colorSecondary" onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <span className="MuiIconButton-label" > <input autoFocus={false} checked={false} className="PrivateSwitchBase-input-27" data-indeterminate={false} disabled={false} id="root-2" name="root" onChange={[Function]} type="checkbox" /> <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </span> <span className="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1" > fuzz </span> </label> <label className="MuiFormControlLabel-root" > <span aria-describedby="root__error root__description root__help" aria-disabled={false} className="MuiButtonBase-root MuiIconButton-root PrivateSwitchBase-root-24 MuiCheckbox-root MuiCheckbox-colorSecondary MuiIconButton-colorSecondary" onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <span className="MuiIconButton-label" > <input autoFocus={false} checked={false} className="PrivateSwitchBase-input-27" data-indeterminate={false} disabled={false} id="root-3" name="root" onChange={[Function]} type="checkbox" /> <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </span> <span className="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1" > qux </span> </label> </div> </div> </div> <div className="MuiBox-root MuiBox-root-30" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields field with description 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_my-field__error root_my-field__description root_my-field__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_my-field" id="root_my-field-label" > my-field </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_my-field" name="root_my-field" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_my-field__description" style={ { "marginTop": "5px", } } > some description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-42" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields field with description in uiSchema 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_my-field__error root_my-field__description root_my-field__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_my-field" id="root_my-field-label" > my-field </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_my-field" name="root_my-field" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_my-field__description" style={ { "marginTop": "5px", } } > some other description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-43" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields format color 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="color" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-10" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields format date 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="date" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-11" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields format datetime 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="datetime-local" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-12" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields format time 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="time" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-13" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields help and error display 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="MuiPaper-root MuiPaper-elevation2 MuiPaper-rounded" > <div className="MuiBox-root MuiBox-root-49" > <h6 className="MuiTypography-root MuiTypography-h6" > Errors </h6> <ul className="MuiList-root MuiList-dense MuiList-padding" > <li className="MuiListItem-root MuiListItem-dense MuiListItem-gutters" disabled={false} > <div className="MuiListItemIcon-root" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-colorError" focusable="false" viewBox="0 0 24 24" > <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z" /> </svg> </div> <div className="MuiListItemText-root MuiListItemText-dense" > <span className="MuiTypography-root MuiListItemText-primary MuiTypography-body2 MuiTypography-displayBlock" > . an error </span> </div> </li> </ul> </div> </div> <div className="form-group field field-string field-error has-error has-danger" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline Mui-error Mui-error MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={true} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> <ul className="MuiList-root MuiList-dense" > <li className="MuiListItem-root MuiListItem-dense" disabled={false} > <p className="MuiFormHelperText-root Mui-error" id="root__error" > an error </p> </li> </ul> <p className="MuiFormHelperText-root Mui-error" id="root__help" > help me! </p> </div> </div> <div className="MuiBox-root MuiBox-root-50" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields hidden field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div style={ { "display": "none", } } > <input id="root_my-field" name="root_my-field" type="hidden" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-41" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields hidden label 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-46" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields null field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-null" > <div className="MuiFormControl-root MuiFormControl-fullWidth" /> </div> <div className="MuiBox-root MuiBox-root-8" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields number field 0 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value={0} /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-7" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields number field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields password field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="password" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-14" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields radio field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <label className="MuiFormLabel-root" htmlFor="root" /> <div aria-describedby="root__error root__description root__help" className="MuiFormGroup-root" id="root" onBlur={[Function]} onFocus={[Function]} role="radiogroup" > <label className="MuiFormControlLabel-root" > <span aria-disabled={false} className="MuiButtonBase-root MuiIconButton-root PrivateSwitchBase-root-24 MuiRadio-root MuiRadio-colorPrimary MuiIconButton-colorPrimary" onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <span className="MuiIconButton-label" > <input checked={false} className="PrivateSwitchBase-input-27" disabled={false} id="root-0" name="root" onChange={[Function]} type="radio" value="0" /> <div className="PrivateRadioButtonIcon-root-31" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z" /> </svg> <svg aria-hidden={true} className="MuiSvgIcon-root PrivateRadioButtonIcon-layer-32" focusable="false" viewBox="0 0 24 24" > <path d="M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z" /> </svg> </div> </span> </span> <span className="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1" > Yes </span> </label> <label className="MuiFormControlLabel-root" > <span aria-disabled={false} className="MuiButtonBase-root MuiIconButton-root PrivateSwitchBase-root-24 MuiRadio-root MuiRadio-colorPrimary MuiIconButton-colorPrimary" onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <span className="MuiIconButton-label" > <input checked={false} className="PrivateSwitchBase-input-27" disabled={false} id="root-1" name="root" onChange={[Function]} type="radio" value="1" /> <div className="PrivateRadioButtonIcon-root-31" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z" /> </svg> <svg aria-hidden={true} className="MuiSvgIcon-root PrivateRadioButtonIcon-layer-32" focusable="false" viewBox="0 0 24 24" > <path d="M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z" /> </svg> </div> </span> </span> <span className="MuiTypography-root MuiFormControlLabel-label MuiTypography-body1" > No </span> </label> </div> </div> </div> <div className="MuiBox-root MuiBox-root-34" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields schema examples 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help root__examples" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" list="root__examples" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> <datalist id="root__examples" > <option value="Firefox" /> <option value="Chrome" /> <option value="Opera" /> <option value="Vivaldi" /> <option value="Safari" /> </datalist> </div> </div> <div className="MuiBox-root MuiBox-root-48" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields select field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <div aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span dangerouslySetInnerHTML={ { "__html": "​", } } /> </div> <input aria-hidden={true} autoFocus={false} className="MuiSelect-nativeInput" name="root" onAnimationStart={[Function]} onChange={[Function]} placeholder="" required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSelect-icon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-17" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields select field multiple choice 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <div aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span dangerouslySetInnerHTML={ { "__html": "​", } } /> </div> <input aria-hidden={true} autoFocus={false} className="MuiSelect-nativeInput" name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSelect-icon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-18" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields select field multiple choice enumDisabled 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <div aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span dangerouslySetInnerHTML={ { "__html": "​", } } /> </div> <input aria-hidden={true} autoFocus={false} className="MuiSelect-nativeInput" name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSelect-icon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-21" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields select field multiple choice formData 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <div aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > foo, bar </div> <input aria-hidden={true} autoFocus={false} className="MuiSelect-nativeInput" name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="0,1" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSelect-icon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-23" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields select field multiple choice with labels 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <div aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span dangerouslySetInnerHTML={ { "__html": "​", } } /> </div> <input aria-hidden={true} autoFocus={false} className="MuiSelect-nativeInput" name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSelect-icon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-19" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields select field single choice enumDisabled 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <div aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span dangerouslySetInnerHTML={ { "__html": "​", } } /> </div> <input aria-hidden={true} autoFocus={false} className="MuiSelect-nativeInput" name="root" onAnimationStart={[Function]} onChange={[Function]} placeholder="" required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSelect-icon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-20" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields select field single choice formData 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <div aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-root MuiSelect-select MuiSelect-selectMenu MuiInputBase-input MuiInput-input" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > bar </div> <input aria-hidden={true} autoFocus={false} className="MuiSelect-nativeInput" name="root" onAnimationStart={[Function]} onChange={[Function]} placeholder="" required={false} tabIndex={-1} value="1" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSelect-icon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-22" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields slider field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-integer" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <label className="MuiFormLabel-root" htmlFor="root" /> <span aria-describedby="root__error root__description root__help" className="MuiSlider-root MuiSlider-colorPrimary" id="root" label="" onBlur={[Function]} onFocus={[Function]} onMouseDown={[Function]} > <span className="MuiSlider-rail" /> <span className="MuiSlider-track" style={ { "left": "0%", "width": "56.89655172413793%", } } /> <input name="root" type="hidden" value="75" /> <span aria-orientation="horizontal" aria-valuemax={100} aria-valuemin={42} aria-valuenow={75} className="MuiSlider-thumb MuiSlider-thumbColorPrimary PrivateValueLabel-thumb-35" data-index={0} onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseLeave={[Function]} onMouseOver={[Function]} role="slider" style={ { "left": "56.89655172413793%", } } tabIndex={0} > <span className="PrivateValueLabel-offset-37 MuiSlider-valueLabel" > <span className="PrivateValueLabel-circle-38" > <span className="PrivateValueLabel-label-39" > 75 </span> </span> </span> </span> </span> </div> </div> <div className="MuiBox-root MuiBox-root-40" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields string field format data-url 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div> <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="file" value="" /> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-4" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields string field format email 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="email" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-2" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields string field format uri 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="url" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-3" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields string field regular 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-1" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields string field with placeholder 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="placeholder" required={false} type="text" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-5" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields textarea field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl MuiInputBase-multiline MuiInput-multiline" onClick={[Function]} > <textarea aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input MuiInputBase-inputMultiline MuiInput-inputMultiline" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} rows={5} value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-16" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields title field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiBox-root MuiBox-root-44" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > Titre 1 </h5> <hr className="MuiDivider-root" /> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_title__error root_title__description root_title__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_title" id="root_title-label" > Titre 2 </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_title" name="root_title" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-45" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`single fields unsupported field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-undefined" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="unsupported-field" > <p> <span> Unsupported field schema for field <code> root </code> : <em> Unknown field type undefined </em> . </span> </p> <pre> {} </pre> </div> </div> </div> <div className="MuiBox-root MuiBox-root-9" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields up/down field 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="number" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-15" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`single fields using custom tagName 1`] = ` <div className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-47" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> `; ���������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/test/__snapshots__/Object.test.tsx.snap�����������0000664�0000000�0000000�00000304700�14467713645�0031464�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`object fields additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root form-group field field-string MuiGrid-container MuiGrid-spacing-xs-2 MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiTextField-root MuiFormControl-fullWidth" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-fullWidth MuiInput-fullWidth MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_foo__error root_foo__description root_foo__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_foo" id="root_foo-label" > foo </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_foo" name="root_foo" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root object-property-expand MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-2" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`object fields object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_a__error root_a__description root_a__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_a" id="root_a-label" > A </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_a" name="root_a" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_b__error root_b__description root_b__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_b" id="root_b-label" > B </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_b" name="root_b" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-1" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`object fields show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root form-group field field-string MuiGrid-container MuiGrid-spacing-xs-2 MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiTextField-root MuiFormControl-fullWidth" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled" data-shrink={true} htmlFor="root_additionalProperty-key" id="root_additionalProperty-key-label" > additionalProperty Key </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-fullWidth MuiInput-fullWidth MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled" data-shrink={true} htmlFor="root_additionalProperty" id="root_additionalProperty-label" > additionalProperty </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="should appear" /> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root object-property-expand MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-3" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`object fields with title and description additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiBox-root MuiBox-root-6" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > Test field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root form-group field field-string MuiGrid-container MuiGrid-spacing-xs-2 MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiTextField-root MuiFormControl-fullWidth" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled" data-shrink={true} htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-fullWidth MuiInput-fullWidth MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_foo__error root_foo__description root_foo__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled" data-shrink={true} htmlFor="root_foo" id="root_foo-label" > foo </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_foo" name="root_foo" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root object-property-expand MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-7" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`object fields with title and description from both additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiBox-root MuiBox-root-18" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > My Field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root form-group field field-string MuiGrid-container MuiGrid-spacing-xs-2 MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiTextField-root MuiFormControl-fullWidth" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled" data-shrink={true} htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-fullWidth MuiInput-fullWidth MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_foo__error root_foo__description root_foo__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled" data-shrink={true} htmlFor="root_foo" id="root_foo-label" > foo </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_foo" name="root_foo" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root object-property-expand MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-19" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`object fields with title and description from both object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiBox-root MuiBox-root-16" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > My Field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_a__error root_a__description root_a__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_a" id="root_a-label" > My Item A </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_a" name="root_a" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_a__description" style={ { "marginTop": "5px", } } > a fancier item A description </h6> </span> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_b__error root_b__description root_b__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_b" id="root_b-label" > My Item B </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_b" name="root_b" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_b__description" style={ { "marginTop": "5px", } } > a fancier item B description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-17" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`object fields with title and description from uiSchema additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiBox-root MuiBox-root-12" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > My Field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root form-group field field-string MuiGrid-container MuiGrid-spacing-xs-2 MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiTextField-root MuiFormControl-fullWidth" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-fullWidth MuiInput-fullWidth MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_foo__error root_foo__description root_foo__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_foo" id="root_foo-label" > foo </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_foo" name="root_foo" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root object-property-expand MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-13" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`object fields with title and description from uiSchema object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiBox-root MuiBox-root-10" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > My Field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_a__error root_a__description root_a__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_a" id="root_a-label" > My Item A </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_a" name="root_a" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_a__description" style={ { "marginTop": "5px", } } > a fancier item A description </h6> </span> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_b__error root_b__description root_b__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_b" id="root_b-label" > My Item B </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_b" name="root_b" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_b__description" style={ { "marginTop": "5px", } } > a fancier item B description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-11" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`object fields with title and description from uiSchema show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiBox-root MuiBox-root-14" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > My Field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root form-group field field-string MuiGrid-container MuiGrid-spacing-xs-2 MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiTextField-root MuiFormControl-fullWidth" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled" data-shrink={true} htmlFor="root_additionalProperty-key" id="root_additionalProperty-key-label" > additionalProperty Key </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-fullWidth MuiInput-fullWidth MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled" data-shrink={true} htmlFor="root_additionalProperty" id="root_additionalProperty-label" > additionalProperty </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="should appear" /> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root object-property-expand MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-15" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`object fields with title and description object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiBox-root MuiBox-root-4" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > Test field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_a__error root_a__description root_a__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_a" id="root_a-label" > A </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_a" name="root_a" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_a__description" style={ { "marginTop": "5px", } } > A description </h6> </span> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_b__error root_b__description root_b__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_b" id="root_b-label" > B </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_b" name="root_b" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value="" /> </div> </div> <span className="MuiTypography-root MuiTypography-caption MuiTypography-colorTextSecondary" > <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root_b__description" style={ { "marginTop": "5px", } } > B description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-5" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`object fields with title and description show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiBox-root MuiBox-root-8" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5" > Test field </h5> <hr className="MuiDivider-root" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root form-group field field-string MuiGrid-container MuiGrid-spacing-xs-2 MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiTextField-root MuiFormControl-fullWidth" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_additionalProperty-key" id="root_additionalProperty-key-label" > additionalProperty Key </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-fullWidth MuiInput-fullWidth MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" className="MuiFormControl-root MuiTextField-root" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_additionalProperty" id="root_additionalProperty-label" > additionalProperty </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="should appear" /> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root object-property-expand MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-9" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`object fields with title and description with global label off additionalProperties 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root form-group field field-string MuiGrid-container MuiGrid-spacing-xs-2 MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiTextField-root MuiFormControl-fullWidth" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiFormLabel-filled" data-shrink={true} htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-fullWidth MuiInput-fullWidth MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_foo__error root_foo__description root_foo__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_foo" name="root_foo" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="foo" /> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root object-property-expand MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-21" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> </button> </div> </form> `; exports[`object fields with title and description with global label off object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_a__error root_a__description root_a__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_a" name="root_a" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_b__error root_b__description root_b__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_b" name="root_b" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value="" /> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-20" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; exports[`object fields with title and description with global label off show add button and fields if additionalProperties is true and not an object 1`] = ` <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root form-group field field-string MuiGrid-container MuiGrid-spacing-xs-2 MuiGrid-align-items-xs-center" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiTextField-root MuiFormControl-fullWidth" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated" data-shrink={false} htmlFor="root_additionalProperty-key" id="root_additionalProperty-key-label" > additionalProperty Key </label> <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-fullWidth MuiInput-fullWidth MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true" > <div className="MuiFormControl-root MuiFormControl-fullWidth" > <div aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" className="MuiFormControl-root MuiTextField-root" > <div className="MuiInputBase-root MuiInput-root MuiInput-underline MuiInputBase-formControl MuiInput-formControl" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiInput-input" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="should appear" /> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorSecondary MuiIconButton-sizeSmall" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-justify-content-xs-flex-end" > <div className="MuiGrid-root MuiGrid-item" > <button className="MuiButtonBase-root MuiIconButton-root object-property-expand MuiIconButton-colorPrimary" disabled={false} onBlur={[Function]} onClick={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <span className="MuiIconButton-label" > <svg aria-hidden={true} className="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </span> <span className="MuiTouchRipple-root" /> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root MuiBox-root-22" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary" disabled={false} onBlur={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > <span className="MuiButton-label" > Submit </span> <span className="MuiTouchRipple-root" /> </button> </div> </form> `; ����������������������������������������������������������������react-jsonschema-form-5.12.1/packages/material-ui/tsconfig.json�������������������������������������0000664�0000000�0000000�00000000271�14467713645�0024506�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": "../../tsconfig.base.json", "include": ["src"], "compilerOptions": { "rootDir": "./src", "outDir": "./lib", "baseUrl": "./", "jsx": "react-jsx" } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/����������������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0020360�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/.eslintrc�������������������������������������������������0000664�0000000�0000000�00000000164�14467713645�0022205�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": ["../../.eslintrc-typescript"], "plugins": ["@typescript-eslint", "jsx-a11y", "react", "import"] } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/README.md�������������������������������������������������0000664�0000000�0000000�00000010457�14467713645�0021646�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[![Build Status][build-shield]][build-url] [![npm][npm-shield]][npm-url] [![npm downloads][npm-dl-shield]][npm-dl-url] [![Contributors][contributors-shield]][contributors-url] [![Apache 2.0 License][license-shield]][license-url] <!-- PROJECT LOGO --> <br /> <p align="center"> <a href="https://github.com/rjsf-team/react-jsonschema-form"> <img src="https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/7ebc86621d8df8c21f0c39bcca6d476f6f7a2051/packages/mui/logo.png" alt="Logo" width="120" height="120"> </a> <h3 align="center">@rjsf/mui</h3> <p align="center"> Material UI 5 theme, fields and widgets for <a href="https://github.com/rjsf-team/react-jsonschema-form/"><code>react-jsonschema-form</code></a>. <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/docs/"><strong>Explore the docs »</strong></a> <br /> <br /> <a href="https://rjsf-team.github.io/react-jsonschema-form/">View Playground</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Report Bug</a> · <a href="https://github.com/rjsf-team/react-jsonschema-form/issues">Request Feature</a> </p> </p> <!-- TABLE OF CONTENTS --> ## Table of Contents - [Table of Contents](#table-of-contents) - [About The Project](#about-the-project) - [Built With](#built-with) - [Getting Started](#getting-started) - [Prerequisites](#prerequisites) - [Installation](#installation) - [Usage](#usage) - [Material UI version 5](#material-ui-version-5) - [Roadmap](#roadmap) - [Contributing](#contributing) - [Contact](#contact) <!-- ABOUT THE PROJECT --> ## About The Project [![@rjsf/material-ui Screen Shot][product-screenshot]](https://rjsf-team.github.io/@rjsf/mui) Exports `material-ui` version 4 and 5 themes, fields and widgets for `react-jsonschema-form`. ### Built With - [react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form/) - [Material UI 5](https://mui.com/) - [TypeScript](https://www.typescriptlang.org/) <!-- GETTING STARTED --> ## Getting Started ### Prerequisites NOTE: Material UI 5 requires React 17, so you will need to upgrade - `@mui/material` - `@mui/icons-material` - `@emotion/react` - `@emotion/styled` - `@rjsf/core >= 5.0.0` - `@rjsf/utils >= 5.0.0` - `@rjsf/validator-ajv6 >= 5.0.0` ```bash yarn add @mui/material @mui/icons-material @emotion/react @emotion/styled @rjsf/core @rjsf/utils @rjsf/validator-ajv6 ``` ### Installation ```bash yarn add @rjsf/mui ``` <!-- USAGE EXAMPLES --> ## Usage ### Material UI version 5 ```js import Form from '@rjsf/mui'; ``` or ```js import { withTheme } from '@rjsf/core'; import Theme from '@rjsf/mui'; // Make modifications to the theme with your own fields and widgets const Form = withTheme(Theme); ``` <!-- ROADMAP --> ## Roadmap See the [open issues](https://github.com/rjsf-team/react-jsonschema-form/issues) for a list of proposed features (and known issues). <!-- CONTRIBUTING --> ## Contributing Read our [contributors' guide](https://rjsf-team.github.io/react-jsonschema-form/docs/contributing/) to get started. <!-- CONTACT --> ## Contact rjsf team: [https://github.com/orgs/rjsf-team/people](https://github.com/orgs/rjsf-team/people) GitHub repository: [https://github.com/rjsf-team/react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form) <!-- MARKDOWN LINKS & IMAGES --> <!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --> [build-shield]: https://github.com/rjsf-team/react-jsonschema-form/workflows/CI/badge.svg [build-url]: https://github.com/rjsf-team/react-jsonschema-form/actions [contributors-shield]: https://img.shields.io/github/contributors/rjsf-team/react-jsonschema-form.svg [contributors-url]: https://github.com/rjsf-team/react-jsonschema-form/graphs/contributors [license-shield]: https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat-square [license-url]: https://choosealicense.com/licenses/apache-2.0/ [npm-shield]: https://img.shields.io/npm/v/@rjsf/mui/latest.svg?style=flat-square [npm-url]: https://www.npmjs.com/package/@rjsf/mui [npm-dl-shield]: https://img.shields.io/npm/dm/@rjsf/mui.svg?style=flat-square [npm-dl-url]: https://www.npmjs.com/package/@rjsf/mui [product-screenshot]: https://raw.githubusercontent.com/rjsf-team/react-jsonschema-form/e2e1181d1020f18cad0c80c661ddae28edb9794e/packages/mui/screenshot.png �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/babel.config.js�������������������������������������������0000664�0000000�0000000�00000000126�14467713645�0023226�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������const defaultConfig = require('../../babel.config'); module.exports = defaultConfig; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/jest.config.js��������������������������������������������0000664�0000000�0000000�00000000360�14467713645�0023126�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������module.exports = { snapshotSerializers: ['@emotion/jest/serializer'], testEnvironment: 'jsdom', testEnvironmentOptions: { browsers: ['chrome', 'firefox', 'safari'], }, transformIgnorePatterns: [`/node_modules/(?!nanoid)`], }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/logo.png��������������������������������������������������0000664�0000000�0000000�00000240341�14467713645�0022032�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��'��2���Kj���gAMA�� a��� cHRM��z&���������u0��`��:��pQ<�� iTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"> <tiff:ResolutionUnit>2</tiff:ResolutionUnit> <tiff:Compression>1</tiff:Compression> <tiff:Orientation>1</tiff:Orientation> <tiff:PhotometricInterpretation>2</tiff:PhotometricInterpretation> </rdf:Description> </rdf:RDF> </x:xmpmeta> E*��@�IDATxVƇ{٥tD,H,$k5XbhEc1Xbn]W&Heew}ww;޹s̜̙rC%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%P5$Pjd32JJJ티f:$/Us?qJ$�D d@nG#%&4<. l Ifw|2QQQUDIXE%Pp!L1qH|㝎NI$oJ2IñACEE^ |rޜǜE TVQG 8v\<qz@6Q (qȱ9~ޠpBzP*rQQY(QY혥( �m(@b0RO!f@l 8/ $rnC`82(:)J J {$IEIvI JA@a kp[DI @bp$ >9 p#HA*_(HQQ0X8�H� ҹvڍׯߨG-O<#G얗׶aÆnM9B).˖-^~=`!̟?^{mmݶ>K tbH|?+Os\P!a(((ʕ@lħG T)a!@ `GqDo )R|ƍ̜9s_??ϊUV0 R�6$@Ɵ?@I#FT DpR �.r=\Xǀ?}=Ѓ7nL\V^yY>Kf_z+SI@d#}H*_T~T\xJ�% 4;I*3zW=묳fX ^BJP>s/ $H*C�lZ;w?~! .|E^- oĉ{!>F|x71+ `M*J`/^fv⡧~1nU#_|>WmX q1 ODB%%%%%P[°Mk1z^x5kn˸WxM'?_w}ż7bM'B(((((�FNj˗/m{ӦM;@<Mxb<&��eHQQQQQQ)W`[;ks޵-u}:}ZjuxF1!siΜ9G7o޼\\M^{uJb@XP1j/n!fM%B(((((�8Ll+A//7|=ڀ=sx1 @B'1y(/@we_lvM7uՐә ;m5k]w/8bKD_@DB%%%%%Pqh׵k.-؞0mڴ?y9Hp &2σɸu:mذd^>'t8�nb<2�y8MF `|1~tѰIc?>=d1C*w� -ęapQK@( ��"fS(A&)J J J J J J%À 53iҤi0LwYܺuNJ)(N!OyItTTt'�y$<~%%%%%%=H 3wAǣ:j<&D&NM:MRIb% xE e r#?0R@@@@TdUvS&x �N?3nܸu\.y4i{%?PVV czl U)J J J J J JK^�e˖=IIzZߣ?O3%xm�H-ѣ"E D D D D D T�&[dPv:@ |&2_Kyk=''CsI-HQQQQQQYq}K2BJ硇zUGb67c!8!&)J J J J J JK�cc W8?>͢�EF%'O爣DB%%%%%Pwa@H�dW a3}xh̖Lt^zw_(fW,f?~*#E D D D D D dB���mjŋfb&xMlؤA./B}<<>ַʕ+_N_g,j#uSL eHQQQQ@yL/S~p㙰0 BfF1c^*6�?˃D�&?w"礚5kqzwWK˕8˄Y ,aIf❕L((((0Jv, ��0%xH 0c 0P=!{Rh }(d OQF물.ÝSNQ{,3'+�5b:#0ACIR4GI ��d��',5ug \l6AѶƓbwA01185~WN<xt\.u[|a]7cƌyzj1xKx߸)J J J"%P. "_ >%`@�0(apIj$77F3{B�I1�b=aE /x@ ()&׿&tA7lNi.O~XH`${J x +_( g\.DF&GB! 驧:O?QDny晷wmuP~`1j%ؐ�PI>F�`V#sܶm_.hѢ%]t7 1(x#;$HQQQQ-9)o Wn._@I>}3G=+Xk0xC�(xI�"*fNzQ0!/f->|x?lȐ!SN/^xO`\WbQQQQ x%a5� '?;ciN(;XbQ[`^ 7@b60qh#5nk}IyW}V3l)@UH_7T$4^]((%ʥTl�[^ѽ{5jf?ߤU-3p}lboe_~%;+O,O;讏?{|a4�=n] F׺q49:ޡCh F D ؖRR=^Æ ;թS-ݫH2}s6H[עE 4ؚ`ĉiӹsVGշٳg&9s,O |Ĝ&2TcC0\copqeBhp9Bk !%eeT8_U]C((2H I[Qڻ SCW_}JW. !$ �0�y VL!@4 >0'sޞQUtV;O_txi %q`dk\}\UP\xwp1R@@%Fdcr"Iْrֿ{'>=lc@c{KFA+ sa0:\! c {^+dr&4'A\2DptlP&%y]&>빿<뼒ww,xoˌÀ'8(=?W7JK F~1޹I*Jp҆'xo۷Y$va6}g{iϔ{^r+[kNʣ Fq P>{ؤ P Ve)et4p�N;oO٘P\ #d,/%R~UI9Y&+4'9ǵILHIEHJ 5jhXMHP0F#M]/ޥU7>C66d)@QFGM0lذ*3]1@0g,|uX!k01Mg@!6ɐc:|3 ۷oߨM6 5NZj[n|Q7K~}d`"yf03di&ZK)i:}nY^2A7{Ǽ?繇7<ORuLaI["E D %7آŸj(O>V\#/ʾz[ϟ_~M7|800¬àdblohʔ)3^$6LxO20C[mu[`$`!qJL0VRǭvI1KJ.lj[neg1/08!\{0�AJ8-E}̑�& 10;2,KMHޒyr+:GF1$`cm|˔nZL"lgdVW �`AAK6P{啾b d0 EqONn/) =9gc4YTH@ P!s\Ymm2L= C\OCm^{u<y~upʝXug!t޼yȌ`a=~��CgcM~%^g6Xk!Gdf �ep vޒȗɺd#E Xܱ:-[l9[._Uk׮ݨtYԲM!9֯_죏>p·^xᅹ/e6a�d81ʟcXC<`w⒐dy=@ QZ.^(~OL< '||q䶘46J8oH�6R isG4iҠnݺuT9f@kfOYʌ=)`|b<Aޮ:!G dbI3y]|GKףwjolœugLDR|⾲)J`Ǖ+e[,Y^1zB1ayH0E(n3L{z%Rz6g7,YN׾0 &i{W?Ɖw,I f jBF rrrp aPMIdF Gw�䈑7@A(Țs\([yKB"פID4~g5?; & ^ ӑ�7*5Z'u"x?0AyE)ӃDI(l4qf#鬹&6ǡv$ oJ%�$`j@b 44IN뮃6mWJTkRo>0�. $s 'ڵk7)9yv9s懧vܧ~`a!lHQ)WTw'%%5 Dp5(nd>WC5[_~e@ ^ `\`"9tJL讛0%&<ڵ؃JrW$ F0d`Āb ԫW жcBT+[otٲes/_xO/@0OX@1K:�(19#<2o\,VIBL)�B"8:eGWZghE&a>9g Hڈ(L^,1,IF~'C PX#ȚJ7#0yO?vef!ӟNZhPO7Edҥ Ƌ:S\fp:kN[y^0@2481]�0R@$P憻c|VIJ @6hٲ%ʴ pcb#b|sNMM8.a�fpB6F�lxM$ѣG;묳CܻT=}-EC5M!AuaFME 7ljiZvJ#k}t ZEzNsuѵES_yM)Y7:L0J J DpRp)+K7詧lҾ?FMPo \c!ǸiD_!6]e�a2w{L~M B#% `Rsrss_tE{ᆪʧ.ׂ-v<H jV0;=rՁd)5 L^N\pz0yJ:8[`|]6_ oK#F4ӧ^Wr-q9}u)J J( DpRTv- Fa`+ {fi_U?Ja&2pϊLT^Cge%; 00ȕZt 0IzF�# 1mڴݴFRK镙:6j^ y.zwfCoPL9�tY:!l| 㶕Na&&ٿO=ZT h2r[m8://y%I,!yFJS~L( YaD<p9 al0 JB1,o:k֬51իWR:*sܹsi%=MU poza+t8Ycw|](c$xFwq7Ug_YU5 /Ey; (+mҨr\_YjbQ&V2 ƍ{7�SW3R1Yԗl)J $T5%`%k0BHyazp!ݵ( tT\nX ̲IexPV=uXԩSz>Y=5A{Xƀfb� ``ҨC-[n_)4Of>fߓN:e۠l%(acRޭMWqQ~4(njVջ|[zC˕&Dx�,p sU)J$IɺO2!4 )`� +䨣;^t̤4)M Gp°{1Q2H{\*s9/ˆ s{G鸥Y@13裏޻Hs9t^{+t};F Cm0]R- 'x<(T/qI0L5g{O mp' ru:%%.N%]@#I@!1 !LMT?w'5nܘ^~F})<�J001R{,':P@n%&mA 7x<o%91=oD歑GYmv;}S_isI"t0BF@U}^LfL;3ҥb%Ŕ)kc)/V6~Y,c.$wF2}؆^| h(u]w1cfZv�Ϳ7nܸ{6&K'xN N*g駟JH%'xb{nĐof\u! j[JyzZ}mL6K/^![I"lⰔ9Ӟs3FZVIޓ7N �Hh • i'7Ha((0v*W$$ a!4k@@Cuя~4R@y PBZD+MR,Ƌ n6khK ͛7-2[n2YIgy6Mٳ1n  WY@E Ѥ{EtYJOӾ2BZT[:iZJʃJ;ŋBH}y'{FH@l )9a H`ĀfnN;_2Ms�{dwy_j {Ll$;Kť_C^r,l9`g+n F5EyG q-;뻈e{z]n t,'{vC9S@!r2 I `ޕ{\# {o$~; #m3cPsQQRzYL4aworlz6\rvAZͤb�2ew2 `PQC6X #jPF'u&OJ^53nYD =$#xH `$5W^5n71cǎ/N?ϧ {I�%Tq1`lծ}?W?ڪ}+>ssx F H҇k<_")]! $`}5.]զMV '.KXŋ0Hڣ2't@#xE<Tc@iLԷo67tpY{)8Zxr<Zʀ V``%{4kc'UZ a_ p9CQY-7{G-C1/`;%vh@B{ڷo@lvWNje ऍSl%HQے@lK2T(tH3B i4vH}cW4ǖߕ]v٭?[ XlP^?F=ìQڒg^ %MdTC4O\|ŷh<=r3bd@X~u*R %vHhPBŽ)Sk%L.װVyL6sb/>vI4^J җ<J030{F#ui4nܸ."Ҥ<ftyۣG)33^EOIОM%*NK;.o>c1>$(ٻd3aA#RRQ/ mPB;t<%M4Y 7p˅i_g R ßI`MmGY%]( 8q[2gH (l#8yIFɝ^qYEʬѣG_8LtEPQllTCYWV#56/?{uɒ%oyk<ogHTɍLU1JC٠ H%0xҤInߪ/P.L,?y7qC[b~C'nG:#*[X )҂gSϱ@gtYWw2=3#0ʯ[;7VVgL׶7h8b2C)ȺeyW\?)ms=w<6 9@%]6C Jّ*@?01n-j4OuBVo:j @°(9[�~Ir8TYZS:!T3?DBew'<LY)x\85 нʤVtd=aR@Dԭ[;JuQo,-W!)7uYiJ=Ƞ=@ ;hT2U4_TC[O$~e}Koϝ}(=ˁi6(c(oBCNъ[Z/Y&)L:_~>ʗʤBHujW/kh0(YU=чܖ"r@#ޣ#6H@E?u>gI1ġ1p4F]Ymt*)y/1{G(2 mtVJ_P-o�I%'<!_dIC-U:" RlɆ>gJQ)F*^?+Do9`3f8NK>Pb"wo{Ls`@ ^b@ 퍺J:PJP2==IHUWn3m/7.Orĭw$/}7\0?#5Ak+V4H7 wkh 4Ь$�k%R41`Đh1(AyBUwqƉ!?oBgi^k--rS@zR0d, Nh0F9M$HEH J<|r, 'k-[-" zזjS@JqigU0Jrgxau~aʢKtIoHK?asχ~weK9!ܛPڶΘ3*Lۃ?4RXA(*ȅF;�0}Ν;ϪeFXq}衇ޥS8&pF#uy E y饗>cW 3$0@aG@sM33}!<N_tEjޕL eᄸ.md1s sM2}T D%&~p-u çZBZnRޖW%e_ Ooi- ]v:=) 4Ot meHULvH#ĔNh>~x3vӶCX&:t[2Ӳ#᳥CMG^Wvٟ~:[x¢R,=M- ṬR(0rٯ~!{uRe%n֧;*a20caBl+[q7Oob#<r9/ 8 F�IPB]|I']/w .8L{Ow.\H}F1Ɣ:Dz<MYp:Veew$Y6�>"Z{vMk蓬9sߪU\s!׽G\9e^,(-i#nrz }Z jVW^+ݿc~ҊT$,lF熶T'aCMJOT7E1@ݧJ Nx0"6 >cki&O<#<raӺ]!`(QpufCa F|VZP\V?7A #�( 3 C ĭˣq6ܧQip7=W0]麿:Z&}[ʃ@򟣽k PS&d^)mHƝ (A)| i} N .W�&td ,<YW�7JrB݆°&{Z>UWQf�%`3bN@Q焚;ʿ޻kj�R_zod0/ 8bjl(*ȁܠO8bt:a@xGÌ+ RLL#Ƙb,0 ?AkyJ~!�@eH'A!`a#\�I<kt<$SaJĻ#@eẦq} t9�z%" 58Ne*;b+BCۂ)A4~@8v}Z*R[ΆUWf(c$xhde^Q.G4ebh߯qfRs٬PVnQ\)%Phբ?'gЮoD#;[Tef0ޢ[RSG+*TYSf6 TIN]un8w}u|c7j -Ċ\FBzgkkgmVؓ 6.{M{m,Hl0B V92J;q'B8S~6{'Jj2tl) %la9(/2SdRіkNw!j@ ^`�˚7(N߷O65ZtPZbMlB&#e\^d6ܐۋ/ZuR-fBkl]P2Ve'KjjO(0s8{Y*v;WWdNܹsw.+Jl;<ib2K#(@ -aW 03-M8IT+35jFT$&}W]Isl/de&p.`4ESM0oOIC7akzL <??Y~=%t(_ڧA-]#*<e ]bRNhѩWsc .SKlôIn.AJD~ N =r (uS�T޳rLjk"sMjujv޾/C=)(x 2 )}ئMޥU8I}j?kK.Ũ% C:CRIޟښ{ĉwh7jmHB6`JA)Cʬ$yU!rny:cp ַnj/kHY”1eJ >e( ߠrCÀ}ƆvR$T RDG߬G7=0@14 u2BLyLR�VNd2N/dG%B3&qa ݦ=X> fꮱK5D@U}7k'4o 0o`lT9_j%\k ~5Je ڤ�1X'�mN՞-&@$a3YI;(ICф}eJLQ'vìm]G|Pc]€); @I#fpb۳ lxH,?ShP렕8%`oؿuh(e�NRʉ2 NMfA hP) .s[KL.0\+ ^vЃYcP|0�YJ(DBW~pm-n_TVKׂ 04YP~[=ڹenR纬" ͭoj',X!dt6iOX+2(QhbR,r)5{j^A ]nO )U\_QV< 僒=!S'.#z]T[TU@e(?,8q> f}(DS/tCCYKOFObH6iԿ59=?1`P|ӕ^H(D4鹁V\ܠA+Vș4�!3 5QT- ߜ󱵆'5'Z;-0i x?S2\?{J$ r$; m6Jo7~S-kLzI(Ez6BԞBRUIϋTZ U9h{riʿG-/A N~DR Ph>ЬvǝaG‹OW$ *}HCoʷ,tqRo3&^[*^^oU+=eJVNNN]˳7oݲ0o=aΐdR'HzMxc3q>N&KĽ\2# i6E/{Khٍ%\#xh6l6_C7.W(/Cҋr閕\7S{yB+[ {j^CFJR.|%4%HY4ӋaEH )_KROKKF+)OΤT';[d`SZvh&fD7,<}aoA Iiڊׄ\tg\ZR#LT_<%ĸ9&(?_Y[UF%鋵 G%I9b(S 0-jdH!k#!lBH}Pa/]al"3<?W($ig+$� eYbt*\oPBsР0bIΡ~;_bD$׼ml$I`[^NaSC]"e/)J.b 3^Qg z:9>{቟>zofX#τCKI)z9 )~Zrό<sCE /-lo^ݻwڴivw@`>|V0WB$>x KK &B07e%;5k6$ 絚6WӋ,Et/eC\vŲz,&J~NZ<yr4O$[WCTQ"7q+R DÔ?Cx.иe0䀩B뼚[J\)ʢ'~KX `7:``KO'|X-g�RB�RXXP(ߨT4 v kM7\{G0q>l�da(Re}١}ȫJo|zu)?nQ&ŵ5?r$;kby3{!U{t]8&"%L4{<'W.]o(n'ΐe `ddfҡ.Jrݰ·Qj\S&3 I" S* ^7ξLi?@ !FZs, g04\h BOI$E/!"ً)҆ ΧzN^P, eEAXzBg'qԛz-,מ)<⭐ߊJ1q1i77HbJ֞YЮ>\LUa j.5q?GtvBx$>&!a6f8 CyZ2Tk]M�yDeO?\{*/Aՠ5l$>P�6J'oժ%)o I F LcovK£/ JYJ_yFAM  -E(˟|1497;L9GZ*L컡wFk=K z堇vS:\ϓDk׮x#<0Va$| jI-%%7ә56„I=>5x+}Z2ޛJk֬o,AR`�RoyvM-TK\G�S%u[j]Xa׮]wԩI-iӦHRvSɤ\mBY]LRmlp@X|^kxr<r잜,'UmV<-/ H q1#Zϵ]+b!s (yZE%[JtUaoYǼ9*RU@Q/wXS<mrڲ^ʹvb7[;� Gb׫mv-(>ް%:P / H6�Z+r?k-&e"}zm%9XYI^PO %ecJr8Ys\O|0ysd:5h:́2BZ !66ؤz}ulRCڴҥK}kfu# o�-%' U=pŋ?>SgeɌ<#?p- .W0Yjҙ3g>/ߢaTڼB/ tA~tVrF=N,䃒;𥉉4vZ0ROWka7?_ nM꫉+)-Z?{놋Ц � GN^aIe((,��rJ5KIL{@\Gny뭷| IRQg(MgJ qnSMp7 /��@�IDATLO835YI{]10F1{Q<[S`#c+IBcɛy_|L>@ciEt2a* 0{uOj e˖-м> <��ЦxW{VIPB,qmNn~ۧQhSvۧZ\W8TT�^v[_:184IHͯrw, QJI)9$ H1Pv4mSgξ',xu�| ͋ꯁ�XBP6lXK,{7PNQ�ky˿<<"L2q_T~]9n_kAIwZsp:ǁx( ֭Z2-Y#2e_we}*J�j[U?ۥz.vCNt /C8[%À!2J.C;tKI.)RUʟ!o!AO ]wrUR5U]RVBj4]xNtAAZxg%ޣ:TqwSoס:GX4q(d~KKVS,U:aki;M꘏}T!P>Nw<`u4kjȤɓsФp~i{cXX_N8ފ&Z 7_m)? %|� !lCzLv`m9YN}~r xpB Iqi0B*= [F熆ͻL mŔ- VKD('M9&(+>`p4Oxs [6,ՙU5b RM9]扩e]wݵR;p/k%JCsXd1zM PH2 1W<4|;t|z tz8_{UXO݋AFi۶mېv-WChF m\ 5ס@I;]vw`31�:aZF:Edr#Mh]k)^/pDLP% m 6(a iT`� }8Gr?,G `$~Rn{%YE\NғЏ?.o"5 4?ꐋ"(V] sꇑ't:≮U3u() 6ȭ@Ĥ^&D&~xdը r\|`E[1[: |�@~;9k>oڵkCM m0|VC iN;JFM~�8D)C{.A1!oݻ@y\HCP<Or!Xyx2g; VX)[FWJ]FU8j0_JTe8yw(@ (:bD4eR4RUPdcL/5fҪ_0 5<{?RxQ� R�(/nܸq/(NAhҥc5^q@J*Y 6A)jPTvP٠0 Z ⑲Bɥ�"jn,sm,T-sssk l#jil}�VlerjpH@Ԛ)Y' /k8}2arMqTC$@X.-s=_3{Eyby3ՉP|&ێpr{mZ], (u4kDW&p"(@ U+[JszJ y#zVUU)KR]YM˿jj mlfi: >>s/֯Yb@ l ?*KH:c3^^"`sVG'Pr48*$@z lԝ6mZ^zj!F 4qc�7(JݣGG*8ؽxGׯ_cp4U}} |- �,0M(;^s4Z3Rrp]aI0w=դ==z G+H[J6OԼڡ.IO‘ȪJOV :hw_}5z.WK~YTj!(QMʉ W]pq1?ǃ52$sNW$ !9ԓAp^.}Σ<L(QKRb νmo@F�U=fjs1C5_=:ihs#D Уl(O'_KV\… g}/5?iâE<b0a RA!v\2L[%ǜ7[S�vI7^裉+ohnY*^&^!xZ D൤@;Nac4XKCu*ST8bܮ1D Pŗq{, 84<e ~*N\(,y3�R T5mF32<yUxQ�)x5� k~3ZSNA%&)M26oZ7|`|:�vPIIIT+{`&Mu'N7n� i"}@dmȓZ+ܹshӶ9gϦ1f{, .1 8=?u_ְρeMW\1ŋ̃!`1SULb X<Pޒ.C;cd HITXA4~jn[p:4XߢW~,NS >M{P,=n;}{wy:,t-z꩟p9ҹo$ZR;WJ[ F0P(^z$GGå!ޖk+4`H)C-[6Os|w@ 5p4.dXh^t-Lz&g^YvN{OlE� C8xK>: @]4(hpWNNh:O_zZ\KBD4_^ "Qt(]~ءe.-n^ jՔ8q!:$ojHzQ j==$7x{rkf%\O~$C)ލ2^jj:0qO889n@RZ[R/C(A H@<6tI3ax>FPeiG:Huy=İCp[hk7߼DdA^ /"^IcIu&BG4p�% gLY?4#PbÔJA?q^DUcArIRG_fM/CWz=)A]e4jU?:}G^@x:P^H|Ă .ܹMHG_<H %kGMѼyTHh-`P�%01&U)":ޕ^_H\_򗿤"�r}؋,]qoޒv.K;o~(\$!1BjG pc_)@ s92 oilFu NP UbJʢaՅeT, ҇]v}Kag1rE$R H0Z6\0td&kzByX"3c/MY33' `:]g:)RV uՊ2ձz+V�>l 5UydP`^Aq6]nH꫱ܥ[A BrTT3o�?7/ =Cˮ*bOY,K1 K1[}(>|l O@X}ړ4(+ݤ@%c+`¸Ib*~U%G836}Ak_oV3y~Ҏo̤�4_hNi~"0QPFLy*|jl%Gm-/O+dHG^ v@:"2t*A�rO%piM. MyJt015l7NN;boGi8p5", �PP/,=>z7}PpHxGŒ W, > HHpf(͢_ԉlTFIxZ2`Btlٲ5\7�xȯ}.%fhԩO 4C8 VdYEkCj@aZXxq ZfS@[5)_M_Cry䁴0⸼adіCE%=D>y@2~t]jޚWFK$ے=eD]ޜ<GJ/2ϼ"%Bji~C~K)D`ԡwp'.h2!@M؞Zz n}Ig`|uj2=\qˆXcxCKgk}v~=;ҁy4HG-[58=$i:3BMibL5!�X tXD-\l�BN?&?!�>3E CKG+7&߆a8]Ey#uY֐e,y4䆎j~E6R0앀˟F�P[%࡚W29t!4X򗘶M4fT& :v!#CO/r鱮x 2O(PW+G߯?Y䓍B# mxɍ78Ou�* LoKha;8!p4JܧJrNjd<K 5F2{LUt˗е5C$ٮ̈́KN2d\MF[[$p pudyk1Gf�}�ʻ듢rGK�J^eGK[aM =Z%DukkQ\,U9�L]hz<fhhJ<ޒ>J+lm�R6=dH:_x_=,{Lgm37CF/CfBt5aFik&MQyAU^Ίk%Q/_I /J;cO>I^ $"g|s2IS=2<=[.PrIYk(@Pڵy] 54^} Y4g; � pQN<ٓ9+,0J=@ .rz=1FHdc1 .P eĝð'LH- KLbˢ$eCh5:Gv6ο;;4[H@*b{=#Tl7A:N)OS \la8͵k^z UfH[-TB�{MTpF&k$ьOINzQq`sư@Hk/W[kM(Bq�K΃5<Ȏ|/#WZ@WN;s-1K9XoIs1F oI72jipAI*hIz~ e4R$@.5 çCNh߳}h*Q*u3jU4eє _@EFpR\GT=T$*j Bur2)m{aȡӿ/,H-=^37+򬕩jg2 ZD* q|O8ۨ xȘͬ?3g{0ׄׄgor%eFt` az)h$H_n{vC4a@މJ'}@;x!?)9[R&+>ˋ (=�P=Xm9uDɮER'7>a'uReɶDZ2[m"(6㻇)Ï 63<qekb#r#+~_nϪ{ヲRe"&itM $y2, VLa+Pg@b n%47dر;t+pRGpH#+Io=Bu]w!g ·0@9(�}u<_f~u4-%v5);<mW'iROHdՎ(]Fe.j5ڪ.ՏMR~ʣV;P'T)%M*+;v & o\hx.+Ղ`b&F;~r'0~H!8V+E0@ Pql2f̘.r0}zϼ"WHv۠[awyeo{xo|(�#,(e7%@@ C8m=оʑRS '=%$%Qu F2 WQ35!>vK ɡ`@ jYaN ^0\B9+r@ڤ 6lxsP&ko缮D( P>xOׄ>&AI;M/=9#-JRIYj[U]w}~y[&{ ڧ\Aa(ٲ-JP#fi￟vyr[))eǞǰHʸv'U UKE4$R:ӽ(M Yk7}tG +Jla4zL'[!<%or-,,˔15<Cw0DM0IPsֳg`V;/+rq7W/hBkF�0Pi�343WaN =tKC%H)K@kfutQ 0Tf DpR$՚͋U)C}=?AŢ�)ŀm QUz<uvHL%ܹ 19$s2]9�%Mڵkjڴi}k9Tb%ϱUCUm9wjj � Z-qa(][q+e@l-jIcMzN{^I\*DJI5:(2K ЪԎy&UazaCCK}0LJlEJȴQTUZȐ}oMֶ\{sg̘Di1Hp XG$S;`Ml=Lv+nF*Ar'ʛm�! LiI{\Rʠ!%ljGIxȆVH2'N2!KT`bib~;o+" #HPDc/^_3 Ff&3l)<dHMCvm6o޼SXә0aBYr4aN8 -Iǒ TZA ީb@ _7Et'[ &O7HI?QQ@'"i {Q�)]&F8̾O-RAP(c@JJ *!IC:HLzQ:95Y)2cIV${ꀒGuTK/j',_f{@Jy>Ҝ K-4hVZ !=Əa?i�2Pe``D-%w '-Gjv`pR] P11(!%%q DpiZ {QP~8:^NW$ cZ(j!e}og}U Ysl rbiMȮ#O-0�YuߕkfQǨ $=8E'N{a5 Q;v<Q+n\.뮻E (C!";%DWNzK J %z\qOC"E D MM~۾f!f�;wi\waEK%ԴlٲY~ xK<f l�XCC6Bhs?rc-5B%|oc_ x衇0_|)Sj{N#sssɻ)̤2Z-a¸A eD^ )�%+i*f^I87tNWcK5ӽ%H#D(o DpRF=ӽ(xOAAb* kǷ'N+]4_걒f!9*S՞0S v f&T^7u`Fɹ [*r%~>qcYUIؿ P(`K{y$IXޗ't_~=hΖ7JLJΫZg,̀ I ]ʧNwkJ[ۈsC6Ð =wnZ,5!Ǖ@((@'//&ɣ:^T~A> tBR0.(dƤXC{4}&1M/I7l޼c͟X|̙+<H1t$/L.an]h׶SR!jժš%`4[ ׹ڎs5Z|@ٚ7 ~ɛ<z7ֵ 'uH9&Vt= (ebvZ%Nܒ!gPW]%(J@')vT'C5@!&#'n.y ~ E.E[޽ItK <5 ɑl(oM,ňQ1/0rnf z]R" Q#e㎽S5d�'+fϞꪫ^3]_�&B$%�DIQ>ٮr@>'hZ:|)¼@0bPdY)+ݚ<\qxhi#à)NPgS9%:$I <*DT.Ąt/ &e6a~/>l;,{.ct082 Rl3ahlVֶmb-Idؖ2H5byB<ql뮻v5eIjͺC=.ˤj{L<g0KIMקd>I){֫Wt˽O[o:YBu lPEђAI3J4'K' IS"("E T"8,VV%݋H:GhOœ_ O~_W`|C`G]Eh4kq>.=Jp&MÊKO{իeF]R7DDIoRe 򸮘9/5K_~v)@crcmzYp/rgy%xKAIC4MڡYۚW[$Ep DpR"O{lQ*I1#4WKG03R(dzlNTf8 4J򚜡IH]:SӜ<jI`W\%_,m#Qk;c3^\{Ƚ6N[qw0`ܯI`ipM%SKi�'PDӟE$ DpRIcrR2_89CE^0wn30`�R[W�QB.%`caÆЄj I,^?ӵH{j9۝~9]H=4+9-#6J4DC8F&M ]fA1. "E T- DpMeg5b0f<(0#whnCFN;?O\@yFAJ!K%5UA׶jjt)+-ڇZ9�$dSK�&ZEa<!V4Mz>(^#Vlk'. .J1.J $I2dul;0E-={0HK=<H7 ;cw@©-ܲvMVÊK[o}g?&Kt`C9/]=*9hV@ۭ90xa{8uCC7iC8D "8bzfhfc{Q�*|ֲnr^GWeb C=?6\{խ;,l$&|LRRќMZy.a%�@V%ʑ5:pi+nzK8i~@L8%Gg�&p/pRQY-Nx 24sk O9)0Oa- ɐM3Wʒ  +o UD?l=o=&x(SO|sv1C8Bn}ài, tzJtW%B(%NJyd'7gO �8W8daέ/W_Xzـ ;�+H"EU, ANX\Ӝ~8%vDz"lje5%6*l$(Q;)` ove{o[gi=s ё�H)tmIR݌ Q t֭a矁f7^<$T9|$1%s8{Gv>Jz=c 9gJto!9KQ"P-K "f0#'mk=5x<CʙWRkYRT0{Zy6*6ގ_ܪRhҙ:%#R-<NG2a(U:3^d,Lc eggnn޽|x^D%&ޡD̖⡥Yk<evgԼ;W2OG,VB%L[g#'͚[DLP ڽ+I\Wa{d./}M c;D8䄝ʄ8(DD/S,f7+_ʟ9cxW: )//cDWI{Hvoռ6 .8AJp]"!^br ‰w #`$YЊhwͼ $(JRr0âBFx_=%UoTH�K*WR)/)dZw MPٓqW$0*LDjYv?á?я$]Վ.֜y^<!9$vHcתWi9`ie3W9Jd,Mo/Nd(44cΜ!<KNݘw?x+Ekf9C=KRO˺1zh秝|Kr1#!v옔JPHNH<ƉCPJRxą^%)^i`7" L61==soϛ7R䄊:wipNK'&+!URB' Ūq VEE%rVm0~z< Z7mߤ'1aRv ٕ?6Q&}Nhl,UI!R <Iv:*)yCX,o~M1VBBrDE<II ^/-w.g΃8pg?kgŔk~~R_:-X%ѦCN10 PWr;MS|$y7Tgm&g>[h86Nv $݂JQHTࢾ#U"/Sr쵷q(<Ii$p1PRRGJy??~<H&HR˿}߸q#g%A;)!`03~.EINx-8fDN[|133(㬯_WW}k_ۄ{a0L.iI$Ĕ2IvH[Y)C 8v*1q- 6I sߜ?`:[m/Dg|8l)!'ZӤ&|PaKcf܉_EI eC 3B߮sQs I> �;v 尾Y D۶mҨQA7uVTQQQHːbČGn8(Ia'^ ;szpAuqĻ ?TTT4]Λ̟ VRyV;DzY2@RFIe YdrϝJ2#.aΨ=GJp•p% -GW^9c;C ~3l^佖X#k<^9BJPtGf8AsȖgR~3cP#Fݴiӣ={,ʴ쨚K_p?O79ϟ' !a<WWrNKP3x≹˖- ;{」 EГ8$&2-mGܕzL44+g6VHK�Vs9D"7$# P9[JNVLϓ١kY_w¶@@sKC<@D]~!=dwU-Xؽ5kc $; SJχܼyfЎ;=zٳg<yW%&H ]_0 ߌ2dHN=8ԐiSz /? ObBŮ*ϵ[t:L$%dRVXK!QI :.bלOp9B|4:I ?x\P|g32sI�x&nĴE/N]:KǘO%)ȜOεP3@ɉzv$)eBFouNC=^}y^z; $H;4* .\رc↠222'z6 uX7U>vDDIId/RE\IqI8SWҳ1JHc${HdQR=}7/gC%'静UW-6qC@I!j.ݸu!>>҂D_ut�7؎K ^H)IaCOArKǯ?N^38J($)Tּ|ڵϢ+S .++tKHPoaxuH~$#0TJ$& t"6HĚul%Z$% 4tOdkS"dKPxܜ`<R@WS͏�] 62R!ne5 M|"G fT59.^) x/wM-]-p3RlO) ;3IW_1oMrLӿ2/-qT+-!�~E,9,-cRYz%EO^BPGz@ Cc*kr}k;Jsg #׼~MK^H$`fr?SHou۷:pվNZA8|M!T4ԄVJƸ$%E),%%, ?RzM}2/^ &0(`xE(,[BDDž0hL$blXw6m\` C1$QbD #$V+߬]8;;E\,$)wS|i!I7>r & D%%!-!6q|X ¡^Iipz2q)9:h  q=RίW5.kGFNZ ]@o'KR}*J ){h ]"Yy6`1?/_bd ~R̻>|?@^Bu8T &);Uq/NKT0zLG̞=Wt$[;()q$a2bz%�%\* 47/q 9#'q2`Rr!K 'z%*f߾V=+߆/*R6G}G=K. 8wʕw͋H%$JH8l*$%0o7IJt4xqR+>0 ft*1 ()yrFGML Gj|Yx@6_f~\(`:CɉzJPԘY&]%|gIR4a gz|mq%? s,Q>P!,Ҳ$c$#!zЪ!\]e__9q6)(I p}UilMit@B .6^ wW3 $E}ds;CEȉ"aaг䐠x(삯vNw# kgˤIam/| AR4z%#)Qԙl˜4||)]x+,]BA6EgQIPn$*IN`?mIϮL^HN2K'~Z󋸊R(].\tƠAե:thFNNΟbg,*Oz7\Zv-z!Q uF],)!Y&)'f]0"_[cdKJ*!|]i C �RC Mo._EMHbIJ]ue?}D./ 9[8z^z$E<TD6`q~|ԩS;<C=̙31??#Xg. p3*]8|3Y۷o#l[z5I U}ithe|4'sďv2e2ljdB. IF i R'Eh0VpmM?XݺZx$I<PLgN gH*IaWR ˠ.{~JA$R꣨n;wo!y饗nikwҕ㝇 ҹ/酅'` /14CDsfl#DCz.;w 9w5Gz#oHnH@Hp0l:sMpWBG~ұ@,1sHi0(1qOIJT[3 � @WUl$}깑"c%)aH )4裔='۾!zz] #+VjZ!:5<1zGd<^=J434~o HZ`Ny\|ip;�Y!<!)T �"V^:ĤkX 0dJQ^C{o,)wO[َiCI MbWUSQK:1=^P p?YӪ9CR!NGR>Ow-V 弃C8JN7DLy̜!`$?nݵn49I|1˲zvjC=*Ap֘_?Ijf]ِ1d#$P.D k pVRJMip!L*0tOIKo73Bv!`JJb1ro=2t_YtG(.vLwJbYgpT(4PK(^b\`M0kiL+,!HQX9"`JJ|DL�1%EGPUY&%LOl&\(%,I (QI v @674C8R<}*fw%+(\JNɈ=n!`ȉ"aa!$ݦJQ0K;R)9LRLMi"z% )%wU)Ew㕖 i �s@p acgyNIv,}*IQBB?bwڟ;|U'8Tc\RN%)!^v��@�IDATn~HJ "4fF $FuII82gyj7ʐ^<w2SeЬ1f Q4$i^#-qX5X]P~D+#%u#@"tJP9bdȉ(1Tra+IUiz<|dy+佧vUmq"׀ip9L+jp?DJz%:�3 G@l.bg[w;;^)JT͟_]+0=~%IQ}NƫiÚ= SRC8+k\BJ&Ԗ,08YB Eg"9̷`Z v$*,:ԣRhiM.?1z9,鱢DtLlLŭL ɯ(')!Q v@2#&B?2&11a.9IkK ;UzEI fDV=ކUU)ETA3=&2D(4fɓ3jR0#$8%uNɈ=n!`$9 Bsk$9-رfW~}$E x>"EwO_ "Ab”sǻjp>,oFKyeN&}ג i �s@$I@22pp*RYZ9=$(<{_)v&鱦DpM3; Xg$pJI "0s!�Y"oxѰ}!4CJStpC CzSeOk؀:,z8lctBVF©j9w@N]׳j7 *)1RE $FMI [:#'%],>JAeַO)8J}JRjzMIY5+dЄQ-UDRpߜ!`�ogD5#' Bc'|�+zEIJP`�\Wq_3Ee0 V*$ VBC8^fs@@@3QDjI-a�i"ۭ$kJQ8sC [V"Sk? |y-kzLΏϓ9h*TDppaq>WEB$8IB')At]!n6gI# : sIݔv Uxz$),~wfEcXgzL'.KH` #QW (B�M d4@)kjR4)ο(9!1aO$E Že?)ᯟv(<g= ߖkLCLMI)]X '! IcC8*- C Ax![vFNR8tc*Eѡ!Aq$' *3We+UpL5f$% gw1 _&,_V -i0FyW@0g$UFM%65rL퉉D@i�XBY=ItɐR_*[lƆ1,GJhL+/cϖdITNHJ"W י>BChMްkIdNga΋/\kȒ+{, NMfiph2r ?H Uv7Fֿaܯ1o0≀m0r:NM}.Vצޒ"9INd Qf*^5=Ο2@^oY%Ƿ;4ۜU!=,KܪJ�9C �1 {ar⤛o49&4UzI|*[ 6䓜PR\KpO)]?^/,& 93Gi]KDpM+K;$wxg^R'a;iܚ C$M9AA,;N}>\C9i;<WI(QŭzܯLRmY#ތ3xMURtO:Pv;JiB?)NhNɈkܴ5 !` "ҥ[7Dw.{s"` Kج8ExKPU=M_{J= G\ \ '4C2g$3lEB_7oMުC4$%11d4*0PhP( JRHPIEg&zerA. Ut|$G3 d}R`f֚Yc#f0suzkThs1暅feoKR8@d?tU[+|s#mޡpN`&pH`%1QgDHb`pyN;oE9ilvS`Br!k꣐Ы>Jnr7eeWk)Ex 'Co/0 Ʋ>!ʡHKvˉyœ!`$"51Chq*N'Qz|U#'Pp +EQB) %($)2):@>c4+,CӤ; I&;kǘ3 Dܨ&7:'pg؎k1FNZ ]̍̂i.`EaHG`}PNRpسJJ T[%*7RuDg1)v^ KKDjHJK@=OJR(E,&btW:Ju ޫ3G*1!sAA�ZvzZ6K-p5HMH y}+!LZ5rB-=Q.; 0 IN?0)=QrJgO7qA'\ ILmR5 Zɦ mnX�XC>$(>V!`UfPvL3{+{y$I!YcS&sx9ύ lUJµ%,zMjl䤭;^r֮5m|( IPDE`oQ c>Ӈ#[,&%FNe#r󇢅c#Gg_!<e|�)泹EYIRBGBj0 rEڑyn��,I Jl! x~[UDDf@:C0r΀G^GNB`%B&/L(@FNHIIT{S9UbLGshU0U g9K8I27:%K,)DUH%H.4⻬pj`�%Ԓb$%FN|m )l?3mNYĒ0' )$Q-@!`]3B\97C()a}2gGȉd.QMg ,v@@1RC?9O^4 6C8YC@b7J($ɂd)gT;kRBCp%6֞=CH$G>5KJR8e TCuYS K!${6Fac)ɞV"`+BDFNq#)q�a!@$yum{!  ލrne<Ay`5#'mqbDCn xb𷷶$lPm0GIb@c]8,Piٓ F/�oCm=H4FN~0L`zm/'C\'sds!t=5}NrzBCj e?fEh>D ʛ.ƢAӸt1R #'^H"b0eW?6h98ʂl'52ݯלxQhUeߑf'55j׳Q䏑{PLȜ}\ 7rEHQH;nbC}Vٌ0HO'1O:m3rj�2aj-1/>LJ0·q(@-)ap<<m0Hʝ4#Qi3rj�(t=^s@`CR¢yx\{!g(ռ$%n\c˝2D:Ar�] '0gEuDNDs@K )BDke(}@#@R¶C8$'$&a܃oq\~y'pIO}6'QSILhQ l-NB^n4�0%&JN(Aċd~']GY[﬩h=׹0HwClkBP2q*1n9Ur8IxP)Oi3rjS^qJ|43hGTRHI8)IXZ$%gOcO)!9FL,s-D,-Z^oCypIs0X];$&Tr7ᐪ.TnKq910+=c7 0HIId.l617gEdYKᨴȫ{GWH{q5nHJhCB%i0Usr6*f#EP2ВmNRDp#ʮ7QO8){_%?ʮtva{B\φe26#'@\pR>OItml/_,FS‰-q\teyw<;HJSBEWNFR[; JH49~z([“Đ9i|vsbE A1R>eކ7s"tXO6d0rCSrz%Tt%Mw>92x$hd̖+Dz9Swrﶺ7r͵X<)>TG3j޶u! ׳ n4RwO/)-!)^ Gْ7D.Y,JH@L.BRsR𪇂9#'n m%&n!`@PI#%hxdC8aUv==Z-|<D$l_-] #L~Eup*{nKPa&|``qukĥܶ}| !0K%!` VS'-I`jϿ$;vNFN@R!~2zL)[<OGu8Iq:+PP\hi\H~I%"6t#e^l4VW1 )+m#;~=Wi0XYɩ!蕌'ee|!^Jd9i#` 66Z'0)1LwFWBbp@DXehQ5 &Ž2Bg"B(-ӽ !I]M #'!hm(XЕ$*a~s"a$R5 uǜ>`JJHzf?)[2OJϔ3(n016 3|0m㌜ Ԧ"#)uC- qw[OhC4f|'^![])]^`P7|M,%ʀRHNrI 1An[8#'m=_dB- �s!kHTj^ ))!a9A3y4%1ɑQ0 gPᐘ) asNlζIAkn6,FL [opMo; CPB]Qg^ HHCUow| RLDY$[!E2bD7,S:`*%&$l^:L`v"Kbk-PgV0y)`Jvhe vCh>$Q4篜&J\54|c*gK9?tɆUxŮsJ49iGUD ҉T�\NnEspʦxp"G?|Rڇ6 2~-]$WWI>ZI3r8MF�,%BT|]E37| V$'$&Nc̡TBrn״{81 "/wK)%%:\3rL(4V^ZG Ԍ5 ,hgtDIID\IJK0 ޷f|t-5l,2rY4C7 wkIouFNBƎq$?3beMBB %_"66K'4j0M/l!\8㔟?ť(lǃv "@RAJK3 +瀼*9븚ҒW 9Zʗ.!JA!0!63rӌh5gYSٱѯTn%c$G|P%>Vfkx`/3'H.L;4DD E1&" 43rלx5ΨRsv`b#LjIʌ]m'J ()c&WW^_mGEipݵ?[͖$gURIR9 `dG:Qqs:60C  auu ըi r}FL'MrN9O|)  :M8#'ɓW&#ɱ\E*) jZRb[DrBbp@B*A>yLW4+L'ݽDF(>C$ aGw'3rfQn:*̺pLK@ܰ$uP.@R$%8H xW UWgi0q"x *$=;"1!~ЍucG$E6Y$[@M'gE i7II7MA@%$nGLpǯc<㑕M2 .i@smPbw8i 8t wsc$9b\7%1+sm@":KB}Kb^'Q#9$Y-_܉+6 W<J.[* #W)%סL%$|Org$3Т 'ۘs3h@"!$nĄ)\<r+=yW6f<PZ$#gM!1#'EV׳3!5ؐ/;!X8䆤t 1V8</_٫#X5Q\1d\k<ΙRUΒV  'A;" tFN╩$%L-0 uP 2($u+O7$jIN#ڬԱWKf뒆8bILܼ[J9^\k HLreȤ 0 yҳH]3re[*)ygw^,?f"6mCh ۉ##eϐSFS *\WC+r eJL@L.xl~l"[*3J4e ?.h#Ij̨79iZz-%;z: z"JcZ|Qf]1^:fY n5y6*}p2RR΁fΨQ陝;T^X|Z�K�U!RrË/߀sC8IJ ̑qI)V -(\CiP<4r v n/!80eEbu#9LϢ v+`dHM;HN /bCAO=3u+v<I t~ v(悈�[+g&z]>8|BYW .e}G>jQ 4.nA‰׳eؑ|pkrxG0ԹYz%*JP-x53"ĄSI) tT]{TaP<[9#&L|*9scJLHNn3%H4w "ګ<%ϱ'`!>Lm$[r{ɰIX5jSg䤥DܙrP.*tCG IPx#JL_=x'#=:m[!r BJ@HLH6t-v99L^ӵPF,M^^ -}q K[4p9mzX$>l MKv!L;$jr¡ȹ})쌜4h}S)+%rߧ&KلN҃+E<(Iq4lDl0bND+iz<s; RuPt"-ބi[Ͼ&Kn, ËNӂ ћ 2z{[vꔐpl~2zRR1WaڦYI _1h3_ 8&7oVɳ?WnEhL[T*CK@LXy1|=>|�IAt?r x9!6 URRߔ7pk*ϙ=YH%žKE(Nh تs8f[D$OLƪK4!'еذ-Ӝ>R9ii`9ⰌH:Q;E/+~bL_ x($)Š}sC@ ÉfqWOǩWBbEJP9DkNuXv?RWWw(juzp$%S+o.)>Fl%:òBa_rnXI댜Of%l9v6'!Iʖͧwˢ̑?1OJ'ux+Ia.(AQ$|�sA bURJP^ *CZS;yQ] Hi(PpS\R#Pqx<  #a\P(?r9O8FwXxz%%Z4ĩw5L\|mh~>y_g?k^?U! ,#3$eX JQD`\͋jtLW6@^=g폀Kذ㠧Iz&2l|M|T_4/fS.]>..BISb6x"R^r[$s`Dd0x JF4 4ꌜ t;ǁVΝd6g™*?m{Z"b\u}M!ԇ5x�N ¾Q5>E a8R<JJ(=˞'Vɑ-oj*0.2`DL/frfPJN8 Ie.$AÇeg-A2dKV70 3r7<#y"龰p7G,]|K懚>O%)8dv@JP\#2{jQ`^&|!GLp :X%?Uc"&)n ?.y@>MC4tL^D)E|e|{vD�yLtqR 44%R4�3"aPKMFNڮHQC+,acGrFJ֭ ]3dԸΒՀ1I <Bs�u/`!%琍I$(t V$<O~Lr>9R`V̒ݤ3j5A>;#}}sAE_QnVgJs;%1%Ic9H` N-z IP8~}Cg׏훷ݟ\,s%ء6$(|>@*4> Euu+!yi𑭻wTd%]1^R2l-Z@ɕ^0 | +I1r|XF28pjx }*8SM\ft!I @T{{_/\tLS C\9Q U*Kk @%<)!n#%ȼ4 *9iQ1g9Vhv>|i>Bj,IY p% 3!vnzֶաmZ ɦ$4+I=eI/|!T(| =IR!j(!СWFU-᱋^V o> R`*QĻ+d4- a::t^;w'lRdجf w0$QaH¯6s2ବelzf<%2މ24C:N JQD^߀]s@PR@RB;k9R/&^`*W+q+/%ܪ q}34gqCIܠl\4EzjM W LW(5fgݐ$ڃ "d/W7bJr߰2%z K+IJ<Ш9C;FNiMJRHRjM~Ze0=B)1PBY~sA:jUHo)֬w~ W7f<X-[,g!JT.["{%"OJPk0⏀c'zI ywU[OΗʏ!#(KRHLHR(A1s@" BJp@^iKRa˧k7G"6 33 %P8i T=%#&+oC I0r⯌R ߆^YJl.|fܱpLL/AQI =o9C )peW4]Urj^\݈iIRt/ɩj*%#3gm6E/p0$Ip*N|ȳ.>S)Sfah) 'JR%) ?#@rZxuKhK෠Wr�1KJ6u L4̱NXEs#'W*A!IeT<0Kzp%rjQ^$OSI vB@%JJ4 >qA|Nv?o4xERV1Mjln #VQ[C=n!`FN ('NPkz|FVJ6"JD)!.U>kH(,bCRB_4`|g߳·W˵ FLg.HX'W; Ǜ`}?Cs!0$ f5JSt*yV$R6`K[X @dĕnl5 ~c+9}R7.=Msq,S πeWJLpZsc0D@SeTmz*ڟ'w.!,$;vǫ}b8ܣO`k7bJ cig{q#)X4%R|X-LL@8Q݆p�9C?9O^47&^"xodo_{?@*,7l׷J "z%8 j|Ǯ*^/;y4fw=JHnҍ+| 8#<WМ!` #'ʎfG5czLo{>Eacd=k$Г3₀+S0l4:NNl-ot|{/^ ()`r 2A.ef DI$p]3} pFQ<_@^xrb4V=H!1 ~Ur`}م#@J4xƪhtR!UQ;'^gCIlzUBB9WR%6% 92j|w[A;Iq)E1}`NGdT U; \5^p6] /Sc)S2 &)!gh #'~ʍ}QJTH-H5W=^*Y5Tʂq3=OS"a}C8j+7 0 5rA\5 #JBC8#4x .]i3^i :H-4 #`Y&w3Ti\2=^j3f+E2dDHrR>JRR>ݜ!PSjBz|>y?W1 swWB,:W ԗvHZ$m59J'HR(I!I]' C~N=)dz (Y_'S� sTbAA;|Y56M++dĬoXd<8iBlkI$˰VD $) ܸӿE~ fNғ昸+I!1aG̥" `+~DEK0 ~ 0 ^ na|L)]<יgip*+Ksj"`$uH2CJQH/HPr>0=޼a+Lˌcd(V=@QJRIuD}vͥ.ϱaX^ %%NZrFl-{`|C'MRHK48/$!!Uz%*!8LC 9 zן>׍)JR8fmz??+ݟX,f۪@\4$,E*-HJp)"Ωw[?_)߁iC"LR̲MlWr2N!C@9+%&f GIc`BrKR(IWם3bz<z\wLNJ;X()ꕨi0(_w\+"UC,sr|)_r..;J!BRJlvW`H4BGB}>yG4 ^Ms_TY[>2;މ2,C2ѷpR}:v%9./aXN4ܰEv>Z.>2 ΕsUFvwCq*-QȔi!4N#'B2|$JSMϜqyaL?D/,Q > o$DRW:z$:3 FFs>)'Tծ7|}HAa!% #%!lkW/J2_^Q{{FNZ�Zoat$)o>s 2;_JXX(jO%J3 F^,igLtN-Y`"ed쉒[ `JPXX^4Ƀ.|&w+B=ت9i|KR^ԚaxIv;!3=N¢ WWgc\5dO#Y�Es%od7(JJF4@bpٝcn@PJuOH)CJQ(ǿ dC)a�>EzԹ\dža}z%$%nXzٺGv 9޻C8 <ir~<6 3%#Bd2Rqaަ<0_It؍m (I5=G/ (w?X!gIh) 'JRz>O6xH*-HJpʮ.91y+t3ip6L.FJΠ4X42')I|hN y]\(As 넏./9Ŋ+ `7E9IRBǯ<wZ^yux`Qʨ 1SEq ficeߊ_lD8+x4x钧hɼC8l{Q04\L[�I oD@*.3xRDoo.h3$[fD5=>#~9R0_$$ӥ'90q7r 9q+JVB  )*ebP6r4x Lv!bJHN)!8q 3Da3G_p*N{GZCN ěɱ[t" mBe IQaR*͞ǪG8"Vn3=S4ܳ{|{~'y')4`L g!w`M+i ] \!P'8)M(G.-a_"Rr⚕pjdIĒOtL7x(EQIJ1W='sގJm/gE,>>5UmTbѨi0ܡ*y{ ]54kA2.<A4[%&]Ɔp$;|t:O9:`�"z݆Qb u'}(gNeKO*¹(2)؄֖P)FOVObY/L5Ӕw /I᝱$ŚXaP*QxEUvؕ3 Y4dɕ0UGv.=kIO" ɉ�_?Aʣl3Z@kI0^tYI1jU4`z<?9ɌWFJ QM_[Mbcc3=nu9 C^ ^1˼S|uk@ؖ}L{x ?^ʖ.ªһ:̫dDЦ ˛(;<C2:%R%-%' CTE\ yH @-f6T Ԛz<~z?-ELWHHUZ[2N;&ozv++k C)!*+dQX5(1ő]YsAH. Isi.CCoadDȂ!!]TM�3:h!9aHQ{g]SgIPqPK(>O >왋E@%R4ح7�ˮ70 \ % AqnHqak\#tM9CTNG:Q|c�֐}oYeAVb -BmNZjP L5mwr(Y6IF``'AW)a C$^k'Ƀ3b)Y}I :%#=na#pr\>G%h: 'f t hІ!Iw'rH<#“/A(E2dDHrRA!ʼn(%qbSݙxW p[a%Pv~i02;:zm$%N9)#'&-h,{i;w$C=b̬*~rM-y/v%)*IXSrp+N,iyɗMæ -s&Jΰ:IJLH 9qHPDMj+ "'JL`CJRH-T¡.wF֯k^$K`L;DX§ٹ4bz% _=M=U4 ]I9Rx6V 6 شqΨ$]th{DN4a(l`ӱQ=ea* W$w3O˦;*FI|͇W K2 ƹ4aÐz%PիuVKU6 7N`3hl,IITRBU !0xB:;tgrԉ "`rē1Il)H]7hNeT)J}Uu@^\;QyhLqޠЗ^cC=$)# ڑ%ĚSzBbU\ݘip]Z)EFJa %1z%j$-#r ΄%.hONbJA"F%9!I~ϒ'WnQ%IaV) BO§|C2:%Rx%%Pryw%LXd6n<2f4Ɂipn!z !8EI|C9C5I[Hs)f$)ѦOJnǟX$sO1ҹk$%{ Ci0gvuC9j0Ml*;]-WNմ¡T$kL;e@ L䄓<QJ!#3 HLbM2KE@9�Ą-GNNp]"ɐ$z2=vf3Kez|+`v2G+_%wF \��@�IDAT4r 0H }1nD玹 D{YJɉ"Mb E( J*lM) AQIJ[kOfTL{>Q!(u:I� V>iNCiٷ֦]*掓vLJLXwkS悀ֈ!7S! I@N PSl0وKE$B%)izj<R kH vCYy'*I\QM/\l-?xm|҅s#JW[58ٛw<ՠٴ31Y`omIBNi3bҢLMFzzzjME?<%zY~K;IK4슐S88y7MWH$jc@b4>_z凤H*)qC8HIzl3ݚ|IK@!\䤾qv,0uJQ?|F_يЪǃ(:㕢P§n:k}zcgWi0&w@UthiÙ_u}=f!$$?9n*bF1vҌh㗟=-/?S>0[?8WJ&JKđEٷ9yg둶U4<%}%s[1_F͟*0 p*JKX?L 19 0ǜ!$?9QEY66ܥeGG$*IRMJ^}a܇z=AN鱋-6+wz%6Ic4k‰H)x3m1wL^|)KgG"<ކpA~]@[ɏ@7?l(*. fҔh'1L__**dũ<�::o&9^u,.vظIJDJ(E9simp;gw= O?1@UrR 3 dPh^pCNIlUtm%ŶѤ( I!6=ދUgɬŷɲJԾo@> kURs)N%N7xIIDSSοU<6v`,&JJǬ2q9gd͐P9!DIԂ(EN4ib@}lUnv*tQcLqJRx'(JRT$u$%:|Cbk/_.Y/~7óNSo^IxL iIiV %WȒ8+)!P[x49C D2{"{G."LWO5=>c?<-n|O`zD GI&8ACC=,FJT3R:+-y珼Ur`\~W%V 'Bdʮ$ NSl�3cH%''H}"cuDr dt`C= 84Gaz#Ir׃d<)"(JRT,б-,c< vQ+0 ~rp6\M+ꕐ4) `!GKN!ȨSv,J48l.0Cp14g''|tw^hRd9O@rBahkO;13W2j<LsB Ua^+! |WIN\>uQ>Yi0DK2z47tnd1 m<\@ K[{d4"'p%笉e`%'Q"xcUyVӋdV=v ,+JNX{x']&Nɉ+x4[rbؘi0JzSlB)(i4JK|\)xyj)j)HN +<H(V�M*-ݹzĘx3 epqȐLi\)<VzL9_ %6t`\In3mǁ3pB$۶$']tQT ٔI4ERB@>U7[̊l7Î(DП:pJj[6lܵ@):84 Z5 Z ^ Pv�iMd9j&*#úu\HmrBX~T_K1`+I!A%)U.8Cazǝ:2OT5ykFJ#8ٰip/+;K'(!DdDC6ݱIԒ%CäE7Mn W%R}Ƨ4r9,p\[ޓv09fxfCǿzl\KeƲ2)(NPar~<S $tʮUL%a3/tUV8عH)$n.JD0'D]r:2p4Ǽ4FNb*6 MnRo. iQ) CԚ;T%/̑=\''^I=X5z%Hn!.AFeZ%&,!FsAB%IX*Hr&zNHPRƽ3r*RoILXX oE өt`.`Q I 5JTg)!5 y6 SFϽ]`LOj9&~8I�31CHwyYs8P{6rr¯N}Ft7oaHA}JE8d-F  * C%l\LHs*rY'-+WWtE%Igk'6#ΌdMN7nמe~.DhxISsb4.&XhkP)SK`@$"}sd`i9Jɠq9D^QHN"$&0l#0J035CIs: 0Kfcɲ|в�vZqϤ7؟D#e>ˉ IJ <S(cV$(C2aNRĄE_ѮaO @D@җ`e},2:ͭ4CSʮu;51KFױFm|XTCdu33<h.09a\�?Pc]e.aQRdDCl. h7$$%!ҮrJ\h/Wr`9i tBG fv`gg>v7sz Ċʀy\SֳRrB�h鰯+|u$YJUw'I6|oJ 0仌@Wgݷ xZ;`Xdɥ?s [y\p`c U/_.*Dʐ3TAsv;PӒʕȁuM~r ɟKA%%*-Ą:ekt-iP7J+tE5*Vu\HI.WZIf3o( B`.bE,V<F ΐa"oW:.Unw8K&$%./)[ IqaNJKIKmK0 s+:rRȉVx\xǯ3s#'--8Z4LL`#zO�ɹS7hFc5rDx_ X&.su]1a"NClwD<jnX)IJtJ�JK8sO$_N^B\#9QPǹh#%&q+!PZ5r2BwEyg؀G, &]΁9qR4\e0tl$&n?<H6nY{oDd- YQ"*pr\GW '1q:'3N۲6J[ tNZ iǪI: %Y,,\p4:.rk? m^&.p|-^l0�W \VJ¡^ %$%sRd!V ,yE3KjPy'*߫APϺ͵#'-.T[s,cP].ac1e9̘׻ 'Q1s Gy<14$%¡^.!\|)?K,'�B,E!) 8ύ"`䤵Z9l-~?8O!Ĝ4ھarH! pOuNA6i ,/v{c"\I p8<)8QJ -X_zc ##MUI6FNⅤ='vb!.lH4/Ru`裐P݃6v6¥ݷ慹 !U]1i0pBC8Yم2nY5VrIJIWW)A m0r' 1C_B%;C<< =D!X$%mvI l?>\Ut �w6ɏH+48O.[ 3%SԪᬇ4ꔌh-+FN =�j藖Ak;:)08v\>JWZq78L|vw Xi$(V+Q+ha0 .X(r'0aJK`:EM PC� [xCN0L"NBc@hكyv\Èǹx4.b.@PAb$4xcp02˽D?TB/@ 9)FN;G@EC)aG}L YN@rPZըn~aG+q )2XYi( #1 ΂i OBt\=()ah0rnPۋR6x 96z!= VPωcG$ Q!Zq7)xݚ($%k4xt,)]0Wun0t x|#'틷-##> mkI(OaS,9Yσk]d(߁u$5P g` B RxL t8<i #%w eyn% #'BޛN&QG992˙(;6jzԂK<7;sABd9k'Y}`|R~G4d!ҙ$CFNFV}%Jgz HPOD:~ROQj #%)${,}o<nB)Y"9<ҨS209I(rC�uc PM\D^9!L7?J!lyۄ%?AJ fꕨN]ಊE0 ΖVpױ8*'#' �{!A&Ho:c|$ ,٘eHSYfҦ%"=AvfD%wUʰ)EwpHb7$%|ˇJHXdR#~wFNCB hc -19r�Ba: a?Sᇁ#>L ̤!X<<HU!gM”!`ܢ=GJP@04[6k,b)�ԆU5=Sf\IѡczlzlIul}EK�KP#C8(X5x̝3bCC2'-1R$9IlH ^BRߙcH'}0? (Oce6`gn`Bj#&T O$%U=K<I\!&O!I<`cې#i MЪ,MщwgL ҔfrDgƒPZB+rJJř6rXB$DR@ 0;w}9`}$ 6QYEP9kW9mVLꧺ~Cu߉#G٨!Ą%XR�#sEI涝<`N8V34(sL=G1>>(hL=rL'ăn5?$�"P \%%`|tJh*&*k"Wp/t>&bcuQ(9ɨ*@]m= =) kۦv-ӿzђ~4dlP`4WBb 5]z A/#{s ]<yٕ4Y?(9 fT qڒ.mq~e΂G cDT3<1oT^2CM xRY)=w`Z%%C;,%׍ !|g5$MP"$`LeP|z|s5dܶT0$`ˉo*|d2_=fq&pCTQıFSz a]ӫnxg1Q[B-QkB\H oxKLL gH  VUē8*":;_>;OpS=CW1 (H)Tz| PpoA'v"5Qx҄<e)uXkɇ i+ /9!gV[mnLX2"Č@+<_+F}p1"> `8z܁Zj9w.O*`a1|L12@`U+f),G;D=b=b`MǛș`3<q{�)AIIQJZ %VH5iؐwQYĒsn[1ߺTbF`4% 2_y@ QP"5͓`.'! ځmݝxhFVDH5ۛ;IJ8" n:Aǔ T|{Ji޼ڨy+Zb[nNMm9>YvYz9D',.&C[O|'gOpsHgG9e68x\y|@$A͛bx$\k QS6aِ G`NMFϼގ]H 0pa^rBJ&+9Ḫj}Lcq<$o8ޮL$)my4S6Iq=̦+kINLjamI\3HiE+a1Hʙt@Rh桹ڥ!)냌235e +=ӥ& dzzY|5BZ`+M2j49I8eZ*@<TLl w�2 my&.yԓ-\uć�?I<1a9tf�>yxh{PAX!2;B; a3$,2$'FSkt7mW%MN%!E$$']̈́I<f,/4DIJxO%X7 "&îR:Se#SeȨVD#A:;FEqlhiЄW$bUO0}rbs3 C;I9 =[Sl5a�aH#]YEHF1!9Ē Ĝٲ#HP^H$%]$}?(4C)+�)M*@h7yc< Oɀ9l#7o&KRHo&ܐb̭<C\W,ap+w2n|d 'H0Cs:2n/!F]a]񏤄 III%ԜЬs9\|zhMػPcB3NWSBYKHDI `RqC Vr;t9ԁPǮryʪ_!79@KN,AQLX Kf85yȸK 3dќ|]oLBKߵ7ރ1ޜ&e칆Z(11 shoє`i%$)LrrF0/IJHN:I߱7@[2Mz*mi}1!ṍ&U2Yh 7q=S%ڀdTvm,ܸ_&sz^ss'Q95($&LRKE58Ic5'$%f63\Ű >WhR>W ߈#ɼ*EO )APCb4%\G"))9|Fv5W-܈ 8H3ĔIkҮ'BgNKǾCy$H%s\zoW9X QaFXeHrA1fyɻn?Jsi2eIզpԃQQC Y&kLiDnmřfOiڔK J|`3¡O %_ ʶ>kU`g/v{-&]707)-A.5�,2f҈p%KNX-g5IT}Y71~d_ϐ;-FN%'S^j�lSQdt<慤 oW_91dB%m05qiCID䄚p89fl)?]i)$%x˄ gALJmyMD2 9T2Ӗ!q_UJ$֔KVjQJ^ $yߎȃ_&7S0k ]Z- Kg"<$I,Zcjߓ؋N庒E%~CB$!m>c?k"7bLN iӘ4%$'Ж`E_ 0tdנƳo&z iD[Vʚz&ZyƕEH;e&Macm'L07kf KQ"~H9:$żϧ*ݮ3(i*Y0'IIڪ|wiFoaGhWNQ: lhlMRb#qjVU2~nU@x$ttN9f/E%)4ȜWwC_&>;^j$Z֤X£Y K57<*@#@B~w?Y %<#_vژK>!|) v>Y_>HJlh0)VೋV桃Em |-4&2dĴ)mH+hL+)ASR MS1 QsRLcKBHJ2 km+%+4z.],W~yV6 3΁oEa)$(�a";`@! ,[K)ɓׇ%7XQ^꩏9 $#Æ=u?]șۚpIGK$h ce5toHPHJ(VCss]%;0͋k &73ZO695g- iS";6C'{<T}sG˧Eaڲ`M*@&#~>)³='"t ŗch4' o>T6rg0>*IC=,ooBoϕ}7 7IIy'a`hpåS_19 GQ,A�$Kl@Rr"'%)$($)ԢPXb>?IFq{ =8*ُ�M1ȿLLly|.PvOY;zr u;zUV gIIsdl~C\/W& zjp3lvjKV@r}Eaį79l"Q U5P&gc7SK a[-*@&!6'ru|&9lwhC[Wz?.]CŒ\jGlM:C�=n |-2b}X[iRi\5#9U{VCbT)S$ʮ044J䒔jQlq((_|`|irk@xR%)�A%3Nj ,a9 = IԖۉHXN./Ζ#7M8$%H2p:,g͐~J %`%NW3X្?tYhbRbQM%9upIQ=>SϦUŲin�fƖԤ=`M*@#M4 \A%4(~"4h豷?1  &)9H [_xS[Q%*C' WH=VU�!%HݿdEjAaI ~{HY2 4Ɯ@$(XY=VUtE[rL|Vv- H)8̖/SK HJle[8ԖЄSy._-k1&4xj;3BgI M8Sկĵ)k#:}8I�t!'Bx4$izazf cd ̩I!Aa XUQ xy=lѧ?\1M!ImA2¾+Th05%}9rj]a73&)~jBԦJݤȡ!#ChoՐ~Tіo9nC $XM?z$B' [- o$*LN*@:!MWt=ۄdq\#8LV%q8^Kgh0DjX3ri<Y:~%H`7f'$$&$m )$F*ك�gu儮yF5וƧ z&ݲņd:z9EWu`QX>w�A%]f3:nsp(2osIL߄$$%XgWtʋe^^>:D"nJs8$fFS/5J!e;9!z1/=jRR,\$0]&7RA`#JZ>|+g"Jqr6 C{2{ ǥ?I †Īw©ÀŚpxW5<jwKmf$%69o8CLpVUT! bc)Ԅ9P,B wשEQbqe HQZf\5?J_<%OsF܍N3413"a9_;pԖ͂bC;IC3]4�&dXbZ&%%"db$'4jPRcٱXv'|V4{T/&rWNr£H 6(�onҍ۷pͦc 6$&$#a.:/g/o,GYMZtqΐaw 7KVS$yHN4pԆ=^V,^~jLWh$MbAbI%*$)|ke"履cUEHG:9Agk:Ȫ0"C1GRl„UV\W˺_AFӄC;Vs1twOS'K!F,!K]�#ᗁg*9ȣ%4$+iSXT/⬬p1|u{`4rGqjRHPX=VU@5/ٹ& 䎦[Cq:ClP֬sb\9 .Q =zo]u@|*o2;<A:f)ۊz|?i2fB[- `'IOE pEfosX)ҿEP3ͦTT"9 L3u rӯ$Dhp™ұ�Ё_I=HJrbG .IG3z2j\s8 DdT /ĄuGۀ:CAPHTHIXCL*4"˥ ^*[_GBLh0/B3)if drV80 /te='z<B@pZv>*@ oa" 0"c"wD{)ENSJeCŒ.#Wm,K;WʎFСC<n6 VYN~$v.336{%ɉm-HVbQLV"&_ e;Oϔw}'NB3,1Tx_BN.C5P"2fP2[Aӄc#pQ8F-ʩdsԖ04/VI Dh~7=R1!pF -LNl9 sRڡ;7F'7vH>$R[ .VXoz8ǵ\IOOnyV< Ƃ~%Bϟ,,oDO#YV_ v>|5QSbyI?s^VU+~(.)59!q/I-pȂ˒ѯ̐iI^zҚ!a�U!PEU<~\&]eؙw.B¨bZK$?&`l\Q%|,/תP)cat!=تԔpv.21>l[CJx]|9bɈ]ppT&eDS0[z|??+/X-}yLg =&´SJU3K=/S%i+dx͉;݂e3M1DdaC u{eC{%gM>cKn57hKFxndlO<9`qk\#'ӍunٿH~C2izQ=L;/ !iΒ'A;�  >;?.;N̅)Q$EHNBӷY|d̬i2��!|CbDIIPfO6vJ$Z IiT)F(L$|x ;KZ 9im<eR1Z8ZцN"Dmǭ`=/YVB\ ]_orE98glNg"$/+ &1j{'J'~%ք %(U FmL7W4/'QUurBc_=~km!!=5YY0L\ByU=*k$} u. ƺwGDKig2\hpJ!*<)+8HG@bH Jonjp>BM VT[bȮeLeIP͝Q|;KL͕&FY- QE)>"K.36]FL/-{ڴ$a^Uv#tIo q#p" 9U �r ُo8B~sHvǣE/sDs֯Kl%T >,^#W-!)iP|o\>NJpT@[ub1� )j3C*PrR  Ʌ5Mvd['ɔ?*5N(;d7>»Ŷ66e{,/җi-SQ$~DV82ӽEMMOռ<Ά3#mFJha?Q*{Y {ÄqLw 4κ\ dyO͙hxMXQr⎧KvKxǫz\9c ѣސ?BU(Ԝ4]:I+l;nWd V<(zI͑E߅}u!d>vs 敨Gٵ6 $*Vٳ�xJ,IJHX 4`Dz9_f?@N3<137֊K]�ڙMXeqLD6zL,t82K6 ngB$Ƅf.P(S%}`blն_cℾ^|,?~(0ݤ)6xv%q?ԡ%x}#(8]Y)h\PE>e Ǐn2Sw8EKh*R}9R7 hOy%(�~%=FD 3&4wIJB ٨ mŋ@אwrBEɉ78y[Uɐ4[dԖؔjh|$U3|1'lp4 4$]N3ye\y ™xРLۗ2gdq `M@=ؗ1?LN\}!ѷM&Q,&׍*í G!AQ>C]]¯HItװ$ZjIyqI^K,TyҺ7o&wtyXN"g@1ù%]@bv]ETl&E"|COKJc4hUF͸K3Q:l*-|Ʋ=g4%89T�i>IA)$XDFSRe@@y<4^$Vjܲ莮�βG>.#竓O=gzSi^Ol~!62hM2s %%N6&bII}@"%)9 .ͬ`d5eyƎȦ@V8zRH@3AX}$3/D:Bb,ronT١90ytB&{D%n"<q(ي�ɉ4jTpr]xI'Eg։,ta"~6=om9%I$/Ҟ;˃zli@Z#S#:~%Rs(F%0WI8M}#QQ(b&rةZ_]FY8{}1*!sz>WݽԘLXm!SYUo'�$9+8-Bbxo'<_n`<&e# k ;H% 1 2R:=y2 @rU.]+ tNy˫ '3K>4 WS0&@�"Q53gCNHLebS 3f9X ?iONx+ᝢ d}Ie@E993=BC}l(q=w՗I<4Df4AĄҡv/g"WEv$4[I>INHTIio $&t~mo (Hs}5".pq`dkgٝ^'/dmAՂJϓEQC]$)G~'{Kp M<ԚZf '9FS $ mD!>n*"t|Z4o'σzSDSg >6L`IQ0PBSIhÅߊe ^َ-UWrULwisFe#_?VEyT,<1ͶIlSsHX9U2jk*9WdmD~q}h$hsweX3EADvǕݍo(PF퍢[I^%dE u"O[Q׾1#R5Я]p"鉍r2u^NRr͠E'O0Fz748اR~:ܻ }C',w<N_56*�#L1vLJPrR乎sEM3aVO0or6z=DKY~#h)-Hg&xxر(UoHJuA*"BCtѕBRMs j)m?1c%g]Z_)?<Ƽ#Tձ(9N9E;4_KU\kdvz Ʊ9? ̬4)E]8vxu㽼(�i)הOԮx/E i,:آp&ܿȫ<s9cEiE|q$s/%k$[X/mߐI��>%IDATw8G{I�A̵^}MXoM{/grGy5g.!�fBmp2ѕdD3i%s%^N!L.#}ݏx6{͙|%<--0^a&~1S}%'zi/WI3?#kp)m0ouκowߗwvJG!QNVA%'n6E |+)1sɢ d! ;"lcyҚ`%s`/ܓ8d%*9Ӫg.wa\7M7,tA0ړpv~;?ŋ0tx}mSk% /JY"$Z4" F*_ C:l`!;~Aa4p5/rӲԽљ4Qv0Ƒ̐캴\%'z)E`Oя}5{`0C1u{sdZp*t^ŚNQ߷6׃\̺7=h! FNjU %'Y՜z10}:Gp.DNVz:0 /_=xމL*B W944_ @~ G&jxC@p\@RXƴ3CLU(CC?'MsUT<E]ِ"_[{B\\`r4B4V%Q$QHj9@X~<Z֯k.~\[}[X\UAX20afPݵQ#$j�E M{ArTWm&Y[F5=jM"&TK4>'@={ϏCW$o h{-×{W/n}]{nKŖQUs&T7h{44{!$K\_ۋa"(:b$w\omn[u"-d!0?FM85dMSd:ֽj1؋u˶[F M~;:7-7njס)#?-2J v?5m_>=kma|ѹ)47bAmv3 Â=̧z/ZͩOS$x8(p) 5 f!|gog\y.}&7Vg R4gB[} @b:B4h@b -JNP P}0-_I<î_M8UrgW~%I8a[RrjǫHl~ הT1{曤$*q!#i53̝+yD >.;|,kG[-= JJ€fV$&TY =4[M>R L퉒  IfPBC3ώ '#Ν_*S% g&VMI MZAl+') e%Xlʑ*GMx7eg_t0퉒Omvp֙aL;, ?=o}9u.#=E*CJ))!''F7RQ-mkre cPE@H'8牛|7$DD-:ߡ?BOMU#uᔐ\O5& 4iJhL1HNL)4̑ 됛SHJVP=D!JN�K*�P8KHpaَ=v )Ms*D�7:z$+m>hKB e9ןϟ:/{_,\4RwJRi&$',1.Qr|z"PpȷԞP|d!j:f�ʼgQ !)cjIo"Ke[m VHLzAHma9t)?{GD:D3%3a1_p@ed߄i'^r~ X$>l #) pc{"kH" Fm Ȥє`i%ԞP{b~rj+' 1zHH4㐔ĐcDɉEB@ `q ;>BN+n)8z4zUͶ= pү}kvbSx0Wۋ |3W-\4PSX?jK,)Ֆ`5$xji@Qd -q< }M :6*x9hA?M6t`m|cڒ{Uϡ5R քc-De9<olBAMuv_E$zl%܄2눒:E x&sF cDW@e]=L%V/EwŚ;4lI=pY]HJdĘt.W[egKٱmM8$%|-'\"č@~+a8:sUA%n$aȩdHFTI{_ %VS|Il)\&2$3 BJp# lqTd#�DB$ڏ}mKGHTCTËDÈCq37r<SIk_qvE{ rEVh+I+ >}"fG"MO;#܍0VmI9Y7aUCm�yі`ZJ?_z<TT 'B$Z4"dnj_+BbNo<;�11?,ttfbI</2O5piCOn9 ;^AhmIIG h@hHHĐg=ޗnhP^r;ynt� y H `M8)1Q8 "vKNl}.4&PϔGh@BNkJHѴq;ЇP]BAӽO%l 4lM|ݜ0X!%`^Q8J+pIIBv%'"$#02ioDI| A"ME݃(a Bwa9FcgmO1 |* H^kcn,)2\hM6=\8yIJHSsG%JNK3+E_q{�.,1a=ۗ?ӷ,1jq;]I[&~ЍhJPAIjKĚo8_ KA|5U؄i-JNEL+ID}P3 Op P[#ArړnlYuw�ol<v + 3q 1  7CT&~E*mB FE@HzqvU8Oﳇk(B|4|[a:<U ) 9xF'?4kte]n)Y͔ fuf,!a .T~K9gE,/"},#q | HRyKGpp}KO.z:^B_ d-F9p{=#jG'tIp80H-}5]y&;|A&'rV0q$~;+$' "PԬGZKdkC25*}CD �, )r{L_|蓐7IXd kA-#ք7�-4<9{#3tz"x8RnX;/Ka tk x;E0QKZ"=޺>[7l~Uli|[5Hk1$ %ԎPK0`B%2K?1Yv#@*@bDg{fpP::E utb7reqL䟃‡i|8iO7|{M=S|zLMw/Dw;hoB <?lLJ *�II@[fmXjgޓӇpTƅGJNEL+i0Q3T'Lno}o#, nX<#7f"jSӠY@Tc 3 .dͥfÅ;4&xl ɉ >{W.6 $)jp@:FXW<"0I_ج]ykhb/;zܰeTɐ4 MK˺R>%ѕ8JO]@~@L>քCZN xp0hgi,)"z6wnGcl$rK{o3)rp|kS: jJ#Z`KJLhy_hܧ~(gѶh@|T$`pjLoa~Oq3=٩f2}vm?&2u[#!3r$%L֧|jP~|P>oMhpU9ZΚh[[}NEL+i�5p>,_WL٣Ƅ+dm›D&l$NCaL⯯j$l'ވLԘ8]Wr r3rHZ4ۜE~%0$'g5ڮFE -d_rNFz'~Gt䷇D^=HB ˾;E~2<tݣD�o;k PsdGOd>&XϪ`\OT$*4"KO*9_SD;U}|mkۋ1 GrY"1Խl%x4\e7d~zҺXRbL8Ԓ фSoTK"k{X syޓyqKKE(7 d!䙑"NY_ =N|+{OD HQ*!1ik.{dyMr4& %uB̎rlUN{џQIi~E c{=G>޻F1ikʜt ]|rȍm:"|q榿!QhEMo9Ku`:#1H Θr*?sQPB=z+%kTU*@|31la)?+rm~O _޺}/^w%Q1~/=uYcۆ!Qne&EnqƯ2+1q&-673H 8"*/^%kds($nJRk$o NؑTɯyN-FNY O%&.R !Jhװƒcd4UԼAdepKcGSȮȉMۑے86 ݃JdUs[¹"]`%W8,&L#"iH90^ 9pGm,:.,lkg{Z>iJL|)A -4}g' Ecx\c9dS)͛_&X * u3DnďE9. Ҹ|;)d+ 'E c[ rzL�65JjI$!!QX\!ɦjJN!ѭNxrG0b₀Pt"v*\ɔK+l[90QsBrciO52kmɶ;B�K]97Styd]]#�ېm%Z bm$+thVl)+`m=�rų (!H.}aҭ$s+� S%ȃ)iM8&lo&@>/2e r+hG;Z ~Vߍw+1q`lKSk¹^7͕S7^j0-«g1|}\2{d_͔acH>RAb($%OmISpnx>F˃"?I+t_:_R ƖULOsb؈;vr?7?>]釀ՔH nlМp]},.E%)S[u\&pTQcG8|dB#i٦jHC %)\:KO7 qĘ>K~k>^s&u xߌ1slv7g`qr3Ű=Rp-)}Y!f2ሚ~Ċ2Sו=/6pHG_bgv勋J4hѼ"�LW64TeXo't6I0Ao3xaBnÀeo 2nJ"StIXoXˑǼqPuL/<Qw"/a9%?T$&ER"r?96 ۗ27B*�$|IJLkCHЀ\RkB ^d߻ڕ8O"5&6<ҝJ4(c4"!T$BRr㤱[I!a.i`N&?{ec=ne=!wx pD>3[A]$K$$8GAg?'O[Jz#`4%5ḅWa->zd5rCW˄StvUR%TUE 68jNKvR],!m!,CǶGq>$/,HA 9pdP0:pz^3g"Y#Hω[F4a6X6 G +AnTN"<| 9`l}~1BU iV |h*ts$jQ!8MJ}䑯ΐ{'o($ %*΄<"knzB{a"00"10V͜޳YapjO�ۄPԞT]Uv<WEnXRIJPr0( E g$)MJ#ݤ!g-\'}`{sv{L- Em?�!}7Adp~ΖHr55%rEI`b8l- ~p�TWu&`N(ΑHaz6 &d(E×R|HV.NKiLZbP#.>;-hαB׎=fdo &9'PVC9qpr_H=uDL (_8"Gp94Gh7Ț!#I 0/fn# *n.\D/Z4՚L=Ԥ|+Se&ʠM%,1t0Q%ƿiXIڀV@n&A87JSI"ڄ/Dy"K.[v+4'jNX}CJ#` LufwFRQqU ?\%?W.L8%X /քJ2PrLtlE�3 P}B]!˭z4+8L=`{<{X[6ڙ @4ئX$JI/&W̥@<b'.)lmqJN idCA3~%W얃rf ~%EHHhP'Ѷ8VUd#+5X"x7ʧ&c'vn}|G[tѢTYS]ƺi)yiHf.Ba~ᅜ \ߋqCĊќ sV8@rpT?J\C&NJdϛB|5wM|-[7z\GϜ%)h,  u;d|� I'Iy'ahƧ`}aրxψR_g=⑻[{.VK8T)9 „61+$~\@SήԖN``6$mB+cXGzܾs?yirdȈ/]dR= E/xk#Ԧd:Xk�y7J:6=.|c?^<o|dp(;q<1NI<�&Xux]v2GQ4YRBp_ 'KVI!LO|? caE!I? ,p8b<= BZ?IߋVl \o]@WBͲܗ4|}ҙ?!r. 'D*rpB:"_@Nn؆ˢ_i$ N6[EPR�Ш !`"ݠvoѕʾmEo -#>F:v1Aۑz7"#Ayˁ1liWj \6B5+a)d\D kȍɔT2)>=Ưuv`O_=/G $KJH/ 9oS&4A@I4V#p>8呤p/E)FZ+}z/~wAʃ P?DSìe BO}MBmK'}%zړw41jO~[9GLC-4|IKggkhp**1TrE qɷ9p$ɚLTĩd�BQAKD٬#WЌ=cWe4* ?}FXt8yb#�<6t(bL{:ƪRI$#l㰡yvArz-~%IVLZ"?|>K(W'ud-uBG?a'O^=D8 (k' =έisl8Y=pw/|N8~$ǝ"?DlqI0~MPV % P_ÍUVP,;<WCCyUsym50H RdD=3h3/NG|iu~'97,? �9RYjֽ _~C俆>n5�J `40$ܼwBv[#Ֆ$g S**�TE `_CSϔb*ZǏ!珧p78H~!$#KGp\RI8f?DW8f0)1N ^N2pE܋e+`'@ljpTgLf%'TZQE g֚z%©A=C .7y]$"ԚX`- DžY"ػχ!^|rk"E/%we):Ľ!؄cC+qQcB(g폳~58nӸ�%'i8Z5E |vEalI m"1`Ƒ2eDy mC7l0XeIahn}W|  {\٩(5!eЄЁףЙĽ2+9S")1jppVO=-o-GN ihp5RHIcgT�_KR:Z_=.|m2dlciE H$y$Qs (O]1*d*q WWNYce@Ԭ"s_Jo._+TUJ(6W»ڔJ#$P�>4Xz01PE Yfm=n�_xLnn$vsƋLsO=a62Gj1MrJNa`qNn> ^zO؍Xm ʐʑf[S%`g(2F0b\J˪EpiҴjRZË.Y]b5r|7)xߋ=JHdQG�XQ<|v{./~%v5\J�v|HJޕ ~K[ �1Pc^SN*ـlhEE6쬩`$r9r,9{hKZme]bI YBe Bػ j|\y(.q%'4D 1_ grEJ@NtdYhFLRb05& ĄN~dJNEzcSoQYb\\Z*:40G`R�hOj mazatP4~%DH"%'('`3<-wtvY`2uM92SCm:)`Ւ&ҋS2 >"?2.BڨDv;<8ilU"Uz(1"OvP\;f^+!֢Qe`$!&4xQ9`ԜD5%5̚ijG:C>f̏2UFߌȊCHDHP,IᒤIR3^({L==Dt#l3Rrd) p:(sˮ7@JRBk݆̦bn2a(9ɰ*q ݒsY9Ǎu1iz%57FB2(9qCO�[h@Cݡԭ7)APrLVPLR.׮ˎ e=rz:I1.&t<[-}O[n\D h̥8}K.v}6U?yIXUrHԚP_VD(jKx:QO\B".$FBˊKeՇ0Cm[J+̒OBbI]Z%KK֧}k%\\~k(VqLNj�Sb] Ж%gmh0'TG4480c7(44CT: uA&S$|q\CKiGBHm{Dj]$TOt w�]´ڭC,10+fy\jI_ ]˖80,Dϼ{)KEx+ "KwH/hADY,,MlA*g71V{Bじ,QNɞ"MXo0m\}5D`ekWJyJ,)z]MئPN� ]Qr;HRXBBR.Je}m}4nY۶Ppw*vgl_ķ^$N\18M8$!T?q" ʸdⶳCgsoʶgKeg)@:dJ쮼ϜH⧊"C@ɉ "� 9xXB#)gOsabi ̶i.%%Υ5|3)9S`5L+e9槯KiVNRBךՒ%&�Fz~qnUDR ҍСǟAnHspc 5XI _$NXoVF.4m\YqU >Z-w\.=-֯4PRT!agoi.E@:1i ;S*UU%IZ>Y2iP=8OkMZEEޞUs*.[3 F1\mxt|5xߍ_+Zj ;JNc9\EC8zI'>Ntj9̞(,YFy2Ҷ8Q8(,AgH _A[BBӍ] {%8gw\%)ֵ(Pr+ͩ:$(Ԡp!ͰFEHd,׏C1fio$IPXXr=CP`:ReŅKrh2T+4RBUEPh0C A!$|x[Y f|oEڴWY8pdI]bS"_ȧ<KNŘ:%:5e %Kp5.d+rhr>tGH7f*Y@ S/HP�R M85u² 7\Yrӝ}�lpԆ SD D�7S .>.G}plXh9o%Sb&P;-:Y=d[pF\2^-GT"7JNP P �Iiut3RW}Lv^:$XB ) wØXC^Z 3jd:9!)1׀$X- W}XvEMӯDMDh" 'PW4&?n c@iI դIʡI"\-ђ^%qlhNXo- }K_ HHh\~U -/͓K q;[W EP23 NB]+7~[$K_%~~cp? Q=PX{%&&ć`l)ڻ'tN9oL$ۗ$aUE@H4p N0rxLVOK&=0,zyIDOVQ  0 PGah:+Ai9+M8E ۲HŹ]cHf-[M*@Pr<ldE@!lj$)|ڔ,))|z`.FQD29VIwrY+WBRB'u.Tʞ?{ڒM8ʒro I%%+fE 9(9IZ" `JĈh9lHPjHʞ-rNr/m x5t-øI!گn0N4q.4GVnU?~%ˑ0$ *G@I@k fŒ8(>RqL6';M붜{f>897,JgGx%V҅8M84 &m|5r^\%ǑMurR^""{8=|rwOu=}a|$*/+h(e0LܰTd^:Z hspPYn+;Y&[(U`~LKeh@%)YvH:KF/Ou DZ1u/LЀ ?]` =ڋ"_)I*pxLbTZ@|_Vg pI ѧQT)RTQR@G9uғ+@n!~:jR8sVi ܺH>呧gFȀ؄CH4?B]~:Қ0Ir)4LQu|)عׯ d#@EPT#`|>ļz|ǻ(B@Ҫu%PKkYT,0Za/Z_ք$j0su}[JB 44ض.%'iDZAE Cj"x[ Xdsud!MNx>k1Ci¹XrYc،#E)fP_TQ%'Z E@A IQljR +ʊ )ݤm{_%'ٸ$($*!=q.4iBh KW a#H4!!q"5)))*�+E@P34bc(2ٸrߎ㆝1?J[iۡw$(šY9a1MCNQkvWrh ܛRya(D:�A%3PrVr R[BrBӄ<zV|MNJ㦘eus$!)qDdWb#p%ٕ%$(v[^@u)-rH֯4#;k*@"$}Fk(ʁBT.@R`SO#i]/IqҜ$%v`M Î.]O~^~Jՠ@xp�Jf"$3Mk*fœpSժ}!YlTWlŝXX4)D`CBp(_IOl܋)_sKU~T~%քcJdJN2"P�^NԠBˊKeB; nB$z!+a?rbM8nԚTD_¯-wR.l)@&Fᐔ0"(9ܶӚ+BrԄob|u/i|~'KIG D*Kd|~%44 d7JN}\@ P2HRnKt&;4>gP%%VrbI B+\z|}G@I^"+8I rpQkEZi#m0C՚7(J,Sh0@g_@*_I!jA_ $WZZSH( A 8rP)f!-4)3{F`b)vapXH !4XJ"{PrmW:c5)z,Үuwz셜<6,^N9o+_CU?xQNnX:F:�A%7PrW &XӠPRulpP6sBtCz&Za/j5'Qeٵ J9K|r>Ye t�Ghh01Tit+9�S;DV-%w zܦUB KN5#ScY\IHn?wjgߖ jp-<"�m(�I 6ldQh( wz\tZp,!BjN.49 9< M:*e%jtE %'n6E@fEa[0=?JeyKhPJ;|6K$(\%HMB~80_ *>V*""$N=8/?'cW68UQ'&4o>+7^s(93=BP z&v1z'zBLZ"b|H8el,9!1);Q&[ߜ+``Ο](q $PE@*dF8B㥳R�SwVI>�" XoWrrg-S_(9/<" 70xy^8||M'pށe^],ʃ#H+ѯgBkb2m*QE `H 7Cj[)>=Ym(B־!ѵHEP $ 8KPrp5Hmx"H~ێE.C"):k D"C@I8tt"(>,I)ܒ&LnbXZ.D%~txA@ɉ4"(>$.i؈:ԒXm (@4_����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/package.json����������������������������������������������0000664�0000000�0000000�00000005714�14467713645�0022655�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "name": "@rjsf/mui", "version": "5.12.1", "main": "./dist/index.js", "module": "./lib/index.js", "types": "./lib/index.d.ts", "description": "Material UI 5 theme, fields and widgets for react-jsonschema-form", "files": [ "dist", "lib", "src" ], "scripts": { "build:ts": "rimraf lib && tsc", "build:cjs": "esbuild ./src/index.ts --bundle --outfile=dist/index.js --sourcemap --packages=external --format=cjs", "build:esm": "esbuild ./src/index.ts --bundle --outfile=dist/mui.esm.js --sourcemap --packages=external --format=esm", "build:umd": "rollup dist/mui.esm.js --format=umd --file=dist/mui.umd.js --name=@rjsf/mui", "build": "rimraf dist && npm run build:ts && npm run build:cjs && npm run build:esm && npm run build:umd", "cs-check": "prettier -l \"{src,test}/**/*.ts?(x)\"", "cs-format": "prettier \"{src,test}/**/*.ts?(x)\" --write", "lint": "eslint src test", "precommit": "lint-staged", "test": "jest", "test:update": "jest --u" }, "lint-staged": { "{src,test}/**/*.ts?(x)": [ "eslint --fix", "prettier --write" ] }, "engines": { "node": ">=14" }, "peerDependencies": { "@emotion/react": "^11.7.0", "@emotion/styled": "^11.6.0", "@mui/icons-material": "^5.2.0", "@mui/material": "^5.2.2", "@rjsf/core": "^5.8.x", "@rjsf/utils": "^5.8.x", "react": ">=17" }, "devDependencies": { "@babel/core": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/preset-typescript": "^7.22.5", "@emotion/jest": "^11.11.0", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.14.3", "@mui/material": "^5.14.3", "@rjsf/core": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "@types/react": "^17.0.62", "@types/react-dom": "^17.0.20", "@types/react-test-renderer": "^17.0.2", "babel-jest": "^29.6.2", "esbuild": "^0.18.19", "eslint": "^8.46.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.6.1", "jest-watch-typeahead": "^2.2.2", "react": "^17.0.2", "react-dom": "^17.0.2", "react-test-renderer": "^17.0.2", "rimraf": "^5.0.1", "rollup": "^3.27.2", "typescript": "^4.9.5" }, "publishConfig": { "access": "public" }, "author": "Agustin N. R. Ramirez <agustin.ramirez@cybertec.at>", "contributors": [ "Lorenz Henk <lorenz.henk@cybertec.at>", "Heath Chiavettone <heath.chiavettone@freenome.com>" ], "keywords": [ "Material UI", "react-jsonschema-form", "jsonschema", "json-schema", "json", "schema", "form", "react", "material-ui 5", "mui", "rjsf-mui" ], "repository": { "type": "git", "url": "git+https://github.com/rjsf-team/react-jsonschema-form.git" }, "license": "Apache-2.0" } ����������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/screenshot.png��������������������������������������������0000664�0000000�0000000�00000507301�14467713645�0023251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������iW��PzTXtRaw profile type exif��xڭY8vE -fځsY9uMt�p__V˥6fs~>~Vy^|z"yj>|D__|;aȑk_'J=o3~N߹]8_.3R?Ǝ>u>Tk=~kOsoek{(ߋҏ3 k;w{F6G뢾]Ďpw[_\oY\t~Gߐ#p )xb=E{\$ x~ÍՑyZd.9~Kxv`w`89?D*!(+U_LC+{pbZ^|_D sS|q^u1va2TwB*1c#?ǔ$79 59o,x!%M.$+璍~kp%\JRK+ KY5ԨZZ[ur+z=׭zc0ȃs lqg6lϱ(WYjNpvm=N8ɧ;ϸM7rn{־s~g-|e-DiW\SIQX́Weʙo!)gR*Y%ge b{̛ܿ#4oOsJGRC~ǃ.$ dn]L h-_"Ύ_k-v;9syXjzbFcGSI͟0cj2VI:!e̜%l;A~r['I)Ls^Nj4\Zcl ՛q=gKfLఎy(F 曽i<cӀ"[cF\vO(7n*'URUJnĶ� ikCӺFםpZ_VbWi}+�*.%3ceP[Z =-jn 6'OL2нP*db?*]2j9n¬/)"q>~@j;qs`dKLkӀ|?ZA{'MDsX"Wqv뜖) V:pDҩ}#xSi�u+_ 32l=JM?MyTWF~ғ˘(ľ;UVMSզOLxT3UEj afO4\ПH۹[rjwZ_V4kJO`Um:ةSS*dtR ̺S:} S'{<HPZ;eҤ@^ɇkmOf2jlw<~I+5vS ;|s>b+)*]fPN'?C73H$|�-jM(WwC`1AA *YsDqC5#4Q^kMĢk>u el}y�{v dZ)\K1:QI \C|q @p $`8']5fcctEu84xlkn h lD�1 V/ǵl˹'m3c$@��q F{u{;z0CF$O A>XmS5v>'SF 0e ^7:,+^@ؐ�W z(.eJԪC@_(T 8J oEPqKm Krн8!AIV^bJbW:*J{u 奕 ̀ iz3QS)t*IAe2A=oe#G 1] 0leQ9L4Ͼebƽ9TF*7cUF69[ihho[xUt&dHRp3R-6wS-+bYO(EEKhDZ+p4B%R#ڌR{*BY(?iKPMP%H n{b >n1a�-1+s`5Uf`IpϑTԎWhv.۲А6 #,HIYKyw"n�]9Мp�>y8*6IF!JPȥ#8nwȹi db:sɸS=<J `˅ M1=!@:'GŴwr-э6)#4JG#nY.y\ V2Hu /WT$o`A-n(]F7r5ȂTȹh dY)G2h`joM.k!�e0(u Ve@z[W2}}L!#ҔUS+5PdvBU禴PJ.HS#R['];61O,`/Bmu4\kz +4fL/ JtL?4Њ${DXh|@$68'"Qe%1g͘;Pg�>BQ 8ȁTn^ѹUcCF,#ݖ]f |ժXRxcVA. +rkqOoo𱒍bC6s1HF~]<hLU*}7cU2K#{!np$"'E0|}3lv2( ^<!knIķEBd t?=) %50=E@;_΅o'-?*% :8$6|Odj](/!Dwu@>wH͸i)4Iay\ r\G <$]̨̠Rv +\ >.{{zge'Xx=gtf>ZلallN#CWQE1?ꜛX| :J УE`pϨkw1)Ut|d ϥ-ӝnj~}~O2K3,d '?23-N./& ,`˺IFgw@?4s:0b1 >Ze<;9{ (୸+­ude3-b"3a3`F YkMGte_|dD(%T?;7i#O  L'E_|& ./¯2 \OFP._Enaui~w48Sn-!-H> (~1h\ȓKڏD#o>W;ROIRKttAo#"ہ{ Cz=`#:)2EgDXW9&1)rEB];nBh`t$r 23AopZ=Itn&ɗ8鬨غ.My[]s1P\i}!N[wQyft[=8#kAw h'I0oXD:B#ȂoXeÅB#"КAm2VSK-H?#PPvTuZqo¦3蘸 3=BJ׎XqZC_#k.:;r;̗ (u\lg Ƒ~|[?gi༰2tT!4M5j}}mAˉ$k?Hټ9&7Cq}%)uCc^vܔoO-DLG,mG%gq5 O)Ag@g<RqI?br#,܋PO " `M4zAC-f{0T+BS7 |`:[8"q%xE^M,?IYSl5k T0vx[E!3fȚvk/xphN0$ ˡ ²Ô$V3;. ڢ2·y"I8Q dOliSVav{ RZXY8*éˡ\d�p�' 癐K8k_- 2F:6z2 ⲣKzi1N tWT^usLG!ÃA2Rˑ0W(IZi!<jYV?KKR<uhv312u<( (#EO˸ɌyJrp*LL^@{" ]%bH rUoQ$eDU_<c)O :&pfp9j--,W5i}Dip`z#7} ○zD^;" G%0M"\إF˾5@Kg`\e0Bz,&f@P Hho#3t: LMVFfe~]kdҲgXxn $'?Ktx:B览XW᭰‰yv36l*MN2`H q/C$g T~X'x2-gJQdt&1 qfMu0 t FUoơ7.q,ŎJȚ),E"YpZvdp.tXI5,D|km8/ a k]l'[f=�틼%ǥqom[J\ ${QsGD=݂#jߩ5\2BK ;YFwUm?"=t7jJ1gD05pTbKv Lwg4!nu&06${]Zp}M#cےl݊=SVѫ<)hJrtn7~i>v<,ϻݷ&oZoMҀETv䪍 " 1/ 2C>9:«s$l]l"I9'neEm: Q:ʃanh&-<1+2ǕO #V>Mnym4,GCRG-&^v*IDclK(F;/,-�АWow@6Ԧ3 W֪nPVFUy XNoIjAnLZTB.ͷVz~PG xHKY$(V\(0O|)ncXR ȝ5q@@TU. Raj S;И;[.h{[(k2�B;´d=HnXQ#+v^*&SzRִx F,E.RZkI(^?N!W]Hp,kǃ*B`&} Q3wV3ݱP7# WӼUe?Ơ07w "/7Vstc֊}T.UEKXG tbnCMVd{P9pI.o <{h$IŪTi).?ߓ(f2\ǻ^,8Zàj@! zw1=@r�6h#op;CWњ'!,PBK^A~ZօbK;/UbI{WQ00M I) Sl5kualQz:97iqb4h(Wd&GԺo%]4Wl|m+eMbY@Le>x}~̼6&}x >.8m'a-�<62vꑞӃcEo#A KZL]gz n0c.+ ^@n[O긟6 7e E0��iCCPICC profile��x}=H@_[;8dN-8jP! :\MGbYWWA�qssRtZxp܏ww�TcP5H%B&*_у~ L}N_.Ƴ9z�@<t" ޴taVsA$~~6ҩy0PhcYP#Q?yZ= C9me4G" B*J(BV)ڏ{H.\%0r,ݚ 7):_lcmv<WZ_3ZZ.[\�COdH3,0x t5q� pp({]{Pirz��FiTXtXML:com.adobe.xmp�����<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:iptcExt="http://iptc.org/std/Iptc4xmpExt/2008-02-29/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:plus="http://ns.useplus.org/ldf/xmp/1.0/" xmlns:GIMP="http://www.gimp.org/xmp/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:DocumentID="gimp:docid:gimp:af5b1904-9dc8-4b89-a606-517cd9ad3098" xmpMM:InstanceID="xmp.iid:30f76e89-f222-49a9-b2a4-f434dedb19ac" xmpMM:OriginalDocumentID="xmp.did:3deada41-5d11-4117-8643-c84f184c46eb" GIMP:API="2.0" GIMP:Platform="Mac OS" GIMP:TimeStamp="1637084868573393" GIMP:Version="2.10.12" dc:Format="image/png" exif:PixelXDimension="2442" exif:PixelYDimension="1834" xmp:CreatorTool="GIMP 2.10"> <iptcExt:LocationCreated> <rdf:Bag/> </iptcExt:LocationCreated> <iptcExt:LocationShown> <rdf:Bag/> </iptcExt:LocationShown> <iptcExt:ArtworkOrObject> <rdf:Bag/> </iptcExt:ArtworkOrObject> <iptcExt:RegistryId> <rdf:Bag/> </iptcExt:RegistryId> <xmpMM:History> <rdf:Seq> <rdf:li stEvt:action="saved" stEvt:changed="/" stEvt:instanceID="xmp.iid:63388f28-a9fe-4a65-b6c8-eea896114a4b" stEvt:softwareAgent="Gimp 2.10 (Mac OS)" stEvt:when="2021-11-16T09:47:48-08:00"/> </rdf:Seq> </xmpMM:History> <plus:ImageSupplier> <rdf:Seq/> </plus:ImageSupplier> <plus:ImageCreator> <rdf:Seq/> </plus:ImageCreator> <plus:CopyrightOwner> <rdf:Seq/> </plus:CopyrightOwner> <plus:Licensor> <rdf:Seq/> </plus:Licensor> <exif:UserComment> <rdf:Alt> <rdf:li xml:lang="x-default">Screenshot</rdf:li> </rdf:Alt> </exif:UserComment> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="w"?>����bKGD�L�I�I AL��� pHYs��%��%IR$���tIME /-@�� �IDATxwxU;M6{@! ʫJ^ 4!`᥃F:b@@&R- - ~ĬI ]3gfw5\.Q "bQKà8 Qà8"'"""""""FZ """""""'aPZ#"""""""9ňaO1""""""""jqSZ&'"""""""A1""""""""jq#"""""""A1""""""""jq#"""""""A1""""""""jq#"""""""A1""""""""jqDr@DDDDDDDD-HMM@DDDDDDDD- OQà8)FDDDDDDDD-sQÞbDDDDDDDDSߣv狈TSؿ̙3qYĉ1c VL3o"22Rzj 8ӌb޽~:RRR��3f &M """"""zYa:##CΝ;bHЌ<xK,QZtV AgܹsضmbO>  ӱb VѿbDD x!***0dH$hjj^0 |ǘ9sbYWWB$'' ~r^P ܜAedf۵kǀ ŊlD"xxx@OOO\qq1"##QPPJHRֶ)ɐ\ׇ-爊Baa!ʠ}}}899A*'_.#66999(**\..`kk H}&''#%%ŐJ011covv6bbbPXX---ںIC׊(Σ9LLL|Leeex PVVuuuQe;or#//�`dd+++4y_YYYCQQvvv022z󑞞DB,[RL1hhhM,%&&"''(//accTTe &mC&A"NNN:)??ͅ:&r9"##Rhkk*GFF"++ Q\w%"""" <%%%;wVX\k?#\\\iiiػw/كb}w ǏGn<TرcbbbT100 K/޾}`8|0ʔ+P,ƈ#0l0nZڧ~_�j/^/X^hzXaҥ8bɓU>?;wݻw~s!((wUY W^y*<zHpRǎCVVv؁2L.>#c ӧw^,3d[Qة)%%޽{QPP믿QFݽ簢ǎƍѣ1fXYY50l߾'OTzM$7ヒ6mڨ>++ #FÇQ\\͛7J۸@U0o?t455^7+W`׮]u/DqơXv-9ҨwÆ h׮L&Õ+WW| {x x:'N\.ѣGg MΝý{xbźb޼y| ֬ <Pz~;w_"88Xy7oV+5L&܇OOOÇ?#((Hl͠s ju6lfϞ]70}tEoD"|W۷oeߏ˗7>C9R2 Qx}3gٳg'NČ3ebbbF 7l{));w4jX~R��߿#G*~L<ر#֬Y}8p�K.mt=33gά 2eL4 b0o"22R~qĉz'}v|]&!((k׮m-X�FR n_~u}̙za899aĉJjMT"""0m44}'xtR8pQervv6/_7D__֭k?GU*9 6 lllٳZ]̙{ߤDDDDDB=*b5={ӧOoT@f`CU+22&Mjt@:p0{lD>T]UV5!yȑ#h?}2�w}1�HHHȑ#`ي ̞=Q{u޽[i>}N>ٳg7: �[l-[,g53g"??_6lht@ mPΛ7Pq Ā^|'+TL0I1�X|9nܸܮL<1'{g˗.7~2 V .4~s6* �u6%"""""jJN mmmaiid!>>Ă ЪU+!557n 9uڵk ݼy3***zwyfffDff&.\۷+d2=vfl{]|u"ś .`۶mr˖-CΝaoo#Gb�~ gΜQsuuŴim۶}'ɓJ &W^055Eqq1~zAH9sob]YY.] qrrŒ3`ooHl߾](--Ŝ9sgyeee��1/LMMcǎ) k3F1fii)KA}}}|Ghժ۷o/[n, (Iйsgnºumr֭իRʚ>r9°|rrrrp-[goٳaii DH,]TT[v йszPqcǡK}T\RDff&�7EEE8~8|GߝĨwF :t999u?~<JP.((~~~u 2DQ ]֊]>pvvӱ~9O?58<vǎfBBBMKK .3*++qm{?...GjJ*-^$A8::۔}XtRg…6شiOOOlذAh͚5x饗a8}`F¼y DM6)_|Y)((${Q www0ĸqCBBBՖJڵk({۶m h._K. ܹ3>SA֭[ ~"?SuӍGaĈ}ÇAG@UV^fff?`Çݻw+_7n܈={ yzzG:tPA1�۷/,Y"SL} cɒ%2o̙# ///̙3Gk8p@�?ƈ#mfÆ x7ʎ7f$ewuqEzFMJJBVVoO>Xj /?Qݎr*Zsrrƍj |΢"ݻgn1{g]R)8 (\5f74x1d~ G$˟ʎ;vm۶)bcc? -YDC6&Mԛ?P;--Mi_])SyjD SzxbX F>}j隋CU+** .]Yf){WejիUਫ I~ Cܹ32[of v�KU fRh6R@fa„ Jmƌ*{uE ,tdee }*'JG}tm{|>>>P[Vy :TiBXу̌ FY nnnRi;tҺu֩EWCC3fP 5j[o/Q1*ށ]vUVoR"""""z!a3fPv.)WWWɥDzev؁c�ڵk .kĊ ܾ}㎊,kjj fSeĉ$ Oeee5554󛫫`8Yfaĉh׮444+u'==])x2m4չD"ԩSfsss#o߾ƌTV;HT]̔^3gf͚~ RTiXnM8k(TbYMM eeeuN:�)V{CajfZ񹻻cǎr@U;ֹͰa PpvvvjhffV:Umf777ŋAay2 卺N444 |햗+>|8F$aܸqYcۛi7~&kϪz^{ IDDDDD܈r9t` ^^^*_x`ݫw{ddd ##PSSS9k]u%%%YYYHKMÏ~l^z;gʕ+oT٭[K.Ao>sܹsF~н{wXZZ**vcSNJ UWM1b3d2"00NNN߿?<==amm֭[y-̱T S&ggg8;;7tX{ e2Yז (vzí<SuYS]BpL;vLR۽{6<|W UU T\ mmmA/Ǩ(tڵm {{F 2�7:ETz՗:66V믿6ijiiiJQQQ~:\F A4wwf{jj `Jȑ#_bèQKbiiAOOO=77mT6֘;c DFF0::[nU,w>OvQ{ޓ`mc]^W Ԟd1=zT5{5DPjuS%11ׯ_ǥKܨ-uUvyuqq̾:4 T5{8=ahյתg{\5IIIXb0JUjejHҋwށ#֬Y:UTTɓ8y$뇥K*YWoڬCh2×_~Gbݺu0KOOڵk~z,ZH8vޤ.G* š5k)E"((}T}dkk+ J}CqJPaw(;;& 1PǫYooow)lllUnےHD"]t'O͛u2ߠ*'1ϯWWڽ|4xFFF;v,^u<|7nr(P5pѢE022RLP]yJJڵkר|]Kqq1Ν:t�777XXXv`n0@gXCׅMDDDDDDM#~ohnn.X۷/Ν/(=PN<Æ RډU_dז&8DRl Uqz+bxxxCEii)}Ν;Ɛ!CrTJJJA<5I222B׮]ѵkWBdd$BCC_+ ?\t)w 0C� N4ӧ9;fs*Fw}We.JiӦUc{=֦*VVVV'TJ+++~;=e<(֥K9sF'HmDjjj0?쫯 :/7|jwܹ{A۷۶mS,n??~~KiFѫ:׮]; 0�?3,Y"(_S7ЦMzAչnL/*%%eD"kll ccctC W_}G*^@bb"&BBBB/\O>D.]7_?oooA03**X~~`D"iCO>-Xn׮̙Sg>UT'{LCy@ppR%"""""=7w}A.U8(ٳ,!!AP^7!+W}m KJJfP)�֘ =iIII3f`eb1PՋv�lÆ j͛Riq;vlyLMM1j(UNUykl{Tb  X޸qcr9։'ō֞={֛ཡςD"Qr׮] &ֵjՊNDDDDDDO3yyy)[ ,|%X7|?@�5r)�L&S:>kk,- TرcЭݻ|`)::Z齟& :xҐjJ5eɂd/@U`/$iӦ5i6æODRM5{U5զMtEZ`` O:tR7xGJw۶m(**RYرcJ_{vҥK(//WYƍXfgy}U1bҺ A'7ɓJhj.8""""""jg>|RCCg|XÇcpuu6p|=FFF۷b[رcŠA`ggJ$''ԩSؽ{񤧧#22000&̙#VTT1c`ٲeD"ARR/nWpwwWzCvZtr*{#=)x7p!źӧOG|JAWz 777ܻwOL"5?(=cРAOo"H9>c{q-|;w 333imM& .Dǎ/rpphprppرcg<|ӦMԐgb֭77fqcAhhbݻ1rȪ%!99'6oެ2�va7 SN c„ 3444G~ސb=LDDDDDDπyi~0b۷O.77Y!@۶m̐7f!{޽{u,2 o&q1�@ocreee?~H$P9|Di]PP��k׮}A1�0a9"eju '''ŲT*ŪU0bAo7obĉ 﫯zĪ|Xj`~0c [N~ٲe kٲeL4 W\䏻y&Ə_vX`A1 4H)xz{VCBBqD" 88X566ӦMkpO?f""""""zp %~0o<{F"`J9z٨jÇ7X4tuu7Q뾾$σo^on&U{=L4Ii#פ`v̆ >\igCyf�0~xA/džb[c˖-JC=₯Y$د־}{3p@ v킯oڵk DdWg9T?N2&L@```ݻc֭Xk�� �IDATp!fϚݤV$a„ 駟UCu0rHhjj*$Ccرc8qbb1Ǝݻw;_u`_=1{l;vzzu 1m4|*sdkkŋѣuD7nߏ^z 6 ?Į055ņ gƦr ݻD5֛o-[\k׮ʕ+Ԏ,,,uV^D"ĉq tϣ )))EII *++!ggg6jeeexrrrPZZ uuuHR899)l>|Td2hiiA)~MIIɈEiituuѦM5鳖#33%%%Ѐ~̙3qYĉ1cƌ:#11(**Rԅ.훜I&!""5544```�:bc#-- yyy())H$7iBII ***jժY刌DZZ !ajjoUVVѣGFqq1D"`oo+++Ahš666u|ȏ(:խ f<yr"=ˎ""""""""*=<#xЀDDDDDDDDX.תUp++IDDDDDDDDUD ;M>""""""""DSweEՁO<x�T* K> QDDDDDDDD0(FDDDDDDDD-bDDDDDDDD0(FDDDDDDDD-bDDDDDDDD8$4"555(AJV!6 /wP\V+T)ƫ:laDDDDDDB*))ALL rssQYY fG]]pttVW?ɔB, x&j1ľ20FDDDDDD/ܽ{&&7GQs$ɐ̬L790&qo>ʀX ˰X( """""JLL LMMaffMMMŨYֆH 111puumiؿMh~777HRD"V5[buMfd1d2H$ĨDВhw}0 F/ 5?mQà8 Qà8 QàUTT >> GJJ3y/z~#""""""f/-- B^^?>++ xQeo߾cm{M>Cw}gD* """""".;;~-u}}&okcޫ1112e lmmmllx\.s;�SMl K-$f -.S޳'"쉿+*ZOTrvDjj0 ֗WȐ]+#mhoǿJdTY]~q9 Jan(:z�293 a mMk)*ɓ?yE(,-SrrRs`+TC> 5A\z jn%PSSE]OFVnp2P/>ULBXkCCph#F_B8XAOzrm>"19EBRVL#W"5XkbQ."ԻvBDDryЦM3FFFG`dd=== lpʐ[[[#55vvvu>&&&::MLJJ>tuuZ|]v Cnn.lll$%%AG[044"88YYYPHNNƝ;w��7nހ��!!!HMMڴi333�͛7accRDFFPW]YYC& \rPuܠ)x/U�}Gٿ݉'йsg([ѭ[~ Mㄉ{AC]J"5쁍nb�=q,<:#%�7^DJn1~V_,Yx}av;?{:?>,> c_U7v!kݜygW+N [0mMy뉿;13{~{(|ۯAm1w'Lq ^q['vAWwky K+N}7 9uS廯,H4QZ^ � b3_eb7mu*׿bGuY#?P)cu_j:\ǯPGLJS_j<.zpy+/29#ϩ|{>Fڵ >}:D!p%ڵ 3f̨w֬Y^R}ɓ'#$$Y|5 677WY~ܸqXp!zྏ9WWWm�Yfo_^k-YFFV\ GGGhhh@,ݻ7޽իźuPYYUV!88(,,h"r:u �O?A" 6n©ӧбcG"77ņ ׯC,cٲeXr%>s`8}4<<< qMc|}Νeggcʕ/add$xGKK '<xVZsu^-ӧi&OB^7oG}؁6|R_A\r6nbnmEc:cy-r_G/ʉ=4b~ Fsk˱rښ۳Q1܌"0 + ^AjN'͈/i٩/GJcht:ArxFR1~/m QRZ X1 gr,zR Q/EC\÷/2Iix?*mT�aT쌴q`A?&$U֜:~/B&N_Ƃw`'ޏwN,cv7NG"fZݖ*""�D"t {stte]XZZbݺuO'׮]0eEP, �lt�޽;F\S޽{شitttpU,[ ƍ7f8;Wuhx�|V,_K+K㗓`Æ ppp@Ey ۷oǢE��׮]ŋ燴41ɓXh:v� ĥK{\)))())˗ꊃbؼy3Ztܹ3\]]C,_| :H z? U]GfG3vAI jcaxks)xvCGgSd2?"Ow&R"B UikcKNЕj".�F4~mMq^^~~uICdl:jjp3Ea وKGy&zikJ@&!$*bX4rD"3�i627'BS,¢ws snaB5Fe6(X"`gi�GK'd#6!%01Zb\M!l.0. esDlZ>"RQTVSC]xXB[|Rup2ѹ5-T"SR1/-Yi$07͇ʇ.Y zŧ#<:2+yLH45h}m hJ402Z[@ddPW nm,a 9V}lXJ!p$8C;;dT_ IYEH.B{.P1$/:%Qq(.-GGeAtragc }r٪j2 KFVvLM :1nQRRq18^mT$B.1ME[=~9i="+PY!ÇZְ4jk\fGFݯD#)%zZpu4�ؚ顴B4x@!HJMk+3D%d#%-Ff F�29@6x0lk =¬1Nc]mVx*Bc!ޫ{= 0* e啂<)=)EhcgG07ޤ@Qi(-k+ 89e(Y0׆`]Jٶ_E#6_ǫ`pVx1 s_ ߶+ LD g[#p;,iЖdoIEHdUbp<m`eRRs)V ZǗ{ksD m7R =-N33j_߮-%m%xb»�\`@f`!\t ptt!42L`w$''COO...!`5EEE!55]vUKKKCxx8 Hp]$%%С455U[͡]/ልEaa!LLL D+W 77݃T*Enݠ!L<x�9990117ҪƍBnn.bbb !Sb8vvvU EU^^֭[FRR]M~a``8�p��???m ?#-- 7n@FFb8dmGe6'''{bh۶-.]׫)SԩSxZt100… l2E`L___ x"CN[NkQY�~SXKq(,#.(vjhN+.Co?]A+K}DB}ڲ**Ǡ.ح-*eH,.zwlg#6X6{U6=}ϡ ëWߊÜ7lew1雫Zb;�chv62G$!~.+#S7]@Fa98 $.eBG4jOGc[1XRVc Jİ7l _OGI9M9TOo|:;c]M%r�;ݮvЕj`Ě?&8~" fS?SۓzM[i(Nz^ GAlL&naL,9tb adrXIq}~ z(mLQTZBnѧgnbp;) f@&c턮X&4 ²2LkژHq)yH-N"2anĪ{}U5lڸ;J6R,>Zbq^/@]M p< zp1g+3c֋._+c\<nX9~+19)XfcNGeRc+xY}}!:4h?:yĝD:çe5oaϕx pDxr B݌^ǪwjwSLt􁽹>啰6vd,Swpoo2|B8fR&<1QjKpQ*l$V#*1 {CiiMw aQx6@pr>֏AlFa7$cxk+c 1c01�6^@L/{#\}zz)[46*4{Y)b5xU~A2NKöA!m+8(<,^{CÌNDZ6z&S_i KS]b1es+Ɛn;JR"x !yp;g2B}}/Y~ؚaЗ`s#X _M = D^dd$Ǐ#776lVVb̙;w.vZ~^y#==}섿1yd8qB̙38tߏ={?Gn`jj#G`ҤI:u`?:ubMeeeeXh7̙3:t?}?7|,:u Cnݰb ̚5 666Ą ```�?ZB`` LLLaH$DGGC8< qAE^l5jjj mxDnn.VXH]7L_EYYU^rwۖ 00W\l%l[W]rQ;ا=z4!-0ĀS,>_ ƘnoL72 2NF :HvYx266_{br0=Fo;3�*(Ũ/ % qFL솳.;?^+*gPPZ!nX>>K<h6bdv8v;[~±%Xm|6;V8G{v=8 >FT0cv?<æ}#YExe蛋-'QR.fcU;ty@Fr"UJt"#20o+ybuFy`i1mNVtXOlDg=A_MzA$RÛ2WfXSG(޵u^P s@vAz}r :,j�ڞTEPz{Uw6 C/O[Ub{9|ۘC.9Kƾ�CRH SS >1aJmy[ԽtDg�f[nQD)yQiI=0M_I9xc5{6`^ЖY+M_r_Z.(;_۱X>;~ ŝ<랰rl/W]2R1u4`|x),>?{s=|s4՝T/�2uŧr I]ѩr1ѝ!ˑdK_ñN]>|aiQ{)+PaY%OCXj`[pZIp&,[Bi U'|p]C/sI=̾(*-p >_ gC8uFR16zR cЊӸv7.NSkIQkjjZ#<Hh ֍E_?Gq+2c@n@ Ͱܪ~Xx UJ٫5uvBY /rJg^?Х#||.5=w5H%$^knJJM :s1|8p!&zᾛy1i$GFF:t۷o#hG> GGGTW`媕شiVZ%؏[[[rٳ'OL&͛j*��OOOܹS)(VSXXlق@@UO>DQfǎ7wƌSG̙3+V;0|pL2/W\ OOO|gJHOOqL<0>?# Ç#,, l<-۷;w*&vZ]\\p ,^X31!!111)ڪ!!!t6nX۶mS{UmH$gdNdoo:x�� �IDAT2?̙31tPwljx1<рgp&[ư6ѯSktvļ-q>*GiKwQ!�R3򡧭K1UVmC㐒W�s->%pZ!>9+;lAI9\4D%:o"JTV*+W\qYj}1wE 򱆝 .}/0ǝTSoroͦ.܎X ~ e2\kP0=k 0Ĩb�sv_vd:r b4d29r9:ZAWKrG'zΦp0E)r bVQߏIs2AXr.\,b&4jx\s0AILQB_ <nn{BYY4"4jxFܥ1fmq=;fn6CTZb(ǧ*/@7s|z!_ácYX~Z)൶6�LOw(/2 O+Q5;vfڸS)LR9랖X~< YCj&A$RCEe G.kXsCBL|&b֙j닱XWmѩ]y9(Z*Cb3'@/|?Gl8׼b(R!:vZ0ΚҖbS dJYչ IW;J�Z+rBI4hr% 8t"\ |<쁭/@W'c Ƥ\;b0S={tS�?=CD%dC"gMi_ Q^)kV{T;8Ys&9Z*mUPq9.ߗfRu®+</w=?CHH[nW^~wX[[#::;<bk-ٔMR! I @PT Ћ峡 z zEQPAKBzHBz/l6aɒPTyxȾuޙ39g�T*K._f͚5L2L򈎎F*gEwY,f:{{{ƍg96ydz-+WR[[K||<UUUYإFѣ,]̚5ˢ-ntyBՅ`j5zXpttbaL.c,^o &PSS?F:NɮZQHzF:6mϏsJoϞ=ٸq#z`0zވ,Y>>>9r$^u! (rK%9ԗ@/K|{<О1̟cڈ dowx;hk']3 j R ( ku8'57󴵘NZ?\uсrv"%ª&y\.GWϪujmɣfb`έܓmt(:c&]K*UDҿ Zrڃ}yr9P/=7I|+DѬ;u;aKl!1?At{XI8qw:`+F&چZ&&Z3ie]T8BNl|y%#NR*Ǡ`NCR)5ڬ<X{圬#G{ZݶgjG]S fzT7۽F0hh {ĵyhFFx{R)/Q7)4qI SGw0خQX@pI]W%Mhݩ>g`ϳo@bf1mYרtxm7co[u,{&;/Yo?lWcvrjux9jURڜ&=ַФ7pFsJAV|6<@rxs{ryu} ;L޶g@B>;KY7oŭ#[G{Rf]E)ֶ<t} |Ž}jlP:Sʪ/˾Ip8ڰa]wWL|jlݺI&΅pȑĐObb"_=>>>F,YW_}ѣ<x0Gn3 bivZ{ :h8tP]WWg~zIYY&~iʠAg1}|2h BCCxGxyw̚5DFFe<ZZՇΘ3g ?< H隣yT>O &_%[ }H!N[}wş�/Jftz# %<2r[#(H~N,eOլ1}+fӊpdb!̽cv#ܓ]5gv>8{ ˴&PӨgk7qzr/ˏQd0omiѱ޻?Y38~=Delz)6<25G#?C|Z1 Vdk#chw7U:+ew>=EDVE5 z`ae=z [  U5UfshS>rpN'>72yK?jO+vcZŕ϶ag##߭ݽzW\^c n2j`o+ɎUl3Mqf ("̾meZ8\@dc#_oK>:S˒#zxfj w:Lr)BOc6]W>x9Yk^ j.*R:PTՀɢ /w';Fxpe,OMGdkz|\HnϮ坦A!U mB8ĵ}pSvڦ(l8me~ _^Zω*{Y)~8OX%v r6Md14umГÂ׵dClL>=l:^LŒ_5&VQ}jlp),2#:w7 .-#Gdl۶*k`߾}ٷo-D0<<>}իy�se˖_Zv_TSZZJee%fYUVVE7{y7 *,,r<|0B(pؼyձS n ,%Kh:eݑH$|VGEEzj4 2̪,_2y4 rܢ0a".d2+Ǝ CV\.;?ɉg}YfЀJd|W+l? G in1kyr|0A dՓ#J .OyrsXp{$<8TIГ'1 #t랃@gwq"י%b*!~S+#e27~*dR2vC\1Tȑ,Dɟraf<#.ouխӡӑ_R̓Z򨷏3#Ukqf<Säki[Lg`�JbipC*pEb3xɋzNo qבSV˒lGޞDVg?'|.gag~RVĬ;�m}3ldRܺ%Mzp0[/omyj&jP2_nH 9GMqU+'ZZkf΄>-qjxNcwT#(6r8 jV.X@Z چޖLxKq;^Ȱ�Z=H//I-ovnKW~jY5ŜU0;J.:b f]iUN-abno+Yjʁ[ (T׳j{ OT^ֻobָ`>$RKibPLYW[uѽr'bM٥5ĬJWlOrQ5)jiL*Uq5M7ILx9"HN*@~:Nj>ZKޞ`7@C|Vտ<9kg#Y9#'J(nd,;Rq&OVVVNnKDD AeŊ/o;}z 4/Zu=h4S__OmmmՀcqጉoi1+ߵZ-d>c ֖4233둝saѢE9r26o̚5k9sAn�]*T*YT*+Hww�]!ѣ9YuE'{dbG ̘:Yd֭ ޞ}J ¢Vsp> 2Jym]^Ygv<pC?fhhH.-ݪqh˰f\VST1rۻ;t'F`g#y}n{7@ũk5ڞ|#_SY>kD?Si>[9SY{Nk5OnwΆ<Yޮ<5!?T< ^ΚXbfԧ@v,c۸NՇj`Y-`Dv:>qEl[Ӣx}}"=3_3Z?zhl1r;-8tHUG7X�ޛyMϊӃgos_Zb،dn<Lom`'q{!c&q!*K2*z] oOIϔ̸ox??޸=W&9k\0[-߳KkM,_fg;>9[%GD~}' bAF諾V9r^^G;̲}C'1g (Hpvakq.]xlb1R##Yu0MKY:z|ͧddžbOʙ..i'SoӇf|y@`)2[˼eOӍ <tj (cRD>401Ї HpU*X2s( %Zd;C{3ˑ'316:Oq8|H2˷6x9+9LGĬ/2h+;3f`e7]mh:F&Rŋ;>|vJSʬ^{*~+V`޼y|G�L8y:*~aʃ0^|Es=橧7dʕ?g999W_/s}M(%y'Yp! .ݝ^xW^y m;7|έrƌ f͚EKK ,XbYy@  J" pXD|*NO2b߿;Sy{&}}]H)r>)!=W7Pפt$}t%)غ[p;3fTZϳFWpUۨGbģ՝QL]Ħ|/unh7gmS؂Ray9B}S˟kTtzc.L:z y]u-[W Y(bD!wqc/pz{g ʫqqZ&fFNnc0NJ,6b#r8gҹWZr6yhjuا2\Jlz|@Sf<:Ukz umvMΥMd^o0RXY ^vԵ:lmd8ڵ_l1J%:vFuC32] F͸;q.brM+111 <#FU1f49p�qqqWV?Gb2,iZJ%66]ˢF3477[bcc.^XHJuNI 6,9ˆ#n!ݹ:r]&s4on1}rN@UӞ%JI+ '{ P\YKVaٚpdg=vPqPEWrdyfk#ʕC: d\u�8XѼ*^wu=p#H, _ΥHI%Ԋ#<<<Co;$,)d)7]a#5m)Ȥp`ٕK%xߢƩp>CWzt2c VZڵkϺkD"!443filpYg}6T7prr:.둍%f@ tXdP]OA/XOp0G L\&-4qȜn-k_yn<1ԟ;DžKn%KpT@ @ \(}Rp9q‘[ @ @p!C1@ @ W R(2BpY`4c;V @ A[\]]Q"#jv@ @  R A`0PZZJQQ}'@  ;;;"##%//O(L ٝrɄp@ @;;;EFXDL1@ @ UE>iޗ"@ @ .?.RlrA?@ @ R*D.vJ`MEF@ @ tC$J5|946\j39ҋ7[&@ @ h@ @ @p!Y @ @ J1@ @ UP @ @ :RL @ @p!b@ @ |R @ @p!H$"@ @ W}R @ @p!Y @ Xj-D"!443fvg[JxzzbkkkuN�.SGVc4|CC,gϞtŦ|||PTBbͥpE~L&Ņ@D_eHFIP @ +̈#J;w18p8Ν{gFEE;֧OÇ#HHIIcΝxyy]p/^Lee%of<O<Abb_̜9#G\bXTT]wECC~!ǏBDrr2xzz"ɮ4 TTTPXXHddP]eb@  33K-FAff9=7`ǎl۶UV1fx n 71118::Bhiia޽;Vd_Lnn.x{{_ 10[y{{Onn( dB(@ dR!v TzV˶ / `0o2zhd2rܢX(--%55݉0Z?~JdR~~233A*Lpppi''':tˣ#F�P]]MRR='NP[[?іs8Q*wQiLKM#11\NBBxxxVIKKCѣ$::Tʢ///Jzz:( "##-}5j jӓ<P^eȅBL @ \&L)((d21gvIss3w}7!!!DDDŲeP(̟?}1vXjkk?/k�ؽ{7 Ǐ$bbb7n\4|Ǭv57pTTT s2�� �IDAT_`u]ii)fbʜ9sx뭷0<̛7www�~aBCCillرc{L4 Nǂ ؾ};7x#yyy8qO?Ç_p;ʶmhhh`ٲe TWW#Bٳg|h"زe ^9sЯ_?R)>>>رiӦgƎˁ0L888\2l4h 3dWl4At@u t;j5qF$HtҚ:uzogJ%I` '[l9lMC3 ])j@"t]Y룦Nhٮ<huW"_b4QG倍Էt N o-GdwVGvހa>^ׂ^JyiеD~5u)qdmIiU#O)rc̢* 9={8r#Y%ThH$x:eX`nm:;L&Nb$pN)Z .uuu,Y'''|Az)Jl۶ 6X,tfΜ-J*֮]KDD&?^{m۶Y,_~@Z->S.\humdd$r'OCrr2...lݺn,j5ٳgs0|6mĤIؽˬ; ŋ3o<6o|i|ի׿Xb�<QQQSQQ]wy'�ؼy3˖-cذaՙCgA*oe6oތ'N&??p!NL}{Gs3.6&Î%o9˺_ć+<iu^ccs\X34%ґSKQ،JÇ2OfۙjR46<`Mʿ"dL~NJ(P>^3ڳofY=2<*40B|Ϛz] f0fp/|TJ4:ύo{'Ss'p>V:YpemO 7"JIk3; q-Je<0IqJwPP^++_\BNSn]c/ޭIIo7'_ʠ󡢺kF%v62 F9)I/nY2CI3M |.KI1L& ^axxx25qC;.._P(J<w}ՋkעP(0LQ\\Ç),,$99AY>|8yɓ'駟e4|}}!''�JҥKy-.�J[n}1zhl̙3lE)6zhcnjeK<yE'ɘ:u*_}%vGtRu̚5իW[bsÆ w̘17ڰ>a`E@ boΨ&窐._7V>mY]Ln?$q8wNVC fݔ̈ W6v I0sXaY5X&!<x&+lF狽$T28nM9es_37o|TJmX z]9f Ȑpc 6ry17░K%yX5g &Dž ʚ&aNl7@/'~#~L͎QQ3۳cʥ9T-)-h7Ju7P?W&q4d˴au=|'[[ &~Bm_?5~&2xchXs{28ϙ_@prJyFSSxpp07ndY$zRW_%>>q1`�o3c]999ucbZ%)&MDsss;ĉy饗x衇bڝo`u]V[m 0㔥Ŧ-)ӓ2%P^q)RLTtTۨ'!_O'}] JrՁf24܃^Xz>*qRKmC3'Kinn!'an�N-ӑMeZDùcyH\z :<< DBTפ'D 8'ǎ3:%TjI%ym^5Iʮ 'ʈWG[*MI5#0MfR^YՑAt#"ޮݑPR!`+).Ф7r":@BF)FJ 9C̃*0I$x,G= r$Kт'js55ٗP@xR Y+(%וe45/7%'JȐ_Uw- < [)KږyФ7p<Ju ΎxxS=ipJ �3Jb$ Y955ʠP/$4'Ivaո80?6R]nl6ֶM ͯ@o0Ġ>*WP^`%x^<=1 q<ȤRl慚F2DxYZ[a= Z<\ta>ߝ#JxQ*{'Dp(1**J$HnHZ z:u'vԞyӤ7QF'{ƒ=l)RۨGlOzv9&LDNN|z)Ux{,Sݗ#zblnb> ]or](% ίdPO/EGa#%'anVSX^ˈ(+'J |˥#9U5}]Ge, \uz#K(W`+''}]-&1} hQRWV%~c ڲ7!j=7n##}!<f3/1LK/p'Je4,&HM E]*P<76rJH`` 'NKKKӧ3}t{ٹs'~~~9r;vf[=;..r JUU庾}o>-Zd*(( ;;ʝUV3SL!>>ݻwSOӷs1F*ƶxyyYK:એ &.Xg8۰7ilxy a &pՍL.R #C<H.В!M/O]'[0k&:HŖn[l-#C=+#~]2?p~_DwfԒFۥȯjbH}Oү<: ;KP\̸/dKfѫSs/7W˸>6g]2kzIlLFvh2YxQ0'Ʌ9&`dC06̓m|K>)8C<W)I+bԀ�ݙ{[N0 6nL㉱Lћ/vea49෸|&a^Z 6Ofe쀎-*ߛ+a擙C;MRVŮ,^́V@2ռC2 dRK:#\(f<{C(ҿ[LC#{|i�62L揝yKv*m.Q#ado>z`�l8ZHC O7Gf/?Thϯ%^ζl]4}:ˏ2:_7{vrwt g\;Fշlr0Ǘfb8S sw f9!.(If}u/eΊ pAfkCcyw@&_gf8# [v 9Pu6r}l O r٣eCȥʓyaR(*NĎ3\ %"<IϡA#SE\Z ̧Q!ϫuW6nv2$6rrʢ{2ڎwd.`oB.  T^Vά/pcpS2fp @0O *8}2?7]s :º畄' :]oM=Xbm{`yG[_bI5S{]Q5|7w49elN0/,=97Ł7V`J&EzSQOzY<>2}}ϻ:ߒJ&He;5>QjQ-)ޞB2='{6fޚx/3゙:2$++ Jd+Wϊ+*/--_O?%$$FlllUTT9rvNgQ}|M>}8|= "77+Vp7RSSÿozfرՕnիW3|� Ɯ9sݻYwlɓY|9+V`h4'l;4Ύ9sh"իGe͚5R?wk}{0(1%?±Z~xzr)Il?;zFbeWڗ&doè<]<gdHXtzoHMMsסrIӟ哟c~#F=߿<G;tLw#"ȋ5,3!}zo12dR,'* 3+g~Y%O,w bǑlvb+iе0=W'.}6t=4ZG<[Eh%i%uM&>$b[*_,dέX8=WbD?ԵMq޽o ݂548"JX+Ty0gj?"|f�ʪY伪1mEi[Bْ21/aV2uvĮ\j=i1hQV.̺e�ɸ?PEyiʚ&^>gZ'n2f~mz3kK%l=ŋkx>c'9t!;+-A5IE|KsfPoޟnIc\ń~ aF!� 1`~fֽx=nT߰SvskеPm Ы~˜-]]~ym}bGm)$KIoY&o^�Iu?pA>.di?0fWdNb rWҷ ¼kee'3ph(csRհ_SQ9b0V \?, w%G -J-qL&[X2kl`$C4ٔTJ?$ |s,5N Şǖdų�g9O[׽λ:XV\H,3{#yc}"/Of/yym<wo7>\z$0H$]Tŋ-0l0,XG]w̙3-ƎKSSL6͢`z㏙4iRÇg}c{͟?7b ͛G}]$~Neʔ)l۶޽@s;1}./<<%K`{ovΝ.?/$m1cYf҂# ,`̘1@ tKح :cլrqP🇆1pe_l;.:zW^C,ʃէn7}AA W{<cP9)l1.VU$Ѥ˱0{6s`\yaQHhOwޝ9g#-ׅbM=SK(,ӒTT͠-{1uyһ;[Ӫt3ct '7=I%x푢nkE*7QU#6MU-k3:/HKހA®5zNkiu<][?s# 8;XV(2 aP*ݽ{b$1w$]kGK`Jo[w$K%LbQK=茬"-:[FZ{H p%>ܢ8EmV5Q9vpw!2Hf )&#=Y{c _nSߧ ek((bc\1/;̭{o0z\`c|)[kY9lL(k\i{z:W%GGfWldL?w�Zb4yOXp$c7t?r2nw yljeWM(�>4ymW֑WIVauM &R mL!&=?'$/\m6Hŋkx SmؾLChP&pP:ONIy]gb#`_hn1Z-J=/7G[L~Z: FDw 1⬊1ȁ,F|||׏D9sP]]%>#_5[;[[nF<S kzٺu+j\ޥKq ؄ 0t>zh~74 Vq.&cǎ S*<<TWWRuÆ V+vi?z vΟFihh@T~.&@p*3WݜqӠkA&Nvqs8I"aLQȬ;8.2I35jjVK`!rLa_|&'I%|Fvf^ Njj�g{[WD*`+F&t&�u|hH+ar'F%?%Fzӕlɨxhv۝^a>w;+ u <%LJq}t/p7O}:<].,HvF{I%^,-SP>쉍L#uz"_U:x;lK|\(>iu^ ]uсrv"%ª&y\kRp4;On݇[Xl/*S+:Tg}؝럝 _W?ݑb~ױ5?ηOb=Hvp0}mUSۉ٪24 |Y;R 0c 6˪yz*IUGD$+kŎWı*ܞ\^]Z�Ł|v$loM-޺3[Gnw_ym3gέI}י wPe:-O3{MMvϒI%)Eʌ3Xjk׮Z?DBhh(3fa+D1OOvם%\pww$R4r?tyh48;;j'&&馛XrΪ%QLnoFj0X; _'r'TQȤ4덼CExnڄs*,FQ.Dx+}YdD]GF^%SFpP_q'RXr$þLu'f2ȁچ<]FR!<3_Meuc·siӿZ#fdh /2KsħժQ[L|ZglmSBPk0rwg;?~-,\e4&|}}9f\TV}^3e]ZMXENo$>Oc+] t% td+W ɡRT둵qdo'eai _S*.w0?Žׇ[8ڤ7`C̓TBm|:z wj&1**5+&]O7ͧ�� �IDAT7a\OmuclR#WwYeܶC4 l#/;=au㞡PH[.5SҚxNWY2Pb\յM$g2b@O& ^’ q1GwP/`4,T.44.&EApm?6e<4 Lyy"-K;u=\:ܘ;w/BO0m4fϞ#[<3" iwQeU_sO#汛Ix},FـFGAe=K7c4P4Zd_cۑJI+m<9.ݪ㽣Gi%)Ul䩯iI4u:J%vЊ]yޤ7STT7R^~Z. TT͊m)dUiZOܓi7ҪF+yb!R5&/t-?VʒDLָ'�&4u:bxkM-Զ(+dR2ҷ(_gl%Z97~L 7H'8AF:~=T*!_ew\yuk,iP.2 v mL$]IDy`</y=ōCzPTR(j )G͢,z)w EgG3י'PK7S^cDT+CJw%cdTSӠ+/EuI)!f12(Ҳ|K*}zx1?$U;RٝQqYֿ[Fd'瑘?8VB"- 9LnUӯ@[JI̮H0]gg31fRVHlz 7@/%XS϶2]۾.qM�I5(:DeM%U|#M=:K2@VgGjtz]t/½y}/X@vi 1c=oeʤRZǚNPQD}Ą9j*<4oM\5 731ܓ|DpKo0[eWQGvi vxLHk?k7Н@x |5FZڎJ'//FƎkqGӡ$ؿ??#{l&P__ٴi۷o'##rѣ˯Jmm-FG/pAEaΉn>)Jٕ O?{|$o[w'u\{4'aGVR s3Obh_nEG*0^3!u푼6yuָ`& F.ִ(976']XP0H$$jxos[^׋g&ѯLT~|2sυg'G9TCCx}]%/}v0T6YɎ.|P4O`ݸw?ϯ5+h<}FU OK2� B -( (m\W ADPiRIH'}ғdÄJQܹs{3p5Q<2O~>7a!_c̡~nX^|pOv Q(CyzkG;cu'J$ӑݼ[|.$5綜Ls~NmxO|̝#C-сܑn~mSF޼c }k?Ftic.ƏL2N9Y6+W^|>͞esr _?j|><|7,X=6'C<.9CX*wm>ivD/}x&7QPn<<;-ʟ<:׾I~DX~-1R vCD9wxO<>K74*%w b>ٗ=cV2 ʿ{ѨؖbL L~q%:8C߆4'&̃p/|l*;xh~A@W-JLWwf oysC\o۷突a,9폂sE�s(=6f44 fo ѭS{Yì!T*YlvvvDEEaccÀضUSS3<lܸnS[[ܹseȑ~VXAϞ=yWdݺu۳rJ,X5j ٱx6 Ѣ`h0%dWlJLf*jڝ#OMdP*pm1Y[Lf(bojфƀZ3 vviIU=Nvs(*CCc6jo8">{dlm+뱷U[ym ֹB*jpU`F mt*..\Lkb)NvV<Pghj]GzcJUT6d{Vr &yhYQ/h2l3Mjqui3mXN6x h5ֳRɌڀVrx:Yqϭ}qN`l2WZoWVήkLYRmDz6jz>)(ףT}NysūյQ{Zodr/RxyaĈL48!..SOVY~=?8#)9-[NSSǏ穧b„ x㍤2x`~^|E[<==c޼y 2ٳg),.]ĜbѨx2J8 ~n.n moQ+}bPiiϒzf݃=<^~Nũ1vW9=ѕ@]p5ߞ5:곀{[5WQGb*2p ǾJb-r@z_eat(u<uTFVبMu0} pU?=JI_Wii*jG秔B&DtXW:B+݀Xjiii?~-[hAUKjK{102cMm ߿\=Jzz::SVþ<Cۉ %T(|gW;߆Fx줕8J7ħeK:axS_& B\F_&mɠ>;s0Q~8W[2X4k$%"1Q<&RC!Pvv69999(7nwq7x#{eHB7m@RTX>@II GO>_~ֿ c-2d\ѩˢ鱒gaT F B,=J&E09.B }#$.As% g)//M6+""{{{|b]{{|~amN#4JKK傈.% &B!Bs?<ɔL]]{t&JKK)((`RXXHU&L`ƍZB{8t\)/B!BsG}Fa=ɓ'vZ{=zH5BIP*\wu\}3sL^un芌d…L8ӧ3vXn SB!B!8u%Ɗ JJJptt}r(++ ;;;f3:OO?W\\=ťG-I B!BWW׳Jj1'B4 - /Έ B!B!W !B!B+ńB!B!GbB!B!#A1!B!BqQfI!B!BqEQ* I!B!BX)JmjjBRɅ$B!B!NJIIs%%%ȅHPL!B!-GaaecB QL& B!B!ĩʢ T*\\\ N.FaB!B!Fm6bB!B]yy9˗/'--( wߎ[i+yzJKK :}QVVF``vhڳ)//wwwӫW/)BB!B\ -ZĀClzeΝ;g޼y3&&ǎO?y?Do~]vq=wɍ7_Vaɒ% 6?T*ILLB hA&B!B\: (JHKK~{96l 駟ٳg$_s/!hE-I B!Nb'(J: ___r-O 񔕕E޽qpp�,%&&RTTdLJX47$''l),,Ɔ"""MJJw9rb}2dH455k.BCC[ <r555ƶ6<<�RRR < U=x }mq999ӿ<<<eff`LJ;OAAG6EԐ^x9V;v~Z[[[ пL&)))nA!MbB!Bq555q!wXS>(999Ʋ}vyqrrbѢE|9FÔ)S(--{若aÆLMMf3:| 'N{Z?_RR½СC1۳m6z!f̘aݏJ?ݝ_|Ѻ[oEPLR[o1zΝbΝۓ_x뭷�8p [nՕ+WjyG0`�Oz<III̞=~/馛ZlWSSÇ~HCCׯvV<Ì5?%7/G߈%++pصkq4B\$(&B!`ǎTVVPW_7G}ի믿ёrn6nʈ#Xt)>CŅ-[0eV^Myy9| zz)6m@||<| qqq�,_g}k `РA̞=K_L6GywwwRSS̴T7|3K,aΜ{(..&##RSSׯ[neԩh4˃Z͗_~ G妛nѣ30sL 7|33f`̘14Kozy1}t�n?Fu[___-[СCy9r$4jkkqttd۶mK/UdϞ=̚5 0i$f3z+ SL!B!Ajj*{aϞ=$$ēIPP�[H͛ILL$22~WWW a޽lܸ�~'PCVԩS}!u"p5eL&FaGtV1p@IHH�,#Fj>}PPP@ff&ߟ믿cǎa4Y~}Nj]}D:c0 \pɁjblrssؼy37oh4ZAgVӦMkRW_'P( ^  )&B!`ƌ;NcҤIlٲSRXXB@[h4DDDP__K/ꪫ߿?#F R}[|V]\\wP*}aooٳYbcƌO?'lsnݺBFFLv2~|DFFb2ݻuSSprb~~~xsrr~5״HtVvvv�7T*d|!.B!BÃaÆqaҫgϞ̝;׺Mbb"f$V^͚5k wޱzŮ]ꫭ=~=zfꬁ,L&g|F7G1p6S(L67ΓO>{a޽p ] T9;;Add$`AĬYZl{"u}mv׮]-hOgidb!2|R!B!γP�[Xd +޽3gRXXdTGii)۶m㣏>^ϴiXf ݻW^y=TWWGZZ .Gg"bDDÆ ^;ﴮٖ}n:RSSѣo0f̘.}_޽_ѣdr.�Lo͑#Gc<]ZU|ҧ6.ug74QR;MJkqwVkh@eQj  6k.oh ϋV豷Uc/^ݥF*74%* ku`iU=Jw'K\q6jTwcw]u Mj̐WZ. Mxh;MfuۣQ)ۼf<slh4QX^G''T /. RZ6!*Lf3DڦHVQ5Nvi/2WNYej?|2بc:\Oi6WP0BdR�d2u9}|r:t(>,O=uuu�̙3 &`0;v,3gZ&8p < ,`7K/Y{8]{|e'|3<'|Xz{-\vϡ46mv⪫ܣ!88:q,]ړR(j^{5^}U AAA,]ֽz!.\hWחհNYZi: !.l6_,֣< `}[xPEH!z&Ɔ^.<no\qׁnReQ>X̢^̓gnEq_sxΗI{c#=zη=/<8>1C]xsBO|Hc ʺz8qyt|} :8?+mIDv/Y)OM,┌R-Nxb=(_gc: M{n+M`V&VTëwx0[^¦]K�\qe=[3%)q͵Z#@WzX&f~D82ˣ'BGmIćkyLJ*c̓pm2V6p7[gn̾ҹB>2l5* &K^ɴ @nNQ-5U*a7N_J_>xݯE1`�: vL&vI||<;oo2())ٹ²2T*uwN5s^^^{ee%j]]֬a|j:wӣ#+U3rLػ^a)%$V]X=P�~.5eY˯EM& +xh~!zQF]E%}z}&tg^iTdU3,&7猐 }ɣ^6˾l}8PXlB<۾ޚ#ڑ}нHoGl�U -Ng\/ct{sGXb Ll?wH 5>Je{9Vs< r+f"<Fn{}3nZ5<2nٖ_%R7r ;a|xB}5ӞLZ_G�s�� �IDAT`ˁGy/Q#o˗b :P(޽;~y~ROﹻ L:1}g=F~~>ǎ^czް҂��vvv։ƹpѴΒWg#c-)`DߠVO-"=r=ۓr'Dkt&: [5ӷ/HRj!p$b]5N 史WRR)NMdNdT|It pCR"ڙ#~')fFx_ qr#*_ F G (Uco&,؋֨- z8張)^#NJჯ=J(,F"$zN5+{'%Tra@r$cA_2K),{;)ET6]Rc6jѢ'[BZ106iE*jtuDiӺwؑ2밵-ԋFGr066ag!3RIX 0O- wWGzyY;Z=uFsuhɛrruLfzumuleQSWO;}=Q*ROjnޤ%׍'V&G(U`!*!)]j2khՑ~ŰJ�F Nc9'ܓg;Hc J iWbQMs<[FzV >ˬZZC^I5aL/n>x9Hex9z=g?ι,6[xUw2Pz1eUu{<ʩګR6ҎWs\G?WFxPRBcR7x:zx |;3?UP*k 8FJl^T*hN&S(U%* aTxh9QHTRQ[߈Q]`kj/K~a9ޮ1?2t NJH>hƹ;R JOFN)NvT5p qبШU-ERj!Uu'Z 8VHg-1~_<.;j8Xf`WJ~R)F@loYRȒYCޯƍm淄zZd rt� \vu=4qj48FO~u"t`D{WNaq%n. Fit_n<gNyh˭c,X{1BH)#;])y @2מ_|,X-9],sߛս}Ɣ?ڞfPl՞\~Ϫ6�7�};9ĆtzҬM]k.8B܉dҽ qۨ-Ok)3Q* Ɂ 2VdIұ6�=ƽ{`2R d\}HkF7‹7W\ۗԂ*Jjt(|5]ǵ}|(eW|9o$^m*nh&6?{*>0vfsu/5 JũNnI sW-~vlZ}뢽yP+$3k.daÊdK47]ՃE9 {$Tۉ&뵙5/:M92Bb-}ᴠXi{on$dQԲQ^Y{k})Гe"70O~ٟͷ{S(o+IK;1_&/e\E|f&ZEc0Ζ#ŸjS hm|[.a۪yC8ۨZ]lՎ`~\y9™{C_rw^ՠ74/ڏIC©76G;ؖYU=<9W$z`=C<x<8>�/HaazTQ<z7?@|nЋ !�{Y8#-Ha2gfdeN:!"=]GC{f"^.kZ}w�~AdWSQWeMxhbwf^ۧzȿsZrt�ZH?'rtzws∍%ooCR20̍7e2ZQYX{O~ȠPwl5J`pE':,v{g+U MRvi`?sq{8=|Vc)}RCYX;X> Z_ygu\ܥ{Y6[,'ým%8X\؞^ɤҹNޝKaa$Tp +{lON?KeL<^5ĜJ:.ˍX &Ӊl&&ĕ-Gw9#p={G{:&joC#e |DǡRq,ߜF#(.@g ^^<~+鿿ˁ^.lx oT>zhE3SGmX /fw>mÂZ vcH/V#Ѝ<ِ 3kxkžwiڜ^b̀`&UKscnZ6:ԁ̿}HmS<vM6�787~IhvdRPJA b{2eڵB+'(v1ʪ ww`rl?Mvq5!XO!174|r^ ci-ǧ&DFQ5�y0zKd|;FVHc'aQQ7dWpp\~˜ 'L~BCe+Ĵ"fcc uċw<5mkR Y4}�cbC1LwŪ|fr>ؖż'Z\+gҐ0R Y3%Ҡ]Mbpϓ ߛr(ܺ7>Gl�l?L 9&q=jn|-,y` Z*hqm. iL:Lf3=[7WFYo&p;S ͐YXKk}#|ĿJ`D7+9җg{F+:C#R<Kny=>>6s4^X}ŭ�pDhᕯ.ƇoR`z2\_FZ3vfq& gkB{;d23,xհQ( /)Po'=L7coflWgh@4*S lO.Inr§揇AJUyvGJqy~-1tpb#}(i`3kqqw@X"f^ۧzXqǹŢj>,FرQ8im`V64?_7Ҝ+^<m2OLmz XMcZv0Vhbޒ]4AOÂڨ1}3 3Š&Dz߇Q+)*㯯n:{ߖƁZV=>_7M<tgj1DY=Et pec<vMwn�#e h4)#o7cjTƒ$]|WbYpH6*J*&|{=/"yx4Q=(`#sG0nHVy]ñQ+SZ 61H! j ,oNZ wjoNr tdl ޥ{yڀ-ydjW3vB\eqwfҋkDP;ip ӱu! :c+xVKk:l{ڌ/Sol˹ p@TPYYw{pU.y2B?$(v1s0L ҋ14tw$2 %˞)"=ٟo MdaG#lvG97*Jt5$+6r:ӯNvS ?8#\W-dlGV\�6,ٞ*%ylEwTɼb؟k:(<77& <exu2qtIzr0OFx?/gr+`2yo`yUb|XL0Ϯ:HJF {1!Cpnc}xuHFQؘjVY:lJ*+jؼ2LSVpR"< <)0).wdpm%h|i{[ `$#C¬ӏp// ,+[eZqڐYLFrt'K�p1YˈJξ{'GVnHP+͟ml`F $5O*gXp:;Yw�u0Ɠi&yXdWw_46YusFbH5x:Ph:z\Gh9E oI~e=&lrSkWf4׍=-+hh41ihF\L`q;*wNCG?ˬQt`8_$+U[?-y!Ӂ~`̀tU(4|3.-ie]ĺ"f R4*63IQeUDYFŀPWt]<4jc%Tհb{&&lG6}ilTJX~e>A酷{s*`PE1a,8L :b6êeGB aDwJw/´q<smXpSp$qˆ?nx٥Q)o?O44[ 1x(P*46F\ !ꁾgMӶGtS5O4^92͘L,B\A 3o<dxw>ܚDu,CSuɅl6{ƖVբsyY`T'1m.O;ÃY'BY+ni>z*ꍬ?8&h9#ؙÆB>ܖM}c1~qg&vMLWx;QkR�ATNT[llW"vj x;k;gM_kB.?βڞPxړAM6 >.@_o@n燆YpԴΑfh0L+<^YgI3+usG}98j-vs~e=CZ_gyxll{w曇G#%%3I+N_ oӅ)v0Z :ԃE@>s?b{jwe.7AUhgΈez 8z|右-uF6e06hBkr׍zh;`{EePV?Dz#)ɅoC:*7ex ^ <Z+Q7'N2wJ~;%O++״ΒO/+bs* ~<Pw'؅]MH\'ūyC+N˃U[յ9@ & ɩxɅ |qs'ϙ5cGR_#%�!nZ;� k+mXjʊ]9 <uCt7șE376Y<Xv pJsfgzG~@^y>'ۦwJaJÚlqSW$Y!B4.q"&):-Jbj!ۘKE &Ѕ̽ iE-~)SD o8BoFhvcX?\o_sϐ~x;xe0EUdDB3ap8FYKp;Su=|XO:zVa&GslUhd2]̓isDzX&v%ʺמ)Cø] UKtX۫sfgNu+:怍J[ϧNJnyF9&%nZbqQ)rtPggKzeTңye5}CW26?7{JvgD_0?%dJQq`_Fy׾tռt{NgB]O)LJ78̼r^^w_n19YF#=|`&3?w侎W,*==z\GY]9ŎMkEKiy'[GuK'=-e/ں B ^& hy jH.ڸn\7; _E\Xvdzёk ~G%ds�W{.qg"ב:&R,ZJUxze=<ؖ}^j' EL=e?P9[Ş\v6*:,yppV)uLʹS\̦Y<bnyzt5 I9 v{P6bJ\.$x%LhZ\}Ȍ 6iب~8=Wǘ<{Mfnk*vB!9c T Tu'U˪߳Z}V$ùeDŦl +>\vQ=cjh4Є@ni-Id2c2잞x!v?$0}HuЀ^dղtAlL)@RrxtzjFT 3NL@tATywuyZ+yDz9qrxMPveu,[r=nϔ_^rt, | Im]~ݼtoktXyۨ0gt +9R+?9@'[5N J^f?z vn~H&OWѼ Jb` \? n[z3J9SiZFy׉7'x}"=xlJ*W 9:r>O'fov9_oIROrF [N2;l/245Yi~մH? &^l7rʨm ~HBREUX.:5kOgM&K=GYO5w\6e%1 =sxgaՍA=W%YTEOFOimwTLi<SVcވRϻG odP9[5 ٘0gt89ľVY# \uv=>ﶥQTg"^ F8il^y@Y:xjyO?;D9R@Q<f>h9Z*+[7gl;Vٰ/?MEjxS374bRxٴL\;/|!:œ<u+6Xa9%5=9> hPw51:SxTWAV.=N#h]PzelOoVB!,.]Ȳ9<~m$Ӟ8 3G5yeO>޼kS+<hZDap& yЩD߃ya¿֣T*wt8oS+�zx;r[i )wg=̍ysC%Ń폫 $[ tSz\Y<y<v U=XxCbGxr­Lf\mxAtMXmSْv|0{(.Z3sj`jGE_xC}kc|vo(Iჹy},{q%«3X1$ԍ9,~ry0Z,J`w=gI湕)�{Y|.Q1�� �IDAT Jo =hϷ]}C ɌN@dӊ "Z>ݿ7/ҏW�kD(SF sw$%oRݣ\ħw)||�1,uy% )1sRtulj;ʯGx;O9;޹uqUx44pw~~9PiYٰӨxa<~,5ռ9A[5[ p^@^{ wݙy4_m");M]}#w-مd&Þ[rXgRwz2~=59E}y<2JC9OLPyC!<lxtJo\K_ksM7&3s>؍Ʉ؇Qܣϥn_Y7 o޵"(1p{0Ш<q}/Mʸs7 fvXDm cg~} r`C|o jTJ1;'<'.m4JMfާ05`â2p+Bѥǩm쑱,6Yﲾe}ݧuB!t sWgP\朗-76(i&چ6ڀZl54dڀRі˥RY׀Jd69Sm ۋaVR]oEfࡾJ}^Nv]D2JZf>2)^Zodd~xkU !VcQNzm-ң 44(1lgUf3Vd2T7pe񏠫6PV] >.vQ/_ϥ:gEjgՍ]Q7dͱz2hl41`VhsIַz#䓮qgRgj h5 zMѨ=zo!?>]Ɍ`-*8kp {ٖƧ3ɉ( ji2uz;UWѨۣV@)1PZU�w{ !mZYJv+zWhTJODXTו ۗZh񽗋&Ļ4plTٜ. -[3Y:'kHh7PrS'Ã<;r;IKˁB^];N͏Ns)g_G=t*'G{g+ePsbaY33<9i58;2YGߧSup,^K9WٿFq:<gga绎K17G[B>T@\0vjC*di<vmz鄋s\X!eQK|]p[2f`$B!.jB!B!]!B!B!G)ńB!B!ĕFhB!B!FO !B!B+ńB!B!GB!B!WSL!B!B\qB!B!HO1!B!BqőB!B!G-I B!|rhBAݹqss1899F9c__"KKKQ*KFB\4fTL!BqXh ..A3&;wϼy:?O?d@TT 9cݼy3-bժU�| 4.Oxשeno>ʘ8qdZ!JOgᆪ>!^ @BBPWQ *r \A*PTAQz@zH's$$4W>kedʞ=393"""""V!221�Hj~-*ƍc֭ٳo5j588cZ1c IeGa`E/"""""bfUbeF#WTo /-:u*?gرDEE;'Nl6ӬY38tiiiҪU+F#F[[[8t&piժUsqΝ;=ԬYӲ?AAA�?'OKbbb4i޽{ %**$.rrr #55{{{We&**3gΐOpppΝԩS\pw7w6͍IRR۷o'44./"r#N8Avv6wuWyUV筷b̘18p˗Jǎ 777 vvvlڴ3fЧON<ɬY9s&d2vZ+ }x{s >|EѸqcm?UVSNd21jԨ e׮]#Gһwo{ZhA1b111tܙϊ+hذa}ٶm/"7FL<WWWv @xx8 QF4mڔM6Yz5w&##3e.`Ѕ("b""""""@vv6�󣰰$�N>ի ɓ<C7k}vc)v,Z-[:TNTToM˲lSLaŊ9]vGQn]ϪUPvJJ PtڵԪU{Ɩ-[pww={[!(oСC9r$ӧOs[Zޭ^|I&лwo BRRSNe<x3gp. D "DDDDDDVJ&eӫT@hh%7�M4,Lxxuٳg#33͛7`ggljvڼ;<�|'W &=ԪU ֭[~bbb8qN"55 ;w4ziuҫW/2o99DDDڵk(..t_wykec6TDDDDD:UV (mU~ O>#^^^@iR8eYYYaÆr{m) '''rssjߓxiK$''ӭ[76mG/giYMԫWmҠA./"rl~e9VZń yF1yd�HJJرcx{{SRRO6mS +V/6w*cڵϟ_zexj֬ p{n7nLII :G'� ""qˋ\@DDDDD9::_sسgÆ ÃOٖ'O$**¼f͚ܹsԩS|'888߲qF^y-fͲtR�BBBK.%&&Dwa {a>|x/^̱cǀ.\pTN8 �HMMOBBǎ#77ˋQ U0 u)tM-:vg}Ɩ-[xի>,M6>ƺ1p@fΜoQa c߾}{<?wy(Lɓ ZjL67^l{ȽK^駟豣?~< 4'wl޼nݺ`kk믿'|B2d=Iՙ0aP䋋G%))ˋdVJ͚5-[ҡC+L&;v56LǓ&(**ӷ_RRBZZ...888`6IMM-{R9RzrsHnn.& gg˺ED\6.m,==Kɕ^ !!! <777UmJ-DDDDDDDDkcs3L^a əyxSܼؔ]q)dq"&"hP*N&+n�aLJUmpw^<Z Dbz.5=b2C|jnNT3!1=<r!wg u܂bҲ Yf &9WR7\>M/*66WNZl2k>r~ǀͬJsswI'7Np~LFN!E%k]@v^jNvTj:E~a1j=`>EDDDDOuS>a)N?V䞩?p(|+H<wNSn<{NQ)[t{}LGrӏEwF2ZFd|}m$BiYS.pw{gm%*136vz-s(2{pE&NHęvNHBZNqi9qW$\RW><ȃoteLNXm:uS1 OȩشkZݧy}}�(w:eцd],by|ާʾs�KMGuDDDDDOq4?)1 ^|Oy8⹮<ң!ޮĥhmgW� Ro 7I/ ,plokz6?:b0x(~Vw0kAzM|cf?ӎ[sgb'x/#o-LYџfͤ{)>nN,~+�9Mc>]Seb|_cZOݷ=#=鼊 ib᧓cy-8@Ѐ*߄3 ԏoayi^r2y3;̜绰p3rd8:4qSC >vkҬwE%&va_O%Ѧ5og&e`c`gD,Φ i9?s¢jӨV:8LliWn~zv'HʣC|ry#s9z]2;犟GE%;O`+mI!>1".jW;<N"7?7Z{]>(pe!Kڞ\Lt t\:C|8}*Z%5+cϓ3hWjDjzPPl"y\]-,kZ8͉g4a½$eY'2.T Nh]rAsI8z* L epTٹui'F$gq\*MzHVN>![Í'I:-ՠoA"H$-#;[#_ʶRg_gƮXʮ"N$WXLRZNu}+)0ШeK3^.ig2 ? C1pә霍NČ -^˳M۰,(b{uŢ/p:%Њhxydg2o΁ԪnϤٸ2E&F,˒:Yb1YXS^vn""! *.l>CF<x?slNE8زqE8o×0L]o#Л e~FN!3{/)<ʗi[4+]in첃h3KP,- rl\.7P/g;u bP�yݟh낃m~0ú+uf5=jVpj;ի2f~Ugdm@<vЬvu$݁wŞwUNɶ h`c8Р;v6FZxa㎽푇-,z6"<: GXrwkT'*!g>܎ujyTeݪ# ĈBNb䢽^͑"VP?.РF5ք%0YlGN~#fo%&#IeߗrL7d΋5{UŤ)4b�m>MaGΓ\� k_ucR.(q6�iF] `o1]-<["(U}q|T�`ݜ;Emok/'3�t/fß4'`B?Gtg6K3gX\UPr L~^;Aw5`X^X.*O`eX<FuYPi '1bӉ =[" g2oc=`{7O)d6Op3i_?eXF}g lmaԢh@|Nn$cѾ|q6CӚ�z2tA-wv';g*lv/Uxi:hW<~'Vn>sKkѰEA;#B<ܟpq%B>V3oCu;0aEwo�@JN!_ܝnp 8Dp�6aí0 :ʣl[{d2XiHa;''>#ezbS@xma&GϦr0[싻=%&3='n 6>TXBM,ݍ0c:xrOv0�SEm7^qL}A=Gb1bC1Z e2+R6Zțϥ۹Ydg.�'&cc{TW�? п:N6dOvEP'^zӍXކ?ފqg8pF_KzvO'-=/vPPR.{�]"8Z.(vsӼMQ Ч|P_u/DK!OnkU;Ҳ pbFtd8_cmjZb�-뽈 .!GʊC|Ia{.mЬ&N].VBB:I)"#Q鴨],:u~94ggc`S[u'JL�ˁGtJ6'Υp:6|JJ7EnA }-ܡ+0iO@ VMOv&{d ,Rb5Qo _O7'�2 Za~\RUosg{07gx&W?}:'tҨp28:PT r/~v=\vBOvE.<=ǽkofѬ:/xgH^Wc2C|=!UAY2ݲ\`�wg;_2͢U?Թ|^r* e6]F^m^2%EhF�7#'2xݟw$v*Fn^ն6+*3C`wlmU-sx$gҵjV_T± 뺯?r̦k֣UVs◈8]\śO\DDDDDR6f8ޱsKb٨.4 LJn%d"w\c@j]E?e=_l1/Í<ҿ`QM|XybeZFfΟmҠ }<?E%<MMoW3,6ufáJp-mrLb&x{ހy<7g+mdS7]?yOք'27@aa r#:Ҧ~iBuOEAb1CQ)9Ժ$p{srRI,[ 3i4垓-cg3r>~W\pu]q!;qg[ZNd\o}uIO\9Fg{`f3l;xI,~rJXF/K0t/nawhZg'v6FY[$d^~KM/gF=ЂahImC?}‹΀Ԭhy*Ӹ;5;z9^?=2WI!1#yy6Rr һ-srܫ2=hW/g{~u/$�� �IDATlM僵G;ѿ/s9ıtbSsX^Z1$-}{Ne0sA|/ÖC1dSPm#n7gjNvL}b2Mo翞L"36eu)KOZvO$ '/&VQ�|SĤa2iZӱ4N'9r.u 2}1O )3;OXt[: qg򢝄I!=;LnA1}hTǃ:N| QIMaɆäg|}12k |w3)$<d?9E뮟b%&3)IHcƣĤ吘Y@q8ŖsX">ĕ<9z5ݮZ1z9>"3)ĥ2{2e]N]x&/L.alY@+[hG4xIRd]0cȻ2`t/fb%؃U,uh16G7gԢ}|WG[ǻkThwë&y%]yG o5 m#c. xTeLXvb4ҡ6- 䵪?{c̒J{o o 6?З7a';0cN6ۈ_20 5xMM.@gU^݀ɫYybgc$�5;hdG*^vsrU{_w]S9z7dfp6KGpq`x!^tyV϶o]t kϤe?}�b4\@WX90̸8-_Ӎ~^s065ycmIˆ4 {[O �vq 49OEjb_혻 d3мva ۔Kpۥm^۰\>>˾˚fzpydR=޷@ޞQXd"=�jWCR.SɮpE&s p-Y&3p]#ebKB`{Q=eQPT5y=VUTb"#k3r I + veQ\b<xtH.:JLfR h]fHʿskjl v]MFN!E%;_sJd2 ^DDDDDDDDQ16۸HRLDDDDDDDD2QPLDDDDDDDDb""""""""buc*kҥKl6_v9@HHeFGG憋Ky999dddPF^VκHDĪW4M̚5-[ҡCw1Lر0jԨ+٬Y3fΜI=*۹s'=7u 0ѣGӽ{wΝ;Ǯ]xGumO'EDDDD*DFF^5 `4С7:u0{웾^^yHLLdڴi턈Xu`6+c4o80TJllJ_v؁?uԱ̏d2 @XX P~}.[vBB'O$;;///Zli־}###hiժYYY>|B_>�FΞ=ˡC�ؾ};ۖl`0&DDDDDDDOfĈn:2333g�%%%K;P;,[ロ'O̒%KPx nݺt҅SȜ9s0$''ӪU+6l@~زe :t ::Cj*BBB6mG&;;u0|Flk׏aÆqy9z()))jՊpBԩCqQ1oM>ӧ+'??W_}z_~Onׯ�X:uĸqX`[=zKHHH}fС,ZH'D䶧b""""""͛bIn|||8vDEEyfm߆;֭#//\9Ν#!![Kyfr<eD̲44i=~~~&"VO9DDDDDDb<SZ=zl2&N@||<lذ:{GGG˴\�VZnY?^n{^l~S+0ѱcGfϞOzz:͛7QFl߾3fX̙3+( ժU (@`Ν4nX,"rSLDDDDD>}wwr*kհaCKb @-8{,-W^\pSR7.]v-WF@@�cL:///6n޽{=z KYPСCԮ]RDvb"""""b &tMIFٳgWޮ]; RaO>$:ݺuLcѢE̜9FT6ǎG}1L1sL6mj٧?*((0{ A9s"""""bf͚E˖-СG&;vpFT6YҥKȋ""1DDDDDDDDU""""""""bmXDDDDDDDD((&""""""""VGA1:F٬Zb4 *>)""""""""VGA1:)&""""""""VG9DDDDDDDDꨥXD""""""""buXDDDDDDDD((&""""""""VGA1: QPLDDDDDDDDl6DDDDDDDDĪ jADDDDDDDDOQPLDDDDDDDDrQN1:j)&""""""""VG-DDDDDDDD(ѾXDDDDDDDD((&""""""""VGA1: QPLDDDDDDDDb""""""""buc4ͪ*FZ""""""""bulnd唔ՠ<==kyd2 X'EDDDDDDDꨥX>)""""""""VGA1: QPLDDDDDDDDb""""""""buXDDDDDDDDfjADDDDDDDD`0DDDDDDDDĪXDDDDDDDD(Xb""""""""buRLDDDDDDDD߹Bd2lb4qrr ;;;U\7,,,$66իcooq~5((( ##5k*0&"""W~b899EDDDD4RfMU\بl&//{{{ۓ^"""rUOPdd2aEDDDDLoϙ&=gȕ=A1"""""zQU """"""""FA1:Fkc4 *>)""""""""VGA1:)&""""""""VG9DDDDDDDDؘfnd"11q˙3g�=TpvvN:ԩS$&&RTTD׮]1GD`ؼy4h'NX.VZ\\̑#Gؽ{7TnAA޽0+Kll,.\nNN[;|0|ܙ$''  l߾}ҷo_ޚ-},ۗ?#++,[={2p@z)JJJtCInb/&??#Fyu>#<f :ɓ'3|pz!<Xn'Ncs1~xFɀصkedy&L@QaQx衇,GDD3b&O̰a8pƫٺu+SN."""r?oi{=4iorrr8q"fg} RJP""6(vq@LQQyyUο/ׯٰaׯk׮;b,22!CЮ];V\ɖ-[x3f ;w,WfXXk׭6 =z4={? oU&L@#:"##ٽ{7...ԩSāni޼96mbԨQ'11b /2=zPI?xPĪT̙3i̙3 6իPzu{1lBLL 4`4jԈ_~*dС-[}hݺ5M^^:ujժ�x{{O2~xѣ$$$`0Q/WVLt Ol6S^ry9vѤq FDFFҨQ#9BVVu%(0a9<ժUy899Yȑ#SjUBBBY0z;v�`ذaxzzꫯ駟һw[xpssm|<& �{{{syn/BHH~~~Zju]eqvvaÆ8::RN{4m6f̘a ]{e͚5={X{Yt)fbƌ@b4Ylԯ_[[[BCC-Xt)sΥCp!Əπ�8}4xtڕ#G%K ܹs RfM~G<5g}ƎKƍqss#33Gү_?9BHH=}a„ 0tP ڵѣ;w˗[΋5*,,dΜ9�t�éSʕ+1 <Ʋ|rvͧ~jy΄Җi[ne֭tֵܗ:u[neϞ=ҥK:t@JJ Onݺ/scbbŅ6mڔ+'**kײg]6 [np6,{ѣ�lٲZhAHHgΜa߾}Ԯ]m`֭|WԪUW^yŲn/~!::???ZjENhҤemJSRR M6k׮s?LJJ ۷ӓ[wߑH:u0`�;w^7o&&&�? @n,_qG;e͚5YÇӡCnooo6mĆ ɡk׮rrr駟Xf 4oޜ￟ƍ[iӦˇ~ϟ0 ̜9z^xHVիڵݝ$�+-(mIUbkk˘1c8p ?co >}:Æ ֖s]wѶm[bܹy@iٳg>�xbBBB(((#22 }z͈#0<c 2N;Y|An ??̛7ZnԩS0aG+W@vv6w}DDDDZqyi֬F pq{]AqQJ5kƀ+M R\\l ,^ɓ'KsNfw&O=Ǐ/dVI�-{sΌ? ZbNbȐ!<H6l`ȑL&lll0 :u~`-[/q7βŋ�Xp!!!!Ɩ7naZ&x,8pzȒtё6no> p]x.\ĉYzuo_={G}_jժYY~=_}.+V`߾}ygժUdW=cƌ!-- (kȐ!@F߶mۘ;w.}>~->}:}]40۶mcŊ|G?\{2|/_Nt㋈b3m4?O׮]Ybş+ļy8{,qqq޽w}[[[,X`ry>/6vڼK4o޼z,[3g϶mۘ4i̝;ڵeGy}bkg @pp0!!!@if͚Fff&{%44_ղ+Ofkg?=z|غYtB퉎&%%Û5[f �#G<:1/aܹ<ו#l63b5jt| &Mɉ{-ZXXGfѢE888ꫯZ gܸqF}]KkG2vX֯_Mˋ/K,<;w d>#LBhh(6mbܹZSҮ];<==˕rIǽދP:)))aڴi777rsrٲu ?<o&;w~׼K͜9իW4h=L4+Vȿ kԬY˗SV-Xn3g>+֤2+W̙3<쳸W_YqntNJBBÇm۶w2'NAX�xwTZsҰaC/Y`o&6lЍ/"[6Kczر >;w^vDDoߎd"00N:/_`6ٸq#~-+-lzey Opp0qZtt4;wJ*еkW^u/^Lll, Bnnn$ֶ\Fp�i[[[rvx`0a;vVZv%&,_֭[[7o0 2M&Y{nݺHzz:&L�>O>GΝYr%FM&%#Lpp0g钥%gTTEEEs=iшh$00#F`0XlEEEbiQF BBB*<<y_̚5޽{[###;dРA:ѧOK׺EDD駟bccҥKiѢFBCCaѢE9rtR:vH@@�_ <wUnݺY{AHH/>>ŋꫯңG F#ϧ]vԨQ;'_Ӈ@6lhiivQRRRt- 0qr2e>.gΜ9O˚WR^yN>]nHOOřx瓝]n">s7oNPPPm+qF-ZTC_99TwNbb"bȑ`4<x0SLaʔ)W^4jg}Fڵ3f ݻwW+1z{;{[֭[ &QnZXXtС/߿?fgp lقSI۶kKiʾݾ}{/ũ+ Вߟ+WZ4*{-Gxg,(.VF `Uv1cT4ХK{ڵeg-7c.5j԰_DnuT&\nN"11养;u֥I&L:Fbb"Wt .ꫯZF>|ӧg^|6 aĈ>իӧOdddҥKͥA4j,X@\\Ν?ť\ހO3k,>l9qYף"҈cѢEL&0̺DDD*͛7~r?>e*VZ~Q�� �IDATlSNFo{{JթSkڧ MRR]veĉlٲ*WӢE KЋyzzҦMԩCZZ`۶mlذ^{]V}_{�򆕹e뮻X~f*8>T< H0RD|0݌cSLa׮]x'8v?,TFGGGN… y-xyy1i$ǒ%Kȑ#-կ_ŋXn>OTTPΜ9| 6̲\:uhР�gfʔ);vdرnG}|dٙ)SlZ 4W^yO?͝wɴihٲ틈9q%qYYY]WrKȯlx9�`ܥ-.vi믿fʔ)lܸŋ[ bذa]/ue:[oݻ˥!nݺzz\nugggr=7.}ԟuWYjصcԯ_fܹ$&&RRR_fތ?dLJw}233T_? رe˖3$55'''}6lؐ?tTRX~ׯ_2~r#GdСa9͛WO?߭[,ӰaCkrʞ<<<.=55V^}#[~ղʂMe+ZZK_͛Gtt4O̙3L0ٳg_5 s5 ݻ7wxxxԩSo8(LRRWU^M O7*nl...+c4+Oٷ-WyՑl+`GsikkkJ* &"""֨9s�0k֬vA_y'XjǏg`~\1W҄S-zԪUZjѽ{w&M޽{6l?לr|MtNj{Uiڴ)ObY#9yoU9DDDDDn6aaadI_P)))a7Ͷw`uTo6:t(M4a׮]�/4ObbbuΟ?w}wM9r$M4Ɔ3h siL&"""�* gϞ>mۖ_~Y,V\ ODVasL�}+vtvv`…7͖Zٳg+ |lܸ'''K rwP\\̂OkuwxTe̤;)$tDYE@׮+(ઠς.K& NBzI2#8!JJyIny{3yj>F?%wިjvr}"rT+--m/JiiiUUUw韮nx Ą}[Xd :m65vO!:I !BqrssYn�}C a$%%wSǵd…7wy3g0믿~z -JW(|'9.f 2*6mDQQC ?Z 5_~%.\`SVVҥK9y$#FC}u[oqc̙Kx{{ŋILL'dժUO#svvfΜ9L>I&ң{+ٶm;wQ !Ľ@bB!B4GRSS۷ڵԔr;vI1pӦM_ތ1___>S/’%KXj| PP{Ck׮>M/\Syf6o\o)S:u**^8y$˗/ot-ѣG_|ᆱ_ޫW/,X ;v`DFFsΛ:ޘ1cP*||umڴO>!00]kw{^݁b555$$$.g@!B4t%`ZFCdd$jR5׍N#33333lll�xX|9k֬gϞ=vEE011ɾҨ CCF3))Lt:t"DTbggGpp]s}B$ńB!}'Z_*ݻ7۷f !w#@!BԔٳgOwRSSر$ĄBܗ $B!BLo&?</N[nhZ~G~T*͓@ !/B!"Oޘ={Woy^xo{HBܗdB!-؀۷/.\ //J3!5I !B©T*|||`!h1оB!B!hq t: B"!B!-JLH !f9L˙B!&^! lAmW]׳gO*B-_+k߾U5jT( !B\ڿC|4Xv>2Y#BAmwo$@B!eRSi^#B,,,+)) !(%!vgEGFѴ@AAD!B!(u:]tfV!K#=|CFѾ3|#>'rE !B!B47S,7=2 hh.䏩\B!B!ͤ735oEhw?r !B!B43eK^wE_ <)OPB!B!hfW]]ͻo"6:G$(B!J!BFbwJb'H9|G*B! sss B!n) Bڄ166&%9U"B!BьZdR,'Wͅ|j_k4_�ggtZ\B!B!ͨE>9լ$�Ͼ?C/HQa\B!B!ͨE&žj~uweqL{zLt"B!B!NCPH$s6 d&\!B!B4$<SP*B!B!@Bp6X'B!DWZZNw CCC oj4 M޷jk111u:XZZbmm-mBG&!#B!hy뭷nÇӻwҿ2a„̙ՋӧOɾqBqHM;ӓ!B077?6mbƌ888p,XFa͚5lܸΝ;+d 1!B!VEE| _5 'N`W>--�<<<@Radd@ee%'Om۶DEEQVVDDDPXX#�dee gϞEPU@zz:Ƅ`ee`j9N#)) ///j;v Z aaapErssqwwtԉh4?sss:wLvv6бck:C\\:\]].]=vNNNx{{GFF WWW8 !dB!MԩSΔ)SXlUbь9'bjj / ׯqqq+;vBx y60uT:3;wdtԉh>Sjjj֭111~z<==c|;x222Xlh4l߾-f"&&zCqtt$&&EV`͚5,^333ر#֭cڴilٲ=zo1dfϙ}ŸEEE1~x mXd =z@ѣGfw΁xgٽ{7�[neL6 6n:t]g!_)TUy"?l[).Fm` J?3A}!.ھs�aߪQUSt<>>ȏ[$,eQTBv A^6yYj W[TAMS ir+:9'[3M8Vn-:B!.6mАp>Ckmۘ<y2:�]vemwޝǣjի)))[R… ٷo:ujG?!!!t:f͚Œ%K3gN6ϟ?̙3ٽ{~&__ܹsmkffٳYn /=z[biiɓ1c+V7�ȑ#]nݺۊbÆ 믿΁̙31~ ccz}(//祗^b޼y؀x?hܚYf믳rJ^{5>3}gѢEуk2tл&B!nWh?5;߬#|3VLGDOm̳gط/9~.\W@ n`yiv6[p8nmZƾ})HH}q- t2ty~ EY+I뉈Ͼk?>)Y&LK3ifϜv_~qt�>_䷁B&ŦM"==;;;lmm9v`ɒ%]:u~ǎiJ%<C(o뽼oLHH� AO?5hܹsRPP@DDXYYaZu?saii 9d2z 1#Go�,--&;xА<bcc7n>>> 6Kxmڴ֭[s)<ȶm()),i?ėGGP0.ooxY8Xk?|Pp!WaG\{" SZT::}zꑶX:#ߟ則6i_⒲8_+oƧ6[lkt~ SkgyeBqO;z(:g}VLӱpBq}b/#Fё[RxGؾE7׸cU3MLL(++k]rr2EEE,^Ah0116lXc꿷nG[Av=%%%( VZUoC=!� <x^ɘE駟ңGzAPP999w}B4E�/ckcZTs|WbʟS�C5�x奺 RS)dϛoq9d EgԿ?'MήQ}޳g۷og„ 5Igs$/vc(&l>Zyn.ğdLsd3=�w,?ǓUT><1 oj=­18ӻ;<Ũ\V p/<,),g٦St:3C& j0dQPR+^>6w<*ٴfُqP0oZw\-Sl>zrM ;8c2!&9[NOnYvgM1e.; %m ju:e(@B1CP')/{Sf> F*$j}F<55]TiY,^ܐZӧ~߫`_D:b4L U|Bo,L _!mxb>sF5))~q:tPoSNJ޽7o? $%%… rssIIIiT& zrssiݺm%Zym>}vV֜9s<y2o&apvq&::sv:t讏Bl8pL|�6^^t_K 3c| "dkDG(ʡ ~ !cޯCȘ16t6}6C*+*=0sv嘻`hnN˱vv6_~EEE͚ cyY#&> Gd n{ ~S#51 kڧ=?SɁ~3v'[A&dؿ3� dr<]ߦ9_ŋpq n5#ZwJ fp7/̌ 78qq,V\X#ٱ7 e|?ՕTUkSW2c\>֝ru9~�{s W;G57ngD^ZtF2mxS:c(TŶXbyΔ|F>T[1np0.on<7[cyɎ<חg̹ &1ua#{x0?y_"󉈭׾?G�k<䷁B&Edd$;PϏ;r`K.e˖FFFcbbc3v[̙3?~2Kk܇Æ ?'33SY`'O-q }l޼vZf͚1eeeL>̜93hZQ(TTp.\HMMFa޽B4<?Xz$oOgO==iw-6ZaphŸ1ޞک%jlmw-*0�֭jk fߗ_R<c:V޴{a`V^u'\ ;Ok}/kgbolLHL\:7P0a~L|ܞk5YʪvJG;TϛGPQI)mM{Rc%fhN=VftkJk 55ZTt CjtRi~eBw](_>'+t`kiL/RU4hPInTdVu+M`PvMl~865{׵n6s171lX0bF#Ϟk$�ɖ8>}j|'.1XK,zr) 4e� Fo!Mmy~m&OoOj*LLLHII6[ƍ9s&5{v,]'Dnn.?xZzbʳSի$''ꫯҷogccc,X?/^NߟoJbժUOT*y7߿?{fذa<=i|A<<<ptt^_dٲej5w+++4iVVB!I&w"n?NTABA_jՍڿC n!yl:A`G~;L)+vсncceǒ 0VBNIt]23:DiSqwlS g<ّGW2 3Ƈ1صwi-*Lz).�P]y3JxA>g{GkSMj_R˫o\t]M츰VM(n �J*Ɔ*�̌T褀BlڴiL6,&99jS_ٙz5S/CԱfѢEjׯ.ñH:^^^WY(JLFL<<<�,XP}K6弽ٺe+IjM2)SԽ?sw'..N9yjSO]t++;gKKkY!DjI\,Xcg}9FO{*J!А~SKKK###on ~T\&&DR#i�� �IDAT/ٮq[?  )uTK*`?'|8El%~&sShqN,PDD Q># VWngBEyJ5}}Y&P1J~YFA9v&׍k|j5qqXZZ$)BvWAT܌6mqphD &cЀ8 !h-Xf~Pڵ"=jf^ǣ:FFQu掎d/=MdzkW 'oU%%$8c<xpd?Ie _MȢY8XyKNyЗoD]X{]f^) o΢_s>>v<Vn;SU|1$7RUTSZQƝ 4Xl.7[;OQu%_mpz-O=qTTՐ[ʒ_5?211.]0w<-!}Tbnn.8 ! NwC3(uqh ?_~70T9šk YTtmcƐyYc/@S�wLj C[Uň_wԾ~{.I {DLNO=,O?A22ݻQ}mkOS=ɬ@R27HVU?p[Jks#U|Ts[{<Jv`a0b/96|~=]h?؇;bXwpfFhkXZLf'B55sY5v1x>#OiMv85TUkI\57{36੯~.LZ iؠdj�ư5K۩c:yq=f>@~=6Y !^էO#8 !Z@555$$$2 \<y՘Քfd`de}{**,3Yhu Vm=IlF <߸`AI%%+y?cZ鹥8٘br٭M!`| +�ksf93 Bql߾f?8QTH!B\@4p/331Ų3@_*kx?g7FikaqSTdq[b،ɰڛ56o̜9s$!&B!1I ^Ֆ",LT^0@/ylڵ!B!ϵbBB!B!O) 1!B!B(@}!B!B!()&B!B!Z@!B!B4-6)j[G+ɏ@S\L^t4+n[K^l]„*Qg.h>&&Rz"�Tԩfuj�N'ɎWpd#38wAlj'b),W˯siEdJB!-JK%eS_׿LVA=l̳gط/W6-2CsW;z Stg6lJ6@IZjqԩݲ|-[8 @8}:6'b.2i=[vG7y$meaO<s?E5y_,>HW$ɫmℏ( B!EiqI13#ړLƣ0wnn£Mڧ$3ӳg_52ѝ;pcst*%,\ voZ{}0UF0o(yM3]!B!Z26`[+\l?9oƗw/QKbeDqjj.�^v~~�hjN^CƎ( zd8a[z1S]Cξ9ܘhbogp",AK @N"af�FQ3qlߞ]PT".QSYwߥ43B&�mz m8䝋ffv8p8 8[qi۸d]ZZ~)Mrt:X+w &-GFyn%pk^7}ODq_"�d[z8c MU sYxʣx;Zp "*1"}՟|m>E iGu}h:ZO iM`W4UZ:ˆ17dxT:"icͲ@`޴H'=ߢV>_荅5[<k&QQe⃭xok xgzv࡞?[?'"B`lT xi!{$q<"x7)~*6Es.ܙ0u(B!;v.m~;} �l|9�dEFwx'<E㣈?qd*%|;mP*k|EnNʶo3g2FQUVA9:iy'Oחtǿc<u*EE}ts%`#>:~MWqo09eQА1c8SSBƌ!duߠ[MZm=U@�fϦ0-}f骪HX[n$taϴi}Θg�?>'ߒ+8eajȆq`+K F'Uʨ~%&.Q&f1˗/o7Jj˹90?s)///*,eT `n9H�ISл{Mij:vl|w*5|F{0w+ ӥ6^v园dGóp\~R>Ɏ<X($&1ua#{x0?y_"󉈽xŇ+#Lj6$\ARIa0mTJ{Owgw/?@Nv1brxj?-<Fh9zKqLw2sv#>!?ܨkkqθ6<Af !B!Z8h\/P``{>>8�`I;OO#G?!C�hL2vl )~W_Eܺ5TUv,}P+~~ک'.QWQ\ӫW~UW3Ï ..]q<Oǽkܻv!f"N``l\/oKq\3(MM<( 043cS>=#ss�< n;cngGܹh0&h@};={6<=WR1̌ 6n&ge0 F<3 @u-RWiK�G::[`9 Ƞ~g_ u.zy0`2hc<@kwKh E5׎W[?{J*�hH"'[toW{ c8x<vNmjtR̍>2'.N(bh�@SvW柏bl\͝;ӟ`_?ߕ>KF˲U{mX:VHI@Wֶ;;v`PVQCvA-}hFlNMO^N쁩^~->؈kN!B!7-2)�ֽ$: 7gT 9u\<֡-f%ZYm~cax):o`»s)UVЮ}]B mm$Һ.bHYq-Š\&0Am@Yn>)fnc[{P]YQ#vttdܸqMzΖDO ~;LaY ORMϕ pQO؛`F?k̤6Ybj@BD}))Tw{qo+bJ"T5|SKuMMFmjal9P |m/RJax͌TkDCvQrϨezԠ`f:/pQ3wblb@;_[.RF1Ɔ*̌UdTZ 1C[/CIEubB!Bt: EBK"W{z<&nTfZ)-mld1χ+okg%Gd܉XzzbbfFI굟xyM迮ȫK\#Ib/#*W&6-,QZZJTT4ff\IZN crq1{jo36Pr&.¼oɋ9ď`m̈/eE9.hZoJ 9arf},]#OZ6~Vcλ!Ɔ*^^?;m*-?cDڙ?G`{>v1mщz81#cvb5ZKVZ7:jx,-- B!B!7ʖKITE45U8Yhe~Ϗ5,ի)FS\Luέ[SS!@CW]M�yyX޾�?](>O܎Acǚq;vhKL$A/fbaNy^7=// cc8qt:bːPo .\ <<ߞ$cƄ>ȢY4} z{ąSB<M h䂏)jEPUW[XIEU^#<XGo/zyeOU5d斲t qm?C*׆iWťIDMƜe|7y?s */`=}>Ԭb�+D]ZˣɣI^q卽V&&ҥKΝ')B!wdZn!SIeU,{I�I~qVo^6wT~U 澾<f �)m'X۠)QqX`*)G֥ ŕ}۶e&2a/ ;�MJ2 1$D}ھ67m·W/Y۽~u=�`xc~6 v Y5u#e7^S%7Lᙁ>(/kn<af'ʫ'3oVTSÐ6 ׯ_.9"p%u\?Qcmlb#tkY];p:L݌O9čoBcdTÐ.sK1:QSac? سw\GĐ-K^醇->i0h1 ]Ix^Jdb_o2uf`O3~f#FV2ep�}:y]%(WQQDo%)B!%NDKn@MM ݙΚrե(J%%ɓ x/n(xJS5j5yy:8\q_VKif&fr?yy-Ben<7s77!U5Z204PbkJS\}^ʜ'MU &7ܧR͍0nfafbШiMLCW;s w UUk+ CeŽJKF^)&z֯_Ϙ1OG@@B4۷cn~3@\\TR_Q!W"kpogp 殮W%FxBĢ nC_6Mަ(/1T)r-m[7'禯jo23ƒpJ-=ƆJ|]67ofΜ9B!Bܷ Zj}qu_,oCMܼǷN!qgڵrbB!Iqg/A Qw!B!hdB!wo]@r xQ/6C;s_RR[zxϝG9B! B!wܽ9|3^ KFs[̢R˘nwXΠ#LQ.�!NbB!B%n`yvɲ j9_DX5 +wg3]M-"br+t?tr \͈O+K,j48T },P( W]E; /j'h45ҤgK(Rkq3ӾSGtwp4``1+ΐB!wۖΓ=y-&HU:}-x] 5@9,KbtjY b/~!݌WtLH@9ΦwS 6Eͼm8Ӕ'&3*s*1>dC29 0=T&_]ſq%L rB4;Ic*).5bii43>h(:k nj�|\,+E]^Mu+&69 gU./=ʪܬok|ktĦd8ٚ`-3B71KOuep':=VYx;oMjv9<J-mx]ly:ۧ(9fF \\yk>@vY Si83qՄ8|/c 1skcvl\Lib*'\!բ?y,޳q>6 @ٳlۗzۜ^ ?01}Rx~0�D~m~)Yjxu5;t$6i,t+Nd6NNW!B\Ѫ^_P+nkA'͍fDKи]k?T�6FTUkQ)aL6䕥 :Vu4Ҭ.gKεٙPWԐUFeS>MTWYX%'X!]*TdvY8X\W+ܟ.a&m+ϲo+ BтeUŶ46-LsY_wr;s- { eU㽝K)aǑ6+mClr,E=y=U:Eެ9*bg#ݝˆww >efdt[+^ԡZlR?a=Ǫ]֬͘bD_殮ط)!W۟^S;;y#cI ̄)()]֬";Q#i( fŊ:uiӦѺu&#Y3jFfP Uuo~NJ_hnk;h ɘLVs ~nu ,MF@ &* kM.~{ڈGk[VTlE￧ps#ˎl/lB!D WOb.m]S*Ekmm1b�(Ps+7o[6Ew}rw5,|L07Vr漚V6r!2' )ll3*5tjXRϏW�`E1McDM ch(ۺk\Gˋ*[�H۳uj*"~5Qa^SKK~;mM z />XX`R}r̝9**/c6zc{;w|\n8sc^ZP)ቇ9qٓoq<=v}7TJ.֌/9w>1QȌ])+\S:PR^Űn.̝NiIѵ=ںmǚCM,͍�05d+G !/]Zxa- ofyQp0Frt6cDlxY[ 6}CIgQXVy)F;_K^r6&%_>׬W]'ޗWRŲ`>_nKI VSozh�� �IDATTSSCBBAA ~SGx7[N<EXX`X[.<A0f st,ߏBdӐ!xO@q�8KlHlt&H=rsKɓ޽{x"z³ n霿OՕ}/�?QY4:M̩E#hmGVA9>p#{ѺD0gEsw@|>`KޙܓGş^&F+lxڸ+Bqoߎ ׿�GR5{}^;EFK[4 J7Ƭn5(16h}MJ16PPѢӁ#+& _g:B)g03Rr:61 ;!vmvN( 8w@"ʱ12a5Fr%m^~e$]96!(�c#fV:ȯM:45F &~{7rζ( l3-Cg28}.�{K#,j ЖҾUbB!pvE͚p5֨r+bd IfF7l.{ fB{_4f;f-RXʱl/XRٛaod@f+TܙyĮYCz+++_Wb~iV!S%%Ν;GAA!>{2ZUͶ~B +3#*ju]M[7~3&t%ȫcMH.~u7><ΟOoooB!Bq)[ڀ;>ȿ`鳏W 13/orS5 ~u:>caZ6KRPr1ukqI'w�Pz"iG6?}_yvhʢ]dQ^Yͺ_ˣ6:q4&mؙ2 ~BS@Lr>)i�r!&CţŲ׆sXTT]ta֭$B!B4f/;G?1~Ƿnn\u4"8vħv?Cǎ e?k:v $Śݾ~Skq*&cns""v/d0_VwKzsٻlz%= w MB+^.Wů PQTҋtBIHH!-?h&y?4{93s&'3s�> =9գn-\3k?&.1Vʼn;-s} ޑDDDDDDD."D.DD^nٶ ;SsE|ut8ݺbcͥ8?&?Z^q%^9x{8d\Sf!o9#-r3A>.LiH.ɄY"{W^yCʔ"""p'xp; M("">Gp+l6Mm_-dk'kNgι7mIʉR\z :qNx{=O@yy \@&ĚkhϚEإnٲѷ#~y#ʔWTDDDDDDMccϙٯ_h~mDDDDDDD>)""""""""49 H49 50幹@ea!9 XDr%PYX䝻?e |M.}Ui\P,~O[ڝLɂ+Edzp�O.FH־-?{.Hrg!""""""HZ-6+)9w->.�4o橞p S<E] EiL6 *.,�FW} rW]Ş>2;K}֭)!n<2-#*n>w˖�T}\V!Tf!w5k)̠Q�XQÆ2Rׯ-UST6s(ڟH'CUq1ɱ9KP))adîR^^vxŗHO?_."""7'99Y !"" )�{SN_KQyE)o˖3�0z͙{MzY~~Ķ_Ѵ7UU|]s3÷kNyn.�ߙEt%99|Jr�Ěsd=JNʱ~ѭ1AY^^V4g'îc/�`ԧܷ^OL!b OTm#7oҧ@֦Mun+V0c\DDDDDDDt睛KQQ1O.\I~q)+D""�34Ngc./#v󸇄lKۼ_~!GZiUUH|}-\Jgx8vNNܧإs뼃Ic6 @<ZGs'^aa> G:wfߌjx;oooHra~~ѣ{&22f,vA=[˳rJ Fܝvl6=;sLƱc3Z1=<H\f[WcDىX-ܚ5|Ӫe�~}zj"?sy�hٲ^׿o48 .dĉ3h YhSNeڴi3LƍҥKرc7ob""49~bl8b&39:crpd/owG ~f"?&#'pn^ߎ"sru͵VlhgGiee|񔕕ӡC{\""""4 L0s<̙3;ұcG5yKI"1- Jf~_mpvohKU%l6lf3i۶Qvnn_>uգmHE^~ͱ.d_GUQ1$/X,2 = l 6ݻ)LM`2|XJms #&&4Ho<PK=mFDD+W<۷xbV^Mi_$n: jaÆ3w}W_}֭[l,g^^֭#))IMDD&7Rhf}`uDp7g__.X{ˣbĵE F~�}=\KkStug洉%"A5̥|xr~/G_xN V<; �>  o{lC?|潓իW7$..Ν;m6\\\X`p-tR<==kyxWjOxꩧի|<<#g/77GyWWW^x]8iLM-hЯK[NoEvQ)Nx97;v5y.ܲy%쌸<Jɭ۷Q|8aa,<8'ooF}Ҍ \7pk&Σmڜ3ݧeKF}eY'Z̸Ƙuk)M?KPsҥ?64 qXxA.!"""#̛L,_ݻ7qqq :N<x'|_#F0n8Zja0m4<N*""Pb]jt:1p ?ŌxDD5�e4p wp.p :#oшks3elVDDD)++޾~SztM5ZZ#6l؀=#Fzr̙3mǎё^1iLj9N',"\ !"""r\ō~+%%RڴiS){{{~\Gǎ1NY_^)S`oo+`""(r6уupylggg6o|}>>Z}+X:Xb�.4 \d̚5Ç~zm5,&&ݻw'11hk 4^xf͚;BAdǎ85H#5zh׿?IJJo;owu/88f߾} -8p h6EEE0{lZjE6msРA >'RXX&"" c{}ݧnM&z)n&r3gdsq}/ylٓYfa?Oĉeܹh""ҠlϴyX,n$}ǎ8uzih,YR3|} Kbb"j*`7|HIIٙZ+AWyy9y}f3GPu\;<<duX9@|Mzjh0P/,<Btu h.\t()$,?/S7TS5\L4uhF�zW Yf4kDttQ`2&x]tYE<״{55}sy7ڗ@u${wY3sq(%VZ.-%V]YhmS?D{<ogm[W�fޤwFdh äNcٸB:�e T&{yA־2mHoWt&$>{Fl/e-�((,#@IDDDDDDDΏ&#i㣇pKs4-_^цm?F^~)�[apj=|άE dV1nl^BZ0iLFh.~r.l�OUҠ>a+-מ"=Ofl<]L\{Y(7 m?&v<5 {h+oKގiٞ2>v'?ȢmؕPou�?A󉉈HCbt eXwA>LW"|uݜY0!�e_M^1{Q׊P7B=j]ơn{y- ӂb:RUe&澡-NPTZ @+ce(e%]oE~,qߗժKf^!~n<OKϾ6ƌľC**wg;ٹ?>G.m͋^ NoӉǴ 14'EDDDDDD f)=BYVVΦi\:Yw]O7+L ]:ԼۡVzǖ>W)ʏڣZiGpjb*cxӾSAf\.G3(]y^E:c\k{(?Z5pZ%ev  A8bT-!y<v%X6FPi}i CZ o;4bMnN1G{{LvF탃^f)DGInb�vFLComsߠpЍ�:2ؓGhɷjm$MYJD!;^˩hAN;lV+eE%x:ͪ5i"""""""t4b.8Ռ s~lVo \XO${$P6~Ioo]Qk)<#^Ȯ8;;�0xsU$n`w;Y)yڿMN8:1c@Ldxԩ.Hflj#: ljw"�kv%@o3T @VD{SVe[gW|%۶YTlr<J':m+,|"իmnٓFV^Y͡gϞv""""""" \hʼnǎ޹a}cGp?ּc�v{mü�gV: *p3'ڧKp&|gTt4P;_ۙyu1e)o/{; &!_c�L~˙fnl%υ:CQQ1�ѭ)DDDDDDD8vسX,$%%]j%3OW.;vѭ[ vd2r˨4[hソ[^e!+`_Whx9SVbX6mHLL=DDDFK,յ Kbb"]E|.ȟ2g^QSSmhHz�y;|wse2@oo7n7%\ +"""""""u"""""""QM """"""""Mb""""""""((&""""""""Mb""""""""m6ZADDDDDDDD`P+4f=Gr)( h.5YElsM{W$@DDDrv0 rj z)=\}/~ō޹EvK fbv:\~X V`3+؛~^ϽhU"km"g1n=7%]6Fu�܋)Sk}^#Ù9Y럷a]R*nMAIY|~L֎pߚm{S (0j!`Z!JHU!ks6W """R&*䂝dhJP{l~dCr<ų>1fЂlߛƌp8NaLӝ!X9J|r3Mp_ eѾLQ8P&}#Dph`q5:s&qE ">f'krպF.8ũ,/ҪF.FFuBhxkjs9z9\>ٞbGz2¯N?QL־\MEywWG;b{E_\~;M!RXZ=ګucܜٜˠ]MOwnab{E:瑌"lέ#SPPϬbWЭm >׷K ΍c2镌HKoX+^6f̓?kRUsG^ۊ"""hMnVlmpmuuq41bPc;K;RXZɑㅘMVvglb{ERTVEJp"}k}*F vu4]NĴ6Hr I,őV̅y\=٤XowGNMAKcXi.ɟ%>=6ƥɎ+,+_ /;q34ʛ�@+=p wqFFr뿺̥Ny%mlܙRkM\9fN)|{{#;;\svBZVv)f߻NȊ)Z-{tkTziKmO{s�Lyk-3UuDGF mY<0ާ2xޅjbq[Y5󈍘33-yc@]L9'cSkxWLvʋ6$_FyUupb#7 Fұ\p9%fbo21ʟ!TTsawb&Ugh6w$S .,Dn 6`S|+dթX7;r-n{2f]\$bdzx4ޝ~㮫;;џ諫�wx4g̯ÿ J*e_1ͯBٱV۳j6YxE.a�� �IDAT9ݝv[瓯  f=36wǼ0g+#:g'7 b=m}syrv,V.0l -X,$%%ݺI6qtw>-*'׍NCgH- ;r3}\Ǭ6ҲKpv4tfɒ%1cILL$22;;= """fRH]:pur;k@_OW?u@.QM """"""""Mb""""""""((&""""""""M"̳/Śd_DDDDDDD1 4)z|RDDDDDDDD&3[ ܷr ^ڋ_=XDDDDDDDO0l6#7k..K/谠S^zի_ MnN'x賥Lч GA ͛7'00@WDDDDDDDOjrO�0K{sIH J(2746RmX=}bF`WM """"""""MD9;2oW&|()SOiB׫Xl|>^if. LADDDD.2KK~Vo~~>‹Eb'N&Ї`/�FSQe&Dnc||<۶mR=\DDDbTUU裏uݾ};ׯg ,ZH_DD.&t'>3ؔ@`3FS;KϞ=9qzH#PTTD\\;v ''VѣGٶmT*--%%%<RSS+##|҈#33Vzrr2۶mcϞ=5_VUUq***ػw/�;v8rskI\\\~ܹsq})>qubഏputfmWhꘟ+"""" \NNSNeĈTVV2k,|IBCCYnk׬o8p 撖FHHH~Y ͍@fΜ3<Cpp0֭cժU 07h"x yh߾=ZEjJZnlӓ^z 7776mĢE߿??-Zছn9j%44.\M.(f2x92<p05:?k2r3:ÇywPi 3f {ʆ 4x111у-[G޽ٱc111gϏ b ロ bbb{(,,n`||Yl< �$55PfϞ͋/ Go߾#taED35Պ99 ˾fs;v ZnF "" >sRRRHJJ"** C2sLV^MLL ;vS۷900 @>}عs'})))XVVk&SM`ё-ZIEEiiiX,,Yr̚cEDD)Lje?H8x g]266^O:t!C0|p-[V֥Kz-:޽{2e i0fX:u*fСrϸ{0 l6j?]a4Ϛ֯_?|||t{XBJDۛ(/yM6"""""R?eeel߾ڵkTUQ[PxJJJ{DGGSRR¶m۸ꪫ�0a>(ڵ#::e˖QZZ PȋʢO>lf9_Gl6"""(**''[ 4<f oN/X`̤qA"""Θܾ?4㉍eƌ_Jz7|CTTcƌ_m۶>|Cee%۷o/dԨQu:' ੧ۛVZѩS'k:C=īJxx8iiip s9L΃ҩS r^>_'$[7ɋcGݺuU9%KZ%113V^M>}=BQ^^^\*,,@qq1xxx]sLEEͣ...XVJJJ꽪yEEYYY-""ub6Y~= Ӝb"""""b91�wwZWwss;룉\5?z~=whh:ԋd:|E(&""""""""rQbK7$幹@ea!9 XO,*"'!e3IH)= ZswEDDDDDDIr6Mz>S#;w,0{-͑5kϙ?8g ױw͑#<|;zwkr#vN-\wއVOH2 y͚sD] GuoKDDDDDDDDΟ&{L.kLp�۝ޜcA-;! ֢G,e=f^�Tiw$.]Jʹb#q =85Lr6oyh 'Wt=t>`nر8\85oA;Dz{'ɸzzٿ<Vgdj1crt"KZuM߹s)N:DtfOPĎoQw/-"ئMp|'\{͵;9"'mʏ$4ƦYA FvQxҷeKz͙ WX@9,zMJQF^~T=++I35<BPL 'O\R!ubx^X2tEii�䥧y$9y{x}?@QZ_O\4*Y> 8Xneq1Is~i1J<6hw_v^iwػZ;+nɡ?Y |7laȆo`ZQjE/ۨ:p3k«1|V.((`ƌ7ɩ,."""""""F7C+KJ!$P\^ _D�t:R1w߅'=f ?>Ӗ9m.ea59ګ [-{ysRh @@~tz�:?1n_G(ڴjڶ-f̠p8|v\Aݻ~TTԽh޳' `#Gj%cGLL`2Qa?5B+yqذ3 c޼O5ٺu+/2vfѢEzWi�\Ps?5ڻ:P(㋣'��feyZPdWe'N`Xp֬C{JRRj^{uP[f8�@ΝX ~yMzn;cELV-[wX-n||0g&Ndˤɴs,= \"##WyZh 3g.ϧw^zgk1X6v>kpmu(,f6c0*~$㕿st:VyQJLy]YsUUN�ho<s:W�VK_tG JX%XS :坕ѣ7'4___|}}X,?_M󊉈591[,3s SZUš+�8zޗ|rعػ8d(WfsKRϱ%)H9 :�B/s撝@Uq1׮syyqb*|LĈ$ �呼n� Rlm;|ZGa)/s{!&&-Ի]]]15?W)6~fWa-n4usf٬L [{c>,?1f\VJg%}^7Cc)-|rVpnLη``OEa!cciٯn+7Ft!_>nkUލK` IWbԨvgRR=wuwAx߾XXu}Tdfbt׏}Tv3#\O~NiE1l' , IIIDG(6[d WG ~;֭y7e?cnq\0(>~'//L':w.Y'Ô8kPPMWVq내L|k-$FiV&*\_s=,^cॗ^;ȟdɒ/cX(+BXX]@YjlMn#HG㭠[êqF{{\7?{Ʉ{X% 7~!yyyTVVLDDDDDD̤ O~ RQf͚DDDDDDDLjãys<1lF+"""""""QM """"""""M"̳/ҎqjFjÆ \3 Xr%Ǐ[Νʕ+օ&è9DDDDD.3g2vX>3rss;v,˹;v,""dh?o6qq h6l@TT.4)Dfr,( w~srϲȌ7-f66?t �RR(JI9/_nݺ)"""g5|p Ɣ)S(++ҥKꫯظq# YnEEEڵxKAA˖-ѣ\ǎc|7[NiHDҲx2CRs kL亗WE4|�|ˡg~v|slyEVױKJ[͑5kkm0yGNbbͶ-`S6Z>n|W_aK/|p<=6T󈈈YL&&MDbb" .} J.\Ȇ ykWr-\uU�̟?{;{wcǎѣIMOǀ={6vbʔ){"H(b[rKs)@FUfKMZ3-Y:Nr yU T&K|k&W.X/ 4&VkPGL..fMmyϮ?VVP@Y&mHIMDDD)""~~s:tI&o+]־۷og͚5^fۢEIHHo߾g77n駟fl޼?)""w25J{qTZ,ؑX+mcd3z` f|VIkd;^'/(Voc3/ڍMP׮�ly5Jk;;c%D\u{>l.}Y[&;)3ߢp^\[D?!Mr'ٿ<Vgsˡwߥ٢Egd8z &wwFua7w<Ҏsb/VRWO?e99͛GƲxDEnٲNm &ԫ}m6f"""Ǯz,Xә1c  2f[pH0{/9rK &Q(ƌMrJ :t耗;wu(""5ʑb<lqִb"qsr`_j#Q_h +<>UC>v7ވgHHMz4ڍYbwY~~Ķ_Ѵ7lV+?0 V7evU'_nF/ iw㍴F]GyEEDv}u)=q͹tT?߈ؿBFd}bprwǓ;kUuE\څÇS[8i{W }3`ڵnc6qssջ!gggMƒ%KX|۷ok׮o[nkm< M:ȑ#޽;>,vd2∈H㉕4 W,{YȂ7 B+yqذZQur0:-`߹3\^Fq?-f5Hv0פ9zyԽ;G@E%Aݻgk޽6vpʿcG##)8rR }rt#�/'09;h=l7lq 1>j%M"5>4-.0oާN;VZZ&Mfƍ̞=m]GDDDcǎ<L4wyV`bqL^^>>>-Β%Kؿ?)))|W5_kFGDDGUсbGs&CkΎ c3Z1�Ā9s0q"[&Mŝcq]x)O-h5n{/Db"?x#GEN:ބ}558a(.)à j8ǗcƌWx{{CѥK^u<<<aDDDNnv>3zZ{̙3}ТEӧ_:gEEo6#Fm۶mۖC2yd~GDD06 ;[HP #3��?7\G ʭ;v0gɧ~sih<7SC|k]ĠiuyM=&G2OΥ-[gϞ:3={;ng׮]$%Rg:⥗^fɅl{p fϞMii),Zuq뭷s:::n:ϟOqq#)))$$$S&Ŏ_!YX깬: Df ?n5#rъ盥-[mQXj̋wP<| u=iKl͔?tN^i~ 66m(;qN;v|J''',:Kkm O?wޡ}oߞ'{ѩS|ӧrJ:uD׮]۷/\rZdpNS]iϘ*p ]@3>~B[Y2|xN76jzn]}UGEf&F{|G҅C|ܾ=֪*nݽd~厱$:\﹇oٳgcLє8kOxz/C,`=GVVڢ#?~'_jm~矯W^lڴCa4iٲ%NM Ѻuk;c[ǎk۲eK{9BII ޴͜""" >au dXHJJ":ExJvQ ^\qtwQlfeb5(yZRQAYVz$#?@A{x]ef%KZU%11H.xWXAll.H,mk* rWo lq er Mq=w3fhrss/DDDDDDD.2@qssM:\lƋEel싈k"vS#b""""""""""""""""((&$#$�ssݷ2TlL-xv �G38QtSXNWi=Gr)0cs$Jud4ڠ؁,LZiYi=C}ƄC`w߳wpdNw>\@c<!=>P|l/�/~i7/~MrF:TORj>=-*߰k:iePlKQxi.UȡlI-)YN$J9vM}&?)R�� �IDAT'=O!9פֿ$""""""rc8*VHlobɄ[heOR~;wRQXȶ75(VtwSQP@[oԻab)uџ~`gGعSVC_-RVA1ch3rqa_|%((Ee.o÷۟IAI%~GsD¼y�:nܖd]b.Նk.zD;ZԜo ;8x$e'o+؀1$:5:�!m)EDDDDDDQy�sM ԕKeKz͙[wt4) "b`ڷ �`֏W_;)|l O>%}f=d8+qΝp!gI^`4zx윝<V5gʼb -[<Pz>==~>ev*mtn}m#KHf.$ɢ҂+؜|WĄ!wWc+,aV;3(&##ʜM\?|5GoZsCټaԗ탸UtmDzlpkxHFiC &튫= &SYDDDwQU3>!) H}fcuZP]ZwW,UwRbYVD 5@B@zH&O"by=3s997|9\ChX%o_�bc uLXZ3-l�bbFb1q"1<G""b [3I5G&[quw rDv cǶioTڵ[n% 7<6iLDˀ`gZB�&Rz08AgoZ!}i磌vefMc2dReBY.̨Ai>g`/&|kil F#︝ ~2_x'o &Dꫫhq~J]/Sڗ>\{N$}nXB 3MecSpw5uݏ䨃+ⰵ>es{A-p!NNDDDDDD\$r4 ʷ3gh*)&欳ڤ77|Acynf3ޘIf"O-[l>}zu}F5˞@3#l;#tpmFybntWp\-))!//HBBB4yEDDDDD1vրXaE ŕ6TRXYL+͇<RWt qXmCCyݵnzy'.? Pe}fwd*14K\] @޽l̚u7U nnO .�EXm}/œKv[Tμ Ş*uV ֭[5yEDDDDDK괷O}es`4=�}ߦ�f-ZV;J+fNT㏱z|]\~rp.5D |QRR�8{L~j6p1X H?*[XGVfߝɠm2{AfSGc4]F~~sAii<lUNߣW7ӆj2v?�IwPșiذaǵ728fCRRb 8ക;ٲ'k1w.W~עc#ퟐ\SCSE64(*J16.&z2iBj]~޽o]~b`P@VVL+W2|p\\O"""7ի9riO{Ϧ-,eۓO1jG47ooܼψ =3RdiW2ed euk6rY644_h"DDDN�`ӺRE1&|8]y:/nL??RK f6rB|:Tӓj !![F Պ1ZKZZiW+gDѣ|yjbq3'iiiܹl6=IDDXL&;RLDDDD_~3QC """"""""]b""""""""((&""""""""]N f@S@łe>GeN/Ou]GMAaY(߶ k}=mh>'-ב_@yu#>GnI Eu]nXmPU \ eUDDDDDDib<'{b.A}xi!w>C?F3(2?Ϯ�{6ndsٴh1yyG<ǪdMn̞nwKw{nk,9+*X2r$7,[~Mu҃u62}Q;U9K7՚siy6&KM#n^ʦE�!6օ%""""""(ةYLbHM$Gaﯪ㼔̺< K34N¦<D7:lп<g``ToN'|36=5a$8Gzb_<\O]jdzhN`3hY&--!h)S/5NP;Pq#MO@tŕxP#ͥ|Z,m]7?z6nd"rLܡ6Xe˖q50pS61 L n?Fxm�O&2ػM_XٽCYĢ/?n(V; >̂a; 5;9So'u%sۍ"ld1y?Wsv0V:m_F `ǮaO a^\=.glO/}:уW?d�rYxd\e}3S}2߇P]ǘ(̈́LL gƠLHO'e$\=;I9™F„n-5pu !e$ ïwoR&M"e$\^lOm|tDG$+5/WH0C̐yi[9scpvH�=cYrwz<f'YF>\ypߵf.Ovg2+pk UkwȂ<t@>l<q ۱I�\|nS'ڡ2I\o�0nP8snc/^jwm uKk8웇}}<]Y<+_�޽,z_`0tίaX G޷/}KPl3/.?F`dڔJP<w#,-={]\.'n'o_O x y}d~-: F0�zD#V�xまy{'KS6]M{ODg=SDSGTb@~i-1\0,FNz?e%b0nH- M6Y9X|CM} ˡW7!mvsq =¼0FE%""""""8+fyK L؈Ý zLFK]&c߮Jjj)ocS{dG Hjr=8{}!WK(_ڗ #8ٻuEG--^߿!߃zZvg977^FKBӦ?dD~?VMVDDNHII EMӧHDDDNKWtnI^X?cXx͂SāJ~dZWWL4A#F27WP;),,"663b bg,}OfuiBڎ|(Fz{T% nqB///gϞ\""5sgaSY;VXQCqe-�%յVn^db ޛ~qX)Tk&$ggZgTYytr{B �Nȶg:?Ɗ Z:WZEzz:gfQXVG'{G`42{bvwaǮRvIckݖVl-PH^]�4rmndРA|DDDDDD{ }es`4=r (㕕yezgWQ3?gwEWp+f߾ԗ�P| 3S�ʮ@{K WoތW Gy;5͊$M޽,4Ws7H:b9Cm=XbS y#ߒ]ʵs솥?^ȀCV>_Yˤ͓W;i4xtyv 7{0!5Ci8߶chଔp^iCo_fO eںZLY'""""""p8Nw6gdl`ɖ=Sٛ+.{�ݺuʹRdnnws?-uV5Sh%qm)(||}Gygص+ =RDD`G}f-YYYc24"""rD]ftw;&S݅ާN_f*j2r]p!??G19m\_ڶm9t9 H!33fBDDD~6Z)&""""""""]b""""""""t٠nwht@]q199�4Z,X8bކ2w8jŲ};%6TUu-Ƞp: ׭+w}ٷb9غBU]3�r-U56o* jOSPEß7�ί """"""R e;0[wXy4w=ìOIEfQd~1];�l1o֭~a-7a짩;|1eEakingWm3زt)�= kzbidKٴ>dӦm|M3g$_�tkv67׿۸/tH)7_.Diڜi^n.{0Ckhdےk6ꊊ(\Sׯ;*ꔜsR;6}_?}~˔'WO;>BKc"""""""r8 CTtp�kA⌬6i>8_pV2`fIx&y(Ġ3=DmQ }+$|u*7m3ɓq9�nHդz+�y?@Ŗ->,ܰ P7n@wk``Ov<DFFqݳN=F:%Czdn^Rē-|N4_6�2rswM-yl]ɍZoj/k44dl{l`΂58iњ""""""et z+<bu;bTg}5"2}0>1=2o3dV7m#_7]=TUҋ&x { vZG]o>?L$]~9U|o0yc &7wjX1u*-[F؀Tj+*(Xu0(V]UEQc"#I4JI8oG �[2gL8An,Nl/�q=c[hYYƽSSXs8w?%HKkRk~^ ]/vCpcŚZlvLFϮ/G3j`*)CE @DD8544sN, 6M"""r &�<mtv�O/[EW1IG޷/}[-A:~=Ӧp�~5mCbn٧[{LIMŽ[7� up'OBu^>^^ Hy~N^AAxa '.6Ic8_6]ݻo:]0m> =܏X~ք8 m]}7O&Uj u6ؙfxb,CS[]Rږٱ&׃'<~N϶_p9 _XRRRpqqѠjדvc]XxU8-׽hL<N5Y|}p_Bd.\<w5\]yK xSW\kPPSN=e n 57_Qp\qج<oAyvP#yIUu&)sNbcc`twΝ;wθXG %e_]Gfq`ZP >=buNΚb{`ҙn47 4Y*&L?Ye�ǿ}]]OߤDh_v1|2`:µi0ij9x;FYlli&S8{ɱX,h DDDN@hh(999>cg VP\Y @Iu-5�+"s_1VU|&yc;a/-Ldjh P~ ֆl?8]G_;{zzQiTQAܹz`4ؽ|9-uu8+:իW_HOOCq;[ٔ] k_sY˃VciՏv:|nH/HMC |9S-C=e]C*J5EDDNͦ[&EDDNiݏӮד,h4{=Ur㛟zZb/f\['OP!7ݿ?FW7nj^]_ϞY.+Oabï*?!S`42X}Mk~:n3=,?O)897 {/_͜Ks`cYla٘QZz\}> <RVϨ{>نhG;POa\@ޥ{77~7,xpp|+B|/7A^|+M`|yMդ@DDDDDD㧏; l6999$%%"n(h4cx8pi+we; \l(N]a!.xvT]MK}=#+4c':}=ѱ ,KMuV"{a4vۤEDbp"_o">>t۽b FPDDWKvs1v yHl7Sz3Hlig2 :m=DDDDDDD +%""""""""]b""""""""((&""""""""]b]Ϲɾȯb""""""""((&""""""""]b]Hrr }`Hft8c<'{b.tV}U6)ƍxGk鬟HG Cڬ\j>UM-dbSRYãb_y-VkILL:~:yx]<y úcE"""""""")b>1U0.O�عsftYƮTuC#9r,&}aaa,^I&sUW)8&"""""""]KgSh\G` ..,. ̞MMMzi�� �IDATʫ\7P]""""͛7S[[{<aaaymۆfo߾}_5qqqDDDNpЕc{+Xi/,A*n.NJ+׿^gϞmٳ'@bbbtu&k֬aL&||n rE3(zjNyP_g̙ HiWVP\m%յͣSyv=o_ʠjii ((]Zff&#Fxo]Wi2s6N[48"""?ڱ|=yF6SR*\\\jf�֕!"""rjiiaTTTIrr2G-S]]MNNk+۶o#66Bnn.$&&\Btt4QQQm- ;w 郧-J233 ݝ]v@HH 'Oib/{<FC:gժU<أLvVۛ1c9TVV|pp=yٳ"44,1c446SO1d6nH^صk6|?1s[s璘HII <΀Ν;={6!!!DGGga4 7 >>uKuu5| :)""r"\4]ܹ__æ/\矟s[+EDDDhnnf٘fV+/"onngСL<HUU>(9W\q3yg񡥥'|<s[XVq>cx饗9r$SL`0s=ރzjz!p8<s,];~(눌<b@ `۶L: +s%`6pqqa呗׮̎;())a_}}};v,y&MrnE]ݻ)++s ;%%�)++c̘1 \p7oyaÆ` --ȉJ137oֺ'AUUUhhhpo***wtYWWWg555ӭ[7)?BCCqwwnp?EDDNb"""""gW_M0v-c4>}aussjN?ݱ&6yrqq99Q ႃ1 fYjb%"۷yJKK۔-((d2uxYoӖ}a6޽O=DDDDDp\tE,Z|�JJJx_߹֡aҥTUUp8_nرݻywKPz"**ŋSYY ''{+9~(q̥"""""˺ihhՕϵ]{/..~+r-bZ袋=ztcǎgNt.袎Qw/ȭފ\zɥ7꼟"""'8?3FNNII]r3260pVab;"7_,;vǁ'UP[P_X:TXcp*^|%Fo9AŹq~%++s[bE16LJcS[[Kpp0~~~δn&^(((l6wGPF""9ߥ?괷Of;0[>s~Ϳ7n%#GRe3�ͮ~سKPm){DzejsYz%X>v~/6'kϞ=q睼I&"""?�:(2& SǟT�ǺO* v"9^rYLbHM$vWp.?b'vpnvϝ5>[o%0>yrZ+z]p�U994[[~c#}3DDDDDDD)`3hYu<)ѡt 耊<6:}gX=/^]MAF^~$p֝w+'TdfW'x1?48+GctskSgqVN妍{Ƒ4y2==|<ܴSzmnjaЌ),$c<ʿ1h wׯ_ϛo]ι#=q�ڣODDD~5<=<{`Hcs<W<kj:bbȼy�ס5Oe7/r%�MUU|2q"!COi (!I 'r(R&M"ayoWӾ\"F9O>II: سh!ݻٻ}oj^4w__=56vh 3yˏ{ E/9.Ut߃]铞<m<a!QY[Ͻ.[;":=*sb>w[?jZ--GDԷƃyG?II9ݍ?GdUV4Z,TE^= {q=Gϟrb!f`6}($,-coEBBBgݺu̞=M6觊ȯKWӝ |]ѨqW]M`Z^T؎Wh(�?XyM|e2x- 6O;�{K xSW\~c&L#.fs{Olb&sƒu\s W'>>=z0k,͛… :t&fjMA1ɄfkslcO0xl\v�_>L?u*}[Y#8l6ϚĎg`ar.F+tsu=˘>p""":T&00@l6#FxN:mZ�Jk)lj_Q)YXmvJ*kX+O7Ww�r?5氶Po۱97Z,o܄Ս>}=ڼ)ٲ{saL8oՙ4dڲpPv%_ݡGSz5y~ oС[n%==߯=3XV"""""""r+ņ>9 0 s%\3w3mL|]=A3]n޽1e a_)SxDDyUBN%';ۜ3uM|uםĤWIw֍ԇ[oŀcM7Y DqkB1 zd̂wY1}:k]~SXDVzYTTDdd&p8RFNNIIH뚚)Ýn 8ക;uu4VV-<[[9vꋋ pfkˎnO<y}7˘>:z)9AzKVVWXѣ ~v=n4ӎgt;WOsx)7*k0vWkL&ΝKEEGUTDDDDDDD .S_ """"""rEDDDDDDDQPLDDDDDDDD/Ͼ226hDDDDDDDD0~$ANOHӥb6=zluT�h`پmϡmh|6VIwg~eu�א[\sT^HV^)9W}{,7YlcYYDDDDDDvOR=1|KuҪ w>¯k&EG`ƍ,qn<-:/ﴴ6m’#i,+;^�<<wUO6޼-:%㓓_ɠWA7/eӎ"MdCt=frSjj!͙fw8%=};:T3$mCw1-՞P>I<}PM$_9Ʉ`銬V+&p8l�<<fYm6) 0Ow͸;oHSu5?<0œ:F>*]}3>K!D=OPL&zf;'zo1&N OQTTGNI__ywQ`cTJ�_ٍncÎyvH+PhW1yl2ɪ, ]ҋF%Q]^k]Mݝt.S[3hl�8%_ls̀SҤP\\LddCDD8ps+B}�W~*GkXa'}ú3ĆjAd`|bٓ!;" HJbߒ;޽q �V/WoocN�[}=oeg q#^AAlY/9;݆Ӄc۴/:!ݦ+V/[np?ڛm::~s2oYy{ff7�Y1,bwefO^۟11)i]Q#Y%sr;vYt9;a%\n{y t.M6W~a<S"4ų 0cpetb}5EDDN֯oݚ#44 1XV%--~K744F%F o70Xv 4#o_ (6Xg_\~ݍ^Ʉ2y +&~ a(|'3$b "b5Q#xaoW|'7H;M|ծͷr ]wqE Ot>'-MZ}}#f71E2 1H?�]M `po}>;7ƺz>(iWfք8 m-3O&Uj E_)ɌΛs b˜>'iiiܹl6EDDL&yrA1wWW\LF CWWVI|hwS`41 G I6y}`KH*޵˙/Sڗ>\{N$}nXB 3MecSpwx 5"Wrp\qZ(^PC#i}}.Ӥ9xzzү_? ż<q3<\[Y4d7t(Μޢj|X^ٌ7&7wRoj˖-[hhhOxyytߺy2<pc3?l'&,̈=ێQv+MG9:Ku:oII yyDEE+""""""]v}Jk)O(v;_nn݀MYx{pc؟'Esh(=UwM;'>L]ZEPx8fuR޻m:ܞY&==SҿJvT͍]b޳eCxrrٙWs\nʠAغu&tIvЇ^v<gFs˃Oaw|'M$?gwEWp+?=o>ۮ\\^OHPG%(%gf3?) {a/@ȁcAL|d%n&*9 v/oĭϯa?0ex4?@c|%n;{^0>/A Γ]=zy3mHǸ- �&6p8RFNNIIXǭv;%q5 3260pVd˞K?`ܹ\Ѳ6_߳BbsM MCB0tb+Agl9p1×IR;T˯`|ӺHGY,|$,1%9.Lh$"G3gT[\̖ɧ5#s;n޸y{qw5zf}ϯd =lxmhh/`ѢE H{gc4IH#lvC潎wDx1DJ-5ˉ Xӓj ti.$r( z} wW#ώ@ b""""""""5""""""""((&""""""""]phDDDDDDDDKўbrLuT�h`پQCcKSvkQSPrֆʷmZ_j|6OIEudWP^HfEUulcf=ꛬ9cuڕb<'{b.A/grïWRUp}g=7xĹlZ꼼#cov 7ofW_;^UTȎK;ٽrnIEN,9͛Oz G�`\κi3-_w~oq5~匟#tRʪɯdKΫ#""""""gNRlmV.?5iڜicxqD翋{ݕ`n 'a_C};^ޯjw<_ 5jcOq Vp-|s&);gl8#MZo7g�<n"=1Cƍ4UW c {\<3n ?c9@W@,66;hT �c[q#[ϧ6g'0`4\yŊ,[kc[Y:5͌L  <uV7ymnF l㾗p=Mܗ�LЛ Go= <vF,no`p3G\d�eu<lVMw)5(/gٔT51eD !"""""">PB}okn!;A3("ٓ!;"I4 wbǎ%e$Gp0a"[K>\BCH4aݛIH4 W1Sm]pc0G(b͋/̐y0j63d<bbږ/-eΜ穪?'@@ܝ5><{P|=][o[py&_oģ9L.FOfx0u|2S'}jZx|.4~.<o[VsÅa$1eT6S 0fP ?,#cS>Ή76�r].W?ugxy|zkjl/gJhg`#""""""g,3֋ ~4}޷/�A:LnJ&,-Mnt # qw??(ڳە;̅1q"8veWP.Й?JNN"**uK _R�=_?]UX*3- 2)*'*Lie= ׃A)�bqw311a,wwZJk)+.F+ *1{bq|v %GzE[1&Qmv$P_B}[?sOW& GDDDDDDh]6(Vl_Y+S; 86:L,JjjiikCf/ ̏qߎK&#{5QfxRw*gŞCZWn7�� �IDATn.Է�`w8xռ\ƥͳG@{]005ɷnwF_YǸClEDDDDDצfʀ͂S<�vۑSM&umMЈ ͕'| !88gm|ndUW{鑡Em~`Ǽr6IĞk<Lj{nO_6{ߙB5n<R >G[.衺XDDDDDD~:م5?{wWeu9 !fYVT5K-3memf*[5VNfekZ)₊ʪa=:JjϹo>\uW�ŠVӾ]ijSM+*-[p9G30ՙ4TT2ݯOv~!58�x7U�ԗkɒ6sɒ%dddݮmPή{EYmյ45; TLiU=CI2=Xx[WU϶v)[^lCt~^ފPTjgźu~]#?h4}=�e"wz@;xQ<Fq-vR{�PBS6v,�1k03Σ˯x|Gծ]NOۇJƏ'zȐ6sZ7O[mԝQi]=|lf&^j/W>%Jem#\Bn=xtL_oK]c3_>zgaz[? ##}𱙹=zy~]v6sQ{KD&?#r677K^ 33אzoS{l]9erAAo W6^'Lu<X:om=uzePYYAxPOoo!..I3DDD.79#3ZFG4 2O8~yylfzQ1ljlNxٗ-/"""""""r<t:)&""""""""N)p:;U}̇~/"""s\9ߒVlK^v([/'2ϝ<w쫩DO^Qbge?窫F""""@b;Gw!b+sv20[Kir4Ӷp/ט 쯖rkb[Vv||| iG. \t9csh0 )8&""CŢ7t2'3UZys&ۓ}☺dMlp8""""trcsj0p]-1O].DD]t(PX`Tݥ%F{_/#W>>N)b��lݺt}DDDDڑ`_=/|ZM55* v<-F.K?l2b4vcl2nH*Zݳm\2(?<<9sg1\uUlݺUv_RogjĎS]wV3t9q9N[}%M`̘9T:Exp 7p]wOH;ij>-pզxN+))wX"L#LNQ<.\رcHOOםVZZʪUٵk>""""7hrt:19^6(VX^MqE �{j(ߗ%l/�w @HHAi٤!"""r 4jƦFOJ9^~=f1 lz}d}M\.\s>WVVb6:(hߵkW}2DDDDp8?h}9N/6uPu`1:.`ɒ%<#Lyɒ%2l0}2DDDD(1bYY:UM{___=UtټCN94eRDDڛYMyDFFjƍj$kt6Ǝht:f9ąXJAeq4l<4:\8a2`4hhjyZlhܟtB'9,-;7f4 4;]49Za6`@Éh|+wNI 틈B=xkB,})i6/WV�cf)9-k*[Hunz20>|c +bj9Oa'Y]Pj_ʸa|Qn`1xp[x`x0:l2Ws[tqEDҩbN'lցʶl7"e7[;IDXZZrL6|OXUlۆ7aaT oTT/k.JKGDDDq1aQXbug|ʦ>ʹݖ/zqw 5Ҳr~uMNn: 7.h@?%e^[ �}^-AFSOm)c>ǧ_V*oWuGv P^CR~�w۲ִg_n.?64/̂k?pBh7~\�V<o=t`ʔGDDDOGah (~>N<c6;vF^j7T+ն!=Y/mfsq}Ϟ�e""rA9;T64&G;m|7q,V|M^dzPϖg]X8zj#صkl65ViuLJ{fR\Ur=< `ցs*dۆtauqDDC'7t2'3UZ~AZ\4� /fʟi蔝^XȊ矧rn6l`_iފ�;rf͢~o =</q.,$stJ.%ton-S"?!)) &iAXJ;o}I Y.ZD̨Q~z0E4k1r$F]#ޚl$0zוw)z~>6S~~>׿Δ)].Ѓ-DDD׽n׃K~Y#; jX/S|so"�^&w2w^fd^Lֶ*n8 wnOUHC #,Whp:]S(^>}:?2x={` Ds=>G O@ }l#־PY?^ߟ3kpOs}­~uF[n%̻BjKJ7<a)|7vYY�eepX⮸IX lecN~'bb#\&>Fk8㑇 N'#ee�$t<˯ ~̘Va7oތ[:"""fo&i 6i榋C}liq1~׮=uB>[Vy҃o]?Mj%6̓WXwLDD0v Gt e|'KVPSСm" /$$&Ɲ>`�A >`�``S?/?? QKsd⬮&z@DGefgI^"rՕ&$aZۈ6sΡ!T,ԺE0 .A> Z;cv}/E(\Cҥ9IhD�6�zqg]twa„\}5q o 13,G7Ws\V=]ʺc~VA0bDYeU#אַgbtFA_`?zsː.^Mݡ#""/V*?G͵:OSV ٥ma .{:Tb%{l\i V۫% �o[r6|~TnioЖ<ƚ2jv<~m\+$$qUqwҿy.l$~~~T"""rH=-{g/.zr#sJٱ좠X/^_Q]<)? Ff-(yV$kk3ڗϖՅr0::G`8.nim�CMH8T 8Zm#aa56Q}>,ܨz -EԄWXA%ʰg`v7I~ڔӓӈ)SFZZ:Rf^y%<=;׾& 5#^x{eʸxPWnZJ=M<pa(닂VǵXMֲxh8/’ub?:Vh꤈tLƎ+,=U5V]E8/OeʹiX̦N,V 99j{ײשi/{q1+W;$ _Jݎ$".=O�474sRus|nƞ%K 4o}^uul3XPB{\ VrHo۶K.l65@DDD=oml6d3Ϧ2iT ̷GO*xX; Op3?[?U�[[ӛg+K݇,Ǜ?Vb6Aֶ*jI:~=f1 lz�wL}-S]?0'�Dɻii8$|ef߾XhI~"t F} 1p98vR17~vV|Zy>}~Ji5 ~7l /ɬ><+e�%ᛛnfI8уfU;k 944u4UvױvJ5^>b;ͣw:j[7Ⅽm:oL&'Z_߿q:]޾ZRDDNy:'mnn&77^NJN'5zZN33cnV[K]I ]bls>Ӊ[p7�답ECE% x]E\.LFBTck3qDRSSY}20NL�~{jb20 ni_rM1Hd;?v7:oMF|"#n <Xh0~鍊&0nXԙDDDDDDDN2"'7"S]|SSCDDDDDDD0* &""""""""QM9dfQ#DA1tS}֡bSW؋MOjy,CcU7t8[+)g`gq5;OXJɫhc68ذfvQioTG9lfoٮ H{Aqow׿79^FG;}kF=3I޷>^+ʗ7\,}A}Uyy'<hz>:}>:fo8}]Utukvi o˖rʪIm.k7#�(*[C3FSlLDDA Vr,~hv9,˕�hp4sKsAXz*kxڿ?DMQqn{fh_1׫m:3X) מad2Gc"""ǡC)3 dDRY1mc_m=c,Q] fQ8JٳfQECU^|p7'4TV|xYNԠY|/0L~a)-;:]l3}8ƍ7?O=4EE{dK]?Z Q]9} -|#k6ȳ]C⣂8*�{_Y˜|d+Krʸތ<U<fˈ!>ߌ7k3u>^_˜!Q02\_o⭯rIKjP\cN)""rub5m=?Zitj ce1:n`Y6"mxxx`41Ԧ"">:&3A�T5-`H|wd氷[z!Df /: XN>ÝAP^Cb'o_>>�FDw?Kծd=$Wߡ8Oo]t!Wfe>`K/2'1,L6oU(N>_Ve^p!_5'Nls=1/!]Z>8\i?fqs˙йzc/{n$F1<.Ȉ_\0M,Sצ0,#{ZF<\rv3|&Nuۼm|:s#HM g@b;^w ͌uQcMXs&g䍷̓93毎,""rxyyC)Ecc#o*M |b`24uRDDڍruo@P_@]|W'fNf5 -)nII�N ٓ�d;iᩩxEGs*9? bc{/ӉΦio!s?Hv<-"G`3>Uw'{<qDƏ:?3zȀVix[LDG3ŸԄ��&1O!i7gf0rzR7sP-yMeYDIo)wt a|-"""-ooow@'88&\.cG穑xyy퍗fɨ""n?0mz>|�lV ŕ5<4s9? jdwyL>_"ZS@|U4VVR_R+ڶ͝s_z%Z"vH$n!<4/#aj1"u9&v?.WsS67pwZ(?DDDN2e+͆. Se4yxx~Zh_DDt l⡹qDt poy{KOQٞ@zqrq _Y~-lz}iݯKaJn#2#ʲ~zׯ/^^^]7O<Uw{sm+Vk:̍_T'eUG7wtOPݳgyytIhh:H;1LF&36 өF9FFF)0&""C~ؼߜ^f D7I񴘉څFG3/bdJ^6Mɖ-tKK`߭ˆ-KL!1"@3>)cϒ%Fzz Υkb"??vn'O6g)|lْC||q/&R#8(�Ŗ% lmoFΣ%=5&G3}kF9 6l8 |H;9xc4O@chy`ۊWkr�8c{۰Ѽ1q4>6 n9 ^p2{'Oᇻ&Q\+^#/cĝuAwu=!?r = 3z퍳/X{%qga#^DDz-ݔ/,WV1(޼xC,~ag#=hӀh$5�� �IDAT}?m$!}p<LmSYY�&YWDDCmOuVlnn&77^NZś쫶{S23אzoal6?ϟjQ\\c{'$6VWP^wh(Ɵ?Y)*ӃScdمd/~KjF_ܿM.l۷ogexzzPDDN9eeeGno!..ɤO<�_PMq1?Ƨ35 i__,uz ;5RTV__Xءڂyud_+ &""""""YCb4O?$<-ӧoDZU-؛]FP6J(""""""ߌWwa=Wt&ꩆ9FF5t6 Ht: HӡbSW؋Mԗyڽ%•?R]Pk^WGƍ8jkq9nHc?iΖJ�JY.m Yr7r>RiodÎ268ذ><""""""rAqow׿79^FG;}oe ӿ?<>AOؑŜ:hϡ*/X^ֱ^YTsY4iWjsY+m烡C)ͥpݺny 72ZnC<G<R,,$;]WΜ4G~\U֓_AmsْWRy5| QݨsşS)1rI쩬QC̘_L >h{-TmD_SROIa 䝿`<f>y|�=15 ?Q'9. С*ui߄2")]Ō fMaЫ){,hbՋ/Nq&�3אG�gBB�(ݜC֛(ݼrTp_xee~ jr9bRo6y…̛7k㪿LZ�TUa̽$FpTNynoS{r jCaɼUEi`7,/85y&8�wy ѯw^џȖ6F|mfK3$FWĢw2-l`ьf-M(""""""?Ǝ&sZLxKAb0]1 86ӧpEddghV1ÇghNN#(Ypghq}gh˳wF_x!QÆ1ٓò^++OwXޜ>}:ѭԩ/PYY6W'S2ڔڿnDZ|0N#}lđgL WZvwbY2iɊLJl_[>E  ɟReo1y>nCoL2wM[Cb�^UӘ YLMϜzzŜy#"""""",sG_.#fa耾Ǩ[Rݒ�!$&Ɲг'j!w"OX#@юxP_=="F?, ITR+ﻏ3/ȽȻCL<^$j Lmʷjc3嚁8.BitM W;c-\AL| 8#�7Jl4p\2:ݝ+҉䒿/�`f,"?+*<6qր{r/ʲ* g_bk \؝'>ĵ{?[:tPl5L[&_CW̢f%uoq4l#߿??!eE[ۮ8=cEM#{+>- Q2ϛ} ~hPKb1S]@iE�]}[<u󣩶Ν/u斧HJj6|t@rM1k6ox8"J�.\ǐ�?%`2[m"졤]c*g~~>EDӵkfb:\~Sf2p6o_/&"ӓ#gO) MX=L<LmC@EM޶:LM>K{scjݻwwo =zХK}`DDDDDDky;79'GfҚZ ʫhjnf_uFGzqd\Q du& LӇ~HMa!L1`*?rv-Ys.Y vIٕf>\ p4XuKgvfLFw_Ѓv{y*Yfo5gFqVt/|V�g^;1Q!GMiYQ }Bzz:6d#""""""'])՚�&Θ6w4oL #}ֶ,X>B>˵q2{'Oᇻ&Q\+�D힖@N7 YOJر�϶gSW[W!$w_~Ż 0<vbvz:>4TU0~<C'x2a[n}i '!^|DnS2?豳?4WmWח~;<p4;y o|K?McӋY@.6>x삖\c? zyCu5:1i01~?/sGsQ{KD&?3헊t:'mnn&77^:egf!--;޼*gC=غsJR;&�ϣZƒzX}w Kk|3tQN�OlQե:B=}Y^zƠEDDŃzx{KNNqqqL&5YM WFEY >~^~Z LFC&H{TyvݻywSb"C=BR寮111‰)CA1ߡ """"""""Ȩ&FA1tNGA1t:tPt6rt^\LEn.�eem|ǨͥwՅTqȴƪ*J7npਫtFzҢȩꀁqow׿79^FG3�r˳Io& "{|y�bg1< ׭m>7wu/7=wR־!_CRo۶Сoveiv:Y9?>xA^Dh_ HkF*WZ] s弲$/Wι}z_{SZY3,PO CD8,g3O6{0YQ*m}6<]t_(WkWGi#sGgȈ8v3b0 b@|;yE gҕ+u͵~rL&3אG�gBBy{!dǒoN]w㬶B+bn#rŤ^y% Yt f? �n瞥F'+!?@}i)+ݻڰ �z+=z�\_Ϗy 67Od3f`͚5r-ݻMyJLc:g_|zʜ-S kg^X9N)""""""~&sZL!W1,z¯Hg ,'CoMl9�JVb;ff8j/o#gƍ̿B c#''e/ @N~'bb#U0Oз/My?8=s;">Ggh<xu !y-u++Owhh2ggg3u TVVDo>tݳa155>~dVgi##N_.#fa耾-eY~E$%%CHLL0cC]U�>aaa :ӦL!2#dVw5ɞ#F$*)Ǚw_w+c1c�(\gSoi7g[3{y>`�5U $|>|8}GqT=�x|E ߿?ݺukkjgtKesfD/ļYkp€AVDDDDDD9 6w-[G*-'}[7^JTHzq0LF^-m477)wH('�#̢f%uoq4?XhiyB}C~11-sU=ܯ=iiss=]<۟oMdMz;r- Q)`&-OGDVi;c9ozA9~t,}+:vJi桎k0S[\.0h< v ul[R^^A||)!1ܿ=5P@W.(""""""F?l΍oc((%�RTVɕ/fLF_{FQPVEAYz)aSos6>o//gג%G<^h+!4TVcZɡvϞv믿NFF[liszGˊ).d{Y1� @DP(%5<c&_N#""""""F_iY}mzG,ΫWOdT8Z?sWo'%L,d>u*iczaq|~{0<vbvz:>4TU0~<CP3L�xp޻wFb#RS9wp651tMIn96p~>`~}7sI|:}><>d4C^s<)""""""].D\zJ蔍x󞪜 ؋`O3\N Vn ~mPU_KmSat$eee˺rrrDDDDŬ&+ՊotQYr}x%%a fOr6ygRg9J I0n{vde? r`EDDDDDDRPL:Ф$B"""""""VNGAN-/"""""""r<NZP`0EDDD]9NgH]. ?6M/"""" ͆DDDO_ FyNaӜ.NS]>$%%狈Ho>1_gpbnS^^Ncc#'""""nj , x{{c6!"""rIF9hnn֕b2P@LDDDt:]'s1R˅…F1b`4h}iKEDDDDDDD1*&&""""""""QCEDDDDDDD1 DDDDDDDDQPLDDDDDDDD:DDDDDDDDQPLDDDDDDDD:DDDDDDDDQPLDDDDDDDD:DDDDDDDDQPLDDDDDDDD:R+Hb4 jT4}RDDDDDDDD:DDDDDDDDњb""""""""hM1t4RLDDDDDDDD:)HII 8N] PF#^^^`XNjY}+"i:IC' �ՊFH5hhhȓKoED߹""""8YA|t""^cc#DFFVD+"""r08墮ժ+ "j;WDDDNNPtfED:<IVD+"""rH''(nRDv}+"94@DDDDDDDD:DDDDDDDDQPLDDDDDDDD:_h0 """"""""ҩht: H5DDDDDDDDk9N uEDN]vDDDDDG9N^u*rrrJojj"??Ҫ)((p/,,>{!33;wU "a,^q1o޼S^^ƍL~~á %"""""{3fP__ϭ֭[[STTW\AvvAijjg�\.Mȑ#{{7n=!lruױvZB/^ߏ'`uV.Rn&6n+3j(~ٶm~.Hb;0 &jVbڴi<3 <ロd..4 P#lBDD3gd2=Cp8())?g„ K1aa!3g.H!b L&yS;j2x`~m7p@FEff;(ڵkٷo^^^$$$>Nss3WRSS -aZ[n�lڴ Պ``۶mXVq:dggcۉ_~c}v _~S "P'2f̘V] 6`6YjחbrssSff&444Kbb";w$11***o߾_INN}@v @nHNN'|ٳgc0 ;;r'22͛7qFv;˗/'!!.]v}ž; ~= 6`v;oDd/isI&cŊ <M6QTTěoIBB�O=$$$xbya >y Fqq16mW_%11>[RPPAXt)޽Yr%/2dgg3azMbb"~-!!!t-ͥ. vW…,[ ̙3yٶm&M"::X-Zy#>> OOO{1&OLJJ 9r$W,ZX^y`0peqwSZZ 0 47k.f͚ҥKYp!eee̜9;uHDDDDDNmا~?NXX/2'$ 1o_W^yΐ!CHNN`0tR/^f;wgϞ<Sl6VZŝwIagãM%RH$J @  RDT쨯QH""EAJ@ &-J}򒝙3̙g3Ϟ9d>CXV_ܹsY`�iii,]OOO?άY[Z<$%%;y�8p ӦM#77tQLh'::N 1~`v|@EE=Æ CTr3n8zm9}I޽3f V~XϟZf<hK�yyyRYYɪUpqqA3h N:ŤI O>%~./I1!B!zۿ?s ;;i�� �IDATӦѧO/_n[J(9Gr)֮]ҥK0aSLa׮]z4 �@P;`6m1|...�feeedeeR(..fǎ�T9rt* `{LUV@U/`۠ӧODشi@}B bʔ)WO3n8-ZT؅>}ll{\2((!Cc[RlĈ5ڵ-5oޜ VJ E-ݛnݺq)󉏏z_H]B!BxmR,,,=zsN*1|pلJvst>p]vOPPDFFrwxb>3FANN0suu}'Kc6ټys=l~v˿۾};:!!!tܙ-[믿 ,__; U2SNSB %4M~~~>o߾Fwppۛ4yV+ݻw'<<B!BO ͍W_}^{͖;f>sΗ]O&MP*;v.]Tw^BBB.իWӠAf̘QƬm۶@Uo⪕[r%III]NNN⋶DZnn.GۻNue6yי2e F 11QZVL4 ;ԩS?~|{kffje޽nڶLt:gСh4/^LPPo&* ٳ/Z !B!n<gc=zMKB&LO?_~!;;l֮]˺u{.X;dӦM,ZSN8|0 .$44 ρXf yyy$&&'СCWvh4|פsq>S,XPXmX,L&%%%rQ-Zp1w%`Wn> 11\-[Fll,~UcǎϡCؾ7qt:w`VKFF .bjZS&''/B!ƧZ۽{wbg3RkfFTOƴS^={6q7 4W_}"""1c.�wfb@ 7ogcǎ'T*=| g}2c ~cW{?ky, [^u3'޲eKzȑ#mƏ>|8 |0g DV'\vyl_!Bzpc=kl6J@@U[gII 毄` 77�ju,i|VVF _zɄ?A@yy9x>B/## >]be:�q[ZZu;GJl6.Ou]^q\!B/7MRL!MB\Ϙ+BE!U B!B!:tB!B!RAB!B!SL!B!B)&B!B! /B!B!$ńB!B!ݑB!B!;B!B!vGbB!B!HRL!B!BI !B!B#I1!B!BawV 9B!V!B!9JjfvѣJ!n`;7lذ+++-Vo5kFJJTB!.K)Up}4o\cZZ !np* GG suuhx+V{B!%IȽ{i^^R1B\]].:RoAAT[!5B!ZR QRB EЎJ![!B!5c]/Y9E|t4?v%\}C}h7)x+V!Bq ]O|=^$I2s4>NhP\26B[!B!ĵbjW'~["m u$P!VB!ծN !P[H¡% QO'!V!BQ'+_%9)o "2B*EzB!BzN!Up9::2f½<D>zoyR)B!V!Bq IR:pppm39yTBHB!B\Cv/tJFYRb(x+V!Bq-_zm K�D_4FW(x+V!Bq eRySrލ/c&eS 瞗)x+V!Bq ''!Z-YR!B!VDEE1p@!BkVUj:squ?B{ oB!ׂAj:)*,1-?@*F-*b$ !nx%'BZ'R B!V!BqHR:h֬QQRBC u.WP $ !EB!2B!B!7 SL!B!B)fZcjNX\LARr"r$СJN4'<r 0a5(HJX\|֯x b˖-Ax+*۬R�(( | f9LW8 &'TҴLVҴJr !BvSTn|#xqJűOxVKE~~e cIT=,>:b~G߯~\ӧmRSYާ7Ϝy)6%_cYշ/To_2/pz8֭س/'Dor]%m :?r`+#p �e3=@z~U=Γ9%|j%5mEDO]ÑӅhK*Yr !B {;<])6(ygկ71f=O߾ܳy3Ҳg{6UYzCF's05�Ke%E1fmB"[2[<0s#T}ޝr$ѭ<bB!W>٩e Z>ّvS[Ar q 9Jm![Oŕ^ ?0 ˖4w&3kħ_?z<,�I?ѥK1KٓnMéaC.%;.Cq1>ϐP @޽9r%}^|\ES4DɓhќL|_f3Cݺst":>,{GߢO=FӡC7FSzڲe ׯg„ DEEթ-$Äx+ ٛ֔By6|=�ݩ2g3w K+@a�},"l]yW ڇzYĂؑ\HK_5t$4ػ>('ڤȅB!9ߓzazhAH QׇGӤGi;z4a#j|rPJs(̪9MƶmlypNjW:F�ܿ>Jԩz <Z\Q@@L mGFB-vh9KH'iܺ?QWLe#_}Ip7 7) 8p _ENJ ~)�j&t[/*n Tm|<t:]ӦM6![Rڡ)s�E=|ѡ-!v![w塻-ԝonMAay(ԕ-˴x5tGqO=]Xc݋Jo]᨝zYL ~4.*V>C#؅B! =|Wgbg`hԬ`:שYii`0ש箞xz闋5~<�ݻ`(+ՕƁhAl˻8:;պmIIUhS$#o觞B>7&ZQSvgJE護rrV݂` ^:FX-۷gϋ/CMsjӦ K,Yߜϟ?WѨ7oD!$JmD+?"Zм͛y-%OՉ.~xyeaJk.YfOq4ocP5j|oNe{C hRmX͐l˜o!BqۤXl&~!-My7`g5{Y޵+@"O'|0kw3VCPs7 Vx%KeGq,f3�*ת^�jW(JL�avq&mk>n8\v:vHǎT/}#4%> v{"[B@OWruK.ިx\ĩ02O{:Gx.~I%H,W!&aI9xDPiqxY*[|Ë/?[ǏGGH^Ֆb:<a,MӦ<o%&R'u‹y7*@% SdffD&MjUEhќ?lذAbBHx/KiF܉"%<.(XbY�\{ A&j%]r?'w'ҷvݟP999>NfM/Bq1Ų:}{c‰ $C[LXZ%;q qcV!SwV0~<׭;wCg1)C+Vz %(NO;vԺ;!11uHBox{!WQ\VĆ)*&eaZw\]m^6,q= �*H9[|C3Mz&!!AB! z CWG?|͑#tppB?=m{ayl +:y_GߋNG1v>~Ng 1{&4nWM[¦Nㇾ}Qj4<NgwOܞ @ɓ,FiXGԫWJ) N8!oB9^ʑ5o fۘ9;�1o{Lܖ^Ļ3>Ə[6as=((0޴jѤztz_:N]KL�wXiZ�GG!Byb^l&55VccYl0PJ몭,'G'׹`4;OT \z зo_"vFQqRR[o F jjgLi2#~y{l%#n4T~1ǏkןJHII.1W!Z'D[`U_ǘQ8;xMϏ}'77BבWC:Ѹ(Ѹ\ǖс +//gͬXB3B!n@җ_ް::+!\]]))qB!nT2(B!B!; * B!B!B?bcH%!B!B\SL!B!B)&B!B!oZX짗d ) -Xd* uZ` />R/R'/>>_zBQբ= $,&Sյmw/{{ӞK?q4]Gf~)�'K8]rCoqZ/_f0`dEWj^!-w]H{<jr oץ Xշ/�X=`�6F>#`*-&;}C+W^Q<՛_Mc;b6m_da*$ 8V @V|<"?Jx'^O?׉v ]=sɧ}Xާ7ئdyT\:'c+7'0`7�KJë+>ݶmg/>^oEDO]ÑӅhK*Yr !BvS;)~G<ObUJK6nDV_鳲88s:ٙ1ХKPth2 8kD7 G } iF#E90s&gR&W֍@io/lBc&*؃+Ba'v۸mϏ;!1}zס�ޚK!x(+z;<GGjw̘`(T*�,_ 0Whҿ?GUY30�~/_yҬ,*2}:�8m;ɋQYy7 Lv!S0leΞ3% ѵ+'O88<{d$MýiS~lڌpP:r`�2bc9甝<A6mԓxתϢE1|ȸDF�nN `xߪ<%{yp\@bGҽC3^|'ޖցxnvE_C,V+;²ǩpm =($͡~ԏk1jxNĉXc,)!vR27l@"pDM|�_}}VUO/JE{ףgoWޥmfo݂66n=Tݽ>ヒ{` X$~X@ر:^sMVV&?<~+޴!'ٟE۟gkIז3k�v@RLi>a㎣H ת*};{)~:>A<4#�/fgg%QT=i|.F<5.r !Bsv;ޣ'AO?^FM q  ib};BQz"/{˖:>VMA%,Kz&Ip|R*t:#_}JEѣ 8+mG4 +.-c:z�i;z4 UTX*+Y?~<tm6VGG~zp3, eu߾xFD7ݩS�搗b'(8u�NOCӭ+yVy݂uKMޝC{k:/)3/Ovqg`^N_­i{lc991mx;/Ϗ?S%R ^-Zm�mBTnn*[rSכotscݽc\K8:lZAw�{h;z4&Mk0k$.o"NYMI͞BJN8e+�Va"|_诿ֺlGC׺ng GǦ�}k̜"tU\r't|f##51MOJ3_rG>Av>̚IIŹo`;¿!&!Yc|6ecVFmGoGUjV>H.z!B+ǃim1*;OZM>?ét%n#d2TVf1* bz ~:a1Q:;שSǷn#䡇m oM=T }q 9W+{ % tq ΍(8>Çnߞ <Y1X*+iwv4Q(T,Y-[|oቾ*9қ {Dz ٹ&}x�x[{Jvo>QfD4kV=OGFVO>Liv6 -p|:vĹAU$Hծ�hֹ3=zpdf<.]2`�5ރ‚|$bgͤcrvС$/R:6m<p?gzƠa\cm}x:[mzt{3v�<33w“8{Q ZDq9tsxӱ7a;(�� �IDAT2B! Wb�,z<Vo7Ve#( iW(kL+/()S0 cqU0d{JIg-nl2WO/U%\==Q5W*<G1uM@�]?>oMFqkU>44'X"\]$q$ܛ<f)1WT'>ݺ,g 9MbisU6-{*\5U_.8( ̥z:yyMGhÆyͅ7ǵgCtM?YB5*hؑ]wp3Ϻ}fݭOxU6=4Nr !BsJ{>x۴`?+.nBz'ryNFN\HƂ{nETg6Tۦ\JEZ,5S}^JԾG'gg źR`g@'N\89a2ސsci7r$9 1sV<SĉPsg^|czP9b9SsºU8ybTE\x?F#"""B"xڴݾARS9|m~Ms|$M#G2v~ zihWi\s G'g:NJӘ+x+h.U|ːyTTp%.ܣgbX#ubYJǺpI=x|\ x5rf t5k!B)bM,Oec4ѕUiA4pŻƮBd ?jѣY7x0Es1b*-#~jeZ@/kӥҪMڕP+ivwGϐJ6q# i|VЀ~= RgfRpfFc%zYٜ\Ҷ 츃8i׎!+jFȄbbbמ:չEYI\,_m Ɲ sT8mDό1UL2ZmLpDO!x{a(,;,-j`Z10X*MZZ( U ^*7!YoQO=mjo/A )$Y*T|$9IIgy222jzy}t~6-8țdQb)⏳y')�V{P&!!AB! F`gK/E1TV݀y5b##cYmSFލߟ] 2e(~8,lER@�߶iʉ{GW32r$_yiܡٺ-_?鋩A?@^ۇYڡ }z/pWmxzw|O|?SAH ݇^bu^(,ܶhޜb],l upVo,.qc1KjA6|TA]E'{ߎw/-͛: o}QqsQa2[ɮPRRգU0B-ޢxRg֭GF3GDhh9ir2'ºwƥ;F} ^Qbx_&PXDյZ ڕF;UVbcNo÷ZhTm[u5p5]Dۺ;{i;4JY<㖚ymݶǸ}vg�jYRxqRy#kUonvtTJPB!8XCW1Ljju6䗔P(hPSmpk!6�QQ׬\mJK1KP^uZ-J33pť(.\Ygm(a6T(JJ^pl3Hiv6^^({b2QY]J[cFWjhˌhK yhضm`]\VVӀg!44GGkoݸyg4+ Q8ZPQP窤Ca!gݿQ+)*5Z4J2TJG|i#F'g_@JJuB!_gK'#{chPjcM  ^mN <87չB1vONN֜TҠiӋ߿ޜ PDCuev͸qҥ\0B%%cNnWw\˞a- \U4pU]6{򲼼͛7b I !B܀V{{Rqe\]])))B!A)$!&B!B!ݽ}R!B!B)&B!B!B@!B!BI !B!B#I1;a5(HJ¨z 69ma6ȋj]ܳ={)L=v{y(:v24-e&4-Rm~ - �/ D jNX\LAR_fiv6E5/B!:)qog~A\ZM"VKf!�VuZ>#`*IH)CboۓOoM Q%y:˗]8<l~a׬LM/"z.D[RA5Lβ͏y|`9Q"x{iqqxVKE~ cӤkl=}7߭Mo9w4X!Baz9E%nYE%T˿,4~~ ۸Z}\Y'Ů]zzԪ$>&OM;h3g^GX|e;&AFw�+ǼhwO �*wd|�8(B!vڭ<,�7cƯC�v5СC`PVX+;<GGjw̘`(T*Lb.`Nw&GhGfo݂66n=Tݽ>ヒ{` .DJN\%GSi5>y'�{?“'�87vi^s()a鈸>>uX;gd �]ZoS%)I9Bp�~".[wڔV+T%�8q#1=@yA,!{4lْǦѢEKRR_~%ь7Nx{0q`rn#1(5U?cS:b$9qzeįY5kptui^a/~{.NNN].><1a] pM jSm!B!]+1S% nYQmB܃z|5MBBl3oG_Xh|r:Jܿ?Q|?lc54Ys5ǜ98{y0WTqrj'M"n,jWtđ-[MH`Oԯ?]O>ɩݻh>hm;I^W,))zFx &̘`9ii4 kz(JJ"dH6Mg-ѝ<yٺ-/ґ#e'�,od*Jxm^YwTh5C /Ҭ{j.*GHIIP<4h\T|&`F˞L`o�fmGώM% բ~ {` .DQCTNHO>DφN秞"yy/ u::= mx&@Ә.tx?߂ 裏0okPΜ=/zPYOs,AB!\pqyӗ7Q`?'Z&m\M:tDΙdAyI<.]4m׎ٳMʻKB 7{PXOʇNL[�zmH`׮x̸fMڷ%�"#Qqb>ZG_ :FU }NB&}VB&;'bDrr(ʢ/__NL"Jd`Nbz łOPYIz|<}T;nX|@?K,& 窱!% 7}3Lx{xШY3"5s (:v ^v<?CTVedNNt~a~ڰ�cI gwP(6hݴ okl|l6R+|wr*#ѡm:aEPTNŃ>&ԧ4b!BqsJV+Z}/MTr4j:Zqq":_IF& 77/M 03W\5UGBTo[=M[V8BAOwCǟ3uQCzYNZ- ynݝr,MRT nݹ}.T..*D?H !ߡKOơtqqx8e99˫Za008řGՍgfk�8{x?:ѣx?G^ Wչ.K,<#'JRL!B8YTSx9V�\ O'%}w<Vpޣl726H 3wk,_m\Udgm,,ǧBY!ݻk/^!'Νm|۷XPK1WӮTy^ˆݶ X|;8*1U#=Bwށ+ 9z4Ƅ^PRRBJЪU+B$o.]\�lʞgI,;*>98`<.�< όgXWlйs'u?9[3s]QՍRoیtIB!yr!v=sgT=oˮb� Z. :yh hM  %?8k�f;wb*/:S~Ky~>])_}_~y*ܔͥgiSޖhh6|8QPr&aUSu~=yy5IMϛН8 �Www "ǎa*+ʕ}Z\i$yZZLdG}!'w}w±cLj7ߒ)$^ LTj9ծ<RNGs/P7iߐį_gYAJ Z_xALL N[n:{> --h6!NXmΝ;ӹs4j!BqSQ;H8+|XzwUP޽۲ό5?hv1[`2q"V Si):rEwp8չ޵K:a1}/89y~yMH3:umv#8[B{|[a\r"<j*aw(,Fiݙ bE8�32hܲ%-&Ofen8itΔt֕+#|),F#t X+*nCCCo/ՠA~-߶jё{%35�7,?,/ňUUP}_/NN8:;uRYԘຏ/zt]PɭnWkVN)B!nb֏PfRSSi>=@TT5+W[R>WuVL.xy֪̯>Kiۧ/FOG7S mVW/:Ҭ,\<=qtvl\ѣʊ+=^I>u3jxxxԹ\JBCCqttx[mmX*+)FX u$&$TPKeij__j%]d$q˞={2dq[p %%\!B/v7DchPj4W}  6}ruARoۺ?ryE;Xz5f͒Ppkvw"qoᥗk,8t bbb8pt!BqSO!lh\~spa0n"eˤ1lXrN^oI.w<Ç3|p9B!#= )0n M 0@*Pq]oORB!BRB!B!HRL!B!BI !B!B#I1!B!Baw$)f'&IIu�h(ifxTukw/{{MYբ= $,&?^Nd�UPʑt;gJ.2tW +H9]TmZ N$=޶*J=tPTD^|eQr9ٵfiv6E5O%В�hQ7x޴G(,1\rlm-Fy].!M(B!XAIg~Qm(,bU߾d`;Pu32X=`�ks3;}C+Wuk5H^~ʯ'ֹ|C{ʤűOo�Yշ/X/, -I2wz ^r7?Njx()'>QnrY-/o/u%'iˮ#vwll`S1�Lxc 7'ELZAۉ+h }u#[u=N?JeC ~q_:ړj{x>_t冾3IB!WFiolZ8Uc##tS߸Z1lFj5ٞ>+3gq=7t(<\GPtW߶c,h]+ޝڸڴ־D PmaXo}<YB>:3}5Qm|_%]:];U_ aB!^m/> H 8c߼ �\B;<=|@Ya8::V+c fFR`dedm؀@tx\<<̚E1xh|}+feQQTĖhw}J߶E,|pڍ9[L&uk1hi:.:O#% ѵ+'O)$SP4ŭiSN[G9N/OO8't3Åp`7JÖ-zl-ZPBo(HNR[}գ5=_xg`Oa%raczpp9;m2ymd4<o+-)>LܖocCl.04ڟqC#иq%e{R "d!ed4VS\fUӚxѮgvsWftn�@qWc M ؾ$GKyvT{E|,/&/MGK?5 jEAͼed+Osnkɨ[�zJ^L ]>ܬjpp\GLWb<boIIX`+Ws`26nDݴ)~߈'_x** \ʱ6mDTXšNʵ%Ŷ)+LĨQ9*/%{ysZo e8>އ J8IHBW ?"*ꪻ* ,Y,*HB7&g~LL̀By|$s{f;ßJƺ֙1>H2˫ Y_O3PlCF+s cK&1yT NJG{3_gXZcģuc0Yya/<yO<5Ty}o8+Z%eUzg懽k۷#nܰY`1_;QVn)8CtDqmcN}islvUc o~-3c\ R͹lU�!x8-94co XQFUT^Ǘ+Ӿr4rwk� D9.5ixvLg#�Tܿ]Kn0�� �IDATѓGǦU" pHYf?O5oVC…m @꧟ۮ] ;}+W;Лo&0!a3Yŋ9:>v5ٌ+3XӐ8hꦺ1G>cM RFڧrFq(\_a혻s$ӦfySoΞMĉx CE6ʱcA+b[,諫ș1Ǝ%wjӇ �p>g<,føf8Cm^wBgVz+J8jݺӸ Ge?4{BΚ5�xs�CBH_Ku]ߟM]]]ϓnH ձq"C}? O }?NcR3!I1>u@v1qCTZCe7s168 Bm"tbok'zoq~8^Q}Y;Z]o$]Xl[}(?V _|w#yvKkI~hq<x{J:Fg]jE^?KJ.*"UVi|i?x2N5)y\7o&utYٿGpj⧿xϴ`B}gdcɄ�0sL,;}гoסbn{e=cni3wuK1NofNf.Vdu?8ꡙv>̃L=w&q=/j=&v!CMݕ9lsEtGnN`Vm9ɼ%9'3kYo0'3Kvp,4sw'`:יL՛^7^Oe2{vUm"pUJؗSGNT :Gx]jvj+0eh,R#[m"XM ?9?SUI](,͌,*kxxwi=>μ@+ErXmj5~;}"f~džDz4KAA++\Ϡ9BܻMmm/.[GU]=OpchA4p%ꬤ˙fb ˛Slz=9$R)IIجV*IIpn$"8Y9[čdbK/1`rڤ4_{7rTnnޣƑkT$a=z;:]RP(liuzz$;�G,[ѮTlDil6:t�Ջ$h:g?w|B0*x'4P�ڴ!Ms=uTƏgsu$CӴ`_g}tQѡ;]:6 wa$WQ3չ<?1J%VJO;n )1nWI˷5B]C6OF.p155sco:{=I ">ҏG?M~im=-'KjQkT󠼤m=z$jRg0[;Nsf~rA.DGaڈnooZ\Z޶:K4;)*f _A^^]ybȻb7L`r29ɬ,bԉgLgj6_s?>g+.;QŌtMέ=Ww=e=&ޙD�<5U:f?bEx;.?|{減B9UxG֡|na <16[g{p[rK W>3婡T >Eh?Wo;{+}HoJ8jw G?Hu</{8~|Hm6b΂u_1gM8-,Ѝ@7TK3-ڿ} XA5:[UĘqXmvNUr!& ĽހB)mHAAֶ.jisx|d?R0א,:|cI >Ijo by9jdקo1uwJWTj=uuQ9Ph"kjd2R cn*=<=rNCJMɥoGt!uj eenBMnn[CofTq w#*'9qaW?}JRḾT |[o;$7ve۸=٥ӿKHcRLFhMf.]sIla@NVc4=qU.q2r>VvFfY' l[;*wp8g 'O Σ/+fՔAwd;jԝW|_ߎ0OӍkV~-AwgԴxnLt\gM~^Z�\:5LSVǕSXK|xDw-Fc:.ٱ c#ےyD3QZm׃e)lzBddGrP$Tյ]q\p`5y%.SwjU˾+g s&*؅S(41Lzȇ[N&iL$O=)6>N\FF0oGT   ")v89Xm-V֛*9xɖ(ٳՊBݼ]dfuHr m#0|!~vc)d6wZRy8L9oRXSH،F:TN*,3 _lɯy$R\o_wl' dJL!85 ƠG~c6]x>�ݔÃ<++U&Pg<74nP'po6qԭ6*K=w{6;S>7/DdPO~982?xdi%قT!ǤsaJ T:3/)GwΝX6^bl;oz$С'|ͨ'JMDtls ɟs8jB9a4˿nzٓה7 t(5|>eFVbnzfEE@]V=$pכ+܇pJ>Ɍ6y~Ȥ-kGw7gGӵݜ--+<~[7y=,9<{}-g<;g3_V0kjOޜ̎6g.SAA\.;YTJvA)Z^BP+[wl Ʃ͛1_Fb@l&Sob,:,zqiIQ6?{E_QAU^^ș�]i)KfNWڌî9mv;mfծRGxDlx̩+>y @l*N Nal߂ݎb`eeM7>܅ihD*9|9 `͉de<ēRPjI!@Beʒ '((ӡ?ZJ`V&=z~,a/`͛9yk8|Z ێvFoomV+ Cs֯#1 EQh5lTRj-^Axzycl,} N�>̥’ٌVwGO}Gx ֒֍ ~嵻B*,6;k~.RJnNd`r۾jʹ t#2vGaddF +`Nˇsk5*3m`OY;u!e9xMAY++r\5J{;+dU֟:A^ZD{buU:Kj =&²:f}4le|$@v޴olq?UTEAYnJ⣃*hepAAZ]M%ƿD=[3f + q@~S};+o xDF^p቉dytGd %Fj6='X=b{_|SMӽ:tsϓѫ7~AD^Ƣx %z4}z|={ 3_faHІqgf&N^^^0 W˸i=ߵpk^7~}q֍͇t=nޱ_uMf2 cȢEM7y;11fٷ?i>oQQȵZlf ~;0#i+Frn=$w~L&e\dU54^XԫL=3\_rwu#qb<<g8�NJϏbׇImyDr~kRJmftwepgsMJHȇSJ ::ӻKhmWnV΁EȜ h)b(֯o|"r45z*'0IxU;wK|S[-{N;5Q g1*~<1Md֘N}nj]C KG2'z0<>D{v(nμ֒;:N@OW3ӿu_w {1OXm!Fbǻn5.& 'OK#K*iZCcԻRxq/i+ƗwлKopvR`Xɜ՗|}_MRG�{%!qH` lZx.f89kD1gY%&oBQLxs㼗ULx}:*zF|sAl6NYV=JTT_:z\Tx:wMbb5,:Z4~Wlv ]ajod穣ej6e a<]^6 FOoqm= m@Epn 芋Ȥh||/i^Sm-ӧ!m(wd('KB~=i΃S2u&t ^; V:ܴJ<Wv"""ɮm=^v"4HK'wwZ:�saq`-i3JN ^rNoJg"K{NsZ^c@.<~3FszZ5&*kxjQ)M;f2;N_nU٩70K~r<`v< %[{0N{y`X25k9Oɓ[6WAK)U)Ѫ}2hWL"|_vlp/*wT.U(pisy6K #v..X@!R~[ 1..MM{ymB&%E4(Hp p1T_vsy9j'].f곹j5ϮBJi;m>ž =Xqu jQB I!#)&LqAA�Qh_ZMj*֫PG7r)7qwAQXVʪ qK{CEPAAhDRLZC`oBE AZ(ׅ hAARAAAAIU--   Њ    ꈤ    ꤘfny۶0lp?!`AD{{*+<t�SM YY,XU> 'r�Njk9^\{ħ܂j�URo`9WI$.xAADLV2wi?lyl{JJ2ه dժLq ۫$o @,CCFK/U/2k&>[v7{8_Eʔ9uZ)SpAArݎD"i5;lۙ2{AF~Di8pP VAA2[SB `_^KO31U~HR,8A_<+˖FҥxuFC N~-Ju%q�0ֲ?(;J!Cn#qeg} 9aݽ;M1lpt7t>G=#jdw-$'nx"Įݔ;Fx:;,x*j0\R,(**g!au8^è3[<*' Y]~J=҂;$ʳLP2̌EP7͖BU<rG lv;+7ac6kHnekpQb]qQ[AOVUU?m̏y \a\jg  I_9�!!/\*Ԕ>cťۍ7e2=x +F^X+%uK2eSpN6MLܔ)xu< (j$ a1VUb@\۷'嗩g/7{o-,ӑm�ll>E[ H(ݲE1ڵkyյ8/[`�=}7N++f[I2{54U9!RX$ll3o1gdG3 ˝>{=rx. ޖO@^6יL՛qGӣٍ԰T<h,}"@7q  \'Z]RL7X &N;Og L+̐!޽O>8AJܠ�iCܠA(fI4$RƏ#O07$=4nXfé=t]q1�rxDw7.X_L#$x:T䐿c=@Qf&]QoRDs򿋩/)iq/N' ڕv;y)S HN&Qyy]R N-m$D#)ɡͦߚ}̸B9UT@֡|na̠XRcxbl2ddc;)L"5&c*Q3}7[z{v;nt vc�<^J@3,-~< ǘ9:^Imܳ=nnV_ A$gpXB/ phu5T r p%6dy^~<yw'˗mۊ3Y^cj/oTn^AZoo�KKqYӔoތ_z:k~jc̈lܳϣNM#Dڌ͒4!!=41C"St+A^FuOh:Ҟz|#�;֗kf>/UUX z�H \/)Cvc!صߞZzGr koJ:{h1Q+q &+d;ڜEDi_q)!�ʯcxzP9RX'.k 11>}@ pմb*LRMp|i6]G_Kyyy~ <ih4 R)rAD{{k[,Hr̺z�..M ټ3UGr|ɒ܂m| 8U#F0fN\ڴA1>,;wnXك~})޴#7ٷp *16 3:;*gf,kHNT&tưL}i%abcch4W$ cT'i[ښn%&c8hvEݼ&fGgNM5<O- prĆb~&ƽٸ8) CӮ?~)))3\^%65kٰ.X1a3[طbEvPQsPAqe5$ >~+qq(=<@rſ_?B88g.A  a wëW1mPE��,IDATA"4|8G6lnQ}u'N\RxIRSS)((1mCƶ %;R\DTO:Xmvlv;{rT<H@^Q sI!]#TLTOyAAAbn'>0?{R & Quaǜ VYŐAD{{<=ٳpx� eDB`B"~o嫸8Z-lkֲprsTWKWp s'Nfhj'Մ$�"�h �Gx8]?FP"`5<wahG{Iq{ĕ>qb\nr@^CljhUr:ijF_~U2zVWrwdw~Ƨޏ=ظ#w-B.rG'쫓   Kb YV=JTT_:|ݴ(dk]vpYٳCEEWsfssshcҤI + .;Ȯq{#oo/#پB4~~Pv;"(ፆ LԗhpjUm0//GDgm6 \|:* /%'JNX{I\SoHgxpR-HK\AA/YбCq OnX'|||[/ԩS0|pqv ۫M"|C%Mye*.!!92''/}7RAM؝ Ϫ R~ Ns(q՜'cF\̂  7ڽJEEuDVt1{@J*r %wD AA:&n#2AE\qHO0AAAg    ЪiӈAn(NԩS6tm"@  Њ sAn8 =:_  B+'4Z)b    B4s`Ds����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/������������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021147�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/AddButton/��������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023033�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/AddButton/AddButton.tsx�������������������������������0000664�0000000�0000000�00000001245�14467713645�0025461�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import AddIcon from '@mui/icons-material/Add'; import IconButton from '@mui/material/IconButton'; import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; /** The `AddButton` renders a button that represent the `Add` action on a form */ export default function AddButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ uiSchema, registry, ...props }: IconButtonProps<T, S, F>) { const { translateString } = registry; return ( <IconButton title={translateString(TranslatableString.AddItemButton)} {...props} color='primary'> <AddIcon /> </IconButton> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/AddButton/index.ts������������������������������������0000664�0000000�0000000�00000000104�14467713645�0024505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './AddButton'; export * from './AddButton'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/ArrayFieldItemTemplate/�������������������������������0000775�0000000�0000000�00000000000�14467713645�0025504�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/ArrayFieldItemTemplate/ArrayFieldItemTemplate.tsx�����0000664�0000000�0000000�00000005110�14467713645�0032576�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { CSSProperties } from 'react'; import Box from '@mui/material/Box'; import Grid from '@mui/material/Grid'; import Paper from '@mui/material/Paper'; import { ArrayFieldTemplateItemType, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `ArrayFieldItemTemplate` component is the template used to render an items of an array. * * @param props - The `ArrayFieldTemplateItemType` props for the component */ export default function ArrayFieldItemTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateItemType<T, S, F>) { const { children, disabled, hasToolbar, hasCopy, hasMoveDown, hasMoveUp, hasRemove, index, onCopyIndexClick, onDropIndexClick, onReorderClick, readonly, uiSchema, registry, } = props; const { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } = registry.templates.ButtonTemplates; const btnStyle: CSSProperties = { flex: 1, paddingLeft: 6, paddingRight: 6, fontWeight: 'bold', minWidth: 0, }; return ( <Grid container={true} alignItems='center'> <Grid item={true} xs style={{ overflow: 'auto' }}> <Box mb={2}> <Paper elevation={2}> <Box p={2}>{children}</Box> </Paper> </Box> </Grid> {hasToolbar && ( <Grid item={true}> {(hasMoveUp || hasMoveDown) && ( <MoveUpButton style={btnStyle} disabled={disabled || readonly || !hasMoveUp} onClick={onReorderClick(index, index - 1)} uiSchema={uiSchema} registry={registry} /> )} {(hasMoveUp || hasMoveDown) && ( <MoveDownButton style={btnStyle} disabled={disabled || readonly || !hasMoveDown} onClick={onReorderClick(index, index + 1)} uiSchema={uiSchema} registry={registry} /> )} {hasCopy && ( <CopyButton style={btnStyle} disabled={disabled || readonly} onClick={onCopyIndexClick(index)} uiSchema={uiSchema} registry={registry} /> )} {hasRemove && ( <RemoveButton style={btnStyle} disabled={disabled || readonly} onClick={onDropIndexClick(index)} uiSchema={uiSchema} registry={registry} /> )} </Grid> )} </Grid> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/ArrayFieldItemTemplate/index.ts�����������������������0000664�0000000�0000000�00000000136�14467713645�0027163�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ArrayFieldItemTemplate'; export * from './ArrayFieldItemTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/ArrayFieldTemplate/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024665�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx�������������0000664�0000000�0000000�00000005247�14467713645�0031153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Box from '@mui/material/Box'; import Grid from '@mui/material/Grid'; import Paper from '@mui/material/Paper'; import { getTemplate, getUiOptions, ArrayFieldTemplateProps, ArrayFieldTemplateItemType, FormContextType, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; /** The `ArrayFieldTemplate` component is the template used to render all items in an array. * * @param props - The `ArrayFieldTemplateItemType` props for the component */ export default function ArrayFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateProps<T, S, F>) { const { canAdd, disabled, idSchema, uiSchema, items, onAddClick, readonly, registry, required, schema, title } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const ArrayFieldDescriptionTemplate = getTemplate<'ArrayFieldDescriptionTemplate', T, S, F>( 'ArrayFieldDescriptionTemplate', registry, uiOptions ); const ArrayFieldItemTemplate = getTemplate<'ArrayFieldItemTemplate', T, S, F>( 'ArrayFieldItemTemplate', registry, uiOptions ); const ArrayFieldTitleTemplate = getTemplate<'ArrayFieldTitleTemplate', T, S, F>( 'ArrayFieldTitleTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; return ( <Paper elevation={2}> <Box p={2}> <ArrayFieldTitleTemplate idSchema={idSchema} title={uiOptions.title || title} schema={schema} uiSchema={uiSchema} required={required} registry={registry} /> <ArrayFieldDescriptionTemplate idSchema={idSchema} description={uiOptions.description || schema.description} schema={schema} uiSchema={uiSchema} registry={registry} /> <Grid container={true} key={`array-item-list-${idSchema.$id}`}> {items && items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType<T, S, F>) => ( <ArrayFieldItemTemplate key={key} {...itemProps} /> ))} {canAdd && ( <Grid container justifyContent='flex-end'> <Grid item={true}> <Box mt={2}> <AddButton className='array-item-add' onClick={onAddClick} disabled={disabled || readonly} uiSchema={uiSchema} registry={registry} /> </Box> </Grid> </Grid> )} </Grid> </Box> </Paper> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/ArrayFieldTemplate/index.ts���������������������������0000664�0000000�0000000�00000000126�14467713645�0026343�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ArrayFieldTemplate'; export * from './ArrayFieldTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/BaseInputTemplate/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024535�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/BaseInputTemplate/BaseInputTemplate.tsx���������������0000664�0000000�0000000�00000006265�14467713645�0030674�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import TextField, { TextFieldProps } from '@mui/material/TextField'; import { ariaDescribedByIds, BaseInputTemplateProps, examplesId, getInputProps, labelValue, FormContextType, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; const TYPES_THAT_SHRINK_LABEL = ['date', 'datetime-local', 'file', 'time']; /** The `BaseInputTemplate` is the template to use to render the basic `<input>` component for the `core` theme. * It is used as the template for rendering many of the <input> based widgets that differ by `type` and callbacks only. * It can be customized/overridden for other themes or individual implementations as needed. * * @param props - The `WidgetProps` for this template */ export default function BaseInputTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: BaseInputTemplateProps<T, S, F>) { const { id, name, // remove this from textFieldProps placeholder, required, readonly, disabled, type, label, hideLabel, value, onChange, onChangeOverride, onBlur, onFocus, autofocus, options, schema, uiSchema, rawErrors = [], formContext, registry, InputLabelProps, ...textFieldProps } = props; const inputProps = getInputProps<T, S, F>(schema, type, options); // Now we need to pull out the step, min, max into an inner `inputProps` for material-ui const { step, min, max, ...rest } = inputProps; const otherProps = { inputProps: { step, min, max, ...(schema.examples ? { list: examplesId<T>(id) } : undefined), }, ...rest, }; const _onChange = ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onChange(value === '' ? options.emptyValue : value); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, value); const DisplayInputLabelProps = TYPES_THAT_SHRINK_LABEL.includes(type) ? { ...InputLabelProps, shrink: true, } : InputLabelProps; return ( <> <TextField id={id} name={id} placeholder={placeholder} label={labelValue(label || undefined, hideLabel, false)} autoFocus={autofocus} required={required} disabled={disabled || readonly} {...otherProps} value={value || value === 0 ? value : ''} error={rawErrors.length > 0} onChange={onChangeOverride || _onChange} onBlur={_onBlur} onFocus={_onFocus} InputLabelProps={DisplayInputLabelProps} {...(textFieldProps as TextFieldProps)} aria-describedby={ariaDescribedByIds<T>(id, !!schema.examples)} /> {Array.isArray(schema.examples) && ( <datalist id={examplesId<T>(id)}> {(schema.examples as string[]) .concat(schema.default && !schema.examples.includes(schema.default) ? ([schema.default] as string[]) : []) .map((example: any) => { return <option key={example} value={example} />; })} </datalist> )} </> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/BaseInputTemplate/index.ts����������������������������0000664�0000000�0000000�00000000124�14467713645�0026211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './BaseInputTemplate'; export * from './BaseInputTemplate'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/CheckboxWidget/���������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024041�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/CheckboxWidget/CheckboxWidget.tsx���������������������0000664�0000000�0000000�00000004565�14467713645�0027505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import Checkbox from '@mui/material/Checkbox'; import FormControlLabel from '@mui/material/FormControlLabel'; import { ariaDescribedByIds, descriptionId, getTemplate, labelValue, schemaRequiresTrueValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; /** The `CheckBoxWidget` is a widget for rendering boolean properties. * It is typically used to represent a boolean. * * @param props - The `WidgetProps` for this component */ export default function CheckboxWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { schema, id, value, disabled, readonly, label = '', hideLabel, autofocus, onChange, onBlur, onFocus, registry, options, uiSchema, } = props; const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, options ); // Because an unchecked checkbox will cause html5 validation to fail, only add // the "required" attribute if the field value must be "true", due to the // "const" or "enum" keywords const required = schemaRequiresTrueValue<S>(schema); const _onChange = (_: any, checked: boolean) => onChange(checked); const _onBlur = ({ target: { value } }: FocusEvent<HTMLButtonElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLButtonElement>) => onFocus(id, value); const description = options.description ?? schema.description; return ( <> {!hideLabel && !!description && ( <DescriptionFieldTemplate id={descriptionId<T>(id)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> )} <FormControlLabel control={ <Checkbox id={id} name={id} checked={typeof value === 'undefined' ? false : Boolean(value)} required={required} disabled={disabled || readonly} autoFocus={autofocus} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id)} /> } label={labelValue(label, hideLabel, false)} /> </> ); } �������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/CheckboxWidget/index.ts�������������������������������0000664�0000000�0000000�00000000116�14467713645�0025516�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './CheckboxWidget'; export * from './CheckboxWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/CheckboxesWidget/�������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024371�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/CheckboxesWidget/CheckboxesWidget.tsx�����������������0000664�0000000�0000000�00000005476�14467713645�0030367�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import Checkbox from '@mui/material/Checkbox'; import FormControlLabel from '@mui/material/FormControlLabel'; import FormGroup from '@mui/material/FormGroup'; import FormLabel from '@mui/material/FormLabel'; import { ariaDescribedByIds, enumOptionsDeselectValue, enumOptionsIsSelected, enumOptionsSelectValue, enumOptionsValueForIndex, labelValue, optionId, FormContextType, WidgetProps, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; /** The `CheckboxesWidget` is a widget for rendering checkbox groups. * It is typically used to represent an array of enums. * * @param props - The `WidgetProps` for this component */ export default function CheckboxesWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ label, hideLabel, id, disabled, options, value, autofocus, readonly, required, onChange, onBlur, onFocus, }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, inline, emptyValue } = options; const checkboxesValues = Array.isArray(value) ? value : [value]; const _onChange = (index: number) => ({ target: { checked } }: ChangeEvent<HTMLInputElement>) => { if (checked) { onChange(enumOptionsSelectValue(index, checkboxesValues, enumOptions)); } else { onChange(enumOptionsDeselectValue(index, checkboxesValues, enumOptions)); } }; const _onBlur = ({ target: { value } }: FocusEvent<HTMLButtonElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLButtonElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); return ( <> {labelValue( <FormLabel required={required} htmlFor={id}> {label || undefined} </FormLabel>, hideLabel )} <FormGroup id={id} row={!!inline}> {Array.isArray(enumOptions) && enumOptions.map((option, index: number) => { const checked = enumOptionsIsSelected<S>(option.value, checkboxesValues); const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1; const checkbox = ( <Checkbox id={optionId(id, index)} name={id} checked={checked} disabled={disabled || itemDisabled || readonly} autoFocus={autofocus && index === 0} onChange={_onChange(index)} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id)} /> ); return <FormControlLabel control={checkbox} key={index} label={option.label} />; })} </FormGroup> </> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/CheckboxesWidget/index.ts�����������������������������0000664�0000000�0000000�00000000122�14467713645�0026043�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './CheckboxesWidget'; export * from './CheckboxesWidget'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/DescriptionField/�������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024376�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/DescriptionField/DescriptionField.tsx�����������������0000664�0000000�0000000�00000001276�14467713645�0030373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Typography from '@mui/material/Typography'; import { DescriptionFieldProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `DescriptionField` is the template to use to render the description of a field * * @param props - The `DescriptionFieldProps` for this component */ export default function DescriptionField< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: DescriptionFieldProps<T, S, F>) { const { id, description } = props; if (description) { return ( <Typography id={id} variant='subtitle2' style={{ marginTop: '5px' }}> {description} </Typography> ); } return null; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/DescriptionField/index.ts�����������������������������0000664�0000000�0000000�00000000122�14467713645�0026050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './DescriptionField'; export * from './DescriptionField'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/ErrorList/��������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023074�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/ErrorList/ErrorList.tsx�������������������������������0000664�0000000�0000000�00000002637�14467713645�0025571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import ErrorIcon from '@mui/icons-material/Error'; import Box from '@mui/material/Box'; import List from '@mui/material/List'; import ListItem from '@mui/material/ListItem'; import ListItemIcon from '@mui/material/ListItemIcon'; import ListItemText from '@mui/material/ListItemText'; import Paper from '@mui/material/Paper'; import Typography from '@mui/material/Typography'; import { ErrorListProps, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; /** The `ErrorList` component is the template that renders the all the errors associated with the fields in the `Form` * * @param props - The `ErrorListProps` for this component */ export default function ErrorList<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ errors, registry, }: ErrorListProps<T, S, F>) { const { translateString } = registry; return ( <Paper elevation={2}> <Box mb={2} p={2}> <Typography variant='h6'>{translateString(TranslatableString.ErrorsLabel)}</Typography> <List dense={true}> {errors.map((error, i: number) => { return ( <ListItem key={i}> <ListItemIcon> <ErrorIcon color='error' /> </ListItemIcon> <ListItemText primary={error.stack} /> </ListItem> ); })} </List> </Box> </Paper> ); } �������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/ErrorList/index.ts������������������������������������0000664�0000000�0000000�00000000104�14467713645�0024546�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ErrorList'; export * from './ErrorList'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/FieldErrorTemplate/�����������������������������������0000775�0000000�0000000�00000000000�14467713645�0024700�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/FieldErrorTemplate/FieldErrorTemplate.tsx�������������0000664�0000000�0000000�00000001752�14467713645�0031176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import ListItem from '@mui/material/ListItem'; import FormHelperText from '@mui/material/FormHelperText'; import List from '@mui/material/List'; import { errorId, FieldErrorProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `FieldErrorTemplate` component renders the errors local to the particular field * * @param props - The `FieldErrorProps` for the errors being rendered */ export default function FieldErrorTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldErrorProps<T, S, F>) { const { errors = [], idSchema } = props; if (errors.length === 0) { return null; } const id = errorId<T>(idSchema); return ( <List dense={true} disablePadding={true}> {errors.map((error, i: number) => { return ( <ListItem key={i} disableGutters={true}> <FormHelperText id={id}>{error}</FormHelperText> </ListItem> ); })} </List> ); } ����������������������react-jsonschema-form-5.12.1/packages/mui/src/FieldErrorTemplate/index.ts���������������������������0000664�0000000�0000000�00000000126�14467713645�0026356�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldErrorTemplate'; export * from './FieldErrorTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/FieldHelpTemplate/������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024477�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/FieldHelpTemplate/FieldHelpTemplate.tsx���������������0000664�0000000�0000000�00000001166�14467713645�0030573�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import FormHelperText from '@mui/material/FormHelperText'; import { helpId, FieldHelpProps, FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `FieldHelpTemplate` component renders any help desired for a field * * @param props - The `FieldHelpProps` to be rendered */ export default function FieldHelpTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldHelpProps<T, S, F>) { const { idSchema, help } = props; if (!help) { return null; } const id = helpId<T>(idSchema); return <FormHelperText id={id}>{help}</FormHelperText>; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/FieldHelpTemplate/index.ts����������������������������0000664�0000000�0000000�00000000124�14467713645�0026153�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldHelpTemplate'; export * from './FieldHelpTemplate'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/FieldTemplate/����������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023666�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/FieldTemplate/FieldTemplate.tsx�����������������������0000664�0000000�0000000�00000003772�14467713645�0027156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import FormControl from '@mui/material/FormControl'; import Typography from '@mui/material/Typography'; import { FieldTemplateProps, FormContextType, RJSFSchema, StrictRJSFSchema, getTemplate, getUiOptions, } from '@rjsf/utils'; /** The `FieldTemplate` component is the template used by `SchemaField` to render any field. It renders the field * content, (label, description, children, errors and help) inside of a `WrapIfAdditional` component. * * @param props - The `FieldTemplateProps` for this component */ export default function FieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: FieldTemplateProps<T, S, F>) { const { id, children, classNames, style, disabled, displayLabel, hidden, label, onDropPropertyClick, onKeyChange, readonly, required, rawErrors = [], errors, help, description, rawDescription, schema, uiSchema, registry, } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const WrapIfAdditionalTemplate = getTemplate<'WrapIfAdditionalTemplate', T, S, F>( 'WrapIfAdditionalTemplate', registry, uiOptions ); if (hidden) { return <div style={{ display: 'none' }}>{children}</div>; } return ( <WrapIfAdditionalTemplate classNames={classNames} style={style} disabled={disabled} id={id} label={label} onDropPropertyClick={onDropPropertyClick} onKeyChange={onKeyChange} readonly={readonly} required={required} schema={schema} uiSchema={uiSchema} registry={registry} > <FormControl fullWidth={true} error={rawErrors.length ? true : false} required={required}> {children} {displayLabel && rawDescription ? ( <Typography variant='caption' color='textSecondary'> {description} </Typography> ) : null} {errors} {help} </FormControl> </WrapIfAdditionalTemplate> ); } ������react-jsonschema-form-5.12.1/packages/mui/src/FieldTemplate/index.ts��������������������������������0000664�0000000�0000000�00000000114�14467713645�0025341�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './FieldTemplate'; export * from './FieldTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/IconButton/�������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023233�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/IconButton/IconButton.tsx�����������������������������0000664�0000000�0000000�00000004634�14467713645�0026066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import IconButton, { IconButtonProps as MuiIconButtonProps } from '@mui/material/IconButton'; import ArrowDownwardIcon from '@mui/icons-material/ArrowDownward'; import ArrowUpwardIcon from '@mui/icons-material/ArrowUpward'; import CopyIcon from '@mui/icons-material/ContentCopy'; import RemoveIcon from '@mui/icons-material/Remove'; import { FormContextType, IconButtonProps, RJSFSchema, StrictRJSFSchema, TranslatableString } from '@rjsf/utils'; export default function MuiIconButton< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: IconButtonProps<T, S, F>) { const { icon, color, uiSchema, registry, ...otherProps } = props; return ( <IconButton {...otherProps} size='small' color={color as MuiIconButtonProps['color']}> {icon} </IconButton> ); } export function CopyButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <MuiIconButton title={translateString(TranslatableString.CopyButton)} {...props} icon={<CopyIcon fontSize='small' />} /> ); } export function MoveDownButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <MuiIconButton title={translateString(TranslatableString.MoveDownButton)} {...props} icon={<ArrowDownwardIcon fontSize='small' />} /> ); } export function MoveUpButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { registry: { translateString }, } = props; return ( <MuiIconButton title={translateString(TranslatableString.MoveUpButton)} {...props} icon={<ArrowUpwardIcon fontSize='small' />} /> ); } export function RemoveButton<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: IconButtonProps<T, S, F> ) { const { iconType, ...otherProps } = props; const { registry: { translateString }, } = otherProps; return ( <MuiIconButton title={translateString(TranslatableString.RemoveButton)} {...otherProps} color='error' icon={<RemoveIcon fontSize={iconType === 'default' ? undefined : 'small'} />} /> ); } ����������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/IconButton/index.ts�����������������������������������0000664�0000000�0000000�00000000106�14467713645�0024707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './IconButton'; export * from './IconButton'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/MuiForm/����������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022525�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/MuiForm/MuiForm.tsx�����������������������������������0000664�0000000�0000000�00000000713�14467713645�0024644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ComponentType } from 'react'; import { withTheme, FormProps } from '@rjsf/core'; import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import { generateTheme } from '../Theme'; export function generateForm< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): ComponentType<FormProps<T, S, F>> { return withTheme<T, S, F>(generateTheme<T, S, F>()); } export default generateForm(); �����������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/MuiForm/index.ts��������������������������������������0000664�0000000�0000000�00000000100�14467713645�0024173�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './MuiForm'; export * from './MuiForm'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/ObjectFieldTemplate/����������������������������������0000775�0000000�0000000�00000000000�14467713645�0025015�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx�����������0000664�0000000�0000000�00000005421�14467713645�0031425�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Grid from '@mui/material/Grid'; import { FormContextType, ObjectFieldTemplateProps, RJSFSchema, StrictRJSFSchema, canExpand, descriptionId, getTemplate, getUiOptions, titleId, } from '@rjsf/utils'; /** The `ObjectFieldTemplate` is the template to use to render all the inner properties of an object along with the * title and description if available. If the object is expandable, then an `AddButton` is also rendered after all * the properties. * * @param props - The `ObjectFieldTemplateProps` for this component */ export default function ObjectFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ObjectFieldTemplateProps<T, S, F>) { const { description, title, properties, required, disabled, readonly, uiSchema, idSchema, schema, formData, onAddClick, registry, } = props; const uiOptions = getUiOptions<T, S, F>(uiSchema); const TitleFieldTemplate = getTemplate<'TitleFieldTemplate', T, S, F>('TitleFieldTemplate', registry, uiOptions); const DescriptionFieldTemplate = getTemplate<'DescriptionFieldTemplate', T, S, F>( 'DescriptionFieldTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; return ( <> {title && ( <TitleFieldTemplate id={titleId<T>(idSchema)} title={title} required={required} schema={schema} uiSchema={uiSchema} registry={registry} /> )} {description && ( <DescriptionFieldTemplate id={descriptionId<T>(idSchema)} description={description} schema={schema} uiSchema={uiSchema} registry={registry} /> )} <Grid container={true} spacing={2} style={{ marginTop: '10px' }}> {properties.map((element, index) => // Remove the <Grid> if the inner element is hidden as the <Grid> // itself would otherwise still take up space. element.hidden ? ( element.content ) : ( <Grid item={true} xs={12} key={index} style={{ marginBottom: '10px' }}> {element.content} </Grid> ) )} {canExpand<T, S, F>(schema, uiSchema, formData) && ( <Grid container justifyContent='flex-end'> <Grid item={true}> <AddButton className='object-property-expand' onClick={onAddClick(schema)} disabled={disabled || readonly} uiSchema={uiSchema} registry={registry} /> </Grid> </Grid> )} </Grid> </> ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/ObjectFieldTemplate/index.ts��������������������������0000664�0000000�0000000�00000000130�14467713645�0026466�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './ObjectFieldTemplate'; export * from './ObjectFieldTemplate'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/RadioWidget/������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023351�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/RadioWidget/RadioWidget.tsx���������������������������0000664�0000000�0000000�00000005005�14467713645�0026313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import FormControlLabel from '@mui/material/FormControlLabel'; import FormLabel from '@mui/material/FormLabel'; import Radio from '@mui/material/Radio'; import RadioGroup from '@mui/material/RadioGroup'; import { ariaDescribedByIds, enumOptionsIndexForValue, enumOptionsValueForIndex, labelValue, optionId, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; /** The `RadioWidget` is a widget for rendering a radio group. * It is typically used with a string property constrained with enum options. * * @param props - The `WidgetProps` for this component */ export default function RadioWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, options, value, required, disabled, readonly, label, hideLabel, onChange, onBlur, onFocus, }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, emptyValue } = options; const _onChange = (_: any, value: any) => onChange(enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, emptyValue)); const row = options ? options.inline : false; const selectedIndex = enumOptionsIndexForValue<S>(value, enumOptions) ?? null; return ( <> {labelValue( <FormLabel required={required} htmlFor={id}> {label || undefined} </FormLabel>, hideLabel )} <RadioGroup id={id} name={id} value={selectedIndex} row={row as boolean} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} aria-describedby={ariaDescribedByIds<T>(id)} > {Array.isArray(enumOptions) && enumOptions.map((option, index) => { const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.indexOf(option.value) !== -1; const radio = ( <FormControlLabel control={<Radio name={id} id={optionId(id, index)} color='primary' />} label={option.label} value={String(index)} key={index} disabled={disabled || itemDisabled || readonly} /> ); return radio; })} </RadioGroup> </> ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/RadioWidget/index.ts����������������������������������0000664�0000000�0000000�00000000110�14467713645�0025020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './RadioWidget'; export * from './RadioWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/RangeWidget/������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023347�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/RangeWidget/RangeWidget.tsx���������������������������0000664�0000000�0000000�00000003075�14467713645�0026314�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FocusEvent } from 'react'; import FormLabel from '@mui/material/FormLabel'; import Slider from '@mui/material/Slider'; import { ariaDescribedByIds, labelValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, rangeSpec, } from '@rjsf/utils'; /** The `RangeWidget` component uses the `BaseInputTemplate` changing the type to `range` and wrapping the result * in a div, with the value along side it. * * @param props - The `WidgetProps` for this component */ export default function RangeWidget<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>( props: WidgetProps<T, S, F> ) { const { value, readonly, disabled, onBlur, onFocus, options, schema, onChange, required, label, hideLabel, id } = props; const sliderProps = { value, label, id, name: id, ...rangeSpec<S>(schema) }; const _onChange = (_: any, value?: number | number[]) => { onChange(value ?? options.emptyValue); }; const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, value); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, value); return ( <> {labelValue( <FormLabel required={required} htmlFor={id}> {label || undefined} </FormLabel>, hideLabel )} <Slider disabled={disabled || readonly} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} valueLabelDisplay='auto' {...sliderProps} aria-describedby={ariaDescribedByIds<T>(id)} /> </> ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/RangeWidget/index.ts����������������������������������0000664�0000000�0000000�00000000110�14467713645�0025016�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './RangeWidget'; export * from './RangeWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/SelectWidget/�����������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023532�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/SelectWidget/SelectWidget.tsx�������������������������0000664�0000000�0000000�00000005762�14467713645�0026667�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { ChangeEvent, FocusEvent } from 'react'; import MenuItem from '@mui/material/MenuItem'; import TextField, { TextFieldProps } from '@mui/material/TextField'; import { ariaDescribedByIds, enumOptionsIndexForValue, enumOptionsValueForIndex, labelValue, FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, } from '@rjsf/utils'; /** The `SelectWidget` is a widget for rendering dropdowns. * It is typically used with string properties constrained with enum options. * * @param props - The `WidgetProps` for this component */ export default function SelectWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ schema, id, name, // remove this from textFieldProps options, label, hideLabel, required, disabled, placeholder, readonly, value, multiple, autofocus, onChange, onBlur, onFocus, rawErrors = [], registry, uiSchema, hideError, formContext, ...textFieldProps }: WidgetProps<T, S, F>) { const { enumOptions, enumDisabled, emptyValue: optEmptyVal } = options; multiple = typeof multiple === 'undefined' ? false : !!multiple; const emptyValue = multiple ? [] : ''; const isEmpty = typeof value === 'undefined' || (multiple && value.length < 1) || (!multiple && value === emptyValue); const _onChange = ({ target: { value } }: ChangeEvent<{ value: string }>) => onChange(enumOptionsValueForIndex<S>(value, enumOptions, optEmptyVal)); const _onBlur = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onBlur(id, enumOptionsValueForIndex<S>(value, enumOptions, optEmptyVal)); const _onFocus = ({ target: { value } }: FocusEvent<HTMLInputElement>) => onFocus(id, enumOptionsValueForIndex<S>(value, enumOptions, optEmptyVal)); const selectedIndexes = enumOptionsIndexForValue<S>(value, enumOptions, multiple); return ( <TextField id={id} name={id} label={labelValue(label || undefined, hideLabel, false)} value={isEmpty ? emptyValue : selectedIndexes} required={required} disabled={disabled || readonly} autoFocus={autofocus} placeholder={placeholder} error={rawErrors.length > 0} onChange={_onChange} onBlur={_onBlur} onFocus={_onFocus} {...(textFieldProps as TextFieldProps)} select // Apply this and the following props after the potential overrides defined in textFieldProps InputLabelProps={{ ...textFieldProps.InputLabelProps, shrink: !isEmpty, }} SelectProps={{ ...textFieldProps.SelectProps, multiple, }} aria-describedby={ariaDescribedByIds<T>(id)} > {Array.isArray(enumOptions) && enumOptions.map(({ value, label }, i: number) => { const disabled: boolean = Array.isArray(enumDisabled) && enumDisabled.indexOf(value) !== -1; return ( <MenuItem key={i} value={String(i)} disabled={disabled}> {label} </MenuItem> ); })} </TextField> ); } ��������������react-jsonschema-form-5.12.1/packages/mui/src/SelectWidget/index.ts���������������������������������0000664�0000000�0000000�00000000112�14467713645�0025203�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './SelectWidget'; export * from './SelectWidget'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/SubmitButton/�����������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023606�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/SubmitButton/SubmitButton.tsx�������������������������0000664�0000000�0000000�00000001424�14467713645�0027006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; import { getSubmitButtonOptions, FormContextType, RJSFSchema, StrictRJSFSchema, SubmitButtonProps } from '@rjsf/utils'; /** The `SubmitButton` renders a button that represent the `Submit` action on a form */ export default function SubmitButton< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >({ uiSchema }: SubmitButtonProps<T, S, F>) { const { submitText, norender, props: submitButtonProps = {} } = getSubmitButtonOptions<T, S, F>(uiSchema); if (norender) { return null; } return ( <Box marginTop={3}> <Button type='submit' variant='contained' color='primary' {...submitButtonProps}> {submitText} </Button> </Box> ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/SubmitButton/index.ts���������������������������������0000664�0000000�0000000�00000000112�14467713645�0025257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './SubmitButton'; export * from './SubmitButton'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/Templates/��������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023105�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/Templates/Templates.ts��������������������������������0000664�0000000�0000000�00000002770�14467713645�0025421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, TemplatesType } from '@rjsf/utils'; import AddButton from '../AddButton'; import ArrayFieldItemTemplate from '../ArrayFieldItemTemplate'; import ArrayFieldTemplate from '../ArrayFieldTemplate'; import BaseInputTemplate from '../BaseInputTemplate'; import DescriptionField from '../DescriptionField'; import ErrorList from '../ErrorList'; import { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } from '../IconButton'; import FieldErrorTemplate from '../FieldErrorTemplate'; import FieldHelpTemplate from '../FieldHelpTemplate'; import FieldTemplate from '../FieldTemplate'; import ObjectFieldTemplate from '../ObjectFieldTemplate'; import SubmitButton from '../SubmitButton'; import TitleField from '../TitleField'; import WrapIfAdditionalTemplate from '../WrapIfAdditionalTemplate'; export function generateTemplates< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): Partial<TemplatesType<T, S, F>> { return { ArrayFieldItemTemplate, ArrayFieldTemplate, BaseInputTemplate, ButtonTemplates: { AddButton, CopyButton, MoveDownButton, MoveUpButton, RemoveButton, SubmitButton, }, DescriptionFieldTemplate: DescriptionField, ErrorListTemplate: ErrorList, FieldErrorTemplate, FieldHelpTemplate, FieldTemplate, ObjectFieldTemplate, TitleFieldTemplate: TitleField, WrapIfAdditionalTemplate, }; } export default generateTemplates(); ��������react-jsonschema-form-5.12.1/packages/mui/src/Templates/index.ts������������������������������������0000664�0000000�0000000�00000000104�14467713645�0024557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Templates'; export * from './Templates'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/TextareaWidget/���������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024070�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/TextareaWidget/TextareaWidget.tsx���������������������0000664�0000000�0000000�00000001373�14467713645�0027555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema, WidgetProps, getTemplate } from '@rjsf/utils'; /** The `TextareaWidget` is a widget for rendering input fields as textarea. * * @param props - The `WidgetProps` for this component */ export default function TextareaWidget< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WidgetProps<T, S, F>) { const { options, registry } = props; const BaseInputTemplate = getTemplate<'BaseInputTemplate', T, S, F>('BaseInputTemplate', registry, options); let rows: string | number = 5; if (typeof options.rows === 'string' || typeof options.rows === 'number') { rows = options.rows; } return <BaseInputTemplate {...props} multiline rows={rows} />; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/TextareaWidget/index.ts�������������������������������0000664�0000000�0000000�00000000116�14467713645�0025545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './TextareaWidget'; export * from './TextareaWidget'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/Theme/������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022211�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/Theme/Theme.tsx���������������������������������������0000664�0000000�0000000�00000000763�14467713645�0024021�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import { ThemeProps } from '@rjsf/core'; import { generateTemplates } from '../Templates'; import { generateWidgets } from '../Widgets'; export function generateTheme< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): ThemeProps<T, S, F> { return { templates: generateTemplates<T, S, F>(), widgets: generateWidgets<T, S, F>(), }; } export default generateTheme(); �������������react-jsonschema-form-5.12.1/packages/mui/src/Theme/index.ts����������������������������������������0000664�0000000�0000000�00000000074�14467713645�0023671�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Theme'; export * from './Theme'; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/TitleField/�������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0023174�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/TitleField/TitleField.tsx�����������������������������0000664�0000000�0000000�00000001232�14467713645�0025757�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import Box from '@mui/material/Box'; import Divider from '@mui/material/Divider'; import Typography from '@mui/material/Typography'; import { FormContextType, TitleFieldProps, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; /** The `TitleField` is the template to use to render the title of a field * * @param props - The `TitleFieldProps` for this component */ export default function TitleField<T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any>({ id, title, }: TitleFieldProps<T, S, F>) { return ( <Box id={id} mb={1} mt={1}> <Typography variant='h5'>{title}</Typography> <Divider /> </Box> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/TitleField/index.ts�����������������������������������0000664�0000000�0000000�00000000106�14467713645�0024650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './TitleField'; export * from './TitleField'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/Widgets/����������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0022555�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/Widgets/Widgets.ts������������������������������������0000664�0000000�0000000�00000001420�14467713645�0024530�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { FormContextType, RegistryWidgetsType, RJSFSchema, StrictRJSFSchema } from '@rjsf/utils'; import CheckboxWidget from '../CheckboxWidget/CheckboxWidget'; import CheckboxesWidget from '../CheckboxesWidget/CheckboxesWidget'; import RadioWidget from '../RadioWidget/RadioWidget'; import RangeWidget from '../RangeWidget/RangeWidget'; import SelectWidget from '../SelectWidget/SelectWidget'; import TextareaWidget from '../TextareaWidget/TextareaWidget'; export function generateWidgets< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(): RegistryWidgetsType<T, S, F> { return { CheckboxWidget, CheckboxesWidget, RadioWidget, RangeWidget, SelectWidget, TextareaWidget, }; } export default generateWidgets(); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/Widgets/index.ts��������������������������������������0000664�0000000�0000000�00000000100�14467713645�0024223�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './Widgets'; export * from './Widgets'; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/WrapIfAdditionalTemplate/�����������������������������0000775�0000000�0000000�00000000000�14467713645�0026024�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/WrapIfAdditionalTemplate/WrapIfAdditionalTemplate.tsx�0000664�0000000�0000000�00000004544�14467713645�0033450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import { CSSProperties, FocusEvent } from 'react'; import Grid from '@mui/material/Grid'; import TextField from '@mui/material/TextField'; import { ADDITIONAL_PROPERTY_FLAG, FormContextType, RJSFSchema, StrictRJSFSchema, TranslatableString, WrapIfAdditionalTemplateProps, } from '@rjsf/utils'; /** The `WrapIfAdditional` component is used by the `FieldTemplate` to rename, or remove properties that are * part of an `additionalProperties` part of a schema. * * @param props - The `WrapIfAdditionalProps` for this component */ export default function WrapIfAdditionalTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: WrapIfAdditionalTemplateProps<T, S, F>) { const { children, classNames, style, disabled, id, label, onDropPropertyClick, onKeyChange, readonly, required, schema, uiSchema, registry, } = props; const { templates, translateString } = registry; // Button templates are not overridden in the uiSchema const { RemoveButton } = templates.ButtonTemplates; const keyLabel = translateString(TranslatableString.KeyLabel, [label]); const additional = ADDITIONAL_PROPERTY_FLAG in schema; const btnStyle: CSSProperties = { flex: 1, paddingLeft: 6, paddingRight: 6, fontWeight: 'bold', }; if (!additional) { return ( <div className={classNames} style={style}> {children} </div> ); } const handleBlur = ({ target }: FocusEvent<HTMLInputElement>) => onKeyChange(target.value); return ( <Grid container key={`${id}-key`} alignItems='center' spacing={2} className={classNames} style={style}> <Grid item xs> <TextField fullWidth={true} required={required} label={keyLabel} defaultValue={label} disabled={disabled || readonly} id={`${id}-key`} name={`${id}-key`} onBlur={!readonly ? handleBlur : undefined} type='text' /> </Grid> <Grid item={true} xs> {children} </Grid> <Grid item={true}> <RemoveButton iconType='default' style={btnStyle} disabled={disabled || readonly} onClick={onDropPropertyClick(label)} uiSchema={uiSchema} registry={registry} /> </Grid> </Grid> ); } ������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/WrapIfAdditionalTemplate/index.ts���������������������0000664�0000000�0000000�00000000142�14467713645�0027500�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������export { default } from './WrapIfAdditionalTemplate'; export * from './WrapIfAdditionalTemplate'; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/src/index.ts����������������������������������������������0000664�0000000�0000000�00000000501�14467713645�0022622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import MuiForm from './MuiForm/MuiForm'; export { default as Form, generateForm } from './MuiForm'; export { default as Templates, generateTemplates } from './Templates'; export { default as Theme, generateTheme } from './Theme'; export { default as Widgets, generateWidgets } from './Widgets'; export default MuiForm; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/test/�����������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021337�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/test/Array.test.tsx���������������������������������������0000664�0000000�0000000�00000000150�14467713645�0024127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import arrayTests from '@rjsf/core/testSnap/arrayTests'; import Form from '../src'; arrayTests(Form); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/test/Form.test.tsx����������������������������������������0000664�0000000�0000000�00000003475�14467713645�0023771�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import formTests, { SLIDER_CUSTOMIZE, TEXTAREA_CUSTOMIZE } from '@rjsf/core/testSnap/formTests'; import Form from '../src'; // The `TextareaAutosize` code reads the following data from the `getComputedStyle()` function in a useEffect hook jest.spyOn(window, 'getComputedStyle').mockImplementation(() => { return { width: 100, 'box-sizing': 10, 'padding-bottom': 1, 'padding-top': 1, 'border-bottom-width': 1, 'border-top-width': 1, } as unknown as CSSStyleDeclaration; }); formTests(Form, { [TEXTAREA_CUSTOMIZE]: { createNodeMock: (element) => { if (element.type === 'textarea') { // the `TextareaAutosize` code expects a ref for two textareas to exist, so use the feature of // react-test-renderer to create one // See: https://reactjs.org/docs/test-renderer.html#ideas if (element.props['aria-hidden']) { // The hidden one reads the following values return { style: { width: 10 }, scrollHeight: 100, }; } // The other one only really needs an empty object return {}; } return null; }, }, [SLIDER_CUSTOMIZE]: { createNodeMock: (element) => { // the `Slider` code expects a ref for a span.root to exist, so use the feature of // react-test-renderer to create one // See: https://reactjs.org/docs/test-renderer.html#ideas if (element.type === 'span' && element.props.id === 'root') { // Pretend to be an event listening component inside of an event listening document return { addEventListener: jest.fn(), removeEventListener: jest.fn(), ownerDocument: { addEventListener: jest.fn(), removeEventListener: jest.fn(), }, }; } return null; }, }, }); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/test/Object.test.tsx��������������������������������������0000664�0000000�0000000�00000000153�14467713645�0024262�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import objectTests from '@rjsf/core/testSnap/objectTests'; import Form from '../src'; objectTests(Form); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/test/__snapshots__/���������������������������������������0000775�0000000�0000000�00000000000�14467713645�0024155�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/test/__snapshots__/Array.test.tsx.snap��������������������0000664�0000000�0000000�00001736756�14467713645�0027742�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`array fields array 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-4 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-5 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-6 { margin-top: 16px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-7:hover { background-color: transparent; } } .emotion-7:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-7:hover { background-color: transparent; } } .emotion-7.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-8 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-9 { margin-top: 24px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-10::-moz-focus-inner { border-style: none; } .emotion-10.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-10 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-10:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-10:hover { background-color: #1976d2; } } .emotion-10:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-10.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-10.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiGrid-root MuiGrid-container emotion-3" > <div className="MuiGrid-root MuiGrid-container emotion-4" > <div className="MuiGrid-root MuiGrid-item emotion-5" > <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium array-item-add emotion-7" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-8" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-9" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-10" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`array fields array icons 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-4 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-5 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-6 { margin-bottom: 16px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-11 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-11.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-11.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-11.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-12 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-12::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:focus { outline: 0; } .emotion-12:invalid { box-shadow: none; } .emotion-12::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-12.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-12:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-12:-webkit-autofill { border-radius: inherit; } .emotion-13 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-14 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-15 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-16 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; padding: 5px; font-size: 1.125rem; } .emotion-16::-moz-focus-inner { border-style: none; } .emotion-16.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-16 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-16:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-16:hover { background-color: transparent; } } .emotion-16.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-17 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.25rem; } .emotion-20 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-24::-moz-focus-inner { border-style: none; } .emotion-24.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-24 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-24:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-50 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-52 { margin-top: 16px; } .emotion-53 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-53::-moz-focus-inner { border-style: none; } .emotion-53.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-53 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-53:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-53:hover { background-color: transparent; } } .emotion-53:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-53:hover { background-color: transparent; } } .emotion-53.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-54 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-56 { margin-top: 24px; } .emotion-57 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-57::-moz-focus-inner { border-style: none; } .emotion-57.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-57 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-57:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-57:hover { background-color: #1976d2; } } .emotion-57:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-57.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-57.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiGrid-root MuiGrid-container emotion-3" > <div className="MuiGrid-root MuiGrid-container emotion-4" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-5" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-6" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root emotion-10" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-11" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="a" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-15" > <button className="MuiButtonBase-root Mui-disabled MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall emotion-16" disabled={true} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move up" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-17" data-testid="ArrowUpwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-16" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move down" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-17" data-testid="ArrowDownwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> <span className="MuiTouchRipple-root emotion-20" /> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-16" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-17" data-testid="ContentCopyIcon" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" /> </svg> <span className="MuiTouchRipple-root emotion-20" /> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-17" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> <span className="MuiTouchRipple-root emotion-20" /> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-4" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-5" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-6" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root emotion-10" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-11" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="b" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-15" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-16" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move up" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-17" data-testid="ArrowUpwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> <span className="MuiTouchRipple-root emotion-20" /> </button> <button className="MuiButtonBase-root Mui-disabled MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall emotion-16" disabled={true} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move down" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-17" data-testid="ArrowDownwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-16" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-17" data-testid="ContentCopyIcon" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" /> </svg> <span className="MuiTouchRipple-root emotion-20" /> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-17" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> <span className="MuiTouchRipple-root emotion-20" /> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-50" > <div className="MuiGrid-root MuiGrid-item emotion-15" > <div className="MuiBox-root emotion-52" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium array-item-add emotion-53" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-54" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> <span className="MuiTouchRipple-root emotion-20" /> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-56" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-57" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-20" /> </button> </div> </form> `; exports[`array fields checkboxes 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { -moz-appearance: none; -webkit-appearance: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-radius: 4px; cursor: pointer; font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3:focus { border-radius: 4px; } .emotion-3::-ms-expand { display: none; } .emotion-3.Mui-disabled { cursor: default; } .emotion-3[multiple] { height: auto; } .emotion-3:not([multiple]) option, .emotion-3:not([multiple]) optgroup { background-color: #fff; } .emotion-3.emotion-3.emotion-3 { padding-right: 32px; } .emotion-3.MuiSelect-select { height: auto; min-height: 1.4375em; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { bottom: 0; left: 0; position: absolute; opacity: 0; pointer-events: none; width: 100%; box-sizing: border-box; } .emotion-5 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; position: absolute; right: 7px; top: calc(50% - .5em); pointer-events: none; color: rgba(0, 0, 0, 0.54); } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-6 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-7 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-8 { margin-top: 24px; } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-9::-moz-focus-inner { border-style: none; } .emotion-9.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-9 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-9:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-9:hover { background-color: #1976d2; } } .emotion-9:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-9.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-9.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <div aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-select MuiSelect-outlined MuiSelect-multiple MuiInputBase-input MuiOutlinedInput-input emotion-3" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span className="notranslate" > ​ </span> </div> <input aria-hidden={true} aria-invalid={false} autoFocus={false} className="MuiSelect-nativeInput emotion-4" disabled={false} name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined emotion-5" data-testid="ArrowDropDownIcon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-6" > <legend className="emotion-7" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-8" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-9" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`array fields empty errors array 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-1>.MuiGrid-item { padding-top: 16px; } .emotion-1>.MuiGrid-item { padding-left: 16px; } .emotion-2 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-5 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-5.Mui-focused { color: #1976d2; } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-5.Mui-error { color: #d32f2f; } .emotion-6 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-6:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-6:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-6.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-6.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-6.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-7 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-7::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7:focus { outline: 0; } .emotion-7:invalid { box-shadow: none; } .emotion-7::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-7.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-7:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-7:-webkit-autofill { border-radius: inherit; } .emotion-8 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-9 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-9>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-10 { margin-top: 24px; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-11::-moz-focus-inner { border-style: none; } .emotion-11.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-11 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-11:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-11:hover { background-color: #1976d2; } } .emotion-11:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-11.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-1" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-2" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_name__error root_name__description root_name__help" className="MuiFormControl-root MuiTextField-root emotion-4" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-5" data-shrink={false} htmlFor="root_name" id="root_name-label" > name </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-6" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-7" disabled={false} id="root_name" name="root_name" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-8" > <legend className="emotion-9" > <span> name </span> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-10" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-11" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`array fields fixed array 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-4 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-5 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-6 { margin-bottom: 16px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-11 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-11.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-11.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-11.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-12 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-12::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:focus { outline: 0; } .emotion-12:invalid { box-shadow: none; } .emotion-12::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-12.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-12:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-12:-webkit-autofill { border-radius: inherit; } .emotion-13 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-14 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-26 { margin-top: 24px; } .emotion-27 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-27::-moz-focus-inner { border-style: none; } .emotion-27.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-27 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-27:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-27:hover { background-color: #1976d2; } } .emotion-27:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-27.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-27.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-28 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiGrid-root MuiGrid-container emotion-3" > <div className="MuiGrid-root MuiGrid-container emotion-4" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-5" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-6" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root emotion-10" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-11" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-4" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-5" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-6" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root emotion-10" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-11" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} step="any" type="number" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-26" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-27" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-28" /> </button> </div> </form> `; exports[`array fields has errors 1`] = ` .emotion-0 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-1 { margin-bottom: 16px; padding: 16px; } .emotion-2 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 1.25rem; line-height: 1.6; letter-spacing: 0.0075em; } .emotion-3 { list-style: none; margin: 0; padding: 0; position: relative; padding-top: 8px; padding-bottom: 8px; } .emotion-4 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-pack: start; -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; -webkit-text-decoration: none; text-decoration: none; width: 100%; box-sizing: border-box; text-align: left; padding-top: 4px; padding-bottom: 4px; padding-left: 16px; padding-right: 16px; } .emotion-4.Mui-focusVisible { background-color: rgba(0, 0, 0, 0.12); } .emotion-4.Mui-selected { background-color: rgba(25, 118, 210, 0.08); } .emotion-4.Mui-selected.Mui-focusVisible { background-color: rgba(25, 118, 210, 0.2); } .emotion-4.Mui-disabled { opacity: 0.38; } .emotion-5 { min-width: 56px; color: rgba(0, 0, 0, 0.54); -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; } .emotion-6 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; color: #d32f2f; } .emotion-7 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; min-width: 0; margin-top: 4px; margin-bottom: 4px; } .emotion-8 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.875rem; line-height: 1.43; letter-spacing: 0.01071em; display: block; } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-10 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-10>.MuiGrid-item { padding-top: 16px; } .emotion-10>.MuiGrid-item { padding-left: 16px; } .emotion-11 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-11 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-11 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-11 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-11 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-13 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-14 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-14.Mui-focused { color: #1976d2; } .emotion-14.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-14.Mui-error { color: #d32f2f; } .emotion-15 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-15:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-15:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-15.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-15.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-15.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-16 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-16::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-16::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-16:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-16::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-16:focus { outline: 0; } .emotion-16:invalid { box-shadow: none; } .emotion-16::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-16::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-16::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-16:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-16::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-16:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-16:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-16:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-16:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-16.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-16:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-16:-webkit-autofill { border-radius: inherit; } .emotion-17 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-18 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-18>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-19 { list-style: none; margin: 0; padding: 0; position: relative; } .emotion-20 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-pack: start; -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; -webkit-text-decoration: none; text-decoration: none; width: 100%; box-sizing: border-box; text-align: left; padding-top: 4px; padding-bottom: 4px; } .emotion-20.Mui-focusVisible { background-color: rgba(0, 0, 0, 0.12); } .emotion-20.Mui-selected { background-color: rgba(25, 118, 210, 0.08); } .emotion-20.Mui-selected.Mui-focusVisible { background-color: rgba(25, 118, 210, 0.2); } .emotion-20.Mui-disabled { opacity: 0.38; } .emotion-21 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; text-align: left; margin-top: 3px; margin-right: 14px; margin-bottom: 0; margin-left: 14px; } .emotion-21.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-21.Mui-error { color: #d32f2f; } .emotion-22 { margin-top: 24px; } .emotion-23 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-23::-moz-focus-inner { border-style: none; } .emotion-23.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-23 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-23:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-23:hover { background-color: #1976d2; } } .emotion-23:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-23.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-23.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-0" > <div className="MuiBox-root emotion-1" > <h6 className="MuiTypography-root MuiTypography-h6 emotion-2" > Errors </h6> <ul className="MuiList-root MuiList-padding MuiList-dense emotion-3" > <li className="MuiListItem-root MuiListItem-dense MuiListItem-gutters MuiListItem-padding emotion-4" disabled={false} > <div className="MuiListItemIcon-root emotion-5" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-colorError MuiSvgIcon-fontSizeMedium emotion-6" data-testid="ErrorIcon" focusable="false" viewBox="0 0 24 24" > <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z" /> </svg> </div> <div className="MuiListItemText-root MuiListItemText-dense emotion-7" > <span className="MuiTypography-root MuiTypography-body2 MuiListItemText-primary emotion-8" > .name Bad input </span> </div> </li> </ul> </div> </div> <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-9" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-10" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-11" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string field-error has-error has-danger" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-9" > <div aria-describedby="root_name__error root_name__description root_name__help" className="MuiFormControl-root MuiTextField-root emotion-13" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary Mui-error MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-14" data-shrink={false} htmlFor="root_name" id="root_name-label" > name </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-error MuiInputBase-formControl emotion-15" onClick={[Function]} > <input aria-invalid={true} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-16" disabled={false} id="root_name" name="root_name" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-17" > <legend className="emotion-18" > <span> name </span> </legend> </fieldset> </div> </div> <ul className="MuiList-root MuiList-dense emotion-19" > <li className="MuiListItem-root MuiListItem-dense MuiListItem-padding emotion-20" disabled={false} > <p className="MuiFormHelperText-root Mui-error MuiFormHelperText-sizeMedium MuiFormHelperText-contained emotion-21" id="root_name__error" > Bad input </p> </li> </ul> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-22" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-23" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`array fields no errors 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-1>.MuiGrid-item { padding-top: 16px; } .emotion-1>.MuiGrid-item { padding-left: 16px; } .emotion-2 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-5 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-5.Mui-focused { color: #1976d2; } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-5.Mui-error { color: #d32f2f; } .emotion-6 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-6:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-6:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-6.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-6.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-6.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-7 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-7::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7:focus { outline: 0; } .emotion-7:invalid { box-shadow: none; } .emotion-7::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-7.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-7:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-7:-webkit-autofill { border-radius: inherit; } .emotion-8 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-9 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-9>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-10 { margin-top: 24px; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-11::-moz-focus-inner { border-style: none; } .emotion-11.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-11 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-11:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-11:hover { background-color: #1976d2; } } .emotion-11:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-11.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-12 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-1" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-2" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_name__error root_name__description root_name__help" className="MuiFormControl-root MuiTextField-root emotion-4" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-5" data-shrink={false} htmlFor="root_name" id="root_name-label" > name </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-6" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-7" disabled={false} id="root_name" name="root_name" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-8" > <legend className="emotion-9" > <span> name </span> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-10" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-11" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-12" /> </button> </div> </form> `; exports[`with title and description array 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { margin-bottom: 8px; margin-top: 8px; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-5 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-6 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-8 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-9 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-10 { margin-top: 16px; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-11::-moz-focus-inner { border-style: none; } .emotion-11.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-11 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-11:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-11:hover { background-color: transparent; } } .emotion-11:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-11:hover { background-color: transparent; } } .emotion-11.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-12 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-13 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } .emotion-14 { margin-top: 24px; } .emotion-15 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-15::-moz-focus-inner { border-style: none; } .emotion-15.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-15 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-15:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-15:hover { background-color: #1976d2; } } .emotion-15:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-15.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiBox-root emotion-3" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-4" > Test field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-5" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> <div className="MuiGrid-root MuiGrid-container emotion-7" > <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item emotion-9" > <div className="MuiBox-root emotion-10" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium array-item-add emotion-11" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-12" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> <span className="MuiTouchRipple-root emotion-13" /> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-14" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-15" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-13" /> </button> </div> </form> `; exports[`with title and description array icons 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { margin-bottom: 8px; margin-top: 8px; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-5 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-6 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-8 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-9 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-10 { margin-bottom: 16px; } .emotion-14 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-15 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-15.Mui-focused { color: #1976d2; } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-15.Mui-error { color: #d32f2f; } .emotion-16.Mui-error { color: #d32f2f; } .emotion-17 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-17.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-17:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-17:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-17.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-17.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-17.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-18 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-18::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18:focus { outline: 0; } .emotion-18:invalid { box-shadow: none; } .emotion-18::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-18.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-18:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-18:-webkit-autofill { border-radius: inherit; } .emotion-19 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-20 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-20>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-21 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-23 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; padding: 5px; font-size: 1.125rem; } .emotion-24::-moz-focus-inner { border-style: none; } .emotion-24.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-24 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-24:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-25 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.25rem; } .emotion-30 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-30::-moz-focus-inner { border-style: none; } .emotion-30.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-30 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-30:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-30:hover { background-color: transparent; } } .emotion-30:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-30:hover { background-color: transparent; } } .emotion-30.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-56 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-58 { margin-top: 16px; } .emotion-59 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-59::-moz-focus-inner { border-style: none; } .emotion-59.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-59 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-59:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-59:hover { background-color: transparent; } } .emotion-59:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-59:hover { background-color: transparent; } } .emotion-59.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-60 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-61 { margin-top: 24px; } .emotion-62 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-62::-moz-focus-inner { border-style: none; } .emotion-62.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-62 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-62:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-62:hover { background-color: #1976d2; } } .emotion-62:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-62.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-62.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiBox-root emotion-3" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-4" > Test field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-5" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> <div className="MuiGrid-root MuiGrid-container emotion-7" > <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-9" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-10" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root emotion-14" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-15" data-shrink={true} htmlFor="root_0" id="root_0-label" > Test item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-16" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-17" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-18" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="a" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-19" > <legend className="emotion-20" > <span> Test item   * </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-21" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root_0__description" style={ { "marginTop": "5px", } } > a test item description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root Mui-disabled MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall emotion-24" disabled={true} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move up" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ArrowUpwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move down" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ArrowDownwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ContentCopyIcon" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-30" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-9" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-10" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root emotion-14" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-15" data-shrink={true} htmlFor="root_1" id="root_1-label" > Test item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-16" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-17" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-18" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="b" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-19" > <legend className="emotion-20" > <span> Test item   * </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-21" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root_1__description" style={ { "marginTop": "5px", } } > a test item description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move up" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ArrowUpwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </button> <button className="MuiButtonBase-root Mui-disabled MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall emotion-24" disabled={true} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move down" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ArrowDownwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ContentCopyIcon" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-30" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-56" > <div className="MuiGrid-root MuiGrid-item emotion-23" > <div className="MuiBox-root emotion-58" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium array-item-add emotion-59" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-60" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-61" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-62" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`with title and description checkboxes 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-2.Mui-focused { color: #1976d2; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-2.Mui-error { color: #d32f2f; } .emotion-3 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-3.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-3:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-3:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-3.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-3.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-3.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-4 { -moz-appearance: none; -webkit-appearance: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-radius: 4px; cursor: pointer; font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-4:focus { border-radius: 4px; } .emotion-4::-ms-expand { display: none; } .emotion-4.Mui-disabled { cursor: default; } .emotion-4[multiple] { height: auto; } .emotion-4:not([multiple]) option, .emotion-4:not([multiple]) optgroup { background-color: #fff; } .emotion-4.emotion-4.emotion-4 { padding-right: 32px; } .emotion-4.MuiSelect-select { height: auto; min-height: 1.4375em; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .emotion-4::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4:focus { outline: 0; } .emotion-4:invalid { box-shadow: none; } .emotion-4::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-4.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-4:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-4:-webkit-autofill { border-radius: inherit; } .emotion-5 { bottom: 0; left: 0; position: absolute; opacity: 0; pointer-events: none; width: 100%; box-sizing: border-box; } .emotion-6 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; position: absolute; right: 7px; top: calc(50% - .5em); pointer-events: none; color: rgba(0, 0, 0, 0.54); } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-7 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-8 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-8>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-9 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-10 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-11 { margin-top: 24px; } .emotion-12 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-12::-moz-focus-inner { border-style: none; } .emotion-12.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-12 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-12:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-12:hover { background-color: #1976d2; } } .emotion-12:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-12.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-12.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-13 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-2" data-shrink={false} htmlFor="root" id="root-label" > Test field </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-3" onClick={[Function]} > <div aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root-label root" className="MuiSelect-select MuiSelect-outlined MuiSelect-multiple MuiInputBase-input MuiOutlinedInput-input emotion-4" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span className="notranslate" > ​ </span> </div> <input aria-hidden={true} aria-invalid={false} autoFocus={false} className="MuiSelect-nativeInput emotion-5" disabled={false} name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined emotion-6" data-testid="ArrowDropDownIcon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-7" > <legend className="emotion-8" > <span> Test field </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-9" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-10" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> </span> </div> </div> <div className="MuiBox-root emotion-11" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-12" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-13" /> </button> </div> </form> `; exports[`with title and description fixed array 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { margin-bottom: 8px; margin-top: 8px; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-5 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-6 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-8 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-9 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-10 { margin-bottom: 16px; } .emotion-14 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-15 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-15.Mui-focused { color: #1976d2; } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-15.Mui-error { color: #d32f2f; } .emotion-16.Mui-error { color: #d32f2f; } .emotion-17 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-17.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-17:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-17:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-17.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-17.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-17.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-18 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-18::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18:focus { outline: 0; } .emotion-18:invalid { box-shadow: none; } .emotion-18::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-18.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-18:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-18:-webkit-autofill { border-radius: inherit; } .emotion-19 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-20 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-20>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-21 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-38 { margin-top: 24px; } .emotion-39 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-39::-moz-focus-inner { border-style: none; } .emotion-39.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-39 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-39:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-39:hover { background-color: #1976d2; } } .emotion-39:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-39.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-39.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiBox-root emotion-3" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-4" > Test field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-5" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> <div className="MuiGrid-root MuiGrid-container emotion-7" > <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-9" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-10" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root emotion-14" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-15" data-shrink={false} htmlFor="root_0" id="root_0-label" > Test item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-16" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-17" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-18" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-19" > <legend className="emotion-20" > <span> Test item   * </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-21" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root_0__description" style={ { "marginTop": "5px", } } > a test item description </h6> </span> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-9" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-10" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root emotion-14" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-15" data-shrink={false} htmlFor="root_1" id="root_1-label" > Test item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-16" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-17" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-18" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} step="any" type="number" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-19" > <legend className="emotion-20" > <span> Test item   * </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-21" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root_1__description" style={ { "marginTop": "5px", } } > a test item description </h6> </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-38" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-39" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both array 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { margin-bottom: 8px; margin-top: 8px; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-5 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-6 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-8 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-9 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-10 { margin-top: 16px; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-11::-moz-focus-inner { border-style: none; } .emotion-11.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-11 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-11:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-11:hover { background-color: transparent; } } .emotion-11:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-11:hover { background-color: transparent; } } .emotion-11.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-12 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-13 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } .emotion-14 { margin-top: 24px; } .emotion-15 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-15::-moz-focus-inner { border-style: none; } .emotion-15.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-15 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-15:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-15:hover { background-color: #1976d2; } } .emotion-15:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-15.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiBox-root emotion-3" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-4" > My Field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-5" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container emotion-7" > <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item emotion-9" > <div className="MuiBox-root emotion-10" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium array-item-add emotion-11" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-12" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> <span className="MuiTouchRipple-root emotion-13" /> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-14" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-15" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-13" /> </button> </div> </form> `; exports[`with title and description from both array icons 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { margin-bottom: 8px; margin-top: 8px; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-5 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-6 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-8 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-9 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-10 { margin-bottom: 16px; } .emotion-14 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-15 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-15.Mui-focused { color: #1976d2; } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-15.Mui-error { color: #d32f2f; } .emotion-16.Mui-error { color: #d32f2f; } .emotion-17 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-17.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-17:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-17:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-17.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-17.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-17.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-18 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-18::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18:focus { outline: 0; } .emotion-18:invalid { box-shadow: none; } .emotion-18::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-18.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-18:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-18:-webkit-autofill { border-radius: inherit; } .emotion-19 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-20 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-20>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-21 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-23 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; padding: 5px; font-size: 1.125rem; } .emotion-24::-moz-focus-inner { border-style: none; } .emotion-24.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-24 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-24:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-25 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.25rem; } .emotion-30 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-30::-moz-focus-inner { border-style: none; } .emotion-30.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-30 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-30:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-30:hover { background-color: transparent; } } .emotion-30:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-30:hover { background-color: transparent; } } .emotion-30.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-56 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-58 { margin-top: 16px; } .emotion-59 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-59::-moz-focus-inner { border-style: none; } .emotion-59.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-59 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-59:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-59:hover { background-color: transparent; } } .emotion-59:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-59:hover { background-color: transparent; } } .emotion-59.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-60 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-61 { margin-top: 24px; } .emotion-62 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-62::-moz-focus-inner { border-style: none; } .emotion-62.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-62 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-62:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-62:hover { background-color: #1976d2; } } .emotion-62:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-62.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-62.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiBox-root emotion-3" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-4" > My Field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-5" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container emotion-7" > <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-9" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-10" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root emotion-14" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-15" data-shrink={true} htmlFor="root_0" id="root_0-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-16" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-17" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-18" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="a" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-19" > <legend className="emotion-20" > <span> My Item   * </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-21" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root_0__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root Mui-disabled MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall emotion-24" disabled={true} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move up" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ArrowUpwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move down" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ArrowDownwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ContentCopyIcon" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-30" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-9" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-10" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root emotion-14" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-15" data-shrink={true} htmlFor="root_1" id="root_1-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-16" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-17" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-18" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="b" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-19" > <legend className="emotion-20" > <span> My Item   * </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-21" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root_1__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move up" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ArrowUpwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </button> <button className="MuiButtonBase-root Mui-disabled MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall emotion-24" disabled={true} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move down" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ArrowDownwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ContentCopyIcon" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-30" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-56" > <div className="MuiGrid-root MuiGrid-item emotion-23" > <div className="MuiBox-root emotion-58" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium array-item-add emotion-59" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-60" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-61" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-62" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from both checkboxes 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-2.Mui-focused { color: #1976d2; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-2.Mui-error { color: #d32f2f; } .emotion-3 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-3.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-3:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-3:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-3.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-3.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-3.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-4 { -moz-appearance: none; -webkit-appearance: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-radius: 4px; cursor: pointer; font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-4:focus { border-radius: 4px; } .emotion-4::-ms-expand { display: none; } .emotion-4.Mui-disabled { cursor: default; } .emotion-4[multiple] { height: auto; } .emotion-4:not([multiple]) option, .emotion-4:not([multiple]) optgroup { background-color: #fff; } .emotion-4.emotion-4.emotion-4 { padding-right: 32px; } .emotion-4.MuiSelect-select { height: auto; min-height: 1.4375em; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .emotion-4::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4:focus { outline: 0; } .emotion-4:invalid { box-shadow: none; } .emotion-4::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-4.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-4:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-4:-webkit-autofill { border-radius: inherit; } .emotion-5 { bottom: 0; left: 0; position: absolute; opacity: 0; pointer-events: none; width: 100%; box-sizing: border-box; } .emotion-6 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; position: absolute; right: 7px; top: calc(50% - .5em); pointer-events: none; color: rgba(0, 0, 0, 0.54); } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-7 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-8 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-8>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-9 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-10 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-11 { margin-top: 24px; } .emotion-12 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-12::-moz-focus-inner { border-style: none; } .emotion-12.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-12 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-12:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-12:hover { background-color: #1976d2; } } .emotion-12:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-12.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-12.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-13 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-2" data-shrink={false} htmlFor="root" id="root-label" > My Field </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-3" onClick={[Function]} > <div aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root-label root" className="MuiSelect-select MuiSelect-outlined MuiSelect-multiple MuiInputBase-input MuiOutlinedInput-input emotion-4" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span className="notranslate" > ​ </span> </div> <input aria-hidden={true} aria-invalid={false} autoFocus={false} className="MuiSelect-nativeInput emotion-5" disabled={false} name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined emotion-6" data-testid="ArrowDropDownIcon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-7" > <legend className="emotion-8" > <span> My Field </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-9" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-10" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> </span> </div> </div> <div className="MuiBox-root emotion-11" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-12" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-13" /> </button> </div> </form> `; exports[`with title and description from both fixed array 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { margin-bottom: 8px; margin-top: 8px; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-5 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-6 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-8 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-9 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-10 { margin-bottom: 16px; } .emotion-14 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-15 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-15.Mui-focused { color: #1976d2; } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-15.Mui-error { color: #d32f2f; } .emotion-16.Mui-error { color: #d32f2f; } .emotion-17 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-17.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-17:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-17:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-17.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-17.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-17.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-18 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-18::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18:focus { outline: 0; } .emotion-18:invalid { box-shadow: none; } .emotion-18::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-18.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-18:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-18:-webkit-autofill { border-radius: inherit; } .emotion-19 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-20 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-20>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-21 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-38 { margin-top: 24px; } .emotion-39 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-39::-moz-focus-inner { border-style: none; } .emotion-39.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-39 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-39:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-39:hover { background-color: #1976d2; } } .emotion-39:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-39.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-39.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiBox-root emotion-3" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-4" > My Field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-5" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container emotion-7" > <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-9" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-10" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root emotion-14" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-15" data-shrink={false} htmlFor="root_0" id="root_0-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-16" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-17" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-18" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-19" > <legend className="emotion-20" > <span> My Item   * </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-21" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root_0__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-9" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-10" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root emotion-14" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-15" data-shrink={false} htmlFor="root_1" id="root_1-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-16" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-17" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-18" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} step="any" type="number" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-19" > <legend className="emotion-20" > <span> My Item   * </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-21" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root_1__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-38" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-39" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema array 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { margin-bottom: 8px; margin-top: 8px; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-5 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-6 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-8 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-9 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-10 { margin-top: 16px; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-11::-moz-focus-inner { border-style: none; } .emotion-11.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-11 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-11:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-11:hover { background-color: transparent; } } .emotion-11:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-11:hover { background-color: transparent; } } .emotion-11.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-12 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-13 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } .emotion-14 { margin-top: 24px; } .emotion-15 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-15::-moz-focus-inner { border-style: none; } .emotion-15.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-15 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-15:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-15:hover { background-color: #1976d2; } } .emotion-15:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-15.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiBox-root emotion-3" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-4" > My Field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-5" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container emotion-7" > <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item emotion-9" > <div className="MuiBox-root emotion-10" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium array-item-add emotion-11" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-12" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> <span className="MuiTouchRipple-root emotion-13" /> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-14" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-15" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-13" /> </button> </div> </form> `; exports[`with title and description from uiSchema array icons 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { margin-bottom: 8px; margin-top: 8px; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-5 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-6 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-8 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-9 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-10 { margin-bottom: 16px; } .emotion-14 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-15 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-15.Mui-focused { color: #1976d2; } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-15.Mui-error { color: #d32f2f; } .emotion-16.Mui-error { color: #d32f2f; } .emotion-17 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-17.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-17:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-17:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-17.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-17.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-17.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-18 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-18::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18:focus { outline: 0; } .emotion-18:invalid { box-shadow: none; } .emotion-18::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-18.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-18:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-18:-webkit-autofill { border-radius: inherit; } .emotion-19 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-20 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-20>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-21 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-23 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; padding: 5px; font-size: 1.125rem; } .emotion-24::-moz-focus-inner { border-style: none; } .emotion-24.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-24 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-24:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-25 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.25rem; } .emotion-30 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-30::-moz-focus-inner { border-style: none; } .emotion-30.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-30 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-30:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-30:hover { background-color: transparent; } } .emotion-30:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-30:hover { background-color: transparent; } } .emotion-30.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-56 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-58 { margin-top: 16px; } .emotion-59 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-59::-moz-focus-inner { border-style: none; } .emotion-59.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-59 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-59:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-59:hover { background-color: transparent; } } .emotion-59:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-59:hover { background-color: transparent; } } .emotion-59.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-60 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-61 { margin-top: 24px; } .emotion-62 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-62::-moz-focus-inner { border-style: none; } .emotion-62.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-62 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-62:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-62:hover { background-color: #1976d2; } } .emotion-62:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-62.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-62.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiBox-root emotion-3" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-4" > My Field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-5" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container emotion-7" > <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-9" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-10" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root emotion-14" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-15" data-shrink={true} htmlFor="root_0" id="root_0-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-16" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-17" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-18" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="a" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-19" > <legend className="emotion-20" > <span> My Item   * </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-21" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root_0__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root Mui-disabled MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall emotion-24" disabled={true} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move up" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ArrowUpwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move down" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ArrowDownwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ContentCopyIcon" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-30" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-9" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-10" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root emotion-14" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-15" data-shrink={true} htmlFor="root_1" id="root_1-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-16" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-17" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-18" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="b" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-19" > <legend className="emotion-20" > <span> My Item   * </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-21" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root_1__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move up" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ArrowUpwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </button> <button className="MuiButtonBase-root Mui-disabled MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall emotion-24" disabled={true} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move down" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ArrowDownwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="ContentCopyIcon" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-30" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-25" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-56" > <div className="MuiGrid-root MuiGrid-item emotion-23" > <div className="MuiBox-root emotion-58" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium array-item-add emotion-59" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-60" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-61" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-62" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`with title and description from uiSchema checkboxes 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-2.Mui-focused { color: #1976d2; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-2.Mui-error { color: #d32f2f; } .emotion-3 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-3.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-3:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-3:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-3.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-3.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-3.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-4 { -moz-appearance: none; -webkit-appearance: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-radius: 4px; cursor: pointer; font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-4:focus { border-radius: 4px; } .emotion-4::-ms-expand { display: none; } .emotion-4.Mui-disabled { cursor: default; } .emotion-4[multiple] { height: auto; } .emotion-4:not([multiple]) option, .emotion-4:not([multiple]) optgroup { background-color: #fff; } .emotion-4.emotion-4.emotion-4 { padding-right: 32px; } .emotion-4.MuiSelect-select { height: auto; min-height: 1.4375em; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .emotion-4::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4:focus { outline: 0; } .emotion-4:invalid { box-shadow: none; } .emotion-4::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-4.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-4:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-4:-webkit-autofill { border-radius: inherit; } .emotion-5 { bottom: 0; left: 0; position: absolute; opacity: 0; pointer-events: none; width: 100%; box-sizing: border-box; } .emotion-6 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; position: absolute; right: 7px; top: calc(50% - .5em); pointer-events: none; color: rgba(0, 0, 0, 0.54); } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-7 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-8 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-8>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-9 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-10 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-11 { margin-top: 24px; } .emotion-12 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-12::-moz-focus-inner { border-style: none; } .emotion-12.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-12 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-12:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-12:hover { background-color: #1976d2; } } .emotion-12:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-12.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-12.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-13 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-2" data-shrink={false} htmlFor="root" id="root-label" > My Field </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-3" onClick={[Function]} > <div aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root-label root" className="MuiSelect-select MuiSelect-outlined MuiSelect-multiple MuiInputBase-input MuiOutlinedInput-input emotion-4" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span className="notranslate" > ​ </span> </div> <input aria-hidden={true} aria-invalid={false} autoFocus={false} className="MuiSelect-nativeInput emotion-5" disabled={false} name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined emotion-6" data-testid="ArrowDropDownIcon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-7" > <legend className="emotion-8" > <span> My Field </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-9" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-10" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> </span> </div> </div> <div className="MuiBox-root emotion-11" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-12" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-13" /> </button> </div> </form> `; exports[`with title and description from uiSchema fixed array 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { margin-bottom: 8px; margin-top: 8px; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-5 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-6 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-8 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-9 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-9 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-10 { margin-bottom: 16px; } .emotion-14 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-15 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-15.Mui-focused { color: #1976d2; } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-15.Mui-error { color: #d32f2f; } .emotion-16.Mui-error { color: #d32f2f; } .emotion-17 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-17.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-17:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-17:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-17.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-17.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-17.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-18 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-18::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-18:focus { outline: 0; } .emotion-18:invalid { box-shadow: none; } .emotion-18::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-18:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-18.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-18:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-18:-webkit-autofill { border-radius: inherit; } .emotion-19 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-20 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-20>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-21 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-38 { margin-top: 24px; } .emotion-39 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-39::-moz-focus-inner { border-style: none; } .emotion-39.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-39 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-39:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-39:hover { background-color: #1976d2; } } .emotion-39:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-39.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-39.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiBox-root emotion-3" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-4" > My Field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-5" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container emotion-7" > <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-9" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-10" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root emotion-14" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-15" data-shrink={false} htmlFor="root_0" id="root_0-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-16" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-17" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-18" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-19" > <legend className="emotion-20" > <span> My Item   * </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-21" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root_0__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-8" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-9" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-10" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root emotion-14" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-15" data-shrink={false} htmlFor="root_1" id="root_1-label" > My Item <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-16" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-17" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-18" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} step="any" type="number" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-19" > <legend className="emotion-20" > <span> My Item   * </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-21" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-6" id="root_1__description" style={ { "marginTop": "5px", } } > a fancier item description </h6> </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-38" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-39" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off array 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-4 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-5 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-6 { margin-top: 16px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-7:hover { background-color: transparent; } } .emotion-7:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-7:hover { background-color: transparent; } } .emotion-7.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-8 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-9 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } .emotion-10 { margin-top: 24px; } .emotion-11 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-11::-moz-focus-inner { border-style: none; } .emotion-11.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-11 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-11:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-11:hover { background-color: #1976d2; } } .emotion-11:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-11.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiGrid-root MuiGrid-container emotion-3" > <div className="MuiGrid-root MuiGrid-container emotion-4" > <div className="MuiGrid-root MuiGrid-item emotion-5" > <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium array-item-add emotion-7" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-8" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> <span className="MuiTouchRipple-root emotion-9" /> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-10" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-11" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-9" /> </button> </div> </form> `; exports[`with title and description with global label off array icons 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-4 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-5 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-6 { margin-bottom: 16px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-11 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-11.Mui-focused { color: #1976d2; } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-11.Mui-error { color: #d32f2f; } .emotion-12.Mui-error { color: #d32f2f; } .emotion-13 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-13.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-13:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-13:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-13.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-13.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-13.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-14 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-14::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-14::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-14:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-14::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-14:focus { outline: 0; } .emotion-14:invalid { box-shadow: none; } .emotion-14::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-14.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-14:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-14:-webkit-autofill { border-radius: inherit; } .emotion-15 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-16 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-16>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-17 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; padding: 5px; font-size: 1.125rem; } .emotion-18::-moz-focus-inner { border-style: none; } .emotion-18.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-18 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-18:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-18:hover { background-color: transparent; } } .emotion-18.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-19 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.25rem; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-24::-moz-focus-inner { border-style: none; } .emotion-24.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-24 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-24:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-48 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-50 { margin-top: 16px; } .emotion-51 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-51::-moz-focus-inner { border-style: none; } .emotion-51.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-51 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-51:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-51:hover { background-color: transparent; } } .emotion-51:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-51:hover { background-color: transparent; } } .emotion-51.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-52 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-53 { margin-top: 24px; } .emotion-54 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-54::-moz-focus-inner { border-style: none; } .emotion-54.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-54 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-54:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-54:hover { background-color: #1976d2; } } .emotion-54:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-54.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-54.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiGrid-root MuiGrid-container emotion-3" > <div className="MuiGrid-root MuiGrid-container emotion-4" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-5" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-6" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root emotion-10" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-11" data-shrink={true} htmlFor="root_0" > <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-12" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-13" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-14" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="a" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-15" > <legend className="emotion-16" > <span>   * </span> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-17" > <button className="MuiButtonBase-root Mui-disabled MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall emotion-18" disabled={true} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move up" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-19" data-testid="ArrowUpwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-18" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move down" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-19" data-testid="ArrowDownwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-18" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-19" data-testid="ContentCopyIcon" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-19" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-4" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-5" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-6" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root emotion-10" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-11" data-shrink={true} htmlFor="root_1" > <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-12" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-13" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-14" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="b" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-15" > <legend className="emotion-16" > <span>   * </span> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-17" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-18" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Move up" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-19" data-testid="ArrowUpwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" /> </svg> </button> <button className="MuiButtonBase-root Mui-disabled MuiIconButton-root Mui-disabled MuiIconButton-sizeSmall emotion-18" disabled={true} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={-1} title="Move down" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-19" data-testid="ArrowDownwardIcon" focusable="false" viewBox="0 0 24 24" > <path d="m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeSmall emotion-18" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Copy" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-19" data-testid="ContentCopyIcon" focusable="false" viewBox="0 0 24 24" > <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" /> </svg> </button> <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "minWidth": 0, "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeSmall emotion-19" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-48" > <div className="MuiGrid-root MuiGrid-item emotion-17" > <div className="MuiBox-root emotion-50" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium array-item-add emotion-51" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-52" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </button> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-53" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-54" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`with title and description with global label off checkboxes 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-2.Mui-focused { color: #1976d2; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-2.Mui-error { color: #d32f2f; } .emotion-3 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-3.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-3:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-3:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-3.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-3.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-3.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-4 { -moz-appearance: none; -webkit-appearance: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-radius: 4px; cursor: pointer; font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-4:focus { border-radius: 4px; } .emotion-4::-ms-expand { display: none; } .emotion-4.Mui-disabled { cursor: default; } .emotion-4[multiple] { height: auto; } .emotion-4:not([multiple]) option, .emotion-4:not([multiple]) optgroup { background-color: #fff; } .emotion-4.emotion-4.emotion-4 { padding-right: 32px; } .emotion-4.MuiSelect-select { height: auto; min-height: 1.4375em; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .emotion-4::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4:focus { outline: 0; } .emotion-4:invalid { box-shadow: none; } .emotion-4::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-4.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-4:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-4:-webkit-autofill { border-radius: inherit; } .emotion-5 { bottom: 0; left: 0; position: absolute; opacity: 0; pointer-events: none; width: 100%; box-sizing: border-box; } .emotion-6 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; position: absolute; right: 7px; top: calc(50% - .5em); pointer-events: none; color: rgba(0, 0, 0, 0.54); } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-7 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-8 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-8>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-9 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-10 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-11 { margin-top: 24px; } .emotion-12 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-12::-moz-focus-inner { border-style: none; } .emotion-12.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-12 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-12:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-12:hover { background-color: #1976d2; } } .emotion-12:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-12.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-12.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-13 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-2" data-shrink={false} htmlFor="root" id="root-label" > Test field </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-3" onClick={[Function]} > <div aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root-label root" className="MuiSelect-select MuiSelect-outlined MuiSelect-multiple MuiInputBase-input MuiOutlinedInput-input emotion-4" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span className="notranslate" > ​ </span> </div> <input aria-hidden={true} aria-invalid={false} autoFocus={false} className="MuiSelect-nativeInput emotion-5" disabled={false} name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined emotion-6" data-testid="ArrowDropDownIcon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-7" > <legend className="emotion-8" > <span> Test field </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-9" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-10" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> </span> </div> </div> <div className="MuiBox-root emotion-11" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-12" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-13" /> </button> </div> </form> `; exports[`with title and description with global label off fixed array 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2 { padding: 16px; } .emotion-3 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-4 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-5 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-5 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-6 { margin-bottom: 16px; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-11 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-11.Mui-focused { color: #1976d2; } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-11.Mui-error { color: #d32f2f; } .emotion-12.Mui-error { color: #d32f2f; } .emotion-13 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-13.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-13:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-13:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-13.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-13.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-13.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-14 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-14::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-14::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-14:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-14::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-14:focus { outline: 0; } .emotion-14:invalid { box-shadow: none; } .emotion-14::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-14:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-14.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-14:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-14:-webkit-autofill { border-radius: inherit; } .emotion-15 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-16 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-16>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-30 { margin-top: 24px; } .emotion-31 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-31::-moz-focus-inner { border-style: none; } .emotion-31.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-31 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-31:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-31:hover { background-color: #1976d2; } } .emotion-31:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-31.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-31.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="MuiGrid-root MuiGrid-container emotion-3" > <div className="MuiGrid-root MuiGrid-container emotion-4" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-5" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-6" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_0__error root_0__description root_0__help" className="MuiFormControl-root MuiTextField-root emotion-10" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-11" data-shrink={false} htmlFor="root_0" > <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-12" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-13" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-14" disabled={false} id="root_0" name="root_0" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-15" > <legend className="emotion-16" > <span>   * </span> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-4" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-5" style={ { "overflow": "auto", } } > <div className="MuiBox-root emotion-6" > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-1" > <div className="MuiBox-root emotion-2" > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_1__error root_1__description root_1__help" className="MuiFormControl-root MuiTextField-root emotion-10" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary Mui-required MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-11" data-shrink={false} htmlFor="root_1" > <span aria-hidden={true} className="MuiFormLabel-asterisk MuiInputLabel-asterisk emotion-12" >   * </span> </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-13" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-14" disabled={false} id="root_1" name="root_1" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={true} step="any" type="number" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-15" > <legend className="emotion-16" > <span>   * </span> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-30" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-31" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; ������������������react-jsonschema-form-5.12.1/packages/mui/test/__snapshots__/Form.test.tsx.snap���������������������0000664�0000000�0000000�00001406042�14467713645�0027545�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`single fields checkbox field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; cursor: pointer; vertical-align: middle; -webkit-tap-highlight-color: transparent; margin-left: -11px; margin-right: 16px; } .emotion-1.Mui-disabled { cursor: default; } .emotion-1 .MuiFormControlLabel-label.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-2 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; padding: 9px; border-radius: 50%; color: rgba(0, 0, 0, 0.6); } .emotion-2::-moz-focus-inner { border-style: none; } .emotion-2.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-2 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-2:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-2:hover { background-color: transparent; } } .emotion-2.Mui-checked, .emotion-2.MuiCheckbox-indeterminate { color: #1976d2; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-3 { cursor: inherit; position: absolute; opacity: 0; width: 100%; height: 100%; top: 0; left: 0; margin: 0; padding: 0; z-index: 1; } .emotion-4 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-5 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } .emotion-6 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.5; letter-spacing: 0.00938em; } .emotion-7 { margin-top: 24px; } .emotion-8 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-8::-moz-focus-inner { border-style: none; } .emotion-8.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-8 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-8:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-8:hover { background-color: #1976d2; } } .emotion-8:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-8.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-8.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <label className="MuiFormControlLabel-root MuiFormControlLabel-labelPlacementEnd emotion-1" > <span aria-describedby="root__error root__description root__help" className="MuiButtonBase-root MuiCheckbox-root MuiCheckbox-colorPrimary PrivateSwitchBase-root MuiCheckbox-root MuiCheckbox-colorPrimary MuiCheckbox-root MuiCheckbox-colorPrimary emotion-2" onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <input autoFocus={false} checked={false} className="PrivateSwitchBase-input emotion-3" data-indeterminate={false} disabled={false} id="root" name="root" onChange={[Function]} required={false} type="checkbox" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-4" data-testid="CheckBoxOutlineBlankIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> </svg> <span className="MuiTouchRipple-root emotion-5" /> </span> <span className="MuiTypography-root MuiTypography-body1 MuiFormControlLabel-label emotion-6" > </span> </label> </div> </div> <div className="MuiBox-root emotion-7" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-8" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-5" /> </button> </div> </form> `; exports[`single fields checkbox field with label 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; cursor: pointer; vertical-align: middle; -webkit-tap-highlight-color: transparent; margin-left: -11px; margin-right: 16px; } .emotion-1.Mui-disabled { cursor: default; } .emotion-1 .MuiFormControlLabel-label.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-2 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; padding: 9px; border-radius: 50%; color: rgba(0, 0, 0, 0.6); } .emotion-2::-moz-focus-inner { border-style: none; } .emotion-2.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-2 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-2:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-2:hover { background-color: transparent; } } .emotion-2.Mui-checked, .emotion-2.MuiCheckbox-indeterminate { color: #1976d2; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-3 { cursor: inherit; position: absolute; opacity: 0; width: 100%; height: 100%; top: 0; left: 0; margin: 0; padding: 0; z-index: 1; } .emotion-4 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-5 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.5; letter-spacing: 0.00938em; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <label className="MuiFormControlLabel-root MuiFormControlLabel-labelPlacementEnd emotion-1" > <span aria-describedby="root__error root__description root__help" className="MuiButtonBase-root MuiCheckbox-root MuiCheckbox-colorPrimary PrivateSwitchBase-root MuiCheckbox-root MuiCheckbox-colorPrimary MuiCheckbox-root MuiCheckbox-colorPrimary emotion-2" onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <input autoFocus={false} checked={false} className="PrivateSwitchBase-input emotion-3" data-indeterminate={false} disabled={false} id="root" name="root" onChange={[Function]} required={false} type="checkbox" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-4" data-testid="CheckBoxOutlineBlankIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> </svg> </span> <span className="MuiTypography-root MuiTypography-body1 MuiFormControlLabel-label emotion-5" > test </span> </label> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields checkboxes field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; } .emotion-1.Mui-focused { color: #1976d2; } .emotion-1.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-1.Mui-error { color: #d32f2f; } .emotion-2 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; } .emotion-3 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; cursor: pointer; vertical-align: middle; -webkit-tap-highlight-color: transparent; margin-left: -11px; margin-right: 16px; } .emotion-3.Mui-disabled { cursor: default; } .emotion-3 .MuiFormControlLabel-label.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; padding: 9px; border-radius: 50%; color: rgba(0, 0, 0, 0.6); } .emotion-4::-moz-focus-inner { border-style: none; } .emotion-4.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-4 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-4:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-4:hover { background-color: transparent; } } .emotion-4.Mui-checked, .emotion-4.MuiCheckbox-indeterminate { color: #1976d2; } .emotion-4.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-5 { cursor: inherit; position: absolute; opacity: 0; width: 100%; height: 100%; top: 0; left: 0; margin: 0; padding: 0; z-index: 1; } .emotion-6 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-7 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } .emotion-8 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.5; letter-spacing: 0.00938em; } .emotion-27 { margin-top: 24px; } .emotion-28 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-28::-moz-focus-inner { border-style: none; } .emotion-28.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-28 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-28:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-28:hover { background-color: #1976d2; } } .emotion-28:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-28.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-28.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <label className="MuiFormLabel-root MuiFormLabel-colorPrimary emotion-1" htmlFor="root" > An enum list rendered as checkboxes </label> <div className="MuiFormGroup-root emotion-2" id="root" > <label className="MuiFormControlLabel-root MuiFormControlLabel-labelPlacementEnd emotion-3" > <span aria-describedby="root__error root__description root__help" className="MuiButtonBase-root MuiCheckbox-root MuiCheckbox-colorPrimary PrivateSwitchBase-root MuiCheckbox-root MuiCheckbox-colorPrimary MuiCheckbox-root MuiCheckbox-colorPrimary emotion-4" onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <input autoFocus={false} checked={false} className="PrivateSwitchBase-input emotion-5" data-indeterminate={false} disabled={false} id="root-0" name="root" onChange={[Function]} required={false} type="checkbox" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-6" data-testid="CheckBoxOutlineBlankIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> </svg> <span className="MuiTouchRipple-root emotion-7" /> </span> <span className="MuiTypography-root MuiTypography-body1 MuiFormControlLabel-label emotion-8" > foo </span> </label> <label className="MuiFormControlLabel-root MuiFormControlLabel-labelPlacementEnd emotion-3" > <span aria-describedby="root__error root__description root__help" className="MuiButtonBase-root MuiCheckbox-root MuiCheckbox-colorPrimary PrivateSwitchBase-root MuiCheckbox-root MuiCheckbox-colorPrimary MuiCheckbox-root MuiCheckbox-colorPrimary emotion-4" onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <input autoFocus={false} checked={false} className="PrivateSwitchBase-input emotion-5" data-indeterminate={false} disabled={false} id="root-1" name="root" onChange={[Function]} required={false} type="checkbox" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-6" data-testid="CheckBoxOutlineBlankIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> </svg> <span className="MuiTouchRipple-root emotion-7" /> </span> <span className="MuiTypography-root MuiTypography-body1 MuiFormControlLabel-label emotion-8" > bar </span> </label> <label className="MuiFormControlLabel-root MuiFormControlLabel-labelPlacementEnd emotion-3" > <span aria-describedby="root__error root__description root__help" className="MuiButtonBase-root MuiCheckbox-root MuiCheckbox-colorPrimary PrivateSwitchBase-root MuiCheckbox-root MuiCheckbox-colorPrimary MuiCheckbox-root MuiCheckbox-colorPrimary emotion-4" onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <input autoFocus={false} checked={false} className="PrivateSwitchBase-input emotion-5" data-indeterminate={false} disabled={false} id="root-2" name="root" onChange={[Function]} required={false} type="checkbox" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-6" data-testid="CheckBoxOutlineBlankIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> </svg> <span className="MuiTouchRipple-root emotion-7" /> </span> <span className="MuiTypography-root MuiTypography-body1 MuiFormControlLabel-label emotion-8" > fuzz </span> </label> <label className="MuiFormControlLabel-root MuiFormControlLabel-labelPlacementEnd emotion-3" > <span aria-describedby="root__error root__description root__help" className="MuiButtonBase-root MuiCheckbox-root MuiCheckbox-colorPrimary PrivateSwitchBase-root MuiCheckbox-root MuiCheckbox-colorPrimary MuiCheckbox-root MuiCheckbox-colorPrimary emotion-4" onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <input autoFocus={false} checked={false} className="PrivateSwitchBase-input emotion-5" data-indeterminate={false} disabled={false} id="root-3" name="root" onChange={[Function]} required={false} type="checkbox" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-6" data-testid="CheckBoxOutlineBlankIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z" /> </svg> <span className="MuiTouchRipple-root emotion-7" /> </span> <span className="MuiTypography-root MuiTypography-body1 MuiFormControlLabel-label emotion-8" > qux </span> </label> </div> </div> </div> <div className="MuiBox-root emotion-27" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-28" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-7" /> </button> </div> </form> `; exports[`single fields field with description 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-1>.MuiGrid-item { padding-top: 16px; } .emotion-1>.MuiGrid-item { padding-left: 16px; } .emotion-2 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-5 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-5.Mui-focused { color: #1976d2; } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-5.Mui-error { color: #d32f2f; } .emotion-6 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-6:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-6:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-6.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-6.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-6.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-7 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-7::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7:focus { outline: 0; } .emotion-7:invalid { box-shadow: none; } .emotion-7::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-7.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-7:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-7:-webkit-autofill { border-radius: inherit; } .emotion-8 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-9 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-9>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-10 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-11 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-12 { margin-top: 24px; } .emotion-13 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-13::-moz-focus-inner { border-style: none; } .emotion-13.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-13 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-13:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-13:hover { background-color: #1976d2; } } .emotion-13:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-13.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-13.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-14 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-1" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-2" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_my-field__error root_my-field__description root_my-field__help" className="MuiFormControl-root MuiTextField-root emotion-4" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-5" data-shrink={false} htmlFor="root_my-field" id="root_my-field-label" > my-field </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-6" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-7" disabled={false} id="root_my-field" name="root_my-field" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-8" > <legend className="emotion-9" > <span> my-field </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-10" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-11" id="root_my-field__description" style={ { "marginTop": "5px", } } > some description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-12" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-13" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-14" /> </button> </div> </form> `; exports[`single fields field with description in uiSchema 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-1>.MuiGrid-item { padding-top: 16px; } .emotion-1>.MuiGrid-item { padding-left: 16px; } .emotion-2 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-5 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-5.Mui-focused { color: #1976d2; } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-5.Mui-error { color: #d32f2f; } .emotion-6 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-6:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-6:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-6.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-6.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-6.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-7 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-7::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7:focus { outline: 0; } .emotion-7:invalid { box-shadow: none; } .emotion-7::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-7.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-7:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-7:-webkit-autofill { border-radius: inherit; } .emotion-8 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-9 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-9>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-10 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-11 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-12 { margin-top: 24px; } .emotion-13 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-13::-moz-focus-inner { border-style: none; } .emotion-13.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-13 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-13:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-13:hover { background-color: #1976d2; } } .emotion-13:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-13.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-13.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-1" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-2" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_my-field__error root_my-field__description root_my-field__help" className="MuiFormControl-root MuiTextField-root emotion-4" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-5" data-shrink={false} htmlFor="root_my-field" id="root_my-field-label" > my-field </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-6" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-7" disabled={false} id="root_my-field" name="root_my-field" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-8" > <legend className="emotion-9" > <span> my-field </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-10" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-11" id="root_my-field__description" style={ { "marginTop": "5px", } } > some other description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-12" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-13" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields format color 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-8 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="color" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-8" /> </button> </div> </form> `; exports[`single fields format date 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="date" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields format datetime 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-8 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="datetime-local" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-8" /> </button> </div> </form> `; exports[`single fields format time 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="time" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields help and error display 1`] = ` .emotion-0 { background-color: #fff; color: rgba(0, 0, 0, 0.87); -webkit-transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; border-radius: 4px; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-1 { margin-bottom: 16px; padding: 16px; } .emotion-2 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 1.25rem; line-height: 1.6; letter-spacing: 0.0075em; } .emotion-3 { list-style: none; margin: 0; padding: 0; position: relative; padding-top: 8px; padding-bottom: 8px; } .emotion-4 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-pack: start; -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; -webkit-text-decoration: none; text-decoration: none; width: 100%; box-sizing: border-box; text-align: left; padding-top: 4px; padding-bottom: 4px; padding-left: 16px; padding-right: 16px; } .emotion-4.Mui-focusVisible { background-color: rgba(0, 0, 0, 0.12); } .emotion-4.Mui-selected { background-color: rgba(25, 118, 210, 0.08); } .emotion-4.Mui-selected.Mui-focusVisible { background-color: rgba(25, 118, 210, 0.2); } .emotion-4.Mui-disabled { opacity: 0.38; } .emotion-5 { min-width: 56px; color: rgba(0, 0, 0, 0.54); -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; } .emotion-6 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; color: #d32f2f; } .emotion-7 { -webkit-flex: 1 1 auto; -ms-flex: 1 1 auto; flex: 1 1 auto; min-width: 0; margin-top: 4px; margin-bottom: 4px; } .emotion-8 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.875rem; line-height: 1.43; letter-spacing: 0.01071em; display: block; } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-10 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-11 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-11.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-11.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-11.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-12 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-12::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:focus { outline: 0; } .emotion-12:invalid { box-shadow: none; } .emotion-12::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-12.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-12:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-12:-webkit-autofill { border-radius: inherit; } .emotion-13 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-14 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-15 { list-style: none; margin: 0; padding: 0; position: relative; } .emotion-16 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-pack: start; -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; -webkit-text-decoration: none; text-decoration: none; width: 100%; box-sizing: border-box; text-align: left; padding-top: 4px; padding-bottom: 4px; } .emotion-16.Mui-focusVisible { background-color: rgba(0, 0, 0, 0.12); } .emotion-16.Mui-selected { background-color: rgba(25, 118, 210, 0.08); } .emotion-16.Mui-selected.Mui-focusVisible { background-color: rgba(25, 118, 210, 0.2); } .emotion-16.Mui-disabled { opacity: 0.38; } .emotion-17 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; text-align: left; margin-top: 3px; margin-right: 14px; margin-bottom: 0; margin-left: 14px; } .emotion-17.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-17.Mui-error { color: #d32f2f; } .emotion-19 { margin-top: 24px; } .emotion-20 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-20::-moz-focus-inner { border-style: none; } .emotion-20.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-20 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-20:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-20:hover { background-color: #1976d2; } } .emotion-20:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-20.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-20.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-21 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation2 emotion-0" > <div className="MuiBox-root emotion-1" > <h6 className="MuiTypography-root MuiTypography-h6 emotion-2" > Errors </h6> <ul className="MuiList-root MuiList-padding MuiList-dense emotion-3" > <li className="MuiListItem-root MuiListItem-dense MuiListItem-gutters MuiListItem-padding emotion-4" disabled={false} > <div className="MuiListItemIcon-root emotion-5" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-colorError MuiSvgIcon-fontSizeMedium emotion-6" data-testid="ErrorIcon" focusable="false" viewBox="0 0 24 24" > <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z" /> </svg> </div> <div className="MuiListItemText-root MuiListItemText-dense emotion-7" > <span className="MuiTypography-root MuiTypography-body2 MuiListItemText-primary emotion-8" > . an error </span> </div> </li> </ul> </div> </div> <div className="form-group field field-string field-error has-error has-danger" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-9" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-10" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary Mui-error MuiInputBase-formControl emotion-11" onClick={[Function]} > <input aria-invalid={true} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> <ul className="MuiList-root MuiList-dense emotion-15" > <li className="MuiListItem-root MuiListItem-dense MuiListItem-padding emotion-16" disabled={false} > <p className="MuiFormHelperText-root Mui-error MuiFormHelperText-sizeMedium MuiFormHelperText-contained emotion-17" id="root__error" > an error </p> </li> </ul> <p className="MuiFormHelperText-root Mui-error MuiFormHelperText-sizeMedium MuiFormHelperText-contained emotion-17" id="root__help" > help me! </p> </div> </div> <div className="MuiBox-root emotion-19" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-20" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-21" /> </button> </div> </form> `; exports[`single fields hidden field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-1>.MuiGrid-item { padding-top: 16px; } .emotion-1>.MuiGrid-item { padding-left: 16px; } .emotion-2 { margin-top: 24px; } .emotion-3 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-3::-moz-focus-inner { border-style: none; } .emotion-3.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-3 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-3:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-3:hover { background-color: #1976d2; } } .emotion-3:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-3.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-3.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-1" style={ { "marginTop": "10px", } } > <div style={ { "display": "none", } } > <input id="root_my-field" name="root_my-field" type="hidden" value="" /> </div> </div> </div> </div> <div className="MuiBox-root emotion-2" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-3" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields hidden label 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-2.Mui-focused { color: #1976d2; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-2.Mui-error { color: #d32f2f; } .emotion-3 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-3.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-3:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-3:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-3.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-3.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-3.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-4 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-4::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-4:focus { outline: 0; } .emotion-4:invalid { box-shadow: none; } .emotion-4::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-4.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-4:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-4:-webkit-autofill { border-radius: inherit; } .emotion-5 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-6 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-6>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-7 { margin-top: 24px; } .emotion-8 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-8::-moz-focus-inner { border-style: none; } .emotion-8.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-8 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-8:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-8:hover { background-color: #1976d2; } } .emotion-8:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-8.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-8.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-2" data-shrink={false} htmlFor="root" /> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-3" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-4" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-5" > <legend className="emotion-6" > <span /> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-7" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-8" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields null field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { margin-top: 24px; } .emotion-2 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2::-moz-focus-inner { border-style: none; } .emotion-2.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-2 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-2:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-2:hover { background-color: #1976d2; } } .emotion-2:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-2.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-3 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-null" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" /> </div> <div className="MuiBox-root emotion-1" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-2" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-3" /> </button> </div> </form> `; exports[`single fields number field 0 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value={0} /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields number field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-8 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-8" /> </button> </div> </form> `; exports[`single fields password field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-8 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="password" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-8" /> </button> </div> </form> `; exports[`single fields radio field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; } .emotion-1.Mui-focused { color: #1976d2; } .emotion-1.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-1.Mui-error { color: #d32f2f; } .emotion-2 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; } .emotion-3 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; cursor: pointer; vertical-align: middle; -webkit-tap-highlight-color: transparent; margin-left: -11px; margin-right: 16px; } .emotion-3.Mui-disabled { cursor: default; } .emotion-3 .MuiFormControlLabel-label.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; padding: 9px; border-radius: 50%; color: rgba(0, 0, 0, 0.6); } .emotion-4::-moz-focus-inner { border-style: none; } .emotion-4.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-4 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-4:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-4:hover { background-color: transparent; } } .emotion-4.Mui-checked { color: #1976d2; } .emotion-4.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-5 { cursor: inherit; position: absolute; opacity: 0; width: 100%; height: 100%; top: 0; left: 0; margin: 0; padding: 0; z-index: 1; } .emotion-6 { position: relative; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; } .emotion-7 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; -webkit-transform: scale(1); -moz-transform: scale(1); -ms-transform: scale(1); transform: scale(1); } .emotion-8 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; left: 0; position: absolute; -webkit-transform: scale(0); -moz-transform: scale(0); -ms-transform: scale(0); transform: scale(0); -webkit-transition: -webkit-transform 150ms cubic-bezier(0.4, 0, 1, 1) 0ms; transition: transform 150ms cubic-bezier(0.4, 0, 1, 1) 0ms; } .emotion-9 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.5; letter-spacing: 0.00938em; } .emotion-17 { margin-top: 24px; } .emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-18::-moz-focus-inner { border-style: none; } .emotion-18.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-18 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-18:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-18:hover { background-color: #1976d2; } } .emotion-18:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-18.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-18.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-boolean" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <label className="MuiFormLabel-root MuiFormLabel-colorPrimary emotion-1" htmlFor="root" /> <div aria-describedby="root__error root__description root__help" className="MuiFormGroup-root emotion-2" id="root" onBlur={[Function]} onFocus={[Function]} role="radiogroup" > <label className="MuiFormControlLabel-root MuiFormControlLabel-labelPlacementEnd emotion-3" > <span className="MuiButtonBase-root MuiRadio-root MuiRadio-colorPrimary PrivateSwitchBase-root MuiRadio-root MuiRadio-colorPrimary MuiRadio-root MuiRadio-colorPrimary emotion-4" onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <input checked={false} className="PrivateSwitchBase-input emotion-5" disabled={false} id="root-0" name="root" onChange={[Function]} required={false} type="radio" value="0" /> <span className="emotion-6" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-7" data-testid="RadioButtonUncheckedIcon" focusable="false" viewBox="0 0 24 24" > <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z" /> </svg> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-8" data-testid="RadioButtonCheckedIcon" focusable="false" viewBox="0 0 24 24" > <path d="M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z" /> </svg> </span> </span> <span className="MuiTypography-root MuiTypography-body1 MuiFormControlLabel-label emotion-9" > Yes </span> </label> <label className="MuiFormControlLabel-root MuiFormControlLabel-labelPlacementEnd emotion-3" > <span className="MuiButtonBase-root MuiRadio-root MuiRadio-colorPrimary PrivateSwitchBase-root MuiRadio-root MuiRadio-colorPrimary MuiRadio-root MuiRadio-colorPrimary emotion-4" onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={null} > <input checked={false} className="PrivateSwitchBase-input emotion-5" disabled={false} id="root-1" name="root" onChange={[Function]} required={false} type="radio" value="1" /> <span className="emotion-6" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-7" data-testid="RadioButtonUncheckedIcon" focusable="false" viewBox="0 0 24 24" > <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z" /> </svg> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-8" data-testid="RadioButtonCheckedIcon" focusable="false" viewBox="0 0 24 24" > <path d="M8.465 8.465C9.37 7.56 10.62 7 12 7C14.76 7 17 9.24 17 12C17 13.38 16.44 14.63 15.535 15.535C14.63 16.44 13.38 17 12 17C9.24 17 7 14.76 7 12C7 10.62 7.56 9.37 8.465 8.465Z" /> </svg> </span> </span> <span className="MuiTypography-root MuiTypography-body1 MuiFormControlLabel-label emotion-9" > No </span> </label> </div> </div> </div> <div className="MuiBox-root emotion-17" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-18" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields schema examples 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help root__examples" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" list="root__examples" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> <datalist id="root__examples" > <option value="Firefox" /> <option value="Chrome" /> <option value="Opera" /> <option value="Vivaldi" /> <option value="Safari" /> </datalist> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { -moz-appearance: none; -webkit-appearance: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-radius: 4px; cursor: pointer; font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3:focus { border-radius: 4px; } .emotion-3::-ms-expand { display: none; } .emotion-3.Mui-disabled { cursor: default; } .emotion-3[multiple] { height: auto; } .emotion-3:not([multiple]) option, .emotion-3:not([multiple]) optgroup { background-color: #fff; } .emotion-3.emotion-3.emotion-3 { padding-right: 32px; } .emotion-3.MuiSelect-select { height: auto; min-height: 1.4375em; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { bottom: 0; left: 0; position: absolute; opacity: 0; pointer-events: none; width: 100%; box-sizing: border-box; } .emotion-5 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; position: absolute; right: 7px; top: calc(50% - .5em); pointer-events: none; color: rgba(0, 0, 0, 0.54); } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-6 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-7 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-8 { margin-top: 24px; } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-9::-moz-focus-inner { border-style: none; } .emotion-9.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-9 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-9:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-9:hover { background-color: #1976d2; } } .emotion-9:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-9.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-9.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <div aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-select MuiSelect-outlined MuiInputBase-input MuiOutlinedInput-input emotion-3" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span className="notranslate" > ​ </span> </div> <input aria-hidden={true} aria-invalid={false} autoFocus={false} className="MuiSelect-nativeInput emotion-4" disabled={false} name="root" onAnimationStart={[Function]} onChange={[Function]} placeholder="" required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined emotion-5" data-testid="ArrowDropDownIcon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-6" > <legend className="emotion-7" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-8" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-9" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { -moz-appearance: none; -webkit-appearance: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-radius: 4px; cursor: pointer; font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3:focus { border-radius: 4px; } .emotion-3::-ms-expand { display: none; } .emotion-3.Mui-disabled { cursor: default; } .emotion-3[multiple] { height: auto; } .emotion-3:not([multiple]) option, .emotion-3:not([multiple]) optgroup { background-color: #fff; } .emotion-3.emotion-3.emotion-3 { padding-right: 32px; } .emotion-3.MuiSelect-select { height: auto; min-height: 1.4375em; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { bottom: 0; left: 0; position: absolute; opacity: 0; pointer-events: none; width: 100%; box-sizing: border-box; } .emotion-5 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; position: absolute; right: 7px; top: calc(50% - .5em); pointer-events: none; color: rgba(0, 0, 0, 0.54); } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-6 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-7 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-8 { margin-top: 24px; } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-9::-moz-focus-inner { border-style: none; } .emotion-9.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-9 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-9:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-9:hover { background-color: #1976d2; } } .emotion-9:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-9.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-9.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-10 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <div aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-select MuiSelect-outlined MuiSelect-multiple MuiInputBase-input MuiOutlinedInput-input emotion-3" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span className="notranslate" > ​ </span> </div> <input aria-hidden={true} aria-invalid={false} autoFocus={false} className="MuiSelect-nativeInput emotion-4" disabled={false} name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined emotion-5" data-testid="ArrowDropDownIcon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-6" > <legend className="emotion-7" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-8" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-9" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-10" /> </button> </div> </form> `; exports[`single fields select field multiple choice enumDisabled 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { -moz-appearance: none; -webkit-appearance: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-radius: 4px; cursor: pointer; font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3:focus { border-radius: 4px; } .emotion-3::-ms-expand { display: none; } .emotion-3.Mui-disabled { cursor: default; } .emotion-3[multiple] { height: auto; } .emotion-3:not([multiple]) option, .emotion-3:not([multiple]) optgroup { background-color: #fff; } .emotion-3.emotion-3.emotion-3 { padding-right: 32px; } .emotion-3.MuiSelect-select { height: auto; min-height: 1.4375em; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { bottom: 0; left: 0; position: absolute; opacity: 0; pointer-events: none; width: 100%; box-sizing: border-box; } .emotion-5 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; position: absolute; right: 7px; top: calc(50% - .5em); pointer-events: none; color: rgba(0, 0, 0, 0.54); } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-6 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-7 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-8 { margin-top: 24px; } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-9::-moz-focus-inner { border-style: none; } .emotion-9.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-9 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-9:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-9:hover { background-color: #1976d2; } } .emotion-9:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-9.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-9.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <div aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-select MuiSelect-outlined MuiSelect-multiple MuiInputBase-input MuiOutlinedInput-input emotion-3" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span className="notranslate" > ​ </span> </div> <input aria-hidden={true} aria-invalid={false} autoFocus={false} className="MuiSelect-nativeInput emotion-4" disabled={false} name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined emotion-5" data-testid="ArrowDropDownIcon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-6" > <legend className="emotion-7" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-8" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-9" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice formData 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { -moz-appearance: none; -webkit-appearance: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-radius: 4px; cursor: pointer; font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3:focus { border-radius: 4px; } .emotion-3::-ms-expand { display: none; } .emotion-3.Mui-disabled { cursor: default; } .emotion-3[multiple] { height: auto; } .emotion-3:not([multiple]) option, .emotion-3:not([multiple]) optgroup { background-color: #fff; } .emotion-3.emotion-3.emotion-3 { padding-right: 32px; } .emotion-3.MuiSelect-select { height: auto; min-height: 1.4375em; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { bottom: 0; left: 0; position: absolute; opacity: 0; pointer-events: none; width: 100%; box-sizing: border-box; } .emotion-5 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; position: absolute; right: 7px; top: calc(50% - .5em); pointer-events: none; color: rgba(0, 0, 0, 0.54); } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-6 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-7 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-8 { margin-top: 24px; } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-9::-moz-focus-inner { border-style: none; } .emotion-9.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-9 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-9:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-9:hover { background-color: #1976d2; } } .emotion-9:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-9.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-9.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <div aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-select MuiSelect-outlined MuiSelect-multiple MuiInputBase-input MuiOutlinedInput-input emotion-3" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > foo , bar </div> <input aria-hidden={true} aria-invalid={false} autoFocus={false} className="MuiSelect-nativeInput emotion-4" disabled={false} name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="0,1" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined emotion-5" data-testid="ArrowDropDownIcon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-6" > <legend className="emotion-7" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-8" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-9" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field multiple choice with labels 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { -moz-appearance: none; -webkit-appearance: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-radius: 4px; cursor: pointer; font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3:focus { border-radius: 4px; } .emotion-3::-ms-expand { display: none; } .emotion-3.Mui-disabled { cursor: default; } .emotion-3[multiple] { height: auto; } .emotion-3:not([multiple]) option, .emotion-3:not([multiple]) optgroup { background-color: #fff; } .emotion-3.emotion-3.emotion-3 { padding-right: 32px; } .emotion-3.MuiSelect-select { height: auto; min-height: 1.4375em; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { bottom: 0; left: 0; position: absolute; opacity: 0; pointer-events: none; width: 100%; box-sizing: border-box; } .emotion-5 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; position: absolute; right: 7px; top: calc(50% - .5em); pointer-events: none; color: rgba(0, 0, 0, 0.54); } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-6 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-7 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-8 { margin-top: 24px; } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-9::-moz-focus-inner { border-style: none; } .emotion-9.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-9 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-9:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-9:hover { background-color: #1976d2; } } .emotion-9:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-9.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-9.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-array" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <div aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-select MuiSelect-outlined MuiSelect-multiple MuiInputBase-input MuiOutlinedInput-input emotion-3" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span className="notranslate" > ​ </span> </div> <input aria-hidden={true} aria-invalid={false} autoFocus={false} className="MuiSelect-nativeInput emotion-4" disabled={false} name="root" onAnimationStart={[Function]} onChange={[Function]} required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined emotion-5" data-testid="ArrowDropDownIcon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-6" > <legend className="emotion-7" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-8" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-9" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields select field single choice enumDisabled 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { -moz-appearance: none; -webkit-appearance: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-radius: 4px; cursor: pointer; font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3:focus { border-radius: 4px; } .emotion-3::-ms-expand { display: none; } .emotion-3.Mui-disabled { cursor: default; } .emotion-3[multiple] { height: auto; } .emotion-3:not([multiple]) option, .emotion-3:not([multiple]) optgroup { background-color: #fff; } .emotion-3.emotion-3.emotion-3 { padding-right: 32px; } .emotion-3.MuiSelect-select { height: auto; min-height: 1.4375em; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { bottom: 0; left: 0; position: absolute; opacity: 0; pointer-events: none; width: 100%; box-sizing: border-box; } .emotion-5 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; position: absolute; right: 7px; top: calc(50% - .5em); pointer-events: none; color: rgba(0, 0, 0, 0.54); } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-6 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-7 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-8 { margin-top: 24px; } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-9::-moz-focus-inner { border-style: none; } .emotion-9.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-9 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-9:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-9:hover { background-color: #1976d2; } } .emotion-9:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-9.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-9.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-10 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <div aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-select MuiSelect-outlined MuiInputBase-input MuiOutlinedInput-input emotion-3" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > <span className="notranslate" > ​ </span> </div> <input aria-hidden={true} aria-invalid={false} autoFocus={false} className="MuiSelect-nativeInput emotion-4" disabled={false} name="root" onAnimationStart={[Function]} onChange={[Function]} placeholder="" required={false} tabIndex={-1} value="" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined emotion-5" data-testid="ArrowDropDownIcon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-6" > <legend className="emotion-7" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-8" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-9" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-10" /> </button> </div> </form> `; exports[`single fields select field single choice formData 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { -moz-appearance: none; -webkit-appearance: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border-radius: 4px; cursor: pointer; font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3:focus { border-radius: 4px; } .emotion-3::-ms-expand { display: none; } .emotion-3.Mui-disabled { cursor: default; } .emotion-3[multiple] { height: auto; } .emotion-3:not([multiple]) option, .emotion-3:not([multiple]) optgroup { background-color: #fff; } .emotion-3.emotion-3.emotion-3 { padding-right: 32px; } .emotion-3.MuiSelect-select { height: auto; min-height: 1.4375em; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { bottom: 0; left: 0; position: absolute; opacity: 0; pointer-events: none; width: 100%; box-sizing: border-box; } .emotion-5 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; position: absolute; right: 7px; top: calc(50% - .5em); pointer-events: none; color: rgba(0, 0, 0, 0.54); } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.26); } .emotion-6 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-7 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-8 { margin-top: 24px; } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-9::-moz-focus-inner { border-style: none; } .emotion-9.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-9 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-9:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-9:hover { background-color: #1976d2; } } .emotion-9:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-9.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-9.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-10 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <div aria-expanded="false" aria-haspopup="listbox" aria-labelledby="root" className="MuiSelect-select MuiSelect-outlined MuiInputBase-input MuiOutlinedInput-input emotion-3" id="root" onBlur={[Function]} onFocus={[Function]} onKeyDown={[Function]} onMouseDown={[Function]} role="button" tabIndex={0} > bar </div> <input aria-hidden={true} aria-invalid={false} autoFocus={false} className="MuiSelect-nativeInput emotion-4" disabled={false} name="root" onAnimationStart={[Function]} onChange={[Function]} placeholder="" required={false} tabIndex={-1} value="1" /> <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium MuiSelect-icon MuiSelect-iconOutlined emotion-5" data-testid="ArrowDropDownIcon" focusable="false" viewBox="0 0 24 24" > <path d="M7 10l5 5 5-5z" /> </svg> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-6" > <legend className="emotion-7" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-8" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-9" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-10" /> </button> </div> </form> `; exports[`single fields slider field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; } .emotion-1.Mui-focused { color: #1976d2; } .emotion-1.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-1.Mui-error { color: #d32f2f; } .emotion-2 { border-radius: 12px; box-sizing: content-box; display: inline-block; position: relative; cursor: pointer; touch-action: none; color: #1976d2; -webkit-tap-highlight-color: transparent; height: 4px; width: 100%; padding: 13px 0; } @media (pointer: coarse) { .emotion-2 { padding: 20px 0; } } @media print { .emotion-2 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-2.Mui-disabled { pointer-events: none; cursor: default; color: #bdbdbd; } .emotion-2.MuiSlider-dragging .MuiSlider-thumb, .emotion-2.MuiSlider-dragging .MuiSlider-track { -webkit-transition: none; transition: none; } .emotion-3 { display: block; position: absolute; border-radius: inherit; background-color: currentColor; opacity: 0.38; width: 100%; height: inherit; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); } .emotion-4 { display: block; position: absolute; border-radius: inherit; border: 1px solid currentColor; background-color: currentColor; -webkit-transition: left 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,width 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,bottom 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,height 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: left 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,width 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,bottom 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,height 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; height: inherit; top: 50%; -webkit-transform: translateY(-50%); -moz-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); } .emotion-5 { position: absolute; width: 20px; height: 20px; box-sizing: border-box; border-radius: 50%; outline: 0; background-color: currentColor; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; -webkit-transition: box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,left 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,bottom 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,left 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,bottom 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; top: 50%; -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); } .emotion-5:before { position: absolute; content: ""; border-radius: inherit; width: 100%; height: 100%; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-5::after { position: absolute; content: ""; border-radius: 50%; width: 42px; height: 42px; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); } .emotion-5:hover, .emotion-5.Mui-focusVisible { box-shadow: 0px 0px 0px 8px rgba(25, 118, 210, 0.16); } @media (hover: none) { .emotion-5:hover, .emotion-5.Mui-focusVisible { box-shadow: none; } } .emotion-5.Mui-active { box-shadow: 0px 0px 0px 14px rgba(25, 118, 210, 0.16); } .emotion-5.Mui-disabled:hover { box-shadow: none; } .emotion-6 { z-index: 1; white-space: nowrap; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.43; letter-spacing: 0.01071em; -webkit-transition: -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; -webkit-transform: translateY(-100%) scale(0); -moz-transform: translateY(-100%) scale(0); -ms-transform: translateY(-100%) scale(0); transform: translateY(-100%) scale(0); position: absolute; background-color: #757575; border-radius: 2px; color: #fff; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; padding: 0.25rem 0.75rem; top: -10px; transform-origin: bottom center; } .emotion-6.MuiSlider-valueLabelOpen { -webkit-transform: translateY(-100%) scale(1); -moz-transform: translateY(-100%) scale(1); -ms-transform: translateY(-100%) scale(1); transform: translateY(-100%) scale(1); } .emotion-6:before { position: absolute; content: ""; width: 8px; height: 8px; -webkit-transform: translate(-50%, 50%) rotate(45deg); -moz-transform: translate(-50%, 50%) rotate(45deg); -ms-transform: translate(-50%, 50%) rotate(45deg); transform: translate(-50%, 50%) rotate(45deg); background-color: inherit; bottom: 0; left: 50%; } .emotion-7 { margin-top: 24px; } .emotion-8 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-8::-moz-focus-inner { border-style: none; } .emotion-8.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-8 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-8:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-8:hover { background-color: #1976d2; } } .emotion-8:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-8.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-8.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-9 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-integer" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <label className="MuiFormLabel-root MuiFormLabel-colorPrimary emotion-1" htmlFor="root" /> <span aria-describedby="root__error root__description root__help" className="MuiSlider-root MuiSlider-colorPrimary MuiSlider-sizeMedium emotion-2" id="root" label="" onBlur={[Function]} onFocus={[Function]} onMouseDown={[Function]} > <span className="MuiSlider-rail emotion-3" /> <span className="MuiSlider-track emotion-4" style={ { "left": "0%", "width": "56.89655172413793%", } } /> <span className="MuiSlider-thumb MuiSlider-thumbSizeMedium MuiSlider-thumbColorPrimary MuiSlider-thumb MuiSlider-thumbSizeMedium MuiSlider-thumbColorPrimary emotion-5" data-index={0} onMouseLeave={[Function]} onMouseOver={[Function]} style={ { "left": "56.89655172413793%", "pointerEvents": undefined, } } > <input aria-orientation="horizontal" aria-valuemax={100} aria-valuemin={42} aria-valuenow={75} data-index={0} disabled={false} max={100} min={42} name="root" onBlur={[Function]} onChange={[Function]} onFocus={[Function]} step={1} style={ { "border": 0, "clip": "rect(0 0 0 0)", "direction": "ltr", "height": "100%", "margin": -1, "overflow": "hidden", "padding": 0, "position": "absolute", "whiteSpace": "nowrap", "width": "100%", } } type="range" value={75} /> <span aria-hidden={true} className="MuiSlider-valueLabel emotion-6" > <span className="MuiSlider-valueLabelCircle" > <span className="MuiSlider-valueLabelLabel" > 75 </span> </span> </span> </span> </span> </div> </div> <div className="MuiBox-root emotion-7" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-8" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-9" /> </button> </div> </form> `; exports[`single fields string field format data-url 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-8 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div> <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="file" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-8" /> </button> </div> </form> `; exports[`single fields string field format email 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-8 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="email" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-8" /> </button> </div> </form> `; exports[`single fields string field format uri 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="url" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field regular 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields string field with placeholder 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="placeholder" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields textarea field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; padding: 4px 0 5px; position: relative; border-radius: 4px; padding: 16.5px 14px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 0; border: 0; box-sizing: content-box; background: none; height: auto; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; resize: none; padding-top: 0; padding: 0; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-5 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-6 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-7 { margin-top: 24px; } .emotion-8 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-8::-moz-focus-inner { border-style: none; } .emotion-8.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-8 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-8:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-8:hover { background-color: #1976d2; } } .emotion-8:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-8.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-8.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-9 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl MuiInputBase-multiline emotion-2" onClick={[Function]} > <textarea aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input MuiInputBase-inputMultiline emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} rows={5} style={ { "height": 500, "overflow": undefined, } } value="" /> <textarea aria-hidden={true} className="MuiInputBase-input MuiOutlinedInput-input MuiInputBase-inputMultiline emotion-3" readOnly={true} style={ { "height": 0, "left": 0, "overflow": "hidden", "paddingBottom": 0, "paddingTop": 0, "position": "absolute", "top": 0, "transform": "translateZ(0)", "visibility": "hidden", } } tabIndex={-1} /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-5" > <legend className="emotion-6" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-7" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-8" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-9" /> </button> </div> </form> `; exports[`single fields title field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { margin-bottom: 8px; margin-top: 8px; } .emotion-2 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-3 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-4 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-4>.MuiGrid-item { padding-top: 16px; } .emotion-4>.MuiGrid-item { padding-left: 16px; } .emotion-5 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-5 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-5 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-5 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-5 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-8 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-8.Mui-focused { color: #1976d2; } .emotion-8.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-8.Mui-error { color: #d32f2f; } .emotion-9 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-9.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-9:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-9:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-9.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-9.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-9.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-10 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-10::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-10::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-10:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-10::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-10:focus { outline: 0; } .emotion-10:invalid { box-shadow: none; } .emotion-10::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-10::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-10::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-10:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-10::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-10:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-10:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-10:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-10:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-10.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-10:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-10:-webkit-autofill { border-radius: inherit; } .emotion-11 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-12 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-12>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-13 { margin-top: 24px; } .emotion-14 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-14::-moz-focus-inner { border-style: none; } .emotion-14.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-14 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-14:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-14:hover { background-color: #1976d2; } } .emotion-14:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-14.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-14.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-15 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiBox-root emotion-1" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-2" > Titre 1 </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-3" /> </div> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-4" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-5" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_title__error root_title__description root_title__help" className="MuiFormControl-root MuiTextField-root emotion-7" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-8" data-shrink={false} htmlFor="root_title" id="root_title-label" > Titre 2 </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-9" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-10" disabled={false} id="root_title" name="root_title" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-11" > <legend className="emotion-12" > <span> Titre 2 </span> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-13" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-14" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-15" /> </button> </div> </form> `; exports[`single fields unsupported field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { margin-top: 24px; } .emotion-2 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-2::-moz-focus-inner { border-style: none; } .emotion-2.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-2 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-2:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-2:hover { background-color: #1976d2; } } .emotion-2:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-2.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-undefined" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="unsupported-field" > <p> <span> Unsupported field schema for field <code> root </code> : <em> Unknown field type undefined </em> . </span> </p> <pre> {} </pre> </div> </div> </div> <div className="MuiBox-root emotion-1" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-2" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields up/down field 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="number" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`single fields using custom tagName 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-2 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-2.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-2:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-2.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-2.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-2.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-3 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-3::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-3:focus { outline: 0; } .emotion-3:invalid { box-shadow: none; } .emotion-3::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-3:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-3.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-3:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-3:-webkit-autofill { border-radius: inherit; } .emotion-4 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-5 { float: unset; width: auto; overflow: hidden; padding: 0; line-height: 11px; -webkit-transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: width 150ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; } .emotion-6 { margin-top: 24px; } .emotion-7 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-7::-moz-focus-inner { border-style: none; } .emotion-7.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-7 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-7:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-7:hover { background-color: #1976d2; } } .emotion-7:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-7.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-8 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <div className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root__error root__description root__help" className="MuiFormControl-root MuiTextField-root emotion-1" > <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-2" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-3" disabled={false} id="root" name="root" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-4" > <legend className="emotion-5" > <span className="notranslate" > ​ </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiBox-root emotion-6" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-7" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-8" /> </button> </div> </div> `; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/test/__snapshots__/Object.test.tsx.snap�������������������0000664�0000000�0000000�00001301033�14467713645�0030042�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`object fields additionalProperties 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-1>.MuiGrid-item { padding-top: 16px; } .emotion-1>.MuiGrid-item { padding-left: 16px; } .emotion-2 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-3 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-3>.MuiGrid-item { padding-top: 16px; } .emotion-3>.MuiGrid-item { padding-left: 16px; } .emotion-4 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-5 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-6 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-6.Mui-focused { color: #1976d2; } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-6.Mui-error { color: #d32f2f; } .emotion-7 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; width: 100%; position: relative; border-radius: 4px; } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-7:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-7:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-7.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-7.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-7.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-8 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-8::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8:focus { outline: 0; } .emotion-8:invalid { box-shadow: none; } .emotion-8::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-8.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-8:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-8:-webkit-autofill { border-radius: inherit; } .emotion-9 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-10 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-10>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-13 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-14 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-14.Mui-focused { color: #1976d2; } .emotion-14.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-14.Mui-error { color: #d32f2f; } .emotion-15 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-15:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-15:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-15.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-15.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-15.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-18 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-18>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-19 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-20 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-20::-moz-focus-inner { border-style: none; } .emotion-20.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-20 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-20:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-20:hover { background-color: transparent; } } .emotion-20:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-20:hover { background-color: transparent; } } .emotion-20.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-21 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-22 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } .emotion-23 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-25 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-25::-moz-focus-inner { border-style: none; } .emotion-25.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-25 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-25:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-25:hover { background-color: transparent; } } .emotion-25:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-25:hover { background-color: transparent; } } .emotion-25.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-28 { margin-top: 24px; } .emotion-29 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-29::-moz-focus-inner { border-style: none; } .emotion-29.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-29 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-29:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-29:hover { background-color: #1976d2; } } .emotion-29:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-29.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-29.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-1" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-2" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 form-group field field-string emotion-3" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-4" > <div className="MuiFormControl-root MuiFormControl-fullWidth MuiTextField-root emotion-5" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-6" data-shrink={false} htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-fullWidth MuiInputBase-formControl emotion-7" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-8" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-9" > <legend className="emotion-10" > <span> foo Key </span> </legend> </fieldset> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-4" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_foo__error root_foo__description root_foo__help" className="MuiFormControl-root MuiTextField-root emotion-13" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-14" data-shrink={true} htmlFor="root_foo" id="root_foo-label" > foo </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-15" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-8" disabled={false} id="root_foo" name="root_foo" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="foo" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-9" > <legend className="emotion-18" > <span> foo </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-19" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-20" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-21" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> <span className="MuiTouchRipple-root emotion-22" /> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-23" > <div className="MuiGrid-root MuiGrid-item emotion-19" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium object-property-expand emotion-25" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-21" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> <span className="MuiTouchRipple-root emotion-22" /> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-28" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-29" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-22" /> </button> </div> </form> `; exports[`object fields object 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-1>.MuiGrid-item { padding-top: 16px; } .emotion-1>.MuiGrid-item { padding-left: 16px; } .emotion-2 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-5 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-5.Mui-focused { color: #1976d2; } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-5.Mui-error { color: #d32f2f; } .emotion-6 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-6:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-6:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-6.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-6.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-6.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-7 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-7::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7:focus { outline: 0; } .emotion-7:invalid { box-shadow: none; } .emotion-7::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-7.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-7:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-7:-webkit-autofill { border-radius: inherit; } .emotion-8 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-9 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-9>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-18 { margin-top: 24px; } .emotion-19 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-19::-moz-focus-inner { border-style: none; } .emotion-19.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-19 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-19:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-19:hover { background-color: #1976d2; } } .emotion-19:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-19.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-19.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-1" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-2" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_a__error root_a__description root_a__help" className="MuiFormControl-root MuiTextField-root emotion-4" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-5" data-shrink={false} htmlFor="root_a" id="root_a-label" > A </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-6" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-7" disabled={false} id="root_a" name="root_a" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-8" > <legend className="emotion-9" > <span> A </span> </legend> </fieldset> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-2" style={ { "marginBottom": "10px", } } > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_b__error root_b__description root_b__help" className="MuiFormControl-root MuiTextField-root emotion-4" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-5" data-shrink={false} htmlFor="root_b" id="root_b-label" > B </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-6" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-7" disabled={false} id="root_b" name="root_b" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-8" > <legend className="emotion-9" > <span> B </span> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-18" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-19" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`object fields show add button and fields if additionalProperties is true and not an object 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-1>.MuiGrid-item { padding-top: 16px; } .emotion-1>.MuiGrid-item { padding-left: 16px; } .emotion-2 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-3 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-3>.MuiGrid-item { padding-top: 16px; } .emotion-3>.MuiGrid-item { padding-left: 16px; } .emotion-4 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-5 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-6 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-6.Mui-focused { color: #1976d2; } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-6.Mui-error { color: #d32f2f; } .emotion-7 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; width: 100%; position: relative; border-radius: 4px; } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-7:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-7:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-7.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-7.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-7.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-8 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-8::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8:focus { outline: 0; } .emotion-8:invalid { box-shadow: none; } .emotion-8::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-8.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-8:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-8:-webkit-autofill { border-radius: inherit; } .emotion-9 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-10 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-10>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-13 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-15 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-15:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-15:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-15.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-15.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-15.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-19 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-20 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-20::-moz-focus-inner { border-style: none; } .emotion-20.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-20 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-20:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-20:hover { background-color: transparent; } } .emotion-20:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-20:hover { background-color: transparent; } } .emotion-20.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-21 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-22 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-24::-moz-focus-inner { border-style: none; } .emotion-24.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-24 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-24:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-26 { margin-top: 24px; } .emotion-27 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-27::-moz-focus-inner { border-style: none; } .emotion-27.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-27 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-27:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-27:hover { background-color: #1976d2; } } .emotion-27:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-27.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-27.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-1" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-2" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 form-group field field-string emotion-3" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-4" > <div className="MuiFormControl-root MuiFormControl-fullWidth MuiTextField-root emotion-5" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-6" data-shrink={true} htmlFor="root_additionalProperty-key" id="root_additionalProperty-key-label" > additionalProperty Key </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-fullWidth MuiInputBase-formControl emotion-7" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-8" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-9" > <legend className="emotion-10" > <span> additionalProperty Key </span> </legend> </fieldset> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-4" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" className="MuiFormControl-root MuiTextField-root emotion-13" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-6" data-shrink={true} htmlFor="root_additionalProperty" id="root_additionalProperty-label" > additionalProperty </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-15" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-8" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="should appear" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-9" > <legend className="emotion-10" > <span> additionalProperty </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-19" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-20" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-21" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-22" > <div className="MuiGrid-root MuiGrid-item emotion-19" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium object-property-expand emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-21" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-26" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-27" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description additionalProperties 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { margin-bottom: 8px; margin-top: 8px; } .emotion-2 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-3 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-5 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-5>.MuiGrid-item { padding-top: 16px; } .emotion-5>.MuiGrid-item { padding-left: 16px; } .emotion-6 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-7>.MuiGrid-item { padding-top: 16px; } .emotion-7>.MuiGrid-item { padding-left: 16px; } .emotion-8 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-10 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-10.Mui-focused { color: #1976d2; } .emotion-10.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-10.Mui-error { color: #d32f2f; } .emotion-11 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; width: 100%; position: relative; border-radius: 4px; } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-11.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-11.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-11.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-12 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-12::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:focus { outline: 0; } .emotion-12:invalid { box-shadow: none; } .emotion-12::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-12.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-12:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-12:-webkit-autofill { border-radius: inherit; } .emotion-13 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-14 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-14>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-17 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-19 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-19.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-19:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-19:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-19.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-19.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-19.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-23 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-24::-moz-focus-inner { border-style: none; } .emotion-24.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-24 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-24:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-25 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-26 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-28 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-28::-moz-focus-inner { border-style: none; } .emotion-28.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-28 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-28:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-28:hover { background-color: transparent; } } .emotion-28:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-28:hover { background-color: transparent; } } .emotion-28.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-30 { margin-top: 24px; } .emotion-31 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-31::-moz-focus-inner { border-style: none; } .emotion-31.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-31 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-31:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-31:hover { background-color: #1976d2; } } .emotion-31:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-31.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-31.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiBox-root emotion-1" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-2" > Test field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-3" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-5" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-6" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 form-group field field-string emotion-7" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-8" > <div className="MuiFormControl-root MuiFormControl-fullWidth MuiTextField-root emotion-9" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-10" data-shrink={true} htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-fullWidth MuiInputBase-formControl emotion-11" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span> foo Key </span> </legend> </fieldset> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-8" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_foo__error root_foo__description root_foo__help" className="MuiFormControl-root MuiTextField-root emotion-17" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-10" data-shrink={true} htmlFor="root_foo" id="root_foo-label" > foo </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-19" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" disabled={false} id="root_foo" name="root_foo" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="foo" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span> foo </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-25" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-26" > <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium object-property-expand emotion-28" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-25" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-30" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-31" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from both additionalProperties 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { margin-bottom: 8px; margin-top: 8px; } .emotion-2 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-3 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-5 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-5>.MuiGrid-item { padding-top: 16px; } .emotion-5>.MuiGrid-item { padding-left: 16px; } .emotion-6 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-7>.MuiGrid-item { padding-top: 16px; } .emotion-7>.MuiGrid-item { padding-left: 16px; } .emotion-8 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-10 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-10.Mui-focused { color: #1976d2; } .emotion-10.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-10.Mui-error { color: #d32f2f; } .emotion-11 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; width: 100%; position: relative; border-radius: 4px; } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-11.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-11.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-11.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-12 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-12::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:focus { outline: 0; } .emotion-12:invalid { box-shadow: none; } .emotion-12::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-12.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-12:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-12:-webkit-autofill { border-radius: inherit; } .emotion-13 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-14 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-14>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-17 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-19 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-19.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-19:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-19:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-19.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-19.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-19.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-23 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-24::-moz-focus-inner { border-style: none; } .emotion-24.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-24 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-24:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-25 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-26 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-28 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-28::-moz-focus-inner { border-style: none; } .emotion-28.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-28 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-28:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-28:hover { background-color: transparent; } } .emotion-28:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-28:hover { background-color: transparent; } } .emotion-28.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-30 { margin-top: 24px; } .emotion-31 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-31::-moz-focus-inner { border-style: none; } .emotion-31.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-31 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-31:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-31:hover { background-color: #1976d2; } } .emotion-31:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-31.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-31.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiBox-root emotion-1" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-2" > My Field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-3" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-5" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-6" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 form-group field field-string emotion-7" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-8" > <div className="MuiFormControl-root MuiFormControl-fullWidth MuiTextField-root emotion-9" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-10" data-shrink={true} htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-fullWidth MuiInputBase-formControl emotion-11" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span> foo Key </span> </legend> </fieldset> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-8" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_foo__error root_foo__description root_foo__help" className="MuiFormControl-root MuiTextField-root emotion-17" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-10" data-shrink={true} htmlFor="root_foo" id="root_foo-label" > foo </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-19" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" disabled={false} id="root_foo" name="root_foo" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="foo" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span> foo </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-25" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-26" > <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium object-property-expand emotion-28" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-25" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-30" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-31" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from both object 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { margin-bottom: 8px; margin-top: 8px; } .emotion-2 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-3 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-5 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-5>.MuiGrid-item { padding-top: 16px; } .emotion-5>.MuiGrid-item { padding-left: 16px; } .emotion-6 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-8 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-9 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-9.Mui-focused { color: #1976d2; } .emotion-9.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-9.Mui-error { color: #d32f2f; } .emotion-10 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-10.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-10:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-10:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-10.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-10.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-10.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-11 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-11::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-11::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-11:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-11::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-11:focus { outline: 0; } .emotion-11:invalid { box-shadow: none; } .emotion-11::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-11.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-11:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-11:-webkit-autofill { border-radius: inherit; } .emotion-12 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-13 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-13>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-14 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-26 { margin-top: 24px; } .emotion-27 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-27::-moz-focus-inner { border-style: none; } .emotion-27.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-27 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-27:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-27:hover { background-color: #1976d2; } } .emotion-27:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-27.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-27.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-28 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiBox-root emotion-1" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-2" > My Field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-3" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-5" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-6" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_a__error root_a__description root_a__help" className="MuiFormControl-root MuiTextField-root emotion-8" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-9" data-shrink={false} htmlFor="root_a" id="root_a-label" > My Item A </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-10" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-11" disabled={false} id="root_a" name="root_a" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-12" > <legend className="emotion-13" > <span> My Item A </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-14" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root_a__description" style={ { "marginTop": "5px", } } > a fancier item A description </h6> </span> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-6" style={ { "marginBottom": "10px", } } > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_b__error root_b__description root_b__help" className="MuiFormControl-root MuiTextField-root emotion-8" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-9" data-shrink={false} htmlFor="root_b" id="root_b-label" > My Item B </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-10" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-11" disabled={false} id="root_b" name="root_b" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-12" > <legend className="emotion-13" > <span> My Item B </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-14" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root_b__description" style={ { "marginTop": "5px", } } > a fancier item B description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-26" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-27" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-28" /> </button> </div> </form> `; exports[`object fields with title and description from uiSchema additionalProperties 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { margin-bottom: 8px; margin-top: 8px; } .emotion-2 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-3 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-5 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-5>.MuiGrid-item { padding-top: 16px; } .emotion-5>.MuiGrid-item { padding-left: 16px; } .emotion-6 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-7>.MuiGrid-item { padding-top: 16px; } .emotion-7>.MuiGrid-item { padding-left: 16px; } .emotion-8 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-10 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-10.Mui-focused { color: #1976d2; } .emotion-10.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-10.Mui-error { color: #d32f2f; } .emotion-11 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; width: 100%; position: relative; border-radius: 4px; } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-11.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-11.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-11.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-12 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-12::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:focus { outline: 0; } .emotion-12:invalid { box-shadow: none; } .emotion-12::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-12.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-12:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-12:-webkit-autofill { border-radius: inherit; } .emotion-13 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-14 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-14>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-17 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-18 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-18.Mui-focused { color: #1976d2; } .emotion-18.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-18.Mui-error { color: #d32f2f; } .emotion-19 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-19.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-19:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-19:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-19.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-19.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-19.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-22 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-22>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-23 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-24::-moz-focus-inner { border-style: none; } .emotion-24.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-24 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-24:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-25 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-26 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } .emotion-27 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-29 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-29::-moz-focus-inner { border-style: none; } .emotion-29.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-29 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-29:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-29:hover { background-color: transparent; } } .emotion-29:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-29:hover { background-color: transparent; } } .emotion-29.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-32 { margin-top: 24px; } .emotion-33 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-33::-moz-focus-inner { border-style: none; } .emotion-33.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-33 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-33:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-33:hover { background-color: #1976d2; } } .emotion-33:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-33.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-33.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiBox-root emotion-1" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-2" > My Field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-3" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-5" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-6" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 form-group field field-string emotion-7" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-8" > <div className="MuiFormControl-root MuiFormControl-fullWidth MuiTextField-root emotion-9" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-10" data-shrink={false} htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-fullWidth MuiInputBase-formControl emotion-11" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span> foo Key </span> </legend> </fieldset> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-8" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_foo__error root_foo__description root_foo__help" className="MuiFormControl-root MuiTextField-root emotion-17" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-18" data-shrink={true} htmlFor="root_foo" id="root_foo-label" > foo </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-19" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" disabled={false} id="root_foo" name="root_foo" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="foo" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-22" > <span> foo </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-25" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> <span className="MuiTouchRipple-root emotion-26" /> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-27" > <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium object-property-expand emotion-29" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-25" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> <span className="MuiTouchRipple-root emotion-26" /> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-32" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-33" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-26" /> </button> </div> </form> `; exports[`object fields with title and description from uiSchema object 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { margin-bottom: 8px; margin-top: 8px; } .emotion-2 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-3 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-5 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-5>.MuiGrid-item { padding-top: 16px; } .emotion-5>.MuiGrid-item { padding-left: 16px; } .emotion-6 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-8 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-9 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-9.Mui-focused { color: #1976d2; } .emotion-9.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-9.Mui-error { color: #d32f2f; } .emotion-10 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-10.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-10:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-10:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-10.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-10.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-10.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-11 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-11::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-11::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-11:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-11::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-11:focus { outline: 0; } .emotion-11:invalid { box-shadow: none; } .emotion-11::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-11.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-11:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-11:-webkit-autofill { border-radius: inherit; } .emotion-12 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-13 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-13>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-14 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-26 { margin-top: 24px; } .emotion-27 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-27::-moz-focus-inner { border-style: none; } .emotion-27.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-27 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-27:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-27:hover { background-color: #1976d2; } } .emotion-27:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-27.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-27.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiBox-root emotion-1" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-2" > My Field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-3" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-5" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-6" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_a__error root_a__description root_a__help" className="MuiFormControl-root MuiTextField-root emotion-8" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-9" data-shrink={false} htmlFor="root_a" id="root_a-label" > My Item A </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-10" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-11" disabled={false} id="root_a" name="root_a" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-12" > <legend className="emotion-13" > <span> My Item A </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-14" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root_a__description" style={ { "marginTop": "5px", } } > a fancier item A description </h6> </span> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-6" style={ { "marginBottom": "10px", } } > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_b__error root_b__description root_b__help" className="MuiFormControl-root MuiTextField-root emotion-8" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-9" data-shrink={false} htmlFor="root_b" id="root_b-label" > My Item B </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-10" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-11" disabled={false} id="root_b" name="root_b" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-12" > <legend className="emotion-13" > <span> My Item B </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-14" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root_b__description" style={ { "marginTop": "5px", } } > a fancier item B description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-26" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-27" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description from uiSchema show add button and fields if additionalProperties is true and not an object 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { margin-bottom: 8px; margin-top: 8px; } .emotion-2 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-3 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-5 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-5>.MuiGrid-item { padding-top: 16px; } .emotion-5>.MuiGrid-item { padding-left: 16px; } .emotion-6 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-7>.MuiGrid-item { padding-top: 16px; } .emotion-7>.MuiGrid-item { padding-left: 16px; } .emotion-8 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-10 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-10.Mui-focused { color: #1976d2; } .emotion-10.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-10.Mui-error { color: #d32f2f; } .emotion-11 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; width: 100%; position: relative; border-radius: 4px; } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-11.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-11.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-11.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-12 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-12::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:focus { outline: 0; } .emotion-12:invalid { box-shadow: none; } .emotion-12::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-12.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-12:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-12:-webkit-autofill { border-radius: inherit; } .emotion-13 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-14 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-14>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-17 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-19 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-19.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-19:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-19:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-19.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-19.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-19.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-23 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-24::-moz-focus-inner { border-style: none; } .emotion-24.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-24 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-24:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-25 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-26 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-28 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-28::-moz-focus-inner { border-style: none; } .emotion-28.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-28 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-28:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-28:hover { background-color: transparent; } } .emotion-28:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-28:hover { background-color: transparent; } } .emotion-28.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-30 { margin-top: 24px; } .emotion-31 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-31::-moz-focus-inner { border-style: none; } .emotion-31.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-31 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-31:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-31:hover { background-color: #1976d2; } } .emotion-31:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-31.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-31.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiBox-root emotion-1" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-2" > My Field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-3" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root__description" style={ { "marginTop": "5px", } } > a fancier description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-5" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-6" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 form-group field field-string emotion-7" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-8" > <div className="MuiFormControl-root MuiFormControl-fullWidth MuiTextField-root emotion-9" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-10" data-shrink={true} htmlFor="root_additionalProperty-key" id="root_additionalProperty-key-label" > additionalProperty Key </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-fullWidth MuiInputBase-formControl emotion-11" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span> additionalProperty Key </span> </legend> </fieldset> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-8" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" className="MuiFormControl-root MuiTextField-root emotion-17" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-10" data-shrink={true} htmlFor="root_additionalProperty" id="root_additionalProperty-label" > additionalProperty </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-19" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="should appear" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span> additionalProperty </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-25" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-26" > <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium object-property-expand emotion-28" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-25" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-30" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-31" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description object 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { margin-bottom: 8px; margin-top: 8px; } .emotion-2 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-3 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-5 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-5>.MuiGrid-item { padding-top: 16px; } .emotion-5>.MuiGrid-item { padding-left: 16px; } .emotion-6 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-8 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-9 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-9.Mui-focused { color: #1976d2; } .emotion-9.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-9.Mui-error { color: #d32f2f; } .emotion-10 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-10.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-10:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-10:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-10.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-10.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-10.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-11 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-11::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-11::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-11:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-11::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-11:focus { outline: 0; } .emotion-11:invalid { box-shadow: none; } .emotion-11::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-11:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-11.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-11:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-11:-webkit-autofill { border-radius: inherit; } .emotion-12 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-13 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-13>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-14 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 0.75rem; line-height: 1.66; letter-spacing: 0.03333em; color: rgba(0, 0, 0, 0.6); } .emotion-26 { margin-top: 24px; } .emotion-27 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-27::-moz-focus-inner { border-style: none; } .emotion-27.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-27 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-27:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-27:hover { background-color: #1976d2; } } .emotion-27:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-27.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-27.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-28 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiBox-root emotion-1" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-2" > Test field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-3" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-5" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-6" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_a__error root_a__description root_a__help" className="MuiFormControl-root MuiTextField-root emotion-8" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-9" data-shrink={false} htmlFor="root_a" id="root_a-label" > A </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-10" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-11" disabled={false} id="root_a" name="root_a" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-12" > <legend className="emotion-13" > <span> A </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-14" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root_a__description" style={ { "marginTop": "5px", } } > A description </h6> </span> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-6" style={ { "marginBottom": "10px", } } > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_b__error root_b__description root_b__help" className="MuiFormControl-root MuiTextField-root emotion-8" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-9" data-shrink={false} htmlFor="root_b" id="root_b-label" > B </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-10" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-11" disabled={false} id="root_b" name="root_b" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-12" > <legend className="emotion-13" > <span> B </span> </legend> </fieldset> </div> </div> <span className="MuiTypography-root MuiTypography-caption emotion-14" > <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root_b__description" style={ { "marginTop": "5px", } } > B description </h6> </span> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-26" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-27" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-28" /> </button> </div> </form> `; exports[`object fields with title and description show add button and fields if additionalProperties is true and not an object 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { margin-bottom: 8px; margin-top: 8px; } .emotion-2 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1.5rem; line-height: 1.334; letter-spacing: 0em; } .emotion-3 { margin: 0; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; border-width: 0; border-style: solid; border-color: rgba(0, 0, 0, 0.12); border-bottom-width: thin; } .emotion-4 { margin: 0; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.57; letter-spacing: 0.00714em; } .emotion-5 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-5>.MuiGrid-item { padding-top: 16px; } .emotion-5>.MuiGrid-item { padding-left: 16px; } .emotion-6 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-6 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-7 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-7>.MuiGrid-item { padding-top: 16px; } .emotion-7>.MuiGrid-item { padding-left: 16px; } .emotion-8 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-8 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-9 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-10 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-10.Mui-focused { color: #1976d2; } .emotion-10.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-10.Mui-error { color: #d32f2f; } .emotion-11 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; width: 100%; position: relative; border-radius: 4px; } .emotion-11.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-11:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-11.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-11.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-11.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-12 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-12::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-12:focus { outline: 0; } .emotion-12:invalid { box-shadow: none; } .emotion-12::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-12:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-12.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-12:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-12:-webkit-autofill { border-radius: inherit; } .emotion-13 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-14 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-14>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-17 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-18 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-18.Mui-focused { color: #1976d2; } .emotion-18.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-18.Mui-error { color: #d32f2f; } .emotion-19 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-19.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-19:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-19:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-19.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-19.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-19.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-22 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-22>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-23 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-24::-moz-focus-inner { border-style: none; } .emotion-24.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-24 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-24:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-25 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-26 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } .emotion-27 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-29 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-29::-moz-focus-inner { border-style: none; } .emotion-29.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-29 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-29:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-29:hover { background-color: transparent; } } .emotion-29:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-29:hover { background-color: transparent; } } .emotion-29.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-32 { margin-top: 24px; } .emotion-33 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-33::-moz-focus-inner { border-style: none; } .emotion-33.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-33 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-33:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-33:hover { background-color: #1976d2; } } .emotion-33:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-33.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-33.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiBox-root emotion-1" id="root__title" > <h5 className="MuiTypography-root MuiTypography-h5 emotion-2" > Test field </h5> <hr className="MuiDivider-root MuiDivider-fullWidth emotion-3" /> </div> <h6 className="MuiTypography-root MuiTypography-subtitle2 emotion-4" id="root__description" style={ { "marginTop": "5px", } } > a test description </h6> <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-5" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-6" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 form-group field field-string emotion-7" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-8" > <div className="MuiFormControl-root MuiFormControl-fullWidth MuiTextField-root emotion-9" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-10" data-shrink={false} htmlFor="root_additionalProperty-key" id="root_additionalProperty-key-label" > additionalProperty Key </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-fullWidth MuiInputBase-formControl emotion-11" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-14" > <span> additionalProperty Key </span> </legend> </fieldset> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-8" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" className="MuiFormControl-root MuiTextField-root emotion-17" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-18" data-shrink={true} htmlFor="root_additionalProperty" id="root_additionalProperty-label" > additionalProperty </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-19" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-12" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="should appear" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-13" > <legend className="emotion-22" > <span> additionalProperty </span> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-25" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> <span className="MuiTouchRipple-root emotion-26" /> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-27" > <div className="MuiGrid-root MuiGrid-item emotion-23" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium object-property-expand emotion-29" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-25" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> <span className="MuiTouchRipple-root emotion-26" /> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-32" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-33" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-26" /> </button> </div> </form> `; exports[`object fields with title and description with global label off additionalProperties 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-1>.MuiGrid-item { padding-top: 16px; } .emotion-1>.MuiGrid-item { padding-left: 16px; } .emotion-2 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-3 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-3>.MuiGrid-item { padding-top: 16px; } .emotion-3>.MuiGrid-item { padding-left: 16px; } .emotion-4 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-5 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-6 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-6.Mui-focused { color: #1976d2; } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-6.Mui-error { color: #d32f2f; } .emotion-7 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; width: 100%; position: relative; border-radius: 4px; } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-7:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-7:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-7.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-7.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-7.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-8 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-8::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8:focus { outline: 0; } .emotion-8:invalid { box-shadow: none; } .emotion-8::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-8.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-8:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-8:-webkit-autofill { border-radius: inherit; } .emotion-9 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-10 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-10>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-13 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-15 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-15:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-15:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-15.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-15.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-15.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-19 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-20 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-20::-moz-focus-inner { border-style: none; } .emotion-20.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-20 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-20:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-20:hover { background-color: transparent; } } .emotion-20:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-20:hover { background-color: transparent; } } .emotion-20.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-21 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-22 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-24 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-24::-moz-focus-inner { border-style: none; } .emotion-24.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-24 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-24:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-24:hover { background-color: transparent; } } .emotion-24.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-26 { margin-top: 24px; } .emotion-27 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-27::-moz-focus-inner { border-style: none; } .emotion-27.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-27 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-27:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-27:hover { background-color: #1976d2; } } .emotion-27:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-27.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-27.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-1" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-2" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 form-group field field-string emotion-3" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-4" > <div className="MuiFormControl-root MuiFormControl-fullWidth MuiTextField-root emotion-5" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-6" data-shrink={true} htmlFor="root_foo-key" id="root_foo-key-label" > foo Key </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-fullWidth MuiInputBase-formControl emotion-7" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-8" defaultValue="foo" disabled={false} id="root_foo-key" name="root_foo-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-9" > <legend className="emotion-10" > <span> foo Key </span> </legend> </fieldset> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-4" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_foo__error root_foo__description root_foo__help" className="MuiFormControl-root MuiTextField-root emotion-13" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-6" data-shrink={true} htmlFor="root_foo" /> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-15" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-8" disabled={false} id="root_foo" name="root_foo" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="foo" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-9" > <legend className="emotion-10" > <span /> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-19" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-20" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-21" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-22" > <div className="MuiGrid-root MuiGrid-item emotion-19" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium object-property-expand emotion-24" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-21" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-26" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-27" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit </button> </div> </form> `; exports[`object fields with title and description with global label off object 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-1>.MuiGrid-item { padding-top: 16px; } .emotion-1>.MuiGrid-item { padding-left: 16px; } .emotion-2 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-4 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-5 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-5.Mui-focused { color: #1976d2; } .emotion-5.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-5.Mui-error { color: #d32f2f; } .emotion-6 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-6:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-6:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-6.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-6.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-6.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-7 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-7::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-7:focus { outline: 0; } .emotion-7:invalid { box-shadow: none; } .emotion-7::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-7:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-7.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-7:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-7:-webkit-autofill { border-radius: inherit; } .emotion-8 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-9 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-9>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-18 { margin-top: 24px; } .emotion-19 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-19::-moz-focus-inner { border-style: none; } .emotion-19.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-19 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-19:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-19:hover { background-color: #1976d2; } } .emotion-19:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-19.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-19.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } .emotion-20 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-1" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-2" style={ { "marginBottom": "10px", } } > <div className="form-group field field-string" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_a__error root_a__description root_a__help" className="MuiFormControl-root MuiTextField-root emotion-4" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-5" data-shrink={false} htmlFor="root_a" /> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-6" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-7" disabled={false} id="root_a" name="root_a" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-8" > <legend className="emotion-9" > <span /> </legend> </fieldset> </div> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-2" style={ { "marginBottom": "10px", } } > <div className="form-group field field-number" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_b__error root_b__description root_b__help" className="MuiFormControl-root MuiTextField-root emotion-4" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-5" data-shrink={false} htmlFor="root_b" /> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-6" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-7" disabled={false} id="root_b" name="root_b" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} step="any" type="number" value="" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-8" > <legend className="emotion-9" > <span /> </legend> </fieldset> </div> </div> </div> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-18" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-19" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-20" /> </button> </div> </form> `; exports[`object fields with title and description with global label off show add button and fields if additionalProperties is true and not an object 1`] = ` .emotion-0 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-1 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; } .emotion-1>.MuiGrid-item { padding-top: 16px; } .emotion-1>.MuiGrid-item { padding-left: 16px; } .emotion-2 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } @media (min-width:600px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:900px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1200px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } @media (min-width:1536px) { .emotion-2 { -webkit-flex-basis: 100%; -ms-flex-preferred-size: 100%; flex-basis: 100%; -webkit-box-flex: 0; -webkit-flex-grow: 0; -ms-flex-positive: 0; flex-grow: 0; max-width: 100%; } } .emotion-3 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; margin-top: -16px; width: calc(100% + 16px); margin-left: -16px; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .emotion-3>.MuiGrid-item { padding-top: 16px; } .emotion-3>.MuiGrid-item { padding-left: 16px; } .emotion-4 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } @media (min-width:600px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:900px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1200px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } @media (min-width:1536px) { .emotion-4 { -webkit-flex-basis: 0; -ms-flex-preferred-size: 0; flex-basis: 0; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; max-width: 100%; } } .emotion-5 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; width: 100%; } .emotion-6 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(100% - 24px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, 16px) scale(1); -moz-transform: translate(14px, 16px) scale(1); -ms-transform: translate(14px, 16px) scale(1); transform: translate(14px, 16px) scale(1); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: none; } .emotion-6.Mui-focused { color: #1976d2; } .emotion-6.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-6.Mui-error { color: #d32f2f; } .emotion-7 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; width: 100%; position: relative; border-radius: 4px; } .emotion-7.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-7:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-7:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-7.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-7.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-7.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-8 { font: inherit; letter-spacing: inherit; color: currentColor; padding: 4px 0 5px; border: 0; box-sizing: content-box; background: none; height: 1.4375em; margin: 0; -webkit-tap-highlight-color: transparent; display: block; min-width: 0; width: 100%; -webkit-animation-name: mui-auto-fill-cancel; animation-name: mui-auto-fill-cancel; -webkit-animation-duration: 10ms; animation-duration: 10ms; padding: 16.5px 14px; } .emotion-8::-webkit-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8::-moz-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8:-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8::-ms-input-placeholder { color: currentColor; opacity: 0.42; -webkit-transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; } .emotion-8:focus { outline: 0; } .emotion-8:invalid { box-shadow: none; } .emotion-8::-webkit-search-decoration { -webkit-appearance: none; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8::-webkit-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8::-moz-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8::-ms-input-placeholder { opacity: 0!important; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus::-webkit-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus::-moz-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus:-ms-input-placeholder { opacity: 0.42; } label[data-shrink=false]+.MuiInputBase-formControl .emotion-8:focus::-ms-input-placeholder { opacity: 0.42; } .emotion-8.Mui-disabled { opacity: 1; -webkit-text-fill-color: rgba(0, 0, 0, 0.38); } .emotion-8:-webkit-autofill { -webkit-animation-duration: 5000s; animation-duration: 5000s; -webkit-animation-name: mui-auto-fill; animation-name: mui-auto-fill; } .emotion-8:-webkit-autofill { border-radius: inherit; } .emotion-9 { text-align: left; position: absolute; bottom: 0; right: 0; top: -5px; left: 0; margin: 0; padding: 0 8px; pointer-events: none; border-radius: inherit; border-style: solid; border-width: 1px; overflow: hidden; min-width: 0%; border-color: rgba(0, 0, 0, 0.23); } .emotion-10 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 0.01px; -webkit-transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: max-width 50ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; white-space: nowrap; } .emotion-10>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-13 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; position: relative; min-width: 0; padding: 0; margin: 0; border: 0; vertical-align: top; } .emotion-14 { color: rgba(0, 0, 0, 0.6); font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; padding: 0; position: relative; display: block; transform-origin: top left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: calc(133% - 32px); position: absolute; left: 0; top: 0; -webkit-transform: translate(14px, -9px) scale(0.75); -moz-transform: translate(14px, -9px) scale(0.75); -ms-transform: translate(14px, -9px) scale(0.75); transform: translate(14px, -9px) scale(0.75); -webkit-transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,-webkit-transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; transition: color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,transform 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms,max-width 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms; z-index: 1; pointer-events: auto; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .emotion-14.Mui-focused { color: #1976d2; } .emotion-14.Mui-disabled { color: rgba(0, 0, 0, 0.38); } .emotion-14.Mui-error { color: #d32f2f; } .emotion-15 { font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.4375em; letter-spacing: 0.00938em; color: rgba(0, 0, 0, 0.87); box-sizing: border-box; position: relative; cursor: text; display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; position: relative; border-radius: 4px; } .emotion-15.Mui-disabled { color: rgba(0, 0, 0, 0.38); cursor: default; } .emotion-15:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.87); } @media (hover: none) { .emotion-15:hover .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.23); } } .emotion-15.Mui-focused .MuiOutlinedInput-notchedOutline { border-color: #1976d2; border-width: 2px; } .emotion-15.Mui-error .MuiOutlinedInput-notchedOutline { border-color: #d32f2f; } .emotion-15.Mui-disabled .MuiOutlinedInput-notchedOutline { border-color: rgba(0, 0, 0, 0.26); } .emotion-18 { float: unset; width: auto; overflow: hidden; display: block; padding: 0; height: 11px; font-size: 0.75em; visibility: hidden; max-width: 100%; -webkit-transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; transition: max-width 100ms cubic-bezier(0.0, 0, 0.2, 1) 50ms; white-space: nowrap; } .emotion-18>span { padding-left: 5px; padding-right: 5px; display: inline-block; opacity: 0; visibility: visible; } .emotion-19 { box-sizing: border-box; margin: 0; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; } .emotion-20 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #d32f2f; padding: 5px; font-size: 1.125rem; } .emotion-20::-moz-focus-inner { border-style: none; } .emotion-20.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-20 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-20:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-20:hover { background-color: transparent; } } .emotion-20:hover { background-color: rgba(211, 47, 47, 0.04); } @media (hover: none) { .emotion-20:hover { background-color: transparent; } } .emotion-20.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-21 { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; width: 1em; height: 1em; display: inline-block; fill: currentColor; -webkit-flex-shrink: 0; -ms-flex-negative: 0; flex-shrink: 0; -webkit-transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; font-size: 1.5rem; } .emotion-22 { overflow: hidden; pointer-events: none; position: absolute; z-index: 0; top: 0; right: 0; bottom: 0; left: 0; border-radius: inherit; } .emotion-23 { box-sizing: border-box; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-flex-wrap: wrap; -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap; width: 100%; -webkit-flex-direction: row; -ms-flex-direction: row; flex-direction: row; -webkit-box-pack: end; -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } .emotion-25 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; text-align: center; -webkit-flex: 0 0 auto; -ms-flex: 0 0 auto; flex: 0 0 auto; font-size: 1.5rem; padding: 8px; border-radius: 50%; overflow: visible; color: rgba(0, 0, 0, 0.54); -webkit-transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #1976d2; } .emotion-25::-moz-focus-inner { border-style: none; } .emotion-25.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-25 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-25:hover { background-color: rgba(0, 0, 0, 0.04); } @media (hover: none) { .emotion-25:hover { background-color: transparent; } } .emotion-25:hover { background-color: rgba(25, 118, 210, 0.04); } @media (hover: none) { .emotion-25:hover { background-color: transparent; } } .emotion-25.Mui-disabled { background-color: transparent; color: rgba(0, 0, 0, 0.26); } .emotion-28 { margin-top: 24px; } .emotion-29 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; -webkit-align-items: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; -webkit-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; position: relative; box-sizing: border-box; -webkit-tap-highlight-color: transparent; background-color: transparent; outline: 0; border: 0; margin: 0; border-radius: 0; padding: 0; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; vertical-align: middle; -moz-appearance: none; -webkit-appearance: none; -webkit-text-decoration: none; text-decoration: none; color: inherit; font-family: "Roboto","Helvetica","Arial",sans-serif; font-weight: 500; font-size: 0.875rem; line-height: 1.75; letter-spacing: 0.02857em; text-transform: uppercase; min-width: 64px; padding: 6px 16px; border-radius: 4px; -webkit-transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; color: #fff; background-color: #1976d2; box-shadow: 0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12); } .emotion-29::-moz-focus-inner { border-style: none; } .emotion-29.Mui-disabled { pointer-events: none; cursor: default; } @media print { .emotion-29 { -webkit-print-color-adjust: exact; color-adjust: exact; } } .emotion-29:hover { -webkit-text-decoration: none; text-decoration: none; background-color: #1565c0; box-shadow: 0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12); } @media (hover: none) { .emotion-29:hover { background-color: #1976d2; } } .emotion-29:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } .emotion-29.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } .emotion-29.Mui-disabled { color: rgba(0, 0, 0, 0.26); box-shadow: none; background-color: rgba(0, 0, 0, 0.12); } <form className="rjsf" noValidate={false} onSubmit={[Function]} > <div className="form-group field field-object" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 emotion-1" style={ { "marginTop": "10px", } } > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-12 emotion-2" style={ { "marginBottom": "10px", } } > <div className="MuiGrid-root MuiGrid-container MuiGrid-spacing-xs-2 form-group field field-string emotion-3" > <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-4" > <div className="MuiFormControl-root MuiFormControl-fullWidth MuiTextField-root emotion-5" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined emotion-6" data-shrink={false} htmlFor="root_additionalProperty-key" id="root_additionalProperty-key-label" > additionalProperty Key </label> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-fullWidth MuiInputBase-formControl emotion-7" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-8" defaultValue="additionalProperty" disabled={false} id="root_additionalProperty-key" name="root_additionalProperty-key" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} required={false} type="text" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-9" > <legend className="emotion-10" > <span> additionalProperty Key </span> </legend> </fieldset> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item MuiGrid-grid-xs-true emotion-4" > <div className="MuiFormControl-root MuiFormControl-fullWidth emotion-0" > <div aria-describedby="root_additionalProperty__error root_additionalProperty__description root_additionalProperty__help" className="MuiFormControl-root MuiTextField-root emotion-13" > <label className="MuiFormLabel-root MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-colorPrimary MuiFormLabel-filled MuiInputLabel-root MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined emotion-14" data-shrink={true} htmlFor="root_additionalProperty" /> <div className="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-colorPrimary MuiInputBase-formControl emotion-15" onClick={[Function]} > <input aria-invalid={false} autoFocus={false} className="MuiInputBase-input MuiOutlinedInput-input emotion-8" disabled={false} id="root_additionalProperty" name="root_additionalProperty" onAnimationStart={[Function]} onBlur={[Function]} onChange={[Function]} onFocus={[Function]} placeholder="" required={false} type="text" value="should appear" /> <fieldset aria-hidden={true} className="MuiOutlinedInput-notchedOutline emotion-9" > <legend className="emotion-18" > <span /> </legend> </fieldset> </div> </div> </div> </div> <div className="MuiGrid-root MuiGrid-item emotion-19" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorError MuiIconButton-sizeSmall emotion-20" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} style={ { "flex": 1, "fontWeight": "bold", "paddingLeft": 6, "paddingRight": 6, } } tabIndex={0} title="Remove" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-21" data-testid="RemoveIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13H5v-2h14v2z" /> </svg> <span className="MuiTouchRipple-root emotion-22" /> </button> </div> </div> </div> <div className="MuiGrid-root MuiGrid-container emotion-23" > <div className="MuiGrid-root MuiGrid-item emotion-19" > <button className="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorPrimary MuiIconButton-sizeMedium object-property-expand emotion-25" disabled={false} onBlur={[Function]} onClick={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} title="Add Item" type="button" > <svg aria-hidden={true} className="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium emotion-21" data-testid="AddIcon" focusable="false" viewBox="0 0 24 24" > <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> </svg> <span className="MuiTouchRipple-root emotion-22" /> </button> </div> </div> </div> </div> </div> <div className="MuiBox-root emotion-28" > <button className="MuiButtonBase-root MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium MuiButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeMedium MuiButton-containedSizeMedium emotion-29" disabled={false} onBlur={[Function]} onContextMenu={[Function]} onDragLeave={[Function]} onFocus={[Function]} onKeyDown={[Function]} onKeyUp={[Function]} onMouseDown={[Function]} onMouseLeave={[Function]} onMouseUp={[Function]} onTouchEnd={[Function]} onTouchMove={[Function]} onTouchStart={[Function]} tabIndex={0} type="submit" > Submit <span className="MuiTouchRipple-root emotion-22" /> </button> </div> </form> `; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/mui/tsconfig.json���������������������������������������������0000664�0000000�0000000�00000000271�14467713645�0023067�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": "../../tsconfig.base.json", "include": ["src"], "compilerOptions": { "rootDir": "./src", "outDir": "./lib", "baseUrl": "./", "jsx": "react-jsx" } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/playground/���������������������������������������������������0000775�0000000�0000000�00000000000�14467713645�0021752�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/playground/.babelrc�������������������������������������������0000664�0000000�0000000�00000001162�14467713645�0023345�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "presets": [ [ "@babel/preset-env", { "modules": false, // don't convert modules into CommonJS "useBuiltIns": "usage", // use polyfill when needed "corejs": 3 } ], "@babel/preset-react" ], "plugins": [ "@babel/plugin-syntax-dynamic-import", "@babel/plugin-proposal-object-rest-spread", "@babel/plugin-proposal-class-properties", [ "@babel/plugin-transform-runtime", { "corejs": 3, "useESModules": true } ] ], "env": { "development": { "plugins": ["@babel/plugin-transform-react-jsx"] } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/playground/.eslintrc������������������������������������������0000664�0000000�0000000�00000000162�14467713645�0023575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ "extends": "../../.eslintrc-typescript", "plugins": ["@typescript-eslint", "jsx-a11y", "react", "import"] } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������react-jsonschema-form-5.12.1/packages/playground/index.html�����������������������������������������0000664�0000000�0000000�00000001261�14467713645�0023747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>react-jsonschema-form playground
react-jsonschema-form-5.12.1/packages/playground/package.json000066400000000000000000000072641446771364500242510ustar00rootroot00000000000000{ "name": "@rjsf/playground", "version": "5.12.1", "description": "rjsf playground", "private": true, "type": "module", "scripts": { "cs-check": "prettier -l \"src/**/*.ts?(x)\"", "cs-format": "prettier \"src/**/*.ts?(x)\" --write", "build": "rimraf build && cross-env NODE_ENV=production vite build", "lint": "eslint src", "precommit": "lint-staged", "publish-to-gh-pages": "npm run build && gh-pages --dist build/", "publish-to-npm": "npm run build && npm publish", "start": "vite --force", "preview": "vite preview" }, "lint-staged": { "src/**/*.ts?(x)": [ "eslint --fix", "prettier --write" ] }, "files": [ "dist", "lib", "src" ], "engineStrict": false, "engines": { "node": ">=14" }, "peerDependencies": { "react": "^18.2.0" }, "dependencies": { "@ant-design/icons": "^4.8.0", "@babel/runtime": "^7.22.6", "@chakra-ui/icons": "^1.1.7", "@chakra-ui/react": "^1.8.9", "@fluentui/react": "^8.110.12", "@material-ui/core": "^4.12.4", "@mui/material": "^5.14.3", "@rjsf/antd": "^5.12.1", "@rjsf/bootstrap-4": "^5.12.1", "@rjsf/chakra-ui": "^5.12.1", "@rjsf/core": "^5.12.1", "@rjsf/fluent-ui": "^5.12.1", "@rjsf/material-ui": "^5.12.1", "@rjsf/mui": "^5.12.1", "@rjsf/semantic-ui": "^5.12.1", "@rjsf/utils": "^5.12.1", "@rjsf/validator-ajv6": "^5.12.1", "@rjsf/validator-ajv8": "^5.12.1", "ajv": "^8.12.0", "ajv-formats": "^2.1.1", "ajv-i18n": "^4.2.0", "antd": "^4.24.13", "atob": "^2.1.2", "chakra-react-select": "^4.6.0", "core-js": "^3.32.0", "dayjs": "^1.11.9", "framer-motion": "^5.6.0", "jss": "^10.10.0", "lodash": "^4.17.21", "monaco-editor": "^0.38.0", "react": "^18.2.0", "react-bootstrap": "^1.6.7", "react-dom": "^18.2.0", "react-frame-component": "^4.1.3", "react-is": "^18.2.0", "react-portal": "^4.2.2" }, "devDependencies": { "@babel/cli": "^7.22.9", "@babel/core": "^7.22.9", "@babel/eslint-parser": "^7.22.9", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-object-rest-spread": "^7.20.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-transform-react-jsx": "^7.22.5", "@babel/plugin-transform-runtime": "^7.22.9", "@babel/preset-env": "^7.22.9", "@babel/preset-react": "^7.22.5", "@babel/register": "^7.22.5", "@emotion/cache": "^11.11.0", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@material-ui/icons": "^4.11.3", "@monaco-editor/react": "^4.5.1", "@mui/icons-material": "^5.14.3", "@types/lodash": "^4.14.196", "@types/react-frame-component": "^4.1.3", "@vitejs/plugin-react": "^4.0.4", "cross-env": "^7.0.3", "esbuild": "^0.18.19", "eslint": "^8.46.0", "gh-pages": "^3.2.3", "html": "^1.0.0", "html-webpack-plugin": "^5.5.3", "loader-utils": "^3.2.1", "mini-css-extract-plugin": "^2.7.6", "prettier": "^2.8.8", "react-transform-catch-errors": "^1.0.2", "react-transform-hmr": "^1.0.4", "rimraf": "^5.0.1", "source-map-loader": "^4.0.1", "vite": "^4.4.9" }, "directories": { "test": "test" }, "repository": { "type": "git", "url": "git+https://github.com/rjsf-team/react-jsonschema-form.git" }, "author": "Nicolas Perriault ", "contributors": [ "Heath Chiavettone ); } react-jsonschema-form-5.12.1/packages/playground/src/components/000077500000000000000000000000001446771364500247265ustar00rootroot00000000000000react-jsonschema-form-5.12.1/packages/playground/src/components/CopyLink.tsx000066400000000000000000000015421446771364500272200ustar00rootroot00000000000000import { useRef } from 'react'; interface CopyLinkProps { shareURL: string | null; onShare: () => void; } export default function CopyLink({ shareURL, onShare }: CopyLinkProps) { const input = useRef(null); function onCopyClick() { input.current?.select(); navigator.clipboard.writeText(input.current?.value ?? ''); } if (!shareURL) { return ( ); } return (
); } react-jsonschema-form-5.12.1/packages/playground/src/components/DemoFrame.tsx000066400000000000000000000106141446771364500273270ustar00rootroot00000000000000import { useState, useRef, useCallback, cloneElement, ReactElement, ReactNode } from 'react'; import { CssBaseline } from '@mui/material'; import { CacheProvider } from '@emotion/react'; import createCache, { EmotionCache } from '@emotion/cache'; import { create, Jss } from 'jss'; import { jssPreset, StylesProvider } from '@material-ui/core/styles'; import Frame, { FrameComponentProps, FrameContextConsumer } from 'react-frame-component'; import { __createChakraFrameProvider } from '@rjsf/chakra-ui'; /* Adapted from https://github.com/mui-org/material-ui/blob/master/docs/src/modules/components/DemoSandboxed.js The MIT License (MIT) Copyright (c) 2014 Call-Em-All Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ interface DemoFrameProps extends FrameComponentProps { theme: string; /** override children to be ReactElement to avoid Typescript issue. In this case we don't need to worry about * children being of the other valid ReactNode types, undefined and string as it always contains an RJSF `Form` */ children: ReactElement; } export default function DemoFrame(props: DemoFrameProps) { const { children, head, theme, ...frameProps } = props; const [jss, setJss] = useState(); const [ready, setReady] = useState(false); const [sheetsManager, setSheetsManager] = useState(new Map()); const [emotionCache, setEmotionCache] = useState(createCache({ key: 'css' })); const [container, setContainer] = useState(); const [window, setWindow] = useState(); const instanceRef = useRef(); const handleRef = useCallback( (ref: any) => { instanceRef.current = { contentDocument: ref ? ref.node.contentDocument : null, contentWindow: ref ? ref.node.contentWindow : null, }; }, [instanceRef] ); const onContentDidMount = useCallback(() => { setReady(true); setJss( create({ plugins: jssPreset().plugins, insertionPoint: instanceRef.current.contentWindow['demo-frame-jss'], }) ); setSheetsManager(new Map()); setEmotionCache( createCache({ key: 'css', prepend: true, container: instanceRef.current.contentWindow['demo-frame-jss'], }) ); setContainer(instanceRef.current.contentDocument.body); setWindow(() => instanceRef.current.contentWindow); }, []); let body: ReactNode = children; if (theme === 'material-ui-4') { body = ready ? ( {cloneElement(children, { container: container, window: window, })} ) : null; } else if (theme === 'material-ui-5') { body = ready ? ( {cloneElement(children, { container: container, window: window, })} ) : null; } else if (theme === 'fluent-ui') { // TODO: find a better way to render fluent-ui in an iframe, if we need to do so. body = ( <>