diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000..eaf04fb1 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,145 @@ +version: 2.1 + +ruby-image: &ruby-image cimg/ruby:<> +env-vars: &env-vars + RAILS_ENV: test + NODE_ENV: test + BUNDLE_PATH: vendor/bundle + +orbs: + browser-tools: circleci/browser-tools@1.1.3 + +executors: + main-executor: + parameters: + ruby-version: + description: "Ruby version" + default: "3.2" + type: string + docker: + - image: *ruby-image + environment: *env-vars + +commands: + setup: + description: checkout code, restore cache, install dependencies, save cache + steps: + - checkout + - browser-tools/install-chrome + - restore_cache: + keys: + - bundler-dependencies-{{ checksum "Gemfile.lock" }} + - bundler-dependencies- + - run: + name: Install apt and vips buildpack dependencies + command: | + cd spec/dummy/ + xargs -a Aptfile sudo apt-get install + sudo apt-get install libvips + sudo apt-get install file + - run: + name: Install bundle dependencies + command: | + BUNDLER_VERSION=$(cat Gemfile.lock | tail -1 | tr -d " ") + gem install bundler:$BUNDLER_VERSION + bundle _$(echo $BUNDLER_VERSION)_ install + - save_cache: + key: bundler-dependencies-{{ checksum "Gemfile.lock" }} + paths: + - vendor/bundle + - run: + name: Setup database + command: (cd spec/dummy && bundle exec rake db:setup) + - run: + name: Install node and yarn + command: | + curl -sL https://deb.nodesource.com/setup_$(cat .node-version).x | sudo -E bash - + sudo apt-get install -y nodejs + curl -o- -sL https://yarnpkg.com/install.sh | bash + sudo ln -s $HOME/.yarn/bin/yarn /usr/local/bin/yarn + - run: + name: Prepare Assets + command: | + bundle exec rake prepare_assets + (cd spec/dummy && bundle exec rake webpacker:compile) + +jobs: + lint: + executor: main-executor + steps: + - setup + - run: + name: Install reviewdog + command: | + curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh | sh -s -- -b ./bin + - run: + name: Get files to lint + command: git diff origin/master --name-only --diff-filter=d > tmp/files_to_lint + - run: + name: Run rubocop + shell: /bin/bash + command: | + cat tmp/files_to_lint | grep -E '.+\.(rb)$' | xargs bundle exec rubocop --force-exclusion \ + | ./bin/reviewdog -reporter=github-pr-review -f=rubocop + test: + parameters: + ruby-version: + description: "Ruby version" + default: "2.7" + type: string + executor: + name: main-executor + ruby-version: <> + steps: + - setup + - run: + name: Run Utils Tests + command: | + RSPEC_JUNIT_ARGS="-r rspec_junit_formatter -f RspecJunitFormatter -o test_results/utils-rspec.xml" + RSPEC_FORMAT_ARGS="-f progress --no-color -p 10" + bundle exec rspec ./spec/lib $RSPEC_FORMAT_ARGS $RSPEC_JUNIT_ARGS + - run: + name: Run Tests + command: | + RSPEC_JUNIT_ARGS="-r rspec_junit_formatter -f RspecJunitFormatter -o test_results/webpack-rspec.xml" + RSPEC_FORMAT_ARGS="-f progress --no-color -p 10" + bundle exec rspec ./spec/features $RSPEC_FORMAT_ARGS $RSPEC_JUNIT_ARGS + - store_test_results: + path: test_results + + deploy: + executor: main-executor + steps: + - setup + - run: + name: Setup rubygems + command: bash .circleci/setup-rubygems.sh + - run: + name: Publish to rubygems + command: | + gem build activeadmin_addons.gemspec + version_tag=$(git describe --tags) + gem push activeadmin_addons-${version_tag#v}.gem + - run: + name: Publish to npm + command: | + npm set //registry.npmjs.org/:_authToken=$NPM_TOKEN + npm publish + +workflows: + version: 2 + test_and_lint: + jobs: + - lint: + context: org-global + - test: + matrix: + parameters: + ruby-version: ["3.0", "3.1", "3.2"] + - deploy: + context: org-global + filters: + tags: + only: /.*/ + branches: + ignore: /.*/ diff --git a/.circleci/setup-rubygems.sh b/.circleci/setup-rubygems.sh new file mode 100755 index 00000000..252b4f89 --- /dev/null +++ b/.circleci/setup-rubygems.sh @@ -0,0 +1,3 @@ +mkdir ~/.gem +echo -e "---\r\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials +chmod 0600 /home/circleci/.gem/credentials diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 48b8bf90..00000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -vendor/ diff --git a/.eslintrc.json b/.eslintrc.json index 7b926bd6..f1250395 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,11 +1,12 @@ { "env": { - "es6": false, "browser": true, - "jquery": true + "es2021": true, + "node": true }, "parserOptions": { - "ecmaVersion": 5 + "ecmaVersion": 2020, + "sourceType": "module" }, "plugins": ["import"], "settings": { @@ -15,18 +16,12 @@ } } }, - "globals": { - "angular": 1, - "$": 1, - "_": 1, - "ActiveadminAddons": 1 - }, "rules": { "accessor-pairs": 0, "array-callback-return": 2, "block-scoped-var": 2, "complexity": [1, { - "max": 20 + "max": 6 }], "consistent-return": 2, "curly": [2, "multi-line"], @@ -37,7 +32,7 @@ "allowKeywords": true }], "dot-location": [2, "property"], - "eqeqeq": [0], + "eqeqeq": [2], "guard-for-in": 2, "no-alert": 1, "no-case-declarations": 2, @@ -64,16 +59,18 @@ }], "no-lone-blocks": 2, "no-loop-func": 2, - "no-magic-numbers": [0], + "no-magic-numbers": [2, { + "ignore": [0, 1, -1] + }], "no-multi-spaces": 2, - "no-multi-str": 0, + "no-multi-str": 2, "no-native-reassign": 2, "no-new": 2, "no-new-func": 2, "no-new-wrappers": 2, "no-octal": 2, "no-octal-escape": 2, - "no-param-reassign": [0, { + "no-param-reassign": [2, { "props": false }], "no-proto": 2, @@ -97,13 +94,13 @@ }], "no-with": 2, "radix": 2, - "vars-on-top": 0, + "vars-on-top": 2, "wrap-iife": [2, "any"], "yoda": 2, "comma-dangle": [2, "always-multiline"], "no-cond-assign": [2, "always"], - "no-console": 0, - "no-debugger": 0, + "no-console": 1, + "no-debugger": 1, "no-constant-condition": 2, "no-control-regex": 2, "no-dupe-args": 2, @@ -148,24 +145,33 @@ "no-confusing-arrow": [2, { "allowParens": true }], - "no-const-assign": 0, - "no-dupe-class-members": 0, - "no-duplicate-imports": 0, - "no-new-symbol": 0, + "no-const-assign": 2, + "no-dupe-class-members": 2, + "no-duplicate-imports": 2, + "no-new-symbol": 2, "no-restricted-imports": 0, "no-this-before-super": 0, "no-useless-computed-key": 2, "no-useless-constructor": 2, - "no-var": 0, - "object-shorthand": [2, "never"], - "prefer-arrow-callback": 0, - "prefer-const": 0, + "no-var": 2, + "object-shorthand": [2, "always", { + "ignoreConstructors": false, + "avoidQuotes": true + }], + "prefer-arrow-callback": [2, { + "allowNamedFunctions": false, + "allowUnboundThis": true + }], + "prefer-const": [2, { + "destructuring": "any", + "ignoreReadBeforeAssign": true + }], "prefer-reflect": 0, "no-caller": 2, - "prefer-rest-params": 0, - "prefer-spread": 0, - "prefer-template": 0, - "require-yield": 0, + "prefer-rest-params": 2, + "prefer-spread": 2, + "prefer-template": 2, + "require-yield": 2, "sort-imports": 0, "template-curly-spacing": 2, "yield-star-spacing": [2, "before"], @@ -194,7 +200,7 @@ "newlines-between": "never" }], "import/newline-after-import": 2, - "import/prefer-default-export": 2, + "import/no-default-export": 2, "array-bracket-spacing": [2, "never"], "block-spacing": [2, "always"], "brace-style": [2, "1tbs", { @@ -239,19 +245,21 @@ "linebreak-style": [2, "unix"], "lines-around-comment": 0, "max-depth": [2, 4], - "max-len": [0], + "max-len": [2, 120, { + "ignorePattern": "^\\s.+class=|\\s.d=\"" + }], "max-nested-callbacks": [2, 4], "max-params": [1, 4], - "max-statements": [0, 10], + "max-statements": [1, 10], "max-statements-per-line": [2, { "max": 1 }], - "new-cap": [0, { + "new-cap": [2, { "newIsCap": true }], "new-parens": 2, "newline-after-var": 0, - "newline-before-return": 0, + "newline-before-return": 2, "newline-per-chained-call": [2, { "ignoreChainWithDepth": 3 }], @@ -270,10 +278,10 @@ "no-new-object": 2, "no-plusplus": 0, "no-restricted-syntax": [2, "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"], - "no-spaced-func": 2, + "no-spaced-func": 0, "no-ternary": 0, "no-trailing-spaces": 2, - "no-underscore-dangle": [0], + "no-underscore-dangle": [1], "no-unneeded-ternary": [2, { "defaultAssignment": false }], @@ -304,14 +312,13 @@ "sort-vars": 0, "space-before-blocks": 2, "space-before-function-paren": [2, { - "anonymous": "never", - "named": "never", - "asyncArrow": "never" + "anonymous": "always", + "named": "never" }], "space-in-parens": [2, "never"], "space-infix-ops": 2, "space-unary-ops": 0, - "spaced-comment": [0], + "spaced-comment": [2], "wrap-regex": 0, "init-declarations": 0, "no-catch-shadow": 2, @@ -325,7 +332,6 @@ "no-unused-vars": [2, { "vars": "local", "args": "after-used" - }], - "no-use-before-define": 0 + }] } } diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..482ddd9c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,29 @@ +--- +name: Bug report +about: Report a bug that could be fixed +title: "[BUG]" +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +Include either code to reproduce, or a link to a repo with the problem. + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..284e0a1a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,17 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: "[FR]" +labels: enhancement +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..a7ce7ac7 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,27 @@ +### Motivation / Background + + + +This Pull Request has been created because [REPLACE ME] + +### Detail + +This Pull Request changes [REPLACE ME] + +### Additional information + + + +### Checklist + +Before submitting the PR make sure the following are checked: + +* [ ] This Pull Request is related to one change. Changes that are unrelated should be opened in separate PRs. +* [ ] Commit message has a concise description of what changed and why. +* [ ] Tests are added or updated if you fix a bug or add a feature. +* [ ] Documentation has been added or updated if you add a feature or modify an existing one. +* [ ] CHANGELOG files are updated for the changed libraries if there is a behavior change or additional feature (under the "Unreleased" heading if this is not a version change). +* [ ] My changes don't introduce any linter rule violations. diff --git a/.gitignore b/.gitignore index fa7f2dc2..90d7283f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,12 @@ spec/dummy/log/*.log spec/dummy/tmp/ spec/dummy/.sass-cache spec/dummy/public/system +spec/dummy/public/packs-test +spec/dummy/public/packs .gem .gemtags .tags .tags_sorted_by_file +vendor/bundle +node_modules +src diff --git a/.hound.yml b/.hound.yml index cdc62fde..08f544fb 100644 --- a/.hound.yml +++ b/.hound.yml @@ -1,11 +1,8 @@ --- ruby: enabled: true - config_file: .rubocop.yml + config_file: ".rubocop.yml" eslint: enabled: true - config_file: .eslintrc.json - ignore_file: .eslintignore -stylelint: - enabled: true - config_file: .stylelintrc.json + config_file: ".eslintrc.json" + ignore_file: ".eslintignore" diff --git a/.node-version b/.node-version new file mode 100644 index 00000000..b6a7d89c --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +16 diff --git a/.pryrc b/.pryrc new file mode 100644 index 00000000..705f61f6 --- /dev/null +++ b/.pryrc @@ -0,0 +1,6 @@ +if defined?(PryByebug) + Pry.commands.alias_command 'c', 'continue' + Pry.commands.alias_command 's', 'step' + Pry.commands.alias_command 'n', 'next' + Pry.commands.alias_command 'f', 'finish' +end diff --git a/.rspec b/.rspec index 9e4691cd..f862abde 100644 --- a/.rspec +++ b/.rspec @@ -1,3 +1,3 @@ +--format=doc --require spec_helper --color ---format=doc \ No newline at end of file diff --git a/.rubocop.yml b/.rubocop.yml index a5e6f4fa..2902e1b2 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,35 +1,20 @@ +require: + - rubocop-rspec + - rubocop-rails + - rubocop-performance AllCops: - Include: - - "**/*.rake" - - "**/Gemfile" - - "**/Rakefile" Exclude: - "vendor/**/*" - - "db/**/*" + - "spec/dummy/db/schema.rb" + - "db/schema.rb" - "bin/**/*" - DisplayCopNames: false - StyleGuideCopsOnly: false - TargetRubyVersion: 2.3 -Layout/AccessModifierIndentation: - Description: Check indentation of private/protected visibility modifiers. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#indent-public-private-protected + - "spec/dummy/db/schema.rb" + TargetRubyVersion: 2.7 +Rails: Enabled: true - EnforcedStyle: indent - SupportedStyles: - - outdent - - indent -Layout/AlignHash: - Description: Align the elements of a hash literal if they span more than one line. +Performance: Enabled: true - EnforcedHashRocketStyle: key - EnforcedColonStyle: key - EnforcedLastArgumentHashStyle: always_inspect - SupportedLastArgumentHashStyles: - - always_inspect - - always_ignore - - ignore_implicit - - ignore_explicit -Layout/AlignParameters: +Layout/ParameterAlignment: Description: Align the parameters of a method call if they span more than one line. StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-double-indent Enabled: true @@ -37,41 +22,8 @@ Layout/AlignParameters: SupportedStyles: - with_first_parameter - with_fixed_indentation -Style/AndOr: - Description: Use &&/|| instead of and/or. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-and-or-or - Enabled: true - EnforcedStyle: always - SupportedStyles: - - always - - conditionals -Style/BarePercentLiterals: - Description: Checks if usage of %() or %Q() matches configuration. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#percent-q-shorthand - Enabled: true - EnforcedStyle: bare_percent - SupportedStyles: - - percent_q - - bare_percent Metrics/BlockLength: Enabled: false -Style/BracesAroundHashParameters: - Description: Enforce braces style around hash parameters. - Enabled: true - EnforcedStyle: no_braces - SupportedStyles: - - braces - - no_braces - - context_dependent -Layout/CaseIndentation: - Description: Indentation of when in a case/when/[else/]end. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#indent-when-to-case - Enabled: true - EnforcedStyle: case - SupportedStyles: - - case - - end - IndentOneStep: false Style/ClassAndModuleChildren: Description: Checks style of children classes and modules. Enabled: false @@ -79,24 +31,6 @@ Style/ClassAndModuleChildren: SupportedStyles: - nested - compact -Style/ClassCheck: - Description: Enforces consistent use of `Object#is_a?` or `Object#kind_of?`. - Enabled: true - EnforcedStyle: is_a? - SupportedStyles: - - is_a? - - kind_of? -Style/CollectionMethods: - Description: Preferred collection methods. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#map-find-select-reduce-size - Enabled: false - PreferredMethods: - collect: map - collect!: map! - inject: reduce - detect: find - find_all: select - find: detect Style/CommentAnnotation: Description: Checks formatting of special comments (TODO, FIXME, OPTIMIZE, HACK, REVIEW). @@ -108,69 +42,11 @@ Style/CommentAnnotation: - OPTIMIZE - HACK - REVIEW -Layout/DotPosition: - Description: Checks the position of the dot in multi-line method calls. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#consistent-multi-line-chains - Enabled: true - EnforcedStyle: leading - SupportedStyles: - - leading - - trailing -Layout/EmptyLineBetweenDefs: - Description: Use empty lines between defs. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#empty-lines-between-methods - Enabled: true - AllowAdjacentOneLineDefs: false -Layout/EmptyLinesAroundBlockBody: - Description: Keeps track of empty lines around block bodies. - Enabled: true - EnforcedStyle: no_empty_lines - SupportedStyles: - - empty_lines - - no_empty_lines -Layout/EmptyLinesAroundClassBody: - Description: Keeps track of empty lines around class bodies. - Enabled: true - EnforcedStyle: no_empty_lines - SupportedStyles: - - empty_lines - - no_empty_lines -Layout/EmptyLinesAroundModuleBody: - Description: Keeps track of empty lines around module bodies. - Enabled: true - EnforcedStyle: no_empty_lines - SupportedStyles: - - empty_lines - - no_empty_lines -Style/Encoding: - Description: Use UTF-8 as the source file encoding. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#utf-8 - Enabled: false - EnforcedStyle: always - SupportedStyles: - - when_needed - - always -Style/FileName: +Naming/FileName: Description: Use snake_case for source file names. StyleGuide: https://github.com/bbatsov/ruby-style-guide#snake-case-files Enabled: false Exclude: [] -Layout/FirstParameterIndentation: - Description: Checks the indentation of the first parameter in a method call. - Enabled: true - EnforcedStyle: special_for_inner_method_call_in_parentheses - SupportedStyles: - - consistent - - special_for_inner_method_call - - special_for_inner_method_call_in_parentheses -Style/For: - Description: Checks use of for or each in multiline loops. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-for-loops - Enabled: true - EnforcedStyle: each - SupportedStyles: - - for - - each Style/FormatString: Description: Enforce the use of Kernel#sprintf, Kernel#format or String#%. StyleGuide: https://github.com/bbatsov/ruby-style-guide#sprintf @@ -192,32 +68,10 @@ Style/GuardClause: StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals Enabled: false MinBodyLength: 1 -Style/HashSyntax: - Description: 'Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax { :a => - 1, :b => 2 }.' - StyleGuide: https://github.com/bbatsov/ruby-style-guide#hash-literals - Enabled: true - EnforcedStyle: ruby19 - SupportedStyles: - - ruby19 - - hash_rockets Style/IfUnlessModifier: Description: Favor modifier if/unless usage when you have a single-line body. StyleGuide: https://github.com/bbatsov/ruby-style-guide#if-as-a-modifier Enabled: false - MaxLineLength: 80 -Layout/IndentationWidth: - Description: Use 2 spaces for indentation. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#spaces-indentation - Enabled: true - Width: 2 -Layout/IndentHash: - Description: Checks the indentation of the first key in a hash literal. - Enabled: true - EnforcedStyle: special_inside_parentheses - SupportedStyles: - - special_inside_parentheses - - consistent Style/LambdaCall: Description: Use lambda.call(...) instead of lambda.(...). StyleGuide: https://github.com/bbatsov/ruby-style-guide#proc-call @@ -235,27 +89,6 @@ Style/Next: SupportedStyles: - skip_modifier_ifs - always -Style/NonNilCheck: - Description: Checks for redundant nil checks. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-non-nil-checks - Enabled: true - IncludeSemanticChanges: false -Style/MethodDefParentheses: - Description: Checks if the method definitions have or don't have parentheses. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#method-parens - Enabled: true - EnforcedStyle: require_parentheses - SupportedStyles: - - require_parentheses - - require_no_parentheses -Style/MethodName: - Description: Use the configured style when naming methods. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#snake-case-symbols-methods-vars - Enabled: true - EnforcedStyle: snake_case - SupportedStyles: - - snake_case - - camelCase Layout/MultilineOperationIndentation: Description: Checks indentation of binary operations that span more than one line. Enabled: true @@ -271,11 +104,6 @@ Style/NumericLiterals: StyleGuide: https://github.com/bbatsov/ruby-style-guide#underscores-in-numerics Enabled: false MinDigits: 5 -Style/ParenthesesAroundCondition: - Description: Don't use parentheses around the condition of an if/unless/while. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-parens-if - Enabled: true - AllowSafeAssignment: true Style/PercentLiteralDelimiters: Description: Use `%`-literal delimiters consistently StyleGuide: https://github.com/bbatsov/ruby-style-guide#percent-literal-braces @@ -290,14 +118,7 @@ Style/PercentLiteralDelimiters: "%w": "()" "%W": "()" "%x": "()" -Style/PercentQLiterals: - Description: Checks if uses of %Q/%q match the configured preference. - Enabled: true - EnforcedStyle: lower_case_q - SupportedStyles: - - lower_case_q - - upper_case_q -Style/PredicateName: +Naming/PredicateName: Description: Check the names of predicate methods. StyleGuide: https://github.com/bbatsov/ruby-style-guide#bool-methods-qmark Enabled: true @@ -305,7 +126,7 @@ Style/PredicateName: - is_ - has_ - have_ - NamePrefixBlacklist: + ForbiddenPrefixes: - is_ Style/RaiseArgs: Description: Checks the arguments passed to raise/fail. @@ -315,16 +136,6 @@ Style/RaiseArgs: SupportedStyles: - compact - exploded -Style/RedundantReturn: - Description: Don't use return where it's not required. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-explicit-return - Enabled: true - AllowMultipleReturnValues: false -Style/Semicolon: - Description: Don't use semicolons to terminate expressions. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-semicolon - Enabled: true - AllowAsExpressionSeparator: false Style/SignalException: Description: Checks for proper usage of fail and raise. StyleGuide: https://github.com/bbatsov/ruby-style-guide#fail-method @@ -334,17 +145,6 @@ Style/SignalException: - only_raise - only_fail - semantic -Style/SingleLineBlockParams: - Description: Enforces the names of some block params. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#reduce-blocks - Enabled: false - Methods: - - reduce: - - a - - e - - inject: - - a - - e Style/SingleLineMethods: Description: Avoid single-line methods. StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-single-line-methods @@ -358,77 +158,17 @@ Style/StringLiterals: SupportedStyles: - single_quotes - double_quotes -Style/StringLiteralsInInterpolation: - Description: Checks if uses of quotes inside expressions in interpolated strings - match the configured preference. - Enabled: true - EnforcedStyle: single_quotes - SupportedStyles: - - single_quotes - - double_quotes -Layout/SpaceAroundBlockParameters: - Description: Checks the spacing inside and after block parameters pipes. - Enabled: true - EnforcedStyleInsidePipes: no_space - SupportedStylesInsidePipes: - - space - - no_space -Layout/SpaceAroundEqualsInParameterDefault: - Description: Checks that the equals signs in parameter default assignments have - or don't have surrounding space depending on configuration. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#spaces-around-equals - Enabled: true - EnforcedStyle: space - SupportedStyles: - - space - - no_space -Layout/SpaceBeforeBlockBraces: - Description: Checks that the left block brace has or doesn't have space before it. - Enabled: true - EnforcedStyle: space - SupportedStyles: - - space - - no_space -Layout/SpaceInsideBlockBraces: - Description: Checks that block braces have or don't have surrounding space. For - blocks taking parameters, checks that the left brace has or doesn't have trailing - space. - Enabled: true - EnforcedStyle: space - SupportedStyles: - - space - - no_space - EnforcedStyleForEmptyBraces: no_space - SpaceBeforeBlockParameters: true -Layout/SpaceInsideHashLiteralBraces: - Description: Use spaces inside hash literal braces - or don't. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#spaces-operators - Enabled: true - EnforcedStyle: space - EnforcedStyleForEmptyBraces: no_space - SupportedStyles: - - space - - no_space -Style/SymbolProc: - Description: Use symbols as procs instead of blocks when possible. - Enabled: true - IgnoredMethods: - - respond_to -Layout/TrailingBlankLines: - Description: Checks trailing blank lines and final newline. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#newline-eof - Enabled: true - EnforcedStyle: final_newline - SupportedStyles: - - final_newline - - final_blank_line Style/TrailingCommaInArguments: Description: Checks for trailing comma in argument lists. StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas Enabled: true -Style/TrailingCommaInLiteral: +Style/TrailingCommaInArrayLiteral: Description: Checks for trailing comma in array and hash literals. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas + StyleGuide: https://github.com/rubocop-hq/ruby-style-guide#no-trailing-array-commas + Enabled: true +Style/TrailingCommaInHashLiteral: + Description: Checks for trailing comma in array and hash literals. + StyleGuide: https://github.com/rubocop-hq/ruby-style-guide#no-trailing-array-commas Enabled: true Style/TrivialAccessors: Description: Prefer attr_* methods to trivial readers/writers. @@ -437,7 +177,7 @@ Style/TrivialAccessors: ExactNameMatch: false AllowPredicates: false AllowDSLWriters: false - Whitelist: + AllowedMethods: - to_ary - to_a - to_c @@ -455,25 +195,27 @@ Style/TrivialAccessors: - to_str - to_s - to_sym -Style/VariableName: - Description: Use the configured style when naming variables. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#snake-case-symbols-methods-vars - Enabled: true - EnforcedStyle: snake_case - SupportedStyles: - - snake_case - - camelCase Style/WhileUntilModifier: Description: Favor modifier while/until usage when you have a single-line body. StyleGuide: https://github.com/bbatsov/ruby-style-guide#while-as-a-modifier Enabled: false - MaxLineLength: 80 Style/WordArray: Description: Use %w or %W for arrays of words. StyleGuide: https://github.com/bbatsov/ruby-style-guide#percent-w Enabled: false MinSize: 0 WordRegex: !ruby/regexp /\A[\p{Word}]+\z/ +Style/ExponentialNotation: + Enabled: true +Style/HashEachMethods: + Description: Use Hash#each_key and Hash#each_value. + Enabled: true +Style/HashTransformKeys: + Description: Prefer `transform_keys` over `each_with_object` and `map`. + Enabled: true +Style/HashTransformValues: + Description: Prefer `transform_values` over `each_with_object` and `map`. + Enabled: true Metrics/AbcSize: Description: A calculated magnitude based on number of assignments, branches, and conditions. @@ -489,20 +231,6 @@ Metrics/ClassLength: Enabled: false CountComments: false Max: 100 -Metrics/CyclomaticComplexity: - Description: A complexity metric that is strongly correlated to the number of test - cases needed to validate a method. - Enabled: true - Max: 6 -Metrics/LineLength: - Description: Limit lines to 100 characters. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#100-character-limits - Enabled: true - Max: 100 - AllowURI: true - URISchemes: - - http - - https Metrics/MethodLength: Description: Avoid methods longer than 15 lines of code. StyleGuide: https://github.com/bbatsov/ruby-style-guide#short-methods @@ -517,74 +245,37 @@ Metrics/ParameterLists: Enabled: false Max: 5 CountKeywordArgs: true -Metrics/PerceivedComplexity: - Description: A complexity metric geared towards measuring complexity for a human - reader. - Enabled: true - Max: 7 Lint/AssignmentInCondition: Description: Don't use assignment in conditions. StyleGuide: https://github.com/bbatsov/ruby-style-guide#safe-assignment-in-condition Enabled: false AllowSafeAssignment: true -Lint/EndAlignment: +Layout/LineLength: + Description: Limit lines to 100 characters. + StyleGuide: https://github.com/bbatsov/ruby-style-guide#100-character-limits + Enabled: true + Max: 100 + AllowURI: true + URISchemes: + - http + - https +Layout/EndAlignment: Description: Align ends correctly. Enabled: true EnforcedStyleAlignWith: keyword SupportedStylesAlignWith: - keyword - variable -Lint/DefEndAlignment: +Layout/DefEndAlignment: Description: Align ends corresponding to defs correctly. Enabled: true EnforcedStyleAlignWith: start_of_line SupportedStylesAlignWith: - start_of_line - def -Rails/ActionFilter: - Description: Enforces consistent use of action filter methods. +Layout/SpaceAroundMethodCallOperator: + Description: Checks method call operators to not have spaces around them. Enabled: true - EnforcedStyle: action - SupportedStyles: - - action - - filter - Include: - - app/controllers/**/*.rb -Rails/HasAndBelongsToMany: - Description: Prefer has_many :through to has_and_belongs_to_many. - Enabled: true - Include: - - app/models/**/*.rb -Rails/Output: - Description: Checks for calls to puts, print, etc. - Enabled: true - Include: - - app/**/*.rb - - config/**/*.rb - - db/**/*.rb - - lib/**/*.rb -Rails/ReadWriteAttribute: - Description: Checks for read_attribute(:attr) and write_attribute(:attr, val). - Enabled: true - Include: - - app/models/**/*.rb -Rails/ScopeArgs: - Description: Checks the arguments of ActiveRecord scopes. - Enabled: true - Include: - - app/models/**/*.rb -Rails/Validation: - Description: Use validates :attribute, hash of validations. - Enabled: true - Include: - - app/models/**/*.rb -Style/InlineComment: - Description: Avoid inline comments. - Enabled: false -Style/MethodCalledOnDoEndBlock: - Description: Avoid chaining a method call on a do...end block. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#single-line-blocks - Enabled: false Style/SymbolArray: Description: Use %i or %I for arrays of symbols. StyleGuide: https://github.com/bbatsov/ruby-style-guide#percent-i @@ -592,17 +283,66 @@ Style/SymbolArray: Layout/ExtraSpacing: Description: Do not use unnecessary spacing. Enabled: false -Style/AccessorMethodName: +Layout/ClassStructure: + Enabled: true + Categories: + validation: + - validate + - validates + association: + - belongs_to + - has_one + - has_many + - has_and_belongs_to_many + attribute_macros: + - attribute + - attr_accessor + - attr_reader + - attr_writer + callbacks: + - before_validation + - after_validation + - before_save + - before_create + - after_create + - after_save + - after_commit + - after_create_commit + other_macros: + - devise + - acts_as_token_authenticatable + - accepts_nested_attributes_for + - humanize + - monetize + scope: + - scope + - pg_search_scope + ExpectedOrder: + - module_inclusion + - constants + - public_attribute_macros + - association + - validation + - enum + - aasm + - scope + - public_delegate + - other_macros + - class_methods + - initializer + - public_methods + - protected_attribute_macros + - protected_methods + - private_attribute_macros + - private_delegate + - private_methods +Naming/AccessorMethodName: Description: Check the naming of accessor methods for get_/set_. Enabled: false Style/Alias: Description: Use alias_method instead of alias. StyleGuide: https://github.com/bbatsov/ruby-style-guide#alias-method Enabled: false -Layout/AlignArray: - Description: Align the elements of an array literal if they span more than one line. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#align-multiline-arrays - Enabled: true Style/ArrayJoin: Description: Use Array#join instead of Array#*. StyleGuide: https://github.com/bbatsov/ruby-style-guide#array-join @@ -611,7 +351,7 @@ Style/AsciiComments: Description: Use only ascii symbols in comments. StyleGuide: https://github.com/bbatsov/ruby-style-guide#english-comments Enabled: false -Style/AsciiIdentifiers: +Naming/AsciiIdentifiers: Description: Use only ascii symbols in identifiers. StyleGuide: https://github.com/bbatsov/ruby-style-guide#english-identifiers Enabled: false @@ -619,17 +359,10 @@ Style/Attr: Description: Checks for uses of Module#attr. StyleGuide: https://github.com/bbatsov/ruby-style-guide#attr Enabled: false -Style/BeginBlock: - Description: Avoid the use of BEGIN blocks. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-BEGIN-blocks - Enabled: true Style/BlockComments: Description: Do not use block comments. StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-block-comments Enabled: false -Layout/BlockEndNewline: - Description: Put end statement of multiline block on its own line. - Enabled: true Style/CaseEquality: Description: Avoid explicit use of the case equality operator(===). StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-case-equality @@ -638,14 +371,6 @@ Style/CharacterLiteral: Description: Checks for uses of character literals. StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-character-literals Enabled: false -Style/ClassAndModuleCamelCase: - Description: Use CamelCase for classes and modules. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#camelcase-classes - Enabled: true -Style/ClassMethods: - Description: Use self when defining module/class methods. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#def-self-singletons - Enabled: true Style/ClassVars: Description: Avoid the use of class variables. StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-class-vars @@ -654,17 +379,6 @@ Style/ColonMethodCall: Description: 'Do not use :: for method call.' StyleGuide: https://github.com/bbatsov/ruby-style-guide#double-colons Enabled: false -Layout/CommentIndentation: - Description: Indentation of comments. - Enabled: true -Style/ConstantName: - Description: Constants should use SCREAMING_SNAKE_CASE. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#screaming-snake-case - Enabled: true -Style/DefWithParentheses: - Description: Use def with parentheses when there are arguments. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#method-parens - Enabled: true Style/PreferredHashMethods: Description: Checks for use of deprecated Hash methods. StyleGuide: https://github.com/bbatsov/ruby-style-guide#hash-key @@ -679,29 +393,13 @@ Style/DoubleNegation: Style/EachWithObject: Description: Prefer `each_with_object` over `inject` or `reduce`. Enabled: false -Layout/ElseAlignment: - Description: Align elses and elsifs correctly. - Enabled: true Style/EmptyElse: Description: Avoid empty else-clauses. Enabled: true -Layout/EmptyLines: - Description: Don't use several empty lines in a row. - Enabled: true -Layout/EmptyLinesAroundAccessModifier: - Description: Keep blank lines around access modifiers. - Enabled: true -Layout/EmptyLinesAroundMethodBody: - Description: Keeps track of empty lines around method bodies. - Enabled: true Style/EmptyLiteral: Description: Prefer literals to Array.new/Hash.new/String.new. StyleGuide: https://github.com/bbatsov/ruby-style-guide#literal-array-hash Enabled: false -Style/EndBlock: - Description: Avoid the use of END blocks. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-END-blocks - Enabled: true Layout/EndOfLine: Description: Use Unix-style line endings. StyleGuide: https://github.com/bbatsov/ruby-style-guide#crlf @@ -710,7 +408,7 @@ Style/EvenOdd: Description: Favor the use of Fixnum#even? && Fixnum#odd? StyleGuide: https://github.com/bbatsov/ruby-style-guide#predicate-methods Enabled: false -Style/FlipFlop: +Lint/FlipFlop: Description: Checks for flip flops StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-flip-flops Enabled: false @@ -718,32 +416,14 @@ Style/IfWithSemicolon: Description: Do not use if x; .... Use the ternary operator instead. StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-semicolon-ifs Enabled: false -Layout/IndentationConsistency: - Description: Keep indentation straight. - Enabled: true -Layout/IndentArray: - Description: Checks the indentation of the first element in an array literal. - Enabled: true -Style/InfiniteLoop: - Description: Use Kernel#loop for infinite loops. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#infinite-loop - Enabled: true Style/Lambda: Description: Use the new lambda literal syntax for single-line blocks. StyleGuide: https://github.com/bbatsov/ruby-style-guide#lambda-multi-line Enabled: false -Layout/LeadingCommentSpace: - Description: Comments should start with a space. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#hash-space - Enabled: true Style/LineEndConcatenation: Description: Use \ instead of + or << to concatenate two string literals at line end. Enabled: false -Style/MethodCallWithoutArgsParentheses: - Description: Do not use parentheses for method calls with no arguments. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-args-no-parens - Enabled: true Style/ModuleFunction: Description: Checks for usage of `extend self` in modules. StyleGuide: https://github.com/bbatsov/ruby-style-guide#module-function @@ -755,14 +435,6 @@ Style/MultilineBlockChain: Layout/MultilineBlockLayout: Description: Ensures newlines after multiline block do statements. Enabled: false -Style/MultilineIfThen: - Description: Do not use then for multi-line if/unless. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-then - Enabled: true -Style/MultilineTernaryOperator: - Description: 'Avoid multi-line ?: (the ternary operator); use if/unless instead.' - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-multiline-ternary - Enabled: true Style/NegatedIf: Description: Favor unless over if for negative conditions (or control flow or). StyleGuide: https://github.com/bbatsov/ruby-style-guide#unless-for-negatives @@ -771,23 +443,15 @@ Style/NegatedWhile: Description: Favor until over while for negative conditions. StyleGuide: https://github.com/bbatsov/ruby-style-guide#until-for-negatives Enabled: false -Style/NestedTernaryOperator: - Description: Use one expression per branch in a ternary operator. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-nested-ternary - Enabled: true Style/NilComparison: Description: Prefer x.nil? to x == nil. StyleGuide: https://github.com/bbatsov/ruby-style-guide#predicate-methods Enabled: false -Style/Not: - Description: Use ! instead of not. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#bang-not-not - Enabled: true Style/OneLineConditional: Description: Favor the ternary operator(?:) over if/then/else/end constructs. StyleGuide: https://github.com/bbatsov/ruby-style-guide#ternary-operator Enabled: false -Style/OpMethod: +Naming/BinaryOperatorParameterName: Description: When defining binary operators, name the argument other. StyleGuide: https://github.com/bbatsov/ruby-style-guide#other-arg Enabled: false @@ -799,107 +463,27 @@ Style/Proc: Description: Use proc instead of Proc.new. StyleGuide: https://github.com/bbatsov/ruby-style-guide#proc Enabled: false -Style/RedundantBegin: - Description: Don't use begin blocks when they are not needed. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#begin-implicit - Enabled: true -Style/RedundantException: - Description: Checks for an obsolete RuntimeException argument in raise/fail. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-explicit-runtimeerror - Enabled: true -Style/RedundantSelf: - Description: Don't use self where it's not needed. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-self-unless-required - Enabled: true -Style/RescueModifier: - Description: Avoid using rescue in its modifier form. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-rescue-modifiers - Enabled: true Style/SelfAssignment: Description: Checks for places where self-assignment shorthand should have been used. StyleGuide: https://github.com/bbatsov/ruby-style-guide#self-assignment Enabled: false -Layout/SpaceAfterColon: - Description: Use spaces after colons. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#spaces-operators - Enabled: true -Layout/SpaceAfterComma: - Description: Use spaces after commas. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#spaces-operators - Enabled: true -Layout/SpaceAroundKeyword: - Description: Use a space around keywords if appropriate. - Enabled: true -Layout/SpaceAfterMethodName: - Description: Do not put a space between a method name and the opening parenthesis - in a method definition. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#parens-no-spaces - Enabled: true -Layout/SpaceAfterNot: - Description: Tracks redundant space after the ! operator. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-space-bang - Enabled: true -Layout/SpaceAfterSemicolon: - Description: Use spaces after semicolons. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#spaces-operators - Enabled: true -Layout/SpaceBeforeComma: - Description: No spaces before commas. - Enabled: true -Layout/SpaceBeforeComment: - Description: Checks for missing space between code and a comment on the same line. - Enabled: true Layout/SpaceBeforeFirstArg: Description: Put a space between a method name and the first argument in a method call without parentheses. Enabled: true -Layout/SpaceBeforeSemicolon: - Description: No spaces before semicolons. - Enabled: true Layout/SpaceAroundOperators: Description: Use spaces around operators. StyleGuide: https://github.com/bbatsov/ruby-style-guide#spaces-operators Enabled: true -Layout/SpaceInsideBrackets: - Description: No spaces after [ or before ]. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-spaces-braces - Enabled: true Layout/SpaceInsideParens: Description: No spaces after ( or before ). StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-spaces-braces Enabled: true -Layout/SpaceInsideRangeLiteral: - Description: No spaces inside range literals. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-space-inside-range-literals - Enabled: true Style/SpecialGlobalVars: Description: Avoid Perl-style global variables. StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-cryptic-perlisms Enabled: false -Style/StructInheritance: - Description: Checks for inheritance from Struct.new. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-extend-struct-new - Enabled: true -Layout/Tab: - Description: No hard tabs. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#spaces-indentation - Enabled: true -Layout/TrailingWhitespace: - Description: Avoid trailing whitespace. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-trailing-whitespace - Enabled: true -Style/UnlessElse: - Description: Do not use unless with else. Rewrite these with the positive case first. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-else-with-unless - Enabled: true -Style/UnneededCapitalW: - Description: Checks for %W when interpolation is not needed. - Enabled: true -Style/UnneededPercentQ: - Description: Checks for %q/%Q when single quotes or double quotes would do. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#percent-q - Enabled: true Style/VariableInterpolation: Description: Don't interpolate global, instance and class variables directly in strings. @@ -909,10 +493,6 @@ Style/WhenThen: Description: Use when x then ... for one-line cases. StyleGuide: https://github.com/bbatsov/ruby-style-guide#one-line-cases Enabled: false -Style/WhileUntilDo: - Description: Checks for redundant do after while or until. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-multiline-while-do - Enabled: true Lint/AmbiguousOperator: Description: Checks for ambiguous operators in the first argument of a method invocation without parentheses. @@ -922,51 +502,25 @@ Lint/AmbiguousRegexpLiteral: Description: Checks for ambiguous regexp literals in the first argument of a method invocation without parenthesis. Enabled: false -Lint/BlockAlignment: +Layout/BlockAlignment: Description: Align block ends correctly. Enabled: true -Lint/ConditionPosition: +Layout/ConditionPosition: Description: Checks for condition placed in a confusing position relative to the keyword. StyleGuide: https://github.com/bbatsov/ruby-style-guide#same-line-condition Enabled: false -Lint/Debugger: - Description: Check for debugger calls. - Enabled: true Lint/DeprecatedClassMethods: Description: Check for deprecated class method calls. Enabled: false -Lint/DuplicateMethods: - Description: Check for duplicate methods calls. - Enabled: true Lint/ElseLayout: Description: Check for odd code arrangement in an else block. Enabled: false -Lint/EmptyEnsure: - Description: Checks for empty ensure block. - Enabled: true -Lint/EmptyInterpolation: - Description: Checks for empty string interpolation. - Enabled: true -Lint/EndInMethod: - Description: END blocks should not be placed inside method definitions. - Enabled: true -Lint/EnsureReturn: - Description: Do not use return in an ensure block. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-return-ensure - Enabled: true -Security/Eval: - Description: The use of eval represents a serious security risk. - Enabled: true -Lint/HandleExceptions: +Lint/SuppressedException: Description: Don't suppress exception. StyleGuide: https://github.com/bbatsov/ruby-style-guide#dont-hide-exceptions Enabled: false -Lint/InvalidCharacterLiteral: - Description: Checks for invalid character literals with a non-escaped whitespace - character. - Enabled: false -Lint/LiteralInCondition: +Lint/LiteralAsCondition: Description: Checks of literals used in conditions. Enabled: false Lint/LiteralInInterpolation: @@ -984,55 +538,51 @@ Lint/ParenthesesAsGroupedExpression: Lint/RequireParentheses: Description: Use parentheses in the method call to avoid confusion about precedence. Enabled: false -Lint/RescueException: - Description: Avoid rescuing the Exception class. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-blind-rescues - Enabled: true -Lint/ShadowingOuterLocalVariable: - Description: Do not use the same name as outer local variable for block arguments - or block local variables. - Enabled: true -Lint/StringConversionInInterpolation: - Description: Checks for Object#to_s usage in string interpolation. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-to-s - Enabled: true Lint/UnderscorePrefixedVariableName: Description: Do not use prefix `_` for a variable that is used. Enabled: false -Lint/UnusedBlockArgument: - Description: Checks for unused block arguments. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#underscore-unused-vars - Enabled: true -Lint/UnusedMethodArgument: - Description: Checks for unused method arguments. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#underscore-unused-vars - Enabled: true -Lint/UnreachableCode: - Description: Unreachable code. - Enabled: true -Lint/UselessAccessModifier: - Description: Checks for useless access modifiers. - Enabled: true -Lint/UselessAssignment: - Description: Checks for useless assignment to a local variable. - StyleGuide: https://github.com/bbatsov/ruby-style-guide#underscore-unused-vars - Enabled: true -Lint/UselessComparison: - Description: Checks for comparison of something with itself. - Enabled: true -Lint/UselessElseWithoutRescue: - Description: Checks for useless `else` in `begin..end` without `rescue`. - Enabled: true -Lint/UselessSetterCall: - Description: Checks for useless setter call to a local variable. - Enabled: true Lint/Void: Description: Possible use of operator/literal/variable in void context. Enabled: false -Rails/Delegate: - Description: Prefer delegate method for delegations. - Enabled: false +Lint/RaiseException: + Description: Checks for `raise` or `fail` statements which are raising `Exception` class. + Enabled: true +Lint/StructNewOverride: + Description: Disallow overriding the `Struct` built-in methods via `Struct.new`. + Enabled: true Performance/RedundantBlockCall: Description: Use `yield` instead of `block.call`. Reference: https://github.com/JuanitoFatas/fast-ruby#proccall-vs-yield-code Enabled: false +Style/OptionalBooleanParameter: + Description: 'Use keyword arguments when defining method with boolean argument.' + Enabled: false +Lint/MissingSuper: + Description: >- + This cop checks for the presence of constructors and lifecycle callbacks + without calls to `super`'. + Enabled: false +Style/RedundantFileExtensionInRequire: + Description: >- + Checks for the presence of superfluous `.rb` extension in + the filename provided to `require` and `require_relative`. + Enabled: false +Gemspec/RequiredRubyVersion: + Enabled: false +RSpec/MultipleExpectations: + Max: 5 +RSpec/NestedGroups: + Max: 5 +RSpec/ExampleLength: + Max: 10 +RSpec/LetSetup: + Enabled: false +RSpec/ExpectChange: + Enabled: true + EnforcedStyle: block +RSpec/FilePath: + Enabled: false +RSpec/InstanceVariable: + Enabled: false +RSpec/Focus: + AutoCorrect: false diff --git a/.ruby-version b/.ruby-version index bb576dbd..a3ec5a4b 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.3 +3.2 diff --git a/.stylelintrc.json b/.stylelintrc.json deleted file mode 100644 index 9dca621a..00000000 --- a/.stylelintrc.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "ignoreFiles": [ - "vendor/**/*.scss" - ], - "rules": { - "declaration-bang-space-before": "always", - "declaration-bang-space-after": "never", - "declaration-property-value-blacklist": { - "/^border/": ["none"] - }, - "color-named": "never", - "declaration-block-no-duplicate-properties": true, - "rule-empty-line-before": ["always-multi-line", { - "except": ["after-single-line-comment", "first-nested"] - }], - "block-no-empty": true, - "no-missing-end-of-source-newline": true, - "color-hex-length": "short", - "color-hex-case": "lower", - "color-no-invalid-hex": true, - "declaration-no-important": true, - "indentation": 2, - "number-leading-zero": "never", - "no-duplicate-selectors": true, - "max-nesting-depth": 3, - "selector-pseudo-element-colon-notation": "double", - "selector-no-qualifying-type": [true, { - "ignore": ["attribute", "class", "id"] - }], - "shorthand-property-no-redundant-values": true, - "declaration-block-semicolon-newline-after": "always-multi-line", - "selector-list-comma-newline-after": "always", - "function-comma-space-after": "always-single-line", - "declaration-colon-space-after": "always", - "declaration-colon-space-before": "never", - "block-opening-brace-space-before": "always", - "function-parentheses-space-inside": "never", - "string-quotes": "single", - "declaration-block-trailing-semicolon": "always", - "no-eol-whitespace": true, - "number-no-trailing-zeros": true, - "function-url-quotes": "always", - "property-no-vendor-prefix": true, - "selector-no-vendor-prefix": true, - "media-feature-name-no-vendor-prefix": true, - "at-rule-no-vendor-prefix": true, - "value-no-vendor-prefix": true, - "length-zero-no-unit": true - } -} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a57d4c5f..00000000 --- a/.travis.yml +++ /dev/null @@ -1,26 +0,0 @@ -language: ruby -sudo: false -rvm: - - 2.2.6 - - 2.3.3 - - 2.5.0 -script: - - cd spec/dummy && RAILS_ENV=test bundle exec rake db:create db:migrate - - cd ../.. && bundle exec rspec spec -addons: - chrome: stable -before_install: - - wget http://chromedriver.storage.googleapis.com/2.36/chromedriver_linux64.zip - - unzip chromedriver_linux64.zip - - rm chromedriver_linux64.zip - - sudo mv -f chromedriver /usr/local/bin/ - - sudo chmod +x /usr/local/bin/chromedriver - - google-chrome-stable --headless --no-sandbox -deploy: - provider: rubygems - api_key: - secure: PEMMDcT4SKPdv4xMJmIEpndOGePsV3kDOhUL0vEDjTeyxBrn+iBgHKF9itSYbUmOSTuOaiIVleYmuC6GoAmg4KcZIZvfCA61cGCX1ADU5nwh5FjC/tAEs8eShMR3RFG6wyykb4MdFkE2jVpm/W0pyciLgW2HrM6iYzI6X2iMn9E= - gem: activeadmin_addons - on: - tags: true - repo: platanus/activeadmin_addons diff --git a/CHANGELOG.md b/CHANGELOG.md index 168590b5..b652dd8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,141 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +### Unreleased + +#### Added + +* Add confirm_message to toggle-bool-switch + +### 2.0.0.beta-3 + +#### Added + +* Add Ruby 3.2 support [#474](https://github.com/platanus/activeadmin_addons/pull/474) +* Add ActiveAdmin v3 support [#477](https://github.com/platanus/activeadmin_addons/pull/477) + * Note that changes made should be backwards compatible with ActiveAdmin 2.x, so this is not a breaking change + +### 2.0.0.beta-2 + +#### Breaking changes +* Defines required ruby version to >=2.7.0 [#460](https://github.com/platanus/activeadmin_addons/pull/460) +* Nested and search select now use the name of the association instead of the name of id [#462](https://github.com/platanus/activeadmin_addons/pull/462) +* Tags input now returns an array of strings instead of a string [#469](https://github.com/platanus/activeadmin_addons/pull/469) + +#### Fixes +* Include only items that belong to parent when using collection option in a nested input level [#463](https://github.com/platanus/activeadmin_addons/pull/463) + +### 2.0.0.beta-1 + +Skipped + +### 2.0.0.beta-0 + +#### Breaking changes +* Replaces [Select2](https://select2.org/) with [Slim Select](https://slimselectjs.com/) to make it easier to work with newer bundlers like esbuild [#448](https://github.com/platanus/activeadmin_addons/pull/448) +* Removes support for Paperclip since it has been deprecated. [#450](https://github.com/platanus/activeadmin_addons/pull/450) +* Removes support for enumerize [#452](https://github.com/platanus/activeadmin_addons/pull/452) +* Removes support for the Sprockets installation of ActiveAdmin [#451](https://github.com/platanus/activeadmin_addons/pull/451) + +### 1.10.1 + +* Backport [#477](https://github.com/platanus/activeadmin_addons/pull/477) to have ActiveAdmin v3 compatibility [#479](https://github.com/platanus/activeadmin_addons/pull/479) + +### 1.10.0 + +#### Added + +* Added Shrine support for image row and column [#396](https://github.com/platanus/activeadmin_addons/pull/396) +* Added Markdown row and column [#409](https://github.com/platanus/activeadmin_addons/pull/409) +* Added translation support for Rails built-in enums in select filters and tag column/row [#442](https://github.com/platanus/activeadmin_addons/pull/442) + +### 1.9.0 + +##### Changed + +* Select2: get input AR model from object when possible. It's not possible working with virtual attributes [#369](https://github.com/platanus/activeadmin_addons/pull/369) +##### Fixed + +* Nested select: get association class from reflect_on_association AR method [#369](https://github.com/platanus/activeadmin_addons/pull/369) +* Datepicker options not overriding default options properly [#368](https://github.com/platanus/activeadmin_addons/pull/368) +* Invalid default datepicker type for pure Formtastic forms [#367](https://github.com/platanus/activeadmin_addons/pull/367) +* Tag builder generating wrong path with nested resources. [#383](https://github.com/platanus/activeadmin_addons/pull/383) + +### 1.8.3 + +##### Fixed + +* `tags` option not working with `active_admin_form_for` [#364](https://github.com/platanus/activeadmin_addons/pull/364) +* Changed `DateRangeInput#input_html_options` override based on `input_html_options_for` existence [#366](https://github.com/platanus/activeadmin_addons/pull/366) + +### 1.8.2 + +##### Fixed +* Removes vendor directory from build to reduce gem size + +### 1.8.0 and 1.8.1 + +Versions 1.8.0 and 1.8.1 were yanked by what was described in version 1.8.2. Sorry for the inconvenience. +Related issues: +- https://github.com/platanus/activeadmin_addons/issues/357 +- https://github.com/platanus/activeadmin_addons/issues/362 + +##### Added +* Added date time picker filter [#333](https://github.com/platanus/activeadmin_addons/pull/333) +* Added filters option in nested selects [#301](https://github.com/platanus/activeadmin_addons/pull/301) +* Date range filters and date picker inputs now has `autocomplete: 'off'` by default [#320](https://github.com/platanus/activeadmin_addons/pull/320) +* Added `tags` option to default select2 inputs [#322](https://github.com/platanus/activeadmin_addons/pull/322) +* Added Webpacker compatibility, if ActiveAdmin has been installed using that mode. [#319](https://github.com/platanus/activeadmin_addons/pull/319) + +##### Fixed +* Added CSRF header for interactive select tag [#262](https://github.com/platanus/activeadmin_addons/pull/262) +* Replaced deprecated `chromedriver-helper` gem with `webdrivers` to avoid chromedriver version error [#265](https://github.com/platanus/activeadmin_addons/pull/265) +* Manually install bundler in CI [#286](https://github.com/platanus/activeadmin_addons/pull/286) +* Avoid generating second body element [#302](https://github.com/platanus/activeadmin_addons/pull/302) +* Avoid showing `toggle_bool_column` if update action is disabled [#306](https://github.com/platanus/activeadmin_addons/pull/306) +* Moved `sassc-rails` from dev dependencies to normal dependencies [#294](https://github.com/platanus/activeadmin_addons/pull/294) + +##### Changed +* Updated ruby to 2.7 and rails to 5.2.4.1 [#293](https://github.com/platanus/activeadmin_addons/pull/293) +* Replaced EOL'd sass with sassc [#292](https://github.com/platanus/activeadmin_addons/pull/292) +* Remove unsupported `select2-rails` gem, vendor files directly [#264](https://github.com/platanus/activeadmin_addons/pull/264) and bump select2 to 4.0.13 [#296](https://github.com/platanus/activeadmin_addons/pull/296) +* Updated `require_all` gem to 2.0 [#313](https://github.com/platanus/activeadmin_addons/pull/313) +* Dependabot bumps for devise, rack, loofah +* Release with circle ci instead of travis + +### 1.7.1 + +##### Fixed +* `toggle_bool_column` fails working with decorated objects. + +### 1.7.0 + +##### Added +* Nested select input allows to work with non virtual attributes. + +##### Changed +* Image and attachment builders don't ask for file existence anymore. + +### 1.6.0 + +##### Added +* Include active_material gem. +* Define custom Material style for xdan jQuery DateTimePicker. +* Define custom Material style for toggle_bool. +* Include generator argument theme to be able to install addons with/without material theme. +* Allow customization for active_material, date_picker & toggle_bool + +##### Fixed + +* Use chromedriver-helper gem to avoid "unable to connect to chromedriver". + +### 1.5.0 + +##### Added + +* Allow toggle bool in table_for. +* New buttons for toggle bool. + ### 1.4.0 ##### Added diff --git a/Gemfile b/Gemfile index e3aa8066..37a24ff1 100644 --- a/Gemfile +++ b/Gemfile @@ -12,5 +12,7 @@ gemspec # To use debugger # gem "debugger" -gem "activeadmin", github: "activeadmin" -gem "devise" +gem "activeadmin", '~> 3.0' +gem "mimemagic", github: "mimemagicrb/mimemagic", ref: "01f92d86d15d85cfd0f20dabd025dcbd36a8a60f" + +gem "webpacker", "~> 5.4" diff --git a/Gemfile.lock b/Gemfile.lock index b886cd39..85326cd8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,123 +1,131 @@ GIT - remote: git://github.com/activeadmin/activeadmin.git - revision: f71b375325eb3060d40d1fafd6d8d31254921b76 + remote: https://github.com/mimemagicrb/mimemagic.git + revision: 01f92d86d15d85cfd0f20dabd025dcbd36a8a60f + ref: 01f92d86d15d85cfd0f20dabd025dcbd36a8a60f specs: - activeadmin (2.0.0.alpha) - arbre (>= 1.1.1) - formtastic (~> 3.1) - formtastic_i18n - inherited_resources (~> 1.7) - jquery-rails (>= 4.2.0) - kaminari (>= 1.0.1) - railties (>= 4.2, < 5.2) - ransack (~> 1.3) - sass (~> 3.4) - sprockets (>= 3.0, < 4.1) - sprockets-es6 (>= 0.9.2) + mimemagic (0.3.5) PATH remote: . specs: - activeadmin_addons (1.4.0) + activeadmin_addons (2.0.0.beta.3) railties - require_all (~> 1.5) - sass-rails - select2-rails (~> 4.0) + redcarpet + require_all xdan-datetimepicker-rails (~> 2.5.1) GEM remote: https://rubygems.org/ specs: - aasm (4.12.3) + aasm (5.0.6) concurrent-ruby (~> 1.0) - actionmailer (4.2.10) - actionpack (= 4.2.10) - actionview (= 4.2.10) - activejob (= 4.2.10) + actioncable (6.1.7) + actionpack (= 6.1.7) + activesupport (= 6.1.7) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + actionmailbox (6.1.7) + actionpack (= 6.1.7) + activejob (= 6.1.7) + activerecord (= 6.1.7) + activestorage (= 6.1.7) + activesupport (= 6.1.7) + mail (>= 2.7.1) + actionmailer (6.1.7) + actionpack (= 6.1.7) + actionview (= 6.1.7) + activejob (= 6.1.7) + activesupport (= 6.1.7) mail (~> 2.5, >= 2.5.4) - rails-dom-testing (~> 1.0, >= 1.0.5) - actionpack (4.2.10) - actionview (= 4.2.10) - activesupport (= 4.2.10) - rack (~> 1.6) - rack-test (~> 0.6.2) - rails-dom-testing (~> 1.0, >= 1.0.5) - rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (4.2.10) - activesupport (= 4.2.10) - builder (~> 3.1) - erubis (~> 2.7.0) - rails-dom-testing (~> 1.0, >= 1.0.5) - rails-html-sanitizer (~> 1.0, >= 1.0.3) - activejob (4.2.10) - activesupport (= 4.2.10) - globalid (>= 0.3.0) - activemodel (4.2.10) - activesupport (= 4.2.10) + rails-dom-testing (~> 2.0) + actionpack (6.1.7) + actionview (= 6.1.7) + activesupport (= 6.1.7) + rack (~> 2.0, >= 2.0.9) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.2.0) + actiontext (6.1.7) + actionpack (= 6.1.7) + activerecord (= 6.1.7) + activestorage (= 6.1.7) + activesupport (= 6.1.7) + nokogiri (>= 1.8.5) + actionview (6.1.7) + activesupport (= 6.1.7) builder (~> 3.1) - activerecord (4.2.10) - activemodel (= 4.2.10) - activesupport (= 4.2.10) - arel (~> 6.0) - activesupport (4.2.10) - i18n (~> 0.7) - minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) - tzinfo (~> 1.1) - addressable (2.5.2) - public_suffix (>= 2.0.2, < 4.0) - arbre (1.1.1) - activesupport (>= 3.0.0) - arel (6.0.4) - babel-source (5.8.35) - babel-transpiler (0.7.0) - babel-source (>= 4.0, < 6) - execjs (~> 2.0) - bcrypt (3.1.11) - builder (3.2.3) - capybara (2.17.0) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.1, >= 1.2.0) + activeadmin (3.0.0) + arbre (~> 1.2, >= 1.2.1) + formtastic (>= 3.1, < 5.0) + formtastic_i18n (~> 0.4) + inherited_resources (~> 1.7) + jquery-rails (~> 4.2) + kaminari (~> 1.0, >= 1.2.1) + railties (>= 6.1, < 7.1) + ransack (>= 4.0, < 5) + activejob (6.1.7) + activesupport (= 6.1.7) + globalid (>= 0.3.6) + activemodel (6.1.7) + activesupport (= 6.1.7) + activerecord (6.1.7) + activemodel (= 6.1.7) + activesupport (= 6.1.7) + activestorage (6.1.7) + actionpack (= 6.1.7) + activejob (= 6.1.7) + activerecord (= 6.1.7) + activesupport (= 6.1.7) + marcel (~> 1.0) + mini_mime (>= 1.1.0) + activesupport (6.1.7) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + zeitwerk (~> 2.3) + addressable (2.8.5) + public_suffix (>= 2.0.2, < 6.0) + arbre (1.6.0) + activesupport (>= 3.0.0, < 7.1) + ruby2_keywords (>= 0.0.2, < 1.0) + ast (2.4.2) + builder (3.2.4) + byebug (11.1.3) + capybara (3.39.2) addressable + matrix mini_mime (>= 0.1.3) - nokogiri (>= 1.3.3) - rack (>= 1.0.0) - rack-test (>= 0.5.4) - xpath (>= 2.0, < 4.0) - capybara-selenium (0.0.6) - capybara - selenium-webdriver - childprocess (0.8.0) - ffi (~> 1.0, >= 1.0.11) - climate_control (0.2.0) - cocaine (0.5.8) - climate_control (>= 0.0.3, < 1.0) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (>= 1.5, < 3.0) + xpath (~> 3.2) coderay (1.1.2) - concurrent-ruby (1.0.5) - crass (1.0.3) - database_cleaner (1.6.2) - devise (4.4.1) - bcrypt (~> 3.0) - orm_adapter (~> 0.1) - railties (>= 4.1.0, < 5.2) - responders - warden (~> 1.2.3) + concurrent-ruby (1.1.10) + content_disposition (1.0.0) + crass (1.0.6) + database_cleaner (1.8.2) diff-lcs (1.3) - enumerize (2.1.2) - activesupport (>= 3.2) - erubis (2.7.0) - execjs (2.7.0) - factory_bot (4.8.2) - activesupport (>= 3.0.0) - factory_bot_rails (4.8.2) - factory_bot (~> 4.8.2) - railties (>= 3.0.0) - ffi (1.9.18) - formatador (0.2.5) - formtastic (3.1.5) - actionpack (>= 3.2.13) - formtastic_i18n (0.6.0) - globalid (0.4.1) + down (5.2.4) + addressable (~> 2.8) + erubi (1.11.0) + factory_bot (5.1.1) activesupport (>= 4.2.0) - guard (2.14.2) + factory_bot_rails (5.1.1) + factory_bot (~> 5.1.0) + railties (>= 4.2.0) + ffi (1.15.5) + formatador (0.2.5) + formtastic (4.0.0) + actionpack (>= 5.2.0) + formtastic_i18n (0.7.0) + globalid (1.0.0) + activesupport (>= 5.0) + guard (2.16.1) formatador (>= 0.2.4) listen (>= 2.7, < 4.0) lumberjack (>= 1.0.12, < 2.0) @@ -131,199 +139,247 @@ GEM guard (~> 2.1) guard-compat (~> 1.1) rspec (>= 2.99.0, < 4.0) - has_scope (0.7.1) - actionpack (>= 4.1, < 5.2) - activesupport (>= 4.1, < 5.2) - i18n (0.9.3) + has_scope (0.8.1) + actionpack (>= 5.2) + activesupport (>= 5.2) + i18n (1.12.0) concurrent-ruby (~> 1.0) - inherited_resources (1.8.0) - actionpack (>= 4.2, <= 5.2) + image_processing (1.12.1) + mini_magick (>= 4.9.5, < 5) + ruby-vips (>= 2.0.17, < 3) + inherited_resources (1.13.1) + actionpack (>= 5.2, < 7.1) has_scope (~> 0.6) - railties (>= 4.2, <= 5.2) - responders - jquery-rails (4.3.1) + railties (>= 5.2, < 7.1) + responders (>= 2, < 4) + jquery-rails (4.5.1) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) - kaminari (1.1.1) + json (2.6.3) + kaminari (1.2.2) activesupport (>= 4.1.0) - kaminari-actionview (= 1.1.1) - kaminari-activerecord (= 1.1.1) - kaminari-core (= 1.1.1) - kaminari-actionview (1.1.1) + kaminari-actionview (= 1.2.2) + kaminari-activerecord (= 1.2.2) + kaminari-core (= 1.2.2) + kaminari-actionview (1.2.2) actionview - kaminari-core (= 1.1.1) - kaminari-activerecord (1.1.1) + kaminari-core (= 1.2.2) + kaminari-activerecord (1.2.2) activerecord - kaminari-core (= 1.1.1) - kaminari-core (1.1.1) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) - loofah (2.1.1) + kaminari-core (= 1.2.2) + kaminari-core (1.2.2) + listen (3.7.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + loofah (2.19.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) - lumberjack (1.0.12) - mail (2.7.0) + lumberjack (1.2.4) + mail (2.7.1) mini_mime (>= 0.1.1) - method_source (0.9.0) - mime-types (3.1) - mime-types-data (~> 3.2015) - mime-types-data (3.2016.0521) - mimemagic (0.3.2) - mini_mime (1.0.0) - mini_portile2 (2.3.0) - minitest (5.11.3) + marcel (1.0.2) + matrix (0.4.2) + method_source (0.9.2) + mini_magick (4.11.0) + mini_mime (1.1.2) + mini_portile2 (2.8.4) + minitest (5.16.3) nenv (0.3.0) - nokogiri (1.8.1) - mini_portile2 (~> 2.3.0) - notiffany (0.1.1) + nio4r (2.5.8) + nokogiri (1.15.3) + mini_portile2 (~> 2.8.2) + racc (~> 1.4) + notiffany (0.1.3) nenv (~> 0.1) shellany (~> 0.0) - orm_adapter (0.5.0) - paperclip (5.2.1) - activemodel (>= 4.2.0) - activesupport (>= 4.2.0) - cocaine (~> 0.5.5) - mime-types - mimemagic (~> 0.3.0) - polyamorous (1.3.3) - activerecord (>= 3.0) - pry (0.11.3) + parallel (1.22.1) + parser (3.2.2.0) + ast (~> 2.4.1) + pry (0.12.2) coderay (~> 1.1.0) method_source (~> 0.9.0) - pry-rails (0.3.6) + pry-byebug (3.8.0) + byebug (~> 11.0) + pry (~> 0.10) + pry-rails (0.3.9) pry (>= 0.10.4) - public_suffix (3.0.1) - rack (1.6.8) - rack-test (0.6.3) - rack (>= 1.0) - rails (4.2.10) - actionmailer (= 4.2.10) - actionpack (= 4.2.10) - actionview (= 4.2.10) - activejob (= 4.2.10) - activemodel (= 4.2.10) - activerecord (= 4.2.10) - activesupport (= 4.2.10) - bundler (>= 1.3.0, < 2.0) - railties (= 4.2.10) - sprockets-rails - rails-deprecated_sanitizer (1.0.3) - activesupport (>= 4.2.0.alpha) - rails-dom-testing (1.0.9) - activesupport (>= 4.2.0, < 5.0) - nokogiri (~> 1.6) - rails-deprecated_sanitizer (>= 1.0.1) - rails-html-sanitizer (1.0.3) - loofah (~> 2.0) - railties (4.2.10) - actionpack (= 4.2.10) - activesupport (= 4.2.10) - rake (>= 0.8.7) - thor (>= 0.18.1, < 2.0) - rake (12.3.0) - ransack (1.8.6) - actionpack (>= 3.0) - activerecord (>= 3.0) - activesupport (>= 3.0) + public_suffix (5.0.3) + puma (5.3.1) + nio4r (~> 2.0) + racc (1.7.1) + rack (2.2.8) + rack-proxy (0.7.6) + rack + rack-test (2.1.0) + rack (>= 1.3) + rails (6.1.7) + actioncable (= 6.1.7) + actionmailbox (= 6.1.7) + actionmailer (= 6.1.7) + actionpack (= 6.1.7) + actiontext (= 6.1.7) + actionview (= 6.1.7) + activejob (= 6.1.7) + activemodel (= 6.1.7) + activerecord (= 6.1.7) + activestorage (= 6.1.7) + activesupport (= 6.1.7) + bundler (>= 1.15.0) + railties (= 6.1.7) + sprockets-rails (>= 2.0.0) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.4.3) + loofah (~> 2.3) + railties (6.1.7) + actionpack (= 6.1.7) + activesupport (= 6.1.7) + method_source + rake (>= 12.2) + thor (~> 1.0) + rainbow (3.1.1) + rake (13.0.6) + ransack (4.0.0) + activerecord (>= 6.1.5) + activesupport (>= 6.1.5) i18n - polyamorous (~> 1.3.2) - rb-fsevent (0.10.2) - rb-inotify (0.9.10) - ffi (>= 0.5.0, < 2) - require_all (1.5.0) - responders (2.4.0) - actionpack (>= 4.2.0, < 5.3) - railties (>= 4.2.0, < 5.3) - rspec (3.7.0) - rspec-core (~> 3.7.0) - rspec-expectations (~> 3.7.0) - rspec-mocks (~> 3.7.0) - rspec-core (3.7.1) - rspec-support (~> 3.7.0) - rspec-expectations (3.7.0) + rb-fsevent (0.11.2) + rb-inotify (0.10.1) + ffi (~> 1.0) + redcarpet (3.6.0) + regexp_parser (2.8.1) + require_all (3.0.0) + responders (3.1.0) + actionpack (>= 5.2) + railties (>= 5.2) + rexml (3.2.5) + rspec (3.9.0) + rspec-core (~> 3.9.0) + rspec-expectations (~> 3.9.0) + rspec-mocks (~> 3.9.0) + rspec-core (3.9.1) + rspec-support (~> 3.9.1) + rspec-expectations (3.9.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.7.0) - rspec-mocks (3.7.0) + rspec-support (~> 3.9.0) + rspec-mocks (3.9.1) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.7.0) - rspec-rails (3.7.2) + rspec-support (~> 3.9.0) + rspec-rails (3.9.0) actionpack (>= 3.0) activesupport (>= 3.0) railties (>= 3.0) - rspec-core (~> 3.7.0) - rspec-expectations (~> 3.7.0) - rspec-mocks (~> 3.7.0) - rspec-support (~> 3.7.0) - rspec-support (3.7.0) - ruby_dep (1.5.0) - rubyzip (1.2.1) - sass (3.5.5) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sass-rails (5.0.7) - railties (>= 4.0.0, < 6) - sass (~> 3.1) - sprockets (>= 2.8, < 4.0) - sprockets-rails (>= 2.0, < 4.0) - tilt (>= 1.1, < 3) - select2-rails (4.0.3) - thor (~> 0.14) - selenium-webdriver (3.8.0) - childprocess (~> 0.5) - rubyzip (~> 1.0) + rspec-core (~> 3.9.0) + rspec-expectations (~> 3.9.0) + rspec-mocks (~> 3.9.0) + rspec-support (~> 3.9.0) + rspec-retry (0.6.2) + rspec-core (> 3.3) + rspec-support (3.9.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rubocop (1.50.1) + json (~> 2.3) + parallel (~> 1.10) + parser (>= 3.2.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.28.0) + parser (>= 3.2.1.0) + rubocop-capybara (2.17.1) + rubocop (~> 1.41) + rubocop-performance (1.17.1) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rails (2.19.0) + activesupport (>= 4.2.0) + rack (>= 1.1) + rubocop (>= 1.33.0, < 2.0) + rubocop-rspec (2.19.0) + rubocop (~> 1.33) + rubocop-capybara (~> 2.17) + ruby-progressbar (1.13.0) + ruby-vips (2.1.4) + ffi (~> 1.12) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + selenium-webdriver (4.11.0) + rexml (~> 3.2, >= 3.2.5) + rubyzip (>= 1.2.2, < 3.0) + websocket (~> 1.0) + semantic_range (3.0.0) shellany (0.0.1) - shoulda-matchers (3.1.2) - activesupport (>= 4.0.0) - sprockets (3.7.1) + shoulda-matchers (4.2.0) + activesupport (>= 4.2.0) + shrine (3.4.0) + content_disposition (~> 1.0) + down (~> 5.1) + sprockets (4.1.1) concurrent-ruby (~> 1.0) rack (> 1, < 3) - sprockets-es6 (0.9.2) - babel-source (>= 5.8.11) - babel-transpiler - sprockets (>= 3.0.0) - sprockets-rails (3.2.1) - actionpack (>= 4.0) - activesupport (>= 4.0) + sprockets-rails (3.4.2) + actionpack (>= 5.2) + activesupport (>= 5.2) sprockets (>= 3.0.0) - sqlite3 (1.3.13) - thor (0.20.0) - thread_safe (0.3.6) - tilt (2.0.8) - tzinfo (1.2.4) - thread_safe (~> 0.1) - warden (1.2.7) - rack (>= 1.0) + sqlite3 (1.4.2) + thor (1.2.1) + tzinfo (2.0.5) + concurrent-ruby (~> 1.0) + unicode-display_width (2.4.2) + webpacker (5.4.4) + activesupport (>= 5.2) + rack-proxy (>= 0.6.1) + railties (>= 5.2) + semantic_range (>= 2.3.0) + websocket (1.2.9) + websocket-driver (0.7.5) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) xdan-datetimepicker-rails (2.5.4) jquery-rails rails (>= 3.2.16) - xpath (3.0.0) + xpath (3.2.0) nokogiri (~> 1.8) + zeitwerk (2.6.6) PLATFORMS ruby DEPENDENCIES aasm - activeadmin! + activeadmin (~> 3.0) activeadmin_addons! - capybara-selenium + capybara database_cleaner - devise - enumerize (~> 2.0) factory_bot_rails guard guard-rspec - paperclip + image_processing + matrix + mimemagic! + pry-byebug pry-rails - rails (~> 4.2) + puma + rails (~> 6.1, >= 6.1.4.4) + rexml rspec-rails + rspec-retry + rspec_junit_formatter + rubocop (~> 1.50) + rubocop-performance + rubocop-rails + rubocop-rspec (~> 2.2) + selenium-webdriver (~> 4.10) shoulda-matchers + shrine (~> 3.0) sqlite3 + webpacker (~> 5.4) BUNDLED WITH - 1.16.1 + 2.3.4 diff --git a/MIT-LICENSE b/MIT-LICENSE index f64f6353..f283b3ec 100644 --- a/MIT-LICENSE +++ b/MIT-LICENSE @@ -1,4 +1,4 @@ -Copyright 2014 PLATANUS SPA +Copyright 2021 PLATANUS SPA Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/README.md b/README.md index 4b1b5109..209f6218 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # ActiveAdmin Addons [![Gem Version](https://badge.fury.io/rb/activeadmin_addons.svg)](https://badge.fury.io/rb/activeadmin_addons) -[![Build Status](https://secure.travis-ci.org/platanus/activeadmin_addons.svg?branch=master)](http://travis-ci.org/platanus/activeadmin_addons) ActiveAdmin Addons will extend your ActiveAdmin and enable a set of addons you can optionally use to improve the ActiveAdmin UI and make it awesome. @@ -8,10 +7,9 @@ ActiveAdmin Addons will extend your ActiveAdmin and enable a set of addons you c #### Rows/Columns -- [Paperclip Attachment](#paperclip-attachment): show file icons on your show/index views. -- [Paperclip Image](#paperclip-image): show thumbnails on your show/index views. +- [Shrine Image](#shrine-image): show thumbnails on your show/index views. - [AASM Integration](#aasm-integration): nice looking tags for states. -- [Enumerize and Rails Enum Integration](#enumerize-and-rails-enum-integration): nice looking tags for enums. +- [Rails Enum Integration](#rails-enum-integration): nice looking tags for enums. - [Boolean Values](#boolean-values): beautiful boolean values. - [Toggleable Booleans](#toggleable-boolean-columns): have switches to toggle values directly at the index - [Number Formatting](#number-formatting): format you currencies with ease. @@ -30,8 +28,12 @@ ActiveAdmin Addons will extend your ActiveAdmin and enable a set of addons you c #### Filters - [Numeric Range Filter](#numeric-range-filter): filter your results using a numeric range (i.e. age between 18-30). +- [Date Time Picker Filter](#date-time-picker-filter): filter your results using a datetime range. - [Search Select Filter](#search-select-filter): filter your results using the ajax select input. +#### Themes +- [No Theme](#no-theme): ActiveAdmin default style. + ## Installation Add this line to your application's Gemfile: @@ -59,28 +61,20 @@ Check [here](docs/install_generator.md) to see more information about this gener Installing this gem will enable the following changes by default: * The default date input will be `:datepicker` instead of `:date_select` -* Filters and selects will offer integration with [enumerize](https://github.com/brainspec/enumerize) +* Select filters will show translated values when used with Rails built-in `enums` * All select boxes will use select2 ## Addons ### Rows/Columns -#### Paperclip Attachment - -Displays a paperclip link with attachment related icon into index and show views. - - +#### Images -[Read more!](docs/paperclip_attachment.md) - -#### Paperclip Image - -Displays a paperclip image into index and show views +Display images in the index and show views. This implementation supports [Shrine](https://github.com/shrinerb/shrine). -[Read more!](docs/paperclip_images.md) +[Read more!](docs/images.md) #### AASM Integration @@ -90,9 +84,9 @@ You can show [aasm](https://github.com/aasm/aasm) values as active admin tags. [Read more!](docs/aasm_integration.md) -#### Enumerize and Rails Enum Integration +#### Rails Enum Integration -You can show Rails' built in `enums` or [enumerize](https://github.com/brainspec/enumerize) values as active admin tags. +You can show Rails' built in `enums` as active admin tags. @@ -110,7 +104,7 @@ Modifies how boolean values are displayed. Have switches to toggle values directly at the index - + [Read more!](docs/toggle_bool.md) @@ -130,47 +124,55 @@ You can show `Array` or `Hash` values as html lists. [Read more!](docs/list.md) +#### Markdown + +You can render text as markdown. + + + +[Read more!](docs/markdown.md) + ### Inputs -#### Select2 Input +#### Slim Select Input -With [select2](http://ivaynberg.github.io/select2/) the select control looks nicer, it works great with large collections. +With [Slim Select](https://slimselectjs.com/) the select control looks nicer, it works great with large collections. - + -[Read more!](docs/select2_default.md) +[Read more!](docs/slim-select_default.md) #### Tag Input -Using tags input, you can add tags using select2. +Using tags input, you can add tags using slim select. - + -[Read more!](docs/select2_tags.md) +[Read more!](docs/slim-select_tags.md) #### Selected List Input This form control allows you to handle your many to many associations. - + -[Read more!](docs/select2_selected_list.md) +[Read more!](docs/slim-select_selected_list.md) #### Search Select Input Using `search_select` input, you can easily add ajax search to activeadmin. - + -[Read more!](docs/select2_search.md) +[Read more!](docs/slim-select_search.md) #### Nested Select Input Using `nested_select` input, you can build related select inputs. - + -[Read more!](docs/select2_nested_select.md) +[Read more!](docs/slim-select_nested_select.md) ### Color Picker Input @@ -208,16 +210,46 @@ filter :number, as: :numeric_range_filter +#### Date Time Picker Filter + +To filter based on a range of datetimes you can use `date_time_picker_filter` like this: + +```ruby +filter :created_at, as: :date_time_picker_filter +``` + + + #### Search Select Filter You can use the ajax select input to filter values on index view like this: ```ruby -filter :category_id, as: :search_select_filter +filter :category, as: :search_select_filter ``` +[Read more!](docs/slim-select_search.md#filter-usage) + +### Themes + +#### NO Theme +Use default active_admin theme. + +## Publishing + +On a new branch: + +1. Change `VERSION` in `lib/activeadmin_addons/version.rb`. Note that beta versions should have a `.beta` suffix (e.g. `1.0.0.beta.1`). +2. Change `"version"` in `package.json` to the same version. Note that beta versions should have a `-beta` suffix (e.g. `1.0.0-beta.1`). +3. Change `Unreleased` title to current version in `CHANGELOG.md`. +4. Run `bundle install`. +5. Open a new PR with those changes. +6. Once the PR is merged, checkout to master and pull the changes. +8. Create tag. For example: `git tag v1.0.0`. +9. Push tag. For example: `git push origin v1.0.0`. This will trigger the CI to publish the new version to npm and rubygems. + ## Contributing 1. Fork it @@ -238,4 +270,4 @@ activeadmin_addons is maintained by [platanus](http://platan.us). ## License -ActiveAdminAddons is © 2016 Platanus, spa. It is free software and may be redistributed under the terms specified in the LICENSE file. +ActiveAdminAddons is © 2021 Platanus, spa. It is free software and may be redistributed under the terms specified in the LICENSE file. diff --git a/Rakefile b/Rakefile index 406d7a1f..8b02d272 100644 --- a/Rakefile +++ b/Rakefile @@ -14,5 +14,17 @@ RDoc::Task.new(:rdoc) do |rdoc| rdoc.rdoc_files.include('lib/**/*.rb') end -Bundler::GemHelper.install_tasks +task :prepare_assets do + system "rm -rf spec/dummy/public/packs" + system "rm -rf spec/dummy/public/packs-test" + system "yarn install" + system "(cd spec/dummy && yarn install)" +end +task :tests do + system "rspec ./spec/lib" + system "rake prepare_assets" + system "rspec ./spec/features" +end + +Bundler::GemHelper.install_tasks diff --git a/activeadmin_addons.gemspec b/activeadmin_addons.gemspec index aa322e91..a87d5bc7 100644 --- a/activeadmin_addons.gemspec +++ b/activeadmin_addons.gemspec @@ -1,5 +1,4 @@ -# rubocop:disable Metrics/LineLength -$:.push File.expand_path("../lib", __FILE__) +$:.push File.expand_path('lib', __dir__) # Maintain your gem's version: require "activeadmin_addons/version" @@ -8,33 +7,44 @@ require "activeadmin_addons/version" Gem::Specification.new do |s| s.name = "activeadmin_addons" s.version = ActiveadminAddons::VERSION - s.authors = ["Platanus", "Julio Garcia", "Emilio Blanco", "Leandro Segovia"] - s.email = ["rubygems@platan.us", "julioggonz@gmail.com", "emilioeduardob@gmail.com", "ldlsegovia@gmail.com"] + s.authors = ["Platanus", "Julio García", "Emilio Blanco", "Leandro Segovia"] + s.email = ["rubygems@platan.us", "julioggonz@gmail.com", "emilioeduardob@gmail.com", + "ldlsegovia@gmail.com"] s.homepage = "https://github.com/platanus/activeadmin_addons" s.summary = "Set of addons to help with the activeadmin ui" s.description = "Set of addons to help with the activeadmin ui" s.license = "MIT" + s.required_ruby_version = '>= 2.7.0' - s.files = Dir["{app,config,db,lib,vendor}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"] + s.files = Dir["{app,config,db,lib,vendor/assets}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"] s.add_dependency "railties" - s.add_dependency "sass-rails" - s.add_dependency "select2-rails", "~> 4.0" + s.add_dependency "redcarpet" + s.add_dependency "require_all" s.add_dependency "xdan-datetimepicker-rails", "~> 2.5.1" - s.add_dependency "require_all", "~> 1.5" - s.add_development_dependency "rails", "~> 4.2" - s.add_development_dependency "sqlite3" - s.add_development_dependency "enumerize", "~> 2.0" - s.add_development_dependency "paperclip" s.add_development_dependency "aasm" - - s.add_development_dependency "rspec-rails" - s.add_development_dependency "pry-rails" + s.add_development_dependency "capybara" + s.add_development_dependency "database_cleaner" s.add_development_dependency "factory_bot_rails" - s.add_development_dependency "shoulda-matchers" s.add_development_dependency "guard" s.add_development_dependency "guard-rspec" - s.add_development_dependency "capybara-selenium" - s.add_development_dependency "database_cleaner" + s.add_development_dependency "image_processing" + s.add_development_dependency "matrix" + s.add_development_dependency "pry-byebug" + s.add_development_dependency "pry-rails" + s.add_development_dependency "puma" + s.add_development_dependency "rails", "~> 6.1", ">= 6.1.4.4" + s.add_development_dependency "rexml" + s.add_development_dependency "rspec_junit_formatter" + s.add_development_dependency "rspec-rails" + s.add_development_dependency "rspec-retry" + s.add_development_dependency "rubocop", "~> 1.50" + s.add_development_dependency "rubocop-performance" + s.add_development_dependency "rubocop-rails" + s.add_development_dependency "rubocop-rspec", "~> 2.2" + s.add_development_dependency "selenium-webdriver", '~> 4.10' + s.add_development_dependency "shoulda-matchers" + s.add_development_dependency "shrine", "~> 3.0" + s.add_development_dependency "sqlite3" end diff --git a/app/assets/images/fileicons/file_extension_3gp.png b/app/assets/images/fileicons/file_extension_3gp.png deleted file mode 100755 index 35a05dd0..00000000 Binary files a/app/assets/images/fileicons/file_extension_3gp.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_7z.png b/app/assets/images/fileicons/file_extension_7z.png deleted file mode 100755 index 5ed205bb..00000000 Binary files a/app/assets/images/fileicons/file_extension_7z.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_ace.png b/app/assets/images/fileicons/file_extension_ace.png deleted file mode 100755 index 799604d9..00000000 Binary files a/app/assets/images/fileicons/file_extension_ace.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_ai.png b/app/assets/images/fileicons/file_extension_ai.png deleted file mode 100755 index 078057f6..00000000 Binary files a/app/assets/images/fileicons/file_extension_ai.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_aif.png b/app/assets/images/fileicons/file_extension_aif.png deleted file mode 100755 index 02ba4417..00000000 Binary files a/app/assets/images/fileicons/file_extension_aif.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_aiff.png b/app/assets/images/fileicons/file_extension_aiff.png deleted file mode 100755 index 45f6c27e..00000000 Binary files a/app/assets/images/fileicons/file_extension_aiff.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_amr.png b/app/assets/images/fileicons/file_extension_amr.png deleted file mode 100755 index 4c30c8ce..00000000 Binary files a/app/assets/images/fileicons/file_extension_amr.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_asf.png b/app/assets/images/fileicons/file_extension_asf.png deleted file mode 100755 index f65286f4..00000000 Binary files a/app/assets/images/fileicons/file_extension_asf.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_asx.png b/app/assets/images/fileicons/file_extension_asx.png deleted file mode 100755 index 9ac440b4..00000000 Binary files a/app/assets/images/fileicons/file_extension_asx.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_bat.png b/app/assets/images/fileicons/file_extension_bat.png deleted file mode 100755 index ba72c7f8..00000000 Binary files a/app/assets/images/fileicons/file_extension_bat.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_bin.png b/app/assets/images/fileicons/file_extension_bin.png deleted file mode 100755 index adc7af36..00000000 Binary files a/app/assets/images/fileicons/file_extension_bin.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_bmp.png b/app/assets/images/fileicons/file_extension_bmp.png deleted file mode 100755 index 485cde80..00000000 Binary files a/app/assets/images/fileicons/file_extension_bmp.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_bup.png b/app/assets/images/fileicons/file_extension_bup.png deleted file mode 100755 index 5e25354d..00000000 Binary files a/app/assets/images/fileicons/file_extension_bup.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_cab.png b/app/assets/images/fileicons/file_extension_cab.png deleted file mode 100755 index 0e19a973..00000000 Binary files a/app/assets/images/fileicons/file_extension_cab.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_cbr.png b/app/assets/images/fileicons/file_extension_cbr.png deleted file mode 100755 index 37d886aa..00000000 Binary files a/app/assets/images/fileicons/file_extension_cbr.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_cda.png b/app/assets/images/fileicons/file_extension_cda.png deleted file mode 100755 index c50b7519..00000000 Binary files a/app/assets/images/fileicons/file_extension_cda.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_cdl.png b/app/assets/images/fileicons/file_extension_cdl.png deleted file mode 100755 index cb579056..00000000 Binary files a/app/assets/images/fileicons/file_extension_cdl.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_cdr.png b/app/assets/images/fileicons/file_extension_cdr.png deleted file mode 100755 index d6def9e3..00000000 Binary files a/app/assets/images/fileicons/file_extension_cdr.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_chm.png b/app/assets/images/fileicons/file_extension_chm.png deleted file mode 100755 index 7a993614..00000000 Binary files a/app/assets/images/fileicons/file_extension_chm.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_dat.png b/app/assets/images/fileicons/file_extension_dat.png deleted file mode 100755 index 9567f6af..00000000 Binary files a/app/assets/images/fileicons/file_extension_dat.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_divx.png b/app/assets/images/fileicons/file_extension_divx.png deleted file mode 100755 index 99cb983e..00000000 Binary files a/app/assets/images/fileicons/file_extension_divx.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_dll.png b/app/assets/images/fileicons/file_extension_dll.png deleted file mode 100755 index 7ac35c98..00000000 Binary files a/app/assets/images/fileicons/file_extension_dll.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_dmg.png b/app/assets/images/fileicons/file_extension_dmg.png deleted file mode 100755 index a2c644bd..00000000 Binary files a/app/assets/images/fileicons/file_extension_dmg.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_doc.png b/app/assets/images/fileicons/file_extension_doc.png deleted file mode 100755 index 8738d2eb..00000000 Binary files a/app/assets/images/fileicons/file_extension_doc.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_docx.png b/app/assets/images/fileicons/file_extension_docx.png deleted file mode 100644 index 18f16314..00000000 Binary files a/app/assets/images/fileicons/file_extension_docx.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_dss.png b/app/assets/images/fileicons/file_extension_dss.png deleted file mode 100755 index d51df3c2..00000000 Binary files a/app/assets/images/fileicons/file_extension_dss.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_dvf.png b/app/assets/images/fileicons/file_extension_dvf.png deleted file mode 100755 index 62bbb95a..00000000 Binary files a/app/assets/images/fileicons/file_extension_dvf.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_dwg.png b/app/assets/images/fileicons/file_extension_dwg.png deleted file mode 100755 index 01996817..00000000 Binary files a/app/assets/images/fileicons/file_extension_dwg.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_eml.png b/app/assets/images/fileicons/file_extension_eml.png deleted file mode 100755 index 6c973fcd..00000000 Binary files a/app/assets/images/fileicons/file_extension_eml.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_eps.png b/app/assets/images/fileicons/file_extension_eps.png deleted file mode 100755 index 009582ce..00000000 Binary files a/app/assets/images/fileicons/file_extension_eps.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_exe.png b/app/assets/images/fileicons/file_extension_exe.png deleted file mode 100755 index c9cec757..00000000 Binary files a/app/assets/images/fileicons/file_extension_exe.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_fla.png b/app/assets/images/fileicons/file_extension_fla.png deleted file mode 100755 index 648b1d07..00000000 Binary files a/app/assets/images/fileicons/file_extension_fla.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_flv.png b/app/assets/images/fileicons/file_extension_flv.png deleted file mode 100755 index ccc1eb7f..00000000 Binary files a/app/assets/images/fileicons/file_extension_flv.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_gif.png b/app/assets/images/fileicons/file_extension_gif.png deleted file mode 100755 index b1aa6c3d..00000000 Binary files a/app/assets/images/fileicons/file_extension_gif.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_gz.png b/app/assets/images/fileicons/file_extension_gz.png deleted file mode 100755 index d4517e1c..00000000 Binary files a/app/assets/images/fileicons/file_extension_gz.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_hqx.png b/app/assets/images/fileicons/file_extension_hqx.png deleted file mode 100755 index ae7cc062..00000000 Binary files a/app/assets/images/fileicons/file_extension_hqx.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_htm.png b/app/assets/images/fileicons/file_extension_htm.png deleted file mode 100755 index 061ff469..00000000 Binary files a/app/assets/images/fileicons/file_extension_htm.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_html.png b/app/assets/images/fileicons/file_extension_html.png deleted file mode 100755 index d86548cd..00000000 Binary files a/app/assets/images/fileicons/file_extension_html.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_ifo.png b/app/assets/images/fileicons/file_extension_ifo.png deleted file mode 100755 index 89b0166a..00000000 Binary files a/app/assets/images/fileicons/file_extension_ifo.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_indd.png b/app/assets/images/fileicons/file_extension_indd.png deleted file mode 100755 index 0cbaadc7..00000000 Binary files a/app/assets/images/fileicons/file_extension_indd.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_iso.png b/app/assets/images/fileicons/file_extension_iso.png deleted file mode 100755 index e8df06db..00000000 Binary files a/app/assets/images/fileicons/file_extension_iso.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_jar.png b/app/assets/images/fileicons/file_extension_jar.png deleted file mode 100755 index 383aea4f..00000000 Binary files a/app/assets/images/fileicons/file_extension_jar.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_jpeg.png b/app/assets/images/fileicons/file_extension_jpeg.png deleted file mode 100755 index 68e38ab2..00000000 Binary files a/app/assets/images/fileicons/file_extension_jpeg.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_jpg.png b/app/assets/images/fileicons/file_extension_jpg.png deleted file mode 100755 index 39be8180..00000000 Binary files a/app/assets/images/fileicons/file_extension_jpg.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_lnk.png b/app/assets/images/fileicons/file_extension_lnk.png deleted file mode 100755 index 2b05f430..00000000 Binary files a/app/assets/images/fileicons/file_extension_lnk.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_log.png b/app/assets/images/fileicons/file_extension_log.png deleted file mode 100755 index bc99e85c..00000000 Binary files a/app/assets/images/fileicons/file_extension_log.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_m4a.png b/app/assets/images/fileicons/file_extension_m4a.png deleted file mode 100755 index d7c86c3c..00000000 Binary files a/app/assets/images/fileicons/file_extension_m4a.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_m4b.png b/app/assets/images/fileicons/file_extension_m4b.png deleted file mode 100755 index 8a73d4e5..00000000 Binary files a/app/assets/images/fileicons/file_extension_m4b.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_m4p.png b/app/assets/images/fileicons/file_extension_m4p.png deleted file mode 100755 index f9d90b92..00000000 Binary files a/app/assets/images/fileicons/file_extension_m4p.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_m4v.png b/app/assets/images/fileicons/file_extension_m4v.png deleted file mode 100755 index c7b0b1f7..00000000 Binary files a/app/assets/images/fileicons/file_extension_m4v.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_mcd.png b/app/assets/images/fileicons/file_extension_mcd.png deleted file mode 100755 index c268b87d..00000000 Binary files a/app/assets/images/fileicons/file_extension_mcd.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_mdb.png b/app/assets/images/fileicons/file_extension_mdb.png deleted file mode 100755 index 7b7b8361..00000000 Binary files a/app/assets/images/fileicons/file_extension_mdb.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_mid.png b/app/assets/images/fileicons/file_extension_mid.png deleted file mode 100755 index 4d3e4828..00000000 Binary files a/app/assets/images/fileicons/file_extension_mid.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_mov.png b/app/assets/images/fileicons/file_extension_mov.png deleted file mode 100755 index 6a918651..00000000 Binary files a/app/assets/images/fileicons/file_extension_mov.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_mp2.png b/app/assets/images/fileicons/file_extension_mp2.png deleted file mode 100755 index bbc5f049..00000000 Binary files a/app/assets/images/fileicons/file_extension_mp2.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_mp3.png b/app/assets/images/fileicons/file_extension_mp3.png deleted file mode 100644 index 64420a6b..00000000 Binary files a/app/assets/images/fileicons/file_extension_mp3.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_mp4.png b/app/assets/images/fileicons/file_extension_mp4.png deleted file mode 100755 index caa154ce..00000000 Binary files a/app/assets/images/fileicons/file_extension_mp4.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_mpeg.png b/app/assets/images/fileicons/file_extension_mpeg.png deleted file mode 100755 index 81994a29..00000000 Binary files a/app/assets/images/fileicons/file_extension_mpeg.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_mpg.png b/app/assets/images/fileicons/file_extension_mpg.png deleted file mode 100755 index 948b6431..00000000 Binary files a/app/assets/images/fileicons/file_extension_mpg.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_msi.png b/app/assets/images/fileicons/file_extension_msi.png deleted file mode 100755 index 97a8a3b1..00000000 Binary files a/app/assets/images/fileicons/file_extension_msi.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_mswmm.png b/app/assets/images/fileicons/file_extension_mswmm.png deleted file mode 100755 index d70aaa75..00000000 Binary files a/app/assets/images/fileicons/file_extension_mswmm.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_ogg.png b/app/assets/images/fileicons/file_extension_ogg.png deleted file mode 100755 index a6b55f6c..00000000 Binary files a/app/assets/images/fileicons/file_extension_ogg.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_pdf.png b/app/assets/images/fileicons/file_extension_pdf.png deleted file mode 100755 index 04423b49..00000000 Binary files a/app/assets/images/fileicons/file_extension_pdf.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_png.png b/app/assets/images/fileicons/file_extension_png.png deleted file mode 100755 index 76230d30..00000000 Binary files a/app/assets/images/fileicons/file_extension_png.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_pps.png b/app/assets/images/fileicons/file_extension_pps.png deleted file mode 100755 index 44a2d2c7..00000000 Binary files a/app/assets/images/fileicons/file_extension_pps.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_ppt.png b/app/assets/images/fileicons/file_extension_ppt.png deleted file mode 100644 index b69bafe7..00000000 Binary files a/app/assets/images/fileicons/file_extension_ppt.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_pptx.png b/app/assets/images/fileicons/file_extension_pptx.png deleted file mode 100644 index dff5231f..00000000 Binary files a/app/assets/images/fileicons/file_extension_pptx.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_ps.png b/app/assets/images/fileicons/file_extension_ps.png deleted file mode 100755 index 0e4b20ae..00000000 Binary files a/app/assets/images/fileicons/file_extension_ps.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_psd.png b/app/assets/images/fileicons/file_extension_psd.png deleted file mode 100755 index b98ff860..00000000 Binary files a/app/assets/images/fileicons/file_extension_psd.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_pst.png b/app/assets/images/fileicons/file_extension_pst.png deleted file mode 100755 index 4f5f61f4..00000000 Binary files a/app/assets/images/fileicons/file_extension_pst.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_ptb.png b/app/assets/images/fileicons/file_extension_ptb.png deleted file mode 100755 index a3568dd4..00000000 Binary files a/app/assets/images/fileicons/file_extension_ptb.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_pub.png b/app/assets/images/fileicons/file_extension_pub.png deleted file mode 100755 index 4a71c01b..00000000 Binary files a/app/assets/images/fileicons/file_extension_pub.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_qbb.png b/app/assets/images/fileicons/file_extension_qbb.png deleted file mode 100755 index 24fc0ae5..00000000 Binary files a/app/assets/images/fileicons/file_extension_qbb.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_qbw.png b/app/assets/images/fileicons/file_extension_qbw.png deleted file mode 100755 index 162b0fb9..00000000 Binary files a/app/assets/images/fileicons/file_extension_qbw.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_qxd.png b/app/assets/images/fileicons/file_extension_qxd.png deleted file mode 100755 index f5e46cff..00000000 Binary files a/app/assets/images/fileicons/file_extension_qxd.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_ram.png b/app/assets/images/fileicons/file_extension_ram.png deleted file mode 100755 index a55ba848..00000000 Binary files a/app/assets/images/fileicons/file_extension_ram.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_rar.png b/app/assets/images/fileicons/file_extension_rar.png deleted file mode 100755 index 934f1824..00000000 Binary files a/app/assets/images/fileicons/file_extension_rar.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_rm.png b/app/assets/images/fileicons/file_extension_rm.png deleted file mode 100755 index 639e1802..00000000 Binary files a/app/assets/images/fileicons/file_extension_rm.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_rmvb.png b/app/assets/images/fileicons/file_extension_rmvb.png deleted file mode 100755 index 362ffdfc..00000000 Binary files a/app/assets/images/fileicons/file_extension_rmvb.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_rtf.png b/app/assets/images/fileicons/file_extension_rtf.png deleted file mode 100755 index cae2c95c..00000000 Binary files a/app/assets/images/fileicons/file_extension_rtf.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_sea.png b/app/assets/images/fileicons/file_extension_sea.png deleted file mode 100755 index d9906e2e..00000000 Binary files a/app/assets/images/fileicons/file_extension_sea.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_ses.png b/app/assets/images/fileicons/file_extension_ses.png deleted file mode 100755 index b62459b7..00000000 Binary files a/app/assets/images/fileicons/file_extension_ses.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_sit.png b/app/assets/images/fileicons/file_extension_sit.png deleted file mode 100755 index 629270d3..00000000 Binary files a/app/assets/images/fileicons/file_extension_sit.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_sitx.png b/app/assets/images/fileicons/file_extension_sitx.png deleted file mode 100755 index 4c7a0855..00000000 Binary files a/app/assets/images/fileicons/file_extension_sitx.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_ss.png b/app/assets/images/fileicons/file_extension_ss.png deleted file mode 100755 index a3a1dbcf..00000000 Binary files a/app/assets/images/fileicons/file_extension_ss.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_swf.png b/app/assets/images/fileicons/file_extension_swf.png deleted file mode 100755 index 3de37131..00000000 Binary files a/app/assets/images/fileicons/file_extension_swf.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_tgz.png b/app/assets/images/fileicons/file_extension_tgz.png deleted file mode 100755 index b896b276..00000000 Binary files a/app/assets/images/fileicons/file_extension_tgz.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_thm.png b/app/assets/images/fileicons/file_extension_thm.png deleted file mode 100755 index 0f6bbae2..00000000 Binary files a/app/assets/images/fileicons/file_extension_thm.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_tif.png b/app/assets/images/fileicons/file_extension_tif.png deleted file mode 100755 index c7d4da88..00000000 Binary files a/app/assets/images/fileicons/file_extension_tif.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_tmp.png b/app/assets/images/fileicons/file_extension_tmp.png deleted file mode 100755 index 75e014ee..00000000 Binary files a/app/assets/images/fileicons/file_extension_tmp.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_torrent.png b/app/assets/images/fileicons/file_extension_torrent.png deleted file mode 100755 index 6e8003c4..00000000 Binary files a/app/assets/images/fileicons/file_extension_torrent.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_ttf.png b/app/assets/images/fileicons/file_extension_ttf.png deleted file mode 100755 index dda399e3..00000000 Binary files a/app/assets/images/fileicons/file_extension_ttf.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_txt.png b/app/assets/images/fileicons/file_extension_txt.png deleted file mode 100755 index 1e7c12f8..00000000 Binary files a/app/assets/images/fileicons/file_extension_txt.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_unknown.png b/app/assets/images/fileicons/file_extension_unknown.png deleted file mode 100755 index e3e03772..00000000 Binary files a/app/assets/images/fileicons/file_extension_unknown.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_vcd.png b/app/assets/images/fileicons/file_extension_vcd.png deleted file mode 100755 index d066ecbb..00000000 Binary files a/app/assets/images/fileicons/file_extension_vcd.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_vob.png b/app/assets/images/fileicons/file_extension_vob.png deleted file mode 100755 index 2de5bed7..00000000 Binary files a/app/assets/images/fileicons/file_extension_vob.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_wav.png b/app/assets/images/fileicons/file_extension_wav.png deleted file mode 100755 index a8d7b142..00000000 Binary files a/app/assets/images/fileicons/file_extension_wav.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_wma.png b/app/assets/images/fileicons/file_extension_wma.png deleted file mode 100755 index e699f0ba..00000000 Binary files a/app/assets/images/fileicons/file_extension_wma.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_wmv.png b/app/assets/images/fileicons/file_extension_wmv.png deleted file mode 100755 index 98001f54..00000000 Binary files a/app/assets/images/fileicons/file_extension_wmv.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_wps.png b/app/assets/images/fileicons/file_extension_wps.png deleted file mode 100755 index 0e7cbc05..00000000 Binary files a/app/assets/images/fileicons/file_extension_wps.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_xls.png b/app/assets/images/fileicons/file_extension_xls.png deleted file mode 100755 index 4a394e52..00000000 Binary files a/app/assets/images/fileicons/file_extension_xls.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_xlsx.png b/app/assets/images/fileicons/file_extension_xlsx.png deleted file mode 100644 index 915a3683..00000000 Binary files a/app/assets/images/fileicons/file_extension_xlsx.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_xpi.png b/app/assets/images/fileicons/file_extension_xpi.png deleted file mode 100755 index 4ff58d7e..00000000 Binary files a/app/assets/images/fileicons/file_extension_xpi.png and /dev/null differ diff --git a/app/assets/images/fileicons/file_extension_zip.png b/app/assets/images/fileicons/file_extension_zip.png deleted file mode 100755 index 3b1b54fd..00000000 Binary files a/app/assets/images/fileicons/file_extension_zip.png and /dev/null differ diff --git a/app/assets/images/switches/switch_off.png b/app/assets/images/switches/switch_off.png deleted file mode 100644 index 32f4de9a..00000000 Binary files a/app/assets/images/switches/switch_off.png and /dev/null differ diff --git a/app/assets/images/switches/switch_on.png b/app/assets/images/switches/switch_on.png deleted file mode 100644 index f810f697..00000000 Binary files a/app/assets/images/switches/switch_on.png and /dev/null differ diff --git a/app/assets/javascripts/activeadmin_addons/addons/interactive_select_tag.js b/app/assets/javascripts/activeadmin_addons/addons/interactive_select_tag.js deleted file mode 100644 index 73037721..00000000 --- a/app/assets/javascripts/activeadmin_addons/addons/interactive_select_tag.js +++ /dev/null @@ -1,91 +0,0 @@ -$(function() { - configureInteractiveSelect(document); - - $(document).on('has_many_add:after', function(event, container) { - configureInteractiveSelect(container); - }); - - function configureInteractiveSelect(container) { - $('.interactive-tag-select select', container).each(function(i, el) { - setupSelect2(el); - }); - - function setupSelect2(select) { - var selectConfig = { - placeholder: '', - allowClear: false, - width: '125px', - }; - - $(select).select2(selectConfig); - - // Related with https://github.com/select2/select2/issues/3320 - $(select).on('select2:unselecting', function() { - $(this).data('unselecting', true); - }).on('select2:open', function() { - if ($(this).data('unselecting')) { - $(this).select2('close').removeData('unselecting'); - } - }); - } - } - - $('.interactive-tag').click(function(e) { - var tag = $(e.target).parent(); - var model = tag.data('model'); - var objectId = tag.data('object_id'); - var field = tag.data('field'); - var selectTag = $('.' + model + '-' + field + '-' + objectId + '-select'); - selectTag.removeClass('select-container-hidden'); - tag.addClass('interactive-tag-hidden'); - selectTag.find('select').select2('open'); - }); - - $('.interactive-tag-select').on('select2:close', function(e) { - var selectTag = $(e.target).parent(); - - var model = selectTag.data('model'); - var objectId = selectTag.data('object_id'); - var field = selectTag.data('field'); - - var tagContainer = $('.' + model + '-' + field + '-' + objectId + '-tag'); - var statusTag = tagContainer.find('.status_tag'); - - var newValue = e.target.value; - var newText = e.target.selectedOptions[0].text; - var oldValue = selectTag.data('value'); - - if (newValue === oldValue) { - selectTag.addClass('select-container-hidden'); - tagContainer.removeClass('interactive-tag-hidden'); - } else { - var url = tagContainer.data('url'); - var data = { id: objectId }; - data[model] = {}; - data[model][field] = newValue; - - $.ajax({ - url: url, - data: data, - dataType: 'json', - error: function() { - var errorMsg = 'Error: Update Unsuccessful'; - console.log(errorMsg); - }, - success: function() { - statusTag.text(newText); - statusTag.removeClass(oldValue); - statusTag.addClass(newValue); - - tagContainer.data('value', newValue); - selectTag.data('value', newValue); - }, - complete: function() { - selectTag.addClass('select-container-hidden'); - tagContainer.removeClass('interactive-tag-hidden'); - }, - type: 'PATCH', - }); - } - }); -}); diff --git a/app/assets/javascripts/activeadmin_addons/all.js b/app/assets/javascripts/activeadmin_addons/all.js deleted file mode 100644 index 842b9048..00000000 --- a/app/assets/javascripts/activeadmin_addons/all.js +++ /dev/null @@ -1,14 +0,0 @@ -//= require select2-full -//= require jquery.xdan.datetimepicker.full -//= require palette-color-picker -// -//= require ./config -//= require ./inputs/select2 -//= require ./inputs/search-select -//= require ./inputs/nested-select -//= require ./inputs/tags -//= require ./inputs/selected-list -//= require ./inputs/date-time-picker -//= require ./inputs/color-picker -//= require ./addons/toggle_bool -//= require ./addons/interactive_select_tag diff --git a/app/assets/javascripts/activeadmin_addons/config.js b/app/assets/javascripts/activeadmin_addons/config.js deleted file mode 100644 index 2e2711f9..00000000 --- a/app/assets/javascripts/activeadmin_addons/config.js +++ /dev/null @@ -1,7 +0,0 @@ -$(function() { - ActiveadminAddons = { - config: { - defaultSelect: $('body').data('default-select'), - }, - }; -}); diff --git a/app/assets/javascripts/activeadmin_addons/inputs/nested-select.js b/app/assets/javascripts/activeadmin_addons/inputs/nested-select.js deleted file mode 100644 index 29142fb7..00000000 --- a/app/assets/javascripts/activeadmin_addons/inputs/nested-select.js +++ /dev/null @@ -1,161 +0,0 @@ -$.fn.select2.amd.define('select2/data/nestedCustomAdapter', ['select2/data/array', 'select2/utils'], function(ArrayData, Utils) { - function CustomData($element, options) { - CustomData.__super__.constructor.call(this, $element, options); - } - - Utils.Extend(CustomData, ArrayData); - - CustomData.prototype.query = function(params, callback) { - var data = { results: [] }; - var element = this.$element; - var collection = element.data('collection'); - var parent = element.data('parent'); - var parentId = element.data('parent-id'); - - collection.forEach(function(record) { - var regex = new RegExp(params.term, 'i'); - var matched = !!record.text.match(regex); - - if ((!parent || record[parent] == parentId) && matched) { - data.results.push(record); - } - }); - - callback(data); - }; - - CustomData.prototype.current = function(callback) { - var currentOption = null; - var element = this.$element; - var selectedOption = element.data('selected'); - var collection = element.data('collection'); - var data = []; - - $.each(collection, function(index, option) { - if (!!selectedOption && option.id == selectedOption.id) { - currentOption = option; - element.data('selected', null); - return; - } - - if (element.val() == option.id) { - currentOption = option; - return; - } - }); - - if (currentOption) { - data.push(currentOption); - } - - callback(data); - }; - - return CustomData; -}); - -$(function() { - configureSelect2(document); - - $(document).on('has_many_add:after', function(event, container) { - configureSelect2(container); - }); - - function configureSelect2(container) { - var INVALID_PARENT_ID = -1; - - $('.nested-level-input', container).each(function(i, el) { - var element = $(el); - var url = element.data('url'); - var fields = element.data('fields'); - var predicate = element.data('predicate'); - var displayName = element.data('display-name'); - var parent = element.data('parent'); - var width = element.data('width'); - var model = element.data('model'); - var responseRoot = element.data('response-root'); - var collection = element.data('collection'); - var minimumInputLength = element.data('minimum-input-length'); - var order = element.data('order'); - var parentId = element.data('parent-id'); - var selectInstance; - - var select2Config = { - width: width, - minimumInputLength: minimumInputLength, - placeholder: '', - allowClear: true, - }; - - if (collection) { - select2Config.dataAdapter = $.fn.select2.amd.require('select2/data/nestedCustomAdapter'); - } else { - var ajaxConfig = { - url: url, - dataType: 'json', - delay: 250, - cache: true, - data: function(params) { - var textQuery = { m: 'or' }; - fields.forEach(function(field) { - if (field == 'id') { - textQuery[field + '_eq'] = params.term; - } else { - textQuery[field + '_' + predicate] = params.term; - } - }); - - var query = { - order: order, - q: { - groupings: [textQuery], - combinator: 'and', - }, - }; - - if (!!parent) { - query.q[parent + '_eq'] = parentId; - } - - return query; - }, - processResults: function(data) { - if (data.constructor == Object) { - data = data[responseRoot]; - } - - return { - results: jQuery.map(data, function(resource) { - if (!resource[displayName]) { - resource[displayName] = 'No display name for id #' + resource.id.toString(); - } - return { - id: resource.id, - text: resource[displayName].toString(), - }; - }), - }; - }, - }; - - select2Config.ajax = ajaxConfig; - } - - selectInstance = element.select2(select2Config); - - function setParentValue(e) { - selectInstance.val(null).trigger('select2:select').trigger('change'); - parentId = (e.params && e.params.data.id) ? e.params.data.id : INVALID_PARENT_ID; - element.data('parent-id', parentId); - } - - if (!!parent) { - var parentSelectorId = '#' + model + '_' + parent; - var parentSelector = $(parentSelectorId)[0]; - - $(parentSelector).on('select2:select', setParentValue); - $(parentSelector).on('select2:unselect', setParentValue); - } - }); - } -}); diff --git a/app/assets/javascripts/activeadmin_addons/inputs/search-select.js b/app/assets/javascripts/activeadmin_addons/inputs/search-select.js deleted file mode 100644 index c2543f68..00000000 --- a/app/assets/javascripts/activeadmin_addons/inputs/search-select.js +++ /dev/null @@ -1,73 +0,0 @@ -$(function() { - setupSearchSelect(document); - - $(document).on('has_many_add:after', function(event, container) { - setupSearchSelect(container); - }); - - function setupSearchSelect(container) { - $('.search-select-input, .search-select-filter-input, ajax-filter-input', container).each(function(i, el) { - var element = $(el); - var url = element.data('url'); - var fields = element.data('fields'); - var predicate = element.data('predicate'); - var displayName = element.data('display-name'); - var width = element.data('width'); - var responseRoot = element.data('response-root'); - var minimumInputLength = element.data('minimum-input-length'); - var order = element.data('order'); - - var selectOptions = { - width: width, - minimumInputLength: minimumInputLength, - placeholder: '', - allowClear: true, - ajax: { - url: url, - dataType: 'json', - delay: 250, - cache: true, - data: function(params) { - var textQuery = { m: 'or' }; - fields.forEach(function(field) { - if (field == 'id') { - textQuery[field + '_eq'] = params.term; - } else { - textQuery[field + '_' + predicate] = params.term; - } - }); - - var query = { - order: order, - q: { - groupings: [textQuery], - combinator: 'and', - }, - }; - - return query; - }, - processResults: function(data) { - if (data.constructor == Object) { - data = data[responseRoot]; - } - - return { - results: jQuery.map(data, function(resource) { - if (!resource[displayName]) { - resource[displayName] = 'No display name for id #' + resource.id.toString(); - } - return { - id: resource.id, - text: resource[displayName].toString(), - }; - }), - }; - }, - }, - }; - - $(el).select2(selectOptions); - }); - } -}); diff --git a/app/assets/javascripts/activeadmin_addons/inputs/select2.js b/app/assets/javascripts/activeadmin_addons/inputs/select2.js deleted file mode 100644 index 7bb2b634..00000000 --- a/app/assets/javascripts/activeadmin_addons/inputs/select2.js +++ /dev/null @@ -1,49 +0,0 @@ -$(function() { - configureSelect2(document); - - $(document).on('has_many_add:after', function(event, container) { - configureSelect2(container); - }); - - function configureSelect2(container) { - if (ActiveadminAddons.config.defaultSelect == 'select2') { - $('select:not(.default-select)', container).each(function(i, el) { - setupSelect2(el); - }); - } - - $('select.select2', container).each(function(i, el) { - setupSelect2(el); - }); - - function setupSelect2(select) { - var selectConfig = { - placeholder: '', - width: '80%', - allowClear: true, - }; - - function isFilter(path) { - return $(select).closest(path).length > 0; - } - - if (isFilter('.select_and_search')) { - selectConfig.width = 'resolve'; - selectConfig.allowClear = false; - } else if (isFilter('.filter_select')) { - selectConfig.width = 'resolve'; - } - - $(select).select2(selectConfig); - - // Related with https://github.com/select2/select2/issues/3320 - $(select).on('select2:unselecting', function() { - $(this).data('unselecting', true); - }).on('select2:open', function() { - if ($(this).data('unselecting')) { - $(this).select2('close').removeData('unselecting'); - } - }); - } - } -}); diff --git a/app/assets/javascripts/activeadmin_addons/inputs/selected-list.js b/app/assets/javascripts/activeadmin_addons/inputs/selected-list.js deleted file mode 100644 index 529f2190..00000000 --- a/app/assets/javascripts/activeadmin_addons/inputs/selected-list.js +++ /dev/null @@ -1,104 +0,0 @@ -$(function() { - setupSelectedList(document); - - $(document).on('has_many_add:after', function(event, container) { - setupSelectedList(container); - }); - - function setupSelectedList(container) { - $('.selected-list-container').click(function(event) { - var item = $(event.target); - if (item.hasClass('selected-item')) { - item.remove(); - } - }); - - $('.selected-list-input', container).each(function(i, el) { - var element = $(el); - var url = element.data('url'); - var fields = element.data('fields'); - var predicate = element.data('predicate'); - var displayName = element.data('display-name'); - var method = element.data('method'); - var model = element.data('model'); - var prefix = model + '_' + method; - var responseRoot = element.data('response-root'); - var minimumInputLength = element.data('minimum-input-length'); - var order = element.data('order'); - - var selectOptions = { - minimumInputLength: minimumInputLength, - allowClear: true, - ajax: { - url: url, - dataType: 'json', - delay: 250, - cache: true, - data: function(params) { - var textQuery = { m: 'or' }; - fields.forEach(function(field) { - textQuery[field + '_' + predicate] = params.term; - }); - - var query = { - order: order, - q: { - groupings: [textQuery], - combinator: 'and', - }, - }; - - return query; - }, - processResults: function(data) { - if (data.constructor == Object) { - data = data[responseRoot]; - } - - return { - results: jQuery.map(data, function(resource) { - return { - id: resource.id, - text: resource[displayName].toString(), - }; - }), - }; - }, - }, - }; - - $(el).on('select2:select', onItemSelected); - $(el).on('select2:close', onSelectClosed); - $(el).select2(selectOptions); - - function onItemSelected(event) { - var data = event.params.data; - var selectedItemsContainer = $("[id='" + prefix + "_selected_values']"); - var itemName = model + '[' + method + '][]'; - var itemId = prefix + '_' + data.id; - - if ($('#' + itemId).length > 0) { - return; - } - - var item = $('
' + data.text + '
').attr({ - class: 'selected-item', - id: itemId, - }); - - var hiddenInput = $('').attr({ - name: itemName, - type: 'hidden', - value: data.id, - }); - - item.appendTo(selectedItemsContainer); - hiddenInput.appendTo(item); - } - - function onSelectClosed() { - $(el).val(null).trigger('change'); - } - }); - } -}); diff --git a/app/assets/javascripts/activeadmin_addons/inputs/tags.js b/app/assets/javascripts/activeadmin_addons/inputs/tags.js deleted file mode 100644 index 4787ae8b..00000000 --- a/app/assets/javascripts/activeadmin_addons/inputs/tags.js +++ /dev/null @@ -1,73 +0,0 @@ -$(function() { - setupTags(document); - - $(document).on('has_many_add:after', function(event, container) { - setupTags(container); - }); - - function setupTags(container) { - $('.tags-input', container).each(function(i, el) { - var model = $(el).data('model'); - var method = $(el).data('method'); - var prefix = model + '_' + method; - var isRelation = !!$(el).data('relation'); - var collection = $(el).data('collection'); - var width = $(el).data('width'); - var selectOptions = { - width: width, - multiple: true, - tags: true, - data: collection, - }; - - if (!!isRelation) { - selectOptions.createTag = function() { - return undefined; - }; - } - - $(el).on('select2:select', onItemAdded); - $(el).on('select2:unselect', onItemRemoved); - $(el).select2(selectOptions); - - function getSelectedItems() { - var choices = $(el).parent('li.input').find('.select2-selection__choice'); - return $.map(choices, function(item) { - return $(item).attr('title'); - }); - } - - function fillHiddenInput() { - var hiddenInput = $('#' + prefix); - hiddenInput.val(getSelectedItems().join()); - } - - function onItemRemoved(event) { - if (isRelation) { - var itemId = '[id=\'' + prefix + '_' + event.params.data.id + '\']'; - $(itemId).remove(); - } else { - fillHiddenInput(); - } - } - - function onItemAdded(event) { - if (isRelation) { - var value = event.params.data.id; - var selectedItemsContainer = $("[id='" + prefix + "_selected_values']"); - var itemName = model + '[' + method + '][]'; - var itemId = prefix + '_' + value; - - $('').attr({ - id: itemId, - name: itemName, - type: 'hidden', - value: value, - }).appendTo(selectedItemsContainer); - } else { - fillHiddenInput(); - } - } - }); - } -}); diff --git a/app/assets/stylesheets/activeadmin_addons/addons/toggle_bool.scss b/app/assets/stylesheets/activeadmin_addons/addons/toggle_bool.scss deleted file mode 100644 index ef6a9e33..00000000 --- a/app/assets/stylesheets/activeadmin_addons/addons/toggle_bool.scss +++ /dev/null @@ -1,11 +0,0 @@ -.toggle-bool-switches-container { - text-align: center; - - .toggle-bool-switch { - cursor: pointer; - - &.hidden-switch { - display: none; - } - } -} diff --git a/app/assets/stylesheets/activeadmin_addons/inputs/select2.scss b/app/assets/stylesheets/activeadmin_addons/inputs/select2.scss deleted file mode 100644 index 9b7c6038..00000000 --- a/app/assets/stylesheets/activeadmin_addons/inputs/select2.scss +++ /dev/null @@ -1,3 +0,0 @@ -.select2-search__field { - line-height: 20px; -} diff --git a/app/inputs/active_admin/inputs/select_input.rb b/app/inputs/active_admin/inputs/select_input.rb new file mode 100644 index 00000000..7d0b7ce9 --- /dev/null +++ b/app/inputs/active_admin/inputs/select_input.rb @@ -0,0 +1,19 @@ +class ActiveAdmin::Inputs::SelectInput < Formtastic::Inputs::SelectInput + def input_html_options + if @options[:tags].present? + super.deep_merge(class: 'simple-tags-input') + else + super + end + end + + def raw_collection + field_value = begin + object.send(method) + rescue NoMethodError + nil + end + + @options[:tags].present? && field_value.present? ? (super.to_a << field_value).uniq : super + end +end diff --git a/app/inputs/date_range_input.rb b/app/inputs/date_range_input.rb new file mode 100644 index 00000000..5ef9aab3 --- /dev/null +++ b/app/inputs/date_range_input.rb @@ -0,0 +1,11 @@ +class DateRangeInput < ActiveAdmin::Inputs::Filters::DateRangeInput + if instance_methods(true).include?(:input_html_options_for) + def input_html_options + super.except(:maxlength, :size).merge(autocomplete: 'off') + end + else + def input_html_options(input_name = gt_input_name, placeholder = gt_input_placeholder) + super(input_name, placeholder).except(:maxlength, :size).merge(autocomplete: 'off') + end + end +end diff --git a/app/inputs/date_time_picker_filter_input.rb b/app/inputs/date_time_picker_filter_input.rb new file mode 100644 index 00000000..c9117858 --- /dev/null +++ b/app/inputs/date_time_picker_filter_input.rb @@ -0,0 +1,26 @@ +class DateTimePickerFilterInput < ActiveAdminAddons::InputBase + include ActiveAdminAddons::FilterInput + + def load_control_attributes + load_attr(:picker_options, default: {}) + end + + def render_custom_input + concat(label_html) + concat_date_time_picker_field(gteq_input_name) + concat_date_time_picker_field(lteq_input_name) + end + + def concat_date_time_picker_field(control_name) + concat(builder.input(control_name, date_time_picker_options(control_name))) + end + + def date_time_picker_options(input_name = gteq_input_name) + is_gt = (input_name == gteq_input_name) + + input_html_options.merge( + as: :date_time_picker, + placeholder: is_gt ? "min" : "max" + ) + end +end diff --git a/app/inputs/date_time_picker_input.rb b/app/inputs/date_time_picker_input.rb index eef9528f..5af508c9 100644 --- a/app/inputs/date_time_picker_input.rb +++ b/app/inputs/date_time_picker_input.rb @@ -25,6 +25,7 @@ def load_control_attributes load_class(@options[:class]) load_data_attr(:picker_options, value: datetime_picker_options) load_attr(:maxlength, value: 19) + load_attr(:autocomplete, value: 'off') load_attr(:value, value: formatted_input_value) end @@ -42,9 +43,8 @@ def formatted_input_value def datetime_picker_options @datetime_picker_options ||= begin - opts = options.fetch(:picker_options, {}) - opts = Hash[opts.map { |k, v| [k.to_s.camelcase(:lower), v] }] - default_picker_options.merge(opts) + opts = default_picker_options.merge(options.fetch(:picker_options, {})) + Hash[opts.map { |k, v| [k.to_s.camelcase(:lower), v] }] end end diff --git a/app/inputs/nested_level_input.rb b/app/inputs/nested_level_input.rb index 42a3c49f..d56b2886 100644 --- a/app/inputs/nested_level_input.rb +++ b/app/inputs/nested_level_input.rb @@ -1,4 +1,4 @@ -class NestedLevelInput < ActiveAdminAddons::InputBase +class NestedLevelInput < ActiveAdminAddons::SelectInputBase include ActiveAdminAddons::SelectHelpers def render_custom_input @@ -13,35 +13,42 @@ def render_custom_input private + # rubocop:disable Metrics/MethodLength def load_control_attributes load_class(@options[:class]) + load_data_attr(:association, value: association_name) load_data_attr(:fields, default: ["name"], formatter: :to_json) - load_data_attr(:predicate, default: "contains") + load_data_attr(:predicate, default: "cont") + load_data_attr(:filters) load_data_attr(:model, value: model_name) load_data_attr(:display_name, default: "name") load_data_attr(:minimum_input_length, default: 1) load_data_attr(:url, default: url_from_method) load_data_attr(:response_root, default: tableize_method) - load_data_attr(:width, default: "80%") + load_data_attr(:width) load_data_attr(:order, - value: @options[:order_by], - default: get_data_attr_value(:fields).first.to_s + "_desc") + value: @options[:order_by], + default: "#{get_data_attr_value(:fields).first}_desc") load_parent_data_options load_collection_data end + # rubocop:enable Metrics/MethodLength def load_parent_data_options return unless @options[:parent_attribute] + load_data_attr(:parent, value: @options[:parent_attribute]) - load_data_attr(:parent_id, value: @object.send(@options[:parent_attribute]), default: -1) + load_data_attr( + :parent_id, value: @object.send(@options[:parent_id_attribute]), default: -1 + ) end def load_collection_data return unless @options[:collection] collection_options = collection_to_select_options do |item, option| - if !!@options[:parent_attribute] - option[@options[:parent_attribute]] = item.send(@options[:parent_attribute]) + if @options[:parent_attribute].present? + option[@options[:parent_attribute]] = item.send(@options[:parent_id_attribute]) end end diff --git a/app/inputs/nested_select_input.rb b/app/inputs/nested_select_input.rb index 5a2c87bf..1264d238 100644 --- a/app/inputs/nested_select_input.rb +++ b/app/inputs/nested_select_input.rb @@ -15,6 +15,7 @@ def for_each_level def hierarchy data = get_levels_data raise("Undefined levels on nested_select") if data.empty? + set_parent_attributes(data) data.reverse end @@ -58,30 +59,46 @@ def set_parent_attributes(hierarchy) parent_level_data = hierarchy[next_idx] if hierarchy.count != next_idx if parent_level_data level_data[:parent_attribute] = parent_level_data[:attribute] + level_data[:parent_id_attribute] = "#{level_data[:parent_attribute]}_id" set_parent_value(level_data) end end end def set_parent_value(level_data) - parent_attribute = level_data[:parent_attribute] - build_virtual_attr(parent_attribute) - instance = instance_from_attribute_name(level_data[:attribute]) - if instance && instance.respond_to?(parent_attribute) - @object.send("#{parent_attribute}=", instance.send(parent_attribute)) + build_virtual_attr(level_data[:parent_attribute]) + build_virtual_attr(level_data[:parent_id_attribute]) + instance = instance_from_attribute_id("#{level_data[:attribute]}_id") + if instance.respond_to?(level_data[:parent_id_attribute]) + @object.send( + "#{level_data[:parent_attribute]}=", instance.send(level_data[:parent_attribute]) + ) + @object.send( + "#{level_data[:parent_id_attribute]}=", instance.send(level_data[:parent_id_attribute]) + ) end end - def instance_from_attribute_name(attribute) - return unless attribute - attribute_value = @object.send(attribute) - return unless attribute_value - klass = attribute.to_s.chomp("_id").camelize.constantize - klass.find_by_id(attribute_value) + def instance_from_attribute_id(attribute_id) + return unless attribute_id + + attribute_id_value = @object.send(attribute_id) + return unless attribute_id_value + + klass = class_from_attribute_id(attribute_id) + klass.find_by(id: attribute_id_value) + end + + def class_from_attribute_id(attribute_id) + association_name = attribute_id.to_s.chomp("_id") + association_name.camelize.constantize + rescue NameError + object_class.reflect_on_association(association_name).klass end def build_virtual_attr(attribute_name) - fail "#{attribute_name} is already defined" if @object.respond_to?(attribute_name) - @object.singleton_class.send(:attr_accessor, attribute_name) + if !@object.respond_to?(attribute_name) && !@object.respond_to?("#{attribute_name}=") + @object.singleton_class.send(:attr_accessor, attribute_name) + end end end diff --git a/app/inputs/search_select_filter_input.rb b/app/inputs/search_select_filter_input.rb index 73ed3156..3ed8ef44 100644 --- a/app/inputs/search_select_filter_input.rb +++ b/app/inputs/search_select_filter_input.rb @@ -7,6 +7,20 @@ def load_control_attributes end def input_method - eq_input_name + "#{input_name}_eq" + end + + def input_html_options_name + "#{object_name}[#{input_method}]" + end + + def input_value + result = valid_object.conditions.find do |condition| + condition.attributes.map(&:name).include?(input_name.to_s) + end + + return unless result + + result.values.first.value end end diff --git a/app/inputs/search_select_input.rb b/app/inputs/search_select_input.rb index cb96250f..02688f0b 100644 --- a/app/inputs/search_select_input.rb +++ b/app/inputs/search_select_input.rb @@ -1,10 +1,11 @@ -class SearchSelectInput < ActiveAdminAddons::InputBase +class SearchSelectInput < ActiveAdminAddons::SelectInputBase include ActiveAdminAddons::SelectHelpers def render_custom_input concat(label_html) - concat(builder.select(input_method, - initial_collection_to_select_options, {}, input_html_options)) + concat( + builder.select(input_method, initial_collection_to_select_options, {}, input_html_options) + ) end def input_method @@ -14,16 +15,16 @@ def input_method def load_control_attributes load_class(@options[:class]) load_data_attr(:fields, default: ["name"], formatter: :to_json) - load_data_attr(:predicate, default: "contains") + load_data_attr(:predicate, default: "cont") load_data_attr(:url, default: url_from_method) load_data_attr(:response_root, default: tableize_method) load_data_attr(:display_name, default: "name") load_data_attr(:minimum_input_length, default: 1) - load_data_attr(:width, default: "80%") + load_data_attr(:width) load_data_attr( :order, value: @options[:order_by], - default: get_data_attr_value(:fields).first.to_s + "_desc" + default: "#{get_data_attr_value(:fields).first}_desc" ) end end diff --git a/app/inputs/selected_list_input.rb b/app/inputs/selected_list_input.rb index 188c54b2..0fc904ad 100644 --- a/app/inputs/selected_list_input.rb +++ b/app/inputs/selected_list_input.rb @@ -11,7 +11,7 @@ def load_control_attributes load_data_attr(:url, default: url_from_method) load_data_attr(:response_root, default: tableize_method) load_data_attr(:fields, default: ["name"], formatter: :to_json) - load_data_attr(:predicate, default: "contains") + load_data_attr(:predicate, default: "cont") load_data_attr(:display_name, default: "name") load_data_attr(:minimum_input_length, default: 1) load_data_attr(:width, default: "100%") diff --git a/app/inputs/tags_input.rb b/app/inputs/tags_input.rb index 470e1292..36b5e4a0 100644 --- a/app/inputs/tags_input.rb +++ b/app/inputs/tags_input.rb @@ -1,18 +1,13 @@ -class TagsInput < ActiveAdminAddons::InputBase +class TagsInput < ActiveAdminAddons::SelectInputBase include ActiveAdminAddons::SelectHelpers def render_custom_input - if active_record_select? - return render_collection_tags - end - - render_array_tags + render_collection_tags end def load_control_attributes - load_data_attr(:model, value: model_name) - load_data_attr(:method, value: method) - load_data_attr(:width, default: "80%") + @options[:multiple] = true + load_data_attr(:width) if active_record_select? load_data_attr(:relation, value: true) @@ -24,32 +19,8 @@ def load_control_attributes private - def render_array_tags - render_tags_control { build_hidden_control(prefixed_method, method_to_input_name, input_value) } - end - def render_collection_tags - render_tags_control { render_selected_hidden_items } - end - - def render_tags_control(&block) concat(label_html) - concat(block.call) - concat(builder.select(build_virtual_attr, [], {}, input_html_options)) - end - - def render_selected_hidden_items - template.content_tag(:div, id: selected_values_id) do - template.concat(build_hidden_control(empty_input_id, method_to_input_array_name, "")) - input_value.each do |item_id| - template.concat( - build_hidden_control( - method_to_input_id(item_id), - method_to_input_array_name, - item_id.to_s - ) - ) - end - end + concat(builder.select(method, [], input_options, input_html_options)) end end diff --git a/app/javascript/activeadmin_addons/addons/slim-select-interactive-tag.js b/app/javascript/activeadmin_addons/addons/slim-select-interactive-tag.js new file mode 100644 index 00000000..0494f616 --- /dev/null +++ b/app/javascript/activeadmin_addons/addons/slim-select-interactive-tag.js @@ -0,0 +1,78 @@ +import SlimSelect from 'slim-select'; + +function updateTag(url, data) { + return fetch(url, { + method: 'PATCH', + headers: { + 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content, + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }); +} + +function setupSelect(el) { + if (el.slim) { + el.slim.destroy(); + } + + return new SlimSelect({ + select: el, + events: { + // eslint-disable-next-line max-statements + afterClose: () => { + const containerEl = el.closest('.tag-select-container'); + const selectContainer = containerEl.querySelector('.interactive-tag-select'); + const tagContainer = containerEl.querySelector('.interactive-tag'); + const model = tagContainer.dataset.model; + const objectId = tagContainer.dataset.objectId; + const field = tagContainer.dataset.field; + + if (el.value === tagContainer.dataset.value) { + selectContainer.classList.add('select-container-hidden'); + containerEl.querySelector('.interactive-tag').classList.remove('interactive-tag-hidden'); + } else { + const data = { id: objectId }; + data[model] = {}; + data[model][field] = el.value; + updateTag(tagContainer.dataset.url, data) + .then(() => { + const statusTag = tagContainer.querySelector('.status_tag'); + statusTag.innerText = el.selectedOptions[0].text; + statusTag.classList.remove(tagContainer.dataset.value); + statusTag.classList.add(el.value); + tagContainer.dataset.value = el.value; + selectContainer.dataset.value = el.value; + }) + .catch(() => { + const errorMsg = 'Error: Update Unsuccessful'; + console.log(errorMsg); + }) + .finally(() => { + selectContainer.classList.add('select-container-hidden'); + containerEl.querySelector('.interactive-tag').classList.remove('interactive-tag-hidden'); + }); + } + }, + }, + }); +} + +function setupInteractiveTag(containerEl) { + const selectContainer = containerEl.querySelector('.interactive-tag-select'); + const slimSelect = setupSelect(selectContainer.querySelector('select')); + const tag = containerEl.querySelector('.interactive-tag'); + + tag.addEventListener('click', () => { + selectContainer.classList.remove('select-container-hidden'); + tag.classList.add('interactive-tag-hidden'); + window.setTimeout(() => { + slimSelect.open(); + }, 0); + }); +} + +window.addEventListener('load', () => { + document.querySelectorAll('.tag-select-container').forEach(setupInteractiveTag); +}); diff --git a/app/assets/javascripts/activeadmin_addons/addons/toggle_bool.js b/app/javascript/activeadmin_addons/addons/toggle_bool.js similarity index 51% rename from app/assets/javascripts/activeadmin_addons/addons/toggle_bool.js rename to app/javascript/activeadmin_addons/addons/toggle_bool.js index a8ea22b9..fd68fe54 100644 --- a/app/assets/javascripts/activeadmin_addons/addons/toggle_bool.js +++ b/app/javascript/activeadmin_addons/addons/toggle_bool.js @@ -1,36 +1,53 @@ -$(function() { +var initializer = function() { $('.toggle-bool-switch').click(function(e) { var boolSwitch = $(e.target); - var model = boolSwitch.data('model'); + + var value = boolSwitch.data('value'); + var confirmMessage = boolSwitch.data('confirm_message'); + var confirmTrigger = boolSwitch.data('confirm_message_trigger') || 'both'; + + if (confirmMessage) { + var shouldConfirm = + (confirmTrigger === 'both') || + (confirmTrigger === 'on' && !value) || + (confirmTrigger === 'off' && value); + + if (shouldConfirm && !confirm(confirmMessage)) { + return false; + } + } var objectId = boolSwitch.data('object_id'); + var model = boolSwitch.data('model'); var field = boolSwitch.data('field'); - var value = boolSwitch.data('value'); - var otherValue = String(value) !== 'true'; - var switchId = boolSwitch.attr('id'); - var otherSwitch = $('#' + switchId.substr(0, switchId.lastIndexOf('-') + 1) + otherValue); + var url = boolSwitch.data('url'); + var value = boolSwitch.data('value'); var successMessage = boolSwitch.data('success_message'); var data = { id: objectId }; data[model] = {}; - data[model][field] = otherValue; + data[model][field] = !value; + $.ajax({ url: url, data: data, dataType: 'json', + headers : {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, error: function() { var errorMsg = 'Error: Update Unsuccessful'; alert(errorMsg); }, success: function() { - boolSwitch.addClass('hidden-switch'); - otherSwitch.removeClass('hidden-switch'); + boolSwitch.data('value', !value); + boolSwitch.toggleClass('on'); if (!boolSwitch.hasClass('notify-success')) return; $(function() { - var successMsg = 'Update Successful!'; setTimeout(alert(successMessage), 500); }); }, type: 'PATCH', }); }); -}); +}; + +$(initializer); +$(document).on('turbolinks:load turbo:load', initializer); diff --git a/app/javascript/activeadmin_addons/all.js b/app/javascript/activeadmin_addons/all.js new file mode 100644 index 00000000..f4c92eff --- /dev/null +++ b/app/javascript/activeadmin_addons/all.js @@ -0,0 +1,9 @@ +import 'jquery-datetimepicker'; +import './vendor/jquery_palette_color_picker/palette-color-picker'; + +import './config'; +import './inputs/slim-select'; +import './inputs/date-time-picker'; +import './inputs/color-picker'; +import './addons/toggle_bool'; +import './addons/slim-select-interactive-tag'; diff --git a/app/javascript/activeadmin_addons/config.js b/app/javascript/activeadmin_addons/config.js new file mode 100644 index 00000000..41698408 --- /dev/null +++ b/app/javascript/activeadmin_addons/config.js @@ -0,0 +1,13 @@ +const loadEvents = ['turbo:load', 'turbolinks:load', 'DOMContentLoaded']; + +function initializer() { + window.ActiveadminAddons = { + config: { + defaultSelect: document.querySelector('body').dataset.defaultSelect, + }, + }; +} + +loadEvents.forEach((event) => { + document.addEventListener(event, initializer); +}); diff --git a/app/assets/javascripts/activeadmin_addons/inputs/color-picker.js b/app/javascript/activeadmin_addons/inputs/color-picker.js similarity index 69% rename from app/assets/javascripts/activeadmin_addons/inputs/color-picker.js rename to app/javascript/activeadmin_addons/inputs/color-picker.js index a8d087e1..f9caedd9 100644 --- a/app/assets/javascripts/activeadmin_addons/inputs/color-picker.js +++ b/app/javascript/activeadmin_addons/inputs/color-picker.js @@ -1,4 +1,4 @@ -$(function() { +var initializer = function() { setupColorPicker(); $(document).on('has_many_add:after', setupColorPicker); @@ -10,4 +10,7 @@ $(function() { }); }); } -}); +}; + +$(initializer); +$(document).on('turbolinks:load turbo:load', initializer); diff --git a/app/assets/javascripts/activeadmin_addons/inputs/date-time-picker.js b/app/javascript/activeadmin_addons/inputs/date-time-picker.js similarity index 86% rename from app/assets/javascripts/activeadmin_addons/inputs/date-time-picker.js rename to app/javascript/activeadmin_addons/inputs/date-time-picker.js index d35597c3..18a9ec2b 100644 --- a/app/assets/javascripts/activeadmin_addons/inputs/date-time-picker.js +++ b/app/javascript/activeadmin_addons/inputs/date-time-picker.js @@ -1,4 +1,4 @@ -$(function() { +var initializer = function() { setupDateTimePicker(document); $(document).on('has_many_add:after', '.has_many_container', function(event, fieldset) { @@ -22,4 +22,7 @@ $(function() { return $(entry).datetimepicker(mixedOptions); }); } -}); +}; + +$(initializer); +$(document).on('turbolinks:load turbo:load', initializer); diff --git a/app/javascript/activeadmin_addons/inputs/slim-select-nested.js b/app/javascript/activeadmin_addons/inputs/slim-select-nested.js new file mode 100644 index 00000000..f772baf9 --- /dev/null +++ b/app/javascript/activeadmin_addons/inputs/slim-select-nested.js @@ -0,0 +1,95 @@ +import { ransackSearch } from './slim-select-utils'; + +const classes = ['nested-level-input']; + +function ajaxSearch(search, currentData, args) { + args.fields.forEach((field) => { + if (field === 'id') { + args.textQuery[`${field}_eq`] = search; + } else { + args.textQuery[`${field}_${args.predicate}`] = search; + } + }); + + if (!!args.parent) { + args.query.q[`${args.parent}_id_eq`] = args.parentId; + } + + args.query.q = { ...args.query.q, ...args.filters }; + + return ransackSearch(search, currentData, args); +} + +function collectionSearch(search, args, collection) { + if (search.length < args.minimumInputLength) { + return Promise.reject('Search term too short'); + } + + const data = JSON.parse(collection).filter( + (item) => (!args.parent || item[args.parent] === Number(args.parentId)) && + String(item.text).toLowerCase().includes(search.toLowerCase()), + ).map( + (item) => ({ value: String(item.id), text: item.text }), + ); + + return Promise.resolve(data); +} + +function settings(el) { + return { + settings: { + allowDeselect: true, + }, + events: { + beforeOpen: () => { + if (Number(el.dataset.minimumInputLength) === 0) { + el.slim.search(''); + } + }, + afterChange: () => { + const { model, association } = el.dataset; + const child = el.closest('.nested_level') + .parentNode + .querySelector(`.nested_level [data-model=${model}][data-parent=${association}]`); + + if (child) { + child.slim.setSelected(); + child.slim.setData([]); + if (child.slim.events.afterChange) { + child.slim.events.afterChange(); + } + child.dispatchEvent(new Event('change')); + child.dataset.parentId = el.value; + } + }, + search(search, currentData) { + const args = { + url: el.dataset.url, + fields: el.dataset.fields && JSON.parse(el.dataset.fields) || {}, + predicate: el.dataset.predicate, + filters: el.dataset.filters && JSON.parse(el.dataset.filters) || {}, + displayName: el.dataset.displayName, + parent: el.dataset.parent, + parentId: el.dataset.parentId, + responseRoot: el.dataset.responseRoot, + minimumInputLength: el.dataset.minimumInputLength, + order: el.dataset.order, + textQuery: { m: 'or' }, + query: { q: {} }, + }; + + if (el.dataset.collection) { + return collectionSearch(search, args, el.dataset.collection); + } + + return ajaxSearch(search, currentData, args); + }, + }, + }; +} + +export { + settings, + classes, +}; + diff --git a/app/javascript/activeadmin_addons/inputs/slim-select-search.js b/app/javascript/activeadmin_addons/inputs/slim-select-search.js new file mode 100644 index 00000000..57d563c7 --- /dev/null +++ b/app/javascript/activeadmin_addons/inputs/slim-select-search.js @@ -0,0 +1,37 @@ +import { ransackSearch } from './slim-select-utils'; + +const classes = ['search-select-input', 'search-select-filter-input', 'ajax-filter-input']; + +function settings(el) { + const url = el.dataset.url; + const fields = JSON.parse(el.dataset.fields); + const predicate = el.dataset.predicate; + const displayName = el.dataset.displayName; + const responseRoot = el.dataset.responseRoot; + const minimumInputLength = el.dataset.minimumInputLength; + const order = el.dataset.order; + + const args = { url, fields, predicate, displayName, responseRoot, minimumInputLength, order }; + + return { + events: { + search: (search, currentData) => { + args.textQuery = { m: 'or' }; + args.fields.forEach((field) => { + if (field === 'id') { + args.textQuery[`${field}_eq`] = search; + } else { + args.textQuery[`${field}_${args.predicate}`] = search; + } + }); + + return ransackSearch(search, currentData, args); + }, + }, + }; +} + +export { + settings, + classes, +}; diff --git a/app/javascript/activeadmin_addons/inputs/slim-select-selected-list.js b/app/javascript/activeadmin_addons/inputs/slim-select-selected-list.js new file mode 100644 index 00000000..d6f711d0 --- /dev/null +++ b/app/javascript/activeadmin_addons/inputs/slim-select-selected-list.js @@ -0,0 +1,103 @@ +import { ransackSearch } from './slim-select-utils'; + +const classes = ['selected-list-input']; + +// eslint-disable-next-line max-statements +function settings(el) { + const url = el.dataset.url; + const fields = JSON.parse(el.dataset.fields); + const predicate = el.dataset.predicate; + const displayName = el.dataset.displayName; + const method = el.dataset.method; + const model = el.dataset.model; + const prefix = `${model}_${method}`; + const responseRoot = el.dataset.responseRoot; + const minimumInputLength = el.dataset.minimumInputLength; + const order = el.dataset.order; + + const args = { url, fields, predicate, displayName, responseRoot, minimumInputLength, order }; + + return { + settings: { + allowDeselect: false, + }, + events: { + // eslint-disable-next-line max-statements + afterChange: (newVal) => { + if (!newVal || newVal[0] && !newVal[0].value) return; + + const selectedItemsContainer = document.querySelector(`[id='${prefix}_selected_values']`); + const itemName = `${model}[${method}][]`; + + // eslint-disable-next-line max-statements + newVal.forEach((data) => { + const itemId = `${prefix}_${data.value}`; + if (!!document.querySelector(`#${itemId}`)) { + return; + } + + const item = document.createElement('div'); + item.id = itemId; + item.textContent = data.text; + item.classList.add('selected-item'); + + const hiddenInput = document.createElement('input'); + hiddenInput.name = itemName; + hiddenInput.type = 'hidden'; + hiddenInput.value = data.value; + + item.appendChild(hiddenInput); + selectedItemsContainer.appendChild(item); + }); + el.slim.setSelected(); + }, + search: (search, currentData) => { + args.textQuery = { m: 'or' }; + args.fields.forEach((field) => { + args.textQuery[`${field}_${predicate}`] = search; + }); + + return ransackSearch(search, currentData, args); + }, + }, + }; +} + +function setupSelectedList(containerEl) { + containerEl.addEventListener('click', (event) => { + const item = event.target; + if (item.classList.contains('selected-item')) { + item.remove(); + } + }); +} + +function setupSelectedLists(node) { + node.querySelectorAll('.selected-list-container').forEach(setupSelectedList); +} + +function mutationObserver() { + return new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if (mutation.type === 'childList') { + mutation.addedNodes.forEach((node) => { + if (node instanceof Element) { + setupSelectedLists(node); + } + }); + } + }); + }); +} + +function init() { + setupSelectedLists(document); + mutationObserver(); +} + +export { + settings, + classes, + init, +}; + diff --git a/app/javascript/activeadmin_addons/inputs/slim-select-simple-tags.js b/app/javascript/activeadmin_addons/inputs/slim-select-simple-tags.js new file mode 100644 index 00000000..f1333301 --- /dev/null +++ b/app/javascript/activeadmin_addons/inputs/slim-select-simple-tags.js @@ -0,0 +1,22 @@ +const classes = ['simple-tags-input']; + +function init(el) { + el.multiple = true; + if (!el.value) { + el.value = null; + } +} + +function settings() { + return { + events: { + addable: (value) => value, + }, + }; +} + +export { + classes, + init, + settings, +}; diff --git a/app/javascript/activeadmin_addons/inputs/slim-select-tags.js b/app/javascript/activeadmin_addons/inputs/slim-select-tags.js new file mode 100644 index 00000000..32fc2b21 --- /dev/null +++ b/app/javascript/activeadmin_addons/inputs/slim-select-tags.js @@ -0,0 +1,28 @@ +const classes = ['tags-input']; + +// eslint-disable-next-line max-statements +function settings(el) { + const isRelation = el.dataset.relation === 'true'; + const collection = el.dataset.collection ? JSON.parse(el.dataset.collection) : null; + + const parsedCollection = collection && collection.map((item) => { + const { id, ...rest } = item; + + return { ...rest, value: id, selected: !!item.selected }; + }); + + const events = {}; + if (!isRelation) { + events.addable = (value) => value; + } + + return { + data: parsedCollection, + events, + }; +} + +export { + settings, + classes, +}; diff --git a/app/javascript/activeadmin_addons/inputs/slim-select-utils.js b/app/javascript/activeadmin_addons/inputs/slim-select-utils.js new file mode 100644 index 00000000..82bd204a --- /dev/null +++ b/app/javascript/activeadmin_addons/inputs/slim-select-utils.js @@ -0,0 +1,70 @@ +import merge from 'lodash.merge'; + +function parseObjectToQuery(obj, prefix) { + let queryArray = []; + Object.keys(obj).forEach(key => { + const value = obj[key]; + const prefixedKey = prefix ? `${prefix}[${key}]` : key; + if (Array.isArray(value)) { + value.forEach((v, i) => { + queryArray = [...queryArray, parseObjectToQuery(v, `${prefixedKey}[${i}]`)]; + }); + } else if (typeof value === 'object') { + queryArray = [...queryArray, parseObjectToQuery(value, prefixedKey)]; + } else { + queryArray.push(`${prefixedKey}=${encodeURIComponent(value)}`); + } + }); + + return queryArray.join('&'); +} + +export function ransackSearch(search, currentData, settings) { + return new Promise((resolve, reject) => { + if (search.length < settings.minimumInputLength) { + reject(`Please enter ${settings.minimumInputLength} or more characters`); + } + + const defaultQuery = { + order: settings.order, + q: { + groupings: [settings.textQuery], + combinator: 'and', + }, + }; + + const finalQuery = merge({}, defaultQuery, settings.query); + const csrfTokenEl = document.querySelector('meta[name="csrf-token"]'); + const csrfToken = csrfTokenEl ? csrfTokenEl.getAttribute('content') : null; + + const queryString = parseObjectToQuery(finalQuery); + fetch(`${settings.url}?${queryString}`, { + method: 'GET', + headers: { + 'X-CSRF-TOKEN': csrfToken, + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + }) + .then((response) => response.json()) + .then((res) => { + let data = res; + if (data.constructor === Object) { + data = data[settings.responseRoot]; + } + + const options = data.map(resource => { + if (!resource[settings.displayName]) { + resource[settings.displayName] = `No display name for id #${resource.id.toString()}`; + } + + return { + value: resource.id, + text: resource[settings.displayName], + }; + }); + + resolve(options); + }); + }); +} diff --git a/app/javascript/activeadmin_addons/inputs/slim-select.js b/app/javascript/activeadmin_addons/inputs/slim-select.js new file mode 100644 index 00000000..ce6d2588 --- /dev/null +++ b/app/javascript/activeadmin_addons/inputs/slim-select.js @@ -0,0 +1,93 @@ +import SlimSelect from 'slim-select'; +import merge from 'lodash.merge'; + +import * as searchSelect from './slim-select-search'; +import * as simpleTagsSelect from './slim-select-simple-tags'; +import * as nestedSelect from './slim-select-nested'; +import * as selectedListSelect from './slim-select-selected-list'; +import * as tagsSelect from './slim-select-tags'; + +const SELECT_CLASS = 'select:not(.default-select)'; +const SLIM_SELECT_CLASS = 'select.slim-select'; + +const selectTypes = { + searchSelect, + simpleTagsSelect, + nestedSelect, + selectedListSelect, + tagsSelect, +}; + +// eslint-disable-next-line max-statements, complexity +function setupSelect(el) { + let settings = { + select: el, + settings: { + allowDeselect: true, + placeholderText: 'Select Value', + }, + }; + + const selectStyles = window.getComputedStyle(el); + el.style.width = el.dataset.width; + el.style.fontSize = selectStyles.fontSize; + + const searchSelectFilter = el.closest('.filter_form_field'); + if (searchSelectFilter) { + if (searchSelectFilter.classList.contains('search_select_filter') || + searchSelectFilter.classList.contains('filter_string')) { + settings.settings.allowDeselect = false; + } + + if (el.options.length > 0) { + el.style.width = el.dataset.width || selectStyles.width; + if (selectStyles.display === 'inline-block') { + el.style.display = 'inline-flex'; + } + } + } + + const emptyOption = el.querySelector('option[value=""]'); + if (!emptyOption) { + el.insertAdjacentHTML('afterbegin', ''); + } + el.querySelector('option[value=""]').dataset.placeholder = true; + + Object.keys(selectTypes).forEach((type) => { + if (selectTypes[type].classes.some((className) => el.classList.contains(className))) { + settings = merge({}, settings, selectTypes[type].settings(el)); + if (selectTypes[type].init) { + selectTypes[type].init(el); + } + } + }); + + // eslint-disable-next-line no-new + new SlimSelect(settings); +} + +function initSelects(node = document) { + if (document.querySelector('body').dataset.defaultSelect === 'slim-select') { + node.querySelectorAll(SELECT_CLASS).forEach(setupSelect); + } + + node.querySelectorAll(SLIM_SELECT_CLASS).forEach(setupSelect); +} + +// mutation observer to add slim select to new elements +const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if (mutation.type === 'childList') { + mutation.addedNodes.forEach((node) => { + if (node instanceof Element) { + initSelects(node); + } + }); + } + }); +}); + +window.addEventListener('load', () => { + initSelects(); + observer.observe(document.querySelector('body'), { attributes: false, childList: true, subtree: true }); +}); diff --git a/app/assets/stylesheets/activeadmin_addons/addons/interactive_select_tag.scss b/app/javascript/activeadmin_addons/stylesheets/addons/interactive_select_tag.scss similarity index 100% rename from app/assets/stylesheets/activeadmin_addons/addons/interactive_select_tag.scss rename to app/javascript/activeadmin_addons/stylesheets/addons/interactive_select_tag.scss diff --git a/app/javascript/activeadmin_addons/stylesheets/addons/toggle_bool.scss b/app/javascript/activeadmin_addons/stylesheets/addons/toggle_bool.scss new file mode 100644 index 00000000..86b01b9b --- /dev/null +++ b/app/javascript/activeadmin_addons/stylesheets/addons/toggle_bool.scss @@ -0,0 +1,52 @@ +$inactive-bg: #6a7176; +$inactive-shadow: #4d5256; +$active-bg: #4dbcff; +$active-shadow: #2f749e; +$button-bg: #fff; +$button-shadow: #dfe1e2; + +$box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 0 1px #fff inset; + +.toggle-bool-switches-container { + text-align: center; + + .toggle-bool-switch { + cursor: pointer; + + background: $inactive-bg; + background-image: linear-gradient(180deg, $inactive-bg, $inactive-shadow); + box-shadow: $box-shadow; + + width: 40px; + height: 16px; + display: inline-block; + position: relative; + + &::before { + content: ''; + + background: $button-bg; + background-image: linear-gradient(180deg, $button-bg, $button-shadow); + box-shadow: $box-shadow; + + display: inline-block; + width: 20px; + height: 12px; + position: absolute; + left: 3px; + top: 2px; + + transition: all .25s linear; + transform: translateX(0); + } + + &.on { + background: $active-bg; + background-image: linear-gradient(180deg, $active-bg, $active-shadow); + + &::before { + left: calc(100% - 23px); + } + } + } +} diff --git a/app/assets/stylesheets/activeadmin_addons/all.scss b/app/javascript/activeadmin_addons/stylesheets/all.scss similarity index 55% rename from app/assets/stylesheets/activeadmin_addons/all.scss rename to app/javascript/activeadmin_addons/stylesheets/all.scss index 8cf56a61..4be0751c 100644 --- a/app/assets/stylesheets/activeadmin_addons/all.scss +++ b/app/javascript/activeadmin_addons/stylesheets/all.scss @@ -1,19 +1,14 @@ -@import 'select2'; -@import 'jquery.xdan.datetimepicker'; -@import 'palette-color-picker'; +@import 'imports/jquery-datepicker'; +@import 'vendor/palette-color-picker'; +@import 'imports/slimselect'; + +$error-color: #932419; @import 'inputs/numeric-range-filter'; +@import 'inputs/date-time-picker-filter'; @import 'inputs/color-picker'; @import 'inputs/date-time-picker'; -@import 'inputs/select2'; @import 'inputs/selected-list'; +@import 'inputs/slim-select'; @import 'addons/toggle_bool'; @import 'addons/interactive_select_tag'; - -$error-color: #932419; - -li.error { - .select2-selection { - border-color: $error-color; - } -} diff --git a/app/javascript/activeadmin_addons/stylesheets/imports/jquery-datepicker.scss b/app/javascript/activeadmin_addons/stylesheets/imports/jquery-datepicker.scss new file mode 100644 index 00000000..4ed981aa --- /dev/null +++ b/app/javascript/activeadmin_addons/stylesheets/imports/jquery-datepicker.scss @@ -0,0 +1,568 @@ +.xdsoft_datetimepicker { + box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.506); + background: #fff; + border-bottom: 1px solid #bbb; + border-left: 1px solid #ccc; + border-right: 1px solid #ccc; + border-top: 1px solid #ccc; + color: #333; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 8px; + padding-left: 0; + padding-top: 2px; + position: absolute; + z-index: 9999; + -moz-box-sizing: border-box; + box-sizing: border-box; + display: none; +} +.xdsoft_datetimepicker.xdsoft_rtl { + padding: 8px 0 8px 8px; +} + +.xdsoft_datetimepicker iframe { + position: absolute; + left: 0; + top: 0; + width: 75px; + height: 210px; + background: transparent; + border: none; +} + +/*For IE8 or lower*/ +.xdsoft_datetimepicker button { + border: none !important; +} + +.xdsoft_noselect { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.xdsoft_noselect::selection { background: transparent } +.xdsoft_noselect::-moz-selection { background: transparent } + +.xdsoft_datetimepicker.xdsoft_inline { + display: inline-block; + position: static; + box-shadow: none; +} + +.xdsoft_datetimepicker * { + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; + margin: 0; +} + +.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker { + display: none; +} + +.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active { + display: block; +} + +.xdsoft_datetimepicker .xdsoft_datepicker { + width: 224px; + float: left; + margin-left: 8px; +} +.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_datepicker { + float: right; + margin-right: 8px; + margin-left: 0; +} + +.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_datepicker { + width: 256px; +} + +.xdsoft_datetimepicker .xdsoft_timepicker { + width: 58px; + float: left; + text-align: center; + margin-left: 8px; + margin-top: 0; +} +.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker { + float: right; + margin-right: 8px; + margin-left: 0; +} + +.xdsoft_datetimepicker .xdsoft_datepicker.active+.xdsoft_timepicker { + margin-top: 8px; + margin-bottom: 3px +} + +.xdsoft_datetimepicker .xdsoft_monthpicker { + position: relative; + text-align: center; +} + +.xdsoft_datetimepicker .xdsoft_label i, +.xdsoft_datetimepicker .xdsoft_prev, +.xdsoft_datetimepicker .xdsoft_next, +.xdsoft_datetimepicker .xdsoft_today_button { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0NBRjI1NjM0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0NBRjI1NjQ0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQ0FGMjU2MTQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQ0FGMjU2MjQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoNEP54AAAIOSURBVHja7Jq9TsMwEMcxrZD4WpBYeKUCe+kTMCACHZh4BFfHO/AAIHZGFhYkBBsSEqxsLCAgXKhbXYOTxh9pfJVP+qutnZ5s/5Lz2Y5I03QhWji2GIcgAokWgfCxNvcOCCGKqiSqhUp0laHOne05vdEyGMfkdxJDVjgwDlEQgYQBgx+ULJaWSXXS6r/ER5FBVR8VfGftTKcITNs+a1XpcFoExREIDF14AVIFxgQUS+h520cdud6wNkC0UBw6BCO/HoCYwBhD8QCkQ/x1mwDyD4plh4D6DDV0TAGyo4HcawLIBBSLDkHeH0Mg2yVP3l4TQMZQDDsEOl/MgHQqhMNuE0D+oBh0CIr8MAKyazBH9WyBuKxDWgbXfjNf32TZ1KWm/Ap1oSk/R53UtQ5xTh3LUlMmT8gt6g51Q9p+SobxgJQ/qmsfZhWywGFSl0yBjCLJCMgXail3b7+rumdVJ2YRss4cN+r6qAHDkPWjPjdJCF4n9RmAD/V9A/Wp4NQassDjwlB6XBiCxcJQWmZZb8THFilfy/lfrTvLghq2TqTHrRMTKNJ0sIhdo15RT+RpyWwFdY96UZ/LdQKBGjcXpcc1AlSFEfLmouD+1knuxBDUVrvOBmoOC/rEcN7OQxKVeJTCiAdUzUJhA2Oez9QTkp72OTVcxDcXY8iKNkxGAJXmJCOQwOa6dhyXsOa6XwEGAKdeb5ET3rQdAAAAAElFTkSuQmCC); +} + +.xdsoft_datetimepicker .xdsoft_label i { + opacity: 0.5; + background-position: -92px -19px; + display: inline-block; + width: 9px; + height: 20px; + vertical-align: middle; +} + +.xdsoft_datetimepicker .xdsoft_prev { + float: left; + background-position: -20px 0; +} +.xdsoft_datetimepicker .xdsoft_today_button { + float: left; + background-position: -70px 0; + margin-left: 5px; +} + +.xdsoft_datetimepicker .xdsoft_next { + float: right; + background-position: 0 0; +} + +.xdsoft_datetimepicker .xdsoft_next, +.xdsoft_datetimepicker .xdsoft_prev , +.xdsoft_datetimepicker .xdsoft_today_button { + background-color: transparent; + background-repeat: no-repeat; + border: 0 none; + cursor: pointer; + display: block; + height: 30px; + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + outline: medium none; + overflow: hidden; + padding: 0; + position: relative; + text-indent: 100%; + white-space: nowrap; + width: 20px; + min-width: 0; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next { + float: none; + background-position: -40px -15px; + height: 15px; + width: 30px; + display: block; + margin-left: 14px; + margin-top: 7px; +} +.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_prev, +.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_next { + float: none; + margin-left: 0; + margin-right: 14px; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev { + background-position: -40px 0; + margin-bottom: 7px; + margin-top: 0; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box { + height: 151px; + overflow: hidden; + border-bottom: 1px solid #ddd; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div { + background: #f5f5f5; + border-top: 1px solid #ddd; + color: #666; + font-size: 12px; + text-align: center; + border-collapse: collapse; + cursor: pointer; + border-bottom-width: 0; + height: 25px; + line-height: 25px; +} + +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div > div:first-child { + border-top-width: 0; +} + +.xdsoft_datetimepicker .xdsoft_today_button:hover, +.xdsoft_datetimepicker .xdsoft_next:hover, +.xdsoft_datetimepicker .xdsoft_prev:hover { + opacity: 1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; +} + +.xdsoft_datetimepicker .xdsoft_label { + display: inline; + position: relative; + z-index: 9999; + margin: 0; + padding: 5px 3px; + font-size: 14px; + line-height: 20px; + font-weight: bold; + background-color: #fff; + float: left; + width: 182px; + text-align: center; + cursor: pointer; +} + +.xdsoft_datetimepicker .xdsoft_label:hover>span { + text-decoration: underline; +} + +.xdsoft_datetimepicker .xdsoft_label:hover i { + opacity: 1.0; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select { + border: 1px solid #ccc; + position: absolute; + right: 0; + top: 30px; + z-index: 101; + display: none; + background: #fff; + max-height: 160px; + overflow-y: hidden; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect{ right: -7px } +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect{ right: 2px } +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover { + color: #fff; + background: #ff8000; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option { + padding: 2px 10px 2px 5px; + text-decoration: none !important; +} + +.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current { + background: #33aaff; + box-shadow: #178fe5 0 1px 3px 0 inset; + color: #fff; + font-weight: 700; +} + +.xdsoft_datetimepicker .xdsoft_month { + width: 100px; + text-align: right; +} + +.xdsoft_datetimepicker .xdsoft_calendar { + clear: both; +} + +.xdsoft_datetimepicker .xdsoft_year{ + width: 48px; + margin-left: 5px; +} + +.xdsoft_datetimepicker .xdsoft_calendar table { + border-collapse: collapse; + width: 100%; + +} + +.xdsoft_datetimepicker .xdsoft_calendar td > div { + padding-right: 5px; +} + +.xdsoft_datetimepicker .xdsoft_calendar th { + height: 25px; +} + +.xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th { + width: 14.2857142%; + background: #f5f5f5; + border: 1px solid #ddd; + color: #666; + font-size: 12px; + text-align: right; + vertical-align: middle; + padding: 0; + border-collapse: collapse; + cursor: pointer; + height: 25px; +} +.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar th { + width: 12.5%; +} + +.xdsoft_datetimepicker .xdsoft_calendar th { + background: #f1f1f1; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today { + color: #33aaff; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_default { + background: #ffe9d2; + box-shadow: #ffb871 0 1px 4px 0 inset; + color: #000; +} +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_mint { + background: #c1ffc9; + box-shadow: #00dd1c 0 1px 4px 0 inset; + color: #000; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default, +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current { + background: #33aaff; + box-shadow: #178fe5 0 1px 3px 0 inset; + color: #fff; + font-weight: 700; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month, +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled, +.xdsoft_datetimepicker .xdsoft_time_box >div >div.xdsoft_disabled { + opacity: 0.5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + cursor: default; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled { + opacity: 0.2; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)"; +} + +.xdsoft_datetimepicker .xdsoft_calendar td:hover, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div:hover { + color: #fff !important; + background: #ff8000 !important; + box-shadow: none !important; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current.xdsoft_disabled:hover, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current.xdsoft_disabled:hover { + background: #33aaff !important; + box-shadow: #178fe5 0 1px 3px 0 inset !important; + color: #fff !important; +} + +.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover, +.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_disabled:hover { + color: inherit !important; + background: inherit !important; + box-shadow: inherit !important; +} + +.xdsoft_datetimepicker .xdsoft_calendar th { + font-weight: 700; + text-align: center; + color: #999; + cursor: default; +} + +.xdsoft_datetimepicker .xdsoft_copyright { + color: #ccc !important; + font-size: 10px; + clear: both; + float: none; + margin-left: 8px; +} + +.xdsoft_datetimepicker .xdsoft_copyright a { color: #eee !important } +.xdsoft_datetimepicker .xdsoft_copyright a:hover { color: #aaa !important } + +.xdsoft_time_box { + position: relative; + border: 1px solid #ccc; +} +.xdsoft_scrollbar >.xdsoft_scroller { + background: #ccc !important; + height: 20px; + border-radius: 3px; +} +.xdsoft_scrollbar { + position: absolute; + width: 7px; + right: 0; + top: 0; + bottom: 0; + cursor: pointer; +} +.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_scrollbar { + left: 0; + right: auto; +} +.xdsoft_scroller_box { + position: relative; +} + +.xdsoft_datetimepicker.xdsoft_dark { + box-shadow: 0 5px 15px -5px rgba(255, 255, 255, 0.506); + background: #000; + border-bottom: 1px solid #444; + border-left: 1px solid #333; + border-right: 1px solid #333; + border-top: 1px solid #333; + color: #ccc; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box { + border-bottom: 1px solid #222; +} +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div { + background: #0a0a0a; + border-top: 1px solid #222; + color: #999; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label { + background-color: #000; +} +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select { + border: 1px solid #333; + background: #000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover { + color: #000; + background: #007fff; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current { + background: #cc5500; + box-shadow: #b03e00 0 1px 3px 0 inset; + color: #000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label i, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_prev, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_next, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_today_button { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUExQUUzOTA0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUExQUUzOTE0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQTFBRTM4RTQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQTFBRTM4RjQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp0VxGEAAAIASURBVHja7JrNSgMxEMebtgh+3MSLr1T1Xn2CHoSKB08+QmR8Bx9A8e7RixdB9CKCoNdexIugxFlJa7rNZneTbLIpM/CnNLsdMvNjM8l0mRCiQ9Ye61IKCAgZAUnH+mU3MMZaHYChBnJUDzWOFZdVfc5+ZFLbrWDeXPwbxIqrLLfaeS0hEBVGIRQCEiZoHQwtlGSByCCdYBl8g8egTTAWoKQMRBRBcZxYlhzhKegqMOageErsCHVkk3hXIFooDgHB1KkHIHVgzKB4ADJQ/A1jAFmAYhkQqA5TOBtocrKrgXwQA8gcFIuAIO8sQSA7hidvPwaQGZSaAYHOUWJABhWWw2EMIH9QagQERU4SArJXo0ZZL18uvaxejXt/Em8xjVBXmvFr1KVm/AJ10tRe2XnraNqaJvKE3KHuUbfK1E+VHB0q40/y3sdQSxY4FHWeKJCunP8UyDdqJZenT3ntVV5jIYCAh20vT7ioP8tpf6E2lfEMwERe+whV1MHjwZB7PBiCxcGQWwKZKD62lfGNnP/1poFAA60T7rF1UgcKd2id3KDeUS+oLWV8DfWAepOfq00CgQabi9zjcgJVYVD7PVzQUAUGAQkbNJTBICDhgwYTjDYD6XeW08ZKh+A4pYkzenOxXUbvZcWz7E8ykRMnIHGX1XPl+1m2vPYpL+2qdb8CDAARlKFEz/ZVkAAAAABJRU5ErkJggg==); +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th { + background: #0a0a0a; + border: 1px solid #222; + color: #999; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th { + background: #0e0e0e; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_today { + color: #cc5500; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_default { + background: #ffe9d2; + box-shadow: #ffb871 0 1px 4px 0 inset; + color:#000; +} +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_mint { + background: #c1ffc9; + box-shadow: #00dd1c 0 1px 4px 0 inset; + color:#000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_default, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_current, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current { + background: #cc5500; + box-shadow: #b03e00 0 1px 3px 0 inset; + color: #000; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td:hover, +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div:hover { + color: #000 !important; + background: #007fff !important; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th { + color: #666; +} + +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright { color: #333 !important } +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a { color: #111 !important } +.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a:hover { color: #555 !important } + +.xdsoft_dark .xdsoft_time_box { + border: 1px solid #333; +} + +.xdsoft_dark .xdsoft_scrollbar >.xdsoft_scroller { + background: #333 !important; +} +.xdsoft_datetimepicker .xdsoft_save_selected { + display: block; + border: 1px solid #dddddd !important; + margin-top: 5px; + width: 100%; + color: #454551; + font-size: 13px; +} +.xdsoft_datetimepicker .blue-gradient-button { + font-family: "museo-sans", "Book Antiqua", sans-serif; + font-size: 12px; + font-weight: 300; + color: #82878c; + height: 28px; + position: relative; + padding: 4px 17px 4px 33px; + border: 1px solid #d7d8da; + background: -moz-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(73%, #f4f8fa)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #fff 0%, #f4f8fa 73%); + /* IE10+ */ + background: linear-gradient(to bottom, #fff 0%, #f4f8fa 73%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff', endColorstr='#f4f8fa',GradientType=0 ); +/* IE6-9 */ +} +.xdsoft_datetimepicker .blue-gradient-button:hover, .xdsoft_datetimepicker .blue-gradient-button:focus, .xdsoft_datetimepicker .blue-gradient-button:hover span, .xdsoft_datetimepicker .blue-gradient-button:focus span { + color: #454551; + background: -moz-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f4f8fa), color-stop(73%, #FFF)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #f4f8fa 0%, #FFF 73%); + /* IE10+ */ + background: linear-gradient(to bottom, #f4f8fa 0%, #FFF 73%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f8fa', endColorstr='#FFF',GradientType=0 ); + /* IE6-9 */ +} diff --git a/app/javascript/activeadmin_addons/stylesheets/imports/slimselect.css b/app/javascript/activeadmin_addons/stylesheets/imports/slimselect.css new file mode 100644 index 00000000..3058325c --- /dev/null +++ b/app/javascript/activeadmin_addons/stylesheets/imports/slimselect.css @@ -0,0 +1 @@ +:root{--ss-primary-color: #5897fb;--ss-bg-color: #ffffff;--ss-font-color: #4d4d4d;--ss-font-placeholder-color: #8d8d8d;--ss-disabled-color: #dcdee2;--ss-border-color: #dcdee2;--ss-highlight-color: #fffb8c;--ss-success-color: #00b755;--ss-error-color: #dc3545;--ss-main-height: 30px;--ss-content-height: 300px;--ss-spacing-l: 7px;--ss-spacing-m: 5px;--ss-spacing-s: 3px;--ss-animation-timing: 0.2s;--ss-border-radius: 4px}@keyframes ss-valueIn{0%{transform:scale(0);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes ss-valueOut{0%{transform:scale(1);opacity:1}100%{transform:scale(0);opacity:0}}.ss-hide{display:none !important}.ss-main{display:flex;flex-direction:row;position:relative;user-select:none;color:var(--ss-font-color);min-height:var(--ss-main-height);width:100%;padding:var(--ss-spacing-s);cursor:pointer;border:1px solid var(--ss-border-color);border-radius:var(--ss-border-radius);background-color:var(--ss-bg-color);outline:0;box-sizing:border-box;transition:background-color var(--ss-animation-timing)}.ss-main:focus{box-shadow:0 0 5px var(--ss-primary-color)}.ss-main.ss-disabled{background-color:var(--ss-disabled-color);cursor:not-allowed}.ss-main.ss-disabled .ss-values .ss-disabled{color:var(--ss-font-color)}.ss-main.ss-disabled .ss-values .ss-value .ss-value-delete{cursor:not-allowed}.ss-main.ss-open-above{border-top-left-radius:0px;border-top-right-radius:0px}.ss-main.ss-open-below{border-bottom-left-radius:0px;border-bottom-right-radius:0px}.ss-main .ss-values{display:inline-flex;flex-wrap:wrap;gap:var(--ss-spacing-m);flex:1 1 100%}.ss-main .ss-values .ss-placeholder{display:flex;padding:var(--ss-spacing-s) var(--ss-spacing-m) var(--ss-spacing-s) var(--ss-spacing-m);margin:auto 0px auto 0px;line-height:1em;align-items:center;width:100%;color:var(--ss-font-placeholder-color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ss-main .ss-values .ss-max{display:flex;user-select:none;align-items:center;width:fit-content;font-size:12px;color:var(--ss-bg-color);line-height:1;padding:var(--ss-spacing-s) var(--ss-spacing-m);background-color:var(--ss-primary-color);border-radius:var(--ss-border-radius)}.ss-main .ss-values .ss-single{display:flex;margin:auto 0px auto var(--ss-spacing-s)}.ss-main .ss-values .ss-value{display:flex;user-select:none;align-items:center;width:fit-content;background-color:var(--ss-primary-color);border-radius:var(--ss-border-radius);animation-name:ss-valueIn;animation-duration:var(--ss-animation-timing);animation-timing-function:ease-out;animation-fill-mode:both}.ss-main .ss-values .ss-value.ss-value-out{animation-name:ss-valueOut;animation-duration:var(--ss-animation-timing);animation-timing-function:ease-out}.ss-main .ss-values .ss-value .ss-value-text{font-size:12px;color:var(--ss-bg-color);line-height:1;padding:var(--ss-spacing-s) var(--ss-spacing-m)}.ss-main .ss-values .ss-value .ss-value-delete{display:flex;align-items:center;height:var(--ss-spacing-l);width:var(--ss-spacing-l);padding:var(--ss-spacing-s) var(--ss-spacing-m);cursor:pointer;border-left:solid 1px var(--ss-bg-color)}.ss-main .ss-values .ss-value .ss-value-delete svg{height:var(--ss-spacing-l);width:var(--ss-spacing-l)}.ss-main .ss-values .ss-value .ss-value-delete svg path{fill:none;stroke:var(--ss-bg-color);stroke-width:18;stroke-linecap:round;stroke-linejoin:round}.ss-main .ss-deselect{display:flex;align-self:center;justify-content:flex-end;flex:0 1 auto;width:8px;height:8px;margin:0 var(--ss-spacing-m) 0 var(--ss-spacing-m)}.ss-main .ss-deselect svg{width:8px;height:8px}.ss-main .ss-deselect svg path{fill:none;stroke:var(--ss-font-color);stroke-width:20;stroke-linecap:round;stroke-linejoin:round}.ss-main .ss-arrow{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;width:12px;height:12px;margin:auto var(--ss-spacing-m) auto var(--ss-spacing-m)}.ss-main .ss-arrow path{fill:none;stroke:var(--ss-font-color);stroke-width:18;stroke-linecap:round;stroke-linejoin:round;transition-timing-function:ease-out;transition:var(--ss-animation-timing)}.ss-content{position:absolute;display:flex;height:auto;flex-direction:column;width:auto;max-height:var(--ss-content-height);box-sizing:border-box;border:solid 1px var(--ss-border-color);background-color:var(--ss-bg-color);transition:transform var(--ss-animation-timing),opacity var(--ss-animation-timing);opacity:0;transform:scaleY(0);transform-origin:center top;overflow:hidden;z-index:10000}.ss-content.ss-relative{position:relative;height:100%}.ss-content.ss-open-above{flex-direction:column-reverse;opacity:1;transform:scaleY(1);transform-origin:center bottom;border-top-left-radius:var(--ss-border-radius);border-top-right-radius:var(--ss-border-radius)}.ss-content.ss-open-below{opacity:1;transform:scaleY(1);transform-origin:center top;border-bottom-left-radius:var(--ss-border-radius);border-bottom-right-radius:var(--ss-border-radius)}.ss-content .ss-search{flex:0 1 auto;display:flex;flex-direction:row;padding:var(--ss-spacing-l) var(--ss-spacing-l) var(--ss-spacing-m) var(--ss-spacing-l)}.ss-content .ss-search input{display:inline-flex;font-size:inherit;line-height:inherit;flex:1 1 auto;width:100%;min-width:0px;padding:var(--ss-spacing-m) var(--ss-spacing-l);margin:0;border:1px solid var(--ss-border-color);border-radius:var(--ss-border-radius);background-color:var(--ss-bg-color);outline:0;text-align:left;box-sizing:border-box}.ss-content .ss-search input::placeholder{color:var(--ss-font-placeholder-color);vertical-align:middle}.ss-content .ss-search input:focus{box-shadow:0 0 5px var(--ss-primary-color)}.ss-content .ss-search .ss-addable{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;flex:0 0 auto;height:auto;margin:0 0 0 var(--ss-spacing-m);border:1px solid var(--ss-border-color);border-radius:var(--ss-border-radius)}.ss-content .ss-search .ss-addable svg{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;width:12px;height:12px;margin:auto var(--ss-spacing-m) auto var(--ss-spacing-m)}.ss-content .ss-search .ss-addable svg path{fill:none;stroke:var(--ss-font-color);stroke-width:18;stroke-linecap:round;stroke-linejoin:round}.ss-content .ss-list{flex:1 1 auto;height:auto;overflow-x:hidden;overflow-y:auto}.ss-content .ss-list .ss-error{color:var(--ss-error-color);padding:var(--ss-spacing-l)}.ss-content .ss-list .ss-searching{color:var(--ss-font-color);padding:var(--ss-spacing-l)}.ss-content .ss-list .ss-optgroup.ss-close .ss-option{display:none !important}.ss-content .ss-list .ss-optgroup .ss-optgroup-label{display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding:var(--ss-spacing-m) var(--ss-spacing-l) var(--ss-spacing-m) var(--ss-spacing-l)}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-label-text{flex:1 1 auto;font-weight:bold;color:var(--ss-font-color)}.ss-content .ss-list .ss-optgroup .ss-optgroup-label:has(.ss-arrow){cursor:pointer}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions{flex:0 1 auto;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:var(--ss-spacing-m)}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall{flex:0 0 auto;display:flex;flex-direction:row;cursor:pointer}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall:hover{opacity:.5}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall.ss-selected svg path{stroke:var(--ss-error-color)}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall span{flex:0 1 auto;display:flex;align-items:center;justify-content:center;font-size:60%;text-align:center;padding:0 var(--ss-spacing-s) 0 0}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg{flex:0 1 auto;width:13px;height:13px}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg path{fill:none;stroke:var(--ss-success-color);stroke-linecap:round;stroke-linejoin:round}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg:first-child{stroke-width:5}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg:last-child{stroke-width:11}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-closable{flex:0 1 auto;display:flex;flex-direction:row;cursor:pointer}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-closable .ss-arrow{flex:1 1 auto;width:10px;height:10px}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-closable .ss-arrow path{fill:none;stroke:var(--ss-font-color);stroke-width:18;stroke-linecap:round;stroke-linejoin:round;transition-timing-function:ease-out;transition:var(--ss-animation-timing)}.ss-content .ss-list .ss-optgroup .ss-option{padding:var(--ss-spacing-s) var(--ss-spacing-s) var(--ss-spacing-s) calc(var(--ss-spacing-l)*3)}.ss-content .ss-list .ss-option{display:flex;padding:var(--ss-spacing-m) var(--ss-spacing-l) var(--ss-spacing-m) var(--ss-spacing-l);color:var(--ss-font-color);cursor:pointer;user-select:none}.ss-content .ss-list .ss-option:hover{color:var(--ss-bg-color);background-color:var(--ss-primary-color)}.ss-content .ss-list .ss-option.ss-highlighted,.ss-content .ss-list .ss-option:not(.ss-disabled).ss-selected{color:var(--ss-bg-color);background-color:var(--ss-primary-color)}.ss-content .ss-list .ss-option.ss-disabled{cursor:not-allowed;background-color:var(--ss-disabled-color)}.ss-content .ss-list .ss-option.ss-disabled:hover{color:var(--ss-font-color)}.ss-content .ss-list .ss-option .ss-search-highlight{background-color:var(--ss-highlight-color)} diff --git a/app/assets/stylesheets/activeadmin_addons/inputs/color-picker.scss b/app/javascript/activeadmin_addons/stylesheets/inputs/color-picker.scss similarity index 100% rename from app/assets/stylesheets/activeadmin_addons/inputs/color-picker.scss rename to app/javascript/activeadmin_addons/stylesheets/inputs/color-picker.scss diff --git a/app/javascript/activeadmin_addons/stylesheets/inputs/date-time-picker-filter.scss b/app/javascript/activeadmin_addons/stylesheets/inputs/date-time-picker-filter.scss new file mode 100644 index 00000000..754e8ffa --- /dev/null +++ b/app/javascript/activeadmin_addons/stylesheets/inputs/date-time-picker-filter.scss @@ -0,0 +1,10 @@ +.filter_date_time_picker_filter { + li { + list-style: none; + margin-bottom: 5px; + + label { + display: none; + } + } +} diff --git a/app/assets/stylesheets/activeadmin_addons/inputs/date-time-picker.scss b/app/javascript/activeadmin_addons/stylesheets/inputs/date-time-picker.scss similarity index 100% rename from app/assets/stylesheets/activeadmin_addons/inputs/date-time-picker.scss rename to app/javascript/activeadmin_addons/stylesheets/inputs/date-time-picker.scss diff --git a/app/assets/stylesheets/activeadmin_addons/inputs/numeric-range-filter.scss b/app/javascript/activeadmin_addons/stylesheets/inputs/numeric-range-filter.scss similarity index 100% rename from app/assets/stylesheets/activeadmin_addons/inputs/numeric-range-filter.scss rename to app/javascript/activeadmin_addons/stylesheets/inputs/numeric-range-filter.scss diff --git a/app/assets/stylesheets/activeadmin_addons/inputs/selected-list.scss b/app/javascript/activeadmin_addons/stylesheets/inputs/selected-list.scss similarity index 96% rename from app/assets/stylesheets/activeadmin_addons/inputs/selected-list.scss rename to app/javascript/activeadmin_addons/stylesheets/inputs/selected-list.scss index ef6ccd7e..6477e4d8 100644 --- a/app/assets/stylesheets/activeadmin_addons/inputs/selected-list.scss +++ b/app/javascript/activeadmin_addons/stylesheets/inputs/selected-list.scss @@ -3,7 +3,6 @@ $selected-list-btn-hover-color: #333; .selected-list-container { display: inline-block; - width: 80%; .selected-item { height: 25px; diff --git a/app/javascript/activeadmin_addons/stylesheets/inputs/slim-select.scss b/app/javascript/activeadmin_addons/stylesheets/inputs/slim-select.scss new file mode 100644 index 00000000..c8152c17 --- /dev/null +++ b/app/javascript/activeadmin_addons/stylesheets/inputs/slim-select.scss @@ -0,0 +1,9 @@ +.ss-main { + width: auto; +} + +li.error { + .ss-main { + border-color: $error-color; + } +} diff --git a/vendor/assets/jquery_palette_color_picker/palette-color-picker.scss b/app/javascript/activeadmin_addons/stylesheets/vendor/palette-color-picker.scss similarity index 100% rename from vendor/assets/jquery_palette_color_picker/palette-color-picker.scss rename to app/javascript/activeadmin_addons/stylesheets/vendor/palette-color-picker.scss diff --git a/vendor/assets/jquery_palette_color_picker/palette-color-picker.js b/app/javascript/activeadmin_addons/vendor/jquery_palette_color_picker/palette-color-picker.js similarity index 100% rename from vendor/assets/jquery_palette_color_picker/palette-color-picker.js rename to app/javascript/activeadmin_addons/vendor/jquery_palette_color_picker/palette-color-picker.js diff --git a/bin/clean b/bin/clean new file mode 100755 index 00000000..b94f6b1b --- /dev/null +++ b/bin/clean @@ -0,0 +1,9 @@ +#!/bin/sh + +# Exit if any subcommand fails +set -e + +git restore -s@ -SW spec/dummy +cd spec/dummy +git checkout . +git clean -f -d diff --git a/bin/js-prepublish b/bin/js-prepublish new file mode 100755 index 00000000..5e7bf8c6 --- /dev/null +++ b/bin/js-prepublish @@ -0,0 +1,10 @@ +#!/bin/sh + +# Exit if any subcommand fails +set -e + +rm -rf src +mkdir src +cp -R app/javascript/activeadmin_addons/* src +# temporary fix for https://github.com/brianvoe/slim-select/issues/269 +cp node_modules/slim-select/dist/slimselect.css src/stylesheets/imports/slimselect.css diff --git a/bin/setup b/bin/setup index 4b051384..3b4dcde4 100755 --- a/bin/setup +++ b/bin/setup @@ -3,9 +3,9 @@ # Exit if any subcommand fails set -e -# Set up Ruby dependencies via Bundler +rm -rf node_modules +rm -rf spec/dummy/node_modules gem install bundler --conservative bundle check || bundle install - -cd spec/dummy -rake db:setup +bundle exec rake prepare_assets +(cd spec/dummy && bundle exec rake db:setup) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index b56fb2ab..0865d91c 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -3,11 +3,12 @@ ## Rules 1. **Test everything you add or fix**. Functionality that is not tested is a headache to the future. -1. **Document everything you add**, even an small option. If the functionality is hidden in the code, it is not useful. +1. **Document everything you add**, even a small option. If the functionality is hidden in the code, it is not useful. In general, we add a brief in the `README.md` and we extend the information in a file inside `/docs`. 1. **Avoid making Pull Requests with multiple changes**. If you intend to add/fix several things, please make a PR for each one. 1. **Ask before attempting to add new features**. In Platanus, we open the code of this gem to spread the happiness but we don't want to maintain things that are not useful for the company. Remember that you can always fork this gem and modify it according to your needs. -1. **Respect the style rules**. We use [rubocop](https://github.com/bbatsov/rubocop), [stylelint](https://github.com/stylelint/stylelint) and [eslint](https://eslint.org/). Te rules are in the root of this gem. +1. **Respect the style rules**. We use [rubocop](https://github.com/bbatsov/rubocop) and [eslint](https://eslint.org/). The rules are in the root of this gem. Any changes added to the PR because of a style rule violation should be added to the original commit in your branch with a [`git rebase`](https://help.github.com/articles/about-git-rebase/), don't add "style fix" as separate commits. +1. **Use the template when submitting a PR** ## Dummy App @@ -18,17 +19,22 @@ To run the application quickly, you can execute in the root of the gem the follo bin/setup ``` -This command loads the dummy app with test data and an admin user with: +This command loads the dummy app with test data. +To navigate the application you can run, inside the `/spec/dummy` directory... -* email: `admin@platan.us` -* password: `12345678` +**With webpack:** -To navigate the application you can run, inside the `/spec/dummy` directory: +``` +bin/rails s +``` + +And in another tab: ``` -rails s +bin/webpack-dev-server ``` + > It is a good idea to add to the dummy app any new functionality. See for example the file: `/spec/dummy/app/admin/invoices.rb` ## Testing @@ -36,15 +42,11 @@ rails s The gem is tested using [rspec](https://github.com/rspec/rspec-rails), [capybara](https://github.com/teamcapybara/capybara#using-capybara-with-rspec) and [selenium-webdriver](https://github.com/SeleniumHQ/selenium/tree/master/rb) with chrome. So, **you need to have chromedriver installed**. If you're using homebrew on OS X you can do: `brew install chromedriver`. -To run the tests you can do, in the root of the gem, +To run the tests you can do, in the root of the gem: ``` -bundle exec rspec +bundle exec rake tests ``` -- The addons specs we put them inside `/spec/features`. -- The helper classes specs we put them inside `/spec/lib`. - -## Style rules - -We use [Hound](https://houndci.com/) to check the style rules against pull requests. So, you don't need to install the code analyzers or linters if you don't want. But, don't make commits named "style fix" when the hound attacks you, or do it but use [`git rebase`](https://help.github.com/articles/about-git-rebase/). +- We put the addons specs inside `/spec/features`. +- We put the helper classes specs inside `/spec/lib`. diff --git a/docs/date-time-picker.md b/docs/date-time-picker.md index b453dcf9..b6aa7fc1 100644 --- a/docs/date-time-picker.md +++ b/docs/date-time-picker.md @@ -43,7 +43,7 @@ You can modify, in the gem's setup block, the default options like this: ```ruby ActiveadminAddons.setup do |config| # Set default options for DateTimePickerInput. The options you can provide are the same as in - # xdan's datetimepicker library (https://github.com/xdan/datetimepicker/tree/2.5.4). Yo need to + # xdan's datetimepicker library (https://github.com/xdan/datetimepicker/tree/2.5.4). You need to # pass a ruby hash, avoid camelCase keys. For example: use min_date instead of minDate key. config.datetime_picker_default_options = { format: "d-m-Y H:i", diff --git a/docs/enum_integration.md b/docs/enum_integration.md index 880eb7f7..42676ea9 100644 --- a/docs/enum_integration.md +++ b/docs/enum_integration.md @@ -22,14 +22,10 @@ end -If you want to customize the tag's colors. You need to define css classes matching enumerize attribute values. For example: if you have the `Bill` model with: +If you want to customize the tag's colors. You need to define css classes matching enum values. For example: if you have the `Bill` model with: ```ruby class Bill < ActiveRecord::Base - # Enumerize - extend Enumerize - enumerize :state, in: [:pending, :rejected, :approved], default: :pending - # Rails Enum enum status: { active: 0, archived: 1 } end @@ -51,7 +47,7 @@ $approved-color: #08A510; ## Interactive Tag Column -`tag_column` also can receive the boolean parameter `interactive`. If `interactive` is true, it will render a select2 input to change the value of the attribute when the tag is clicked: +`tag_column` also can receive the boolean parameter `interactive`. If `interactive` is true, it will render a slim select input to change the value of the attribute when the tag is clicked: ```ruby index do @@ -61,3 +57,44 @@ end ``` + +### Important + +If you have: + +```ruby +ActiveAdmin.register Invoice do + index do + tag_column :state, interactive: true + end +end +``` + +By using the toggle button, you'll make a request to `PATCH /admin/invoices/:id`. Because of this, you will need to have the show and update actions activated on `admin/invoices.rb`. + +```ruby +ActiveAdmin.register Invoice do + actions :show, :update # if you remove this line, all CRUD actions will be enabled. So, don't do something like this: `actions :index` or the interactive feature won't work. + + index do + tag_column :state, interactive: true + end +end +``` + +## Translation + +Tag row and column, as well as the interactive option of the latter, support automatic translation with `I18n` when using Rails built-in `enums`. For this, you just have to define the translations in the correct path in your YAML files: + +```yaml +# en.yml +en: + activerecord: + attributes: + invoice: + statuses: + active: Activo + archived: Archivado +``` + +This is the same structure used for tanslation of select inputs in filters and edit/create forms. diff --git a/docs/images.md b/docs/images.md new file mode 100644 index 00000000..387130a7 --- /dev/null +++ b/docs/images.md @@ -0,0 +1,27 @@ +# Images Integration + +## Shrine + +### Image Row + +The Shrine implementation receives an optional `image_options` which is then used as the options for the [`image_tag`](https://apidock.com/rails/ActionView/Helpers/AssetTagHelper/image_tag) method. +```ruby +show do + attributes_table do + image_row :photo, image_options: { width: 400 } + end +end +``` + + + +### Image Column + +To use the Shrine [derivatives](https://shrinerb.com/docs/plugins/derivatives) you can use the `style` option with the name of the derivative like the example below. In this case you would need to have a derivative created with the `'jpg_small'` name. +```ruby +index do + image_column :photo, style: :jpg_small +end +``` + + diff --git a/docs/images/data-time-picker-range.png b/docs/images/data-time-picker-range.png new file mode 100644 index 00000000..5e966cad Binary files /dev/null and b/docs/images/data-time-picker-range.png differ diff --git a/docs/images/markdown-row.png b/docs/images/markdown-row.png new file mode 100644 index 00000000..f0a1fb02 Binary files /dev/null and b/docs/images/markdown-row.png differ diff --git a/docs/images/select2-default.gif b/docs/images/select2-default.gif deleted file mode 100644 index d93ef517..00000000 Binary files a/docs/images/select2-default.gif and /dev/null differ diff --git a/docs/images/select2-nested-select-default.gif b/docs/images/select2-nested-select-default.gif deleted file mode 100644 index 75c20a8f..00000000 Binary files a/docs/images/select2-nested-select-default.gif and /dev/null differ diff --git a/docs/images/select2-nested-select-general-options.gif b/docs/images/select2-nested-select-general-options.gif deleted file mode 100644 index 7143ed4b..00000000 Binary files a/docs/images/select2-nested-select-general-options.gif and /dev/null differ diff --git a/docs/images/select2-nested-select-level-options.gif b/docs/images/select2-nested-select-level-options.gif deleted file mode 100644 index 8f8759b7..00000000 Binary files a/docs/images/select2-nested-select-level-options.gif and /dev/null differ diff --git a/docs/images/select2-nested-select.png b/docs/images/select2-nested-select.png deleted file mode 100644 index 9b5ea2f3..00000000 Binary files a/docs/images/select2-nested-select.png and /dev/null differ diff --git a/docs/images/select2-search-select.gif b/docs/images/select2-search-select.gif deleted file mode 100644 index c40133f4..00000000 Binary files a/docs/images/select2-search-select.gif and /dev/null differ diff --git a/docs/images/select2-selected-list.gif b/docs/images/select2-selected-list.gif deleted file mode 100644 index 9acbc3ef..00000000 Binary files a/docs/images/select2-selected-list.gif and /dev/null differ diff --git a/docs/images/select2-tags.gif b/docs/images/select2-tags.gif deleted file mode 100644 index 99843cd4..00000000 Binary files a/docs/images/select2-tags.gif and /dev/null differ diff --git a/docs/images/slim-select-nested-select-general-options.gif b/docs/images/slim-select-nested-select-general-options.gif new file mode 100644 index 00000000..656897b5 Binary files /dev/null and b/docs/images/slim-select-nested-select-general-options.gif differ diff --git a/docs/images/slim-select-nested-select-level-options.png b/docs/images/slim-select-nested-select-level-options.png new file mode 100644 index 00000000..dc408e71 Binary files /dev/null and b/docs/images/slim-select-nested-select-level-options.png differ diff --git a/docs/images/slim-select-nested-select.gif b/docs/images/slim-select-nested-select.gif new file mode 100644 index 00000000..03568ffe Binary files /dev/null and b/docs/images/slim-select-nested-select.gif differ diff --git a/docs/images/slim-select-search-select.gif b/docs/images/slim-select-search-select.gif new file mode 100644 index 00000000..951fd2f0 Binary files /dev/null and b/docs/images/slim-select-search-select.gif differ diff --git a/docs/images/slim-select-selected-list.gif b/docs/images/slim-select-selected-list.gif new file mode 100644 index 00000000..3c0aca72 Binary files /dev/null and b/docs/images/slim-select-selected-list.gif differ diff --git a/docs/images/slim-select-tags.gif b/docs/images/slim-select-tags.gif new file mode 100644 index 00000000..dfeb3864 Binary files /dev/null and b/docs/images/slim-select-tags.gif differ diff --git a/docs/images/slim-select.gif b/docs/images/slim-select.gif new file mode 100644 index 00000000..4938b2f7 Binary files /dev/null and b/docs/images/slim-select.gif differ diff --git a/docs/images/toggle-bool-column.gif b/docs/images/toggle-bool-column.gif new file mode 100644 index 00000000..c15ad845 Binary files /dev/null and b/docs/images/toggle-bool-column.gif differ diff --git a/docs/images/toggle-bool-column.png b/docs/images/toggle-bool-column.png deleted file mode 100644 index 9c625d35..00000000 Binary files a/docs/images/toggle-bool-column.png and /dev/null differ diff --git a/docs/install_generator.md b/docs/install_generator.md index afd13ab1..f99f9b34 100644 --- a/docs/install_generator.md +++ b/docs/install_generator.md @@ -1,24 +1,22 @@ -The install generator will automatically do these two changes to your files: +The install generator will automatically do these two changes to your files depending on the configuration used in ActiveAdmin: -1. The following line will be added as the **first** line of `app/assets/stylesheets/active_admin.scss`: +## Webpacker or similar + +1. The following line will be added as the **first** line of `app/javascript/stylesheets/active_admin.scss` ```stylesheet -//= require activeadmin_addons/all +@import 'activeadmin_addons/src/stylesheets/all' ``` -2. If your activeadmin installation uses an `app/assets/javascripts/active_admin.js.coffee` file, - the following line will be added **after** `#= require active_admin/base`: +2. The following line will be added **after** `import "@activeadmin/activeadmin"` in `app/javascript/packs/active_admin.js` -```coffeescript -#= require activeadmin_addons/all +```javascript +import "activeadmin_addons" ``` -2. If your activeadmin installation uses an `app/assets/javascripts/active_admin.js` file, - the following line will be added **after** `//= require active_admin/base`: +3. `yarn add activeadmin_addons` will be run to add the npm package. -```javascript -//= require activeadmin_addons/all -``` +---- To undo, you can use diff --git a/docs/markdown.md b/docs/markdown.md new file mode 100644 index 00000000..bc1117c1 --- /dev/null +++ b/docs/markdown.md @@ -0,0 +1,60 @@ +# Markdown + +## Markdown Column + +Renders text as markdown in the index view. + +You just need to use `markdown_column` method. + +```ruby +index do + markdown_column :description +end +``` + +## Markdown Row + +Renders text as markdown in the show view. + +You just need to use `markdown_row` method. + +```ruby +show do + attributes_table do + markdown_row :description + end +end +``` + +## Options + +This builder uses [Redcarpet](https://github.com/vmg/redcarpet) to render the text. You can pass any Redcarpet options to it. Using the options `extensions` and `render_options` to modify existing [Redcarpet options](https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use). + +```ruby +index do + markdown_column :description, extensions: { footnotes: true } +end + +index do + markdown_column :description, render_options: { hard_wrap: true } +end +``` + +### Builder default options + +The builder enables the following options by default to provide a plug-and-play experience: + +#### Extensions +``` json +fenced_code_blocks: true +no_intra_emphasis: true +strikethrough: true +superscript: true +``` + +#### Render options + +```json +filter_html: true, +hard_wrap: true +``` diff --git a/docs/paperclip_attachment.md b/docs/paperclip_attachment.md deleted file mode 100644 index e250625a..00000000 --- a/docs/paperclip_attachment.md +++ /dev/null @@ -1,30 +0,0 @@ -# Paperclip Integration - -## Attachment Row - -```ruby -show do - attributes_table do - attachment_row("My doc", :attachment, label: 'Download pdf file', truncate: false) - end -end -``` - - - -## Attachment Column - -```ruby -index do - attachment_column :document -end -``` - - - -## Options - -* `truncate`: you can pass `truncate` attribute to toggle truncating the filename. `attachment_column` truncates by default. -* `label`: if you want to show another text instead of the filename. -It can be a string, or a proc if you need another attribute from the model -`attachment_column "Who wrote it", :pdf_file, label: proc { |book| book.author.name }` diff --git a/docs/paperclip_images.md b/docs/paperclip_images.md deleted file mode 100644 index 84a26649..00000000 --- a/docs/paperclip_images.md +++ /dev/null @@ -1,25 +0,0 @@ -# Paperclip Integration - -## Image Row - -```ruby -show do - attributes_table do - image_row :photo - end -end -``` - - - -## Image Column - -```ruby -index do - image_column :photo, style: :thumb -end -``` - - - -> You can pass `style` attribute matching paperclip's style definition diff --git a/docs/select2_default.md b/docs/select2_default.md deleted file mode 100644 index beacd168..00000000 --- a/docs/select2_default.md +++ /dev/null @@ -1,27 +0,0 @@ -# Select2 - -## Default - -As default behavior, all select controls in your admin app will be wrapped by [Select2](http://ivaynberg.github.io/select2/). - - - -If you don't want to use it in a specific control, just add the `"default-select"` class: - -``` -f.input :created_at, input_html: { class: "default-select" } -``` - -If you don't want all the select controls wrapped by select2, you can change the default behavior setting as `"default"` the `default_select` option in the initializer. - -```ruby -ActiveadminAddons.setup do |config| - config.default_select = "default" -end -``` - -Now, if you want to enable [select2](http://ivaynberg.github.io/select2/) for a single control, you can add the `"select2"` class: - -``` -f.input :created_at, input_html: { class: "select2" } -``` diff --git a/docs/select2_nested_select.md b/docs/select2_nested_select.md deleted file mode 100644 index 93cbc92d..00000000 --- a/docs/select2_nested_select.md +++ /dev/null @@ -1,151 +0,0 @@ -# Select2 - -## Nested Select - -Lets say you have the following Active Record models - -```ruby -class Country < ActiveRecord::Base -end - -class Region < ActiveRecord::Base - belongs_to :country -end - -class City < ActiveRecord::Base - belongs_to :region -end -``` - -And the following Active Admin pages: - -```ruby -ActiveAdmin.register Country do - permit_params :name -end - -ActiveAdmin.register Region do - permit_params :name, :country_id -end - -ActiveAdmin.register City do - permit_params :name, :region_id -end -``` - -to enable nested select functionality, you we'll need to do the following: - -```ruby -f.input :city_id, as: :nested_select, - level_1: { attribute: :country_id }, - level_2: { attribute: :region_id }, - level_3: { attribute: :city_id } -``` - - - -By default, the nested select input uses the index action of the different levels to get the data. For example, the level 2 (region) will perform an ajax request to `/admin/regions&country_id_eq=[selected_country_id]` to get the regions for a given country. -It's not mandatory to register the ActiveAdmin pages. But, if you don't, you'll need to pass the `url` attribute, on each level, to make it work. - -```ruby -f.input :city_id, as: :nested_select, - level_1: { - attribute: :country_id, - url: '/api/countries' - }, - level_2: { - attribute: :region_id, - url: '/api/regions' - }, - level_3: { - attribute: :city_id, - url: '/api/cities' - } -``` - -> Remember: those custom endpoints need to work with Ransack filters. - -Another option is to pass the `collection` attribute. If you set this, the `url` attribute will be ignored (no ajax request will be executed) and you will work with preloaded collections. - -```ruby -f.input :city_id, as: :nested_select, - level_1: { - attribute: :country_id, - collection: Country.all - }, - level_2: { - attribute: :region_id, - collection: Region.active - }, - level_3: { - attribute: :city_id, - collection: City.all - } -``` - -### Options - -Nested select, allows you to customize the general behavior of the input: - -* `fields`: **(optional)** An array of field names where to search for matches in the related model. If we give many fields, they will be searched with an OR condition. -* `display_name`: **(optional)** You can pass an optional `display_name` to set the attribute (or method) to show results on the select. It **defaults to**: `name` -* `minimum_input_length`: **(optional)** Minimum number of characters required to initiate the search. It **defaults to**: `1`. Set this value to `0` to disable type-to-search and show a static list. -* `response_root`: **(optional)** If you have defined the `url` attribute and a request to that url responds with a root, you can indicate the name of that root with this attribute. By default, the gem will try to infer the root from url. For example: if `url` is `GET /admin/countries`, the root will be `countries`. If you have a rootless api, you don't need to worry about this attribute. -* `predicate`: **(optional)** You can change the default [ransack predicate](https://github.com/activerecord-hackery/ransack#search-matchers). It **defaults to** `contains` - -```ruby -f.input :city_id, as: :nested_select, - fields: [:name, :id], - display_name: :id, - minimum_input_length: 3, - level_1: { attribute: :country_id }, - level_2: { attribute: :region_id }, - level_3: { attribute: :city_id } -``` - - - -Also, you can redefine general options on each level. - -```ruby -f.input :city_id, as: :nested_select, - fields: [:name], - display_name: :name, - minimum_input_length: 0, - level_1: { - attribute: :country_id, - minimum_input_length: 3, - url: '/api/countries', - response_root: 'paises' - }, - level_2: { - attribute: :region_id, - display_name: :id, - }, - level_3: { - attribute: :city_id, - fields: [:name, :information] - } -``` - -> `response_root` is not valid as general configuration. You need to define this attribute by level. - - - -If you are using ajax search, you can define custom filters. For example, if you have: - -```ruby -f.input :city_id, as: :nested_select, - level_1: { attribute: :country_id }, - level_2: { - attribute: :region_id, - filters: { name_contains: "Cuy", id_gt: 22 } - }, - level_3: { attribute: :city_id } -``` - -After select a country, the regions will be filtered by: - -* The selected country id. -* The text entered in the region's input. -* **All filters passed on `:filters` attribute. Each filter needs to be a key (Ransak gem style) with a value.** diff --git a/docs/select2_tags.md b/docs/select2_tags.md deleted file mode 100644 index 1450f5b2..00000000 --- a/docs/select2_tags.md +++ /dev/null @@ -1,45 +0,0 @@ -# Select2 - -## Tagging - -To enable select2 with tags functionality you need to do the following: - -```ruby -f.input :names, as: :tags -``` - -You can load previous created tags using `collection` option passing an array of strings like this: - -```ruby -f.input :names, as: :tags, collection: ['Julio', 'Emilio', 'Leandro'] -``` - - - -## Tagging with Active Record collections - -To use tagging functionality with Active Record collections you need to do something like this: - -```ruby -class Event < ActiveRecord::Base - has_and_belongs_to_many :performers -end - -class Performer < ActiveRecord::Base - has_and_belongs_to_many :events -end -``` - -So, in the ActiveAdmin's Event form, you can add: - -```ruby -f.input :performer_ids, as: :tags, collection: Performer.all, display_name: :full_name -``` - -> Remember: the input name must be: `performer_ids` not `performers` and you need to add to `permit_params` the `performer_ids: []` key. - -### Options - -* `display_name`: **(optional)** You can pass an optional `display_name` to set the attribute (or method) to show results on the select. It **defaults to**: `name` -* `value`: **(optional)** You can pass an optional `value` to set the attribute (or method) to use when an item is selected. It **defaults to**: `id` -* `width`: **(optional)** You can set the select input width (px or %). diff --git a/docs/slim-select_default.md b/docs/slim-select_default.md new file mode 100644 index 00000000..5633d83c --- /dev/null +++ b/docs/slim-select_default.md @@ -0,0 +1,31 @@ +# Slim Select + +## Default + +As default behavior, all select controls in your admin app will be wrapped by [Slim Select](https://slimselectjs.com/). + + + +If you don't want to use it in a specific control, just add the `"default-select"` class: + +``` +f.input :created_at, input_html: { class: "default-select" } +``` + +If you don't want all the select controls wrapped by slim select, you can change the default behavior setting as `"default"` the `default_select` option in the initializer. + +```ruby +ActiveadminAddons.setup do |config| + config.default_select = "default" +end +``` + +Now, if you want to enable [Slim Select](https://slimselectjs.com/) for a single control, you can add the `"slim-select"` class: + +``` +f.input :created_at, input_html: { class: "slim-select" } +``` + +### Options + +* `tags`: **(optional)** boolean option, by **default** it's `false`. If `true`, it allows dynamic option creation [as described here](https://slimselectjs.com/events#addable). It will also add the input's initial value to the select options if it's not in the supplied collection. Note that, unlike the `tags_input`, this does not allow multiple values. Only available for form inputs, not filters. diff --git a/docs/slim-select_nested_select.md b/docs/slim-select_nested_select.md new file mode 100644 index 00000000..1c9a0cd8 --- /dev/null +++ b/docs/slim-select_nested_select.md @@ -0,0 +1,151 @@ +# Slim Select + +## Nested Select + +Lets say you have the following Active Record models + +```ruby +class Country < ActiveRecord::Base +end + +class Region < ActiveRecord::Base + belongs_to :country +end + +class City < ActiveRecord::Base + belongs_to :region +end +``` + +And the following Active Admin pages: + +```ruby +ActiveAdmin.register Country do + permit_params :name +end + +ActiveAdmin.register Region do + permit_params :name, :country_id +end + +ActiveAdmin.register City do + permit_params :name, :region_id +end +``` + +to enable nested select functionality, you we'll need to do the following: + +```ruby +f.input :city, as: :nested_select, + level_1: { attribute: :country }, + level_2: { attribute: :region }, + level_3: { attribute: :city } +``` + + + +By default, the nested select input uses the index action of the different levels to get the data. For example, the level 2 (region) will perform an ajax request to `/admin/regions&country_id_eq=[selected_country_id]` to get the regions for a given country. +It's not mandatory to register the ActiveAdmin pages. But, if you don't, you'll need to pass the `url` attribute, on each level, to make it work. + +```ruby +f.input :city, as: :nested_select, + level_1: { + attribute: :country, + url: '/api/countries' + }, + level_2: { + attribute: :region, + url: '/api/regions' + }, + level_3: { + attribute: :city, + url: '/api/cities' + } +``` + +> Remember: those custom endpoints need to work with Ransack filters. + +Another option is to pass the `collection` attribute. If you set this, the `url` attribute will be ignored (no ajax request will be executed) and you will work with preloaded collections. + +```ruby +f.input :city, as: :nested_select, + level_1: { + attribute: :country, + collection: Country.all + }, + level_2: { + attribute: :region, + collection: Region.active + }, + level_3: { + attribute: :city, + collection: City.all + } +``` + +### Options + +Nested select, allows you to customize the general behavior of the input: + +* `fields`: **(optional)** An array of field names where to search for matches in the related model. If we give many fields, they will be searched with an OR condition. +* `display_name`: **(optional)** You can pass an optional `display_name` to set the attribute (or method) to show results on the select. It **defaults to**: `name` +* `minimum_input_length`: **(optional)** Minimum number of characters required to initiate the search. It **defaults to**: `1`. Set this value to `0` to disable type-to-search and show a static list. +* `response_root`: **(optional)** If you have defined the `url` attribute and a request to that url responds with a root, you can indicate the name of that root with this attribute. By default, the gem will try to infer the root from the name of the input. If you have a rootless api, you don't need to worry about this attribute. +* `predicate`: **(optional)** You can change the default [ransack predicate](https://github.com/activerecord-hackery/ransack#search-matchers). It **defaults to** `cont` + +```ruby +f.input :city, as: :nested_select, + fields: [:name, :id], + display_name: :id, + minimum_input_length: 1, + level_1: { attribute: :country }, + level_2: { attribute: :region }, + level_3: { attribute: :city } +``` + + + +Also, you can redefine general options on each level. + +```ruby +f.input :city, as: :nested_select, + fields: [:name], + display_name: :name, + minimum_input_length: 0, + level_1: { + attribute: :country, + minimum_input_length: 3, + url: '/api/countries', + response_root: 'paises' + }, + level_2: { + attribute: :region, + display_name: :id, + }, + level_3: { + attribute: :city, + fields: [:name, :information] + } +``` + +> `response_root` is not valid as general configuration. You need to define this attribute by level. + + + +If you are using ajax search, you can define custom filters. For example, if you have: + +```ruby +f.input :city, as: :nested_select, + level_1: { attribute: :country }, + level_2: { + attribute: :region, + filters: { name_cont: "Cuy", id_gt: 22 } + }, + level_3: { attribute: :city } +``` + +After selecting a country, the regions will be filtered by: + +* The selected country id. +* The text entered in the region's input. +* **All filters passed on `:filters` attribute. Each filter needs to be a key (Ransak gem style) with a value.** diff --git a/docs/select2_search.md b/docs/slim-select_search.md similarity index 57% rename from docs/select2_search.md rename to docs/slim-select_search.md index b469829a..e65a9d4e 100644 --- a/docs/select2_search.md +++ b/docs/slim-select_search.md @@ -1,16 +1,16 @@ -# Select2 +# Slim Select ## Ajax Search -To enable select2 ajax search functionality you need to do the following: +To enable Slim Select ajax search functionality you need to do the following: ```ruby - f.input :category_id, as: :search_select, url: admin_categories_path, + f.input :category, as: :search_select, url: admin_categories_path, fields: [:name, :description], display_name: 'name', minimum_input_length: 2, order_by: 'description_asc' ``` - + ## Filter Usage @@ -18,16 +18,24 @@ To use on filters you need to add `as: :search_select_filter` with same options. If you want to use url helpers, use a `proc` like on the example ```ruby - filter :category_id, as: :search_select_filter, url: proc { admin_categories_path }, + filter :category, as: :search_select_filter, url: proc { admin_categories_path }, fields: [:name, :description], display_name: 'name', minimum_input_length: 2, order_by: 'description_asc' ``` +In case you need to filter with an attribute of another table you need to include the `method_model` option. In the classic User has many Post's and Post has many Comment's example, in the Comment index you could add this filter: + +```ruby + filter :posts_user_id, as: :search_select_filter, url: proc { admin_users_path }, + fields: [:name, :email], display_name: 'email', minimum_input_length: 2, + order_by: 'description_asc', method_model: User, response_root: :users +``` +Note that in this case you need to use the `id` instead of the name of the association, just like you would do in a normal filter that uses an attribute of an association. + ### Options -* `category_id`: Notice we're using the relation field name, not the realtion itself, so you can't use `f.input :category`. * `url`: This is the URL where to get the results. This URL expects an activeadmin collection Url (like the index action) or anything that uses [ransack](https://github.com/activerecord-hackery/ransack) search gem. -* `response_root`: **(optional)** If a request to `url` responds with root, you can indicate the name of that root with this attribute. By default, the gem will try to infer the root from url. For example: if `url` is `GET /admin/categories`, the root will be `categories`. If you have a rootless api, you don't need to worry about this attribute. +* `response_root`: **(optional)** If a request to `url` responds with root, you can indicate the name of that root with this attribute. By default, the gem will try to infer the root from the name of the input or filter, so it is needed when using a filter on an attribute of another table for example. If you have a rootless api, you don't need to worry about this attribute. * `fields`: an array of field names where to search for matches in the related model (`Category` in this example). If we give many fields, they will be searched with an OR condition. * `display_name`: **(optional)** You can pass an optional `display_name` to set the field to show results on the select. This will be the field read from the object on loading the form and also when reading data from the ajax response(on the JSON). It **defaults to**: `name` * `minimum_input_length`: **(optional)** Minimum number of characters required to initiate the @@ -35,4 +43,5 @@ If you want to use url helpers, use a `proc` like on the example * `class`: **(optional)** You can pass extra classes for your field. * `width`: **(optional)** You can set the select input width (px or %). * `order_by`: **(optional)** Order (sort) results by a specific attribute, suffixed with `_desc` or `_asc`. Eg: `description_desc`. By **default** is used the first field in descending direction. -* `predicate`: **(optional)** You can change the default [ransack predicate](https://github.com/activerecord-hackery/ransack#search-matchers). It **defaults to** `contains` +* `predicate`: **(optional)** You can change the default [ransack predicate](https://github.com/activerecord-hackery/ransack#search-matchers). It **defaults to** `cont`. +* `method_model`: **(optional)** Use in case you need to search or filter an attribute of another table. diff --git a/docs/select2_selected_list.md b/docs/slim-select_selected_list.md similarity index 95% rename from docs/select2_selected_list.md rename to docs/slim-select_selected_list.md index cf26c0d7..18fda7c2 100644 --- a/docs/select2_selected_list.md +++ b/docs/slim-select_selected_list.md @@ -1,4 +1,4 @@ -# Select2 +# Slim Select ## Selected List @@ -24,7 +24,7 @@ f.input :performer_ids, as: :selected_list To get... - + > Remember: the input name must be: `performer_ids` not `performers` and you need to add to `permit_params` the `performer_ids: []` key. @@ -37,4 +37,4 @@ To get... * `display_name`: **(optional)** You can pass an optional `display_name` to set the attribute to show results on the select. It **defaults to**: `name`. * `width`: **(optional)** You can set the select input width (px or %). * `order_by`: **(optional)** Order (sort) results by a specific attribute, suffixed with `_desc` or `_asc`. Eg: `description_desc`. By **default** is used the first field in descending direction. -* `predicate`: **(optional)** You can change the default [ransack predicate](https://github.com/activerecord-hackery/ransack#search-matchers). It **defaults to** `contains` +* `predicate`: **(optional)** You can change the default [ransack predicate](https://github.com/activerecord-hackery/ransack#search-matchers). It **defaults to** `cont` diff --git a/docs/slim-select_tags.md b/docs/slim-select_tags.md new file mode 100644 index 00000000..5ab02b01 --- /dev/null +++ b/docs/slim-select_tags.md @@ -0,0 +1,51 @@ +# Slim Select + +## Tagging + +To allow selecting multiple values, you can use the `:tags` input type: + +```ruby +f.input :names, as: :tags +``` + +You can load previously created tags using `collection` option passing an array of strings like this: + +```ruby +f.input :names, as: :tags, collection: ['Diego', 'Leandro', 'Guillermo'] +``` + + + +## Tagging with Active Record collections + +To use tagging functionality with Active Record collections you need to do something like this: + +```ruby +class Event < ActiveRecord::Base + has_and_belongs_to_many :performers +end + +class Performer < ActiveRecord::Base + has_and_belongs_to_many :events +end +``` + +So, in the ActiveAdmin's Event form, you can add: + +```ruby +f.input :performer_ids, as: :tags, collection: Performer.all, display_name: :full_name +``` + +> Remember: the input name must be: `performer_ids` not `performers`. + +## :warning: Gotchas + +Note that this input type uses a regular select with `multiple: true` under the hood. As such, it also returns an array of string, so **remember to add your attribute as an array to the permitted_params**, such as `performer_ids: []`. + +Moreover, this input is subject to [this same limitation](https://edgeapi.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#:~:text=Gotcha-,The%20HTML%20specification,-says%20when%20multiple) that multiple select inputs have: the returned array will always contain an empty string. When using with AR relations or something like [ActsAsTaggableOn](https://github.com/mbleigh/acts-as-taggable-on) this shouldn't be an issue, as an empty string won't trigger the creation of a new record. However, in other cases, like when using **postgres array column**, this might be a problem. Be sure to sanitize this value before saving in those cases. + +## Options + +* `display_name`: **(optional)** You can pass an optional `display_name` to set the attribute (or method) to show results on the select. It **defaults to**: `name` +* `value`: **(optional)** You can pass an optional `value` to set the attribute (or method) to use when an item is selected. It **defaults to**: `id` +* `width`: **(optional)** You can set the select input width (px or %). diff --git a/docs/toggle_bool.md b/docs/toggle_bool.md index fcf85d38..4e152380 100644 --- a/docs/toggle_bool.md +++ b/docs/toggle_bool.md @@ -4,7 +4,7 @@ This addon features switches to toggle boolean attributes values directly at the index, avoiding the need of going the long way through the edit view to update a record. - + ## Usage @@ -39,6 +39,19 @@ The value update is done through the default update route, so you must check you `toggle_bool_column :paid, if: proc { |item| item.price.present? }` `toggle_bool_column :paid, unless: proc { |item| item.is_free? }` + + ### Confirmation message + + Optionally, you can provide a confirmation message to the user before updating the value. + + This is disabled by default, but can be enabled by adding the `confirm_message` option. Optionally, you can add the `confirm_message_trigger` option to choose when to toggle the confirm message, possible values are: + - `both` (default), + - `on` + - `off` + + `toggle_bool_column :paid, confirm_message: 'Are you sure you want to toggle this switch?', confirm_message_trigger: 'on'` + + If the user cancels the confirmation, the update action will be aborted. ### Success message @@ -48,4 +61,4 @@ The value update is done through the default update route, so you must check you `toggle_bool_column :paid, success_message: 'Item Updated Successfully!'` - If the update fails for any reason, an "Error: Update Failed" alert will be prompted (this can't be disabled nor customized) \ No newline at end of file + If the update fails for any reason, an "Error: Update Failed" alert will be prompted (this can't be disabled nor customized) diff --git a/lib/activeadmin_addons.rb b/lib/activeadmin_addons.rb index fcba987f..05decfa4 100644 --- a/lib/activeadmin_addons.rb +++ b/lib/activeadmin_addons.rb @@ -4,17 +4,20 @@ module ActiveadminAddons attr_writer :default_select, :datetime_picker_default_options, :datetime_picker_input_format def default_select - return "select2" unless @default_select + return "slim-select" unless @default_select + @default_select end def datetime_picker_default_options return {} unless @datetime_picker_default_options + @datetime_picker_default_options end def datetime_picker_input_format return "%Y-%m-%d %H:%M" unless @datetime_picker_input_format + @datetime_picker_input_format end diff --git a/lib/activeadmin_addons/active_admin_config.rb b/lib/activeadmin_addons/active_admin_config.rb index ce6630df..772f1847 100644 --- a/lib/activeadmin_addons/active_admin_config.rb +++ b/lib/activeadmin_addons/active_admin_config.rb @@ -3,6 +3,7 @@ class ActiveAdmin::Views::Pages::Base def build(*args) original_build(args) + body = get_elements_by_tag_name("body").first body.set_attribute "data-default-select", ActiveadminAddons.default_select end end diff --git a/lib/activeadmin_addons/addons/attachment_builder.rb b/lib/activeadmin_addons/addons/attachment_builder.rb deleted file mode 100644 index c364b5b9..00000000 --- a/lib/activeadmin_addons/addons/attachment_builder.rb +++ /dev/null @@ -1,60 +0,0 @@ -module ActiveAdminAddons - class AttachmentBuilder < CustomBuilder - KNOWN_EXTENSIONS = %w{ - 3gp 7z ace ai aif aiff amr asf asx bat bin bmp bup cab cbr cda cdl cdr chm - dat divx dll dmg doc docx dss dvf dwg eml eps exe fla flv gif gz hqx htm html - ifo indd iso jar jpeg jpg lnk log m4a m4b m4p m4v mcd mdb mid mov mp2 mp3 mp4 - mpeg mpg msi mswmm ogg pdf png pps ppt pptx ps psd pst ptb pub qbb qbw qxd ram - rar rm rmvb rtf sea ses sit sitx ss swf tgz thm tif tmp torrent ttf txt - vcd vob wav wma wmv wps xls xlsx xpi zip - } - - def icon_for_filename(filename) - for_ext File.extname(filename.to_s) - end - - def for_ext(file_extension) - ext = file_extension.start_with?(".") ? file_extension[1..-1] : file_extension - ext.downcase! - ext = "unknown" unless KNOWN_EXTENSIONS.include?(ext) - "fileicons/file_extension_#{ext}.png" - end - - def build_label - icon = icon_for_filename(file.original_filename) - style = { width: "20", height: "20", style: "margin-right: 5px; vertical-align: middle;" } - icon_img = context.image_tag(icon, style) - text = label_text - - context.content_tag(:span) do - context.concat(icon_img) - context.safe_concat(text) - end - end - - def label_text - label = if options[:label].nil? - file.original_filename - elsif options[:label].is_a? Proc - options[:label].call(model).to_s - else - options[:label].to_s - end - - options[:truncate] ? context.truncate(label) : label - end - - def render - raise "you need to pass a paperclip attribute" unless file.respond_to?(:url) - options[:truncate] = options.fetch(:truncate, true) - return nil unless file.exists? - context.link_to(build_label, file.url, target: "_blank", class: "attachment-link") - end - - def file - model.send(attribute) - end - end -end - -ActiveAdminAddons::AttachmentBuilder.create_view_methods diff --git a/lib/activeadmin_addons/addons/image_builder.rb b/lib/activeadmin_addons/addons/image_builder.rb index 4a44f2c7..0e52c3bc 100644 --- a/lib/activeadmin_addons/addons/image_builder.rb +++ b/lib/activeadmin_addons/addons/image_builder.rb @@ -2,9 +2,27 @@ module ActiveAdminAddons class ImageBuilder < CustomBuilder def render return nil if data.nil? - raise "you need to pass a paperclip image attribute" unless data.respond_to?(:url) - style = options.fetch(:style, :original) - context.image_tag(data.url(style)) if data.exists? + + if Object.const_defined?('Shrine::UploadedFile') && data.is_a?(Shrine::UploadedFile) + shrine_data + else + raise "you need to pass a shrine image attribute" + end + end + + private + + def shrine_data + image_options = options[:image_options].presence || {} + if options[:style] && derivatives.include?(options[:style]) + context.image_tag(model.send("#{attribute}_url", options[:style]), image_options) + else + context.image_tag(data.url, image_options) + end + end + + def derivatives + model.send("#{attribute}_derivatives") end end end diff --git a/lib/activeadmin_addons/addons/markdown_builder.rb b/lib/activeadmin_addons/addons/markdown_builder.rb new file mode 100644 index 00000000..556803c8 --- /dev/null +++ b/lib/activeadmin_addons/addons/markdown_builder.rb @@ -0,0 +1,38 @@ +require 'redcarpet' + +module ActiveAdminAddons + class MarkdownBuilder < CustomBuilder + def render + return if data.blank? + + Redcarpet::Markdown.new(renderer, extensions).render(@data).html_safe + end + + private + + def extensions_default + { fenced_code_blocks: true, + no_intra_emphasis: true, + strikethrough: true, + superscript: true } + end + + def renderer_options_default + { filter_html: true, hard_wrap: true } + end + + def extensions + @extensions ||= extensions_default.merge(options[:extensions] || {}) + end + + def render_options + @render_options ||= renderer_options_default.merge(options[:render_options] || {}) + end + + def renderer + @renderer ||= Redcarpet::Render::HTML.new(render_options) + end + end +end + +ActiveAdminAddons::MarkdownBuilder.create_view_methods diff --git a/lib/activeadmin_addons/addons/state_builder.rb b/lib/activeadmin_addons/addons/state_builder.rb index d0e6c222..65108b63 100644 --- a/lib/activeadmin_addons/addons/state_builder.rb +++ b/lib/activeadmin_addons/addons/state_builder.rb @@ -11,6 +11,7 @@ class StateBuilder < CustomBuilder def render raise "you need to install AASM gem first" unless defined? AASM raise "the #{attribute} is not an AASM state" unless state_attribute? + context.status_tag(model.aasm(machine_name).human_state, class: status_class_for_model) end diff --git a/lib/activeadmin_addons/addons/tag_builder.rb b/lib/activeadmin_addons/addons/tag_builder.rb index bc9977b2..b620b6df 100644 --- a/lib/activeadmin_addons/addons/tag_builder.rb +++ b/lib/activeadmin_addons/addons/tag_builder.rb @@ -1,13 +1,8 @@ module ActiveAdminAddons class TagBuilder < CustomBuilder def render - @enum_attr = if enumerize_attr? - :enumerize - elsif rails_enum_attr? - :enum - end + raise "you need to pass an enum attribute" unless rails_enum_attr? - raise "you need to pass an enumerize or enum attribute" unless @enum_attr append_tag end @@ -25,9 +20,9 @@ def select_tag context.div(interactive_tag_select_params) do context.select do - possible_values.each do |val| - context.option(value: val, selected: val == data) do - context.text_node val.capitalize + possible_values.each do |label, value| + context.option(value: value, selected: value == data) do + context.text_node label end end end @@ -36,7 +31,7 @@ def select_tag end def display_data - @enum_attr == :enumerize ? data.text : data + EnumUtils.translate_enum_option(model.class, attribute.to_s, data) end def interactive_params(klass) @@ -45,7 +40,7 @@ def interactive_params(klass) 'data-model' => class_name, 'data-object_id' => model.id, 'data-field' => attribute, - 'data-url' => context.resource_path(model), + 'data-url' => resource_url, 'data-value' => data } end @@ -68,17 +63,7 @@ def interactive_tag_select_params def possible_values klass = model.class - if @enum_attr == :enumerize - klass.enumerized_attributes[attribute.to_s].values - else - klass.defined_enums[attribute.to_s].keys - end - end - - def enumerize_attr? - data.is_a?("Enumerize::Value".constantize) - rescue NameError - false + EnumUtils.options_for_select(klass, attribute.to_s) end def rails_enum_attr? diff --git a/lib/activeadmin_addons/addons/toggle_bool_builder.rb b/lib/activeadmin_addons/addons/toggle_bool_builder.rb index b6d60316..63691d39 100644 --- a/lib/activeadmin_addons/addons/toggle_bool_builder.rb +++ b/lib/activeadmin_addons/addons/toggle_bool_builder.rb @@ -1,33 +1,32 @@ module ActiveAdminAddons class ToggleBoolBuilder < CustomBuilder - SWITCHES_IMAGES_SIZE = "40x16" - def render raise ArgumentError, 'Block should not be used in toggle bool columns' if block return if conditional_eval_hide? + context.div class: 'toggle-bool-switches-container' do - [true, false].each do |value| - context.span switch_image_for value - end + context.span toggle end end - def switch_image_for(value) - img_tag_class = 'toggle-bool-switch' - img_tag_class += ' hidden-switch' if value == !data - img_tag_class += ' notify-success' if options[:success_message] + def toggle + toggle_classes = 'toggle-bool-switch' + toggle_classes += ' on' if data + toggle_classes += ' notify-success' if options[:success_message] + return unless enabled_controller_action?(:update) - context.image_tag( - "switches/switch_#{value ? :on : :off}.png", - size: SWITCHES_IMAGES_SIZE, - id: "toggle-#{class_name}-#{model.id}-#{attribute}-#{value}", - class: img_tag_class, + context.span( + '', + id: "toggle-#{class_name}-#{model.id}-#{attribute}", + class: toggle_classes, 'data-model' => class_name, 'data-object_id' => model.id, 'data-field' => attribute, - 'data-value' => value, - 'data-url' => context.resource_path(model), - 'data-success_message' => options[:success_message] + 'data-value' => data, + 'data-url' => resource_url, + 'data-success_message' => options[:success_message], + 'data-confirm_message' => options[:confirm_message], + 'data-confirm_message_trigger' => options[:confirm_message_trigger] ) end @@ -35,6 +34,7 @@ def conditional_eval_hide? [:if, :unless].any? do |cond| if options[cond] raise ArgumentError, "'#{cond}' option should be a proc" unless options[cond].is_a?(Proc) + result = options[cond].call(model) cond == :if ? !result : result end diff --git a/lib/activeadmin_addons/engine.rb b/lib/activeadmin_addons/engine.rb index f9c086f9..c040c48d 100644 --- a/lib/activeadmin_addons/engine.rb +++ b/lib/activeadmin_addons/engine.rb @@ -1,16 +1,13 @@ module ActiveAdminAddons module Rails class Engine < ::Rails::Engine - require "select2-rails" - require "sass-rails" require "xdan-datetimepicker-rails" require "require_all" - initializer "initialize addons" do |app| + initializer "initialize addons" do |_app| require_rel "support" require_rel "addons" require_rel "active_admin_config" - app.config.assets.precompile += %w(select.scss fileicons/*.png switches/switch_*.png) end end end diff --git a/lib/activeadmin_addons/support/custom_builder.rb b/lib/activeadmin_addons/support/custom_builder.rb index 1368e87e..2c62d7dd 100644 --- a/lib/activeadmin_addons/support/custom_builder.rb +++ b/lib/activeadmin_addons/support/custom_builder.rb @@ -36,6 +36,26 @@ def self.builder_method_name protected + def resource_url + admin_resource&.route_instance_path(model, {}) + end + + def enabled_controller_action?(action) + admin_controller_actions.include?(action) + end + + def admin_controller_actions + (admin_controller&.action_methods&.to_a || []).map(&:to_sym) + end + + def admin_controller + context&.controller + end + + def admin_resource + context.active_admin_resource_for(model.class) + end + def data @data ||= block ? block.call(model) : model.send(attribute) end @@ -45,7 +65,7 @@ def options end def class_name - model.class.name.demodulize.underscore + model.model_name.param_key end # attachment_column :foto @@ -59,7 +79,7 @@ def attribute end def has_label? - has_opts? ? args.length == 3 : args.length == 2 + args.length == (has_opts? ? 3 : 2) end def has_opts? diff --git a/lib/activeadmin_addons/support/enum_utils.rb b/lib/activeadmin_addons/support/enum_utils.rb new file mode 100644 index 00000000..ba50486c --- /dev/null +++ b/lib/activeadmin_addons/support/enum_utils.rb @@ -0,0 +1,19 @@ +module ActiveAdminAddons + class EnumUtils + def self.options_for_select(klass, enum_name, use_db_value: false) + enum_options_hash = klass.defined_enums[enum_name] + enum_options_hash.map do |enum_option_name, db_value| + value = use_db_value ? db_value : enum_option_name + [translate_enum_option(klass, enum_name, enum_option_name), value] + end + end + + def self.translate_enum_option(klass, enum_name, enum_option_name) + return if enum_option_name.blank? + + klass_key = klass.model_name.i18n_key + key = "activerecord.attributes.#{klass_key}.#{enum_name.pluralize}.#{enum_option_name}" + I18n.t(key, default: enum_option_name) + end + end +end diff --git a/lib/activeadmin_addons/support/enumerize_formtastic_support.rb b/lib/activeadmin_addons/support/enumerize_formtastic_support.rb deleted file mode 100644 index 0d35b3c5..00000000 --- a/lib/activeadmin_addons/support/enumerize_formtastic_support.rb +++ /dev/null @@ -1,18 +0,0 @@ -module ActiveAdminAddons - module RansackFormBuilderExtension - def input(method, options = {}) - if object.is_a?(::Ransack::Search) - klass = object.klass - - if klass.respond_to?(:enumerized_attributes) && (attr = klass.enumerized_attributes[method]) - options[:collection] ||= attr.options - options[:as] = :select - end - end - - super(method, options) - end - end -end - -::Formtastic::FormBuilder.send :prepend, ActiveAdminAddons::RansackFormBuilderExtension diff --git a/lib/activeadmin_addons/support/input_base.rb b/lib/activeadmin_addons/support/input_base.rb index 4ee6c43c..659f88ad 100644 --- a/lib/activeadmin_addons/support/input_base.rb +++ b/lib/activeadmin_addons/support/input_base.rb @@ -1,46 +1,11 @@ +require_relative "input_helpers/input_options_handler" +require_relative "input_helpers/input_methods" +require_relative "input_helpers/input_html_helpers" + module ActiveAdminAddons class InputBase < Formtastic::Inputs::StringInput include InputOptionsHandler include InputMethods include InputHtmlHelpers - - def to_html - load_input_class - load_control_attributes - render_custom_input - if parts.any? - return input_wrapping { parts_to_html } - else - super - end - end - - def input_html_options - super.merge(control_attributes) - end - - def parts_to_html - parts.flatten.join("\n").html_safe - end - - def load_input_class - load_class(self.class.to_s.underscore.dasherize) - end - - def load_control_attributes - # Override on child classes if needed - end - - def render_custom_input - # Override on child classes if needed - end - - def parts - @parts ||= [] - end - - def concat(part) - parts << part - end end end diff --git a/lib/activeadmin_addons/support/input_helpers/filter_input.rb b/lib/activeadmin_addons/support/input_helpers/filter_input.rb index b65ff69f..402d3e59 100644 --- a/lib/activeadmin_addons/support/input_helpers/filter_input.rb +++ b/lib/activeadmin_addons/support/input_helpers/filter_input.rb @@ -1,3 +1,5 @@ +require_relative "filter_input_methods" + module ActiveAdminAddons module FilterInput include ActiveAdmin::Inputs::Filters::Base diff --git a/lib/activeadmin_addons/support/input_helpers/filter_input_methods.rb b/lib/activeadmin_addons/support/input_helpers/filter_input_methods.rb index 0c98b43d..feb4aa61 100644 --- a/lib/activeadmin_addons/support/input_helpers/filter_input_methods.rb +++ b/lib/activeadmin_addons/support/input_helpers/filter_input_methods.rb @@ -1,3 +1,5 @@ +require_relative "input_methods" + module ActiveAdminAddons module FilterInputMethods include InputMethods @@ -12,6 +14,7 @@ def input_value end return unless result + result.values.first.value end diff --git a/lib/activeadmin_addons/support/input_helpers/input_html_helpers.rb b/lib/activeadmin_addons/support/input_helpers/input_html_helpers.rb index 536f5ccd..5bade547 100644 --- a/lib/activeadmin_addons/support/input_helpers/input_html_helpers.rb +++ b/lib/activeadmin_addons/support/input_helpers/input_html_helpers.rb @@ -16,6 +16,7 @@ def method_to_input_array_name def method_to_input_id(id) raise "invalid input id" if id.blank? + "#{prefixed_method}_#{id}" end @@ -39,5 +40,47 @@ def build_hidden_control(id, name, value = nil) value: value ) end + + def to_html + load_input_class + load_control_attributes + render_custom_input + if parts.any? + input_wrapping { parts_to_html } + else + super + end + end + + def input_html_options + # maxwidth and size are added by Formtastic::Inputs::StringInput + # but according to the HTML standard these are not valid attributes + # on the inputs provided by this module + super.except(:maxlength, :size).merge(control_attributes) + end + + def load_input_class + load_class(self.class.to_s.underscore.dasherize) + end + + def load_control_attributes + # Override on child classes if needed + end + + def render_custom_input + # Override on child classes if needed + end + + def parts_to_html + parts.flatten.join("\n").html_safe # rubocop:disable Rails/OutputSafety + end + + def concat(part) + parts << part + end + + def parts + @parts ||= [] + end end end diff --git a/lib/activeadmin_addons/support/input_helpers/input_methods.rb b/lib/activeadmin_addons/support/input_helpers/input_methods.rb index 01064c99..d99694e2 100644 --- a/lib/activeadmin_addons/support/input_helpers/input_methods.rb +++ b/lib/activeadmin_addons/support/input_helpers/input_methods.rb @@ -6,11 +6,13 @@ def model_name def valid_method raise "invalid method given" if method.blank? + method end def valid_object raise "blank object given" if @object.blank? + @object end @@ -23,7 +25,8 @@ def association_name end def method_model - object_class.reflect_on_association(association_name).try(:klass) || + @options[:method_model] || + object_class.reflect_on_association(association_name).try(:klass) || association_name.classify.constantize end @@ -41,6 +44,10 @@ def input_value @input_value ||= valid_object.send(valid_method) end + def input_association_value + @input_association_value ||= valid_object.send(association_name) + end + def translated_method valid_object.class.human_attribute_name(valid_method) end @@ -59,6 +66,7 @@ def url_from_method def build_virtual_attr attribute_name = "virtual_#{valid_method}_attr" fail "#{attribute_name} is already defined" if valid_object.respond_to?(attribute_name) + valid_object.singleton_class.send(:attr_accessor, attribute_name) attribute_name end diff --git a/lib/activeadmin_addons/support/input_helpers/input_options_handler.rb b/lib/activeadmin_addons/support/input_helpers/input_options_handler.rb index e9e5080c..e3e64989 100644 --- a/lib/activeadmin_addons/support/input_helpers/input_options_handler.rb +++ b/lib/activeadmin_addons/support/input_helpers/input_options_handler.rb @@ -41,6 +41,7 @@ def load_attr(attr_name, options = {}) def load_class(class_attr) @css_classes ||= [] return if class_attr.blank? + class_attr = class_attr.strip @css_classes << class_attr class_attr @@ -49,6 +50,7 @@ def load_class(class_attr) def get_data_attr_value(attr_name) item = data_attr_options[attr_name.to_sym] return unless item + item[:value] end @@ -56,13 +58,14 @@ def get_data_attr_value(attr_name) def formatted_option_value(item) return item[:value].send(item[:formatter]) if item[:formatter] + item[:value] end def load_option_attr(attr_name, options) value = calculate_attr_value(attr_name, options) item = { value: value } - item[:formatter] = options[:formatter] unless options[:formatter].blank? + item[:formatter] = options[:formatter] if options[:formatter].present? item end @@ -80,6 +83,7 @@ def calculate_attr_value(attr_name, attr_options) default_value = attr_options[:default] return unless default_value return default_value.call if default_value.is_a?(Proc) + default_value end diff --git a/lib/activeadmin_addons/support/input_helpers/select_helpers.rb b/lib/activeadmin_addons/support/input_helpers/select_helpers.rb index 0b08fc3e..367f2086 100644 --- a/lib/activeadmin_addons/support/input_helpers/select_helpers.rb +++ b/lib/activeadmin_addons/support/input_helpers/select_helpers.rb @@ -14,7 +14,7 @@ def array_to_select_options end def initial_collection_to_select_options - initial_options = [[nil]] # add blank option + initial_options = [] # add blank option selected = selected_item if selected @@ -42,6 +42,7 @@ def collection_to_select_options def item_to_select_option(item) return unless item + { id: item.send((valid_options[:value] || :id)), text: item.send((valid_options[:display_name] || :name)) @@ -56,29 +57,34 @@ def active_record_select? end def selected_collection - @selected_collection ||= begin - if active_record_relation?(collection) - collection.model.where(id: input_value) - else - method_model.where(id: input_value) - end - end + @selected_collection ||= if active_record_relation?(collection) + collection.model.where(id: input_value) + else + method_model.where(id: input_value) + end end def selected_item - @selected_item ||= selected_collection.first + @selected_item ||= begin + input_association_value + rescue NoMethodError + selected_collection.first + end end private def active_record_relation?(value) klass = value.class.name - klass == "ActiveRecord::Relation" || - klass == "ActiveRecord::Associations::CollectionProxy" + [ + "ActiveRecord::Relation", + "ActiveRecord::Associations::CollectionProxy" + ].include?(klass) end def valid_options raise "missing @options hash" unless !!@options + @options end diff --git a/lib/activeadmin_addons/support/select_filter_input_extension.rb b/lib/activeadmin_addons/support/select_filter_input_extension.rb new file mode 100644 index 00000000..90f7d238 --- /dev/null +++ b/lib/activeadmin_addons/support/select_filter_input_extension.rb @@ -0,0 +1,17 @@ +module ActiveAdminAddons + module SelectFilterInputExtension + def collection_from_enum? + klass.respond_to?(:defined_enums) && klass.defined_enums.has_key?(method.to_s) + end + + def collection + if !options[:collection] && collection_from_enum? + EnumUtils.options_for_select(klass, method.to_s, use_db_value: true) + else + super + end + end + end +end + +::ActiveAdmin::Inputs::Filters::SelectInput.prepend ActiveAdminAddons::SelectFilterInputExtension diff --git a/lib/activeadmin_addons/support/select_input_base.rb b/lib/activeadmin_addons/support/select_input_base.rb new file mode 100644 index 00000000..e3438158 --- /dev/null +++ b/lib/activeadmin_addons/support/select_input_base.rb @@ -0,0 +1,11 @@ +require_relative "input_helpers/input_options_handler" +require_relative "input_helpers/input_methods" +require_relative "input_helpers/input_html_helpers" + +module ActiveAdminAddons + class SelectInputBase < Formtastic::Inputs::SelectInput + include InputOptionsHandler + include InputMethods + include InputHtmlHelpers + end +end diff --git a/lib/activeadmin_addons/support/set_datepicker.rb b/lib/activeadmin_addons/support/set_datepicker.rb index 7e4e3a14..4b697c3a 100644 --- a/lib/activeadmin_addons/support/set_datepicker.rb +++ b/lib/activeadmin_addons/support/set_datepicker.rb @@ -5,9 +5,19 @@ module InputHelper def default_input_type(method, options = {}) input_type = original_default_input_type(method, options) - input_type = :datepicker if input_type == :date_select + + if input_type == :date_select && active_admin_context? + input_type = :datepicker + end + input_type end + + def active_admin_context? + options[:builder] == ::ActiveAdmin::FormBuilder + rescue NameError + false + end end end end diff --git a/lib/activeadmin_addons/version.rb b/lib/activeadmin_addons/version.rb index 65f3783f..a7454a3c 100644 --- a/lib/activeadmin_addons/version.rb +++ b/lib/activeadmin_addons/version.rb @@ -1,3 +1,3 @@ module ActiveadminAddons - VERSION = "1.4.0" + VERSION = "2.0.0.beta.3" end diff --git a/lib/generators/activeadmin_addons/install/install_generator.rb b/lib/generators/activeadmin_addons/install/install_generator.rb index 93aaa715..fc5f385e 100644 --- a/lib/generators/activeadmin_addons/install/install_generator.rb +++ b/lib/generators/activeadmin_addons/install/install_generator.rb @@ -1,35 +1,27 @@ module ActiveadminAddons module Generators class InstallGenerator < Rails::Generators::Base - source_root File.expand_path('../templates', __FILE__) + source_root File.expand_path('templates', __dir__) def create_initializer template "initializer.rb", "config/initializers/activeadmin_addons.rb" end - def add_javascripts - file_path = 'app/assets/javascripts/active_admin' - line_to_add = "#= require activeadmin_addons/all\n" - reference = "#= require active_admin/base\n" - - begin - inject_into_file("#{file_path}.js.coffee", line_to_add, after: reference) - rescue Errno::ENOENT - line_to_add = "//= require activeadmin_addons/all\n" - reference = "//= require active_admin/base\n" - inject_into_file("#{file_path}.js", line_to_add, after: reference) + def setup_assets + if use_webpacker? + generate "activeadmin_addons:webpacker" + else + puts "ActiveAdmin Addons requires ActiveAdmin installed with webpacker. "\ + "Please run 'rails generate active_admin:install --webpacker' and then 'rails generate activeadmin_addons:install'" end end - def add_stylesheets - file_path = 'app/assets/stylesheets/active_admin' - line_to_add = "//= require activeadmin_addons/all\n" + private - begin - prepend_file("#{file_path}.scss", line_to_add) - rescue Errno::ENOENT - prepend_file("#{file_path}.css.scss", line_to_add) - end + def use_webpacker? + ActiveAdmin.application.use_webpacker + rescue NoMethodError + false end end end diff --git a/lib/generators/activeadmin_addons/install/templates/initializer.rb b/lib/generators/activeadmin_addons/install/templates/initializer.rb index ac9ea445..e36b0754 100644 --- a/lib/generators/activeadmin_addons/install/templates/initializer.rb +++ b/lib/generators/activeadmin_addons/install/templates/initializer.rb @@ -1,9 +1,9 @@ ActiveadminAddons.setup do |config| # Change to "default" if you want to use ActiveAdmin's default select control. - # config.default_select = "select2" + # config.default_select = "slim-select" # Set default options for DateTimePickerInput. The options you can provide are the same as in - # xdan's datetimepicker library (https://github.com/xdan/datetimepicker/tree/2.5.4). Yo need to + # xdan's datetimepicker library (https://github.com/xdan/datetimepicker/tree/2.5.4). You need to # pass a ruby hash, avoid camelCase keys. For example: use min_date instead of minDate key. # config.datetime_picker_default_options = {} diff --git a/lib/generators/activeadmin_addons/webpacker/webpacker_generator.rb b/lib/generators/activeadmin_addons/webpacker/webpacker_generator.rb new file mode 100644 index 00000000..3e057a30 --- /dev/null +++ b/lib/generators/activeadmin_addons/webpacker/webpacker_generator.rb @@ -0,0 +1,32 @@ +module ActiveadminAddons + module Generators + class WebpackerGenerator < Rails::Generators::Base + def add_javascripts + file_path = 'app/javascript/packs/active_admin.js' + reference = "import \"@activeadmin/activeadmin\";\n" + + inject_into_file(file_path, js_assets, after: reference) + end + + def add_stylesheets + file_path = 'app/javascript/stylesheets/active_admin.scss' + + prepend_file(file_path, css_assets) + end + + def install_package + run "yarn add activeadmin_addons@beta" + end + + private + + def js_assets + "import \"activeadmin_addons\"\n" + end + + def css_assets + "@import 'activeadmin_addons/src/stylesheets/all';\n" + end + end + end +end diff --git a/package.json b/package.json new file mode 100644 index 00000000..1ad9e549 --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "activeadmin_addons", + "version": "2.0.0-beta.3", + "description": "Set of addons to help with the activeadmin ui", + "main": "src/all.js", + "files": [ + "src/*" + ], + "repository": "https://github.com/platanus/activeadmin_addons.git", + "author": "Platanus ", + "license": "MIT", + "scripts": { + "prepublishOnly": "./bin/js-prepublish" + }, + "devDependencies": { + "eslint": "^8.27.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-platanus": "^0.1.0" + }, + "dependencies": { + "jquery-datetimepicker": "^2.5.21", + "lodash.merge": "^4.6.2", + "script-loader": "^0.7.2", + "slim-select": "^2.4.5" + } +} diff --git a/spec/dummy/.browserslistrc b/spec/dummy/.browserslistrc new file mode 100644 index 00000000..e94f8140 --- /dev/null +++ b/spec/dummy/.browserslistrc @@ -0,0 +1 @@ +defaults diff --git a/spec/dummy/Aptfile b/spec/dummy/Aptfile new file mode 100644 index 00000000..02b92fa8 --- /dev/null +++ b/spec/dummy/Aptfile @@ -0,0 +1,5 @@ +libglib2.0-0 +libglib2.0-dev +libpoppler-glib8 +libwebp-dev +webp diff --git a/spec/dummy/Rakefile b/spec/dummy/Rakefile index ba6b733d..f7a26dda 100644 --- a/spec/dummy/Rakefile +++ b/spec/dummy/Rakefile @@ -1,6 +1,6 @@ # Add your own tasks in files placed in lib/tasks ending in .rake, # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. -require File.expand_path('../config/application', __FILE__) +require File.expand_path('config/application', __dir__) Rails.application.load_tasks diff --git a/spec/dummy/app/admin/admin_users.rb b/spec/dummy/app/admin/admin_users.rb deleted file mode 100644 index 433be5d7..00000000 --- a/spec/dummy/app/admin/admin_users.rb +++ /dev/null @@ -1,28 +0,0 @@ -ActiveAdmin.register AdminUser do - permit_params :email, :password, :password_confirmation - - index do - selectable_column - id_column - column :email - column :current_sign_in_at - column :sign_in_count - column :created_at - actions - end - - filter :email - filter :current_sign_in_at - filter :sign_in_count - filter :created_at - - form do |f| - f.inputs "Admin Details" do - f.input :email - f.input :password - f.input :password_confirmation - end - f.actions - end - -end diff --git a/spec/dummy/app/admin/dashboard.rb b/spec/dummy/app/admin/dashboard.rb index eae7baf0..c61d14d3 100644 --- a/spec/dummy/app/admin/dashboard.rb +++ b/spec/dummy/app/admin/dashboard.rb @@ -1,8 +1,7 @@ ActiveAdmin.register_page "Dashboard" do + menu priority: 1, label: proc { I18n.t("active_admin.dashboard") } - menu priority: 1, label: proc{ I18n.t("active_admin.dashboard") } - - content title: proc{ I18n.t("active_admin.dashboard") } do + content title: proc { I18n.t("active_admin.dashboard") } do div class: "blank_slate_container", id: "dashboard_default_message" do span class: "blank_slate" do span I18n.t("active_admin.dashboard_welcome.welcome") diff --git a/spec/dummy/app/admin/departments.rb b/spec/dummy/app/admin/departments.rb new file mode 100644 index 00000000..00e293a1 --- /dev/null +++ b/spec/dummy/app/admin/departments.rb @@ -0,0 +1,18 @@ +ActiveAdmin.register Department do + permit_params :name, departments_cities_attributes: [:id, :city_id, :_destroy] + + form do |f| + f.inputs do + f.input :name + end + f.inputs do + f.has_many :departments_cities, allow_destroy: true do |city| + city.input :city_id, as: :nested_select, required: true, + level_1: { attribute: :country_id }, + level_2: { attribute: :region_id }, + level_3: { attribute: :city_id } + end + end + f.actions + end +end diff --git a/spec/dummy/app/admin/invoices.rb b/spec/dummy/app/admin/invoices.rb index 55ab83a5..783ef20c 100644 --- a/spec/dummy/app/admin/invoices.rb +++ b/spec/dummy/app/admin/invoices.rb @@ -1,31 +1,27 @@ ActiveAdmin.register Invoice do - permit_params :legal_date, :number, :paid, :state, :attachment, :photo, :category_id, - :city_id, :amount, :color, :updated_at, :active, item_ids: [], other_item_ids: [] + permit_params :legal_date, :number, :paid, :state, :category_id, :city_id, + :amount, :color, :updated_at, :picture, :active, :description, + item_ids: [], other_item_ids: [] filter :id, as: :numeric_range_filter filter :category_id, as: :search_select_filter, - url: proc { current_admin_user.categories_url }, + url: "/admin/categories", fields: [:name], minimum_input_length: 0 - filter :buyer_id, as: :search_select_filter, - minimum_input_length: 0, - url: '/admin/admin_users', - fields: [:email], - display_name: :email + filter :created_at, as: :date_time_picker_filter index do selectable_column id_column tag_column :state, interactive: true bool_column :paid - image_column :photo, style: :thumb - attachment_column :attachment + image_column :picture, style: :jpg_small number_column :amount, as: :currency, unit: "$", separator: "," - list_column :skills - list_column :contact toggle_bool_column :active + markdown_column :description + column :created_at actions end @@ -38,13 +34,17 @@ list_row :skills, list_type: :ol list_row :contact, localize: true list_row :details, localize: true - image_row("Mi foto", :photo, style: :big, &:photo) - attachment_row("My doc", :attachment, label: 'Download file', truncate: false, &:attachment) + image_row("Mi picture", :picture, image_options: { width: 100 }, &:picture) row :legal_date number_row("Monto", :amount, as: :human, &:amount) row :city + markdown_row(:description) bool_row :active end + + panel "Formtastic form" do + render partial: "formtastic_form" + end end form do |f| @@ -58,10 +58,10 @@ ] } - f.input :state + f.input :state, as: :select f.input :category_id, as: :search_select, - url: proc { current_admin_user.categories_url }, + url: proc { "/admin/categories" }, fields: [:name], display_name: 'name', minimum_input_length: 1, @@ -82,9 +82,11 @@ f.input :other_item_ids, as: :tags, collection: Item.all.limit(5) - f.input :attachment + f.input :description + + f.input :legal_date - f.input :photo + f.input :picture, as: :file f.input :color, as: :color_picker, palette: Invoice.colors diff --git a/spec/dummy/app/admin/items.rb b/spec/dummy/app/admin/items.rb index 197575a7..60832d98 100644 --- a/spec/dummy/app/admin/items.rb +++ b/spec/dummy/app/admin/items.rb @@ -1,3 +1,10 @@ ActiveAdmin.register Item do permit_params :name, :description + + form do |f| + f.inputs do + f.input :created_at + end + f.actions + end end diff --git a/spec/dummy/app/assets/config/manifest.js b/spec/dummy/app/assets/config/manifest.js new file mode 100644 index 00000000..a3c72cb3 --- /dev/null +++ b/spec/dummy/app/assets/config/manifest.js @@ -0,0 +1,4 @@ +//= link_tree ../images +//= link_directory ../javascripts +//= link_directory ../stylesheets +//= link fileicons/file_extension_pdf.png diff --git a/spec/dummy/app/assets/stylesheets/active_admin.scss b/spec/dummy/app/assets/stylesheets/active_admin.scss index 5b1bd159..f029db5b 100644 --- a/spec/dummy/app/assets/stylesheets/active_admin.scss +++ b/spec/dummy/app/assets/stylesheets/active_admin.scss @@ -1,9 +1,8 @@ -//= require activeadmin_addons/all - +@import 'activeadmin_addons/all'; // SASS variable overrides must be declared before loading up Active Admin's styles. // // To view the variables that Active Admin provides, take a look at -// `app/assets/stylesheets/active_admin/mixins/_variables.css.scss` in the +// `app/assets/stylesheets/active_admin/mixins/_variables.scss` in the // Active Admin source. // // For example, to change the sidebar width: @@ -17,25 +16,3 @@ // For example, to change the default status-tag color: // // .status_tag { background: #6090DB; } - -$pending-color: #FF9900; -$rejected-color: #FF0000; -$approved-color: #08A510; - -.status_tag { - &.pending { background: $pending-color; } - &.rejected { background: $rejected-color; } - &.approved { background: $approved-color; } -} - -.bool-value { - font-size: 12px; - - &.true-value { - color: $approved-color; - } - - &.false-value { - color: $rejected-color; - } -} diff --git a/spec/dummy/app/javascript/packs/active_admin.js b/spec/dummy/app/javascript/packs/active_admin.js new file mode 100644 index 00000000..bf680560 --- /dev/null +++ b/spec/dummy/app/javascript/packs/active_admin.js @@ -0,0 +1,7 @@ +// Load Active Admin's styles into Webpacker, +// see `active_admin.scss` for customization. + +import 'script-loader!jquery/dist/jquery.min' +import "../stylesheets/active_admin"; +import "@activeadmin/activeadmin"; +import "../../../../../app/javascript/activeadmin_addons/all"; diff --git a/spec/dummy/app/javascript/packs/active_admin/print.scss b/spec/dummy/app/javascript/packs/active_admin/print.scss new file mode 100644 index 00000000..79ac0361 --- /dev/null +++ b/spec/dummy/app/javascript/packs/active_admin/print.scss @@ -0,0 +1,2 @@ +/* Active Admin Print Stylesheet */ +@import "~@activeadmin/activeadmin/src/scss/print"; diff --git a/spec/dummy/app/javascript/packs/application.js b/spec/dummy/app/javascript/packs/application.js new file mode 100644 index 00000000..7c3021d7 --- /dev/null +++ b/spec/dummy/app/javascript/packs/application.js @@ -0,0 +1,18 @@ +/* eslint no-console:0 */ +// This file is automatically compiled by Webpack, along with any other files +// present in this directory. You're encouraged to place your actual application logic in +// a relevant structure within app/javascript and only use these pack files to reference +// that code so it'll be compiled. +// +// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate +// layout file, like app/views/layouts/application.html.erb + + +// Uncomment to copy all static images under ../images to the output folder and reference +// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>) +// or the `imagePath` JavaScript helper below. +// +// const images = require.context('../images', true) +// const imagePath = (name) => images(name, true) + +console.log('Hello World from Webpacker') diff --git a/spec/dummy/app/javascript/stylesheets/active_admin.scss b/spec/dummy/app/javascript/stylesheets/active_admin.scss new file mode 100644 index 00000000..6ab81411 --- /dev/null +++ b/spec/dummy/app/javascript/stylesheets/active_admin.scss @@ -0,0 +1,18 @@ +@import "../../../../../app/javascript/activeadmin_addons/stylesheets/all"; +// SASS variable overrides must be declared before loading up Active Admin's styles. +// +// To view the variables that Active Admin provides, take a look at +// `app/assets/stylesheets/active_admin/mixins/_variables.scss` in the +// Active Admin source. +// +// For example, to change the sidebar width: +// $sidebar-width: 242px; + +// Active Admin's got SASS! +@import "~@activeadmin/activeadmin/src/scss/mixins"; +@import "~@activeadmin/activeadmin/src/scss/base"; + +// Overriding any non-variable SASS must be done after the fact. +// For example, to change the default status-tag color: +// +// .status_tag { background: #6090DB; } diff --git a/spec/dummy/app/models/admin_user.rb b/spec/dummy/app/models/admin_user.rb deleted file mode 100644 index 17bf1aab..00000000 --- a/spec/dummy/app/models/admin_user.rb +++ /dev/null @@ -1,13 +0,0 @@ -class AdminUser < ActiveRecord::Base - # Include default devise modules. Others available are: - # :confirmable, :lockable, :timeoutable and :omniauthable - devise :database_authenticatable, - :recoverable, :rememberable, :trackable, :validatable - - has_many :invoices, foreign_key: :client_id - - # adding this to test proc values - def categories_url - '/admin/categories' - end -end diff --git a/spec/dummy/app/models/category.rb b/spec/dummy/app/models/category.rb index 3a8de73d..87883f4c 100644 --- a/spec/dummy/app/models/category.rb +++ b/spec/dummy/app/models/category.rb @@ -1,5 +1,15 @@ class Category < ActiveRecord::Base + has_many :invoices + def shiny_name "My shiny #{name}" end + + def self.ransackable_attributes(_auth_object = nil) + ["created_at", "description", "id", "name", "updated_at"] + end + + def self.ransackable_associations(_auth_object = nil) + ["invoices"] + end end diff --git a/spec/dummy/app/models/city.rb b/spec/dummy/app/models/city.rb index 08b35b52..a03b939e 100644 --- a/spec/dummy/app/models/city.rb +++ b/spec/dummy/app/models/city.rb @@ -1,3 +1,13 @@ class City < ActiveRecord::Base belongs_to :region + has_many :departments_cities, dependent: :destroy + has_many :departments, through: :departments_cities + + def self.ransackable_attributes(_auth_object = nil) + ["created_at", "id", "information", "name", "region_id", "updated_at"] + end + + def self.ransackable_associations(_auth_object = nil) + ["region", "deparments_cities", "departments"] + end end diff --git a/spec/dummy/app/models/country.rb b/spec/dummy/app/models/country.rb index b7cec2b6..a2dfeb26 100644 --- a/spec/dummy/app/models/country.rb +++ b/spec/dummy/app/models/country.rb @@ -1,2 +1,12 @@ class Country < ActiveRecord::Base + has_many :regions, dependent: :destroy + has_many :cities, through: :regions + + def self.ransackable_attributes(_auth_object = nil) + ["created_at", "id", "information", "name", "updated_at"] + end + + def self.ransackable_associations(_auth_object = nil) + ["regions", "cities"] + end end diff --git a/spec/dummy/app/models/department.rb b/spec/dummy/app/models/department.rb new file mode 100644 index 00000000..54d57dfa --- /dev/null +++ b/spec/dummy/app/models/department.rb @@ -0,0 +1,4 @@ +class Department < ActiveRecord::Base + has_many :departments_cities + accepts_nested_attributes_for :departments_cities, allow_destroy: true +end diff --git a/spec/dummy/app/models/departments_city.rb b/spec/dummy/app/models/departments_city.rb new file mode 100644 index 00000000..c22c8beb --- /dev/null +++ b/spec/dummy/app/models/departments_city.rb @@ -0,0 +1,4 @@ +class DepartmentsCity < ActiveRecord::Base + belongs_to :department + belongs_to :city +end diff --git a/spec/dummy/app/models/invoice.rb b/spec/dummy/app/models/invoice.rb index e435d8ea..14792eab 100644 --- a/spec/dummy/app/models/invoice.rb +++ b/spec/dummy/app/models/invoice.rb @@ -1,32 +1,22 @@ -require 'enumerize' -require 'paperclip' require 'aasm' class Invoice < ActiveRecord::Base - extend ::Enumerize - include Paperclip::Glue include AASM + include ImageUploader::Attachment(:picture) + after_initialize :set_default_state, if: :new_record? - belongs_to :buyer, class_name: "AdminUser", foreign_key: :client_id belongs_to :category belongs_to :city has_and_belongs_to_many :items has_and_belongs_to_many :other_items, class_name: 'Item' - enumerize :state, in: [:pending, :rejected, :approved], default: :pending - - enum status: { active: 0, archived: 1 } - - has_attached_file :attachment - validates_attachment :attachment, content_type: { content_type: "application/pdf" } - - has_attached_file :photo, styles: { - big: "600x600>", - medium: "300x300>", - thumb: "100x100>" + enum state: { + pending: 'pending', + rejected: 'rejected', + approved: 'approved' } - validates_attachment :photo, content_type: { content_type: %r{\Aimage\/.*\Z} } + enum status: { active: 0, archived: 1 } # Uncomment to test validations # validates :city, :city_id, :category, :category_id, :updated_at, :number, :item_ids, :color, @@ -98,4 +88,22 @@ def self.colors "#B9BF00" ] end + + def set_default_state + self.state ||= 'pending' + end + + def self.ransackable_attributes(_auth_object = nil) + [ + "aasm_state", "active", "amount", "attachment_content_type", "attachment_file_name", + "attachment_file_size", "attachment_updated_at", "category_id", "city_id", "client_id", + "color", "created_at", "description", "id", "legal_date", "number", "paid", + "photo_content_type", "photo_file_name", "photo_file_size", "photo_updated_at", + "picture_data", "position", "shipping_status", "state", "status", "updated_at" + ] + end + + def self.ransackable_associations(_auth_object = nil) + ["category", "city", "items", "other_items"] + end end diff --git a/spec/dummy/app/models/item.rb b/spec/dummy/app/models/item.rb index 52483640..a72f4064 100644 --- a/spec/dummy/app/models/item.rb +++ b/spec/dummy/app/models/item.rb @@ -4,4 +4,12 @@ class Item < ActiveRecord::Base def full_name "##{id} - #{name}" end + + def self.ransackable_attributes(_auth_object = nil) + ["created_at", "description", "id", "name", "updated_at"] + end + + def self.ransackable_associations(_auth_object = nil) + ["invoices"] + end end diff --git a/spec/dummy/app/models/region.rb b/spec/dummy/app/models/region.rb index a07419dc..1e53ebf1 100644 --- a/spec/dummy/app/models/region.rb +++ b/spec/dummy/app/models/region.rb @@ -1,3 +1,12 @@ class Region < ActiveRecord::Base belongs_to :country + has_many :cities, dependent: :destroy + + def self.ransackable_attributes(_auth_object = nil) + ["country_id", "created_at", "id", "information", "name", "updated_at"] + end + + def self.ransackable_associations(_auth_object = nil) + ["country", "cities"] + end end diff --git a/spec/dummy/app/uploaders/image_uploader.rb b/spec/dummy/app/uploaders/image_uploader.rb new file mode 100644 index 00000000..57232f4e --- /dev/null +++ b/spec/dummy/app/uploaders/image_uploader.rb @@ -0,0 +1,18 @@ +require 'image_processing/vips' + +class ImageUploader < Shrine + DERIVATIVE_SIZES = { + jpg_small: { size: [100, 100], type: 'jpg' } + } + + Attacher.derivatives do |original| + vips = ImageProcessing::Vips.source(original) + + DERIVATIVE_SIZES.reduce({}) do |derivatives_hash, (name, derivative_info)| + derivatives_hash[name] = vips.convert(derivative_info[:type]).resize_to_limit!( + *derivative_info[:size] + ) + derivatives_hash + end + end +end diff --git a/spec/dummy/app/views/admin/invoices/_formtastic_form.html.erb b/spec/dummy/app/views/admin/invoices/_formtastic_form.html.erb new file mode 100644 index 00000000..1b5aa4e0 --- /dev/null +++ b/spec/dummy/app/views/admin/invoices/_formtastic_form.html.erb @@ -0,0 +1,4 @@ +<%= semantic_form_for Invoice.new, url: "/" do |f| %> + <%= f.input :legal_date, as: :date_picker, hint: "example with formtastic date picker" %> + <%= f.input :legal_date, hint: "example with formtastic default" %> +<% end %> diff --git a/spec/dummy/babel.config.js b/spec/dummy/babel.config.js new file mode 100644 index 00000000..4df19493 --- /dev/null +++ b/spec/dummy/babel.config.js @@ -0,0 +1,70 @@ +module.exports = function(api) { + var validEnv = ['development', 'test', 'production'] + var currentEnv = api.env() + var isDevelopmentEnv = api.env('development') + var isProductionEnv = api.env('production') + var isTestEnv = api.env('test') + + if (!validEnv.includes(currentEnv)) { + throw new Error( + 'Please specify a valid `NODE_ENV` or ' + + '`BABEL_ENV` environment variables. Valid values are "development", ' + + '"test", and "production". Instead, received: ' + + JSON.stringify(currentEnv) + + '.' + ) + } + + return { + presets: [ + isTestEnv && [ + '@babel/preset-env', + { + targets: { + node: 'current' + } + } + ], + (isProductionEnv || isDevelopmentEnv) && [ + '@babel/preset-env', + { + forceAllTransforms: true, + useBuiltIns: 'entry', + corejs: 3, + modules: false, + exclude: ['transform-typeof-symbol'] + } + ] + ].filter(Boolean), + plugins: [ + 'babel-plugin-macros', + '@babel/plugin-syntax-dynamic-import', + isTestEnv && 'babel-plugin-dynamic-import-node', + '@babel/plugin-transform-destructuring', + [ + '@babel/plugin-proposal-class-properties', + { + loose: true + } + ], + [ + '@babel/plugin-proposal-object-rest-spread', + { + useBuiltIns: true + } + ], + [ + '@babel/plugin-transform-runtime', + { + helpers: false + } + ], + [ + '@babel/plugin-transform-regenerator', + { + async: false + } + ] + ].filter(Boolean) + } +} diff --git a/spec/dummy/bin/bundle b/spec/dummy/bin/bundle index 66e9889e..f19acf5b 100755 --- a/spec/dummy/bin/bundle +++ b/spec/dummy/bin/bundle @@ -1,3 +1,3 @@ #!/usr/bin/env ruby -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) load Gem.bin_path('bundler', 'bundle') diff --git a/spec/dummy/bin/rails b/spec/dummy/bin/rails index 728cd85a..4f56e381 100755 --- a/spec/dummy/bin/rails +++ b/spec/dummy/bin/rails @@ -1,4 +1,4 @@ #!/usr/bin/env ruby -APP_PATH = File.expand_path('../../config/application', __FILE__) +APP_PATH = File.expand_path('../config/application', __dir__) require_relative '../config/boot' require 'rails/commands' diff --git a/spec/dummy/bin/webpack b/spec/dummy/bin/webpack new file mode 100755 index 00000000..d75493db --- /dev/null +++ b/spec/dummy/bin/webpack @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby + +ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development" +ENV["NODE_ENV"] ||= "development" + +require "pathname" +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../../../Gemfile", + Pathname.new(__FILE__).realpath) + +require "bundler/setup" + +require "webpacker" +require "webpacker/webpack_runner" + +APP_ROOT = File.expand_path("..", __dir__) +Dir.chdir(APP_ROOT) do + Webpacker::WebpackRunner.run(ARGV) +end diff --git a/spec/dummy/bin/webpack-dev-server b/spec/dummy/bin/webpack-dev-server new file mode 100755 index 00000000..da56db7a --- /dev/null +++ b/spec/dummy/bin/webpack-dev-server @@ -0,0 +1,18 @@ +#!/usr/bin/env ruby + +ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development" +ENV["NODE_ENV"] ||= "development" + +require "pathname" +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../../../Gemfile", + Pathname.new(__FILE__).realpath) + +require "bundler/setup" + +require "webpacker" +require "webpacker/dev_server_runner" + +APP_ROOT = File.expand_path("..", __dir__) +Dir.chdir(APP_ROOT) do + Webpacker::DevServerRunner.run(ARGV) +end diff --git a/spec/dummy/config.ru b/spec/dummy/config.ru index 5bc2a619..92390ae2 100644 --- a/spec/dummy/config.ru +++ b/spec/dummy/config.ru @@ -1,4 +1,4 @@ # This file is used by Rack-based servers to start the application. -require ::File.expand_path('../config/environment', __FILE__) +require ::File.expand_path('config/environment', __dir__) run Rails.application diff --git a/spec/dummy/config/application.rb b/spec/dummy/config/application.rb index e4a9408f..e1b7dada 100644 --- a/spec/dummy/config/application.rb +++ b/spec/dummy/config/application.rb @@ -1,4 +1,4 @@ -require File.expand_path('../boot', __FILE__) +require File.expand_path('boot', __dir__) # Pick the frameworks you want: require "active_record/railtie" @@ -26,6 +26,5 @@ class Application < Rails::Application # config.i18n.default_locale = :de config.secret_key_base = 'TODO Put something here' config.action_controller.permit_all_parameters = true - config.active_record.raise_in_transactional_callbacks = true end end diff --git a/spec/dummy/config/boot.rb b/spec/dummy/config/boot.rb index 6266cfc5..c9aef85d 100644 --- a/spec/dummy/config/boot.rb +++ b/spec/dummy/config/boot.rb @@ -1,5 +1,5 @@ # Set up gems listed in the Gemfile. -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__) +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __dir__) require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) -$LOAD_PATH.unshift File.expand_path('../../../../lib', __FILE__) +$LOAD_PATH.unshift File.expand_path('../../../lib', __dir__) diff --git a/spec/dummy/config/environment.rb b/spec/dummy/config/environment.rb index ee8d90dc..0b8bdd82 100644 --- a/spec/dummy/config/environment.rb +++ b/spec/dummy/config/environment.rb @@ -1,5 +1,5 @@ # Load the Rails application. -require File.expand_path('../application', __FILE__) +require File.expand_path('application', __dir__) # Initialize the Rails application. Rails.application.initialize! diff --git a/spec/dummy/config/initializers/active_admin.rb b/spec/dummy/config/initializers/active_admin.rb index 3ce9cfa7..3580c5fe 100644 --- a/spec/dummy/config/initializers/active_admin.rb +++ b/spec/dummy/config/initializers/active_admin.rb @@ -4,7 +4,7 @@ # Set the title that is displayed on the main layout # for each of the active admin pages. # - config.site_title = "Example App" + config.site_title = "Dummy" # Set the link url for the title. For example, to take # users to your main site. Defaults to no link. @@ -54,7 +54,7 @@ # # This setting changes the method which Active Admin calls # within the application controller. - config.authentication_method = :authenticate_admin_user! + # config.authentication_method = :authenticate_admin_user! # == User Authorization # @@ -62,13 +62,18 @@ # method in a before filter of all controller actions to # ensure that there is a user with proper rights. You can use # CanCanAdapter or make your own. Please refer to documentation. - # config.authorization_adapter = ActiveAdmin::PunditAdapter + # config.authorization_adapter = ActiveAdmin::CanCanAdapter # In case you prefer Pundit over other solutions you can here pass # the name of default policy class. This policy will be used in every # case when Pundit is unable to find suitable policy. # config.pundit_default_policy = "MyDefaultPunditPolicy" + # If you wish to maintain a separate set of Pundit policies for admin + # resources, you may set a namespace here that Pundit will search + # within when looking for a resource's policy. + # config.pundit_policy_namespace = :admin + # You can customize your CanCan Ability class name here. # config.cancan_ability_class = "Ability" @@ -86,7 +91,7 @@ # # This setting changes the method which Active Admin calls # (within the application controller) to return the currently logged in user. - config.current_user_method = :current_admin_user + # config.current_user_method = :current_admin_user # == Logging Out # @@ -145,13 +150,23 @@ # You can add before, after and around filters to all of your # Active Admin resources and pages from here. # - # config.before_filter :do_something_awesome + # config.before_action :do_something_awesome + + # == Attribute Filters + # + # You can exclude possibly sensitive model attributes from being displayed, + # added to forms, or exported by default by ActiveAdmin + # + config.filter_attributes = [:encrypted_password, :password, :password_confirmation] # == Localize Date/Time Format # # Set the localize format to display dates and times. # To understand how to localize your app with I18n, read more at - # https://github.com/svenfuchs/i18n/blob/master/lib%2Fi18n%2Fbackend%2Fbase.rb#L52 + # https://guides.rubyonrails.org/i18n.html + # + # You can run `bin/rails runner 'puts I18n.t("date.formats")'` to see the + # available formats in your application. # config.localize_format = :long @@ -179,6 +194,13 @@ # # config.breadcrumb = false + # == Create Another Checkbox + # + # Create another checkbox is disabled by default. You can customize it for individual + # resources or you can enable them globally from here. + # + # config.create_another = true + # == Register Stylesheets & Javascripts # # We recommend using the built in Active Admin layout and loading @@ -264,9 +286,50 @@ # config.filters = true # # By default the filters include associations in a select, which means - # that every record will be loaded for each association. + # that every record will be loaded for each association (up + # to the value of config.maximum_association_filter_arity). # You can enabled or disable the inclusion # of those filters by default here. # # config.include_default_association_filters = true + + # config.maximum_association_filter_arity = 256 # default value of :unlimited will change to 256 in a future version + # config.filter_columns_for_large_association, [ + # :display_name, + # :full_name, + # :name, + # :username, + # :login, + # :title, + # :email, + # ] + # config.filter_method_for_large_association, '_start' + + # == Head + # + # You can add your own content to the site head like analytics. Make sure + # you only pass content you trust. + # + # config.head = ''.html_safe + + # == Footer + # + # By default, the footer shows the current Active Admin version. You can + # override the content of the footer here. + # + # config.footer = 'my custom footer text' + + # == Sorting + # + # By default ActiveAdmin::OrderClause is used for sorting logic + # You can inherit it with own class and inject it for all resources + # + # config.order_clause = MyOrderClause + + # == Webpacker + # + # By default, Active Admin uses Sprocket's asset pipeline. + # You can switch to using Webpacker here. + # + config.use_webpacker = true end diff --git a/spec/dummy/config/initializers/activeadmin_addons.rb b/spec/dummy/config/initializers/activeadmin_addons.rb index 5a256569..e36b0754 100644 --- a/spec/dummy/config/initializers/activeadmin_addons.rb +++ b/spec/dummy/config/initializers/activeadmin_addons.rb @@ -1,15 +1,12 @@ ActiveadminAddons.setup do |config| # Change to "default" if you want to use ActiveAdmin's default select control. - # config.default_select = "select2" + # config.default_select = "slim-select" # Set default options for DateTimePickerInput. The options you can provide are the same as in - # xdan's datetimepicker library (https://github.com/xdan/datetimepicker/tree/2.5.4). Yo need to + # xdan's datetimepicker library (https://github.com/xdan/datetimepicker/tree/2.5.4). You need to # pass a ruby hash, avoid camelCase keys. For example: use min_date instead of minDate key. - config.datetime_picker_default_options = { - format: "d-m-Y H:i", - step: 10 # minutes - } + # config.datetime_picker_default_options = {} # Set DateTimePickerInput input format. This if for backend (Ruby) - config.datetime_picker_input_format = "%d-%m-%Y %H:%M" + # config.datetime_picker_input_format = "%Y-%m-%d %H:%M" end diff --git a/spec/dummy/config/initializers/cookies_serializer.rb b/spec/dummy/config/initializers/cookies_serializer.rb index 7a06a89f..7f70458d 100644 --- a/spec/dummy/config/initializers/cookies_serializer.rb +++ b/spec/dummy/config/initializers/cookies_serializer.rb @@ -1,3 +1,3 @@ # Be sure to restart your server when you modify this file. -Rails.application.config.action_dispatch.cookies_serializer = :json \ No newline at end of file +Rails.application.config.action_dispatch.cookies_serializer = :json diff --git a/spec/dummy/config/initializers/devise.rb b/spec/dummy/config/initializers/devise.rb deleted file mode 100644 index b004f971..00000000 --- a/spec/dummy/config/initializers/devise.rb +++ /dev/null @@ -1,256 +0,0 @@ -# Use this hook to configure devise mailer, warden hooks and so forth. -# Many of these configuration options can be set straight in your model. -Devise.setup do |config| - # The secret key used by Devise. Devise uses this key to generate - # random tokens. Changing this key will render invalid all existing - # confirmation, reset password and unlock tokens in the database. - # config.secret_key = '1241e004888585f0060a9f901b3a203d42a9a0614387501e1d9a3a59912ae9f3bda603f7b94819641ca26ecdd3421eaac0a3a8e68755d1cd4f6b412f4e1229d6' - - # ==> Mailer Configuration - # Configure the e-mail address which will be shown in Devise::Mailer, - # note that it will be overwritten if you use your own mailer class - # with default "from" parameter. - config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com' - - # Configure the class responsible to send e-mails. - # config.mailer = 'Devise::Mailer' - - # ==> ORM configuration - # Load and configure the ORM. Supports :active_record (default) and - # :mongoid (bson_ext recommended) by default. Other ORMs may be - # available as additional gems. - require 'devise/orm/active_record' - - # ==> Configuration for any authentication mechanism - # Configure which keys are used when authenticating a user. The default is - # just :email. You can configure it to use [:username, :subdomain], so for - # authenticating a user, both parameters are required. Remember that those - # parameters are used only when authenticating and not when retrieving from - # session. If you need permissions, you should implement that in a before filter. - # You can also supply a hash where the value is a boolean determining whether - # or not authentication should be aborted when the value is not present. - # config.authentication_keys = [ :email ] - - # Configure parameters from the request object used for authentication. Each entry - # given should be a request method and it will automatically be passed to the - # find_for_authentication method and considered in your model lookup. For instance, - # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. - # The same considerations mentioned for authentication_keys also apply to request_keys. - # config.request_keys = [] - - # Configure which authentication keys should be case-insensitive. - # These keys will be downcased upon creating or modifying a user and when used - # to authenticate or find a user. Default is :email. - config.case_insensitive_keys = [ :email ] - - # Configure which authentication keys should have whitespace stripped. - # These keys will have whitespace before and after removed upon creating or - # modifying a user and when used to authenticate or find a user. Default is :email. - config.strip_whitespace_keys = [ :email ] - - # Tell if authentication through request.params is enabled. True by default. - # It can be set to an array that will enable params authentication only for the - # given strategies, for example, `config.params_authenticatable = [:database]` will - # enable it only for database (email + password) authentication. - # config.params_authenticatable = true - - # Tell if authentication through HTTP Auth is enabled. False by default. - # It can be set to an array that will enable http authentication only for the - # given strategies, for example, `config.http_authenticatable = [:database]` will - # enable it only for database authentication. The supported strategies are: - # :database = Support basic authentication with authentication key + password - # config.http_authenticatable = false - - # If http headers should be returned for AJAX requests. True by default. - # config.http_authenticatable_on_xhr = true - - # The realm used in Http Basic Authentication. 'Application' by default. - # config.http_authentication_realm = 'Application' - - # It will change confirmation, password recovery and other workflows - # to behave the same regardless if the e-mail provided was right or wrong. - # Does not affect registerable. - # config.paranoid = true - - # By default Devise will store the user in session. You can skip storage for - # particular strategies by setting this option. - # Notice that if you are skipping storage for all authentication paths, you - # may want to disable generating routes to Devise's sessions controller by - # passing skip: :sessions to `devise_for` in your config/routes.rb - config.skip_session_storage = [:http_auth] - - # By default, Devise cleans up the CSRF token on authentication to - # avoid CSRF token fixation attacks. This means that, when using AJAX - # requests for sign in and sign up, you need to get a new CSRF token - # from the server. You can disable this option at your own risk. - # config.clean_up_csrf_token_on_authentication = true - - # ==> Configuration for :database_authenticatable - # For bcrypt, this is the cost for hashing the password and defaults to 10. If - # using other encryptors, it sets how many times you want the password re-encrypted. - # - # Limiting the stretches to just one in testing will increase the performance of - # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use - # a value less than 10 in other environments. Note that, for bcrypt (the default - # encryptor), the cost increases exponentially with the number of stretches (e.g. - # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation). - config.stretches = Rails.env.test? ? 1 : 10 - - # Setup a pepper to generate the encrypted password. - # config.pepper = '9a612a6d009692cbad535e9945d02de17dd4f07e75f71a24f38ade2efb593e43e86e59db5d8b960135c63e9b726e4dd44d70d77755d77311bac3675119d3c556' - - # ==> Configuration for :confirmable - # A period that the user is allowed to access the website even without - # confirming their account. For instance, if set to 2.days, the user will be - # able to access the website for two days without confirming their account, - # access will be blocked just in the third day. Default is 0.days, meaning - # the user cannot access the website without confirming their account. - # config.allow_unconfirmed_access_for = 2.days - - # A period that the user is allowed to confirm their account before their - # token becomes invalid. For example, if set to 3.days, the user can confirm - # their account within 3 days after the mail was sent, but on the fourth day - # their account can't be confirmed with the token any more. - # Default is nil, meaning there is no restriction on how long a user can take - # before confirming their account. - # config.confirm_within = 3.days - - # If true, requires any email changes to be confirmed (exactly the same way as - # initial account confirmation) to be applied. Requires additional unconfirmed_email - # db field (see migrations). Until confirmed, new email is stored in - # unconfirmed_email column, and copied to email column on successful confirmation. - config.reconfirmable = true - - # Defines which key will be used when confirming an account - # config.confirmation_keys = [ :email ] - - # ==> Configuration for :rememberable - # The time the user will be remembered without asking for credentials again. - # config.remember_for = 2.weeks - - # If true, extends the user's remember period when remembered via cookie. - # config.extend_remember_period = false - - # Options to be passed to the created cookie. For instance, you can set - # secure: true in order to force SSL only cookies. - # config.rememberable_options = {} - - # ==> Configuration for :validatable - # Range for password length. - config.password_length = 8..128 - - # Email regex used to validate email formats. It simply asserts that - # one (and only one) @ exists in the given string. This is mainly - # to give user feedback and not to assert the e-mail validity. - # config.email_regexp = /\A[^@]+@[^@]+\z/ - - # ==> Configuration for :timeoutable - # The time you want to timeout the user session without activity. After this - # time the user will be asked for credentials again. Default is 30 minutes. - # config.timeout_in = 30.minutes - - # If true, expires auth token on session timeout. - # config.expire_auth_token_on_timeout = false - - # ==> Configuration for :lockable - # Defines which strategy will be used to lock an account. - # :failed_attempts = Locks an account after a number of failed attempts to sign in. - # :none = No lock strategy. You should handle locking by yourself. - # config.lock_strategy = :failed_attempts - - # Defines which key will be used when locking and unlocking an account - # config.unlock_keys = [ :email ] - - # Defines which strategy will be used to unlock an account. - # :email = Sends an unlock link to the user email - # :time = Re-enables login after a certain amount of time (see :unlock_in below) - # :both = Enables both strategies - # :none = No unlock strategy. You should handle unlocking by yourself. - # config.unlock_strategy = :both - - # Number of authentication tries before locking an account if lock_strategy - # is failed attempts. - # config.maximum_attempts = 20 - - # Time interval to unlock the account if :time is enabled as unlock_strategy. - # config.unlock_in = 1.hour - - # Warn on the last attempt before the account is locked. - # config.last_attempt_warning = false - - # ==> Configuration for :recoverable - # - # Defines which key will be used when recovering the password for an account - # config.reset_password_keys = [ :email ] - - # Time interval you can reset your password with a reset password key. - # Don't put a too small interval or your users won't have the time to - # change their passwords. - config.reset_password_within = 6.hours - - # ==> Configuration for :encryptable - # Allow you to use another encryption algorithm besides bcrypt (default). You can use - # :sha1, :sha512 or encryptors from others authentication tools as :clearance_sha1, - # :authlogic_sha512 (then you should set stretches above to 20 for default behavior) - # and :restful_authentication_sha1 (then you should set stretches to 10, and copy - # REST_AUTH_SITE_KEY to pepper). - # - # Require the `devise-encryptable` gem when using anything other than bcrypt - # config.encryptor = :sha512 - - # ==> Scopes configuration - # Turn scoped views on. Before rendering "sessions/new", it will first check for - # "users/sessions/new". It's turned off by default because it's slower if you - # are using only default views. - # config.scoped_views = false - - # Configure the default scope given to Warden. By default it's the first - # devise role declared in your routes (usually :user). - # config.default_scope = :user - - # Set this configuration to false if you want /users/sign_out to sign out - # only the current scope. By default, Devise signs out all scopes. - # config.sign_out_all_scopes = true - - # ==> Navigation configuration - # Lists the formats that should be treated as navigational. Formats like - # :html, should redirect to the sign in page when the user does not have - # access, but formats like :xml or :json, should return 401. - # - # If you have any extra navigational formats, like :iphone or :mobile, you - # should add them to the navigational formats lists. - # - # The "*/*" below is required to match Internet Explorer requests. - # config.navigational_formats = ['*/*', :html] - - # The default HTTP method used to sign out a resource. Default is :delete. - config.sign_out_via = :delete - - # ==> OmniAuth - # Add a new OmniAuth provider. Check the wiki for more information on setting - # up on your models and hooks. - # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' - - # ==> Warden configuration - # If you want to use other strategies, that are not supported by Devise, or - # change the failure app, you can configure them inside the config.warden block. - # - # config.warden do |manager| - # manager.intercept_401 = false - # manager.default_strategies(scope: :user).unshift :some_external_strategy - # end - - # ==> Mountable engine configurations - # When using Devise inside an engine, let's call it `MyEngine`, and this engine - # is mountable, there are some extra configurations to be taken into account. - # The following options are available, assuming the engine is mounted as: - # - # mount MyEngine, at: '/my_engine' - # - # The router that invoked `devise_for`, in the example above, would be: - # config.router_name = :my_engine - # - # When using omniauth, Devise cannot automatically set Omniauth path, - # so you need to do it manually. For the users scope, it would be: - # config.omniauth_path_prefix = '/my_engine/users/auth' -end diff --git a/spec/dummy/config/initializers/shrine.rb b/spec/dummy/config/initializers/shrine.rb new file mode 100644 index 00000000..8ba7a579 --- /dev/null +++ b/spec/dummy/config/initializers/shrine.rb @@ -0,0 +1,22 @@ +require 'shrine' + +if Rails.env.development? + require 'shrine/storage/file_system' + + Shrine.storages = { + cache: Shrine::Storage::FileSystem.new('public', prefix: 'uploads/cache'), + store: Shrine::Storage::FileSystem.new('public', prefix: 'uploads') + } +else + require 'shrine/storage/memory' + + Shrine.storages = { + cache: Shrine::Storage::Memory.new, + store: Shrine::Storage::Memory.new + } +end + +Shrine.plugin :activerecord +Shrine.plugin :cached_attachment_data +Shrine.plugin :restore_cached_data +Shrine.plugin :derivatives diff --git a/spec/dummy/config/locales/devise.en.yml b/spec/dummy/config/locales/devise.en.yml deleted file mode 100644 index abccdb08..00000000 --- a/spec/dummy/config/locales/devise.en.yml +++ /dev/null @@ -1,59 +0,0 @@ -# Additional translations at https://github.com/plataformatec/devise/wiki/I18n - -en: - devise: - confirmations: - confirmed: "Your account was successfully confirmed." - send_instructions: "You will receive an email with instructions about how to confirm your account in a few minutes." - send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions about how to confirm your account in a few minutes." - failure: - already_authenticated: "You are already signed in." - inactive: "Your account is not activated yet." - invalid: "Invalid email or password." - locked: "Your account is locked." - last_attempt: "You have one more attempt before your account will be locked." - not_found_in_database: "Invalid email or password." - timeout: "Your session expired. Please sign in again to continue." - unauthenticated: "You need to sign in or sign up before continuing." - unconfirmed: "You have to confirm your account before continuing." - mailer: - confirmation_instructions: - subject: "Confirmation instructions" - reset_password_instructions: - subject: "Reset password instructions" - unlock_instructions: - subject: "Unlock Instructions" - omniauth_callbacks: - failure: "Could not authenticate you from %{kind} because \"%{reason}\"." - success: "Successfully authenticated from %{kind} account." - passwords: - no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided." - send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes." - send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes." - updated: "Your password was changed successfully. You are now signed in." - updated_not_active: "Your password was changed successfully." - registrations: - destroyed: "Bye! Your account was successfully cancelled. We hope to see you again soon." - signed_up: "Welcome! You have signed up successfully." - signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated." - signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked." - signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please open the link to activate your account." - update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address." - updated: "You updated your account successfully." - sessions: - signed_in: "Signed in successfully." - signed_out: "Signed out successfully." - unlocks: - send_instructions: "You will receive an email with instructions about how to unlock your account in a few minutes." - send_paranoid_instructions: "If your account exists, you will receive an email with instructions about how to unlock it in a few minutes." - unlocked: "Your account has been unlocked successfully. Please sign in to continue." - errors: - messages: - already_confirmed: "was already confirmed, please try signing in" - confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one" - expired: "has expired, please request a new one" - not_found: "not found" - not_locked: "was not locked" - not_saved: - one: "1 error prohibited this %{resource} from being saved:" - other: "%{count} errors prohibited this %{resource} from being saved:" diff --git a/spec/dummy/config/locales/en.yml b/spec/dummy/config/locales/en.yml index 7fbc9d8a..6b9f2507 100644 --- a/spec/dummy/config/locales/en.yml +++ b/spec/dummy/config/locales/en.yml @@ -20,6 +20,9 @@ en: attributes: invoice: item_ids: Items + statuses: + active: Activo + archived: Archivado activeadmin: addons: boolean: diff --git a/spec/dummy/config/routes.rb b/spec/dummy/config/routes.rb index 32df3617..6d98fa76 100644 --- a/spec/dummy/config/routes.rb +++ b/spec/dummy/config/routes.rb @@ -1,5 +1,4 @@ Rails.application.routes.draw do - devise_for :admin_users, ActiveAdmin::Devise.config ActiveAdmin.routes(self) # The priority is based upon order of creation: first created -> highest priority. # See how all your routes lay out with "rake routes". diff --git a/spec/dummy/config/webpack/development.js b/spec/dummy/config/webpack/development.js new file mode 100644 index 00000000..c5edff94 --- /dev/null +++ b/spec/dummy/config/webpack/development.js @@ -0,0 +1,5 @@ +process.env.NODE_ENV = process.env.NODE_ENV || 'development' + +const environment = require('./environment') + +module.exports = environment.toWebpackConfig() diff --git a/spec/dummy/config/webpack/environment.js b/spec/dummy/config/webpack/environment.js new file mode 100644 index 00000000..5e102b57 --- /dev/null +++ b/spec/dummy/config/webpack/environment.js @@ -0,0 +1,6 @@ +const { environment } = require('@rails/webpacker') +environment.config.set('externals', { + $: 'jquery', + jquery: 'jQuery', +}); +module.exports = environment; diff --git a/spec/dummy/config/webpack/plugins/jquery.js b/spec/dummy/config/webpack/plugins/jquery.js new file mode 100644 index 00000000..54c61ec8 --- /dev/null +++ b/spec/dummy/config/webpack/plugins/jquery.js @@ -0,0 +1,7 @@ +const webpack = require('webpack') + +module.exports = new webpack.ProvidePlugin({ + "$":"jquery", + "jQuery":"jquery", + "window.jQuery":"jquery" +}); diff --git a/spec/dummy/config/webpack/production.js b/spec/dummy/config/webpack/production.js new file mode 100644 index 00000000..be0f53aa --- /dev/null +++ b/spec/dummy/config/webpack/production.js @@ -0,0 +1,5 @@ +process.env.NODE_ENV = process.env.NODE_ENV || 'production' + +const environment = require('./environment') + +module.exports = environment.toWebpackConfig() diff --git a/spec/dummy/config/webpack/test.js b/spec/dummy/config/webpack/test.js new file mode 100644 index 00000000..c5edff94 --- /dev/null +++ b/spec/dummy/config/webpack/test.js @@ -0,0 +1,5 @@ +process.env.NODE_ENV = process.env.NODE_ENV || 'development' + +const environment = require('./environment') + +module.exports = environment.toWebpackConfig() diff --git a/spec/dummy/config/webpacker.yml b/spec/dummy/config/webpacker.yml new file mode 100644 index 00000000..a6b14656 --- /dev/null +++ b/spec/dummy/config/webpacker.yml @@ -0,0 +1,92 @@ +# Note: You must restart bin/webpack-dev-server for changes to take effect + +default: &default + source_path: app/javascript + source_entry_path: packs + public_root_path: public + public_output_path: packs + cache_path: tmp/cache/webpacker + webpack_compile_output: true + + # Additional paths webpack should lookup modules + # ['app/assets', 'engine/foo/app/assets'] + additional_paths: [] + + # Reload manifest.json on all requests so we reload latest compiled packs + cache_manifest: false + + # Extract and emit a css file + extract_css: false + + static_assets_extensions: + - .jpg + - .jpeg + - .png + - .gif + - .tiff + - .ico + - .svg + - .eot + - .otf + - .ttf + - .woff + - .woff2 + + extensions: + - .mjs + - .js + - .sass + - .scss + - .css + - .module.sass + - .module.scss + - .module.css + - .png + - .svg + - .gif + - .jpeg + - .jpg + +development: + <<: *default + compile: true + + # Reference: https://webpack.js.org/configuration/dev-server/ + dev_server: + https: false + host: localhost + port: 3035 + public: localhost:3035 + hmr: false + # Inline should be set to true if using HMR + inline: true + overlay: true + compress: true + disable_host_check: true + use_local_ip: false + quiet: false + pretty: false + headers: + 'Access-Control-Allow-Origin': '*' + watch_options: + ignored: '**/node_modules/**' + + +test: + <<: *default + compile: true + + # Compile test packs to a separate directory + public_output_path: packs-test + +production: + <<: *default + + # Production depends on precompilation of packs prior to booting for performance. + compile: false + + # Extract and emit a css file + extract_css: true + + # Cache manifest.json for performance + cache_manifest: true diff --git a/spec/dummy/db/migrate/20140530172044_create_invoices.rb b/spec/dummy/db/migrate/20140530172044_create_invoices.rb index af28b2d6..2bec49ab 100644 --- a/spec/dummy/db/migrate/20140530172044_create_invoices.rb +++ b/spec/dummy/db/migrate/20140530172044_create_invoices.rb @@ -1,7 +1,7 @@ -class CreateInvoices < ActiveRecord::Migration +class CreateInvoices < ActiveRecord::Migration[4.2] def change create_table :invoices do |t| - t.datetime :legal_date + t.date :legal_date t.string :number t.timestamps diff --git a/spec/dummy/db/migrate/20140530172144_devise_create_admin_users.rb b/spec/dummy/db/migrate/20140530172144_devise_create_admin_users.rb deleted file mode 100644 index 9674a875..00000000 --- a/spec/dummy/db/migrate/20140530172144_devise_create_admin_users.rb +++ /dev/null @@ -1,48 +0,0 @@ -class DeviseCreateAdminUsers < ActiveRecord::Migration - def migrate(direction) - super - # Create a default user - AdminUser.create!(email: 'admin@example.com', password: 'password', password_confirmation: 'password') if direction == :up - end - - def change - create_table(:admin_users) do |t| - ## Database authenticatable - t.string :email, null: false, default: "" - t.string :encrypted_password, null: false, default: "" - - ## Recoverable - t.string :reset_password_token - t.datetime :reset_password_sent_at - - ## Rememberable - t.datetime :remember_created_at - - ## Trackable - t.integer :sign_in_count, default: 0, null: false - t.datetime :current_sign_in_at - t.datetime :last_sign_in_at - t.string :current_sign_in_ip - t.string :last_sign_in_ip - - ## Confirmable - # t.string :confirmation_token - # t.datetime :confirmed_at - # t.datetime :confirmation_sent_at - # t.string :unconfirmed_email # Only if using reconfirmable - - ## Lockable - # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts - # t.string :unlock_token # Only if unlock strategy is :email or :both - # t.datetime :locked_at - - - t.timestamps - end - - add_index :admin_users, :email, unique: true - add_index :admin_users, :reset_password_token, unique: true - # add_index :admin_users, :confirmation_token, unique: true - # add_index :admin_users, :unlock_token, unique: true - end -end diff --git a/spec/dummy/db/migrate/20140530172146_create_active_admin_comments.rb b/spec/dummy/db/migrate/20140530172146_create_active_admin_comments.rb index 9efd1478..3396dfad 100644 --- a/spec/dummy/db/migrate/20140530172146_create_active_admin_comments.rb +++ b/spec/dummy/db/migrate/20140530172146_create_active_admin_comments.rb @@ -1,4 +1,4 @@ -class CreateActiveAdminComments < ActiveRecord::Migration +class CreateActiveAdminComments < ActiveRecord::Migration[4.2] def self.up create_table :active_admin_comments do |t| t.string :namespace diff --git a/spec/dummy/db/migrate/20140530173150_add_paid_to_invoices.rb b/spec/dummy/db/migrate/20140530173150_add_paid_to_invoices.rb index 51a3f095..1cf61c26 100644 --- a/spec/dummy/db/migrate/20140530173150_add_paid_to_invoices.rb +++ b/spec/dummy/db/migrate/20140530173150_add_paid_to_invoices.rb @@ -1,4 +1,4 @@ -class AddPaidToInvoices < ActiveRecord::Migration +class AddPaidToInvoices < ActiveRecord::Migration[4.2] def change add_column :invoices, :paid, :boolean end diff --git a/spec/dummy/db/migrate/20150925190908_add_state_and_status_to_invoices.rb b/spec/dummy/db/migrate/20150925190908_add_state_and_status_to_invoices.rb index 1efc9c7e..3d1d1734 100644 --- a/spec/dummy/db/migrate/20150925190908_add_state_and_status_to_invoices.rb +++ b/spec/dummy/db/migrate/20150925190908_add_state_and_status_to_invoices.rb @@ -1,4 +1,4 @@ -class AddStateAndStatusToInvoices < ActiveRecord::Migration +class AddStateAndStatusToInvoices < ActiveRecord::Migration[4.2] def change add_column :invoices, :state, :string add_column :invoices, :status, :integer diff --git a/spec/dummy/db/migrate/20150925194618_add_attachment_to_invoices.rb b/spec/dummy/db/migrate/20150925194618_add_attachment_to_invoices.rb index dc5678a2..7aa3c6b4 100644 --- a/spec/dummy/db/migrate/20150925194618_add_attachment_to_invoices.rb +++ b/spec/dummy/db/migrate/20150925194618_add_attachment_to_invoices.rb @@ -1,5 +1,5 @@ require "paperclip" -class AddAttachmentToInvoices < ActiveRecord::Migration +class AddAttachmentToInvoices < ActiveRecord::Migration[4.2] include Paperclip::Schema::Statements def change diff --git a/spec/dummy/db/migrate/20151009200940_create_categories.rb b/spec/dummy/db/migrate/20151009200940_create_categories.rb index 218bb1f6..5459563a 100644 --- a/spec/dummy/db/migrate/20151009200940_create_categories.rb +++ b/spec/dummy/db/migrate/20151009200940_create_categories.rb @@ -1,4 +1,4 @@ -class CreateCategories < ActiveRecord::Migration +class CreateCategories < ActiveRecord::Migration[4.2] def change create_table :categories do |t| t.string :name diff --git a/spec/dummy/db/migrate/20151009201023_add_category_id_to_invoices.rb b/spec/dummy/db/migrate/20151009201023_add_category_id_to_invoices.rb index 5d804698..170dd098 100644 --- a/spec/dummy/db/migrate/20151009201023_add_category_id_to_invoices.rb +++ b/spec/dummy/db/migrate/20151009201023_add_category_id_to_invoices.rb @@ -1,4 +1,4 @@ -class AddCategoryIdToInvoices < ActiveRecord::Migration +class AddCategoryIdToInvoices < ActiveRecord::Migration[4.2] def change add_reference :invoices, :category, index: true end diff --git a/spec/dummy/db/migrate/20151218170155_create_countries.rb b/spec/dummy/db/migrate/20151218170155_create_countries.rb index 3f621f08..e6dd0c40 100644 --- a/spec/dummy/db/migrate/20151218170155_create_countries.rb +++ b/spec/dummy/db/migrate/20151218170155_create_countries.rb @@ -1,4 +1,4 @@ -class CreateCountries < ActiveRecord::Migration +class CreateCountries < ActiveRecord::Migration[4.2] def change create_table :countries do |t| t.string :name diff --git a/spec/dummy/db/migrate/20151218170211_create_regions.rb b/spec/dummy/db/migrate/20151218170211_create_regions.rb index 782ed052..6e87fd94 100644 --- a/spec/dummy/db/migrate/20151218170211_create_regions.rb +++ b/spec/dummy/db/migrate/20151218170211_create_regions.rb @@ -1,4 +1,4 @@ -class CreateRegions < ActiveRecord::Migration +class CreateRegions < ActiveRecord::Migration[4.2] def change create_table :regions do |t| t.string :name diff --git a/spec/dummy/db/migrate/20151218170240_create_cities.rb b/spec/dummy/db/migrate/20151218170240_create_cities.rb index 45c86513..7b737273 100644 --- a/spec/dummy/db/migrate/20151218170240_create_cities.rb +++ b/spec/dummy/db/migrate/20151218170240_create_cities.rb @@ -1,4 +1,4 @@ -class CreateCities < ActiveRecord::Migration +class CreateCities < ActiveRecord::Migration[4.2] def change create_table :cities do |t| t.string :name diff --git a/spec/dummy/db/migrate/20151218170831_add_city_to_invoices.rb b/spec/dummy/db/migrate/20151218170831_add_city_to_invoices.rb index d0687da5..2b9fdc00 100644 --- a/spec/dummy/db/migrate/20151218170831_add_city_to_invoices.rb +++ b/spec/dummy/db/migrate/20151218170831_add_city_to_invoices.rb @@ -1,4 +1,4 @@ -class AddCityToInvoices < ActiveRecord::Migration +class AddCityToInvoices < ActiveRecord::Migration[4.2] def change add_reference :invoices, :city, index: true end diff --git a/spec/dummy/db/migrate/20151231204230_add_information_to_cities.rb b/spec/dummy/db/migrate/20151231204230_add_information_to_cities.rb index a58dfbc6..2f026e62 100644 --- a/spec/dummy/db/migrate/20151231204230_add_information_to_cities.rb +++ b/spec/dummy/db/migrate/20151231204230_add_information_to_cities.rb @@ -1,4 +1,4 @@ -class AddInformationToCities < ActiveRecord::Migration +class AddInformationToCities < ActiveRecord::Migration[4.2] def change add_column :cities, :information, :text end diff --git a/spec/dummy/db/migrate/20151231205008_add_information_to_regions.rb b/spec/dummy/db/migrate/20151231205008_add_information_to_regions.rb index 758db75e..13c3b901 100644 --- a/spec/dummy/db/migrate/20151231205008_add_information_to_regions.rb +++ b/spec/dummy/db/migrate/20151231205008_add_information_to_regions.rb @@ -1,4 +1,4 @@ -class AddInformationToRegions < ActiveRecord::Migration +class AddInformationToRegions < ActiveRecord::Migration[4.2] def change add_column :regions, :information, :text end diff --git a/spec/dummy/db/migrate/20151231205017_add_information_to_countries.rb b/spec/dummy/db/migrate/20151231205017_add_information_to_countries.rb index d71455af..f4fa29e6 100644 --- a/spec/dummy/db/migrate/20151231205017_add_information_to_countries.rb +++ b/spec/dummy/db/migrate/20151231205017_add_information_to_countries.rb @@ -1,4 +1,4 @@ -class AddInformationToCountries < ActiveRecord::Migration +class AddInformationToCountries < ActiveRecord::Migration[4.2] def change add_column :countries, :information, :text end diff --git a/spec/dummy/db/migrate/20160123231225_add_position_to_invoices.rb b/spec/dummy/db/migrate/20160123231225_add_position_to_invoices.rb index 01d9e25c..52cf51ea 100644 --- a/spec/dummy/db/migrate/20160123231225_add_position_to_invoices.rb +++ b/spec/dummy/db/migrate/20160123231225_add_position_to_invoices.rb @@ -1,4 +1,4 @@ -class AddPositionToInvoices < ActiveRecord::Migration +class AddPositionToInvoices < ActiveRecord::Migration[4.2] def change add_column :invoices, :position, :integer end diff --git a/spec/dummy/db/migrate/20160227211518_add_color_and_amount_to_invoices.rb b/spec/dummy/db/migrate/20160227211518_add_color_and_amount_to_invoices.rb index b5cd32ff..2b5ae266 100644 --- a/spec/dummy/db/migrate/20160227211518_add_color_and_amount_to_invoices.rb +++ b/spec/dummy/db/migrate/20160227211518_add_color_and_amount_to_invoices.rb @@ -1,4 +1,4 @@ -class AddColorAndAmountToInvoices < ActiveRecord::Migration +class AddColorAndAmountToInvoices < ActiveRecord::Migration[4.2] def change add_column :invoices, :color, :string add_column :invoices, :amount, :float diff --git a/spec/dummy/db/migrate/20160426155136_create_items.rb b/spec/dummy/db/migrate/20160426155136_create_items.rb index 30092b67..c96ffe1f 100644 --- a/spec/dummy/db/migrate/20160426155136_create_items.rb +++ b/spec/dummy/db/migrate/20160426155136_create_items.rb @@ -1,4 +1,4 @@ -class CreateItems < ActiveRecord::Migration +class CreateItems < ActiveRecord::Migration[4.2] def change create_table :items do |t| t.string :name diff --git a/spec/dummy/db/migrate/20160426161032_create_invoices_and_items.rb b/spec/dummy/db/migrate/20160426161032_create_invoices_and_items.rb index dd9b4525..2fdc3c7d 100644 --- a/spec/dummy/db/migrate/20160426161032_create_invoices_and_items.rb +++ b/spec/dummy/db/migrate/20160426161032_create_invoices_and_items.rb @@ -1,4 +1,4 @@ -class CreateInvoicesAndItems < ActiveRecord::Migration +class CreateInvoicesAndItems < ActiveRecord::Migration[4.2] def change create_table :invoices_items, id: false do |t| t.belongs_to :invoice, index: true diff --git a/spec/dummy/db/migrate/20170804152156_add_client_id_to_invoices.rb b/spec/dummy/db/migrate/20170804152156_add_client_id_to_invoices.rb index 9c4696fe..93fdedc7 100644 --- a/spec/dummy/db/migrate/20170804152156_add_client_id_to_invoices.rb +++ b/spec/dummy/db/migrate/20170804152156_add_client_id_to_invoices.rb @@ -1,4 +1,4 @@ -class AddClientIdToInvoices < ActiveRecord::Migration +class AddClientIdToInvoices < ActiveRecord::Migration[4.2] def change add_column :invoices, :client_id, :integer end diff --git a/spec/dummy/db/migrate/20170827225107_add_aasm_state_to_invoices.rb b/spec/dummy/db/migrate/20170827225107_add_aasm_state_to_invoices.rb index 7b4dd3ed..8b6d84d4 100644 --- a/spec/dummy/db/migrate/20170827225107_add_aasm_state_to_invoices.rb +++ b/spec/dummy/db/migrate/20170827225107_add_aasm_state_to_invoices.rb @@ -1,4 +1,4 @@ -class AddAasmStateToInvoices < ActiveRecord::Migration +class AddAasmStateToInvoices < ActiveRecord::Migration[4.2] def change add_column :invoices, :aasm_state, :string end diff --git a/spec/dummy/db/migrate/20170904155016_create_cars.rb b/spec/dummy/db/migrate/20170904155016_create_cars.rb index 78f54b06..c9bbced2 100644 --- a/spec/dummy/db/migrate/20170904155016_create_cars.rb +++ b/spec/dummy/db/migrate/20170904155016_create_cars.rb @@ -1,4 +1,4 @@ -class CreateCars < ActiveRecord::Migration +class CreateCars < ActiveRecord::Migration[4.2] def change create_table :cars do |t| t.string :name diff --git a/spec/dummy/db/migrate/20170904155843_create_manufacturers.rb b/spec/dummy/db/migrate/20170904155843_create_manufacturers.rb index d6a229a1..ac2d9654 100644 --- a/spec/dummy/db/migrate/20170904155843_create_manufacturers.rb +++ b/spec/dummy/db/migrate/20170904155843_create_manufacturers.rb @@ -1,4 +1,4 @@ -class CreateManufacturers < ActiveRecord::Migration +class CreateManufacturers < ActiveRecord::Migration[4.2] def change create_table :manufacturers do |t| t.string :name diff --git a/spec/dummy/db/migrate/20171110201538_add_active_to_invoices.rb b/spec/dummy/db/migrate/20171110201538_add_active_to_invoices.rb index d9381307..aca2d61f 100644 --- a/spec/dummy/db/migrate/20171110201538_add_active_to_invoices.rb +++ b/spec/dummy/db/migrate/20171110201538_add_active_to_invoices.rb @@ -1,4 +1,4 @@ -class AddActiveToInvoices < ActiveRecord::Migration +class AddActiveToInvoices < ActiveRecord::Migration[4.2] def change add_column :invoices, :active, :boolean, default: true end diff --git a/spec/dummy/db/migrate/20180222225709_add_shipping_status_to_invoice.rb b/spec/dummy/db/migrate/20180222225709_add_shipping_status_to_invoice.rb index 09e7725c..d9014c69 100644 --- a/spec/dummy/db/migrate/20180222225709_add_shipping_status_to_invoice.rb +++ b/spec/dummy/db/migrate/20180222225709_add_shipping_status_to_invoice.rb @@ -1,4 +1,4 @@ -class AddShippingStatusToInvoice < ActiveRecord::Migration +class AddShippingStatusToInvoice < ActiveRecord::Migration[4.2] def change add_column :invoices, :shipping_status, :string end diff --git a/spec/dummy/db/migrate/20180228085959_create_departments.rb b/spec/dummy/db/migrate/20180228085959_create_departments.rb new file mode 100644 index 00000000..9e417e6d --- /dev/null +++ b/spec/dummy/db/migrate/20180228085959_create_departments.rb @@ -0,0 +1,9 @@ +class CreateDepartments < ActiveRecord::Migration[4.2] + def change + create_table :departments do |t| + t.string :name + + t.timestamps null: false + end + end +end diff --git a/spec/dummy/db/migrate/20180228122115_create_departments_cities.rb b/spec/dummy/db/migrate/20180228122115_create_departments_cities.rb new file mode 100644 index 00000000..3d283b7c --- /dev/null +++ b/spec/dummy/db/migrate/20180228122115_create_departments_cities.rb @@ -0,0 +1,8 @@ +class CreateDepartmentsCities < ActiveRecord::Migration[4.2] + def change + create_table :departments_cities do |t| + t.references :department, index: true, foreign_key: true + t.references :city, index: true, foreign_key: true + end + end +end diff --git a/spec/dummy/db/migrate/20220401181023_add_picture_data_to_invoice.rb b/spec/dummy/db/migrate/20220401181023_add_picture_data_to_invoice.rb new file mode 100644 index 00000000..a630053b --- /dev/null +++ b/spec/dummy/db/migrate/20220401181023_add_picture_data_to_invoice.rb @@ -0,0 +1,5 @@ +class AddPictureDataToInvoice < ActiveRecord::Migration[5.2] + def change + add_column :invoices, :picture_data, :text + end +end diff --git a/spec/dummy/db/migrate/20220617213244_add_description_to_invoice.rb b/spec/dummy/db/migrate/20220617213244_add_description_to_invoice.rb new file mode 100644 index 00000000..a46c7e66 --- /dev/null +++ b/spec/dummy/db/migrate/20220617213244_add_description_to_invoice.rb @@ -0,0 +1,5 @@ +class AddDescriptionToInvoice < ActiveRecord::Migration[5.2] + def change + add_column :invoices, :description, :text + end +end diff --git a/spec/dummy/db/migrate/20230313193813_remove_attachment_from_invoices.rb b/spec/dummy/db/migrate/20230313193813_remove_attachment_from_invoices.rb new file mode 100644 index 00000000..1d7e705b --- /dev/null +++ b/spec/dummy/db/migrate/20230313193813_remove_attachment_from_invoices.rb @@ -0,0 +1,6 @@ +class RemoveAttachmentFromInvoices < ActiveRecord::Migration[6.1] + def change + remove_attachment :invoices, :attachment + remove_attachment :invoices, :photo + end +end diff --git a/spec/dummy/db/schema.rb b/spec/dummy/db/schema.rb index 181b0ad4..fcd5192c 100644 --- a/spec/dummy/db/schema.rb +++ b/spec/dummy/db/schema.rb @@ -1,4 +1,3 @@ -# encoding: UTF-8 # This file is auto-generated from the current state of the database. Instead # of editing this file, please use the migrations feature of Active Record to # incrementally modify your database, and then regenerate this schema definition. @@ -11,128 +10,112 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20180222225709) do +ActiveRecord::Schema.define(version: 2023_03_13_193813) do - create_table "active_admin_comments", force: true do |t| - t.string "namespace" - t.text "body" - t.string "resource_id", null: false - t.string "resource_type", null: false - t.integer "author_id" - t.string "author_type" + create_table "active_admin_comments", force: :cascade do |t| + t.string "namespace" + t.text "body" + t.string "resource_id", null: false + t.string "resource_type", null: false + t.string "author_type" + t.integer "author_id" t.datetime "created_at" t.datetime "updated_at" + t.index ["author_type", "author_id"], name: "index_active_admin_comments_on_author_type_and_author_id" + t.index ["namespace"], name: "index_active_admin_comments_on_namespace" + t.index ["resource_type", "resource_id"], name: "index_active_admin_comments_on_resource_type_and_resource_id" end - add_index "active_admin_comments", ["author_type", "author_id"], name: "index_active_admin_comments_on_author_type_and_author_id" - add_index "active_admin_comments", ["namespace"], name: "index_active_admin_comments_on_namespace" - add_index "active_admin_comments", ["resource_type", "resource_id"], name: "index_active_admin_comments_on_resource_type_and_resource_id" - - create_table "admin_users", force: true do |t| - t.string "email", default: "", null: false - t.string "encrypted_password", default: "", null: false - t.string "reset_password_token" - t.datetime "reset_password_sent_at" - t.datetime "remember_created_at" - t.integer "sign_in_count", default: 0, null: false - t.datetime "current_sign_in_at" - t.datetime "last_sign_in_at" - t.string "current_sign_in_ip" - t.string "last_sign_in_ip" - t.datetime "created_at" - t.datetime "updated_at" - end - - add_index "admin_users", ["email"], name: "index_admin_users_on_email", unique: true - add_index "admin_users", ["reset_password_token"], name: "index_admin_users_on_reset_password_token", unique: true - - create_table "cars", force: true do |t| - t.string "name" + create_table "cars", force: :cascade do |t| + t.string "name" t.integer "year" t.integer "manufacturer_id" end - create_table "categories", force: true do |t| - t.string "name" - t.text "description" + create_table "categories", force: :cascade do |t| + t.string "name" + t.text "description" t.datetime "created_at" t.datetime "updated_at" end - create_table "cities", force: true do |t| - t.string "name" - t.integer "region_id" + create_table "cities", force: :cascade do |t| + t.string "name" + t.integer "region_id" t.datetime "created_at" t.datetime "updated_at" - t.text "information" + t.text "information" + t.index ["region_id"], name: "index_cities_on_region_id" end - add_index "cities", ["region_id"], name: "index_cities_on_region_id" - - create_table "countries", force: true do |t| - t.string "name" + create_table "countries", force: :cascade do |t| + t.string "name" t.datetime "created_at" t.datetime "updated_at" - t.text "information" + t.text "information" end - create_table "invoices", force: true do |t| - t.datetime "legal_date" - t.string "number" + create_table "departments", force: :cascade do |t| + t.string "name" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "departments_cities", force: :cascade do |t| + t.integer "department_id" + t.integer "city_id" + t.index ["city_id"], name: "index_departments_cities_on_city_id" + t.index ["department_id"], name: "index_departments_cities_on_department_id" + end + + create_table "invoices", force: :cascade do |t| + t.date "legal_date" + t.string "number" t.datetime "created_at" t.datetime "updated_at" - t.boolean "paid" - t.string "state" - t.integer "status" - t.string "attachment_file_name" - t.string "attachment_content_type" - t.integer "attachment_file_size" - t.datetime "attachment_updated_at" - t.string "photo_file_name" - t.string "photo_content_type" - t.integer "photo_file_size" - t.datetime "photo_updated_at" - t.integer "category_id" - t.integer "city_id" - t.integer "position" - t.string "color" - t.float "amount" - t.integer "client_id" - t.string "aasm_state" - t.boolean "active", default: true - t.string "shipping_status" + t.boolean "paid" + t.string "state" + t.integer "status" + t.integer "category_id" + t.integer "city_id" + t.integer "position" + t.string "color" + t.float "amount" + t.integer "client_id" + t.string "aasm_state" + t.boolean "active", default: true + t.string "shipping_status" + t.text "picture_data" + t.text "description" + t.index ["category_id"], name: "index_invoices_on_category_id" + t.index ["city_id"], name: "index_invoices_on_city_id" end - add_index "invoices", ["category_id"], name: "index_invoices_on_category_id" - add_index "invoices", ["city_id"], name: "index_invoices_on_city_id" - - create_table "invoices_items", id: false, force: true do |t| + create_table "invoices_items", id: false, force: :cascade do |t| t.integer "invoice_id" t.integer "item_id" + t.index ["invoice_id"], name: "index_invoices_items_on_invoice_id" + t.index ["item_id"], name: "index_invoices_items_on_item_id" end - add_index "invoices_items", ["invoice_id"], name: "index_invoices_items_on_invoice_id" - add_index "invoices_items", ["item_id"], name: "index_invoices_items_on_item_id" - - create_table "items", force: true do |t| - t.string "name" - t.text "description" + create_table "items", force: :cascade do |t| + t.string "name" + t.text "description" t.datetime "created_at" t.datetime "updated_at" end - create_table "manufacturers", force: true do |t| + create_table "manufacturers", force: :cascade do |t| t.string "name" end - create_table "regions", force: true do |t| - t.string "name" - t.integer "country_id" + create_table "regions", force: :cascade do |t| + t.string "name" + t.integer "country_id" t.datetime "created_at" t.datetime "updated_at" - t.text "information" + t.text "information" + t.index ["country_id"], name: "index_regions_on_country_id" end - add_index "regions", ["country_id"], name: "index_regions_on_country_id" - end diff --git a/spec/dummy/lib/fake_data_loader.rb b/spec/dummy/lib/fake_data_loader.rb index a88321fc..e16e7e29 100644 --- a/spec/dummy/lib/fake_data_loader.rb +++ b/spec/dummy/lib/fake_data_loader.rb @@ -4,13 +4,11 @@ module FakeDataLoader extend DataLoaders def self.load_data - create_admin create_categories(5) create_items(10) create_cities Invoice.create!( - attachment: File.new('../../spec/assets/entradas_para_dragon_ball_z.pdf'), number: "0002-00000001,0002-00004684,4684", aasm_state: :accepted, color: '#C6A300', @@ -19,11 +17,11 @@ def self.load_data category: @category3, amount: 34000, items: [@item1, @item3], - legal_date: DateTime.current - 5.days + legal_date: Date.current - 5.days ) Invoice.create!( - photo: File.new('../../spec/assets/Rails.png'), + picture: File.new('../../spec/assets/Rails.png'), number: "0002-00004684", color: '#D94000', city: @mendoza, @@ -31,7 +29,7 @@ def self.load_data category: @category2, amount: 50000, items: [@item1, @item4, @item5], - legal_date: DateTime.current + legal_date: Date.current ) end end diff --git a/spec/dummy/package.json b/spec/dummy/package.json new file mode 100644 index 00000000..01eba6af --- /dev/null +++ b/spec/dummy/package.json @@ -0,0 +1,13 @@ +{ + "name": "activeadmin_addons_dummy_app", + "version": "1.7.1", + "dependencies": { + "@activeadmin/activeadmin": "^2.9.0", + "@rails/webpacker": "5.3.0", + "webpack": "^4.46.0", + "webpack-cli": "^3.3.12" + }, + "devDependencies": { + "webpack-dev-server": "^3.11.2" + } +} diff --git a/spec/dummy/postcss.config.js b/spec/dummy/postcss.config.js new file mode 100644 index 00000000..aa5998a8 --- /dev/null +++ b/spec/dummy/postcss.config.js @@ -0,0 +1,12 @@ +module.exports = { + plugins: [ + require('postcss-import'), + require('postcss-flexbugs-fixes'), + require('postcss-preset-env')({ + autoprefixer: { + flexbox: 'no-2009' + }, + stage: 3 + }) + ] +} diff --git a/spec/dummy/spec/factories/cities.rb b/spec/dummy/spec/factories/cities.rb index 05adf7ff..8203d6c3 100644 --- a/spec/dummy/spec/factories/cities.rb +++ b/spec/dummy/spec/factories/cities.rb @@ -2,7 +2,7 @@ FactoryBot.define do factory :city do - name "MyString" - region nil + name { "MyString" } + region { nil } end end diff --git a/spec/dummy/spec/factories/countries.rb b/spec/dummy/spec/factories/countries.rb index 3dfaa6dd..8da407bc 100644 --- a/spec/dummy/spec/factories/countries.rb +++ b/spec/dummy/spec/factories/countries.rb @@ -2,6 +2,6 @@ FactoryBot.define do factory :country do - name "MyString" + name { "MyString" } end end diff --git a/spec/dummy/spec/factories/regions.rb b/spec/dummy/spec/factories/regions.rb index ed523a4c..b76e68e6 100644 --- a/spec/dummy/spec/factories/regions.rb +++ b/spec/dummy/spec/factories/regions.rb @@ -2,7 +2,7 @@ FactoryBot.define do factory :region do - name "MyString" - country nil + name { "MyString" } + country { nil } end end diff --git a/spec/dummy/yarn.lock b/spec/dummy/yarn.lock new file mode 100644 index 00000000..59d64bca --- /dev/null +++ b/spec/dummy/yarn.lock @@ -0,0 +1,6887 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@activeadmin/activeadmin@^2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@activeadmin/activeadmin/-/activeadmin-2.9.0.tgz#ad277ef4a49b250377afd3df615f9acc3c84d577" + integrity sha512-KZqr1MrvpCXN/8SCF4MgqGscmuWPHivz5RPHKR9R8bKIB0InUHm7tzQoQOT9ZdYuHCBkf3cqlzBoKNNNV3x3ww== + dependencies: + jquery "^3.4.1" + jquery-ui "^1.12.1" + jquery-ujs "^1.2.2" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.4.tgz#45720fe0cecf3fd42019e1d12cc3d27fadc98d58" + integrity sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ== + +"@babel/core@^7.13.16": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.3.tgz#5395e30405f0776067fbd9cf0884f15bfb770a38" + integrity sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.14.3" + "@babel/helper-compilation-targets" "^7.13.16" + "@babel/helper-module-transforms" "^7.14.2" + "@babel/helpers" "^7.14.0" + "@babel/parser" "^7.14.3" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.2" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.14.2", "@babel/generator@^7.14.3": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.3.tgz#0c2652d91f7bddab7cccc6ba8157e4f40dcedb91" + integrity sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA== + dependencies: + "@babel/types" "^7.14.2" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" + integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" + integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz#33ebd0ffc34248051ee2089350a929ab02f2a516" + integrity sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA== + dependencies: + "@babel/compat-data" "^7.14.4" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.16.6" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.14.0", "@babel/helper-create-class-features-plugin@^7.14.3": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz#abf888d836a441abee783c75229279748705dc42" + integrity sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-function-name" "^7.14.2" + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-replace-supers" "^7.14.4" + "@babel/helper-split-export-declaration" "^7.12.13" + +"@babel/helper-create-regexp-features-plugin@^7.12.13": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz#149aa6d78c016e318c43e2409a0ae9c136a86688" + integrity sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + regexpu-core "^4.7.1" + +"@babel/helper-define-polyfill-provider@^0.2.2": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" + integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-explode-assignable-expression@^7.12.13": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" + integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== + dependencies: + "@babel/types" "^7.13.0" + +"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz#397688b590760b6ef7725b5f0860c82427ebaac2" + integrity sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.14.2" + +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-hoist-variables@^7.13.0": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" + integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== + dependencies: + "@babel/traverse" "^7.13.15" + "@babel/types" "^7.13.16" + +"@babel/helper-member-expression-to-functions@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" + integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5" + integrity sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA== + dependencies: + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.14.0" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.2" + +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== + +"@babel/helper-remap-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" + integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-wrap-function" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.12", "@babel/helper-replace-supers@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz#b2ab16875deecfff3ddfcd539bc315f72998d836" + integrity sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.4" + +"@babel/helper-simple-access@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" + integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" + integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== + +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + +"@babel/helper-wrap-function@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" + integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/helpers@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" + integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.14.0" + +"@babel/highlight@^7.12.13": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" + integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.4.tgz#a5c560d6db6cd8e6ed342368dea8039232cbab18" + integrity sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA== + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" + integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + +"@babel/plugin-proposal-async-generator-functions@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz#3a2085abbf5d5f962d480dbc81347385ed62eb1e" + integrity sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" + integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-proposal-class-static-block@^7.14.3": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz#5a527e2cae4a4753119c3a3e7f64ecae8ccf1360" + integrity sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.3" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-class-static-block" "^7.12.13" + +"@babel/plugin-proposal-dynamic-import@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz#01ebabd7c381cff231fa43e302939a9de5be9d9f" + integrity sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz#62542f94aa9ce8f6dba79eec698af22112253791" + integrity sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz#830b4e2426a782e8b2878fbfe2cba85b70cbf98c" + integrity sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz#222348c080a1678e0e74ea63fe76f275882d1fd7" + integrity sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz#425b11dc62fc26939a2ab42cbba680bdf5734546" + integrity sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz#82b4cc06571143faf50626104b335dd71baa4f9e" + integrity sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.13.8", "@babel/plugin-proposal-object-rest-spread@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.4.tgz#0e2b4de419915dc0b409378e829412e2031777c4" + integrity sha512-AYosOWBlyyXEagrPRfLJ1enStufsr7D1+ddpj8OLi9k7B6+NdZ0t/9V7Fh+wJ4g2Jol8z2JkgczYqtWrZd4vbA== + dependencies: + "@babel/compat-data" "^7.14.4" + "@babel/helper-compilation-targets" "^7.14.4" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.14.2" + +"@babel/plugin-proposal-optional-catch-binding@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz#150d4e58e525b16a9a1431bd5326c4eed870d717" + integrity sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz#df8171a8b9c43ebf4c1dabe6311b432d83e1b34e" + integrity sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" + integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-proposal-private-property-in-object@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz#b1a1f2030586b9d3489cc26179d2eb5883277636" + integrity sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.14.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-private-property-in-object" "^7.14.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" + integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz#8e3d674b0613e67975ceac2776c97b60cafc5c9c" + integrity sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz#762a4babec61176fec6c88480dec40372b140c0b" + integrity sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-syntax-top-level-await@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" + integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-arrow-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" + integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" + integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + +"@babel/plugin-transform-block-scoped-functions@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" + integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-block-scoping@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz#caf140b0b2e2462c509553d140e6d0abefb61ed8" + integrity sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-classes@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz#a83c15503fc71a0f99e876fdce7dadbc6575ec3a" + integrity sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-function-name" "^7.14.2" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-replace-supers" "^7.14.4" + "@babel/helper-split-export-declaration" "^7.12.13" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" + integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-destructuring@^7.13.17", "@babel/plugin-transform-destructuring@^7.14.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz#acbec502e9951f30f4441eaca1d2f29efade59ed" + integrity sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" + integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-duplicate-keys@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" + integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-exponentiation-operator@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" + integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-for-of@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" + integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" + integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" + integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-member-expression-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" + integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-modules-amd@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz#6622806fe1a7c07a1388444222ef9535f2ca17b0" + integrity sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw== + dependencies: + "@babel/helper-module-transforms" "^7.14.2" + "@babel/helper-plugin-utils" "^7.13.0" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161" + integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ== + dependencies: + "@babel/helper-module-transforms" "^7.14.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-simple-access" "^7.13.12" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" + integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== + dependencies: + "@babel/helper-hoist-variables" "^7.13.0" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-identifier" "^7.12.11" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz#2f8179d1bbc9263665ce4a65f305526b2ea8ac34" + integrity sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw== + dependencies: + "@babel/helper-module-transforms" "^7.14.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" + integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + +"@babel/plugin-transform-new-target@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" + integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-object-super@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" + integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-replace-supers" "^7.12.13" + +"@babel/plugin-transform-parameters@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz#e4290f72e0e9e831000d066427c4667098decc31" + integrity sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-property-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" + integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-regenerator@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" + integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" + integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-runtime@^7.13.15": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz#1fd885a2d0de1d3c223795a4e9be72c2db4515cf" + integrity sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg== + dependencies: + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-plugin-utils" "^7.13.0" + babel-plugin-polyfill-corejs2 "^0.2.0" + babel-plugin-polyfill-corejs3 "^0.2.0" + babel-plugin-polyfill-regenerator "^0.2.0" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" + integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-spread@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" + integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" + integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-template-literals@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" + integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-typeof-symbol@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" + integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-unicode-escapes@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" + integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-unicode-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" + integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/preset-env@^7.13.15": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.4.tgz#73fc3228c59727e5e974319156f304f0d6685a2d" + integrity sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA== + dependencies: + "@babel/compat-data" "^7.14.4" + "@babel/helper-compilation-targets" "^7.14.4" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-async-generator-functions" "^7.14.2" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-class-static-block" "^7.14.3" + "@babel/plugin-proposal-dynamic-import" "^7.14.2" + "@babel/plugin-proposal-export-namespace-from" "^7.14.2" + "@babel/plugin-proposal-json-strings" "^7.14.2" + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.2" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.2" + "@babel/plugin-proposal-numeric-separator" "^7.14.2" + "@babel/plugin-proposal-object-rest-spread" "^7.14.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.14.2" + "@babel/plugin-proposal-optional-chaining" "^7.14.2" + "@babel/plugin-proposal-private-methods" "^7.13.0" + "@babel/plugin-proposal-private-property-in-object" "^7.14.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.12.13" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@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.0" + "@babel/plugin-syntax-top-level-await" "^7.12.13" + "@babel/plugin-transform-arrow-functions" "^7.13.0" + "@babel/plugin-transform-async-to-generator" "^7.13.0" + "@babel/plugin-transform-block-scoped-functions" "^7.12.13" + "@babel/plugin-transform-block-scoping" "^7.14.4" + "@babel/plugin-transform-classes" "^7.14.4" + "@babel/plugin-transform-computed-properties" "^7.13.0" + "@babel/plugin-transform-destructuring" "^7.14.4" + "@babel/plugin-transform-dotall-regex" "^7.12.13" + "@babel/plugin-transform-duplicate-keys" "^7.12.13" + "@babel/plugin-transform-exponentiation-operator" "^7.12.13" + "@babel/plugin-transform-for-of" "^7.13.0" + "@babel/plugin-transform-function-name" "^7.12.13" + "@babel/plugin-transform-literals" "^7.12.13" + "@babel/plugin-transform-member-expression-literals" "^7.12.13" + "@babel/plugin-transform-modules-amd" "^7.14.2" + "@babel/plugin-transform-modules-commonjs" "^7.14.0" + "@babel/plugin-transform-modules-systemjs" "^7.13.8" + "@babel/plugin-transform-modules-umd" "^7.14.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" + "@babel/plugin-transform-new-target" "^7.12.13" + "@babel/plugin-transform-object-super" "^7.12.13" + "@babel/plugin-transform-parameters" "^7.14.2" + "@babel/plugin-transform-property-literals" "^7.12.13" + "@babel/plugin-transform-regenerator" "^7.13.15" + "@babel/plugin-transform-reserved-words" "^7.12.13" + "@babel/plugin-transform-shorthand-properties" "^7.12.13" + "@babel/plugin-transform-spread" "^7.13.0" + "@babel/plugin-transform-sticky-regex" "^7.12.13" + "@babel/plugin-transform-template-literals" "^7.13.0" + "@babel/plugin-transform-typeof-symbol" "^7.12.13" + "@babel/plugin-transform-unicode-escapes" "^7.12.13" + "@babel/plugin-transform-unicode-regex" "^7.12.13" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.14.4" + babel-plugin-polyfill-corejs2 "^0.2.0" + babel-plugin-polyfill-corejs3 "^0.2.0" + babel-plugin-polyfill-regenerator "^0.2.0" + core-js-compat "^3.9.0" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.13.17", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" + integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" + integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.14.2" + "@babel/helper-function-name" "^7.14.2" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.14.2" + "@babel/types" "^7.14.2" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.14.4", "@babel/types@^7.4.4": + version "7.14.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.4.tgz#bfd6980108168593b38b3eb48a24aa026b919bc0" + integrity sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw== + dependencies: + "@babel/helper-validator-identifier" "^7.14.0" + to-fast-properties "^2.0.0" + +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@rails/webpacker@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-5.3.0.tgz#9d7a615735f850572b9c5e2ad4c57f4af70d70fd" + integrity sha512-cpzrtrsMVi6WgRUzL63bMF+oa98DiL8cKXUZzDFLeElRu7qArG+cxU8grmaPbTmFqQEqVGsbJT0c6fubbFtwVA== + dependencies: + "@babel/core" "^7.13.16" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-object-rest-spread" "^7.13.8" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.13.17" + "@babel/plugin-transform-regenerator" "^7.13.15" + "@babel/plugin-transform-runtime" "^7.13.15" + "@babel/preset-env" "^7.13.15" + "@babel/runtime" "^7.13.17" + babel-loader "^8.2.2" + babel-plugin-dynamic-import-node "^2.3.3" + babel-plugin-macros "^2.8.0" + case-sensitive-paths-webpack-plugin "^2.4.0" + compression-webpack-plugin "^4.0.1" + core-js "^3.11.0" + css-loader "^3.6.0" + file-loader "^6.2.0" + flatted "^3.1.1" + glob "^7.1.6" + js-yaml "^3.14.1" + mini-css-extract-plugin "^0.9.0" + optimize-css-assets-webpack-plugin "^5.0.4" + path-complete-extname "^1.0.0" + pnp-webpack-plugin "^1.6.4" + postcss-flexbugs-fixes "^4.2.1" + postcss-import "^12.0.1" + postcss-loader "^3.0.0" + postcss-preset-env "^6.7.0" + postcss-safe-parser "^4.0.2" + regenerator-runtime "^0.13.7" + sass "^1.32.11" + sass-loader "10.1.1" + style-loader "^1.3.0" + terser-webpack-plugin "^4.2.3" + webpack "^4.46.0" + webpack-assets-manifest "^3.1.1" + webpack-cli "^3.3.12" + webpack-sources "^1.4.3" + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + +"@types/minimatch@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" + integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== + +"@types/node@*": + version "15.6.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.1.tgz#32d43390d5c62c5b6ec486a9bc9c59544de39a08" + integrity sha512-7EIraBEyRHEe7CH+Fm1XvgqU6uwZN8Q7jppJGcqjROMT29qhAuuOxYB1uEY5UMYQKEmA5D+5tBnhdaPXSsLONA== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + 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" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^9.6.1: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +babel-loader@^8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-macros@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-polyfill-corejs2@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" + integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.2" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz#7424a1682ee44baec817327710b1b094e5f8f7f5" + integrity sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + core-js-compat "^3.9.1" + +babel-plugin-polyfill-regenerator@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" + integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.6.4: + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== + dependencies: + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" + escalade "^3.1.1" + node-releases "^1.1.71" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^15.0.5: + version "15.2.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.2.0.tgz#73af75f77c58e72d8c630a7a2858cb18ef523389" + integrity sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw== + dependencies: + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: + version "1.0.30001230" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71" + integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ== + +case-sensitive-paths-webpack-plugin@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" + integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== + +chalk@^2.0, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + 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" + +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" + integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + +colorette@^1.2.1, colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression-webpack-plugin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-4.0.1.tgz#33eda97f1170dd38c5556771de10f34245aa0274" + integrity sha512-0mg6PgwTsUe5LEcUrOu3ob32vraDx2VdbMGAT1PARcOV+UJWDYZFdkSo6RbHoGQ061mmmkC7XpRKOlvwm/gzJQ== + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + schema-utils "^2.7.0" + serialize-javascript "^4.0.0" + webpack-sources "^1.4.3" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.9.0, core-js-compat@^3.9.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.13.1.tgz#05444caa8f153be0c67db03cf8adb8ec0964e58e" + integrity sha512-mdrcxc0WznfRd8ZicEZh1qVeJ2mu6bwQFh8YVUK48friy/FOwFV5EJj9/dlh+nMQ74YusdVfBFDuomKgUspxWQ== + dependencies: + browserslist "^4.16.6" + semver "7.0.0" + +core-js@^3.11.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.13.1.tgz#30303fabd53638892062d8b4e802cac7599e9fb7" + integrity sha512-JqveUc4igkqwStL2RTRn/EPFGBOfEZHxJl/8ej1mXJR75V3go2mFF4bmUYkEIT1rveHKnkUlcJX/c+f1TyIovQ== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + 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" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== + dependencies: + postcss "^7.0.5" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + +css-loader@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^6.3.0" + +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + dependencies: + postcss "^7.0.5" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +cssdb@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" + integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.3" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.11" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" + integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.8" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.1, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + 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" + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" + integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.723: + version "1.3.742" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz#7223215acbbd3a5284962ebcb6df85d88b95f200" + integrity sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q== + +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +errno@^0.1.3, errno@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.2, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: + version "1.18.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" + integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.10.3" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +findup-sync@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +flatted@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" + integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + 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" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4, ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-bigint@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" + integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" + integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + dependencies: + call-bind "^1.0.2" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.2.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" + integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" + integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" + integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.2" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-string@^1.0.5, is-string@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +jest-worker@^26.5.0: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jquery-ui@^1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.12.1.tgz#bcb4045c8dd0539c134bc1488cdd3e768a7a9e51" + integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= + +jquery-ujs@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jquery-ujs/-/jquery-ujs-1.2.2.tgz#6a8ef1020e6b6dda385b90a4bddc128c21c56397" + integrity sha1-ao7xAg5rbdo4W5CkvdwSjCHFY5c= + dependencies: + jquery ">=1.8.0" + +jquery@>=1.8.0, jquery@^3.4.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" + integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1, js-yaml@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json3@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klona@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.get@^4.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.has@^4.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" + integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.5: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": + version "1.47.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== + +mime-types@~2.1.17, mime-types@~2.1.24: + version "2.1.30" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" + integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== + dependencies: + mime-db "1.47.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + +mini-css-extract-plugin@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" + integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^1.1.71: + version "1.1.72" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" + integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" + integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" + integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" + integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimize-css-assets-webpack-plugin@^5.0.4: + version "5.0.6" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.6.tgz#abad0c6c11a632201794f75ddba3ce13e32ae80e" + integrity sha512-JAYw7WrIAIuHWoKeSBB3lJ6ZG9PSDK3JJduv/FMpIY060wvbA8Lqn/TCtxNGICNlg0X5AGshLzIhpYrkltdq+A== + dependencies: + cssnano "^4.1.10" + last-call-webpack-plugin "^3.0.0" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + 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" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-complete-extname@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/path-complete-extname/-/path-complete-extname-1.0.0.tgz#f889985dc91000c815515c0bfed06c5acda0752b" + integrity sha512-CVjiWcMRdGU8ubs08YQVzhutOR5DEfO97ipRIlOGMK5Bek5nQySknBpuxVAVJ36hseTNs+vdIcv57ZrWxH7zvg== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pnp-webpack-plugin@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" + integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^6.0.2" + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" + integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" + integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-color-hex-alpha@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" + integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== + dependencies: + postcss "^7.0.14" + postcss-values-parser "^2.0.1" + +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" + integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" + integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-custom-media@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" + integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== + dependencies: + postcss "^7.0.14" + +postcss-custom-properties@^8.0.11: + version "8.0.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" + integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== + dependencies: + postcss "^7.0.17" + postcss-values-parser "^2.0.1" + +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" + integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" + integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" + integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== + dependencies: + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-env-function@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" + integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-flexbugs-fixes@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" + integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== + dependencies: + postcss "^7.0.26" + +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" + integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== + dependencies: + postcss "^7.0.2" + +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" + integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== + dependencies: + postcss "^7.0.2" + +postcss-font-variant@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" + integrity sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA== + dependencies: + postcss "^7.0.2" + +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" + integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== + dependencies: + postcss "^7.0.2" + +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" + integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-import@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-12.0.1.tgz#cf8c7ab0b5ccab5649024536e565f841928b7153" + integrity sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw== + dependencies: + postcss "^7.0.1" + postcss-value-parser "^3.2.3" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-initial@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" + integrity sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg== + dependencies: + postcss "^7.0.2" + +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" + integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" + integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + dependencies: + postcss "^7.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" + integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + dependencies: + postcss "^7.0.2" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + dependencies: + postcss "^7.0.2" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" + integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== + dependencies: + postcss "^7.0.2" + +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" + integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== + dependencies: + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" + integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@^6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" + integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + dependencies: + autoprefixer "^9.6.1" + browserslist "^4.6.4" + caniuse-lite "^1.0.30000981" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.4.0" + postcss "^7.0.17" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.3" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.8" + postcss-custom-properties "^8.0.11" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" + integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" + integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== + dependencies: + postcss "^7.0.2" + +postcss-safe-parser@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" + integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== + dependencies: + postcss "^7.0.26" + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" + integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" + integrity sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.6" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" + integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" + integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.36" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" + integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= + dependencies: + pify "^2.3.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.9" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" + integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.7, resolve@^1.12.0, resolve@^1.14.2: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@^2.5.4, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-loader@10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" + integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw== + dependencies: + klona "^2.0.4" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^3.0.0" + semver "^7.3.2" + +sass@^1.32.11: + version "1.34.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.34.0.tgz#e46d5932d8b0ecc4feb846d861f26a578f7f7172" + integrity sha512-rHEN0BscqjUYuomUEaqq3BMgsXqQfkcMVR7UhscsAVub0/spUrZGBMxQXFS2kfiDsPLZw5yuU9iJEFNC2x38Qw== + dependencies: + chokidar ">=3.0.0 <4.0.0" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.8: + version "1.10.11" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" + integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== + dependencies: + node-forge "^0.10.0" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" + integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== + dependencies: + debug "^3.2.6" + eventsource "^1.0.7" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.5.1" + +sockjs@^0.3.21: + version "0.3.21" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" + integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== + dependencies: + faye-websocket "^0.11.3" + uuid "^3.4.0" + websocket-driver "^0.7.4" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.12, source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + 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" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +ssri@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +style-loader@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" + integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.7.0" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^6.0.2: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + 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" + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser-webpack-plugin@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" + integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + jest-worker "^26.5.0" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + terser "^5.3.4" + webpack-sources "^1.4.3" + +terser@^4.1.2: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^5.3.4: + version "5.7.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" + integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse@^1.4.3, url-parse@^1.5.1: + version "1.5.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" + integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +webpack-assets-manifest@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/webpack-assets-manifest/-/webpack-assets-manifest-3.1.1.tgz#39bbc3bf2ee57fcd8ba07cda51c9ba4a3c6ae1de" + integrity sha512-JV9V2QKc5wEWQptdIjvXDUL1ucbPLH2f27toAY3SNdGZp+xSaStAgpoMcvMZmqtFrBc9a5pTS1058vxyMPOzRQ== + dependencies: + chalk "^2.0" + lodash.get "^4.0" + lodash.has "^4.0" + mkdirp "^0.5" + schema-utils "^1.0.0" + tapable "^1.0.0" + webpack-sources "^1.0.0" + +webpack-cli@^3.3.12: + version "3.3.12" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" + integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== + dependencies: + chalk "^2.4.2" + cross-spawn "^6.0.5" + enhanced-resolve "^4.1.1" + findup-sync "^3.0.0" + global-modules "^2.0.0" + import-local "^2.0.0" + interpret "^1.4.0" + loader-utils "^1.4.0" + supports-color "^6.1.0" + v8-compile-cache "^2.1.1" + yargs "^13.3.2" + +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.11.2: + version "3.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" + integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.8" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "^0.3.21" + sockjs-client "^1.5.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-sources@^1.0.0, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.46.0: + version "4.46.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" + integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.5.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.14, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^6.2.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== + dependencies: + async-limiter "~1.0.0" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/spec/features/attachment_builder_spec.rb b/spec/features/attachment_builder_spec.rb deleted file mode 100644 index e8f34993..00000000 --- a/spec/features/attachment_builder_spec.rb +++ /dev/null @@ -1,111 +0,0 @@ -require 'rails_helper' - -describe "Attachment Builder", type: :feature do - after do - Invoice.all.each do |invoice| - invoice.attachment = nil - invoice.save! - end - end - - def create_attachment_invoice - file_path = ENGINE_RAILS_ROOT + 'spec/assets/entradas_para_dragon_ball_z.pdf' - create_invoice(attachment: File.new(file_path)) - end - - context "without options" do - before do - register_show(Invoice) do - attachment_row :attachment, truncate: false - end - - visit admin_invoice_path(create_attachment_invoice) - end - - it "shows the attachent icon" do - icon = page.find('img') - expect(icon[:src]).to match(%r{/assets/fileicons/file_extension_pdf}) - end - - it "shows the attachent link" do - expect(page).to have_link("entradas_para_dragon_ball_z.pdf") - end - end - - context "with custom link label" do - before do - register_index(Invoice) do - attachment_column :attachment, label: "Download" - end - - create_attachment_invoice - visit admin_invoices_path - end - - it "shows the attachent link" do - expect(page).to have_link("Download") - end - end - - context "with truncated link label" do - before do - register_index(Invoice) do - attachment_column :attachment, truncate: true - end - - create_attachment_invoice - visit admin_invoices_path - end - - it "shows the attachent link" do - expect(page).to have_link("entradas_para_dragon_ball_z...") - end - end - - context "with proc given as label" do - before do - register_index(Invoice) do - attachment_column :attachment, label: proc { |inv| inv.city.name } - end - - create_attachment_invoice - city = City.create(name: "Gothic City") - @invoice.update(city: city) - visit admin_invoices_path - end - - it "shows the attachent link" do - expect(page).to have_link("Gothic City") - end - end - - context "without a block" do - before do - register_show(Invoice) do - attachment_row(:attachment, truncate: false) do - invoice.attachment - end - end - - visit admin_invoice_path(create_attachment_invoice) - end - - it "shows the attachent as an image" do - expect(page).to have_link("entradas_para_dragon_ball_z.pdf") - end - end - - context "using a label" do - before do - register_show(Invoice) do - attachment_row("Mi documento", :attachment) - end - - visit admin_invoice_path(create_attachment_invoice) - end - - it "shows custom label" do - expect(page).to have_content("Mi Documento") - end - end -end diff --git a/spec/features/bool_builder_spec.rb b/spec/features/bool_builder_spec.rb index dcad3a44..c21edff5 100644 --- a/spec/features/bool_builder_spec.rb +++ b/spec/features/bool_builder_spec.rb @@ -57,21 +57,6 @@ end end - context "passing attributes without localization values" do - before do - register_show(AdminUser) do - bool_row(:id) - end - - create_admin - visit admin_admin_user_path(@admin) - end - - it "shows the default true localized value" do - expect(page).to have_content 'ok' - end - end - context "using model localization options" do before do register_show(Invoice) do diff --git a/spec/features/image_builder_spec.rb b/spec/features/image_builder_spec.rb index 56d6aa18..570b6872 100644 --- a/spec/features/image_builder_spec.rb +++ b/spec/features/image_builder_spec.rb @@ -3,73 +3,82 @@ describe "Image Builder", type: :feature do after do Invoice.all.each do |invoice| - invoice.photo = nil + invoice.picture = nil invoice.save! end end - def create_photo_invoice - create_invoice(photo: File.new(ENGINE_RAILS_ROOT + 'spec/assets/Rails.png')) + def create_picture_invoice + create_invoice(picture: File.new(ENGINE_RAILS_ROOT + 'spec/assets/Rails.png')) end - context "without options" do - before do - register_index(Invoice) do - image_column :photo + describe '#shrine' do + context "without options" do + before do + register_index(Invoice) do + image_column :picture + end + + create_picture_invoice + visit admin_invoices_path end - create_photo_invoice - visit admin_invoices_path + it "shows the attachent as an image" do + img = page.find('img') + expect(img[:src]).not_to be(nil) + end end - it "shows the attachent as an image" do - img = page.find('img') - expect(img[:src]).to match(/Rails.png/) - end - end + context "passing style option" do + let(:invoice) { create_picture_invoice } - context "passing style option" do - before do - register_index(Invoice) do - image_column :photo, style: :thumb + before do + register_index(Invoice) do + image_column :picture, style: :jpg_small + end + + invoice.picture_derivatives! + invoice.save! + visit admin_invoices_path end - create_photo_invoice - visit admin_invoices_path - end + it "shows the attachent as an image" do + img = page.find('img') + expect(img[:src]).not_to be(nil) + end - it "shows the attachent as an image" do - img = page.find('img') - expect(img[:src]).to match(%r{thumb/Rails.png}) + it 'has the derivative' do + expect(invoice.picture_derivatives).to include(:jpg_small) + end end - end - context "passing a block" do - before do - register_show(Invoice) do - image_row(:photo, &:photo) + context "passing a block" do + before do + register_show(Invoice) do + image_row(:picture, &:picture) + end + + visit admin_invoice_path(create_picture_invoice) end - visit admin_invoice_path(create_photo_invoice) + it "shows the attachent as an image" do + img = page.find('img') + expect(img[:src]).not_to be(nil) + end end - it "shows the attachent as an image" do - img = page.find('img') - expect(img[:src]).to match(/Rails.png/) - end - end + context "using a label" do + before do + register_show(Invoice) do + image_row("My Picture", :picture) + end - context "using a label" do - before do - register_show(Invoice) do - image_row("Mi foto", :photo) + visit admin_invoice_path(create_picture_invoice) end - visit admin_invoice_path(create_photo_invoice) - end - - it "shows custom label" do - expect(page).to have_content("Mi Foto") + it "shows custom label" do + expect(page).to have_content("My Picture") + end end end end diff --git a/spec/features/inputs/date_time_picker_filter_input_spec.rb b/spec/features/inputs/date_time_picker_filter_input_spec.rb new file mode 100644 index 00000000..2a9f44cb --- /dev/null +++ b/spec/features/inputs/date_time_picker_filter_input_spec.rb @@ -0,0 +1,72 @@ +require 'rails_helper' + +describe "Date Time Picker Filter Input", type: :feature do + let(:now) { DateTime.new(1984, 6, 4, 9, 0, 0).in_time_zone } + + before do + register_page(Invoice) do + config.sort_order = 'created_at_asc' + + filter :created_at, as: :date_time_picker_filter + + index do + column :created_at + end + end + + 5.times { |i| Invoice.create(id: i + 1, created_at: now + i.hours) } + visit admin_invoices_path + end + + it "shows date time pickers", js: true do + expect(page).to have_css(".date-time-picker-input", count: 2) + expect(page).to have_css("#q_created_at_gteq", count: 1) + expect(page).to have_css("#q_created_at_lteq", count: 1) + end + + context "setting min and max values" do + before do + find("#q_created_at_gteq").set("1984-06-04 10:00") + find("#q_created_at_lteq").set("1984-06-04 12:00") + click_filter_btn + end + + it "shows filtered rows", js: true do + expect(page).not_to have_css("#invoice_5") + expect(page).to have_css("#invoice_4", count: 1) + expect(page).to have_css("#invoice_3", count: 1) + expect(page).to have_css("#invoice_2", count: 1) + expect(page).not_to have_css("#invoice_1") + end + end + + context "setting min value only" do + before do + find("#q_created_at_gteq").set("1984-06-04 12:00") + click_filter_btn + end + + it "shows filtered rows", js: true do + expect(page).to have_css("#invoice_5", count: 1) + expect(page).to have_css("#invoice_4", count: 1) + expect(page).not_to have_css("#invoice_3") + expect(page).not_to have_css("#invoice_2") + expect(page).not_to have_css("#invoice_1") + end + end + + context "setting max value only" do + before do + find("#q_created_at_lteq").set("1984-06-04 12:00") + click_filter_btn + end + + it "shows filtered rows", js: true do + expect(page).not_to have_css("#invoice_5") + expect(page).to have_css("#invoice_4", count: 1) + expect(page).to have_css("#invoice_3", count: 1) + expect(page).to have_css("#invoice_2", count: 1) + expect(page).to have_css("#invoice_1", count: 1) + end + end +end diff --git a/spec/features/inputs/date_time_picker_spec.rb b/spec/features/inputs/date_time_picker_spec.rb index 18c3fabf..759882f5 100644 --- a/spec/features/inputs/date_time_picker_spec.rb +++ b/spec/features/inputs/date_time_picker_spec.rb @@ -49,12 +49,13 @@ def picker_input end end - context "overriding default options" do + context "with default options" do before do - # This if for front-end javascript side + # This if for frontend (js) ActiveadminAddons.datetime_picker_default_options = { today_button: false, - format: "d-m-Y H:i" + format: "d-m-Y H:i", + timepicker: false } # This if for backend (Ruby) @@ -62,7 +63,7 @@ def picker_input register_page(Invoice) do form do |f| - f.input :updated_at, as: :date_time_picker + f.input :updated_at, as: :date_time_picker, picker_options: { timepicker: true } f.actions end end @@ -74,7 +75,8 @@ def picker_input it "applies default options" do expect(picker_input.value).to eq(@invoice.updated_at.strftime("%d-%m-%Y %H:%M")) picker_input.click - expect(page).to_not have_css(".xdsoft_today_button", count: 1) + expect(page).to have_css(".xdsoft_today_button", visible: false) + expect(page).to have_css(".xdsoft_timepicker") end end end diff --git a/spec/features/inputs/nested_select_input_spec.rb b/spec/features/inputs/nested_select_input_spec.rb index 0aaad9a1..1f18f5db 100644 --- a/spec/features/inputs/nested_select_input_spec.rb +++ b/spec/features/inputs/nested_select_input_spec.rb @@ -1,31 +1,32 @@ require "rails_helper" +# rubocop:disable Naming/VariableNumber describe "Nested Select Input", type: :feature do context "with nil city" do before do register_form(Invoice, false) do |f| - f.input :city_id, as: :nested_select, - level_1: { - attribute: :country_id, - width: "30px" - }, - level_2: { - attribute: :region_id, - url: "/fakeurl", - response_root: "my_regions" - }, - level_3: { - attribute: :city_id - } + f.input :city, as: :nested_select, + level_1: { + attribute: :country, + width: "30px" + }, + level_2: { + attribute: :region, + url: "/fakeurl", + response_root: "my_regions" + }, + level_3: { + attribute: :city + } end visit edit_admin_invoice_path(create_invoice) end it "shows empty select controls" do - expect(page.text).to_not match(/Chile/) - expect(page.text).to_not match(/Metropolitana/) - expect(page.text).to_not match(/Santiago/) + expect(page.text).not_to match(/Chile/) + expect(page.text).not_to match(/Metropolitana/) + expect(page.text).not_to match(/Santiago/) end it "uses the custom url" do @@ -33,12 +34,12 @@ end it "changes input width" do - on_input_ctx("invoice_region_id") { expect_select2_data_option("width", "30px") } + on_input_ctx("invoice_region") { expect_slimselect_data_option("width", "30px") } end - it "changes input width" do - on_input_ctx("invoice_region_id") do - expect_select2_data_option("response-root", "my_regions") + it "changes response root" do + on_input_ctx("invoice_region") do + expect_slimselect_data_option("response-root", "my_regions") end end end @@ -50,13 +51,13 @@ register_page(City, false) {} register_form(Invoice, false) do |f| - f.input :city_id, as: :nested_select, - level_1: { attribute: :country_id }, - level_2: { - attribute: :region_id, - collection: Region.all - }, - level_3: { attribute: :city_id } + f.input :city, as: :nested_select, + level_1: { attribute: :country }, + level_2: { + attribute: :region, + collection: Region.all + }, + level_3: { attribute: :city } end create_cities @@ -65,82 +66,109 @@ end it "shows filled select controls based on defined city_id", js: true do - on_input_ctx("invoice_country_id") { expect_select2_selection("Chile") } - on_input_ctx("invoice_region_id") { expect_select2_selection("Metropolitana") } - on_input_ctx("invoice_city_id") { expect_select2_selection("Santiago") } + on_input_ctx("invoice_country") { expect_slimselect_selection("Chile") } + on_input_ctx("invoice_region") { expect_slimselect_selection("Metropolitana") } + on_input_ctx("invoice_city") { expect_slimselect_selection("Santiago") } end context "updating the highest hierachy level" do before do - on_input_ctx("invoice_country_id") { open_select2_options } - select2_input.set("Arg") + on_input_ctx("invoice_country") do + open_slimselect_options + slimselect_search_input.set("Arg") + end end it "shows results based on entered text", js: true do - expect_select2_result_text_to_eq(1, "Argentina") + expect_slimselect_result_text_to_eq(1, "Argentina") end context "after click option" do - before { click_select2_option("Argentina") } + before do + on_input_ctx("invoice_country") { click_slimselect_option("Argentina") } + end it "sets value", js: true do - on_input_ctx("invoice_country_id") { expect_select2_selection("Argentina") } + on_input_ctx("invoice_country") { expect_slimselect_selection("Argentina") } end it "resets children select controls after click option", js: true do - on_input_ctx("invoice_region_id") { expect_select2_empty_selection } - on_input_ctx("invoice_city_id") { expect_select2_empty_selection } + on_input_ctx("invoice_region") { expect_slimselect_empty_selection } + on_input_ctx("invoice_city") { expect_slimselect_empty_selection } end end end - context "updating medium level" do - before do - on_input_ctx("invoice_region_id") { open_select2_options } - select2_input.set("Antof") - end + context "when updating medium level (that uses collection option)" do + context 'when searching for region that does not belong to selected country' do + before do + on_input_ctx("invoice_region") do + open_slimselect_options + slimselect_search_input.set("Cuy") + end + end - it "shows results based on entered text", js: true do - expect_select2_result_text_to_eq(1, "Antofagasta") + it "does not show results", js: true do + expect_slimselect_no_result + end end - context "after click option" do - before { click_select2_option("Antofagasta") } - - it "sets value", js: true do - on_input_ctx("invoice_region_id") { expect_select2_selection("Antofagasta") } + context 'when searching for region that belongs to selected country' do + before do + on_input_ctx("invoice_region") do + open_slimselect_options + slimselect_search_input.set("Antof") + end end - it "preserves parent value", js: true do - on_input_ctx("invoice_country_id") { expect_select2_selection("Chile") } + it "shows results based on entered text", js: true do + expect_slimselect_result_text_to_eq(1, "Antofagasta") end - it "resets children values", js: true do - on_input_ctx("invoice_city_id") { expect_select2_empty_selection } + context "when clicking option" do + before do + on_input_ctx("invoice_region") { click_slimselect_option("Antofagasta") } + end + + it "sets value", js: true do + on_input_ctx("invoice_region") { expect_slimselect_selection("Antofagasta") } + end + + it "preserves parent value", js: true do + on_input_ctx("invoice_country") { expect_slimselect_selection("Chile") } + end + + it "resets children values", js: true do + on_input_ctx("invoice_city") { expect_slimselect_empty_selection } + end end end end context "updating lowest level" do before do - on_input_ctx("invoice_city_id") { open_select2_options } - select2_input.set("na") + on_input_ctx("invoice_city") do + open_slimselect_options + slimselect_search_input.set("na") + end end it "shows results based on entered text", js: true do - expect_select2_result_text_to_eq(1, "Colina") + expect_slimselect_result_text_to_eq(1, "Colina") end context "after click option", js: true do - before { click_select2_option("Colina") } + before do + on_input_ctx("invoice_city") { click_slimselect_option("Colina") } + end it "sets value", js: true do - on_input_ctx("invoice_city_id") { expect_select2_selection("Colina") } + on_input_ctx("invoice_city") { expect_slimselect_selection("Colina") } end it "preserves parent values", js: true do - on_input_ctx("invoice_country_id") { expect_select2_selection("Chile") } - on_input_ctx("invoice_region_id") { expect_select2_selection("Metropolitana") } + on_input_ctx("invoice_country") { expect_slimselect_selection("Chile") } + on_input_ctx("invoice_region") { expect_slimselect_selection("Metropolitana") } end end end @@ -151,12 +179,12 @@ register_page(City, false) {} register_form(Invoice, false) do |f| - f.input :city_id, as: :nested_select, - fields: [:name, :information], - display_name: :id, - minimum_input_length: 5, - level_1: { attribute: :region_id }, - level_2: { attribute: :city_id } + f.input :city, as: :nested_select, + fields: [:name, :information], + display_name: :id, + minimum_input_length: 5, + level_1: { attribute: :region }, + level_2: { attribute: :city } end create_cities @@ -165,24 +193,214 @@ end it "sets display name on each select", js: true do - on_input_ctx("invoice_region_id") { expect_select2_selection(@metropolitana.id) } - on_input_ctx("invoice_city_id") { expect_select2_selection(@santiago.id) } + on_input_ctx("invoice_region") { expect_slimselect_selection(@metropolitana.id) } + on_input_ctx("invoice_city") { expect_slimselect_selection(@santiago.id) } end + # rubocop:disable RSpec/ExampleLength it "sets general minimum_input_length option", js: true do - msg = "Please enter 5 or more characters" - on_input_ctx("invoice_region_id") { open_select2_options } - expect_select2_result_text_to_eq(1, msg) - on_input_ctx("invoice_region_id") { select2_options_container.click } - on_input_ctx("invoice_city_id") { open_select2_options } - expect_select2_result_text_to_eq(1, msg) + # rubocop:enable RSpec/ExampleLength + msg = "Input is too short" + slimselect_region_id = nil + slimselect_city_id = nil + + on_input_ctx("invoice_region") do + slimselect_region_id = slimselect_original_select_id + open_slimselect_options + end + slimselect_search_input(slimselect_region_id).set("1234") + expect_slimselect_error("Please enter 5 or more characters") + sleep 1 + close_slimselect_options(slimselect_region_id) + + on_input_ctx("invoice_city") do + slimselect_city_id = slimselect_original_select_id + open_slimselect_options + end + slimselect_search_input(slimselect_city_id).set("1234") + expect_slimselect_error("Please enter 5 or more characters") end it "uses general fields to search", js: true do - on_input_ctx("invoice_city_id") { open_select2_options } - select2_input.set("info1") - expect_select2_result_text_to_eq(1, @santiago.id) + on_input_ctx("invoice_city") do + open_slimselect_options + slimselect_search_input.set("info1") + end + expect_slimselect_result_text_to_eq(1, @santiago.id) + end + end + end + + context "with filters" do + before do + register_page(Country, false) {} + register_page(Region, false) {} + register_page(City, false) {} + + register_form(Invoice, false) do |f| + f.input :city, as: :nested_select, + level_1: { attribute: :country }, + level_2: { + attribute: :region, + filters: { name_cont: 'Met' } + }, + level_3: { attribute: :city } + end + + create_cities + create_invoice(city: @colina) + visit edit_admin_invoice_path(@invoice) + end + + it "shows filled select controls based on defined city_id", js: true do + on_input_ctx("invoice_country") { expect_slimselect_selection("Chile") } + on_input_ctx("invoice_region") { expect_slimselect_selection("Metropolitana") } + on_input_ctx("invoice_city") { expect_slimselect_selection("Colina") } + end + + context "updating medium level" do + let(:slimselect_id) do + on_input_ctx("invoice_region") { slimselect_original_select_id } + end + + before do + on_input_ctx("invoice_region") do + open_slimselect_options + slimselect_search_input.set("a") + end + end + + it "shows no results based on entered text", js: true do + expect_slimselect_options_count_to_eq(1, slimselect_id) + end + end + end + + context "without filters" do + before do + register_page(Country, false) {} + register_page(Region, false) {} + register_page(City, false) {} + + register_form(Invoice, false) do |f| + f.input :city, as: :nested_select, + level_1: { attribute: :country }, + level_2: { attribute: :region }, + level_3: { attribute: :city } + end + + create_cities + create_invoice(city: @colina) + visit edit_admin_invoice_path(@invoice) + end + + it "shows filled select controls based on defined city_id", js: true do + on_input_ctx("invoice_country") { expect_slimselect_selection("Chile") } + on_input_ctx("invoice_region") { expect_slimselect_selection("Metropolitana") } + on_input_ctx("invoice_city") { expect_slimselect_selection("Colina") } + end + + context "updating medium level" do + let(:slimselect_id) do + on_input_ctx("invoice_region") { slimselect_original_select_id } + end + + before do + on_input_ctx("invoice_region") do + open_slimselect_options + slimselect_search_input.set("a") + end + end + + it "shows no results based on entered text", js: true do + expect_slimselect_options_count_to_eq(2, slimselect_id) + end + end + end + + context "with nested resources" do + before do + register_page(Region, false) {} + register_page(Country, false) {} + register_page(City, false) {} + + register_form(Department, false) do |f| + f.has_many :departments_cities, allow_destroy: true do |department_city| + department_city.input :city, as: :nested_select, required: true, + display_name: :name, + minimum_input_length: 0, + level_1: { attribute: :country }, + level_2: { attribute: :region }, + level_3: { attribute: :city } + end + end + create_cities + visit new_admin_department_path + end + + it "sets new values correctly", js: true do # rubocop:disable RSpec/ExampleLength + click_add_nested + prefix = "department_departments_cities_attributes_" + santiago = @santiago.name + on_nested_ctx(1) do + slimselect_country_id = nil + slimselect_region_id = nil + slimselect_city_id = nil + + on_input_ctx("#{prefix}0_country") do + slimselect_country_id = slimselect_original_select_id + open_slimselect_options + end + slimselect_search_input(slimselect_country_id).set("Ch") + click_slimselect_option(@chile.name, slimselect_country_id) + + on_input_ctx("#{prefix}0_region") do + slimselect_region_id = slimselect_original_select_id + open_slimselect_options + end + slimselect_search_input(slimselect_region_id).set("Met") + click_slimselect_option(@metropolitana.name, slimselect_region_id) + + on_input_ctx("#{prefix}0_city") do + slimselect_city_id = slimselect_original_select_id + open_slimselect_options + end + slimselect_search_input(slimselect_city_id).set("San") + click_slimselect_option(santiago, slimselect_city_id) + expect_nested_slimselect_result_text_to_eq(3, santiago) + end + + click_add_nested + on_nested_ctx(2) do + slimselect_country_id = nil + slimselect_region_id = nil + slimselect_city_id = nil + mendoza = @mendoza.name + + on_input_ctx("#{prefix}1_country") do + slimselect_country_id = slimselect_original_select_id + open_slimselect_options + end + click_slimselect_option(@argentina.name, slimselect_country_id) + + on_input_ctx("#{prefix}1_region") do + slimselect_region_id = slimselect_original_select_id + open_slimselect_options + end + click_slimselect_option(@cuyo.name, slimselect_region_id) + + on_input_ctx("#{prefix}1_city") do + slimselect_city_id = slimselect_original_select_id + open_slimselect_options + end + click_slimselect_option(mendoza, slimselect_city_id) + expect_nested_slimselect_result_text_to_eq(3, mendoza) + end + + on_nested_ctx(1) do + expect_nested_slimselect_result_text_to_eq(3, santiago) end end end end +# rubocop:enable Naming/VariableNumber diff --git a/spec/features/inputs/numeric_range_filter_input_spec.rb b/spec/features/inputs/numeric_range_filter_input_spec.rb index 175836f8..b6de07c7 100644 --- a/spec/features/inputs/numeric_range_filter_input_spec.rb +++ b/spec/features/inputs/numeric_range_filter_input_spec.rb @@ -25,8 +25,8 @@ expect(page).to have_css("#invoice_5", count: 1) expect(page).to have_css("#invoice_4", count: 1) expect(page).to have_css("#invoice_3", count: 1) - expect(page).to_not have_css("#invoice_2") - expect(page).to_not have_css("#invoice_1") + expect(page).not_to have_css("#invoice_2") + expect(page).not_to have_css("#invoice_1") end end @@ -38,8 +38,8 @@ end it "shows filtered rows", js: true do - expect(page).to_not have_css("#invoice_5", count: 1) - expect(page).to_not have_css("#invoice_4", count: 1) + expect(page).not_to have_css("#invoice_5", count: 1) + expect(page).not_to have_css("#invoice_4", count: 1) expect(page).to have_css("#invoice_3", count: 1) expect(page).to have_css("#invoice_2") expect(page).to have_css("#invoice_1") @@ -56,11 +56,11 @@ end it "shows filtered rows", js: true do - expect(page).to_not have_css("#invoice_5", count: 1) + expect(page).not_to have_css("#invoice_5", count: 1) expect(page).to have_css("#invoice_4", count: 1) expect(page).to have_css("#invoice_3", count: 1) expect(page).to have_css("#invoice_2") - expect(page).to_not have_css("#invoice_1") + expect(page).not_to have_css("#invoice_1") end end end diff --git a/spec/features/inputs/search_select_filter_input_spec.rb b/spec/features/inputs/search_select_filter_input_spec.rb index d77668ed..899cf651 100644 --- a/spec/features/inputs/search_select_filter_input_spec.rb +++ b/spec/features/inputs/search_select_filter_input_spec.rb @@ -10,7 +10,7 @@ context "with initial state" do before do register_page(City, false) do - filter :region_id, as: :search_select_filter + filter :region, as: :search_select_filter end visit admin_cities_path @@ -32,7 +32,7 @@ context "setting value", js: true do before do - pick_select2_entered_option("Metropolitana") + pick_slimselect_entered_option("Metropolitana") click_filter_btn end diff --git a/spec/features/inputs/search_select_input_spec.rb b/spec/features/inputs/search_select_input_spec.rb index 27a9bf29..b859d184 100644 --- a/spec/features/inputs/search_select_input_spec.rb +++ b/spec/features/inputs/search_select_input_spec.rb @@ -23,8 +23,8 @@ end it "shows other categories after search", js: true do - fill_select2_input("Cat") - expect_select2_results_count_to_eq(2) + fill_slimselect_input("Cat") + expect_slimselect_options_count_to_eq(2) end end @@ -38,13 +38,13 @@ end it "shows nothing looking for name (default)", js: true do - fill_select2_input("Cat") - expect_select2_results_count_to_eq(0) + fill_slimselect_input("Cat") + expect_slimselect_options_count_to_eq(0) end it "shows results looking for description", js: true do - fill_select2_input("Desc") - expect_select2_results_count_to_eq(2) + fill_slimselect_input("Desc") + expect_slimselect_options_count_to_eq(2) end end @@ -58,8 +58,8 @@ end it "shows other categories after search", js: true do - fill_select2_input("Cat") - expect_select2_results_count_to_eq(2) + fill_slimselect_input("Cat") + expect_slimselect_options_count_to_eq(2) end end @@ -73,7 +73,7 @@ end it "pass response root as input data" do - expect_select2_data_option("response-root", "my_categories") + expect_slimselect_data_option("response-root", "my_categories") end end @@ -87,8 +87,8 @@ end it "shows length message", js: true do - open_select2_options - expect_select2_result_text_to_eq(1, "Please enter 5 or more characters") + fill_slimselect_input("a") + expect_slimselect_error("Please enter 5 or more characters") end end @@ -102,7 +102,7 @@ end it "changes input width" do - expect_select2_data_option("width", "200px") + expect_slimselect_data_option("width", "200px") end end @@ -130,8 +130,8 @@ end it "shows custom label", js: true do - pick_select2_entered_option("Cat", @category1.description) - expect_select2_selection(@category1.description) + pick_slimselect_entered_option("Cat", @category1.description) + expect_slimselect_selection(@category1.description) end end @@ -145,8 +145,8 @@ end it "shows results ordered by name DESC", js: true do - fill_select2_input("Cat") - expect_select2_result_text_to_eq(1, @category2.name) + fill_slimselect_input("Cat") + expect_slimselect_result_text_to_eq(1, @category2.name) end end @@ -160,13 +160,13 @@ end it "does not show any result when searched with prefix", js: true do - fill_select2_input("Cat") - expect_select2_results_count_to_eq(0) + fill_slimselect_input("Cat") + expect_slimselect_options_count_to_eq(0) end it "shows results when searched with suffix", js: true do - fill_select2_input("2") - expect_select2_result_text_to_eq(1, @category2.name) + fill_slimselect_input("2") + expect_slimselect_result_text_to_eq(1, @category2.name) end end end diff --git a/spec/features/inputs/select2_spec.rb b/spec/features/inputs/select2_spec.rb deleted file mode 100644 index 9e94d109..00000000 --- a/spec/features/inputs/select2_spec.rb +++ /dev/null @@ -1,77 +0,0 @@ -require "rails_helper" - -describe "Select 2", type: :feature do - it { expect(ActiveadminAddons.default_select).to eq('select2') } - - context "when default config is select 2" do - before do - register_form(Invoice) do |f| - f.input :category - end - - create_categories - visit edit_admin_invoice_path(create_invoice(category: @category2)) - end - - it "shows select control as select 2", js: true do - expect_select2_options_count_to_eq(3) - expect(page).not_to have_selector("select.default-select") - expect(page).not_to have_selector("select.select2") - end - end - - context "when default config is select 2 and select control has default-select class" do - before do - register_form(Invoice) do |f| - f.input :category, input_html: { class: "default-select" } - end - - create_categories - visit edit_admin_invoice_path(create_invoice(category: @category2)) - end - - it "shows normal select control", js: true do - expect_select2_options_count_to_eq(0) - expect(page).to have_selector("select.default-select") - expect(page).not_to have_selector("select.select2") - end - end - - context "when default config is Active Admin's default" do - before do - ActiveadminAddons.default_select = 'default' - - register_form(Invoice) do |f| - f.input :category - end - - create_categories - visit edit_admin_invoice_path(create_invoice(category: @category2)) - end - - it "shows normal select control", js: true do - expect_select2_options_count_to_eq(0) - expect(page).not_to have_selector("select.default-select") - expect(page).not_to have_selector("select.select2") - end - end - - context "when default config is Active Admin's default and select control has select 2 class" do - before do - ActiveadminAddons.default_select = 'default' - - register_form(Invoice) do |f| - f.input :category, input_html: { class: "select2" } - end - - create_categories - visit edit_admin_invoice_path(create_invoice(category: @category2)) - end - - it "shows select control as select 2", js: true do - expect_select2_options_count_to_eq(3) - expect(page).not_to have_selector("select.default-select") - expect(page).to have_selector("select.select2") - end - end -end diff --git a/spec/features/inputs/select_filter_input_spec.rb b/spec/features/inputs/select_filter_input_spec.rb new file mode 100644 index 00000000..d226c8eb --- /dev/null +++ b/spec/features/inputs/select_filter_input_spec.rb @@ -0,0 +1,80 @@ +require "rails_helper" + +describe "Select Filter Input", type: :feature do + context 'when used with an enum column' do + let!(:active_invoice) { Invoice.create!(status: :active) } + let!(:archived_invoice) { Invoice.create!(status: :archived) } + let(:option_selector) { '.filter_form select[name="q[status_eq]"] option' } + + context "with collection option" do + before do + register_page(Invoice) do + filter :status, as: :select, collection: [ + ['Activo, si se considera', 0], + ['Archivado, ya no se considera', 1], + ['Estado que no existe', 42] + ] + end + + visit admin_invoices_path + end + + it "uses collection directly" do + expect(page.find("#{option_selector}[value='0']").text).to eq('Activo, si se considera') + expect(page.find("#{option_selector}[value='1']").text).to( + eq('Archivado, ya no se considera') + ) + expect(page.find("#{option_selector}[value='42']").text).to eq('Estado que no existe') + end + + it 'displays all records' do + expect(page).to have_css('.col-id', text: /#{active_invoice.id}/) + expect(page).to have_css('.col-id', text: /#{archived_invoice.id}/) + end + + context 'when selecting a value', js: true do + before do + pick_slimselect_entered_option('Activo, si se considera') + click_filter_btn + end + + it 'displays only elements with that value' do + expect(page).to have_css('.col-id', text: /#{active_invoice.id}/) + expect(page).not_to have_css('.col-id', text: /#{archived_invoice.id}/) + end + end + end + + context "without collection option" do + before do + register_page(Invoice) do + filter :status, as: :select + end + + visit admin_invoices_path + end + + it "renders options with enum db values and translated labels" do + expect(page.find("#{option_selector}[value='0']").text).to eq('Activo') + expect(page.find("#{option_selector}[value='1']").text).to eq('Archivado') + end + + it 'displays all records' do + expect(page).to have_css('.col-id', text: /#{active_invoice.id}/) + expect(page).to have_css('.col-id', text: /#{archived_invoice.id}/) + end + + context 'when selecting a value', js: true do + before do + pick_slimselect_entered_option('Archivado') + click_filter_btn + end + + it 'displays only elements with that value' do + expect(page).to have_css('.col-id', text: /#{archived_invoice.id}/) + expect(page).not_to have_css('.col-id', text: /#{active_invoice.id}/) + end + end + end + end +end diff --git a/spec/features/inputs/selected_list_input_spec.rb b/spec/features/inputs/selected_list_input_spec.rb index 3ce9d25f..282fe5bb 100644 --- a/spec/features/inputs/selected_list_input_spec.rb +++ b/spec/features/inputs/selected_list_input_spec.rb @@ -7,10 +7,11 @@ def expect_added_count(count) def expect_to_add_item(item, items_count = 1, attribute = :name) value = item.send(attribute) - pick_select2_entered_option(value) + pick_slimselect_entered_option(value) html_item = find(".selected-item#invoice_item_ids_#{item.id}") expect(html_item.text).to match(value) expect_added_count(items_count) + sleep 0.5 end def expect_to_remove_item(item, items_count = 0) @@ -89,7 +90,7 @@ def expect_to_remove_item(item, items_count = 0) end it "pass response root as input data" do - expect_select2_data_option("response-root", "my_categories") + expect_slimselect_data_option("response-root", "my_categories") end end @@ -103,7 +104,7 @@ def expect_to_remove_item(item, items_count = 0) end it "changes input width" do - expect_select2_data_option("width", "200px") + expect_slimselect_data_option("width", "200px") end end @@ -117,13 +118,13 @@ def expect_to_remove_item(item, items_count = 0) end it "shows nothing looking for name (default)", js: true do - fill_select2_input("Cat") - expect_select2_results_count_to_eq(0) + fill_slimselect_input("Cat") + expect_slimselect_options_count_to_eq(0) end it "shows results looking for description", js: true do - fill_select2_input("Desc") - expect_select2_results_count_to_eq(3) + fill_slimselect_input("Desc") + expect_slimselect_options_count_to_eq(3) end it "shows custom label", js: true do @@ -141,8 +142,8 @@ def expect_to_remove_item(item, items_count = 0) end it "shows length message", js: true do - open_select2_options - expect_select2_result_text_to_eq(1, "Please enter 5 or more characters") + fill_slimselect_input("A") + expect_slimselect_error("Please enter 5 or more characters") end end @@ -156,8 +157,8 @@ def expect_to_remove_item(item, items_count = 0) end it "shows results ordered by name DESC", js: true do - fill_select2_input("Item") - expect_select2_result_text_to_eq(1, @item3.name) + fill_slimselect_input("Item") + expect_slimselect_result_text_to_eq(1, @item3.name) end end @@ -171,13 +172,13 @@ def expect_to_remove_item(item, items_count = 0) end it "does not show any result when searched with prefix", js: true do - fill_select2_input("Item") - expect_select2_results_count_to_eq(0) + fill_slimselect_input("Item") + expect_slimselect_options_count_to_eq(0) end it "shows results when searched with suffix", js: true do - fill_select2_input("2") - expect_select2_result_text_to_eq(1, @item2.name) + fill_slimselect_input("2") + expect_slimselect_result_text_to_eq(1, @item2.name) end end end diff --git a/spec/features/inputs/slimselect_spec.rb b/spec/features/inputs/slimselect_spec.rb new file mode 100644 index 00000000..d4c1afbe --- /dev/null +++ b/spec/features/inputs/slimselect_spec.rb @@ -0,0 +1,176 @@ +require "rails_helper" + +describe "Slim Select", type: :feature do + after(:all) do + ActiveadminAddons.default_select = 'slim-select' + end + + it { expect(ActiveadminAddons.default_select).to eq('slim-select') } + + context "when default config is slim select" do + before do + ActiveadminAddons.default_select = 'slim-select' + + register_form(Invoice) do |f| + f.input :category + end + + create_categories + visit edit_admin_invoice_path(create_invoice(category: @category2)) + end + + it "shows select control as slim-select", js: true do + expect_slimselect_options_count_to_eq(3) + expect(page).not_to have_selector("select.default-select") + end + + context "with tags: true option" do + let(:invoice) { create_invoice } + let(:selection) { '#444' } + + context "with AA form" do + before do + register_form(Invoice) do |f| + f.input :number, as: :select, collection: ["#111", "#222", "#333"], tags: true + end + end + + context 'when entering option not in collection' do + before { visit edit_admin_invoice_path(invoice) } + + it "adds new option", js: true do + expect_slimselect_options_count_to_eq(4) + add_slimselect_option(selection) + expect_slimselect_options_count_to_eq(5) + end + end + + context 'when initial value is not in inputs collection' do + before do + invoice.update!(number: selection) + visit edit_admin_invoice_path(invoice) + end + + it "includes initial value as option", js: true do + expect_slimselect_options_count_to_eq(5) + end + end + end + + context "with custom form" do + before do + register_page(Invoice) do + config.filters = false + sidebar 'Filters' do + active_admin_form_for(:q) do |f| + f.input :number, as: :select, collection: ["#111", "#222", "#333"], tags: true + end + end + end + end + + context 'when entering option not in collection' do + before { visit admin_invoices_path } + + it "adds new option", js: true do + expect_slimselect_options_count_to_eq(4) + add_slimselect_option(selection) + expect_slimselect_options_count_to_eq(5) + end + end + end + end + + context "with tags: false option" do + let(:selection) { '#444' } + + before do + register_form(Invoice) do |f| + f.input :number, as: :select, collection: ["#111", "#222", "#333"], tags: false + end + end + + context 'when entering option not in collection' do + let(:selection) { '#444' } + + before { visit edit_admin_invoice_path(create_invoice) } + + it "doesn't add new option", js: true do + expect_slimselect_options_count_to_eq(4) + expect { add_slimselect_option(selection) }.to raise_error(Capybara::ElementNotFound) + expect_slimselect_options_count_to_eq(0) + end + end + end + end + + context "when default config is slim select and select control has default-select class" do + before do + register_form(Invoice) do |f| + f.input :category, input_html: { class: "default-select" } + end + + create_categories + visit edit_admin_invoice_path(create_invoice(category: @category2)) + end + + it "shows normal select control", js: true do + expect { expect_slimselect_options_count_to_eq(0) }.to raise_error(Capybara::ElementNotFound) + end + end + + context "when default config is Active Admin's default" do + before do + ActiveadminAddons.default_select = 'default' + + register_form(Invoice) do |f| + f.input :category + end + + create_categories + visit edit_admin_invoice_path(create_invoice(category: @category2)) + end + + it "shows normal select control", js: true do + expect { expect_slimselect_options_count_to_eq(0) }.to raise_error(Capybara::ElementNotFound) + expect(page).not_to have_selector("select.default-select") + expect(page).not_to have_selector("select[data-id]") + end + end + + context "when default config is Active Admin's default and select control has slim-select class" do + before do + ActiveadminAddons.default_select = 'default' + + register_form(Invoice) do |f| + f.input :category, input_html: { class: "slim-select" } + end + + create_categories + visit edit_admin_invoice_path(create_invoice(category: @category2)) + end + + it "shows select control as slim select", js: true do + expect_slimselect_options_count_to_eq(3) + expect(page).not_to have_selector("select.default-select") + expect(page).to have_selector("select[data-id]", visible: false) + end + end + + context "when building ActiveAdmin html" do + describe "the element" do + it "is present in the document only once" do + visit admin_invoices_path + + expect(page.all('body').size).to eq 1 + end + + it "contains the data-default-select attribute" do + visit admin_invoices_path + + body = find("body") + expect(body['data-default-select']).to eq ActiveadminAddons.default_select + end + end + end +end diff --git a/spec/features/inputs/tags_input_spec.rb b/spec/features/inputs/tags_input_spec.rb index 2d6cbbf8..2c23ea18 100644 --- a/spec/features/inputs/tags_input_spec.rb +++ b/spec/features/inputs/tags_input_spec.rb @@ -11,10 +11,12 @@ end it "adds new tags", js: true do - pick_select2_entered_option("value 1") - expect_select2_choices_count_to_eq(1) - pick_select2_entered_option("value 2") - expect_select2_choices_count_to_eq(2) + add_slimselect_option("value 1") + open_slimselect_options + expect_slimselect_options_count_to_eq(1) + add_slimselect_option("value 2") + open_slimselect_options + expect_slimselect_options_count_to_eq(2) end end @@ -28,11 +30,11 @@ end it "adds new tags", js: true do - expect_select2_options_count_to_eq(3) + expect_slimselect_options_count_to_eq(3) end end - context "working with active record relations" do + context "when working with active record relations" do before do register_form(Invoice) do |f| f.input :item_ids, as: :tags, collection: Item.all @@ -43,30 +45,32 @@ end it "shows preloaded items", js: true do - expect_select2_options_count_to_eq(3) + expect_slimselect_options_count_to_eq(3) end context "with added item" do - before { pick_select2_entered_option(@item1.name) } - - it "adds/removes hidden item", js: true do - item_id = "#invoice_item_ids_#{@item1.id}" - input = find(item_id, visible: false) - expect(input.value).to eq(@item1.id.to_s) - expect(input[:name]).to eq("invoice[item_ids][]") - find(".select2-selection__choice__remove").click - expect { find(item_id, visible: false) }.to raise_error(Capybara::ElementNotFound) + before { pick_slimselect_entered_option(@item1.name) } + + it "includes and then removes item from select value", js: true do + select_selector = "select[name='invoice[item_ids][]']" + expect(find(select_selector, visible: false).value).to include(@item1.id.to_s) + find(".ss-value-delete").click + sleep 0.5 + expect(find(select_selector, visible: false).value).not_to include(@item1.id.to_s) end it "does not allow new items", js: true do - expect_select2_choices_count_to_eq(1) - fill_select2_input_and_press_return("Not preloaded item") - expect_select2_choices_count_to_eq(1) + expect_slimselect_options_count_to_eq(3) + expect do + add_slimselect_option("Not preloaded item") + end.to raise_error(Capybara::ElementNotFound) + slimselect_element.send_keys(:escape) + expect_slimselect_options_count_to_eq(3) end end end - context "working with active record relations but alisa" do + context "when working with active record relations but alias" do before do register_form(Invoice) do |f| f.input :other_item_ids, as: :tags, collection: Item.all @@ -77,19 +81,18 @@ end it "shows preloaded items", js: true do - expect_select2_options_count_to_eq(3) + expect_slimselect_options_count_to_eq(3) end context "with added item" do - before { pick_select2_entered_option(@item1.name) } - - it "adds/removes hidden item", js: true do - item_id = "#invoice_other_item_ids_#{@item1.id}" - input = find(item_id, visible: false) - expect(input.value).to eq(@item1.id.to_s) - expect(input[:name]).to eq("invoice[other_item_ids][]") - find(".select2-selection__choice__remove").click - expect { find(item_id, visible: false) }.to raise_error(Capybara::ElementNotFound) + before { pick_slimselect_entered_option(@item1.name) } + + it "includes and then removes item from select value", js: true do + select_selector = "select[name='invoice[other_item_ids][]']" + expect(find(select_selector, visible: false).value).to include(@item1.id.to_s) + find(".ss-value-delete").click + sleep 0.5 + expect(find(select_selector, visible: false).value).not_to include(@item1.id.to_s) end end end diff --git a/spec/features/markdown_builder_spec.rb b/spec/features/markdown_builder_spec.rb new file mode 100644 index 00000000..16827efe --- /dev/null +++ b/spec/features/markdown_builder_spec.rb @@ -0,0 +1,73 @@ +require 'rails_helper' + +describe "Markdown Builder", type: :feature do + context "shows text as markdown" do + before do + register_index(Invoice) do + markdown_column :description + end + end + + context "with markdown text" do + before do + create_invoice(description: "# Header **bold** *italic*") + visit admin_invoices_path + end + + it "shows parsed markdown" do + expect(page.html).to include("

Header bold italic

") + end + end + end + + context "shows text as markdown with custom options" do + before do + register_index(Invoice) do + markdown_column :description, extensions: { highlight: true } + end + end + + context "with markdown text" do + before do + create_invoice(description: "This is ==highlighted==") + visit admin_invoices_path + end + + it "shows parsed markdown" do + expect(page.html).to include("This is highlighted") + end + end + end + + context "passing a block" do + before do + register_show(Invoice) do + markdown_row(:description) do + "# Header **bold** *italic*" + end + end + + visit admin_invoice_path(create_invoice) + end + + it "shows parsed markdown" do + expect(page.html).to include("

Header bold italic

") + end + end + + context "passing a block with custom options" do + before do + register_show(Invoice) do + markdown_row(:description, extensions: { highlight: true }) do + "This is ==highlighted==" + end + end + + visit admin_invoice_path(create_invoice) + end + + it "shows parsed markdown" do + expect(page.html).to include("This is highlighted") + end + end +end diff --git a/spec/features/tag_builder_spec.rb b/spec/features/tag_builder_spec.rb index 2fd2b21a..a9a0377e 100644 --- a/spec/features/tag_builder_spec.rb +++ b/spec/features/tag_builder_spec.rb @@ -1,77 +1,24 @@ require 'rails_helper' describe "Tag Builder", type: :feature do - context "using Enumerize" do - context "changing state value" do - before do - register_index(Invoice) do - tag_column :state - end - - create_invoice(state: :approved) - visit admin_invoices_path - end - - it "shows set label" do - expect(page).to have_content('Approved') - end - - it "shows valid css class" do - expect(page).to have_css('.approved') - end - end - - context "passing a block" do - before do - register_show(Invoice) do - tag_row(:state) do - invoice.state - end - end - - visit admin_invoice_path(create_invoice) - end - - it "localizes the value returned from the block" do - expect(page).to have_content('Pending') - end - - it "shows valid css class" do - expect(page).to have_css('.pending') - end - end - - context "using a label" do - before do - register_show(Invoice) do - tag_row("custom state", :state) - end - - visit admin_invoice_path(create_invoice) - end - - it "shows custom label" do - expect(page).to have_content 'Custom State' - end - end - - context 'with interactive option' do - let!(:invoice) { create_invoice(state: :approved) } + context "using Rails Enum" do + shared_examples 'interactive select rendering' do + let!(:invoice) { create_invoice(status: :active) } before do register_index(Invoice) do - tag_column :state, interactive: true + tag_column :status, interactive: true end visit admin_invoices_path end it "shows set label" do - expect(page).to have_content('Approved') + expect(page).to have_content('Active') end it "shows valid css class" do - expect(page).to have_css('.approved') + expect(page).to have_css('.active') end it 'shows interactive tag select container' do @@ -79,11 +26,11 @@ end it 'shows tag with required data' do - expect(page).to have_css(".invoice-state-#{invoice.id}-tag") + expect(page).to have_css(".invoice-status-#{invoice.id}-tag") expect(page).to have_css('.interactive-tag[data-model="invoice"]') expect(page).to have_css(".interactive-tag[data-object_id=\"#{invoice.id}\"]") - expect(page).to have_css('.interactive-tag[data-field="state"]') - expect(page).to have_css('.interactive-tag[data-value="approved"]') + expect(page).to have_css('.interactive-tag[data-field="status"]') + expect(page).to have_css('.interactive-tag[data-value="active"]') end it 'select is hidden' do @@ -92,73 +39,92 @@ end it 'shows select with required data' do - expect(page).to have_css(".invoice-state-#{invoice.id}-select") + expect(page).to have_css(".invoice-status-#{invoice.id}-select") expect(page).to have_css('.interactive-tag-select[data-model="invoice"]') expect(page).to have_css(".interactive-tag-select[data-object_id=\"#{invoice.id}\"]") - expect(page).to have_css('.interactive-tag-select[data-field="state"]') - expect(page).to have_css('.interactive-tag-select[data-value="approved"]') + expect(page).to have_css('.interactive-tag-select[data-field="status"]') + expect(page).to have_css('.interactive-tag-select[data-value="active"]') end end - end - context "using Rails Enum" do - context "changing state value" do - before do - register_index(Invoice) do - tag_column :status + context 'with no translations' do + around do |example| + I18n.with_locale('de') do + example.run end - - create_invoice(status: :archived) - visit admin_invoices_path - end - - it "shows set value" do - expect(page).to have_css('.archived') end - end - context 'with interactive option' do - let!(:invoice) { create_invoice(status: :active) } + context "without interactive option" do + before do + register_index(Invoice) do + tag_column :status + end - before do - register_index(Invoice) do - tag_column :status, interactive: true + create_invoice(status: :archived) + visit admin_invoices_path end - visit admin_invoices_path + it "shows untranslated text as value" do + expect(page.find('td.col-status').text).to eq('Archived') + end end - it "shows set label" do - expect(page).to have_content('Active') - end + context 'with interactive option' do + include_examples 'interactive select rendering' - it "shows valid css class" do - expect(page).to have_css('.active') + it 'renders an option for each enum value, with translated text' do + option_selector = '.interactive-tag-select option' + expect(page.find("#{option_selector}[value='active']").text).to eq('active') + expect(page.find("#{option_selector}[value='archived']").text).to eq('archived') + end end + end - it 'shows interactive tag select container' do - expect(page).to have_css('.tag-select-container') + context 'with translations' do + around do |example| + I18n.with_locale('en') do + example.run + end end - it 'shows tag with required data' do - expect(page).to have_css(".invoice-status-#{invoice.id}-tag") - expect(page).to have_css('.interactive-tag[data-model="invoice"]') - expect(page).to have_css(".interactive-tag[data-object_id=\"#{invoice.id}\"]") - expect(page).to have_css('.interactive-tag[data-field="status"]') - expect(page).to have_css('.interactive-tag[data-value="active"]') - end + context "without interactive option" do + before do + register_index(Invoice) do + tag_column :status + end + end - it 'select is hidden' do - expect(page).to have_css('.interactive-tag-select') - expect(page).to have_css('.select-container-hidden') + context 'with value' do + before do + create_invoice(status: :archived) + visit admin_invoices_path + end + + it "shows translated text as value" do + expect(page.find('td.col-status').text).to eq('Archivado') + end + end + + context 'without value' do + before do + create_invoice(status: nil) + visit admin_invoices_path + end + + it "shows text for nil value" do + expect(page.find('td.col-status').text).to eq('No') + end + end end - it 'shows select with required data' do - expect(page).to have_css(".invoice-status-#{invoice.id}-select") - expect(page).to have_css('.interactive-tag-select[data-model="invoice"]') - expect(page).to have_css(".interactive-tag-select[data-object_id=\"#{invoice.id}\"]") - expect(page).to have_css('.interactive-tag-select[data-field="status"]') - expect(page).to have_css('.interactive-tag-select[data-value="active"]') + context 'with interactive option' do + include_examples 'interactive select rendering' + + it 'renders an option for each enum value, with translated text' do + option_selector = '.interactive-tag-select option' + expect(page.find("#{option_selector}[value='active']").text).to eq('Activo') + expect(page.find("#{option_selector}[value='archived']").text).to eq('Archivado') + end end end end diff --git a/spec/features/toggle_bool_builder_spec.rb b/spec/features/toggle_bool_builder_spec.rb index 1ed430d0..4a98de80 100644 --- a/spec/features/toggle_bool_builder_spec.rb +++ b/spec/features/toggle_bool_builder_spec.rb @@ -1,10 +1,41 @@ require 'rails_helper' describe "Toggle Bool Builder", type: :feature do + context "when using inside another resource" do + before do + register_page(Invoice) do + index do + toggle_bool_column :active + end + end + + register_show(Category, false) do + attributes_table do + row :id + end + + table_for resource.invoices do + toggle_bool_column :active + end + end + end + + it "generates the correct url" do + @category = Category.create(name: "International") + @invoice = create_invoice(active: true, category: @category) + visit admin_category_path(@category) + + switch = find("span.toggle-bool-switch") + expect(switch["data-url"]).to eq("/admin/invoices/#{@invoice.id}") + end + end + context "shows corresponding switch" do before do - register_index(Invoice) do - toggle_bool_column :active + register_page(Invoice) do + index do + toggle_bool_column :active + end end end @@ -14,14 +45,14 @@ visit admin_invoices_path end - it "off switch is hidden" do - off_switch = find("#toggle-invoice-#{@invoice.id}-active-false") - expect(off_switch[:class]).to include("hidden-switch") + it "generates the correct resource url" do + switch = find("#toggle-invoice-#{@invoice.id}-active") + expect(switch["data-url"]).to eq("/admin/invoices/#{@invoice.id}") end - it "on switch is visible" do - on_switch = find("#toggle-invoice-#{@invoice.id}-active-true") - expect(on_switch[:class]).not_to include("hidden-switch") + it "switch is on" do + switch = find("#toggle-invoice-#{@invoice.id}-active") + expect(switch[:class]).to include("on") end end @@ -31,14 +62,9 @@ visit admin_invoices_path end - it "off switch is visible" do - off_switch = find("#toggle-invoice-#{@invoice.id}-active-false") - expect(off_switch[:class]).not_to include("hidden-switch") - end - - it "on switch is hidden" do - on_switch = find("#toggle-invoice-#{@invoice.id}-active-true") - expect(on_switch[:class]).to include("hidden-switch") + it "switch is off" do + switch = find("#toggle-invoice-#{@invoice.id}-active") + expect(switch[:class]).not_to include("on") end end end diff --git a/spec/lib/support/enum_utils_spec.rb b/spec/lib/support/enum_utils_spec.rb new file mode 100644 index 00000000..b23d2aa4 --- /dev/null +++ b/spec/lib/support/enum_utils_spec.rb @@ -0,0 +1,94 @@ +require "rails_helper" + +describe ActiveAdminAddons::EnumUtils do + let(:model_name) { 'SomeModel' } + let(:model_class) { model_name.constantize } + let(:enum_translations) { { value1: 'value 1 translation', value2: 'value 2 translation' } } + let(:generic_model) do + Class.new(ActiveRecord::Base) do # rubocop:disable Rails/ApplicationRecord + enum some_enum: { value1: 0, value2: 1 } + end + end + + def translation_key(enum_option_to_translate) + "activerecord.attributes.some_model.some_enums.#{enum_option_to_translate}" + end + + before do + stub_const(model_name, generic_model) + enum_translations.each do |enum_option_name, enum_translation| + allow(I18n).to receive(:t).with( + translation_key(enum_option_name), default: enum_option_name.to_s + ).and_return(enum_translation) + end + end + + describe '#options_for_select' do + context 'using enum option name as value' do + let(:expected_options) do + enum_translations.map do |enum_option_name, enum_translation| + [enum_translation, enum_option_name.to_s] + end + end + + it 'returns correct array of translations and enum option names' do + options = described_class.options_for_select(model_class, 'some_enum') + expect(options).to match_array(expected_options) + end + end + + context 'using db value' do + let(:expected_options) do + enum_translations.map do |enum_option_name, enum_translation| + [enum_translation, generic_model.some_enums[enum_option_name]] + end + end + + it 'returns correct array of translations and enum db values' do + options = described_class.options_for_select(model_class, 'some_enum', use_db_value: true) + expect(options).to match_array(expected_options) + end + end + end + + describe '#translate_enum_option' do + context 'with enum option name present in enum' do + let(:enum_option_to_translate) { 'value1' } + + it 'returns correct translation' do + translation = described_class.translate_enum_option( + model_class, 'some_enum', enum_option_to_translate + ) + expect(translation).to eq(enum_translations[enum_option_to_translate.to_sym]) + end + end + + context 'with enum option name not present in enum' do + let(:enum_option_to_translate) { 'unknown_value' } + + before do + allow(I18n).to receive(:t).with( + translation_key(enum_option_to_translate), default: enum_option_to_translate.to_s + ).and_return(enum_option_to_translate) + end + + it 'returns untranslated enum option name' do + translation = described_class.translate_enum_option( + model_class, 'some_enum', enum_option_to_translate + ) + expect(translation).to eq(enum_option_to_translate) + end + end + + context 'with blank enum option name' do + let(:enum_option_to_translate) { nil } + + it 'returns nil' do + translation = described_class.translate_enum_option( + model_class, 'some_enum', enum_option_to_translate + ) + expect(translation).to eq(nil) + end + end + end +end diff --git a/spec/lib/support/input_methods_spec.rb b/spec/lib/support/input_methods_spec.rb index eae4e5d0..3b39f483 100644 --- a/spec/lib/support/input_methods_spec.rb +++ b/spec/lib/support/input_methods_spec.rb @@ -5,11 +5,12 @@ Class.new do include ActiveAdminAddons::InputMethods - attr_reader :method + attr_reader :method, :options - def initialize(object, method) + def initialize(object, method, options = {}) @object = object @method = method + @options = options end end end @@ -21,7 +22,8 @@ def initialize(object, method) end let(:method) { :category_id } - let(:instance) { dummy_class.new(object, method) } + let(:options) { {} } + let(:instance) { dummy_class.new(object, method, options) } def self.check_invalid_method(method_name) context "with nil method" do @@ -47,18 +49,14 @@ def self.check_invalid_object(method_name) describe "#model_name" do it { expect(instance.model_name).to eq("invoice") } + check_invalid_object(:model_name) end describe "#method_model" do it { expect(instance.method_model).to be(Category) } - check_invalid_method(:method_model) - - context "when association has defined class_name option" do - let(:method) { :buyer_id } - it { expect(instance.method_model).to be(AdminUser) } - end + check_invalid_method(:method_model) context "when class_name isn't defined and object is a namespaced class" do let(:object) { Store::Car.create name: "Fiesta", year: 2017 } @@ -68,10 +66,19 @@ def self.check_invalid_object(method_name) expect(instance.method_model).to be(Store::Manufacturer) end end + + context "when a :method_model option is provided" do + let(:options) { { method_model: Store::Car } } + + it "returns provided class" do + expect(instance.method_model).to be(Store::Car) + end + end end describe "#tableize_method" do it { expect(instance.tableize_method).to eq("categories") } + check_invalid_method(:tableize_method) end @@ -97,15 +104,29 @@ def self.check_invalid_object(method_name) context "when method is a related collection" do let(:method) { :item_ids } - it { expect(instance.input_value).to contain_exactly(*@invoice.items.ids) } + it { expect(instance.input_value).to match_array(@invoice.items.ids) } end check_invalid_method(:input_value) check_invalid_object(:input_value) end + describe "#input_association_value" do + it { expect(instance.input_association_value).to eq(@invoice.category) } + + context "when method is a related collection" do + let(:method) { :item_ids } + + it { expect { instance.input_association_value }.to raise_error(NoMethodError) } + end + + check_invalid_method(:input_association_value) + check_invalid_object(:input_association_value) + end + describe "#translated_method" do it { expect(instance.translated_method).to eq("Category") } + check_invalid_method(:translated_method) check_invalid_object(:translated_method) end diff --git a/spec/lib/support/select_helpers_spec.rb b/spec/lib/support/select_helpers_spec.rb index 742b7838..e972df10 100644 --- a/spec/lib/support/select_helpers_spec.rb +++ b/spec/lib/support/select_helpers_spec.rb @@ -18,7 +18,7 @@ def initialize(object, method, options) let(:object) do create_categories create_items - create_invoice(items: Item.all, category: @category1) + create_invoice(items: Item.all, number: 1, category: @category1) end let(:options) do @@ -42,13 +42,14 @@ def self.check_invalid_options(method_name) end describe "#initial_collection_to_select_options" do - it { expect(instance.initial_collection_to_select_options).to eq([[nil], ["Item #1", 1]]) } + it { expect(instance.initial_collection_to_select_options).to eq([["Item #1", 1]]) } + check_invalid_options(:initial_collection_to_select_options) context "with no selected item" do before { object.item_ids = nil } - it { expect(instance.initial_collection_to_select_options).to eq([[nil]]) } + it { expect(instance.initial_collection_to_select_options).to eq([]) } end end @@ -263,5 +264,17 @@ def self.check_invalid_options(method_name) describe "#selected_item" do it { expect(instance.selected_item).to eq(Item.first) } + + context "with belongs to association method" do + let(:method) { :category_id } + + it { expect(instance.selected_item).to eq(Category.first) } + end + + context "with no association method" do + let(:method) { :number } + + it { expect(instance.selected_item).to eq("1") } + end end end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 66b12b08..3013bcc7 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -1,56 +1,56 @@ ENV["RAILS_ENV"] ||= 'test' require 'spec_helper' -require File.expand_path("../dummy/config/environment", __FILE__) +require File.expand_path('dummy/config/environment', __dir__) require 'rspec/rails' require 'factory_bot_rails' require 'capybara/rspec' require 'capybara/rails' require 'selenium-webdriver' require 'shoulda-matchers' -require 'enumerize' -require 'paperclip' require 'database_cleaner' -require 'pry' +require 'rspec/retry' ENGINE_RAILS_ROOT = File.join(File.dirname(__FILE__), '../') Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each { |f| require f } -Paperclip.options[:log] = false - RSpec.configure do |config| config.use_instantiated_fixtures = false config.filter_run focus: true config.filter_run_excluding skip: true config.run_all_when_everything_filtered = true config.use_transactional_fixtures = false + config.verbose_retry = true + config.display_try_failure_messages = true config.before(:suite) do DatabaseCleaner.clean_with(:truncation) end - config.before(:each) do |example| + config.before do |example| DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction DatabaseCleaner.start end - config.after(:each) do + config.after do DatabaseCleaner.clean end + config.around :each, :js do |ex| + ex.run_with_retry retry: 3 + end + Capybara.register_driver :chrome do |app| Capybara::Selenium::Driver.new(app, browser: :chrome) end Capybara.register_driver :headless_chrome do |app| - capabilities = Selenium::WebDriver::Remote::Capabilities.chrome( - chromeOptions: { args: %w(headless) } - ) - Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: capabilities) + args = ['no-sandbox', 'headless', 'disable-gpu', 'remote-debugging-port=9222'] + options = Selenium::WebDriver::Chrome::Options.new(args: args) + Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) end - # change to :chrome if you want to see the browser running. - Capybara.javascript_driver = :headless_chrome + Capybara.javascript_driver = ENV.fetch('JS_DRIVER', :headless_chrome).to_sym config.include ActiveAdminHelpers config.include DataLoaders diff --git a/spec/support/active_admin_helpers.rb b/spec/support/active_admin_helpers.rb index a43b0200..4a1884df 100644 --- a/spec/support/active_admin_helpers.rb +++ b/spec/support/active_admin_helpers.rb @@ -52,8 +52,9 @@ def register_form(klass, reset_app = true, &block) def reload_routes!(_show_routes = false) Rails.application.reload_routes! return unless _show_routes + Rails.application.routes.routes.each do |route| - puts route.path.spec.to_s + puts route.path.spec end end @@ -73,6 +74,7 @@ def load_resources(reset_app = true) # it allover the place ActiveAdmin.application.authentication_method = false ActiveAdmin.application.current_user_method = false + ActiveAdmin.application.use_webpacker = true end yield diff --git a/spec/support/capybara_helpers.rb b/spec/support/capybara_helpers.rb index f3129b3f..7503e2f4 100644 --- a/spec/support/capybara_helpers.rb +++ b/spec/support/capybara_helpers.rb @@ -6,9 +6,7 @@ def on_input_ctx(input_id, &block) end def click_filter_btn - within("#filters_sidebar_section") do - click_button("Filter") - end + page.execute_script("document.getElementsByClassName('filter_form')[0].submit()") end def expect_text(text) @@ -23,76 +21,105 @@ def expect_css(css) expect(page).to have_css(css) end - # Select 2 helpers + def click_add_nested + find("a.has_many_add").click + end + + def on_nested_ctx(resource_number, &block) + within("li.has_many_container fieldset:nth-child(#{resource_number + 1}) ") do + block.call + end + end + + def expect_slimselect_options_count_to_eq(count, id = nil) + id ||= slimselect_original_select_id + expect(page).to have_css(".ss-content[data-id=#{id}] .ss-option", count: count, visible: :all) + end + + def slimselect_original_select_id + find("select[data-id]", visible: false)['data-id'] + end + + def slimselect_element + find(".ss-main") + end + + def slimselect_popover(id = nil) + page.document.find(".ss-content[data-id=#{id || slimselect_original_select_id}]") + end - def select2_options_container - find(".select2-container") + def open_slimselect_options + slimselect_element.click + sleep 0.5 end - def select2_input - find(".select2-search__field") + def slimselect_search_input(id = nil) + slimselect_popover(id).find(".ss-search input") end - def open_select2_options - select2_options_container.click + def fill_slimselect_input(item_text) + open_slimselect_options + slimselect_search_input.set(item_text) end - def fill_select2_input(item_text) - open_select2_options - select2_input.set(item_text) + def slimselect_addable_button + slimselect_popover.find(".ss-addable") end - def fill_select2_input_and_press_return(item_text) - fill_select2_input(item_text) - select2_input.native.send_keys(:return) + def add_slimselect_option(item_text) + fill_slimselect_input(item_text) + slimselect_addable_button.click end - def pick_select2_entered_option(item_text, display_name = nil) - display_name = item_text unless display_name - fill_select2_input(item_text) - click_select2_option(display_name) + def click_slimselect_option(option_text, id = nil) + slimselect_popover(id).find(".ss-option", text: option_text).click end - def click_select2_option(display_name) - page.find(:xpath, "//li[text()='#{display_name}']").click + def pick_slimselect_entered_option(item_text, display_name = nil) + display_name ||= item_text + fill_slimselect_input(item_text) + click_slimselect_option(display_name) end - def expect_select2_data_option(option, value) + def expect_slimselect_data_option(option, value) expect(page).to have_xpath("//select[@data-#{option}='#{value}']") end - def expect_select2_selection(text) - expect(page).to have_css(".select2-selection__rendered", text: /#{text}/) + def expect_slimselect_selection(text) + expect(page).to have_css(".ss-main", text: /#{text}/) end - def expect_select2_empty_selection - expect(page).not_to have_css(".select2-selection__rendered") + def expect_slimselect_empty_selection + expect(page).to have_css(".ss-main", text: /Select Value/) end - def expect_select2_choices_count_to_eq(count) - expect(page).to have_css("li.select2-selection__choice", count: count) + def expect_slimselect_result_text_to_eq(result_number, text) + expect(page).to have_css( + "div.ss-option:nth-child(#{result_number})", text: /#{text}/ + ) end - def expect_select2_options_count_to_eq(count) - expect(page).to have_css("select.select2-hidden-accessible option", count: count) + def expect_slimselect_no_result + expect(page).to have_css( + "div.ss-search", text: 'No Result' + ) + end + + def expect_slimselect_error(text) + expect(page).to have_css(".ss-error", text: text) end - def expect_select2_result_text_to_eq(result_number, text) + def expect_nested_slimselect_result_text_to_eq(result_number, text) expect(page).to have_css( - "li.select2-results__option:nth-child(#{result_number})", text: /#{text}/ + "li.nested_level:nth-child(#{result_number})", text: /#{text}/ ) end - def expect_select2_results_count_to_eq(count) - klass = "li.select2-results__option" - no_results = "No results found" + def close_slimselect_options(id = nil) + slimselect_search_input(id || slimselect_original_select_id).native.send_keys(:escape) + end - if count.zero? - expect(page).to have_css(klass, count: 1) - expect(page).to have_content(no_results) - else - expect(page).to have_css(klass, count: count) - expect(page).not_to have_content(no_results) - end + def expect_slimselect_popover_is_closed(id = nil) + expect(page.document).not_to have_css(".ss-content[data-id=#{id || slimselect_original_select_id}]") end end diff --git a/spec/support/data_loaders.rb b/spec/support/data_loaders.rb index d783f6a1..cfe07400 100644 --- a/spec/support/data_loaders.rb +++ b/spec/support/data_loaders.rb @@ -33,8 +33,4 @@ def create_cities def create_invoice(data = {}) @invoice = Invoice.first_or_create!(data) end - - def create_admin - @admin = AdminUser.create!(email: "admin@platan.us", password: "12345678") - end end diff --git a/tmp/.gitkeep b/tmp/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..26375d77 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1225 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + 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" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-includes@^3.1.4: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + 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" + +array.prototype.flat@^1.2.5: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.20.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.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-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-module-utils@^2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-platanus@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-platanus/-/eslint-plugin-platanus-0.1.0.tgz#0e065bd712d882f1fee3a7bc63f9d3d22ba07c68" + integrity sha512-LiwcLI77WpQjU1k5qyJPvAYh4Ka63V98V2vL58S1eGYyaQgwhMWid/PNM2YIrX8fKYlo7RBbA6GYAu2jbh0MVA== + dependencies: + requireindex "^1.2.0" + vue-eslint-parser "^9.0.1" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.27.0: + version "8.27.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.27.0.tgz#d547e2f7239994ad1faa4bb5d84e5d809db7cf64" + integrity sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.3.1, espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + 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" + +globals@^13.15.0: + version "13.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" + integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== + dependencies: + type-fest "^0.20.2" + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jquery-datetimepicker@^2.5.21: + version "2.5.21" + resolved "https://registry.yarnpkg.com/jquery-datetimepicker/-/jquery-datetimepicker-2.5.21.tgz#00c388a78df2732fedfdb5c6529b6e84d53e0235" + integrity sha512-wDTpZ4f1PWd1XGaIIE0n6jLynlm+akBJ7/NjaB1bk2UJSS593CHJPZ3+FNEXoyvNVUeBlBC0oX6WTfCyfUhX/w== + dependencies: + jquery ">= 1.7.2" + jquery-mousewheel ">= 3.1.13" + php-date-formatter "^1.3.4" + +"jquery-mousewheel@>= 3.1.13": + version "3.1.13" + resolved "https://registry.yarnpkg.com/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz#06f0335f16e353a695e7206bf50503cb523a6ee5" + integrity sha1-BvAzXxbjU6aV5yBr9QUDy1I6buU= + +"jquery@>= 1.7.2": + version "3.6.0" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" + integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== + +js-sdsl@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.5.tgz#1ff1645e6b4d1b028cd3f862db88c9d887f26e2a" + integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + 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" + +object.values@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +php-date-formatter@^1.3.4: + version "1.3.6" + resolved "https://registry.yarnpkg.com/php-date-formatter/-/php-date-formatter-1.3.6.tgz#6d67359da890c742005fa89d20be3ded31cc1d2a" + integrity sha512-/CKsZYmAwXeNh8KpD/CF9hcJDZNhdb2ICN8+qgqOt5sUu9liZIxZ1R284TNj5MtPt8RjG5X0xn6WSqL0kcKMBg== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +raw-loader@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" + integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +requireindex@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" + integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.20.0, resolve@^1.22.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +script-loader@^0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/script-loader/-/script-loader-0.7.2.tgz#2016db6f86f25f5cf56da38915d83378bb166ba7" + integrity sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA== + dependencies: + raw-loader "~0.5.1" + +semver@^7.3.6: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slim-select@^2.4.5: + version "2.4.5" + resolved "https://registry.yarnpkg.com/slim-select/-/slim-select-2.4.5.tgz#7453d9469c4ce6d6121608a8e384561e62057382" + integrity sha512-64plTJiYwJJqvOQrf3Ty8BvgC3GbNPlGelT7AdhLZ8Ax0z7hxyhHHc5Mfhp1BUVkDSt0+gTpRZH2McIrjia68Q== + +string.prototype.trimend@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +vue-eslint-parser@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.1.0.tgz#0e121d1bb29bd10763c83e3cc583ee03434a9dd5" + integrity sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ== + dependencies: + debug "^4.3.4" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.3.0" + espree "^9.3.1" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^7.3.6" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==